我用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(中断服务程序)。
问题:我的配置哪里有问题?
user4712072:
中断0-3是保留吧,配置4之后的
yonghao hai:
回复 user4712072:
你的意思是INTDST0-3是保留的吗?我应该配置INTDST4-15或者INTDST16-23是吧。
我对您的意思理解对不对呢?
user4712072:
回复 yonghao hai:
说错了,貌似INTDST16-23是门铃中断
user4712072:
回复 yonghao hai:
我说错了,手册上说的是INTDST16-23是门铃中断,我也是用的这里面的