Не могу написать на SC1DRL Регистр на доске 68HC12 - что мне не хватает?

StackOverflow https://stackoverflow.com/questions/4139999

  •  30-09-2019
  •  | 
  •  

Вопрос

Я пытаюсь написать, чтобы использовать множественный последовательный интерфейс на 68HC12, но я не могу получить его, чтобы поговорить. Я думаю, что я изолировал проблему, чтобы не иметь возможности писать в регистр SC1DRL (Data Regional Data Low).

Ниже приведен из моего SCI ISR:

else if (HWRegPtr->SCI.sc1sr1.bit.tdre) {
    /* Transmit the next byte in TX_Buffer. */
    if (TX_Buffer.in != TX_Buffer.out || TX_Buffer.full) {
        HWRegPtr->SCI.sc1drl.byte = TX_Buffer.buffer[TX_Buffer.out];
        TX_Buffer.out++;
        if (TX_Buffer.out >= SCI_Buffer_Size) {
            TX_Buffer.out = 0;
        }
        TX_Buffer.full = 0;
    }
    /* Disable the transmit interrupt if the buffer is empty. */
    if (TX_Buffer.in == TX_Buffer.out && !TX_Buffer.full) {
        Disable_SCI_TX();
    }
} 

TX_BUFFER.BUFFER имеет правильную вещь при индексе TX_BUFFER.OUT, когда его содержимое записывается в HWREGPTR-> SCI.SC1DRL.BYTE, но мой отладчик не показывает изменения, и никакие данные не передаются по последовательному интерфейсу.

Кто-нибудь знает, что мне не хватает?

редактировать:

Hwregptr определяется как:

extern HARDWARE_REGISTER *HWRegPtr;

Hardware_register - это гигантская структура со всеми регионами в нем, и является волатилем.

Это было полезно?

Решение

Вероятно, что SC1DRL - это только для записи (проверьте официальные документы, чтобы быть уверенным - Google не поднимается правильным PDF для меня). Это означает, что вы не можете прочитать его обратно (даже с североценным отладчиком), чтобы проверить свой код.

Как определяется HWREGPT? У него есть volatile В нужных местах, чтобы гарантировать, что компилятор относится к каждой записи через этот указатель как то, что должно произойти немедленно?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top