sched_timer.c 741 B

12345678910111213141516171819202122232425
  1. #include "bsp/bsp_driver.h"
  2. void sched_timer_enable(u32 us) {
  3. crm_periph_clock_enable(SCHED_TIMER_RCU, TRUE);
  4. tmr_reset(SCHED_TIMER);
  5. tmr_base_init(SCHED_TIMER, us-1, TIM_CLOCK_MHz-1);
  6. tmr_cnt_dir_set(SCHED_TIMER, TMR_COUNT_UP);
  7. tmr_clock_source_div_set(SCHED_TIMER, TMR_CLOCK_DIV1);
  8. tmr_counter_value_set(SCHED_TIMER, 0);
  9. tmr_flag_clear(SCHED_TIMER, TMR_OVF_FLAG);
  10. tmr_interrupt_enable(SCHED_TIMER, TMR_OVF_INT, TRUE);
  11. nvic_irq_enable(SCHED_TIMER_IRQ, SCHED_TIMER_IRQ_PRIORITY, 0);
  12. tmr_counter_enable(SCHED_TIMER, TRUE);
  13. }
  14. __weak void Sched_MC_mTask(void) {}
  15. void SCHED_TIMER_IRQHandler(void) {
  16. if(SET == tmr_flag_get(SCHED_TIMER, TMR_OVF_FLAG)) {
  17. tmr_flag_clear(SCHED_TIMER, TMR_OVF_FLAG);
  18. Sched_MC_mTask();
  19. }
  20. }