Subversion Repositories freemyipod

Rev

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

Rev 265 Rev 266
Line 49... Line 49...
49
default_interrupt(INT_IRQ11);
49
default_interrupt(INT_IRQ11);
50
default_interrupt(INT_IRQ12);
50
default_interrupt(INT_IRQ12);
51
default_interrupt(INT_IRQ13);
51
default_interrupt(INT_IRQ13);
52
default_interrupt(INT_IRQ14);
52
default_interrupt(INT_IRQ14);
53
default_interrupt(INT_IRQ15);
53
default_interrupt(INT_IRQ15);
-
 
54
default_interrupt(INT_DMAC0C0);
-
 
55
default_interrupt(INT_DMAC0C1);
-
 
56
default_interrupt(INT_DMAC0C2);
-
 
57
default_interrupt(INT_DMAC0C3);
-
 
58
default_interrupt(INT_DMAC0C4);
-
 
59
default_interrupt(INT_DMAC0C5);
-
 
60
default_interrupt(INT_DMAC0C6);
-
 
61
default_interrupt(INT_DMAC0C7);
-
 
62
default_interrupt(INT_DMAC1C0);
-
 
63
default_interrupt(INT_DMAC1C1);
-
 
64
default_interrupt(INT_DMAC1C2);
-
 
65
default_interrupt(INT_DMAC1C3);
-
 
66
default_interrupt(INT_DMAC1C4);
-
 
67
default_interrupt(INT_DMAC1C5);
54
default_interrupt(INT_IRQ16);
68
default_interrupt(INT_DMAC1C6);
55
default_interrupt(INT_IRQ17);
69
default_interrupt(INT_DMAC1C7);
56
default_interrupt(INT_IRQ18);
70
default_interrupt(INT_IRQ18);
57
default_interrupt(INT_USB_FUNC);
71
default_interrupt(INT_USB_FUNC);
58
default_interrupt(INT_IRQ20);
72
default_interrupt(INT_IRQ20);
59
default_interrupt(INT_IRQ21);
73
default_interrupt(INT_IRQ21);
60
default_interrupt(INT_IRQ22);
74
default_interrupt(INT_IRQ22);
Line 125... Line 139...
125
    if (TFCON & 0x00038000) timervector[5]();
139
    if (TFCON & 0x00038000) timervector[5]();
126
    if (TGCON & 0x00038000) timervector[6]();
140
    if (TGCON & 0x00038000) timervector[6]();
127
    if (THCON & 0x00038000) timervector[7]();
141
    if (THCON & 0x00038000) timervector[7]();
128
}
142
}
129
 
143
 
-
 
144
static void (* dmavector[])(void) IDATA_ATTR =
-
 
145
{
-
 
146
    INT_DMAC0C0,INT_DMAC0C1,INT_DMAC0C2,INT_DMAC0C3,INT_DMAC0C4,INT_DMAC0C5,INT_DMAC0C6,INT_DMAC0C7,
-
 
147
    INT_DMAC1C0,INT_DMAC1C1,INT_DMAC1C2,INT_DMAC1C3,INT_DMAC1C4,INT_DMAC1C5,INT_DMAC1C6,INT_DMAC1C7
-
 
148
};
-
 
149
 
-
 
150
void INT_DMAC0(void) ICODE_ATTR;
-
 
151
void INT_DMAC0()
-
 
152
{
-
 
153
    uint32_t intsts = DMAC0INTSTS;
-
 
154
    if (intsts & 1) dmavector[0]();
-
 
155
    if (intsts & 2) dmavector[1]();
-
 
156
    if (intsts & 4) dmavector[2]();
-
 
157
    if (intsts & 8) dmavector[3]();
-
 
158
    if (intsts & 0x10) dmavector[4]();
-
 
159
    if (intsts & 0x20) dmavector[5]();
-
 
160
    if (intsts & 0x40) dmavector[6]();
-
 
161
    if (intsts & 0x80) dmavector[7]();
-
 
162
}
-
 
163
 
-
 
164
void INT_DMAC1(void) ICODE_ATTR;
-
 
165
void INT_DMAC1()
-
 
166
{
-
 
167
    uint32_t intsts = DMAC1INTSTS;
-
 
168
    if (intsts & 1) dmavector[8]();
-
 
169
    if (intsts & 2) dmavector[9]();
-
 
170
    if (intsts & 4) dmavector[10]();
-
 
171
    if (intsts & 8) dmavector[11]();
-
 
172
    if (intsts & 0x10) dmavector[12]();
-
 
173
    if (intsts & 0x20) dmavector[13]();
-
 
174
    if (intsts & 0x40) dmavector[14]();
-
 
175
    if (intsts & 0x80) dmavector[15]();
-
 
176
}
-
 
177
 
130
static void (* irqvector[])(void) IDATA_ATTR =
178
static void (* irqvector[])(void) IDATA_ATTR =
131
{
179
{
132
    INT_IRQ0,INT_IRQ1,INT_IRQ2,INT_IRQ3,INT_IRQ4,INT_IRQ5,INT_IRQ6,INT_IRQ7,
180
    INT_IRQ0,INT_IRQ1,INT_IRQ2,INT_IRQ3,INT_IRQ4,INT_IRQ5,INT_IRQ6,INT_IRQ7,
133
    INT_TIMER,INT_IRQ9,INT_IRQ10,INT_IRQ11,INT_IRQ12,INT_IRQ13,INT_IRQ14,INT_IRQ15,
181
    INT_TIMER,INT_IRQ9,INT_IRQ10,INT_IRQ11,INT_IRQ12,INT_IRQ13,INT_IRQ14,INT_IRQ15,
134
    INT_IRQ16,INT_IRQ17,INT_IRQ18,INT_USB_FUNC,INT_IRQ20,INT_IRQ21,INT_IRQ22,INT_IRQ23,
182
    INT_DMAC0,INT_DMAC1,INT_IRQ18,INT_USB_FUNC,INT_IRQ20,INT_IRQ21,INT_IRQ22,INT_IRQ23,
135
    INT_IRQ24,INT_IRQ25,INT_IRQ26,INT_IRQ27,INT_IRQ28,INT_IRQ29,INT_IRQ30,INT_IRQ31,
183
    INT_IRQ24,INT_IRQ25,INT_IRQ26,INT_IRQ27,INT_IRQ28,INT_IRQ29,INT_IRQ30,INT_IRQ31,
136
    INT_IRQ32,INT_IRQ33,INT_IRQ34,INT_IRQ35,INT_IRQ36,INT_IRQ37,INT_IRQ38,INT_IRQ39,
184
    INT_IRQ32,INT_IRQ33,INT_IRQ34,INT_IRQ35,INT_IRQ36,INT_IRQ37,INT_IRQ38,INT_IRQ39,
137
    INT_IRQ40,INT_IRQ41,INT_IRQ42,INT_IRQ43,INT_IRQ55,INT_IRQ56,INT_IRQ57,INT_IRQ58,
185
    INT_IRQ40,INT_IRQ41,INT_IRQ42,INT_IRQ43,INT_IRQ55,INT_IRQ56,INT_IRQ57,INT_IRQ58,
138
    INT_IRQ48,INT_IRQ49,INT_IRQ50,INT_IRQ51,INT_IRQ52,INT_IRQ53,INT_IRQ54,INT_IRQ55,
186
    INT_IRQ48,INT_IRQ49,INT_IRQ50,INT_IRQ51,INT_IRQ52,INT_IRQ53,INT_IRQ54,INT_IRQ55,
139
    INT_IRQ56,INT_IRQ57,INT_IRQ58,INT_IRQ59,INT_IRQ60,INT_IRQ61,INT_IRQ62,INT_IRQ63
187
    INT_IRQ56,INT_IRQ57,INT_IRQ58,INT_IRQ59,INT_IRQ60,INT_IRQ61,INT_IRQ62,INT_IRQ63
Line 173... Line 221...
173
    else timervector[timer] = unhandled_irq;
221
    else timervector[timer] = unhandled_irq;
174
}
222
}
175
 
223
 
176
void int_dma_set_handler(int channel, void* handler)
224
void int_dma_set_handler(int channel, void* handler)
177
{
225
{
178
    (void)channel;
226
    if (handler) dmavector[channel] = handler;
179
    (void)handler;
227
    else dmavector[channel] = unhandled_irq;
180
}
228
}
181
 
229
 
182
void interrupt_init(void)
230
void interrupt_init(void)
183
{
231
{
184
    VIC0INTENABLE = 1 << IRQ_TIMER;
232
    VIC0INTENABLE = (1 << IRQ_TIMER) || (1 << IRQ_DMAC0) || (1 << IRQ_DMAC1);
185
}
233
}
186
 
234
 
187
void interrupt_shutdown(void)
235
void interrupt_shutdown(void)
188
{
236
{
189
    VIC0INTENCLEAR = 0xffffffff;
237
    VIC0INTENCLEAR = 0xffffffff;