Dsp中EDMA传输

20041302149   2010-5-26 18:08 楼主
我是个初学者,在dsp中用EDMA传输数据,那位能解释下数据传输的流程吗?

回复评论 (4)

不知道,楼主有没有用过DMA,EDMA是增强的DMA,它们的流程都差不多,只不过,触发方面有点不同,EDMA是RAM结构的。
配置通道,配置源地址目标地址,配置通道传输相关的信息,然后是否开启中断,事件处理等。。。就可以开始传输了。
点赞  2010-5-26 18:30
CSL_init();
/* DSP调用芯片支持库初始化*/
IRQ_nmiEnable();
/* enable NMI and GI */
IRQ_globalEnable();
IRQ_setVecs(vectors);
/* point to the IRQ vector table */
   IRQ_reset(IRQ_EVT_EDMAINT);
//禁止、清除相应的中断
EDMA_clearPram(0x00000000);
// 清除所有EDMA的配置RAM 区

hEdma12 = EDMA_open(EDMA_CHA_XEVT0, EDMA_OPEN_RESET);
//开启发送通道Channel 12 ,得到句柄
hEdma13 = EDMA_open(EDMA_CHA_REVT0, EDMA_OPEN_RESET);
//开启接收通道Channel 13 ,得到句柄
hMcbsp0 = MCBSP_open(MCBSP_DEV0, MCBSP_OPEN_RESET);
//打开通道 channel 0
    ConfigEDMA();
   
IRQ_enable(IRQ_EVT_EDMAINT);
//使能EDMA中断
EDMA_intEnable(12);
//EDMA通道使能.enable EDMA int (CIER)  
    EDMA_intEnable(13);
EDMA_enableChannel(hEdma12);
//使能发送通道,事件使能寄存器( EER) 的bit12 置1
EDMA_enableChannel(hEdma13);
//使能发送通道,事件使能寄存器( EER) 的bit12 置1
     
ConfigMcBSP();
MCBSP_enableSrgr(hMcbsp0);
//使能采样率发生器,置GRST = 1

for (waittime=0; waittime < 0xFF; waittime++);
//应该是轮询检测XRDY和RRDY状态位,向发送寄存器写入待发送的数据,检查是否已经收到数据
MCBSP_enableXmt(hMcbsp0);
//使能发送器
MCBSP_enableRcv(hMcbsp0);
//使能接收器
MCBSP_enableFsync(hMcbsp0);
//使能帧同步信号发生器,置FRST = 1

        IRQ_disable(IRQ_EVT_EDMAINT);
    EDMA_RSET(CIER, 0x0);
MCBSP_close(hMcbsp0);
/* close McBSP 0 */
EDMA_close(hEdma12);
/* close EDMA 12 */
EDMA_close(hEdma13);
/* close EDMA 13 */
}
这段程序是我找的,我把他们注释了,我想知道是在打开EDMA通道之前就发送数据到McBSP了吗?
在IRQ_disable(IRQ_EVT_EDMAINT)之前传输数据,必须是在一个死循环中等待中断吗?

点赞  2010-5-27 15:31
我想知道是在打开EDMA通道之前就发送数据到McBSP了吗?看代码应该是,我想问你,你的数据时从什么地方搬到什么地方,然后用mcbsp输出到哪里去?

第二问,不用死循环等待,你可以做其他事情,EDMA传输完,会自动进入中断,因为你打开中断了。
点赞  2010-5-28 00:50
数据以文本形式存在计算机中,我想应该采用文件读写到一个数组中然后最后要在DSP中对数据进行处理。
是不是还要设置一个地址L2缓存,就可以把数据放到缓存中,然后对他进行处理。
点赞  2010-5-29 11:40
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复