sched_timer.c 1.1 KB

1234567891011121314151617181920212223242526272829303132333435
  1. #include "bsp/bsp_driver.h"
  2. void sched_timer_enable(u32 us) {
  3. timer_parameter_struct timer_initpara;
  4. rcu_periph_clock_enable(SCHED_TIMER_RCU);
  5. timer_deinit(SCHED_TIMER);
  6. /* initialize TIMER init parameter struct */
  7. timer_struct_para_init(&timer_initpara);
  8. timer_initpara.prescaler = TIM_CLOCK_MHz-1;
  9. timer_initpara.alignedmode = TIMER_COUNTER_EDGE;
  10. timer_initpara.counterdirection = TIMER_COUNTER_UP;
  11. timer_initpara.period = us-1;//400;
  12. timer_initpara.clockdivision = TIMER_CKDIV_DIV1;
  13. timer_initpara.repetitioncounter = 0;
  14. timer_init(SCHED_TIMER, &timer_initpara);
  15. timer_counter_value_config(SCHED_TIMER,0);
  16. timer_interrupt_flag_clear(SCHED_TIMER, TIMER_INT_UP);
  17. timer_interrupt_enable(SCHED_TIMER, TIMER_INT_UP);
  18. nvic_irq_enable(SCHED_TIMER_IRQ, SCHED_TIMER_IRQ_PRIORITY, 0);
  19. timer_enable(SCHED_TIMER);
  20. }
  21. __weak void Sched_MC_mTask(void) {}
  22. void SCHED_TIMER_IRQHandler(void) {
  23. if(SET == timer_interrupt_flag_get(SCHED_TIMER, TIMER_INT_UP)) {
  24. timer_interrupt_flag_clear(SCHED_TIMER, TIMER_INT_UP);
  25. Sched_MC_mTask();
  26. }
  27. }