UTXEN не будет устанавливать

Чип PIC24FJ256GB210

Бит #UTXEN на UART #3 не будет установлен.

Он устанавливает отлично на 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

FAILS...

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

Поэтому я подумал: "О, это один бит, который я хочу, и полное перемещение слова поверх всех битов, доступных только для чтения, как-то вызывает проблему. Я просто сделаю один бит".

Нет, до сих пор не установите этот бит.

FAILS...

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

--ОБНОВИТЬ--

Я могу установить бит в MpLab. Какая разница?

Я действительно смущен. Что еще может быть здесь задействовано, что мешает установить этот бит?

2 ответа

Решение

Ошибка

Наряду с регистром состояния UART для каждого UART в PIC24, который я использую, есть соответствующий регистр режима UART.

В этом случае его зовут U3MODE,

В этом регистре соответствующего режима есть бит "UART Enable"

В этом случае этот бит называется UARTEN, что (согласно моей документации для этого конкретного PIC) старшего разряда.

По материалам дела p24FJ256GB210.inc который я использую, чтобы собрать это, они определили это так...

    .equiv UARTEN,  0x000F

Если этот бит в регистре U3MODE не установлен, прежде чем пытаться установить UTXEN бит в соответствующем регистре состояния (в этом случае U3STA регистр), то регистр статуса не изменит своего значения так, как вы хотите.

Исправление

Установить UARTEN немного в U3MODE сначала зарегистрируйтесь, затем вы можете установить UTXEN немного в U3STA регистр.

Пример кода

Я скопировал из окна разборки здесь, чтобы дать и исходные, и фактические шестнадцатеричные значения, и физическое шестнадцатеричное кодирование каждой инструкции.

Ярлыки - это на самом деле просто consttants, которые я придумал; код, который работает, код, который вы можете прочитать; такого рода идеи. Вы можете увидеть их значения в разделах разборки каждой инструкции.

Большое дело в этом случае состоит в том, чтобы убедиться, что бит старшего разряда 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

Подвернулся этим сам (спасибо за пост) и в итоге нашел:

Справочное руководство по семейству микрочипов PIC24F, раздел 21.4 КОНФИГУРАЦИЯ UART, подраздел 21.4.1 Включение UART говорит: "Бит UTXEN не должен устанавливаться, пока не будет установлен бит UARTEN, иначе передачи по UART не будут включены".

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

Другие вопросы по тегам