mirror of
https://github.com/EFeru/hoverboard-sideboard-hack-GD.git
synced 2025-07-27 17:49:32 +00:00
145 lines
3.4 KiB
C
145 lines
3.4 KiB
C
/*!
|
|
\file main.c
|
|
\brief ADC resolution demo
|
|
*/
|
|
|
|
/*
|
|
Copyright (C) 2017 GigaDevice
|
|
|
|
2014-12-26, V1.0.0, platform GD32F1x0(x=3,5)
|
|
2016-01-15, V2.0.0, platform GD32F1x0(x=3,5,7,9)
|
|
2016-04-30, V3.0.0, firmware update for GD32F1x0(x=3,5,7,9)
|
|
2017-06-19, V3.1.0, firmware update for GD32F1x0(x=3,5,7,9)
|
|
*/
|
|
|
|
#include "gd32f1x0.h"
|
|
#include "systick.h"
|
|
#include <stdio.h>
|
|
#include "gd32f1x0_eval.h"
|
|
|
|
#define BOARD_ADC_CHANNEL ADC_CHANNEL_10
|
|
#define ADC_GPIO_PORT GPIOC
|
|
#define ADC_GPIO_PIN GPIO_PIN_0
|
|
|
|
uint16_t adc_value;
|
|
|
|
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();
|
|
/* configures COM port */
|
|
gd_eval_com_init(EVAL_COM1);
|
|
|
|
/* ADC configuration */
|
|
adc_config();
|
|
adc_software_trigger_enable(ADC_REGULAR_CHANNEL);
|
|
|
|
while(1){
|
|
adc_flag_clear(ADC_FLAG_EOC);
|
|
while(SET != adc_flag_get(ADC_FLAG_EOC)){
|
|
}
|
|
|
|
adc_value = ADC_RDATA;
|
|
printf("6B: 0x%x\r\n", adc_value);
|
|
delay_1ms(500);
|
|
}
|
|
}
|
|
|
|
/*!
|
|
\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)
|
|
{
|
|
/* 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_SWRCST);
|
|
/* 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);
|
|
|
|
/* ADC resolusion 6B */
|
|
printf("\r\nresolusion 6B:\r\n");
|
|
adc_resolution_config(ADC_RESOLUTION_6B);
|
|
|
|
/* enable ADC interface */
|
|
adc_enable();
|
|
delay_1ms(1);
|
|
/* ADC calibration and reset calibration */
|
|
adc_calibration_enable();
|
|
}
|
|
|
|
/* retarget the C library printf function to the USART */
|
|
int fputc(int ch, FILE *f)
|
|
{
|
|
usart_data_transmit(EVAL_COM1, (uint8_t)ch);
|
|
while(RESET == usart_flag_get(EVAL_COM1, USART_FLAG_TBE));
|
|
|
|
return ch;
|
|
}
|