欢迎光临散文网 会员登陆 & 注册

为什么DMA中断不能触发

2023-04-10 19:12 作者:mymymind  | 我要投稿

        试用国产单片机,测试IIS的DMA功能,参考了固件库例子的IIS发送功能,而DMA功能的测试方法各种国产单片机粒子无一例外的使用查询DMA中断标志位方式,开启DMA传送之后while等待DMA中断标志,之后逐个对比数据验证。

        实际应用中往往需要根据DMA的半中断等中断第一时间处理大量连续数据的不间断传送功能,因此就需要在中断回调函数中判断中断类型以及处理相应的逻辑或重新开启DMA、清除中断标志等等。

        自己尝试开启DMA中断功能,查询到可用函数为DMA_ConfigInt,打开DMA的中断功能及中断响应程序如下。

        IIS2的DMA通道为DMA1的CH5。

        测试了很多次,DMA发送过程都没问题,但就是没法进入中断,尝试修改DMA中断使能程序的开启位置也没有效果。难道还需要同时开启IIS的发送完成中断,测试也不行。

        直接看DMA_CH5->CFG的值,一直是没有打开中断使能,根据数据手册和固件库源码计算DMA_CH5的基地址。 结果是完全一致的,那就是写如的值不对。

        开段中断本质上就是写寄存器的值,只是简单的位操作,那么结果只有一个,写入的值不对。发送完成中断就是将1位写1。

        而实际上写入的位根本不对。

        手动写一个0x02就正常了,也就是上方的DMA_INT_TXC,显然下方的一堆命名什么具有迷惑性,这么高的有效位实际上只有中断标志位和清除中断标志位用得到,也就是下方这些标志位宏定义。


为什么DMA中断不能触发的评论 (共 条)

分享到微博请遵守国家法律