Subversion Repositories freemyipod

Rev

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

Rev 219 Rev 258
Line 139... Line 139...
139
    INT_IRQ56,INT_IRQ57,INT_IRQ58,INT_IRQ59,INT_IRQ60,INT_IRQ61,INT_IRQ62,INT_IRQ63
139
    INT_IRQ56,INT_IRQ57,INT_IRQ58,INT_IRQ59,INT_IRQ60,INT_IRQ61,INT_IRQ62,INT_IRQ63
140
};
140
};
141
 
141
 
142
void irqhandler(void)
142
void irqhandler(void)
143
{
143
{
144
	uint32_t dummy = VIC0ADDRESS;
144
    uint32_t dummy = VIC0ADDRESS;
145
    dummy = VIC1ADDRESS;
145
    dummy = VIC1ADDRESS;
146
    uint32_t irqs0 = VIC0IRQSTATUS;
146
    uint32_t irqs0 = VIC0IRQSTATUS;
147
    uint32_t irqs1 = VIC1IRQSTATUS;
147
    uint32_t irqs1 = VIC1IRQSTATUS;
148
	for (current_irq = 0; irqs0; current_irq++, irqs0 >>= 1)
148
    for (current_irq = 0; irqs0; current_irq++, irqs0 >>= 1)
149
		if (irqs0 & 1)
149
        if (irqs0 & 1)
150
		    irqvector[current_irq]();
150
            irqvector[current_irq]();
151
	for (current_irq = 32; irqs1; current_irq++, irqs1 >>= 1)
151
    for (current_irq = 32; irqs1; current_irq++, irqs1 >>= 1)
152
		if (irqs1 & 1)
152
        if (irqs1 & 1)
153
		    irqvector[current_irq]();
153
            irqvector[current_irq]();
154
    VIC0ADDRESS = 0;
154
    VIC0ADDRESS = 0;
155
    VIC1ADDRESS = 0;
155
    VIC1ADDRESS = 0;
156
}
156
}
157
 
157
 
158
void interrupt_enable(int irq, bool state)
158
void interrupt_enable(int irq, bool state)
159
{
159
{
160
	if (state) VICINTENABLE(irq >> 5) = 1 << (irq & 0x1f);
160
    if (state) VICINTENABLE(irq >> 5) = 1 << (irq & 0x1f);
161
	else VICINTENCLEAR(irq >> 5) = 1 << (irq & 0x1f);
161
    else VICINTENCLEAR(irq >> 5) = 1 << (irq & 0x1f);
162
}
162
}
163
 
163
 
164
void interrupt_set_handler(int irq, void* handler)
164
void interrupt_set_handler(int irq, void* handler)
165
{
165
{
166
	if (handler) irqvector[irq] = handler;
166
    if (handler) irqvector[irq] = handler;
167
	else irqvector[irq] = unhandled_irq;
167
    else irqvector[irq] = unhandled_irq;
168
}
168
}
169
 
169
 
170
void int_timer_set_handler(int timer, void* handler)
170
void int_timer_set_handler(int timer, void* handler)
171
{
171
{
172
	if (handler) timervector[timer] = handler;
172
    if (handler) timervector[timer] = handler;
173
	else timervector[timer] = unhandled_irq;
173
    else timervector[timer] = unhandled_irq;
-
 
174
}
-
 
175
 
-
 
176
void int_dma_set_handler(int channel, void* handler)
-
 
177
{
-
 
178
    void(channel);
-
 
179
    void(handler);
174
}
180
}
175
 
181
 
176
void interrupt_init(void)
182
void interrupt_init(void)
177
{
183
{
178
    VIC0INTENABLE = 1 << IRQ_TIMER;
184
    VIC0INTENABLE = 1 << IRQ_TIMER;