工具/软件:
您好、
我使用 SCI 并启用了 TX FIFO (9600bps)。 由于设计要求、我不能使用中断或 DMA。
为了发送一些日志消息、我有一个循环中多次调用的函数。
在函数中、我检查 TX fifo 中有多大的空间、并最多填充 16 个字符:
while(SciRegs->SCIFFTX.bit.TXFFST < 16 && transmit_index < data_out_length)
{
SciRegs->SCITXBUF.all = data_out[transmit_index++];
}
The problem is that I observe random missing characters.
I prepared an experiment with logic analyser where:
TXD line is observed,each write to SCITXBUF is signaled on specific gpio by state change (6th green signal below),initial contents of sent buffer is printed on another serial

正确的行为是:
- 在第一个函数调用时、当 FIFO 为空时、一个'while '循环中有 17 次写入(我假设 FIFO 中有 16 次、TX 寄存器中有 1 次)(每次写入 FIFO~0、35)、
- 传输每个字符后、'while '循环仅添加一个字符。
出错时、TXD 上会缺少预期的字符。
问题之前是两次写入 fifo、当然会导致 fifo 溢出 — 请参阅双倍写入 FIFO(第一个垂直绿色标记 2xWR)(写入之间有 17 或 32us 间隙)。
在 while 循环的条件下、对 FIFO 的写入次数由 TXFFST 控制。
我的结论是读取 TXFFST 可能会导致值不正确。

SCI 硬件中是否存在种族危险问题?
此致、
Piotr Romaniuk