我正试图在微型电池中运行软件中断,但我正在完成一个完整的路障。因此,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;
非常感谢任何帮助。