1

我正在尝试编写使用 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.buffer 在将其内容写入 HWRegPtr->SCI.sc1drl.byte 时在索引 TX_Buffer.out 处具有正确的内容,但我的调试器没有显示更改,并且没有数据通过串行接口传输。

有人知道我错过了什么吗?

编辑:

HWRegPtr 定义为:

extern HARDWARE_REGISTER *HWRegPtr;

HARDWARE_REGISTER 是一个巨大的结构,其中包含所有寄存器,并且是易变的。

4

1 回答 1

2

SC1DRL 很可能是一个只写寄存器(检查官方寄存器文档以确保 - 谷歌没有为我打开正确的 PDF)。这意味着您无法将其读回(即使使用目标内调试器)来验证您的代码。

HWRegPtr 是如何定义的?它是否volatile在正确的位置确保编译器将通过该指针的每次写入都视为必须立即发生的事情?

于 2010-11-10T01:42:50.800 回答