嵌入式开发者社区
标题:
edma中断使用
[打印本页]
作者:
lizhaoheng
时间:
2015-1-14 22:01
标题:
edma中断使用
现在编程中碰到这样的问题,EDMA使用到了EDMA3_CHA_MCASP0_RX和EDMA3_CHA_MCASP0_TX,因为edma只有一个完成中断,当产生中断后,判断是EDMA3_CHA_MCASP0_RX还是EDMA3_CHA_MCASP0_TX,然后清相应中断标志位。然后重新设置edma的param。
程序是参照ti的例程写的,如下:
static void EDMA3CCComplIsr(void)
{
IntEventClear(SYS_INT_EDMA3_0_CC0_INT1);
/* Check if receive DMA completed */
if(EDMA3GetIntrStatus(SOC_EDMA30CC_0_REGS) & (1 << EDMA3_CHA_MCASP0_RX))
{
/* Clear the interrupt status for the 0th channel */
EDMA3ClrIntr(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX);
McASPRxDMAComplHandler();
}
/* Check if transmit DMA completed */
if(EDMA3GetIntrStatus(SOC_EDMA30CC_0_REGS) & (1 << EDMA3_CHA_MCASP0_TX))
{
//清除中断标志
EDMA3ClrIntr(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_TX);
parToSend = PAR_TX_START + (parOffTxToSend % NUM_PAR);
parOffTxToSend = (parOffTxToSend + 1) % NUM_PAR;
parToLink = PAR_TX_START + parOffTxToSend;
BufferTxDMAActivate(lastSentTxBuf, (NUM_SAMPLES_DA_BUF),
(unsigned short)parToSend,
(unsigned short)parToLink);
}
}
现在碰到这样的问题, EDMA3_CHA_MCASP0_TX和EDMA3_CHA_MCASP0_RX很可能在进入中断处理程序后同时出现,因为EDMA3_CHA_MCASP0_RX的edma执行的次数多,所有进入中断的频率高,有时候会出现EDMA3_CHA_MCASP0_TX的edma执行完成后不进入中断处理程序的现象?请问这种问题怎么解决啊?
作者:
希望缄默
时间:
2015-1-15 09:43
我觉得 EDMA3只是用于数据搬移 如果你只需要 EDMA3 连续为你工作可以不使用中断的 使用3个 EDMA3 通道连接在一起~
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4