diff options
author | Josh Rahm <joshuarahm@gmail.com> | 2020-11-25 12:23:11 -0700 |
---|---|---|
committer | Josh Rahm <joshuarahm@gmail.com> | 2020-11-25 12:25:05 -0700 |
commit | f06d29ca9da724866ae99ee2225d53f382d32bcd (patch) | |
tree | fbec7a13e7e05654898116037d7506637aa0ebff /src/kern/priv.c | |
parent | d7d50cc81f72d1275140d7a15c52b6f9e272896f (diff) | |
download | stm32l4-f06d29ca9da724866ae99ee2225d53f382d32bcd.tar.gz stm32l4-f06d29ca9da724866ae99ee2225d53f382d32bcd.tar.bz2 stm32l4-f06d29ca9da724866ae99ee2225d53f382d32bcd.zip |
Add priv.h/c to allow switching to user mode. Change some things with the MPU in main() to actually work.
Diffstat (limited to 'src/kern/priv.c')
-rw-r--r-- | src/kern/priv.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/kern/priv.c b/src/kern/priv.c new file mode 100644 index 0000000..9d64005 --- /dev/null +++ b/src/kern/priv.c @@ -0,0 +1,24 @@ +#include "kern/priv.h" + +void set_control_register(uint32_t reg) +{ + asm volatile("msr control, %0" : "=r"(reg) :); +} + +uint32_t get_control_register() +{ + uint32_t control; + asm volatile("mrs %0, control" : "=r"(control) :); + return control; +} + +void enter_user_mode() +{ + asm volatile ( + "mov r0, #1\n\t" + "msr control, r0\n\t" + ); + + // uint32_t creg = get_control_register(); + // set_control_register(creg | 1); +} |