完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
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 个讨论
|
|
|
三个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; ] |
|
|
|
|
|
|
|
wo97306730 发表于 2018-7-25 10:18 不进中断的情况下,是中断没有发生还是程序跑飞了? 合并到一起后,有没有试过中断一个个开开来调试。 |
|
|
|
|
|
|
|
wo97306730 发表于 2018-7-25 10:18 IntEventClear(SYS_INT_EDMA3_0_CC0_INT1); 这个函数做了啥,好像没有必要存在。 McASPRxDMAComplHandler();和McASPTxDMAComplHandler();做了什么?尽量不要在处理函数里呆过长时间,最好是直接post一个信号量,交给处理的task。 ISR的最后没有看到再读IPR判断有没有新的中断进来。 http://processors.wiki.ti.com/index.php/Main_Page Think Over Before Asking. http://www.catb.org/~esr/faqs/smart-questions.html#goal |
|
|
|
|
|
|
|
lifei639156 发表于 2018-7-25 10:58 McASPRxDMAComplHandler();和McASPTxDMAComplHandler();这个没有做太多事情,主要是更新参数集,所有算法处理的工作都没有在中断里面完成。 // 更新 lastFullRxBuf 标志一个新的接收 buffer 接收完成 lastFullRxBuf = (lastFullRxBuf + 1) % NUM_BUF; nxtParToUpdate = PAR_RX_START + parOffRcvd; parOffRcvd = (parOffRcvd + 1) % NUM_PAR; // 激活 DMA 传输器的一个参数集,用于接收数据到给定的buffer BufferRxDMAActivate(nxtBufToRcv, nxtParToUpdate, PAR_RX_START + parOffRcvd); // 更新下一个要接收数据的buffer nxtBufToRcv = (nxtBufToRcv + 1) % NUM_BUF; |
|
|
|
|
|
|
|
wo97306730 发表于 2018-7-25 11:27 中断函数最后要再判断一下IPR的状态,看有没有没处理的中断。 而且从你的中断服务函数的写法来看,是每个分支固定的检查一个位,假设进中断是因为最后一个分支产生的中断,但在退出ISR前,第一个分支的bit也置位了,这个ISR并不会处理,这样就会导致退出ISR后,不会再响应EDMA中断。 http://processors.wiki.ti.com/index.php/Main_Page Think Over Before Asking. http://www.catb.org/~esr/faqs/smart-questions.html#goal |
|
|
|
|
|
|
|
lifei639156 发表于 2018-7-25 10:58 我上周就试了,出问题的时候,这三个位都被pending了,但是通过仿真器直接ICR的对应3位好像不太起作用。 |
|
|
|
|
|
|
|
|
试了啥,在哪pending了,为什么要处理ICR?不是应该在ISR里处理IPR么? 原理很简单,就是因为退出ISR前又有新的EDMA中断进来没有被处理就退出ISR了。 http://processors.wiki.ti.com/index.php/Main_Page Think Over Before Asking. http://www.catb.org/~esr/faqs/smart-questions.html#goal |
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
550 浏览 0 评论
1613 浏览 0 评论
2047 浏览 0 评论
为啥BQ7693003DBTR芯片在和BQ769X0盒子通讯时收不到信号?
1514 浏览 0 评论
DSP 28027F 开发板 XDS100v2调试探针诊断日志显示了 Error -150 (SC_ERR_FTDI_FAIL)如何解决
1338 浏览 0 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
1758浏览 29评论
2785浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
1725浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
1635浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
1646浏览 13评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 20:12 , Processed in 1.233964 second(s), Total 100, Slave 83 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2269