工具/软件:
您好、
我目前正在 MSPM0上开发一个使用 DMA 进行 RX 数据处理的 UART 应用程序。 我遇到的行为似乎与技术参考手册中的说明不一致。
根据 MSPM0技术参考手册(TRM)、当 RX FIFO 中的条目数小于触发电平时、接收中断(RXINT)将被清除。 DMA 应仅传输足够的数据以将 FIFO 级别降低到刚好低于阈值。
但是、在 UART + DMA 开发期间、我观察到在特定条件下、DMA 消耗整个 FIFO。
我启用了 FIFO、将 RX FIFO 阈值级别设置为"RX FIFO 包含>= 2"条目、并将 DMA 传输模式设置为"单"。
当我向串行端口发送两个字节时、应将一个字节从 RXFIFO 传输到 DestAddr、并在 RXFIFO 中留下一个字节。 但我发现这两个字节都被传输了。
当我向串行端口发送三个字节时、会传输两个字节、保留一个字节。
当我向串行端口发送四个字节时、它会传输所有四个字节。
然后、将 RX FIFO 阈值级别更改为 RX FIFO contains>= 3个条目。
发送3个字节→全部3个已传输
发送4个字节→3个已传输、1个保留
发送5个字节→3个已传输、2个保留
发送6个字节→全部6个已传输
总体而言、当接收到的字节数量是阈值的确切倍数时、DMA 意外完全耗尽 FIFO、这与 TRM 的说明相矛盾。 相比之下、非倍数的表现符合预期。 仅传输最小字节数以清除 RXINT。
这种行为是设计预期行为吗? 如果没有、是否存在错误或解决方法?
谢谢!
这就是我用于测试的项目: