Не могу написать на SC1DRL Регистр на доске 68HC12 - что мне не хватает?
Вопрос
Я пытаюсь написать, чтобы использовать множественный последовательный интерфейс на 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
В нужных местах, чтобы гарантировать, что компилятор относится к каждой записи через этот указатель как то, что должно произойти немедленно?