网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 61IC中国电子在线 >> 服务导航 >> 帮助中心 >> C5000 >> 文章正文
  DMA的自动初始化           ★★★ 【字体:
DMA的自动初始化
作者:Free    文章来源:本站原创    点击数:    更新时间:2008-2-29    

最近一个老项目的程序出了问题,在某种特定的情况下声音输出会中断。这个项目使用的芯片是C5416,声音输出使用的是DMA4。经过调试发现声音 中断之后,DMCTR4寄存器的数值为初始化时的值:0x007f。这说明DMA4根本没有传输数据到McBSP的DX寄存器中去。这个问题我遇到过很多 次,原因如下:DMA4的传输的启动由McBSP控制,当McBSP的DX寄存器中的数据被McBSP读取之后, McBSP通知DMA传输下一个数据。如果DMA初始化时DX寄存器已经被读取,那么DMA就永远等不到McBSP的通知了,这样DMA就停止了。更具体 一点,让我们考虑DMA传输完当前传输块的最后一个数据之后,DSP内都会发生些什么情况:

1. 传输块的最后一个数据被DMA复制到McBSP的DX寄存器中
2. DMA向DSP提出中断
3. DSP设置DMA的下一个传输块
4. DX中的数据被McBSP输出,并且McBSP向DMA提出通知
5. DMA传输刚刚被设置好的传输块中的第一个数据到DX中

上面是正常运作时的情况,由于McBSP的传输是非常快的,例如如果是传输双声道44.1kHz的声音信号的话,那么McBSP一秒钟传输88.2k个数据,每两个数据之间的间隔大约是0.00001秒。也就是说,上面的从步骤1到步骤4的时间间隔必须小于这传输时间。
当DSP繁忙的时候,有时不能够立即响应DMA的中断,则很可能出现如下情况:

1. 传输块的最后一个数据被DMA复制到McBSP的DX寄存器中
2. DX中的数据被McBSP输出,并且McBSP向DMA提出通知
3. 由于DMA的DMCTR寄存器为0,DMA不向DX传输数据
4. DMA向DSP提出中断
5. DSP设置DMA的下一个传输块
6. DMA永远等待McBSP的传输通知

所以,DMA停止传输的根本原因是DSP无法及时地更新DMA的设置。这是一个普遍的问题,因此TI公司早就有解决方案了,解决办法就是使用DMA的自动初始化。
设置了自动初始化之后,DMA在传输完毕时直接读取自动初始化寄存器中的设置,设置好下一个传输块。采用自动初始化之后,就完全地解决了上述问题:

1. 传输块的最后一个数据被DMA复制到McBSP的DX寄存器中
2. DMA复制自动初始化寄存器的设置到本身的工作寄存器中 (本步骤不需要DSP介入)
3. DX中的数据被McBSP输出,并且McBSP向DMA提出通知
4. DMA传输刚刚被设置好的传输块中的第一个数据到DX中
5. DMA向DSP提出中断
6. DSP设置DMA的下一次自动初始化的设置

我 们看到,DSP响应DMA中断的时刻已经不重要了,只要在当前传输块传输完之前能够设置好自动初始化寄存器即可。C54x系列的某些芯片是多个DMA共享 一组自动初始化寄存器,在使用的时候请查阅相关芯片的参考手册。C55x系列的自动初始化功能有很大的改进,请参见我以前的文章:C5510DSK例子程 序的DMA设置问题。
               欢迎点击进入:TI德州中文网   (国内唯一针对TI应用的中文技术网站)    文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章: 没有了
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    McBSP的DX引脚的状态
    McBSP串口实验多媒体动画教程
    Mcbsp&Codec的程序范例
    MCBSP转UART的 (用6711DSK) …
    McBSP设定问题
    McBSP 可以当作 UART吗?
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    站长:61IC 湘ICP备05002478号