aboutsummaryrefslogtreecommitdiffstats
path: root/src/timer.zig
blob: 21151c77494ca16254280ac59fd32bb63ec6b53c (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
const interrupt = @import("interrupt.zig");

const sys_tick_type = packed struct {
    enable: u1,
    tickint: u1,
    unused: u30,

    rvr: u32,
    cvr: u32,
    calib: u32,
};

var sys_tick: *volatile sys_tick_type = @ptrFromInt(0xE000E010);

pub var ticks_raw: u32 = 0;

pub fn initialize(freq: u32) void {
    interrupt.register(.SysTick, tick);
    sys_tick.rvr = 4000000 / 8 / freq;
    sys_tick.tickint = 1;
    sys_tick.enable = 1;
}

fn tick() void {
    ticks_raw += 1;
}

pub fn ticks() u32 {
    return @atomicLoad(u32, &ticks_raw, .acquire);
}