timer.c 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. #include "timer.h"
  2. #include "gd32e230_timer.h"
  3. #include "adc.h"
  4. static void ConfigTimer14(unsigned short arr, unsigned short psc)
  5. {
  6. timer_parameter_struct timer_initpara; //timer_initpara用于存放定时器的参数
  7. //使能RCU相关时钟
  8. rcu_periph_clock_enable(RCU_TIMER14); //使能TIMER14的时钟
  9. timer_deinit(TIMER14); //设置TIMER14参数恢复默认值
  10. timer_struct_para_init(&timer_initpara); //初始化timer_initpara
  11. //配置TIMER14
  12. timer_initpara.prescaler = psc; //设置预分频器值
  13. timer_initpara.counterdirection = TIMER_COUNTER_UP; //设置向上计数模式
  14. timer_initpara.period = arr; //设置自动重装载值
  15. timer_initpara.clockdivision = TIMER_CKDIV_DIV1; //设置时钟分割
  16. timer_init(TIMER14, &timer_initpara); //根据参数初始化定时器
  17. timer_interrupt_enable(TIMER14, TIMER_INT_UP); //使能定时器的更新中断
  18. nvic_irq_enable(TIMER14_IRQn, 0); //配置NVIC设置优先级
  19. timer_disable(TIMER14); //使能定时器
  20. }
  21. static void ConfigTimer15(unsigned short arr, unsigned short psc)
  22. {
  23. timer_parameter_struct timer_initpara; //timer_initpara用于存放定时器的参数
  24. //使能RCU相关时钟
  25. rcu_periph_clock_enable(RCU_TIMER15); //使能TIMER15的时钟
  26. timer_deinit(TIMER15); //设置TIMER15参数恢复默认值
  27. timer_struct_para_init(&timer_initpara); //初始化timer_initpara
  28. //配置TIMER15
  29. timer_initpara.prescaler = psc; //设置预分频器值
  30. timer_initpara.counterdirection = TIMER_COUNTER_UP; //设置向上计数模式
  31. timer_initpara.period = arr; //设置自动重装载值
  32. timer_initpara.clockdivision = TIMER_CKDIV_DIV1; //设置时钟分割
  33. timer_init(TIMER15, &timer_initpara); //根据参数初始化定时器
  34. timer_interrupt_enable(TIMER15, TIMER_INT_UP); //使能定时器的更新中断
  35. nvic_irq_enable(TIMER15_IRQn, 3); //配置NVIC设置优先级
  36. timer_enable(TIMER15); //使能定时器
  37. }
  38. void InitTimer(void)
  39. {
  40. ConfigTimer14(39, 71); //100ns
  41. ConfigTimer15(9999, 7199); //1s
  42. }
  43. void ADC_TimerEnable(void)
  44. {
  45. timer_enable(TIMER14);
  46. }
  47. void ADC_TimerDisable(void)
  48. {
  49. timer_disable(TIMER14);
  50. }
  51. extern uint8_t flash_led;
  52. extern uint8_t read_flag;
  53. extern uint16_t adc_original_value[4];
  54. uint8_t flag_read_v_or_c = 0;
  55. uint16_t data_s[500];
  56. uint16_t data_i[500];
  57. uint8_t read_complete = 0;
  58. static int index = 0;
  59. uint32_t a,b,c,d;
  60. uint16_t count_v = 0;
  61. uint16_t count_i = 0;
  62. void TIMER14_IRQHandler(void)
  63. {
  64. if(timer_interrupt_flag_get(TIMER14, TIMER_INT_FLAG_UP) == SET) //判断定时器更新中断是否发生
  65. {
  66. timer_interrupt_flag_clear(TIMER14, TIMER_INT_FLAG_UP); //清除定时器更新中断标志
  67. }
  68. a= adc_original_value[0];
  69. b= adc_original_value[1];
  70. c= adc_original_value[2];
  71. d= adc_original_value[3];
  72. if(a > b)
  73. {
  74. data_s[index] = a-b;
  75. count_v++;
  76. }else
  77. {
  78. data_s[index] = 0;
  79. }
  80. if(c > d)
  81. {
  82. data_i[index] = c-d;
  83. count_i++;
  84. }else
  85. {
  86. data_i[index] = 0;
  87. }
  88. index ++;
  89. if(index >= 500)
  90. {
  91. index = 0;
  92. read_complete = 1;
  93. ADC_TimerDisable();
  94. }
  95. }
  96. void TIMER15_IRQHandler(void)
  97. {
  98. if(timer_interrupt_flag_get(TIMER15, TIMER_INT_FLAG_UP) == SET) //判断定时器更新中断是否发生
  99. {
  100. timer_interrupt_flag_clear(TIMER15, TIMER_INT_FLAG_UP); //清除定时器更新中断标志
  101. }
  102. flash_led = 1;
  103. }