4

問題のチップは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 は、私がこちら側に入力した最初のバイトを認識しないようですRTSCTS

間違ったビットを間違った場所に置いたところを誰かが見ていますか?

現時点では、この質問に自信を持って「はい」または「いいえ」と答えることはできません: UART #3 TX 機能は、100 ピン TQFP 構成の PIC24FJ256GB210 の物理ピン 23 に正しく接続されていますか?

ここで何が起こっているのかを特定できたら、どうもありがとう。

4

3 に答える 3

2

ここで、エラーと問題の答えを見つけました

特殊機能レジスタを見るU3STA

ビットを探しますUTXEN

設定する必要があります。

そうでない場合、FIFO がいっぱいになり、4 番目のバイトの後に詰まります。

UTXENビット #10 です。アセンブラとコンパイラは、おそらく次に大きい番号のバイトで #2 に変更します。

于 2013-02-20T02:43:04.520 に答える
1

私の地元のハードウェアの専門家は、フロー制御をオフにすると、何があってもバイトが消えると言います。

はい、そうです。しかし、それには時間がかかります。シリアルポートは非​​常に遅いです。FIFOから1バイトを送信するには、9600ボーで約1ミリ秒の永遠の時間がかかります。これが、UARTが通常割り込みハンドラーによってより大きなバッファーから供給される理由です。

于 2013-02-12T19:28:50.343 に答える
1

PIC24 マイクロコントローラでのこの動作について、MicroChip から発行された正誤表があります。参照: http://ww1.microchip.com/downloads/en/DeviceDoc/80522c.pdf .

ドキュメントの 4 ページには、次のことが示されています。

Module: UART (TX Buffer)
If the transmit buffer is filled sequentially with
four characters, the characters may not be
transmitted in the correct order. 
Work around
Do not completely fill the buffer before transmit-
ting data; send three characters or less at a
time.

代わりに TRMT フラグを使用する別の回避策が開発者によって提案されています。次を参照してください。

それが役に立てば幸い。

于 2013-02-12T18:14:55.557 に答える