Программное прерывание с микроблейзом
Я пытаюсь заставить программное прерывание работать в микроблэйзе, но я вхожу в полный препятствие. Таким образом, в файле xparameter.h, который создается с помощью дизайна Vivado, нет никаких сгенерированных макросов для включенных мной прерываний sw.
Поэтому я начал смотреть на попадание в регистры модуля прерывания. Из таблицы видно, что base_addr+0x0 - это ISR, а base_addr+0x8 - это IER. И тогда есть ИВАР.
Я сделал следующее в коде.
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;
Любая помощь будет принята с благодарностью.