硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2013|回复: 5
收起左侧

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

[复制链接]

98

主题

360

回帖

654

积分

金牌会员

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

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117546
QQ
发表于 2019-1-29 10:48:16 | 显示全部楼层
40us不高,才25K,中断绰绰有余。
回复

使用道具 举报

98

主题

360

回帖

654

积分

金牌会员

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

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

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

使用道具 举报

98

主题

360

回帖

654

积分

金牌会员

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

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

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

DMA循环模式,循环一轮就会回来的。。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-14 02:05 , Processed in 0.049752 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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