added apex audio system
[gbajam21] / src / intr.c
1 #include "intr.h"
2
3 #define MAX_INTR        14
4 static void (*intr_table[MAX_INTR])(void);
5
6 __attribute__ ((target("arm"), section(".iwram")))
7 static void intr_handler(void)
8 {
9         int i;
10         uint16_t iflags;
11
12         intr_disable();
13         iflags = REG_IF & 0x3fff;
14
15
16         for(i=0; i<MAX_INTR; i++) {
17                 if((iflags & (1 << i)) && intr_table[i]) {
18                         intr_table[i]();
19                 }
20         }
21
22         REG_IF = iflags;        /* ack intr */
23         intr_enable();
24 }
25
26 void intr_init(void)
27 {
28         INTR_VECTOR = (uint32_t)intr_handler;
29 }
30
31 void interrupt(int intr, void (*handler)(void))
32 {
33         intr_table[intr] = handler;
34 }