请选择 进入手机版 | 继续访问电脑版

安富莱电子论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 228|回复: 5
收起左侧

如何用DMA去控制138译码器?

[复制链接]

51

主题

189

帖子

291

积分

高级会员

积分
291
发表于 2019-1-29 09:44:53 | 显示全部楼层 |阅读模式
工程项目上需要每隔40us左右改变一次138译码器输出,在中断中切的话太消耗CPU资源了,能否用DMA的方式实现呢?
138是按照一个固定序列循环往复,比如依次输出0~7路,往复循环。
初步设想的是138译码器输入挂在到FMC总线上,这样输入就可以映射到一个地址A上,输出序列存放到一个buf里面,每次
中断触发buf到A的一个字节的传输,问题点就是如何实现buf地址的往复循环?
回复

使用道具 举报

5547

主题

3万

帖子

4万

积分

管理员

做人第一,工作第二

Rank: 9Rank: 9Rank: 9

积分
44791
QQ
发表于 2019-1-29 10:48:16 | 显示全部楼层
40us不高,才25K,中断绰绰有余。
淘宝小店: https://armfly.taobao.com/
专注,努力,用心的做好每一件事情,Fighting!
回复

使用道具 举报

51

主题

189

帖子

291

积分

高级会员

积分
291
 楼主| 发表于 2019-1-29 11:02:37 | 显示全部楼层
eric2013 发表于 2019-1-29 10:48
40us不高,才25K,中断绰绰有余。

频繁压栈出栈就为这么一个操作,感觉太浪费CPU资源了,如果这块优化好了,程序中最短的频繁中断也就1ms了。
回复

使用道具 举报

5547

主题

3万

帖子

4万

积分

管理员

做人第一,工作第二

Rank: 9Rank: 9Rank: 9

积分
44791
QQ
发表于 2019-1-29 11:22:55 | 显示全部楼层
可以考虑使用定时器的UP事件触发DMA,然后FMC的地址设置自增循序,但只能将138接到低地址了。
淘宝小店: https://armfly.taobao.com/
专注,努力,用心的做好每一件事情,Fighting!
回复

使用道具 举报

51

主题

189

帖子

291

积分

高级会员

积分
291
 楼主| 发表于 2019-1-29 11:36:03 | 显示全部楼层
eric2013 发表于 2019-1-29 11:22
可以考虑使用定时器的UP事件触发DMA,然后FMC的地址设置自增循序,但只能将138接到低地址了。

fmc总线上挂了好多外设,这个138会有总的138译码器片选控制,所以它的地址是固定的。
DMA每次触发只能传输一个字节,等下次触发再传输下个字节,如何做到N次触发后地址自动复位,这个是关键。
回复

使用道具 举报

5547

主题

3万

帖子

4万

积分

管理员

做人第一,工作第二

Rank: 9Rank: 9Rank: 9

积分
44791
QQ
发表于 2019-1-29 11:48:37 | 显示全部楼层
云琴箫龙 发表于 2019-1-29 11:36
fmc总线上挂了好多外设,这个138会有总的138译码器片选控制,所以它的地址是固定的。
DMA每次触发只能传 ...

DMA循环模式,循环一轮就会回来的。。
淘宝小店: https://armfly.taobao.com/
专注,努力,用心的做好每一件事情,Fighting!
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|安富莱电子论坛 ( 鄂ICP备09023347号,公安机关备案号42010602000201 )

GMT+8, 2019-4-25 14:02 , Processed in 0.172579 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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