Subversion Repositories freemyipod

Rev

Rev 14 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 14 Rev 15
Line 31... Line 31...
31
default_interrupt(EXT0);
31
default_interrupt(EXT0);
32
default_interrupt(EXT1);
32
default_interrupt(EXT1);
33
default_interrupt(EXT2);
33
default_interrupt(EXT2);
34
default_interrupt(EINT_VBUS);
34
default_interrupt(EINT_VBUS);
35
default_interrupt(EINTG);
35
default_interrupt(EINTG);
36
default_interrupt(INT_TIMERA);
-
 
37
default_interrupt(INT_WDT);
36
default_interrupt(INT_WDT);
-
 
37
default_interrupt(INT_TIMERA);
38
default_interrupt(INT_TIMERB);
38
default_interrupt(INT_TIMERB);
39
default_interrupt(INT_TIMERC);
39
default_interrupt(INT_TIMERC);
40
default_interrupt(INT_TIMERD);
40
default_interrupt(INT_TIMERD);
-
 
41
default_interrupt(INT_DMA0);
41
default_interrupt(INT_DMA);
42
default_interrupt(INT_DMA1);
-
 
43
default_interrupt(INT_DMA2);
-
 
44
default_interrupt(INT_DMA3);
-
 
45
default_interrupt(INT_DMA4);
-
 
46
default_interrupt(INT_DMA5);
-
 
47
default_interrupt(INT_DMA6);
-
 
48
default_interrupt(INT_DMA7);
-
 
49
default_interrupt(INT_DMA8);
42
default_interrupt(INT_ALARM_RTC);
50
default_interrupt(INT_ALARM_RTC);
43
default_interrupt(INT_PRI_RTC);
51
default_interrupt(INT_PRI_RTC);
44
default_interrupt(RESERVED1);
52
default_interrupt(RESERVED1);
45
default_interrupt(INT_UART);
53
default_interrupt(INT_UART);
46
default_interrupt(INT_USB_HOST);
54
default_interrupt(INT_USB_HOST);
Line 68... Line 76...
68
void unhandled_irq(void)
76
void unhandled_irq(void)
69
{
77
{
70
    panicf(PANIC_FATAL, "Unhandled IRQ %d!", INTOFFSET);
78
    panicf(PANIC_FATAL, "Unhandled IRQ %d!", INTOFFSET);
71
}
79
}
72
 
80
 
-
 
81
static void (* const timervector[])(void) IDATA_ATTR =
-
 
82
{
-
 
83
    INT_TIMERA,INT_TIMERB,INT_TIMERC,INT_TIMERD
-
 
84
};
-
 
85
 
-
 
86
void INT_TIMER(void) ICODE_ATTR;
73
void INT_TIMER()
87
void INT_TIMER()
74
{
88
{
75
    if (TACON & 0x00038000) INT_TIMERA();
89
    if (TACON & 0x00038000) timervector[0]();
76
    if (TBCON & 0x00038000) INT_TIMERB();
90
    if (TBCON & 0x00038000) timervector[1]();
77
    if (TCCON & 0x00038000) INT_TIMERC();
91
    if (TCCON & 0x00038000) timervector[2]();
78
    if (TDCON & 0x00038000) INT_TIMERD();
92
    if (TDCON & 0x00038000) timervector[3]();
79
}
93
}
80
 
94
 
-
 
95
static void (* const dmavector[])(void) IDATA_ATTR =
-
 
96
{
-
 
97
    INT_DMA0,INT_DMA1,INT_DMA2,INT_DMA3,INT_DMA4,INT_DMA5,INT_DMA6,INT_DMA7,INT_DMA8
-
 
98
};
-
 
99
 
-
 
100
void INT_DMA(void) ICODE_ATTR;
-
 
101
void INT_DMA()
-
 
102
{
-
 
103
    uint32_t dmaallst = DMAALLST;
-
 
104
    uint32_t dmaallst2 = DMAALLST2;
-
 
105
    if (dmaallst & (DMACON0 >> 16) & 3) dmavector[0]();
-
 
106
    if (dmaallst & (DMACON1 >> 12) & 0x30) dmavector[1]();
-
 
107
    if (dmaallst & (DMACON2 >> 8) & 0x300) dmavector[2]();
-
 
108
    if (dmaallst & (DMACON3 >> 4) & 0x3000) dmavector[3]();
-
 
109
    if (dmaallst2 & (DMACON4 >> 16) & 3) dmavector[4]();
-
 
110
    if (dmaallst2 & (DMACON5 >> 12) & 0x30) dmavector[5]();
-
 
111
    if (dmaallst2 & (DMACON6 >> 8) & 0x300) dmavector[6]();
-
 
112
    if (dmaallst2 & (DMACON7 >> 4) & 0x3000) dmavector[7]();
-
 
113
    if (dmaallst2 & DMACON8 & 0x30000) dmavector[8]();
-
 
114
}
-
 
115
 
81
static void (* const irqvector[])(void) =
116
static void (* const irqvector[])(void) IDATA_ATTR =
82
{
117
{
83
    EXT0,EXT1,EXT2,EINT_VBUS,EINTG,INT_TIMER,INT_WDT,INT_UNK1,
118
    EXT0,EXT1,EXT2,EINT_VBUS,EINTG,INT_TIMER,INT_WDT,INT_UNK1,
84
    INT_UNK2,INT_UNK3,INT_DMA,INT_ALARM_RTC,INT_PRI_RTC,RESERVED1,INT_UART,INT_USB_HOST,
119
    INT_UNK2,INT_UNK3,INT_DMA,INT_ALARM_RTC,INT_PRI_RTC,RESERVED1,INT_UART,INT_USB_HOST,
85
    INT_USB_FUNC,INT_LCDC_0,INT_LCDC_1,INT_CALM,INT_ATA,INT_UART0,INT_SPDIF_OUT,INT_ECC,
120
    INT_USB_FUNC,INT_LCDC_0,INT_LCDC_1,INT_CALM,INT_ATA,INT_UART0,INT_SPDIF_OUT,INT_ECC,
86
    INT_SDCI,INT_LCD,INT_SPI,INT_IIC,RESERVED2,INT_MSTICK,INT_ADC_WAKEUP,INT_ADC
121
    INT_SDCI,INT_LCD,INT_SPI,INT_IIC,RESERVED2,INT_MSTICK,INT_ADC_WAKEUP,INT_ADC
Line 90... Line 125...
90
{
125
{
91
    int irq_no = INTOFFSET;
126
    int irq_no = INTOFFSET;
92
    irqvector[irq_no]();
127
    irqvector[irq_no]();
93
    SRCPND = (1 << irq_no);
128
    SRCPND = (1 << irq_no);
94
    INTPND = INTPND;
129
    INTPND = INTPND;
95
}
-
 
96
130
}
-
 
131
 
-
 
132
void interrupt_init(void)
-
 
133
{
-
 
134
    INTMSK = INTMSK_TIMER | INTMSK_DMA;
-
 
135
}
-
 
136