aboutsummaryrefslogtreecommitdiffstats
path: root/src/main.zig
blob: 99cb451ac677c7ebcaf1a097bd746147b944dbba (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
const cpu = @import("cpu.zig");
const gpio = @import("gpio.zig");
const interrupt = @import("interrupt.zig");
const timer = @import("timer.zig");

const rcc: *[39]u32 = @ptrFromInt(0x40021000);
const gpioa = gpio.gpioa;
const gpioc = gpio.gpioc;
const tick = timer.systick;

pub fn main() void {
    cpu.interrupt_disable();
    interrupt.initialize();
    interrupt.register(.SVCall, svcall);
    tick.initialize(1000);
    cpu.interrupt_enable();

    rcc[19] |= 5; // gpio a and c
    gpioa.set_mode(5, .output);
    gpioc.set_mode(13, .input);

    while (true) {
        //asm volatile("svc 0");
        gpioa.toggle(5);
        const next = tick.ticks() + 1000;
        while (tick.ticks() < next) {
            asm volatile("nop");
        }
    }
}

fn svcall() void {
    const state = gpioc.read(13);
    gpioa.write(5, state);
}