Go to the documentation of this file.00001 #ifndef _ARCH_AVR32_INTERRUPT_HANDLER_H_
00002 #define _ARCH_AVR32_INTERRUPT_HANDLER_H_
00003
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00057 #if __GNUC__
00058 typedef void (*__int_handler)(void);
00059 #elif __ICCAVR32__
00060 typedef void (__interrupt *__int_handler)(void);
00061 #endif
00062
00063 extern void init_interrupts(void);
00064
00065 extern void register_interrupt(__int_handler handler, unsigned int irq, unsigned int int_lev);
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076 #define IRQ_ENTRY() \
00077 { \
00078 \
00079 __asm__ __volatile__ ("ssrf\t%0; nop; nop" :: "i" (AVR32_SR_GM_OFFSET) : "memory"); \
00080 \
00081 \
00082 \
00083 __asm__ __volatile__ ("pushm r0-r7"); \
00084 }
00085
00086
00087 #define IRQ_EXIT() \
00088 { \
00089 \
00090 __asm__ __volatile__ ("popm r0-r7"); \
00091 \
00092 \
00093 __asm__ __volatile__ ("csrf\t%0" :: "i" (AVR32_SR_GM_OFFSET) : "memory"); \
00094 }
00095
00096 #endif // _ARCH_AVR32_INTERRUPT_HANDLER_H_