bdk: timer: add instruction sleep

usage:
`isleep(ILOOP(instructions))`

Each loop is 3 cycles, or approximately 7.35ns on 408MHz CPU clock.
This commit is contained in:
CTCaer
2023-06-09 10:33:11 +03:00
parent 191a0533d9
commit b674624ad0
3 changed files with 13 additions and 3 deletions

View File

@@ -71,6 +71,12 @@ void usleep(u32 us)
#endif
}
// Instruction wait loop. Each loop is 3 cycles (SUBS+BGT). Usage: isleep(ILOOP(instr)). Base 408MHz: 7.35ns.
void __attribute__((target("arm"))) isleep(u32 is)
{
asm volatile( "0:" "SUBS %[is_cnt], #1;" "BGT 0b;" : [is_cnt] "+r" (is));
}
void timer_usleep(u32 us)
{
TMR(TIMER_TMR8_TMR_PTV) = TIMER_EN | us;