diff options
-rw-r--r-- | interrupts.c | 10 | ||||
-rw-r--r-- | interrupts.h | 1 | ||||
-rw-r--r-- | kernel.c | 1 |
3 files changed, 12 insertions, 0 deletions
diff --git a/interrupts.c b/interrupts.c index 3dc3d6f..79007cb 100644 --- a/interrupts.c +++ b/interrupts.c @@ -12,4 +12,14 @@ void __attribute__((interrupt("UNDEF"))) undefined_instruction_vector(void) { /* Do Nothing! */ } +} + +__irq void IRQHandler (void) +{ + volatile unsigned int *base = (unsigned int *) 0x80000000; + if (*base == 1) // which interrupt was it? + { + uart_putc(*base); // process the interrupt + } + *(base+1) = 0; // clear the interrupt }
\ No newline at end of file diff --git a/interrupts.h b/interrupts.h index 9dacc42..561df70 100644 --- a/interrupts.h +++ b/interrupts.h @@ -32,6 +32,7 @@ typedef struct { volatile uint32_t Disable_Basic_IRQs; } rpi_irq_controller_t; + extern rpi_irq_controller_t* RPI_GetIrqController(void); #endif //RPI_MMU_EXAMPLE_INTERRUPTS_H @@ -33,6 +33,7 @@ void kernel_main(uint32_t r0, uint32_t r1, uint32_t atags) // there and jumps to it... never, ever, ever returns demo_go_unprivileged(); + while(1); |