diff options
Diffstat (limited to 'src/interrupt.zig')
-rw-r--r-- | src/interrupt.zig | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/interrupt.zig b/src/interrupt.zig new file mode 100644 index 0000000..60faec6 --- /dev/null +++ b/src/interrupt.zig @@ -0,0 +1,40 @@ +var vector_table: [256] *const fn () void = undefined; +var vtor: *u32 = @ptrFromInt(0xE000ED08); + +pub const vector = enum(u8) { + NMI = 2, + HardFault, + MemManage, + BusFault, + UsageFault, + rsvd7, + rsvd8, + rsvd9, + rsvd10, + SVCall, + DebugMonitor, + rsvd13, + PendSV, + SysTick, +}; + +pub fn initialize() void { + register(.NMI, nmi); + register(.HardFault, hardfault); + register(.MemManage, memmanage); + register(.BusFault, busfault); + register(.UsageFault, usagefault); + + vtor.* = @as(u32, @intFromPtr(&vector_table)); +} + +pub fn register(index: vector, handler: *const fn () void) void { + vector_table[@intFromEnum(index)] = handler; +} + +fn nmi() void { while (true) {} } +fn hardfault() void { while (true) {} } +fn memmanage() void { while (true) {} } +fn busfault() void { while (true) {} } +fn usagefault() void { while (true) {} } + |