main.c 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. /*!
  2. \file main.c
  3. \brief ADC resolution demo
  4. */
  5. /*
  6. Copyright (C) 2017 GigaDevice
  7. 2017-06-06, V1.0.0, firmware for GD32F3x0
  8. */
  9. #include "gd32f3x0.h"
  10. #include "systick.h"
  11. #include <stdio.h>
  12. #include "main.h"
  13. #include "gd32f3x0_eval.h"
  14. #define BOARD_ADC_CHANNEL ADC_CHANNEL_11
  15. #define ADC_GPIO_PORT GPIOC
  16. #define ADC_GPIO_PIN GPIO_PIN_1
  17. uint16_t adc_value;
  18. void rcu_config(void);
  19. void gpio_config(void);
  20. void nvic_config(void);
  21. void adc_config(void);
  22. /*!
  23. \brief main function
  24. \param[in] none
  25. \param[out] none
  26. \retval none
  27. */
  28. int main(void)
  29. {
  30. /* system clocks configuration */
  31. rcu_config();
  32. /* systick configuration */
  33. systick_config();
  34. /* GPIO configuration */
  35. gpio_config();
  36. /* NVIC configuration */
  37. nvic_config();
  38. /* configures COM port */
  39. gd_eval_com_init(EVAL_COM1);
  40. /* ADC configuration */
  41. adc_config();
  42. adc_software_trigger_enable(ADC_REGULAR_CHANNEL);
  43. while(1){
  44. adc_flag_clear(ADC_FLAG_EOC);
  45. while(SET != adc_flag_get(ADC_FLAG_EOC)){
  46. }
  47. adc_value = ADC_RDATA;
  48. printf("6B: 0x%x\r\n", adc_value);
  49. delay_1ms(500);
  50. }
  51. }
  52. /*!
  53. \brief configure the different system clocks
  54. \param[in] none
  55. \param[out] none
  56. \retval none
  57. */
  58. void rcu_config(void)
  59. {
  60. /* enable GPIOC clock */
  61. rcu_periph_clock_enable(RCU_GPIOC);
  62. /* enable ADC clock */
  63. rcu_periph_clock_enable(RCU_ADC);
  64. /* config ADC clock */
  65. rcu_adc_clock_config(RCU_ADCCK_APB2_DIV6);
  66. }
  67. /*!
  68. \brief configure the GPIO peripheral
  69. \param[in] none
  70. \param[out] none
  71. \retval none
  72. */
  73. void gpio_config(void)
  74. {
  75. /* config the GPIO as analog mode */
  76. gpio_mode_set(ADC_GPIO_PORT, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, ADC_GPIO_PIN);
  77. }
  78. /*!
  79. \brief configure interrupt priority
  80. \param[in] none
  81. \param[out] none
  82. \retval none
  83. */
  84. void nvic_config(void)
  85. {
  86. nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2);
  87. nvic_irq_enable(ADC_CMP_IRQn, 0, 0);
  88. }
  89. /*!
  90. \brief configure the ADC peripheral
  91. \param[in] none
  92. \param[out] none
  93. \retval none
  94. */
  95. void adc_config(void)
  96. {
  97. /* ADC contineous function enable */
  98. adc_special_function_config(ADC_CONTINUOUS_MODE, ENABLE);
  99. /* ADC trigger config */
  100. adc_external_trigger_source_config(ADC_REGULAR_CHANNEL, ADC_EXTTRIG_REGULAR_NONE);
  101. /* ADC data alignment config */
  102. adc_data_alignment_config(ADC_DATAALIGN_RIGHT);
  103. /* ADC channel length config */
  104. adc_channel_length_config(ADC_REGULAR_CHANNEL, 1);
  105. /* ADC regular channel config */
  106. adc_regular_channel_config(0, BOARD_ADC_CHANNEL, ADC_SAMPLETIME_55POINT5);
  107. adc_external_trigger_config(ADC_REGULAR_CHANNEL, ENABLE);
  108. /* ADC resolusion 6B */
  109. printf("\r\nresolusion 6B:\r\n");
  110. adc_resolution_config(ADC_RESOLUTION_6B);
  111. /* enable ADC interface */
  112. adc_enable();
  113. delay_1ms(1);
  114. /* ADC calibration and reset calibration */
  115. adc_calibration_enable();
  116. }
  117. /* retarget the C library printf function to the USART */
  118. int fputc(int ch, FILE *f)
  119. {
  120. usart_data_transmit(EVAL_COM1, (uint8_t)ch);
  121. while(RESET == usart_flag_get(EVAL_COM1, USART_FLAG_TBE));
  122. return ch;
  123. }