lib_adc.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. /**
  2. ******************************************************************************
  3. * @file lib_adc.h
  4. * @author Application Team
  5. * @version V4.6.0
  6. * @date 2019-06-18
  7. * @brief ADC library.
  8. ******************************************************************************
  9. * @attention
  10. *
  11. ******************************************************************************
  12. */
  13. #ifndef __LIB_ADC_H
  14. #define __LIB_ADC_H
  15. #ifdef __cplusplus
  16. extern "C" {
  17. #endif
  18. #include "target.h"
  19. typedef struct
  20. {
  21. uint32_t TrigMode;
  22. uint32_t ConvMode;
  23. uint32_t ClockSource;
  24. uint32_t ClockDivider;
  25. uint32_t Channel;
  26. } ADCInitType;
  27. //TrigMode
  28. #define ADC_TRIGMODE_AUTO 0
  29. #define ADC_TRIGMODE_MANUAL ANA_ADCCTRL_MTRIG
  30. #define IS_ADC_TRIGMODE(__TRIGMODE__) (((__TRIGMODE__) == ADC_TRIGMODE_AUTO) ||\
  31. ((__TRIGMODE__) == ADC_TRIGMODE_MANUAL))
  32. //ConvMode
  33. #define ADC_CONVMODE_SINGLECHANNEL 0
  34. #define ADC_CONVMODE_MULTICHANNEL 1
  35. #define IS_ADC_CONVMODE(__CONVMODE__) (((__CONVMODE__) == ADC_CONVMODE_SINGLECHANNEL) ||\
  36. ((__CONVMODE__) == ADC_CONVMODE_MULTICHANNEL))
  37. //ClockSource
  38. #define ADC_CLKSRC_RCH 0
  39. #define ADC_CLKSRC_PLLL ANA_ADCCTRL_CLKSEL
  40. #define IS_ADC_CLKSRC(__CLKSRC__) (((__CLKSRC__) == ADC_CLKSRC_RCH) ||\
  41. ((__CLKSRC__) == ADC_CLKSRC_PLLL))
  42. //TrigSource
  43. #define ADC_TRIGSOURCE_OFF ANA_ADCCTRL_AEN_OFF
  44. #define ADC_TRIGSOURCE_TIM0 ANA_ADCCTRL_AEN_TMR0
  45. #define ADC_TRIGSOURCE_TIM1 ANA_ADCCTRL_AEN_TMR1
  46. #define ADC_TRIGSOURCE_TIM2 ANA_ADCCTRL_AEN_TMR2
  47. #define ADC_TRIGSOURCE_TIM3 ANA_ADCCTRL_AEN_TMR3
  48. #define IS_ADC_TRIGSOURCE(__TRIGSOURCE__) (((__TRIGSOURCE__) == ADC_TRIGSOURCE_OFF) ||\
  49. ((__TRIGSOURCE__) == ADC_TRIGSOURCE_TIM0) ||\
  50. ((__TRIGSOURCE__) == ADC_TRIGSOURCE_TIM1) ||\
  51. ((__TRIGSOURCE__) == ADC_TRIGSOURCE_TIM2) ||\
  52. ((__TRIGSOURCE__) == ADC_TRIGSOURCE_TIM3))
  53. //ClockDivider
  54. #define ADC_CLKDIV_1 ANA_ADCCTRL_CLKDIV_1
  55. #define ADC_CLKDIV_2 ANA_ADCCTRL_CLKDIV_2
  56. #define ADC_CLKDIV_3 ANA_ADCCTRL_CLKDIV_3
  57. #define ADC_CLKDIV_4 ANA_ADCCTRL_CLKDIV_4
  58. #define ADC_CLKDIV_5 ANA_ADCCTRL_CLKDIV_5
  59. #define ADC_CLKDIV_6 ANA_ADCCTRL_CLKDIV_6
  60. #define ADC_CLKDIV_7 ANA_ADCCTRL_CLKDIV_7
  61. #define ADC_CLKDIV_8 ANA_ADCCTRL_CLKDIV_8
  62. #define ADC_CLKDIV_9 ANA_ADCCTRL_CLKDIV_9
  63. #define ADC_CLKDIV_10 ANA_ADCCTRL_CLKDIV_10
  64. #define ADC_CLKDIV_11 ANA_ADCCTRL_CLKDIV_11
  65. #define ADC_CLKDIV_12 ANA_ADCCTRL_CLKDIV_12
  66. #define ADC_CLKDIV_13 ANA_ADCCTRL_CLKDIV_13
  67. #define ADC_CLKDIV_14 ANA_ADCCTRL_CLKDIV_14
  68. #define ADC_CLKDIV_15 ANA_ADCCTRL_CLKDIV_15
  69. #define ADC_CLKDIV_16 ANA_ADCCTRL_CLKDIV_16
  70. #define IS_ADC_CLKDIV(__CLKDIV__) (((__CLKDIV__) == ADC_CLKDIV_1) ||\
  71. ((__CLKDIV__) == ADC_CLKDIV_2) ||\
  72. ((__CLKDIV__) == ADC_CLKDIV_3) ||\
  73. ((__CLKDIV__) == ADC_CLKDIV_4) ||\
  74. ((__CLKDIV__) == ADC_CLKDIV_5) ||\
  75. ((__CLKDIV__) == ADC_CLKDIV_6) ||\
  76. ((__CLKDIV__) == ADC_CLKDIV_7) ||\
  77. ((__CLKDIV__) == ADC_CLKDIV_8) ||\
  78. ((__CLKDIV__) == ADC_CLKDIV_9) ||\
  79. ((__CLKDIV__) == ADC_CLKDIV_10) ||\
  80. ((__CLKDIV__) == ADC_CLKDIV_11) ||\
  81. ((__CLKDIV__) == ADC_CLKDIV_12) ||\
  82. ((__CLKDIV__) == ADC_CLKDIV_13) ||\
  83. ((__CLKDIV__) == ADC_CLKDIV_14) ||\
  84. ((__CLKDIV__) == ADC_CLKDIV_15) ||\
  85. ((__CLKDIV__) == ADC_CLKDIV_16))
  86. //Channel
  87. #define ADC_CHANNEL0 0
  88. #define ADC_CHANNEL1 1
  89. #define ADC_CHANNEL2 2
  90. #define ADC_CHANNEL3 3
  91. #define ADC_CHANNEL4 4
  92. #define ADC_CHANNEL5 5
  93. #define ADC_CHANNEL6 6
  94. #define ADC_CHANNEL7 7
  95. #define ADC_CHANNEL8 8
  96. #define ADC_CHANNEL9 9
  97. #define ADC_CHANNEL10 10
  98. #define ADC_CHANNEL11 11
  99. #define IS_ADC_CHANNEL(__CHANNEL__) (((__CHANNEL__) == ADC_CHANNEL0) ||\
  100. ((__CHANNEL__) == ADC_CHANNEL1) ||\
  101. ((__CHANNEL__) == ADC_CHANNEL2) ||\
  102. ((__CHANNEL__) == ADC_CHANNEL3) ||\
  103. ((__CHANNEL__) == ADC_CHANNEL4) ||\
  104. ((__CHANNEL__) == ADC_CHANNEL5) ||\
  105. ((__CHANNEL__) == ADC_CHANNEL6) ||\
  106. ((__CHANNEL__) == ADC_CHANNEL7) ||\
  107. ((__CHANNEL__) == ADC_CHANNEL8) ||\
  108. ((__CHANNEL__) == ADC_CHANNEL9) ||\
  109. ((__CHANNEL__) == ADC_CHANNEL10) ||\
  110. ((__CHANNEL__) == ADC_CHANNEL11))
  111. //INTMask
  112. #define ADC_INT_AUTODONE ANA_INTEN_INTEN1
  113. #define ADC_INT_MANUALDONE ANA_INTEN_INTEN0
  114. #define ADC_INT_Msk (ADC_INT_AUTODONE | ADC_INT_MANUALDONE)
  115. #define IS_ADC_INT(__INT__) ((((__INT__) & ADC_INT_Msk) != 0U) &&\
  116. (((__INT__) & ~ADC_INT_Msk) == 0U))
  117. //ScaleDown
  118. #define ADC_SCA_NONE 0
  119. #define ADC_SCA_DIV2 ANA_ADCCTRL_CICSCA
  120. #define IS_ADC_SCA(__SCA__) (((__SCA__) == ADC_SCA_NONE) || ((__SCA__) == ADC_SCA_DIV2))
  121. //Skip
  122. #define ADC_SKIP_4 ANA_ADCCTRL_CICSKIP_4
  123. #define ADC_SKIP_5 ANA_ADCCTRL_CICSKIP_5
  124. #define ADC_SKIP_6 ANA_ADCCTRL_CICSKIP_6
  125. #define ADC_SKIP_7 ANA_ADCCTRL_CICSKIP_7
  126. #define ADC_SKIP_0 ANA_ADCCTRL_CICSKIP_0
  127. #define ADC_SKIP_1 ANA_ADCCTRL_CICSKIP_1
  128. #define ADC_SKIP_2 ANA_ADCCTRL_CICSKIP_2
  129. #define ADC_SKIP_3 ANA_ADCCTRL_CICSKIP_3
  130. #define IS_ADC_SKIP(__SKIP__) (((__SKIP__) == ADC_SKIP_4) ||\
  131. ((__SKIP__) == ADC_SKIP_5) ||\
  132. ((__SKIP__) == ADC_SKIP_6) ||\
  133. ((__SKIP__) == ADC_SKIP_7) ||\
  134. ((__SKIP__) == ADC_SKIP_0) ||\
  135. ((__SKIP__) == ADC_SKIP_1) ||\
  136. ((__SKIP__) == ADC_SKIP_2) ||\
  137. ((__SKIP__) == ADC_SKIP_3))
  138. //DSRSelection
  139. #define ADC_SDRSEL_DIV512 ANA_ADCCTRL_DSRSEL_512
  140. #define ADC_SDRSEL_DIV256 ANA_ADCCTRL_DSRSEL_256
  141. #define ADC_SDRSEL_DIV128 ANA_ADCCTRL_DSRSEL_128
  142. #define ADC_SDRSEL_DIV64 ANA_ADCCTRL_DSRSEL_64
  143. #define IS_ADC_SDR(__SDR__) (((__SDR__) == ADC_SDRSEL_DIV512) ||\
  144. ((__SDR__) == ADC_SDRSEL_DIV256) ||\
  145. ((__SDR__) == ADC_SDRSEL_DIV128) ||\
  146. ((__SDR__) == ADC_SDRSEL_DIV64))
  147. typedef struct
  148. {
  149. float VDDVoltage;
  150. float BATRTCVoltage;
  151. float Temperature;
  152. } ADC_CalResType;
  153. //Division
  154. #define ADC_BAT_CAPDIV (ANA_REG1_GDE4)
  155. #define ADC_BAT_RESDIV (ANA_REG1_RESDIV)
  156. #define IS_ADC_BATDIV(__BATDIV__) (((__BATDIV__) == ADC_BAT_CAPDIV) ||\
  157. ((__BATDIV__) == ADC_BAT_RESDIV))
  158. /* ADC_GetVoltage */
  159. //Mode
  160. #define ADC_3V_EXTERNAL_NODIV (0x000UL) // Power supply: 3.3V; Channel: External; Divider modeL: None
  161. #define ADC_3V_EXTERNAL_RESDIV (0x001UL) // Power supply: 3.3V; Channel: External; Divider modeL: Resistive
  162. #define ADC_3V_EXTERNAL_CAPDIV (0x002UL) // Power supply: 3.3V; Channel: External; Divider modeL: Capacitive
  163. #define ADC_3V_VDD_RESDIV (0x003UL) // Power supply: 3.3V; Channel: VDD; Divider modeL: Resistive
  164. #define ADC_3V_VDD_CAPDIV (0x004UL) // Power supply: 3.3V; Channel: VDD; Divider modeL: Capacitive
  165. #define ADC_3V_BATRTC_RESDIV (0x005UL) // Power supply: 3.3V; Channel: BATRTC; Divider modeL: Resistive
  166. #define ADC_3V_BATRTC_CAPDIV (0x006UL) // Power supply: 3.3V; Channel: BATRTC; Divider modeL: Capacitive
  167. #define ADC_5V_EXTERNAL_NODIV (0x100UL) // Power supply: 5V; Channel: External; Divider modeL: None
  168. #define ADC_5V_EXTERNAL_RESDIV (0x101UL) // Power supply: 5V; Channel: External; Divider modeL: Resistive
  169. #define ADC_5V_EXTERNAL_CAPDIV (0x102UL) // Power supply: 5V; Channel: External; Divider modeL: Capacitive
  170. #define ADC_5V_VDD_RESDIV (0x103UL) // Power supply: 5V; Channel: VDD; Divider modeL: Resistive
  171. #define ADC_5V_VDD_CAPDIV (0x104UL) // Power supply: 5V; Channel: VDD; Divider modeL: Capacitive
  172. #define ADC_5V_BATRTC_RESDIV (0x105UL) // Power supply: 5V; Channel: BATRTC; Divider modeL: Resistive
  173. #define ADC_5V_BATRTC_CAPDIV (0x106UL) // Power supply: 5V; Channel: BATRTC; Divider modeL: Capacitive
  174. #define IS_ADCVOL_MODE(__MODE__) (((__MODE__) == ADC_3V_EXTERNAL_NODIV) ||\
  175. ((__MODE__) == ADC_3V_EXTERNAL_RESDIV) ||\
  176. ((__MODE__) == ADC_3V_EXTERNAL_CAPDIV) ||\
  177. ((__MODE__) == ADC_3V_VDD_RESDIV) ||\
  178. ((__MODE__) == ADC_3V_VDD_CAPDIV) ||\
  179. ((__MODE__) == ADC_3V_BATRTC_RESDIV) ||\
  180. ((__MODE__) == ADC_3V_BATRTC_CAPDIV) ||\
  181. ((__MODE__) == ADC_5V_EXTERNAL_NODIV) ||\
  182. ((__MODE__) == ADC_5V_EXTERNAL_RESDIV) ||\
  183. ((__MODE__) == ADC_5V_EXTERNAL_CAPDIV) ||\
  184. ((__MODE__) == ADC_5V_VDD_RESDIV) ||\
  185. ((__MODE__) == ADC_5V_VDD_CAPDIV) ||\
  186. ((__MODE__) == ADC_5V_BATRTC_RESDIV) ||\
  187. ((__MODE__) == ADC_5V_BATRTC_CAPDIV))
  188. /* Exported Functions ------------------------------------------------------- */
  189. /* ADC Exported Functions Group1:
  190. (De)Initialization -------------------------*/
  191. void ADC_DeInit(void);
  192. void ADC_StructInit(ADCInitType* ADC_InitStruct);
  193. void ADC_Init(ADCInitType* ADC_InitStruct);
  194. /* ADC Exported Functions Group2:
  195. Get NVR Info, Calculate datas --------------*/
  196. uint32_t ADC_CalculateVoltage(uint32_t Mode, int16_t adc_data, float *Voltage);
  197. uint32_t ADC_GetVDDVoltage_Fast(uint32_t Division, ADC_CalResType *CalResults);
  198. uint32_t ADC_GetVDDVoltage_Normal(uint32_t Division, ADC_CalResType *CalResults);
  199. uint32_t ADC_GetBATRTCVoltage_Fast(uint32_t Division, ADC_CalResType *CalResults);
  200. uint32_t ADC_GetBATRTCVoltage_Normal(uint32_t Division, ADC_CalResType *CalResults);
  201. uint32_t ADC_GetTemperature(ADC_CalResType *CalResults);
  202. /* ADC Exported Functions Group3:
  203. Interrupt (flag) ---------------------------*/
  204. int16_t ADC_GetADCConversionValue(uint32_t Channel);
  205. void ADC_INTConfig(uint32_t INTMask, uint32_t NewState);
  206. uint8_t ADC_GetAutoDoneFlag(void);
  207. uint8_t ADC_GetManualDoneFlag(void);
  208. void ADC_ClearAutoDoneFlag(void);
  209. void ADC_ClearManualDoneFlag(void);
  210. /* ADC Exported Functions Group4:
  211. MISC Configuration -------------------------*/
  212. uint32_t ADC_Cmd(uint32_t NewState);
  213. void ADC_StartManual(void);
  214. void ADC_WaitForManual(void);
  215. void ADC_TrigSourceConfig(uint32_t TrigSource);
  216. void ADC_RESDivisionCmd(uint32_t NewState);
  217. void ADC_CAPDivisionCmd(uint32_t NewState);
  218. //CIC Control
  219. void ADC_CICAlwaysOnCmd(uint32_t NewState);
  220. void ADC_CICINVCmd(uint32_t NewState);
  221. void ADC_CICScaleDownConfig(uint32_t ScaleDown);
  222. void ADC_CICSkipConfig(uint32_t Skip);
  223. void ADC_CICDownSamRateConfig(uint32_t DSRSelection);
  224. #ifdef __cplusplus
  225. }
  226. #endif
  227. #endif /* __LIB_ADC_H */
  228. /*********************************** END OF FILE ******************************/