This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

求助,关闭EDMA后重新开启EDMA有几率无效

McAsp接口的发送使能了对应DMA,且配置了两个等长度缓存作为源地址(双缓存),在DMA配置中两个PaRAM相互Link来实现双缓存循环发送。

由于需求上要定时对DMA进行重启,设定了两个方案:

一.  关闭mcbsp -> 关闭DMA -> 配置dma源地址重新link -> 开启DMA -> 开启mcbsp

实现后发现一个问题,在最后一步开启mcbsp的瞬间,会发出一段1us左右的不可控的低电平,对接收器件有一定的影响,是否是138硬件接口本身的问题?有避免方法吗,望解答。

二. 关闭DMA ->  配置dma源地址重新link -> 开启DMA

第二个方案想通过不处理mcbsp避免第一个方案中出现的问题。  但发现运行一段时间后mcbsp接口发送固定数据,说明DMA没有工作。 以下附上相关代码操作:

  关闭DMA:

     1.set   EECR

     2.set   ECR

     3.set   SECR

     4.set   EMCR

  开启DMA:

     1.set   EESR

  是否是我的实现方法或寄存器配置存在问题,望解答,谢谢大大们

  • McBSP做主还是做从?即帧同步和时间由外部给还是内部产生?

    频率多高?你指的关闭McBSP如何操作的?操作McBSP还是PSC?

    这里更多的问题应该是在关闭McBSP,McBSP是一个连续工作的接口,你在什么时间去关McBSP是一个问题,比如你在一个中断以为当前发送完成了去关它,其实它的发送事件已发给EDMA了,而EDMA可能正在传输当中,你又把EDMA关掉了。所以这里需要好好理一理。

  • 谢谢,是我描述的不够详细。 补充一下,  McBSP作为从设备,12MHz的CLK 与 240KHz的FS 由逻辑提供,且在McBSP重启过程中也不会间断。

    关闭与开启McBSP的操作均由寄存器SPCR的XRST位来实现,  另外在我遇到的问题中,影响比较大的是开启mcbsp的瞬间产生的不可控的低电平,而关闭操作导致的数据不完整或异常对我的影响不大,再次感谢。

     

    关于我原贴中的第二个方案遇到的dma工作异常的问题已解决,问题原因是对dma寄存器操作顺序不对,参考了论坛里置顶帖的代码后已修复。