/*! \file main.c \brief TIMER trigger injected channel of ADC demo */ /* Copyright (C) 2017 GigaDevice 2017-06-06, V1.0.0, firmware for GD32F3x0 */ #include "gd32f3x0.h" #include "systick.h" #include #include "main.h" #include "gd32f3x0_eval.h" void rcu_config(void); void gpio_config(void); void timer_config(void); void adc_config(void); /*! \brief main function \param[in] none \param[out] none \retval none */ int main(void) { /* system clocks configuration */ rcu_config(); /* systick configuration */ systick_config(); /* GPIO configuration */ gpio_config(); /* TIMER configuration */ timer_config(); /* ADC configuration */ adc_config(); /* enable TIMER1 */ timer_enable(TIMER1); while(1){ } } /*! \brief configure the different system clocks \param[in] none \param[out] none \retval none */ void rcu_config(void) { /* enable GPIOC clock */ rcu_periph_clock_enable(RCU_GPIOA); /* enable ADC clock */ rcu_periph_clock_enable(RCU_ADC); /* enable timer1 clock */ rcu_periph_clock_enable(RCU_TIMER1); /* config ADC clock */ rcu_adc_clock_config(RCU_ADCCK_APB2_DIV6); } /*! \brief configure the GPIO peripheral \param[in] none \param[out] none \retval none */ void gpio_config(void) { /* config the GPIO as analog mode */ gpio_mode_set(GPIOA, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3); } /*! \brief configure the TIMER peripheral \param[in] none \param[out] none \retval none */ void timer_config(void) { timer_oc_parameter_struct timer_ocintpara; timer_parameter_struct timer_initpara; /* TIMER1 configuration */ timer_initpara.prescaler = 8399; timer_initpara.alignedmode = TIMER_COUNTER_EDGE; timer_initpara.counterdirection = TIMER_COUNTER_UP; timer_initpara.period = 9999; timer_initpara.clockdivision = TIMER_CKDIV_DIV1; timer_initpara.repetitioncounter = 0; timer_init(TIMER1,&timer_initpara); /* CH0 configuration in PWM mode1 */ timer_ocintpara.ocpolarity = TIMER_OC_POLARITY_HIGH; timer_ocintpara.outputstate = TIMER_CCX_ENABLE; timer_channel_output_config(TIMER1, TIMER_CH_0, &timer_ocintpara); timer_channel_output_pulse_value_config(TIMER1, TIMER_CH_0, 3999); timer_channel_output_mode_config(TIMER1, TIMER_CH_0, TIMER_OC_MODE_PWM1); timer_channel_output_shadow_config(TIMER1, TIMER_CH_0, TIMER_OC_SHADOW_DISABLE); } /*! \brief configure the ADC peripheral \param[in] none \param[out] none \retval none */ void adc_config(void) { /* ADC continous function enable */ adc_special_function_config(ADC_SCAN_MODE, ENABLE); /* ADC trigger config */ adc_external_trigger_source_config(ADC_INSERTED_CHANNEL, ADC_EXTTRIG_INSERTED_T1_CH0); /* ADC data alignment config */ adc_data_alignment_config(ADC_DATAALIGN_RIGHT); /* ADC channel length config */ adc_channel_length_config(ADC_INSERTED_CHANNEL, 4); /* ADC inserted channel config */ adc_inserted_channel_config(0, ADC_CHANNEL_0, ADC_SAMPLETIME_55POINT5); adc_inserted_channel_config(1, ADC_CHANNEL_1, ADC_SAMPLETIME_55POINT5); adc_inserted_channel_config(2, ADC_CHANNEL_2, ADC_SAMPLETIME_55POINT5); adc_inserted_channel_config(3, ADC_CHANNEL_3, ADC_SAMPLETIME_55POINT5); /* ADC external trigger enable */ adc_external_trigger_config(ADC_INSERTED_CHANNEL, ENABLE); /* enable ADC interface */ adc_enable(); delay_1ms(1); /* ADC calibration and reset calibration */ adc_calibration_enable(); }