在经历了很多混乱之后、我认为我最终有了与 DMA 一起工作的 UART 传输。 但是、它的工作方式似乎有点奇怪、因此我想确保它实际按预期工作。 首先、我在禁用中断的情况下设置 UART、但注册了 UART 中断处理程序。 然后、我在启用组合中断的情况下设置 DMA。 最后一步是调用:
UARTDMAEnable (UART0_BASE、UART_DMA_TX);
这会导致传输开始。 一旦传输完成、UART 中断就会被触发。 除非正确的 REQDONE 位被写入、否则程序将卡在中断中、并且在启用 UART DMA 的情况下无法写入该位、因此在 UART 中断处理程序中、我必须按顺序进行以下两次调用:
UARTDMADisable (UART0_BASE、UART_DMA_TX);
uDMAIntClear (UDMA0_BASE、0x00000004);
此时、传输完成。 DMA 中断处理程序在任何时候都不会被触发。
我一直在浏览技术参考手册、CC13xx 驱动程序库文档和源代码以及寄存器定义。 即使现在我已经开始工作了、这也不是很明显的、它应该是通过阅读文档来工作的。
这是它应该怎么工作的,还是我刚刚幸运地得到了某种攻击?