智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 4976|回复: 12
打印 上一主题 下一主题

【揭秘】Kinetis多路硬件 脉冲累加 的实现方法

  [复制链接]

59

主题

1029

帖子

0

精华

版主

有什么需帮助的?

Rank: 9Rank: 9Rank: 9

积分
15127

热心会员奖章论坛元老奖章优秀会员奖章在线王奖章

威望
11058
贡献
1409
兑换币
1728
注册时间
2011-12-18
在线时间
1330 小时
跳转到指定楼层
1#
发表于 2012-3-30 13:31:48 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
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

59

主题

1029

帖子

0

精华

版主

有什么需帮助的?

Rank: 9Rank: 9Rank: 9

积分
15127

热心会员奖章论坛元老奖章优秀会员奖章在线王奖章

威望
11058
贡献
1409
兑换币
1728
注册时间
2011-12-18
在线时间
1330 小时
2#
 楼主| 发表于 2012-3-30 13:46:01 | 显示全部楼层
blueskywalker 发表于 2012-3-30 13:37
咔咔,顶楼主。等野火公布了就知道了

同等。
回复 支持 反对

使用道具 举报

59

主题

1029

帖子

0

精华

版主

有什么需帮助的?

Rank: 9Rank: 9Rank: 9

积分
15127

热心会员奖章论坛元老奖章优秀会员奖章在线王奖章

威望
11058
贡献
1409
兑换币
1728
注册时间
2011-12-18
在线时间
1330 小时
3#
 楼主| 发表于 2012-4-2 01:12:47 | 显示全部楼层
old00brish 发表于 2012-4-1 23:53
用ftm啊,一个用来生成pwm,另两个计数

我们说的是不经过CPU、不中断,朋友。只用硬件计数。
回复 支持 反对

使用道具 举报

59

主题

1029

帖子

0

精华

版主

有什么需帮助的?

Rank: 9Rank: 9Rank: 9

积分
15127

热心会员奖章论坛元老奖章优秀会员奖章在线王奖章

威望
11058
贡献
1409
兑换币
1728
注册时间
2011-12-18
在线时间
1330 小时
4#
 楼主| 发表于 2012-4-2 15:27:28 | 显示全部楼层
old00brish 发表于 2012-4-2 13:56
头一次听说ftm是软件 要占用内核资源

还有,我们讨论的是脉冲累加。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|亿加合和智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-5-29 21:04 , Processed in 0.038014 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表