обработка прерываний ядра 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);
}
→ Ссылка