void stm32_timer_pm_event(EXO* exo) { exo->timer.hpet_uspsc = stm32_timer_get_clock(exo, HPET_TIMER) / 1000000; #if !(STM32_RTC_DRIVER) stm32_timer_stop(SECOND_PULSE_TIMER); stm32_timer_start(exo, SECOND_PULSE_TIMER, TIMER_VALUE_HZ, 1); #endif //STM32_RTC_DRIVER }
void stm32_timer_pm_event(CORE* core) { core->timer.hpet_uspsc = stm32_timer_get_clock(core, HPET_TIMER) / 1000000; #if !(STM32_RTC_DRIVER) stm32_timer_stop(SECOND_PULSE_TIMER); stm32_timer_start(core, SECOND_PULSE_TIMER, TIMER_VALUE_HZ, 1); #endif //STM32_RTC_DRIVER }
void stm32_timer_init(EXO* exo) { #if defined(STM32F1) || defined(STM32F2) || defined(STM32F4) exo->timer.shared1 = exo->timer.shared8 = 0; #endif //setup HPET kirq_register(KERNEL_HANDLE, TIMER_VECTORS[HPET_TIMER], hpet_isr, (void*)exo); exo->timer.hpet_uspsc = stm32_timer_get_clock(exo, HPET_TIMER) / 1000000; stm32_timer_open(exo, HPET_TIMER, TIMER_ONE_PULSE | TIMER_IRQ_ENABLE | (13 << TIMER_IRQ_PRIORITY_POS)); CB_SVC_TIMER cb_svc_timer; cb_svc_timer.start = hpet_start; cb_svc_timer.stop = hpet_stop; cb_svc_timer.elapsed = hpet_elapsed; ksystime_hpet_setup(&cb_svc_timer, exo); #if !(STM32_RTC_DRIVER) kirq_register(KERNEL_HANDLE, TIMER_VECTORS[SECOND_PULSE_TIMER], second_pulse_isr, (void*)exo); stm32_timer_open(exo, SECOND_PULSE_TIMER, TIMER_IRQ_ENABLE | (13 << TIMER_IRQ_PRIORITY_POS)); stm32_timer_start(exo, SECOND_PULSE_TIMER, TIMER_VALUE_HZ, 1); #endif //STM32_RTC_DRIVER }
void stm32_timer_init(CORE *core) { #if defined(STM32F1) || defined(STM32F2) || defined(STM32F4) core->timer.shared1 = core->timer.shared8 = 0; #endif //setup HPET irq_register(TIMER_VECTORS[HPET_TIMER], hpet_isr, (void*)core); core->timer.hpet_uspsc = stm32_timer_get_clock(core, HPET_TIMER) / 1000000; stm32_timer_open(core, HPET_TIMER, TIMER_ONE_PULSE | TIMER_IRQ_ENABLE | (13 << TIMER_IRQ_PRIORITY_POS)); CB_SVC_TIMER cb_svc_timer; cb_svc_timer.start = hpet_start; cb_svc_timer.stop = hpet_stop; cb_svc_timer.elapsed = hpet_elapsed; systime_hpet_setup(&cb_svc_timer, core); #if !(STM32_RTC_DRIVER) irq_register(TIMER_VECTORS[SECOND_PULSE_TIMER], second_pulse_isr, (void*)core); stm32_timer_open(core, SECOND_PULSE_TIMER, TIMER_IRQ_ENABLE | (13 << TIMER_IRQ_PRIORITY_POS)); stm32_timer_start(core, SECOND_PULSE_TIMER, TIMER_VALUE_HZ, 1); #endif //STM32_RTC_DRIVER }
static inline void stm32_timer_setup_us(EXO* exo, TIMER_NUM num, unsigned int us) { unsigned int clk; clk = stm32_timer_get_clock(exo, num) / 1000000 * us; stm32_timer_setup_clk(num, clk); }
static inline void stm32_timer_setup_hz(EXO* exo, TIMER_NUM num, unsigned int hz) { unsigned int clk; clk = stm32_timer_get_clock(exo, num) / hz; stm32_timer_setup_clk(num, clk); }
static inline void stm32_timer_setup_hz(CORE* core, TIMER_NUM num, unsigned int hz) { unsigned int clk; clk = stm32_timer_get_clock(core, num) / hz; stm32_timer_setup_clk(num, clk); }