You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
31 lines
1.0 KiB
31 lines
1.0 KiB
static void timer_init(TIM_TypeDef *TIM, int psc) {
|
|
register_set(&(TIM->PSC), (psc-1), 0xFFFFU);
|
|
register_set(&(TIM->DIER), TIM_DIER_UIE, 0x5F5FU);
|
|
register_set(&(TIM->CR1), TIM_CR1_CEN, 0x3FU);
|
|
TIM->SR = 0;
|
|
}
|
|
|
|
void microsecond_timer_init(void) {
|
|
MICROSECOND_TIMER->PSC = (APB1_TIMER_FREQ - 1U);
|
|
MICROSECOND_TIMER->CR1 = TIM_CR1_CEN;
|
|
MICROSECOND_TIMER->EGR = TIM_EGR_UG;
|
|
}
|
|
|
|
uint32_t microsecond_timer_get(void) {
|
|
return MICROSECOND_TIMER->CNT;
|
|
}
|
|
|
|
void interrupt_timer_init(void) {
|
|
enable_interrupt_timer();
|
|
REGISTER_INTERRUPT(INTERRUPT_TIMER_IRQ, interrupt_timer_handler, 1, FAULT_INTERRUPT_RATE_INTERRUPTS)
|
|
register_set(&(INTERRUPT_TIMER->PSC), ((uint16_t)(15.25*APB1_TIMER_FREQ)-1U), 0xFFFFU);
|
|
register_set(&(INTERRUPT_TIMER->DIER), TIM_DIER_UIE, 0x5F5FU);
|
|
register_set(&(INTERRUPT_TIMER->CR1), TIM_CR1_CEN, 0x3FU);
|
|
INTERRUPT_TIMER->SR = 0;
|
|
NVIC_EnableIRQ(INTERRUPT_TIMER_IRQ);
|
|
}
|
|
|
|
void tick_timer_init(void) {
|
|
timer_init(TICK_TIMER, (uint16_t)((15.25*APB2_TIMER_FREQ)/8U));
|
|
NVIC_EnableIRQ(TICK_TIMER_IRQ);
|
|
}
|
|
|