Timer.c 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. /*********************************************************************************************************
  2. * Module : Timer.c
  3. * Abstract : Timer modules, this module is used to improve Timing service!
  4. * Version : 1.0.0
  5. * Author : Leopul(COPYRIGHT 2025 - 2027 Leopul. All rights reserved.)
  6. * Complete : 2025-02-16
  7. * Content : None
  8. * Note : None
  9. *********************************************************************************************************/
  10. #include "Timer.h"
  11. #include "gd32f30x_libopt.h"
  12. #include "main.h"
  13. static unsigned char s_i100msFlag = 0;
  14. static unsigned char s_i2msFlag = 0;
  15. static unsigned char s_i1secFlag = 0;
  16. volatile unsigned long int g_del_ms =0;
  17. static void ConfigTimer14(unsigned short arr, unsigned short psc);
  18. static void ConfigTimer15(unsigned short arr, unsigned short psc);
  19. static void ConfigTimer16(unsigned short arr, unsigned short psc);
  20. static sts_data_t *data = 0;
  21. static void ConfigTimer14(unsigned short arr, unsigned short psc)
  22. {
  23. timer_parameter_struct timer_initpara;
  24. rcu_periph_clock_enable(RCU_TIMER2);
  25. timer_deinit(TIMER2);
  26. timer_struct_para_init(&timer_initpara);
  27. timer_initpara.prescaler = psc;
  28. timer_initpara.counterdirection = TIMER_COUNTER_UP;
  29. timer_initpara.period = arr;
  30. timer_initpara.clockdivision = TIMER_CKDIV_DIV1;
  31. timer_init(TIMER2, &timer_initpara);
  32. timer_interrupt_enable(TIMER2, TIMER_INT_UP);
  33. nvic_irq_enable(TIMER2_IRQn,0,3);
  34. timer_enable(TIMER2);
  35. }
  36. //uint32_t read_ele_count = 0;
  37. //uint8_t read_ele_flag = 0;
  38. void TIMER2_IRQHandler(void)
  39. {
  40. //static unsigned short s_iCnt2 = 0;
  41. static uint16_t cnt_1000 = 0;
  42. static uint16_t cnt_100 = 0;
  43. static uint8_t cnt_5 = 0;
  44. if(timer_interrupt_flag_get(TIMER2, TIMER_INT_FLAG_UP) == SET)
  45. {
  46. timer_interrupt_flag_clear(TIMER2, TIMER_INT_FLAG_UP);
  47. }
  48. cnt_1000++;
  49. cnt_100++;
  50. if(cnt_1000 >=1000)
  51. {
  52. data->flag_1000ms = 1;
  53. cnt_1000 = 0;
  54. }
  55. if(cnt_100 >= 300)
  56. {
  57. data->flag_100ms = 1;
  58. cnt_100 = 0;
  59. }
  60. }
  61. void InitTimer(void)
  62. {
  63. ConfigTimer14(999, 71); //72MHz/(71+1)=1MHz£¬ÓÉ0¼ÆÊýµ½999Ϊ1ms
  64. data = get_sts();
  65. }