关 闭

新闻中心

EEPW首页 > 工控自动化 > 设计应用 > STM32中采用DMA实现方波的产生和捕获

STM32中采用DMA实现方波的产生和捕获

作者:时间:2011-11-05来源:网络收藏

4 +TIMx多路
假设有一个需要记录并分析。一种方案是设置CPU引脚在上升沿和下降沿中断,然后在中断中记录该时刻。这种处理方式的实时性和效率会差一些,因为进出中断本身就需要一定的指令周期(Cortex-M3为12+12或6+12个系统周期),而且需要考虑多个中断同时发生的最坏情况,对可检测的最大频率有一定的限制。另一种方案是轮询的方式不断查询该引脚的状态并记录上升沿和下降沿的时刻,这种方式下系统几乎不能处理其他的任务了。
+TIMx的方式来上升沿和下降沿时刻,有利于提高系统的实时性和执行效率。通过TIMx的功能将方波的电平跳变时刻记录在比较/捕获寄存器中,然后将该值自动传输到内存,只有当DMA触发半满或全满事件时CPU才需要进入中断处理数据。通过记录方波的上升沿和下降沿时刻,然后将两个时刻相减,进而就能得到所有低沿和高沿的宽度,最后进行后续的分析处理。这种方式下中断频率仅为方波频率的4/N(N为缓冲区大小)。
图1为TIMx工作在捕获模式下一个通道的示意图。

本文引用地址:http://www.eepw.com.cn/article/161424.htm

d.jpg


其中TI1为CPU引脚的输入,经过滤波(新的电平必须保持一定时间才认为有效,以防止高频噪声的干扰)后进入后继的边沿极性选择,最后经过分频作为捕获信号的输入。这里TI2F为相邻通道经过滤波后的信号,也就是说一个引脚的信号可作为TIMx两个通道的输入捕获信号,这样信号只需要接一个CPU引脚就可以触发两个时钟通道了。
将输入方波接到CPU一个引脚上,假设该引脚对应于图上的TI1,设定其在下降沿触发通道1的捕获事件,而其在上升沿触发通道2的捕获事件,事件发生后申请DMA将捕获的比较/捕获寄存器的值保存起来。示例代码如下:
c.jpg
其他部分与第3节中比较输出的代码基本一致。

5 总结
测试中系列微控制器工作在36 MHz,可出1路最高1.5 MHz的方波,可捕获1 MHz的方波,而此时CPU的执行几乎不受影响。这里采用DMA来方波的和捕获,极大地提高了系统的实时性和执行效率,减少了中断次数,节省了宝贵的资源。这种方案也可以用来高效的模拟串口。
DMA的传输需要多个系统周期的,例如采用DMA实现内存到内存的搬移,每次传输需要5个系统周期,而内存到外围的一次传输需要2个APB周期+5个AHB周期。这样用上述方法的方波最小沿(低沿或高沿)为14个周期(包括比较/捕获寄存器到内部影子寄存器的传输等)。若有更高的需求,应考虑其他的实现方案。另外,若有多个DMA同时工作,应考虑最坏情况下DMA的响应时间,以避免错误发生。

尘埃粒子计数器相关文章:尘埃粒子计数器原理

上一页 1 2 下一页

评论


相关推荐

技术专区

关闭