break out into separate files
parent
0a60bf4e36
commit
ccc904c6bc
@ -0,0 +1,8 @@
|
|||||||
|
pub fn interrupt_disable() void {
|
||||||
|
asm volatile("cpsid i");
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn interrupt_enable() void {
|
||||||
|
asm volatile("cpsie i");
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,45 @@
|
|||||||
|
const registers = packed struct {
|
||||||
|
moder: u32,
|
||||||
|
otyper: u32,
|
||||||
|
ospeedr: u32,
|
||||||
|
pupdr: u32,
|
||||||
|
idr: u32,
|
||||||
|
odr: u32,
|
||||||
|
bsrr: u32,
|
||||||
|
lckr: u32,
|
||||||
|
afrl: u32,
|
||||||
|
afrh: u32,
|
||||||
|
brr: u32,
|
||||||
|
ascr: u32,
|
||||||
|
};
|
||||||
|
|
||||||
|
const driver = struct {
|
||||||
|
port: *registers,
|
||||||
|
|
||||||
|
const mode = enum {
|
||||||
|
input,
|
||||||
|
output,
|
||||||
|
alternate,
|
||||||
|
analog,
|
||||||
|
};
|
||||||
|
|
||||||
|
pub fn set_mode(self: driver, pin: u4, m: mode) void {
|
||||||
|
self.port.moder &= ~(@as(u32, 0x3) << (2 * pin));
|
||||||
|
|
||||||
|
const mask: u32 = switch (m) {
|
||||||
|
.input => 0,
|
||||||
|
.output => 1,
|
||||||
|
.alternate => 2,
|
||||||
|
.analog => 3
|
||||||
|
};
|
||||||
|
|
||||||
|
self.port.moder |= mask << (2 * pin);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn toggle(self: driver, pin: u4) void {
|
||||||
|
self.port.odr ^= @as(u32, 1) << pin;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
pub const gpioa = driver { .port = @ptrFromInt(0x48000000) };
|
||||||
|
|
Loading…
Reference in New Issue