--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2011.\r
+\r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.lufa-lib.org\r
+*/\r
+\r
+/*\r
+ Copyright 2011 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, distribute, and sell this\r
+ software and its documentation for any purpose is hereby granted\r
+ without fee, provided that the above copyright notice appear in\r
+ all copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+#include "InterruptManagement.h"\r
+\r
+/** Interrupt vector table, containing the ISR to call for each interrupt group */\r
+InterruptHandlerPtr_t InterruptHandlers[AVR32_INTC_NUM_INT_GRPS];\r
+\r
+/** ISR for unhandled interrupt groups */\r
+ISR(Unhandled_Interrupt)\r
+{\r
+ while (true);\r
+}\r
+\r
+/** Retrieves the associated interrupt handler for the interrupt currently being fired. This is\r
+ * called directly from the exception handler routine before dispatching to the ISR.\r
+ */\r
+InterruptHandlerPtr_t INTC_GetInterruptHandler(const uint_reg_t InterruptLevel)\r
+{\r
+ return InterruptHandlers[AVR32_INTC.icr[AVR32_INTC_INT3 - InterruptLevel]];\r
+}\r
+\r
+/** Initializes the interrupt controller ready to handle interrupts. This must be called at the\r
+ * start of the user program before any interrupts are registered or enabled.\r
+ */\r
+void INTC_Init(void)\r
+{\r
+ for (uint8_t InterruptGroup = 0; InterruptGroup < AVR32_INTC_NUM_INT_GRPS; InterruptGroup++)\r
+ {\r
+ InterruptHandlers[InterruptGroup] = Unhandled_Interrupt;\r
+ AVR32_INTC.ipr[InterruptGroup] = Autovector_Table[AVR32_INTC_INT0];\r
+ }\r
+\r
+ __builtin_mtsr(AVR32_EVBA, (uintptr_t)&EVBA_Table);\r
+}\r