| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- /*!
- \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 <stdio.h>
- #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();
- }
|