Что я обычно делаю, так это чтобы таймер работал с частотой 1 кГц, поэтому он будет генерировать прерывание каждую миллисекунду, в обработчике прерываний я увеличиваю глобальную переменную на единицу, скажем ms_ticks
, затем делаю что-то вроде:
volatile unsigned int ms_ticks = 0;
void timer_isr() { //every ms
ms_ticks++;
}
void delay(int ms) {
ms += ms_ticks;
while (ms > ms_ticks)
;
}
Также возможно использовать это как метку времени, поэтому допустим, что я хочу что-то делать каждые 500 мс:
last_action = ms_ticks;
while (1) { //app super loop
if (ms_ticks - last_action >= 500) {
last_action = ms_ticks;
//action code here
}
//rest of the code
}
Другая альтернатива, поскольку ARM 32-битные и ваш таймер, вероятно, будет 32-битным, вместо того, чтобы генерировать прерывание 1 кГц, вы оставляете его свободным и просто используете счетчик как ms_ticks
.