0

我正在尝试让软件中断在 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;

任何帮助将不胜感激。

4

0 回答 0