求助:DMA的问题

[复制链接]
 楼主| haibian826 发表于 2007-6-16 22:27 | 显示全部楼层 |阅读模式
求助:&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;我今天看了一下5402的DMA&nbsp;,有点云里雾里。。。<br />&nbsp;&nbsp;&nbsp;&nbsp;脑袋里就几个寄存器,比如,DMPREC,DMSA,DMSDI,DMSDN,等等<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;然后看了一些程序初始化设置<br /><br />请问,我应该如何理解DMA&nbsp;,它一般都用在哪个地方?用来数据块传送?<br />&nbsp;&nbsp;&nbsp;哪位高手,如过有这方面的程序,能否给我一个?最好是带解释的&nbsp;<br />&nbsp;<br /><br />谢谢!<br /><br />
 楼主| haibian826 发表于 2007-6-16 22:30 | 显示全部楼层

补充问题。。。

请问高手:<br />&nbsp;&nbsp;&nbsp;&nbsp;在5402DSP的内核中,是否真实的存在一个物理&nbsp;空间为DMA控制器?<br /><br />还是象各个寄存器一样,是一个“虚拟”的东西?
wowow 发表于 2007-6-19 12:57 | 显示全部楼层

DMA就是个搬运工

CPU平常挺忙的,经常没空去搬。而且有的数据来得也慢,时不时中断一下去取数据也挺烦的。<br /><br />以下是以前写实验指导书中的部分文字:<br />DMA是直接存储器存取,是一种传送不占用CPU处理时间的大批量数据传送的有效方式。我们用以下实例来说明它的应用:<br />&nbsp;&nbsp;&nbsp;&nbsp;如果我们要做一个音频处理系统,需要连续用McBSP接口的语音芯片采集若干个样本进行处理,比如频谱分析、音频压缩等。本例假设要每采集256个样本进行一次处理。上例用的是查询方式,占用了所有CPU资源。可以用中断方式,结合前面的实验不难做到,请同学们自行完成。在这个实验中我们将介绍一个更有效的DMA传送方式。我们比较一下用中断方式和DMA方式的效率有何不同:<br />&nbsp;&nbsp;&nbsp;&nbsp;一、中断方式:每当中缓冲串口接收一个16bit样本的数据,触发一次串口接收中断,将数据转移到一个256&nbsp;word的数据接收缓冲区并计数。当计数达到256个,即缓冲区满时,将256个数据转移到数据处理存储区,并通知主程序进行处理。<br />&nbsp;&nbsp;&nbsp;&nbsp;二、DMA方式:我们使用一个通道自动接收McBSP传来的数据并存入接收缓冲区,当缓冲区满时触发DMA中断,将256个数据传送到数据处理存储区,传送完毕触发通知主程序进行处理。<br />&nbsp;&nbsp;&nbsp;&nbsp;由上比较可见,每接收一批样本,用中断方式将触发256次中断,也就是主程被打断256次去接收数据。而用DMA方式,只在全部256个样本全部接收完毕时发生一次中断,这时主程序应该已经处理完上一批的数据。<br />&nbsp;&nbsp;&nbsp;&nbsp;进一步考虑,当数据处理完毕后还需要将数据送走,这时又可以采用另一个DMA通道完成这个任务,将CPU释放出来等待进行下一批样本的处理。<br />&nbsp;&nbsp;&nbsp;&nbsp;事实上DMA传送并非比用CPU直接处理快,例如在内部存贮器之间传送时,用CPU需要2cycle/word,而用DMA要4cycle/word。DMA的优势在是把CPU解放出来做其它的事。<br /><br />
小李志 发表于 2007-6-19 13:01 | 显示全部楼层

经典,

lianpan 发表于 2007-6-21 17:25 | 显示全部楼层

经典

跟后来的6000系列的EDMA功能也差不多
您需要登录后才可以回帖 登录 | 注册

本版积分规则

49

主题

227

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部