I use edma in omapl138 arm side,I use the sys/bios config the interrupt ,it has interrupt in my isr fuction,,however it can't into my task,the task status always ready.
I config the dma interrupt as flowing:
void AInt_init()
{
//HIEISR = 0;//使能中断类型,FIQ or IRQ
//EISR = 11;//使能系统中断号
//CMR1 = 1;//中断通道映射
//Hwi_enable();
Hwi_Params hwiParams;
Error_Block eb;
Hwi_Params_init(&hwiParams);
Error_init(&eb);
hwiParams.arg = 1;
hwiParams.eventId = 11;
hwiParams.maskSetting = Hwi_MaskingOption_SELF;
Hwi_mcasp_dma = Hwi_create(11, audiodma, &hwiParams, &eb);
if (Error_check(&eb)) {
// handle the error
}
GER = 0x1;//全局中断寄存器
Hwi_enableInterrupt(11);
//_enable_interrupts();
}
it always interrupt in my isr function,
interrupt void audiodma(void)
{
volatile Uint32 ipr;
volatile unsigned int *pultmp;
ipr = EDMA3ccRegs->IPR;
if(ipr)
//while(ipr)
{
//dma通道2的中断来了,接收ai的通道
if ((ipr&0x00000001) != 0)
{
pultmp = aisamplewr;
aisamplewr = aisamplere;
aisamplere = pultmp;
setAIFrameFlag(1);
g_dma2count++;
}
//dma 通道3的中断来了,发送ao的通道
if ((ipr&0x00000002) != 0)
{
pultmp = aosamplewr;
aosamplewr = aosamplere;
aosamplere = pultmp;
setAOFrameFlag(1);
g_dma2count2++;
}
//清零对应的中断标示,等待下次中断进入
EDMA3ccRegs->ICR = ipr;
//AInt_clear(11);
ipr = EDMA3ccRegs->IPR;
}
}