我用FPGA循环向DSP发送doorbell。
调试时DOORBELL0_ICSR寄存器值为0x1。
我对DOORBELL0_ICRR0的设置是0x76543210,DOORBELL0_ICRR1:0xFEDCBA98,也就是将ICSR的bitx映射到INTDSTx,如ICSR的bit0映射到INTDST0。
我又通过CPINTC和INTC配置了中断服务程序ISR,只要DOORBELL0_ICSR的值为0x1,就会唤醒ISR,执行ISR中的代码。
以上过程已经确定没有问题。
通过对文档的阅读,知道了在ISR中最后必须清除ICSR的值,并且由于我使用的是INTDST0(包含在INTDST0-INTDST15中),所以需要在SRIO初始化和ISR最后对InterruptPacing值进行设置。因此我的ISR程序如下:
static void read_isr_handler (void* handle)
{
printf("enter the readISR!!!\n");
// Get the status of doorbell interrupts for port 0
CSL_SRIO_GetDoorbellPendingInterrupt (hSrio, 0, &doorbellStatus);
CSL_SRIO_SetInterruptPacing (hSrio, 0, 0xFFFFFFFF);
// Clear the Door Bell Pending Interrupts.
CSL_SRIO_ClearDoorbellPendingInterrupt (hSrio, 0, doorbellStatus);
}
症状:
只能进入一次ISR(中断服务程序)。
问题:我的配置哪里有问题?