TI中文支持网
TI专业的中文技术问题搜集分享网站

EDMA链接多个channel事件的问题?

TI的工程师

        我有一个需要请教,目前我司有一个音频设备开发使用C6748作为平台。目前用到了MCASP和MABSP两条总线,MCASP接了AIC3106,用于录音和放音。MCBSP接了一个usb codec用于把算法处理后的数据送到PC上。两条总线分别用EDMA3链接了MCASP的Tx、Rx和MCBSP的TX。

        如果单独用任意MCASP或者MCBSP总线进行录音和播放都没有问题。但是两个合并在一起的时候录音和播放都有卡断,而且过了几分钟就不会进入中断了。

        EDMA3触发通道分别用了0、1、3。中断事件绑定的是INT5。

        目前没有什么解决的思路,请TI的工程帮忙分析一下,可能哪里出了问题。

        

Shine:

请问mcsbp和mcasp绑定的是同一个中断?中断函数里主要做什么?中断函数越简单越好。

taoyu:

回复 Shine:

三个EDMA事件都是绑定的一个中断,通过事件号进行区别,一般运行几分钟就进不了中断了,代码如下:

unsigned int temp;IntEventClear(SYS_INT_EDMA3_0_CC0_INT1);// 判断接收 DMA 完成if(EDMA3GetIntrStatus(SOC_EDMA30CC_0_REGS) & (1 << EDMA3_CHA_MCASP0_RX)){// 清除 0 通道中断标志EDMA3ClrIntr(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX);McASPRxDMAComplHandler();}// 判断发送 DMA 完成if(EDMA3GetIntrStatus(SOC_EDMA30CC_0_REGS) & (1 << EDMA3_CHA_MCASP0_TX)){// 清除 1 通道中断标志EDMA3ClrIntr(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_TX);McASPTxDMAComplHandler();}// 判断发送 DMA 完成 清除MCBSP发送标志if(EDMA3GetIntrStatus(SOC_EDMA30CC_0_REGS) & (1 << EDMA3_CHA_MCBSP0_TX)){temp = CC0_SR1_IPR;CC0_SR1_ICR = temp;cnt1++;RxCnt++;RxCnt = RxCnt % 2;}

 

Shine:

回复 taoyu:

不进中断的情况下,是中断没有发生还是程序跑飞了?合并到一起后,有没有试过中断一个个开开来调试。

taoyu:

回复 Shine:

程序并没有跑飞,我在主循环里面有一个计数器这个计数器是一直增加的,除非我把程序都停下来。

我刚才走读了一遍代码,我的EDMA3 CC0绑定了3个事件,这个是不是有点“多”。

Tony Tang:

回复 taoyu:

IntEventClear(SYS_INT_EDMA3_0_CC0_INT1); 这个函数做了啥,好像没有必要存在。

McASPRxDMAComplHandler();和McASPTxDMAComplHandler();做了什么?尽量不要在处理函数里呆过长时间,最好是直接post一个信号量,交给处理的task。

ISR的最后没有看到再读IPR判断有没有新的中断进来。

taoyu:

回复 Shine:

这个一个一个开是什么意思,我在初始化的时候已经把三个都链接了。如果只进行单个MCBSP或者MCASP传输是没有问题的。

taoyu:

回复 Tony Tang:

McASPRxDMAComplHandler();和McASPTxDMAComplHandler();这个没有做太多事情,主要是更新参数集,所有算法处理的工作都没有在中断里面完成。

// 更新 lastFullRxBuf 标志一个新的接收 buffer 接收完成lastFullRxBuf = (lastFullRxBuf + 1) % NUM_BUF;nxtParToUpdate =PAR_RX_START + parOffRcvd;parOffRcvd = (parOffRcvd + 1) % NUM_PAR;// 激活 DMA 传输器的一个参数集,用于接收数据到给定的bufferBufferRxDMAActivate(nxtBufToRcv, nxtParToUpdate,PAR_RX_START + parOffRcvd);// 更新下一个要接收数据的buffernxtBufToRcv = (nxtBufToRcv + 1) % NUM_BUF;

taoyu:

回复 Tony Tang:

我上周就试了,出问题的时候,这三个位都被pending了,但是通过仿真器直接ICR的对应3位好像不太起作用。

taoyu:

回复 Tony Tang:

唐工你这个说的有道理,我这里单独清理好像是有些问题。实验一下在中断处理完以后再判断一次。

赞(0)
未经允许不得转载:TI中文支持网 » EDMA链接多个channel事件的问题?
分享到: 更多 (0)