sched_timer.c 936 B

12345678910111213141516171819202122232425262728293031323334
  1. #include "bsp/bsp_driver.h"
  2. void sched_timer_enable(u32 us) {
  3. TIM_TimeBaseInitType TIM_TimeBaseStructure;
  4. rcu_apb1_periph_clock_enable(SCHED_TIMER_RCU);
  5. TIM_DeInit(SCHED_TIMER);
  6. TIM_InitTimBaseStruct(&TIM_TimeBaseStructure);
  7. TIM_TimeBaseStructure.Period = us-1;
  8. TIM_TimeBaseStructure.Prescaler = TIM_SCHED_CLK_MHz-1;
  9. TIM_TimeBaseStructure.ClkDiv = 0;
  10. TIM_TimeBaseStructure.CntMode = TIM_CNT_MODE_UP;
  11. TIM_InitTimeBase(TIM5, &TIM_TimeBaseStructure);
  12. TIM_SetCnt(SCHED_TIMER,0);
  13. TIM_ClearFlag(SCHED_TIMER, TIM_FLAG_UPDATE);
  14. TIM_ConfigInt(SCHED_TIMER, TIM_INT_UPDATE, ENABLE);
  15. nvic_irq_enable(SCHED_TIMER_IRQ, SCHED_TIMER_IRQ_PRIORITY, 0);
  16. TIM_Enable(SCHED_TIMER, ENABLE);
  17. }
  18. __weak void Sched_MC_mTask(void) {}
  19. void SCHED_TIMER_IRQHandler(void) {
  20. if(SET == TIM_GetIntStatus(SCHED_TIMER, TIM_INT_UPDATE)) {
  21. TIM_ClrIntPendingBit(SCHED_TIMER, TIM_INT_UPDATE);
  22. Sched_MC_mTask();
  23. }
  24. }