TI论坛
直播中

吴樵

7年用户 232经验值
私信 关注
[问答]

请教关于EDMA链接多个channel事件的问题?

ti的工程师
        我有一个需要请教,目前我司有一个音频设备开发使用C6748作为平台。目前用到了MCASP和MABSP两条总线,MCASP接了AIC3106,用于录音和放音。MCBSP接了一个u*** codec用于把算法处理后的数据送到PC上。两条总线分别用EDMA3链接了MCASP的Tx、Rx和MCBSP的TX。
        如果单独用任意MCASP或者MCBSP总线进行录音和播放都没有问题。但是两个合并在一起的时候录音和播放都有卡断,而且过了几分钟就不会进入中断了。
        EDMA3触发通道分别用了0、1、3。中断事件绑定的是INT5。
        目前没有什么解决的思路,请TI的工程帮忙分析一下,可能哪里出了问题。
        

回帖(17)

余少虹

2018-7-25 10:04:43
请问mc***p和mcasp绑定的是同一个中断?中断函数里主要做什么?中断函数越简单越好。
举报

吴樵

2018-7-25 10:18:47
引用: vuywsdfwf 发表于 2018-7-25 10:04
请问mc***p和mcasp绑定的是同一个中断?中断函数里主要做什么?中断函数越简单越好。

三个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;    ]
举报

余少虹

2018-7-25 10:34:23
引用: wo97306730 发表于 2018-7-25 10:18
三个EDMA事件都是绑定的一个中断,通过事件号进行区别,一般运行几分钟就进不了中断了,代码如下:
unsigned int temp;        IntEventClear(SYS_INT_EDMA3_0_CC0_INT1);        // 判断接收 DMA 完成    if(EDMA3GetIntrStatus(SOC_EDMA30CC_0_REGS) & (1 << EDMA3_CHA_MCASP0_RX))     [             // 清除 0 通道中断标志        EDMA3ClrI ...

不进中断的情况下,是中断没有发生还是程序跑飞了?

合并到一起后,有没有试过中断一个个开开来调试。
举报

吴樵

2018-7-25 10:43:12
引用: vuywsdfwf 发表于 2018-7-25 10:34
不进中断的情况下,是中断没有发生还是程序跑飞了?

合并到一起后,有没有试过中断一个个开开来调试。

程序并没有跑飞,我在主循环里面有一个计数器这个计数器是一直增加的,除非我把程序都停下来。
我刚才走读了一遍代码,我的EDMA3 CC0绑定了3个事件,这个是不是有点“多”。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分