0

チップはPIC24FJ256GB210

UART #3 の #UTXEN ビットは設定されません。

まったく同じ命令シーケンスを使用して、UART #1 で問題なく設定されます。UART #2 も同じです。

動作...

 096E6  204000     mov.w #0x400,0x0000            111:           Mov     #Uart_1_Status_Control_Pattern, W0      ;Defined in CONSTANT.INC file
 096E8  881110     mov.w 0x0000,0x0222            112:           Mov     W0, U1STA                               ;ibid, page 230 Reg 17-2

失敗...

09748  204000     mov.w #0x400,0x0000            248:           Mov.W   #Uart_3_Status_Control_Pattern, W0              ;Defined in CONSTANT.INC file
0974A  881290     mov.w 0x0000,0x0252            249:           Mov.W   W0, U3STA                                       ;ibid, page 230, Reg 17-2

だから私は、「ああ、それは私が欲しい単一のビットであり、すべての読み取り専用ビットの上に完全な単語が移動すると、どういうわけか問題が発生します。単一のビットセットを実行します」と考えました。

いいえ、まだそのビットを設定しません。

失敗...

 09754  A84253     bset.b 0x0253,#2               256:      Bset.W  U3STA, #UTXEN                   ;DEBUG DEBUG DEBUG Date: 2013-02-18  Time: 11:37:07 

- アップデート -

MpLab でビットを設定できます。違いは何ですか?

私は本当に混乱しています。そのビットが設定されないようにするために、他に何が関係している可能性がありますか?

4

2 に答える 2

0

エラー

UART ステータス レジスタと共に、私が使用している PIC24 の各 UART に対応する UART モード レジスタがあります。

この場合、その名前はU3MODEです。

その対応するモード レジスタに「UART イネーブル」ビットがあります。

この場合、そのビットは と呼ばれUARTEN、これは (この特定の PIC に関する私のドキュメントによると) 上位ビットです。

これをアセンブルするために使用するファイルによると、次のp24FJ256GB210.incように定義されています...

    .equiv UARTEN,  0x000F

対応するステータス レジスタ (この場合はレジスタ)のビットを設定する前にU3MODE レジスタのそのビットが設定されていない場合、ステータス レジスタはその値を希望どおりに変更しません。UTXENU3STA

修正

最初にレジスタにUARTENビットを設定してから、レジスタにビットを設定できます。U3MODEUTXENU3STA

コード例

ここでは逆アセンブリ ウィンドウからコピーして、ソースと実際の 16 進数値、および各命令の物理的な 16 進数エンコードを提供しています。

ラベルは実際には私が作った単なる定数です。機能するコード、読めるコード。そういう考え。これらの値は、各命令の逆アセンブリ セクションで確認できます。

この場合の重要な点は、U3MODEレジスタにビットを設定する前に、レジスタの上位ビットを確認することですU3STA

これにより、この問題が修正されました。

                                                                             ;-------------------------------------
                                                                             ; --- THIS MUST COME FIRST ---
                                                                             ;
280080  mov.w #0x8008,0x0000  Mov.W   #Uart_3_Mode_Pattern, W0            ;Defined in Constant.Inc File
881280  mov.w 0x0000,0x0250   Mov.W   W0, U3MODE                          ;Documented in Manual DS39975A, p. 228, Register 17-1
                                                                             ;
                                                                             ; --- IN ORDER FOR THIS TO WORK ---
                                                                             ;
204000  mov.w #0x400,0x0000   Mov.W   #Uart_3_Status_Control_Pattern, W0  ;Defined in CONSTANT.INC file
881290  mov.w 0x0000,0x0252   Mov.W   W0, U3STA                           ;Manual DS39975A, page 230, Reg 17-2
于 2013-02-22T17:43:32.080 に答える
0

これにつまずいて(投稿してくれてありがとう)、最終的に見つけました:

Microchip 社の PIC24F ファミリ リファレンス マニュアル、セクション 21.4 UART CONFIGURATION、サブセクション 21.4.1 で UART を有効にすると、「UARTEN ビットが設定されるまで UTXEN ビットを設定しないでください。そうしないと、UART 送信が有効になりません。」

http://ww1.microchip.com/downloads/en/DeviceDoc/39708B.pdf

于 2015-07-27T15:23:45.590 に答える