| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- #include "timer.h"
- #include "gd32e230_timer.h"
- #include "adc.h"
- uint16_t voltage_s[200] = {0};
- uint16_t current_s[200] = {0};
- static void ConfigTimer14(unsigned short arr, unsigned short psc)
- {
- timer_parameter_struct timer_initpara; //timer_initpara用于存放定时器的参数
- //使能RCU相关时钟
- rcu_periph_clock_enable(RCU_TIMER14); //使能TIMER14的时钟
- timer_deinit(TIMER14); //设置TIMER14参数恢复默认值
- timer_struct_para_init(&timer_initpara); //初始化timer_initpara
- //配置TIMER14
- timer_initpara.prescaler = psc; //设置预分频器值
- timer_initpara.counterdirection = TIMER_COUNTER_UP; //设置向上计数模式
- timer_initpara.period = arr; //设置自动重装载值
- timer_initpara.clockdivision = TIMER_CKDIV_DIV1; //设置时钟分割
- timer_init(TIMER14, &timer_initpara); //根据参数初始化定时器
- timer_interrupt_enable(TIMER14, TIMER_INT_UP); //使能定时器的更新中断
- nvic_irq_enable(TIMER14_IRQn, 0); //配置NVIC设置优先级
- timer_disable(TIMER14); //使能定时器
- }
- static void ConfigTimer15(unsigned short arr, unsigned short psc)
- {
- timer_parameter_struct timer_initpara; //timer_initpara用于存放定时器的参数
- //使能RCU相关时钟
- rcu_periph_clock_enable(RCU_TIMER15); //使能TIMER15的时钟
- timer_deinit(TIMER15); //设置TIMER15参数恢复默认值
- timer_struct_para_init(&timer_initpara); //初始化timer_initpara
- //配置TIMER15
- timer_initpara.prescaler = psc; //设置预分频器值
- timer_initpara.counterdirection = TIMER_COUNTER_UP; //设置向上计数模式
- timer_initpara.period = arr; //设置自动重装载值
- timer_initpara.clockdivision = TIMER_CKDIV_DIV1; //设置时钟分割
- timer_init(TIMER15, &timer_initpara); //根据参数初始化定时器
- timer_interrupt_enable(TIMER15, TIMER_INT_UP); //使能定时器的更新中断
- nvic_irq_enable(TIMER15_IRQn, 3); //配置NVIC设置优先级
- timer_enable(TIMER15); //使能定时器
- }
- void InitTimer(void)
- {
- ConfigTimer14(99, 71); //100ns
- ConfigTimer15(9999, 7199); //1s
- }
- void ADC_TimerEnable(void)
- {
- timer_enable(TIMER14);
- }
- void ADC_TimerDisable(void)
- {
- timer_disable(TIMER14);
- }
- extern uint8_t flash_led;
- extern uint8_t read_flag;
- extern uint16_t adc_original_value[4];
- void TIMER14_IRQHandler(void)
- {
- static int index = 0;
- if(timer_interrupt_flag_get(TIMER14, TIMER_INT_FLAG_UP) == SET) //判断定时器更新中断是否发生
- {
- timer_interrupt_flag_clear(TIMER14, TIMER_INT_FLAG_UP); //清除定时器更新中断标志
- }
- // adc_original_value[0] = adc_channel_sample_V_P();
- // adc_original_value[1] = adc_channel_sample_V_S();
- // adc_original_value[2] = adc_channel_sample_I_P();
- // adc_original_value[3] = adc_channel_sample_I_S();
- if(adc_original_value[0]>0x20 )
- voltage_s[index] = adc_original_value[0] -5;
- else
- voltage_s[index] = 0;
- if(adc_original_value[2] > 0x10 )
- current_s[index++] = adc_original_value[2]-4;
- else
- current_s[index++] = 0;
- if(index == 200)
- {
- index = 0;
- ADC_TimerDisable(); //close timer and calculate
- read_flag = 1;
- }
- //adc_channel_sample()
- //read_flag = 1;
- //ADC_TimerDisable();
- }
- void TIMER15_IRQHandler(void)
- {
-
- if(timer_interrupt_flag_get(TIMER15, TIMER_INT_FLAG_UP) == SET) //判断定时器更新中断是否发生
- {
- timer_interrupt_flag_clear(TIMER15, TIMER_INT_FLAG_UP); //清除定时器更新中断标志
- }
- flash_led = 1;
- }
|