工具与软件:
尊敬的组:
当位6为 R/W 时、将只读位7清零、TRM SCIFFRX 寄存器的描述字段好像有误码? 位零在以10为底的位置是实数、不考虑位1、一个拼写错误?
用于读/写的定义 SCIFFRx 中断状态和清除似乎不正确、在 FIFFO 级别中断模式下无法读取清除正确的位。 SCI_O_RXST 寄存器中的异常可疑 SCI_RXST_BRKDT 返回在 FIFO 级别模式下使用的状态、仅通过 interruptStatus |= SCI_INT_RXRDY 驱动 RXISR。
考虑调试 GEL 寄存器命名位字段(RXWAKE)标志位根本不是 PIE /CPU 中断状态标志? 也许在阻塞模式下、一些 C2KWare 状态和清除调用会正确工作、以便通过读取缓冲区清除阻塞标志。 此外、对于 FIFO 级别模式中断、TRM 状态会将 RX 缓冲区溢出错误检测例程放置在 ISR 中、并启用 BRKDT 中断以早期错误检测。 然而、在进入 SCIRXFFE ISR 之后、通过调用 SCI_clearInterruptStatus ()来清除接收器标志 OE、PE、FE 状态标志。
看似 C2Kware 需要将 TX/RX 缓冲区读取模式 ISR 和 SCIFRX/TX 中断状态以及中断清除功能 FIFO 级别模式分开。 C2KWare 驱动程序库将两种 ISR 模式分别强制使用一个功能、并在要将 RX 错误软件复位放入 RXISR 中时强制执行 RX 错误软件复位。 库混乱的结果;未清除 SCIFFRx 中断存在随机 OE 错误、为 SCIFFRx 寄存器定义了错误的位(sci.h)、如下所示。

SCI_clearInterruptStatus():
if((HWREGH(base + SCI_O_FFRX) & SCI_FFRX_RXFFINT) == SCI_FFRX_RXFFINT)
{
interruptStatus |= SCI_INT_RXFF; // 0x10U ??
}
SCI_getInterupt Status()
if((HWREGH(base + SCI_O_FFRX) & SCI_FFRX_RXFFINT) == SCI_FFRX_RXFFINT)
{
interruptStatus |= SCI_INT_RXFF; // 0x40U ??
}
