main.c 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. /*!
  2. \file main.c
  3. \brief ADC regular channel with DMA
  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 dma_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. /* DMA configuration */
  37. dma_config();
  38. /* ADC configuration */
  39. adc_config();
  40. while(1){
  41. }
  42. }
  43. /*!
  44. \brief configure the different system clocks
  45. \param[in] none
  46. \param[out] none
  47. \retval none
  48. */
  49. void rcu_config(void)
  50. {
  51. /* enable GPIOC clock */
  52. rcu_periph_clock_enable(RCU_GPIOC);
  53. /* enable ADC clock */
  54. rcu_periph_clock_enable(RCU_ADC);
  55. /* enable DMA clock */
  56. rcu_periph_clock_enable(RCU_DMA);
  57. /* config ADC clock */
  58. rcu_adc_clock_config(RCU_ADCCK_APB2_DIV6);
  59. }
  60. /*!
  61. \brief configure the GPIO peripheral
  62. \param[in] none
  63. \param[out] none
  64. \retval none
  65. */
  66. void gpio_config(void)
  67. {
  68. /* config the GPIO as analog mode */
  69. gpio_mode_set(ADC_GPIO_PORT, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, ADC_GPIO_PIN);
  70. }
  71. /*!
  72. \brief configure the DMA peripheral
  73. \param[in] none
  74. \param[out] none
  75. \retval none
  76. */
  77. void dma_config(void)
  78. {
  79. /* ADC_DMA_channel configuration */
  80. dma_parameter_struct dma_data_parameter;
  81. /* ADC DMA_channel configuration */
  82. dma_deinit(DMA_CH0);
  83. /* initialize DMA single data mode */
  84. dma_data_parameter.periph_addr = (uint32_t)(&ADC_RDATA);
  85. dma_data_parameter.periph_inc = DMA_PERIPH_INCREASE_DISABLE;
  86. dma_data_parameter.memory_addr = (uint32_t)(&adc_value);
  87. dma_data_parameter.memory_inc = DMA_MEMORY_INCREASE_DISABLE;
  88. dma_data_parameter.periph_width = DMA_PERIPHERAL_WIDTH_16BIT;
  89. dma_data_parameter.memory_width = DMA_MEMORY_WIDTH_16BIT;
  90. dma_data_parameter.direction = DMA_PERIPHERAL_TO_MEMORY;
  91. dma_data_parameter.number = 1;
  92. dma_data_parameter.priority = DMA_PRIORITY_HIGH;
  93. dma_init(DMA_CH0, dma_data_parameter);
  94. dma_circulation_enable(DMA_CH0);
  95. /* enable DMA channel */
  96. dma_channel_enable(DMA_CH0);
  97. }
  98. /*!
  99. \brief configure the ADC peripheral
  100. \param[in] none
  101. \param[out] none
  102. \retval none
  103. */
  104. void adc_config(void)
  105. {
  106. /* ADC contineous function enable */
  107. adc_special_function_config(ADC_CONTINUOUS_MODE, ENABLE);
  108. /* ADC trigger config */
  109. adc_external_trigger_source_config(ADC_REGULAR_CHANNEL, ADC_EXTTRIG_REGULAR_NONE);
  110. /* ADC data alignment config */
  111. adc_data_alignment_config(ADC_DATAALIGN_RIGHT);
  112. /* ADC channel length config */
  113. adc_channel_length_config(ADC_REGULAR_CHANNEL, 1);
  114. /* ADC regular channel config */
  115. adc_regular_channel_config(0, BOARD_ADC_CHANNEL, ADC_SAMPLETIME_55POINT5);
  116. adc_external_trigger_config(ADC_REGULAR_CHANNEL, ENABLE);
  117. /* enable ADC interface */
  118. adc_enable();
  119. delay_1ms(1);
  120. /* ADC calibration and reset calibration */
  121. adc_calibration_enable();
  122. /* ADC DMA function enable */
  123. adc_dma_mode_enable();
  124. /* ADC software trigger enable */
  125. adc_software_trigger_enable(ADC_REGULAR_CHANNEL);
  126. }