您尚未登录。

楼主 #1 2020-04-29 11:06:12

晕哥小弟
会员
注册时间: 2019-04-04
已发帖子: 311
积分: 301.5

请问DMA的开销

单片机使用DMA的话,可以减少开发.但是在实际开发过程中,启动一次DMA传输,需要等待DMA返回的状态,其实也就是while死等.这岂不是和普通单片机串口发送开销一样?

离线

#2 2020-04-29 11:18:13

staunchheart
会员
注册时间: 2019-12-17
已发帖子: 232
积分: 190

Re: 请问DMA的开销

DMA有中断事件,一般要异步的。
比如播放声音,用全写入或半写入一段后中断,然后再写下一段,在RTT下。
rt_hw_interrupt_install(DMA_INTERRUPT, os_dma_irq_handle, RT_NULL, "DMA"); //开启DMA中断
rt_hw_interrupt_umask(DMA_INTERRUPT);

发送数据时
//开启全传输中断
S_BIT(DMA_Base_Address, (n*2)+1);
//开启半传输中断
//S_BIT(DMA_Base_Address, (n*2)+0);
发完后会进中断
if (read32(DMA_Base_Address + 0x4) & 0x2) //全传输
{
S_BIT(DMA_Base_Address + 0x4, 1);
dmd_disable(0);
if (read32(DMA_Base_Address + 0x4) & 0x2) //全传输
{
S_BIT(DMA_Base_Address + 0x4, 1);
dmd_disable(0);
rt_audio_tx_complete(&(snd_dev.audio)); //这个是RTT的声音框架,去取队列中的下一段播放
}
}

离线

#3 2020-05-23 22:58:34

hyghyg1234
会员
注册时间: 2020-05-23
已发帖子: 10
积分: 10

Re: 请问DMA的开销

DMA异步的,CPU只要获取状态就行,填入数据是DMA去干的,CPU不用管的。

离线

#4 2020-07-12 23:20:34

lastm5
会员
注册时间: 2019-12-10
已发帖子: 3
积分: 3

Re: 请问DMA的开销

DMA启动以后,cpu就可以干别的了,等待dma中断产生后再继续处理。这里不需要死等查询

离线

#5 2020-07-19 01:43:23

iki1120
会员
注册时间: 2018-03-02
已发帖子: 41
积分: 36

Re: 请问DMA的开销

rtos可以用信号量,不用死等,裸跑就不太清楚怎么玩了

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn


东莞哇酷科技有限公司开发