我正在尝试让软件中断在 microblaze 中运行,但遇到了一个完整的障碍。因此,由 Vivado 设计生成的 xparameter.h 文件没有为我启用的 sw 中断生成的任何宏。
所以我开始研究打中断模块寄存器。从数据表中我可以看到 base_addr+0x0 是 ISR,base_addr+0x8 是 IER。然后是 IVAR。
我在代码中完成了以下操作。
void
software_test( void * args )
{
uint32_t * isr = (uint32_t * ) XPAR_MICROBLAZE_0_AXI_INTC_BASEADDR;
isr[0xC/4] = 0x20;
xil_printf("software test\r\n");
}
int init()
{
uint32_t * isr = (uint32_t * ) XPAR_MICROBLAZE_0_AXI_INTC_BASEADDR;
isr[0x114/0x4] = (unsigned)&software_test;
isr[0x8/0x4] |= 0xFFFFFFF0; /* trying to enable everything */
}
然后开始中断我试图点击 ISR 寄存器
uint32_t * isr = (uint32_t * ) XPAR_MICROBLAZE_0_AXI_INTC_BASEADDR;
isr[0x0/4] = 0x20;
任何帮助将不胜感激。