vic_lpc2.h
Go to the documentation of this file.00001
00038 #ifndef DRV_VIC_LPC2_H
00039 #define DRV_VIC_LPC2_H
00040
00041 #include <cfg/compiler.h>
00042 #include <cpu/irq.h>
00043
00044 #if CPU_ARM_LPC2378
00045 #include <io/lpc23xx.h>
00046 #define vic_vector(i) (*(&VICVectAddr0 + i))
00047 #define vic_priority(i) (*(&VICVectCntl0 + i))
00048 #define VIC_SRC_CNT 32
00049 #define vic_enable(i) do { ASSERT(i < VIC_SRC_CNT); VICIntEnable = BV(i); } while (0)
00050 #define vic_disable(i) do { ASSERT(i < VIC_SRC_CNT); VICIntEnClr = BV(i); } while (0)
00051
00052 typedef void vic_handler_t(void);
00053 void vic_defaultHandler(void);
00054
00055 INLINE void vic_init(void)
00056 {
00057 IRQ_DISABLE;
00058
00059 VICIntSelect = 0;
00060
00061 VICSoftIntClr = 0xFFFFFFFF;
00062
00063 VICIntEnClr = 0xFFFFFFFF;
00064
00065 for (int i = 0; i < VIC_SRC_CNT; i++)
00066 vic_vector(i) = (reg32_t)vic_defaultHandler;
00067 }
00068
00069 INLINE void vic_setVector(int id, vic_handler_t *handler)
00070 {
00071 ASSERT(id < VIC_SRC_CNT);
00072 vic_vector(id) = (reg32_t)handler;
00073 }
00074 #else
00075 #error Unknown CPU
00076 #endif
00077
00078 #endif