問題のチップはPIC24FJ256GB210です
100 ピン TQFP フォーム ファクターです。
2 つのマイクロプロセッサを搭載した組み込みシステムがあります。
2 つのマイクロプロセッサは、PIC24 の UART #3 にマップされている (私によると) UART を使用して通信します。
UART #3 に 4 バイトを配置します。すべてうまくいきます。5バイト目は入りません。
FIFOバックアップと言います。
私の地元のハードウェアの専門家は、フロー制御をオフにすると、何があってもバイトが送信されると言っています。
これは本当ですか ?私は前にそれを聞いたことがありません。反対側のハードウェア信号だと思いました。つまり、FIFO バッファがこちら側にスペースを確保する前に、読み取り信号が反対側で発生する必要があります。
「フロー制御をオフにする」という彼の定義は、RTS (Request to Send) または CTS (Clear To Send) ピンをボード上の対応する物理ピンにマップするために PPS (Peripheral Pin Select) を使用しないことです。
私はそれをしました。結果: 変化なし。FIFO バッファはまだいっぱいです。4 番目のバイトが入った後、「#UTXBF」ビットがクリアされることはありません。
物理ピンに番号とラベルを付けた回路図があります。
私はソース コードと MpLab を持っており、レジスタ レベル、アセンブリ言語の命令自体で実行可能ファイルを表示しています。
UART #2 と UART #1 をマッピングする方法とまったく同じ方法で UART #3 のピンをマッピングしており、他の 2 つのピンは両方とも完全に機能します。
番号は異なりますが、命令シーケンスは同じです。番号はピンと一致します。
これを 3 度目にデバッグし、各レジスタの各ビットを監視し、それらをマニュアルと比較して、正しい特殊機能レジスタの正しいビット位置に正しい対応する番号があることを確認します。
これは MpLab の逆アセンブラー ウィンドウからのもので、オペコードはどのビットが設定され、クリアされているかを正確に示しています。
206CC1 mov.w #0x6cc,0x0002 Mov #Uart_3_Tx_PPS_Output_Register, W1 ;This is the register we want
21C002 mov.w #0x1c00,0x0004 Mov #Uart_3_Tx_Or_In_Bit_Pattern, W2 ;These are the bits we want on
2C0FF3 mov.w #0xc0ff,0x0006 Mov #Uart_3_Tx_And_Off_Bit_Pattern, W3 ;These are the bits we want off
780211 mov.w [0x0002],0x0008 Mov [W1], W4 ;The existing pattern
618204 and.w 0x0006,0x0008,0x0008 And W3, W4, W4 ;Turn existing bits off
710204 ior.w 0x0004,0x0008,0x0008 Ior W2, W4, W4 ;Turn Desired bits on
780884 mov.w 0x0008,[0x0002] Mov W4, [W1] ;And that's all there is to it
実行後、RPOR6
(これはUart_3_Tx_PPS_Output_Register
)が含まれています0x1C06
これは、マスクとパターンの作成に使用される inc ファイルからのものです。(実際の指示を含むソース ファイルに数値をハード コーディングすることは避けようとしています。)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;
;; ;;
;; Map UART # 3 Tx Pin ;;
;; ;;
;; Docs for this are: Manual DS39975A ;;
;; ;;
;; Find "TABLE 2: COMPLETE PIN FUNCTION DESCRIPTIONS FOR 100-PIN DEVICES" ;;
;; in Manual DS39975A, Page 8, where We find the secret PIC Pin Names for ;;
;; the actual physical pin numbers ;;
;; ;;
;; TABLE 10-4: SELECTABLE OUTPUT SOURCES (MAPS FUNCTION TO OUTPUT) ;;
;; Page 160, We find the output function numbers ;;
;; ;;
;; ;;
;; ;;
;; PIC Associated Output ;;
;; Circuit Physical PIN Control Actual Func. ;;
;; Function Pin NAME Reg Bits Number ;;
;; ------------ ------ ----- ------- ---- ----- ;;
;; ;;
;; UART #3, TX Pin 23 RP13 RPOR6 3F00 28 Output ;;
;; ;;
;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
その知識をファミリ データ シートのこれらのメモと組み合わせて、意味のある名前の定数を作成しました。
.Equiv Uart_3_Tx_PPS_Output_Register, RPOR6 ;Register 10-35, Page 177
.Equiv Uart_3_Tx_Reg_Control_Bits, 0x3F00 ;Look for "RP13R" in the big include file ;;;DEBUG DEBUG Date: 2013-02-05 Time: 20:47:02
.Equiv Uart_3_Tx_Output_Func_Number, 28 ;From Table 10-4, P. 160
.Equiv Uart_3_Tx_And_Off_Bit_Pattern, ~(Uart_3_Tx_Reg_Control_Bits)
.Equiv Uart_3_Tx_Or_In_Bit_Pattern, ( Uart_3_Tx_Output_Func_Number << RP13R0 )
ファイルから:「p24FJ256GB210.inc」(引用符なし)
;----- RPOR6 Bits -----------------------------------------------------
.equiv RP12R0, 0x0000
.equiv RP12R1, 0x0001
.equiv RP12R2, 0x0002
.equiv RP12R3, 0x0003
.equiv RP12R4, 0x0004
.equiv RP12R5, 0x0005
.equiv RP13R0, 0x0008 ;;; <<<<<----- RP13 is in the right place
.equiv RP13R1, 0x0009
.equiv RP13R2, 0x000A
.equiv RP13R3, 0x000B
.equiv RP13R4, 0x000C
.equiv RP13R5, 0x000D
結局のところ、UART の反対側の PIC は、私がこちら側に入力した最初のバイトを認識しないようですRTS
。CTS
間違ったビットを間違った場所に置いたところを誰かが見ていますか?
現時点では、この質問に自信を持って「はい」または「いいえ」と答えることはできません: UART #3 TX 機能は、100 ピン TQFP 構成の PIC24FJ256GB210 の物理ピン 23 に正しく接続されていますか?
ここで何が起こっているのかを特定できたら、どうもありがとう。