题
我正在尝试写入68HC12上的多个串行界面,但AM无法交谈。我认为我已经将问题隔离到无法写入SC1DRL寄存器(SCI数据寄存器低)。
以下是我的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在index tx_buffer.out上有正确的问题。
有人知道我缺少什么吗?
编辑:
HWRegPTR定义为:
extern HARDWARE_REGISTER *HWRegPtr;
Hardware_Register是一个巨大的结构,其中所有寄存器都具有波动性。
解决方案
SC1DRL很可能是仅写作寄存器(请检查官方注册文档确保 - Google并没有为我调整正确的PDF)。这意味着您无法将其读回(即使使用靶向调试器)来验证您的代码。
HWRegPTR如何定义?有 volatile
在正确的位置,以确保编译器将通过该指针的每条写作都视为必须立即发生的事情?
不隶属于 StackOverflow