/*! \file main.c \brief ADC analog watchdog 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" #define BOARD_ADC_CHANNEL ADC_CHANNEL_11 #define ADC_GPIO_PORT GPIOC #define ADC_GPIO_PIN GPIO_PIN_1 uint16_t adc_value; uint8_t data; void rcu_config(void); void gpio_config(void); void nvic_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(); /* NVIC configuration */ nvic_config(); /* ADC configuration */ adc_config(); while(1){ if(1 == data){ data = 0; delay_1ms(3000); gd_eval_led_off(LED2); } } } /*! \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_GPIOC); /* enable ADC clock */ rcu_periph_clock_enable(RCU_ADC); /* 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) { /* configure led GPIO */ gd_eval_led_init(LED2); /* config the GPIO as analog mode */ gpio_mode_set(ADC_GPIO_PORT, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, ADC_GPIO_PIN); } /*! \brief configure interrupt priority \param[in] none \param[out] none \retval none */ void nvic_config(void) { nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2); nvic_irq_enable(ADC_CMP_IRQn, 0, 0); } /*! \brief configure the ADC peripheral \param[in] none \param[out] none \retval none */ void adc_config(void) { /* ADC contineous function enable */ adc_special_function_config(ADC_CONTINUOUS_MODE, ENABLE); /* ADC trigger config */ adc_external_trigger_source_config(ADC_REGULAR_CHANNEL, ADC_EXTTRIG_REGULAR_NONE); /* ADC data alignment config */ adc_data_alignment_config(ADC_DATAALIGN_RIGHT); /* ADC channel length config */ adc_channel_length_config(ADC_REGULAR_CHANNEL, 1); /* ADC regular channel config */ adc_regular_channel_config(0, BOARD_ADC_CHANNEL, ADC_SAMPLETIME_55POINT5); adc_external_trigger_config(ADC_REGULAR_CHANNEL, ENABLE); /* enable ADC interface */ adc_enable(); delay_1ms(1); /* ADC calibration and reset calibration */ adc_calibration_enable(); /* ADC analog watchdog threshold config */ adc_watchdog_threshold_config(0x0400, 0x0A00); /* ADC analog watchdog single channel config */ adc_watchdog_single_channel_enable(BOARD_ADC_CHANNEL); /* ADC interrupt config */ adc_interrupt_enable(ADC_INT_WDE); /* ADC software trigger enable */ adc_software_trigger_enable(ADC_REGULAR_CHANNEL); }