在C6745板子上面进行测试,想测试EDMA3的传输完成中断,中断初始化函数及中断服务函数如下:
int Interrupt_Init(void)
{
CSL_DspintcRegsOvly intcRegs = (CSL_DspintcRegsOvly)CSL_INTC_0_REGS;
/* connect the event to the interrupt 4 */
CSL_FINS(intcRegs->INTMUX1, DSPINTC_INTMUX1_INTSEL4,CSL_INTC_EVENTID_EDMA3CC_INT1);
/* set ISTP to point to the vector table address */
ISTP = (unsigned int)intcVectorTable;
/* clear all interrupts, bits 4 thru 15 */
ICR = 0xFFF0;
/* enable the bits for non maskable interrupt and */
IER = 0x12;
/* enable interrupts, set GIE bit */
_enable_interrupts();
EDMA_IER_set(hBasebandRxEdmaCh);//to generate a completion interrupt to the CPU,the corresponding IER[TCC] bit must be set to 1
EDMA_DRAE1_set(hBasebandRxEdmaCh);
delay(50);
if(status==1)
{
status=1;
}
else
{
status=0;
}
return status;
}
interrupt void EDMA3_INT_isr()
{
status=1;
}
现在关于EDMA3中断,有几个问题:
(1)在soc_C6747.h文件中,关于EDMA3的传输完成事件:只有一个:(如下)
/* CC Completion Interrupt for region 1 */
#define CSL_INTC_EVENTID_EDMA3CC_INT1 (8) (在该文件的第549行),我在程序中就是使用的这个事件。
但和这个事件的号码相同的还有:
/* TPCC0 Region 1 Interrupt */
#define CSL_INTC_EVENTID_TPCC0_INT1 (8) 这两个的事件号为什么是一样的?这对我使用上面事件时会不会有影响?
(2)EDMA3的IER和IPR中相应位已经使能,可以看到在中断控制器的 EVTFLAG 寄存器中已经显示事件8已经产生,而且,DSP中的GIE和IER也已经使能,但是IFR始终没有置位,但没有找到原因,请问,可能出现的原因有哪些?
谢谢!
Tony Tang:
#1.这两个是指的同一个事件。
#2. 查看一下INTMUX1寄存器是否对。
#3. 手动置ISR看能否进中断,如果能进表示中断向量表设置没问题。
#4. 在EDMA里手动清除掉IPR,看还能否产生中断。有可能是EDMA端有问题。