Не могу записать в регистр SC1DRL на плате 68HC12 - чего мне не хватает? - PullRequest
1 голос
/ 10 ноября 2010

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

Следующее из моего ISI SCI:

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.буфер имеет правильную вещь в индексе TX_Buffer.out, когда его содержимое записывается в HWRegPtr-> SCI.sc1drl.byte, но мой отладчик не показывает изменения, и никакие данные не передаются через последовательный интерфейс.

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

edit:

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

extern HARDWARE_REGISTER *HWRegPtr;

HARDWARE_REGISTER - это гигантская структура со всеми регистрами в нейи является летучим.

1 Ответ

2 голосов
/ 10 ноября 2010

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

Как определяется HWRegPtr? Имеет ли он volatile в нужных местах, чтобы компилятор обрабатывал каждую запись через этот указатель как нечто, что должно происходить немедленно?

...