aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--interrupts.c10
-rw-r--r--interrupts.h1
-rw-r--r--kernel.c1
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
diff --git a/kernel.c b/kernel.c
index 95d803d..81d261f 100644
--- a/kernel.c
+++ b/kernel.c
@@ -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);