import em from '@$$emscript'
export const $U = em.$declare('MODULE')
export const MHZ = $config<u16>(48)
const MAX = <u32>0x00FF_FFFF
var cur_thresh = <u32>0
export function set(time_us: u32) {
cur_thresh = MAX - (time_us * MHZ.$$)
start()
}
export function spin() {
let val: volatile_t<u32> = MAX
while (val > cur_thresh) val = e$`SysTick->VAL`
e$`SysTick->CTRL = 0`
}
export function start() {
e$`SysTick->CTRL = (1 << SysTick_CTRL_CLKSOURCE_Pos) | (1 << SysTick_CTRL_ENABLE_Pos)`
e$`SysTick->LOAD = 0xFFFFFF`
e$`SysTick->VAL = 0`
}
export function stop(): u32 {
let lr = <u32>e$`SysTick->LOAD`
let vr = <u32>e$`SysTick->VAL`
let dt = (((lr - vr) << 1) / MHZ.$$) >> 1
e$`SysTick->CTRL = 0`
return dt
}