aboutsummaryrefslogtreecommitdiff
path: root/demo_functionality.c
diff options
context:
space:
mode:
authorvetch <vetch97@gmail.com>2019-12-17 11:46:24 +0100
committervetch <vetch97@gmail.com>2019-12-17 11:46:24 +0100
commit0929e37e54cb7c52d8d3696a24aac5e421fb0660 (patch)
tree483083f97792cabdff053262fe7239ca3ea1a52a /demo_functionality.c
parentf87b0105a0ac411b0d64d89a9ea92e9b07087aa2 (diff)
parent1a75b3f08e28876896ea90f85b1e8101ef55dd5d (diff)
downloadrpi-MMU-example-0929e37e54cb7c52d8d3696a24aac5e421fb0660.tar.gz
rpi-MMU-example-0929e37e54cb7c52d8d3696a24aac5e421fb0660.zip
Merge branch 'bob' of https://repo.or.cz/RPi-MMU-example into alice
# Conflicts: # Makefile # PL0_test.c # kernel.c # linker.ld
Diffstat (limited to 'demo_functionality.c')
-rw-r--r--demo_functionality.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/demo_functionality.c b/demo_functionality.c
index 7bba6a6..d4b86db 100644
--- a/demo_functionality.c
+++ b/demo_functionality.c
@@ -113,3 +113,25 @@ void demo_go_unprivileged(void)
"movt r5, #"PL0_SECTION_NUMBER_STR"0000\n\r"
"blx r5\n\r");
}
+
+extern char
+ __interrupt_vectors_start,
+ __interrupt_vectors_end,
+ __interrupt_vectors_size;
+
+extern void (*volatile system_reentry_point)(void);
+
+void system_reentry(void)
+{
+ uart_puts("re-entered system");
+ while(1);
+}
+
+void demo_setup_interrupts(void)
+{
+ system_reentry_point = system_reentry;
+
+ for (size_t i = 0; i < (size_t) &__interrupt_vectors_size; i++)
+ ((volatile char*) 0)[i] =
+ (&__interrupt_vectors_start)[i];
+}