обработка прерываний ядра cortex A9. zynq 7020
Хочу обработать прерывание ядра, предположим пишем по несуществующему адресу, использовал такую конструкцию void attribute ((interrupt ("IRQInterrupt"))) f(void), но к сожалению не заработало, может кто-то сталкивался с таким? пытался обработать все эти прерывания, используя
__attribute__ ((interrupt ("IRQInterrupt")))
void FIQInterrupt(void);
void IRQInterrupt(void);
void SWInterrupt(void);
void DataAbortInterrupt(void);
void PrefetchAbortInterrupt(void);
void UndefinedException(void);
Ответы (1 шт):
Автор решения: tix01
→ Ссылка
решение следующее
#include "xil_exception.h"
static void DataAbortIntrHandler(void *CallBackRef);
static void PfAbortIntrHandler(void *CallBackRef);
static void IRQIntrHandler(void *CallBackRef);
static void FIQAbortIntrHandler(void *CallBackRef);
static void SWIAbortIntrHandler(void *CallBackRef);
static void UNDEFAbortIntrHandler(void *CallBackRef);
int main()
{
xil_printf("Zynq data abort example \n");
Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_DATA_ABORT_INT,
(Xil_ExceptionHandler)DataAbortIntrHandler,
NULL);
Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_PREFETCH_ABORT_INT,
(Xil_ExceptionHandler)PfAbortIntrHandler,
NULL);
Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_IRQ_INT,
(Xil_ExceptionHandler)IRQIntrHandler,
NULL);
Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_FIQ_INT,
(Xil_ExceptionHandler)FIQAbortIntrHandler,
NULL);
Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_SWI_INT,
(Xil_ExceptionHandler)SWIAbortIntrHandler,
NULL);
Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_UNDEFINED_INT,
(Xil_ExceptionHandler)UNDEFAbortIntrHandler,
NULL);
return 0;
}
static void DataAbortIntrHandler(void *CallBackRef)
{
unsigned int addr;
__asm__ __volatile__("\n\ldr %0, [sp,#44]" : "=r" (addr));
xil_printf("instruction address causing data abort is %x\n",addr-8);
}