智能车制作

标题: 【揭秘】Kinetis多路硬件 脉冲累加 的实现方法 [打印本页]

作者: 洋葱圈    时间: 2012-3-30 13:31
标题: 【揭秘】Kinetis多路硬件 脉冲累加 的实现方法
Kinetis只有一路低功耗脉冲累加通道确实蛋疼,但是人类的智慧是无穷的,刚刚发现已经有牛人实现了多达10路的脉冲累加,确实佩服,可惜没有提供源码。

虽然这个方法有点大材小用,但是我也在这里说下我的思路吧:
要想不占用CPU、不进中断函数实现硬件计数功能,首先想到的是DMA功能。
首先开启一路用GPIO口触发的DMA通道,上升下降沿均可。
指定什么源地址和目的地址均可,设置最长的循环计数。
接下来只要开启PIT定时中断,在定时器中断函数里读取DMA循环计数值便可了。
不过DMA循环计数器最大计数为32767,要考虑溢出问题。

涉及到的DMA寄存器是:DMA_TCD_CITER_ELINKNO
开启DMA的GPIO触发后,便可定时读取该寄存器的低15位即可。
因此只要是能用DMA触发的GPIO口均可实现脉冲累加。
DMA的底层调用驱动可以见http://www.znczz.com/thread-97046-1-1.html

不知道野火兄是不是这个思路,欢迎各位指教。


补充内容 (2012-3-30 14:06):
源码见这里:
http://www.znczz.com/forum.php?m ... 9&fromuid=77863
作者: blueskywalker    时间: 2012-3-30 13:37
咔咔,顶楼主。等野火公布了就知道了
作者: 洋葱圈    时间: 2012-3-30 13:46
blueskywalker 发表于 2012-3-30 13:37
咔咔,顶楼主。等野火公布了就知道了

同等。
作者: sleep_ball    时间: 2012-4-1 19:53

作者: xining_yang    时间: 2012-4-1 21:04

作者: old00brish    时间: 2012-4-1 23:53
用ftm啊,一个用来生成pwm,另两个计数
作者: 洋葱圈    时间: 2012-4-2 01:12
old00brish 发表于 2012-4-1 23:53
用ftm啊,一个用来生成pwm,另两个计数

我们说的是不经过CPU、不中断,朋友。只用硬件计数。

作者: old00brish    时间: 2012-4-2 13:56
头一次听说ftm是软件 要占用内核资源
作者: old00brish    时间: 2012-4-2 14:02
我想楼主的ftm耗内核的意思是用捕捉触发中断吧?
用捕捉作为ftm硬件计数器的时钟源,就能实现三路计数了啊,cpu根据需要读计数器值并清零就好了
作者: 洋葱圈    时间: 2012-4-2 15:27
old00brish 发表于 2012-4-2 13:56
头一次听说ftm是软件 要占用内核资源

还有,我们讨论的是脉冲累加。

作者: jaketao139    时间: 2012-4-17 18:27
用DMA做计数的确是个好方法!!!
作者: jimmy9065    时间: 2012-4-29 14:17
请教使用你们的底层驱动要如何实现这个功能呢?
作者: lianghuihao    时间: 2012-9-18 23:03
楼主,我初始化两路dma就不准了,是什么原因啊啊啊?




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2