是否有可能检测到Cortex M3上的DMA通道何时进入空闲状态?

时间:2012-05-21 10:50:14

标签: embedded arm dma cortex-m3

我刚刚接手了一个为STM32 Cortex M3微控制器开发C代码的项目。

我立即遇到的一个问题是,我有一个自由运行的DMA通道,可以在2个USART之间传输数据,但有时需要将来自其他来源的数据发送到目标USART。

有没有办法检测DMA何时忙于传输数据或空闲,或者在传输完成时是否触发了任何中断。

非常感谢任何回复,

戴夫

2 个答案:

答案 0 :(得分:3)

DMA完成既可以轮询也可以中断驱动。详细信息在特定部分的参考手册中 - “STM32 Cortex-M3”不够具体,无法将其缩小到您需要的文档,但您可以从ST's website下载它

实现DMA的最简单方法是使用STM32 Stanadard Peripheral Library。它包括所有外设的示例项目,包括USART的DMA轮询和DMA中断示例。您的工具链可能已包含库,但可能不是所有示例。即使您已经拥有该库,也最好检查它是否为最新版本。

答案 1 :(得分:2)

以下是检查DMA操作是否已完成的操作:

DMA_Cmd(DMA2_Channel5, ENABLE); // start
while (!DMA_GetFlagStatus(DMA2_FLAG_TC5)); // wait to finish
DMA_ClearFlag(DMA2_FLAG_TC5); // clear flag (needed?)