aboutsummaryrefslogtreecommitdiff
path: root/interrupts.c
diff options
context:
space:
mode:
Diffstat (limited to 'interrupts.c')
-rw-r--r--interrupts.c22
1 files changed, 20 insertions, 2 deletions
diff --git a/interrupts.c b/interrupts.c
index 7932d23..f47bc1d 100644
--- a/interrupts.c
+++ b/interrupts.c
@@ -1,4 +1,5 @@
#include "uart.h"
+#include "svc_interface.h"
void setup(void);
@@ -24,9 +25,26 @@ void undefined_instruction_vector(void)
}
}
-void supervisor_call_handler(void)
+uint32_t supervisor_call_handler(enum svc_type request, uint32_t arg1,
+ uint32_t arg2, uint32_t arg3)
{
- uart_puts("something svc happened\n\r");
+ (void) arg2; (void) arg3; // unused for now
+
+ switch(request) {
+ case UART_PUTCHAR:
+ uart_putc(arg1);
+ break;
+ case UART_GETCHAR:
+ return uart_getc();
+ case UART_WRITE:
+ uart_puts("UART_WRITE not implemented!!!!!\n\r");
+ break;
+ default:
+ // perhaps we should kill the process now?
+ uart_puts("unknown supervisor call type!!!!!\n\r");
+ }
+
+ return 0; // a dummy value
}
void abort_handler(void)