您尚未登录。

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

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

请问DMA的开销

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

离线

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

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

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
已发帖子: 38
积分: 33

Re: 请问DMA的开销

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

离线

页脚

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

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