我正在尝试写入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 在正确的位置,以确保编译器将通过该指针的每条写作都视为必须立即发生的事情?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top