ISR
Void FpgaDioTxCompletionIsr
(
UArg argument
//UArg arg0, UArg arg1
)
{
//使主机中断失效
CpIntc_disableHostInt(0,8);
//清除系中断
CpIntc_clearSysInt(0,112);
//使能主机中断
CpIntc_enableHostInt(0,8);
g_InterruptCount++;
Uint16 doorbellStatus;
DEVICE_REG32_W(0x10800080,g_InterruptCount);
/* Pass the control to the driver DIO Tx Completion ISR handler */
// Srio_dioTxCompletionIsr ((Srio_DrvHandle)argument, hSrioCSL);//该行代码DSP应用程序通过直接io方式发送数据时,由中断ISR调用
//FPGA中断足够快的话是否会丢失中断?
CSL_SRIO_GetDoorbellPendingInterrupt (hSrioCSL, 0, &doorbellStatus);
//CSL_SRIO_SetInterruptPacing (hSrio, 0, 0xFFFFFFFF);
//UInt32 uiSegNum;
switch(doorbellStatus)
{
case 1:
DEVICE_REG32_W(0x10800084,0xABAB4141);
//printf("doorbell 1 ok!");
break;
case 2:
DEVICE_REG32_W(0x10800088,0XABAB4142);
//printf("doorbell 2 ok!");
break;
case 4:
DEVICE_REG32_W(0x1080008C,0XABAB4143);
//System_printf("doorbell 4 ok!");
break;
case 8:
DEVICE_REG32_W(0x10800090,0XABAB4144);
//printf("doorbell 8 ok!");
break;
case 16:
DEVICE_REG32_W(0x10800094,0XABAB4148);
//printf("doorbell 16 ok!");
break;
case 32:
DEVICE_REG32_W(0x10800098,0XABAB4150);
//printf("doorbell 32 ok!");
break;
case 64:
DEVICE_REG32_W(0x1080009C,0XABAB4151);
//printf("doorbell 64 ok!");
break;
case 128:
DEVICE_REG32_W(0x108000A0,0XABAB4153);
//printf("doorbell 128 ok!");
break;
default:
DEVICE_REG32_W(0x108000A4,0XABAB4154);
//printf("doorbell not ok!");
break;
}
// System_printf("waiting for doorbell!\n");
CSL_SRIO_ClearDoorbellPendingInterrupt (hSrioCSL, 0, doorbellStatus);
return;
}