我正在尝试写使用68HC12上的多个串行接口,但我不能让它说话。我想我已经解决了无法写入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.out的内容被写到HWRegPtr->SCI.sc1drl.byte时,TX_Buffer.buffer在索引HWRegPtr->SCI.sc1drl.byte中有正确的内容,但是我的调试器没有显示更改,也没有数据通过串行接口传输。
有人知道我错过了什么吗?
编辑:
HWRegPtr定义为:
extern HARDWARE_REGISTER *HWRegPtr;HARDWARE_REGISTER是一个包含所有寄存器的巨型结构,并且是易失性的。
发布于 2010-11-10 09:42:51
SC1DRL很可能是一个只写的注册表(请查看官方的注册表文档以确保--谷歌没有为我找到正确的PDF )。这意味着您无法回读它(即使使用目标内调试器)来验证您的代码。
HWRegPtr是如何定义的?它是否在正确的位置有volatile,以确保编译器将通过该指针的每一次写入都视为必须立即发生的事情?
https://stackoverflow.com/questions/4139999
复制相似问题