apm32f10x_adc.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332
  1. /*!
  2. * @file apm32f10x_adc.h
  3. *
  4. * @brief This file contains all the functions prototypes for the ADC firmware library
  5. *
  6. * @version V1.0.1
  7. *
  8. * @date 2021-03-23
  9. *
  10. */
  11. #ifndef __APM32F10X_ADC_H
  12. #define __APM32F10X_ADC_H
  13. #include "apm32f10x.h"
  14. #ifdef __cplusplus
  15. extern "C" {
  16. #endif
  17. /** @addtogroup Peripherals_Library Standard Peripheral Library
  18. @{
  19. */
  20. /** @addtogroup ADC_Driver ADC Driver
  21. @{
  22. */
  23. /** @addtogroup ADC_Enumerations Enumerations
  24. @{
  25. */
  26. /**
  27. * @brief ADC configuration Mode
  28. */
  29. typedef enum
  30. {
  31. ADC_MODE_INDEPENDENT = ((uint32_t)0x00000000), //!< Independent mode
  32. ADC_MODE_REG_INJEC_SIMULT = ((uint32_t)0x00010000), //!< Combined regular simultaneous and injected simultaneous mode
  33. ADC_MODE_REG_SIMULT_ALTER_TRIG = ((uint32_t)0x00020000), //!< Combined regular simultaneous and alternate trigger mode
  34. ADC_MODE_INJEC_SIMULT_FAST_TNTERL = ((uint32_t)0x00030000), //!< Combined injected simultaneous and fast interleaved mode
  35. ADC_MODE_INJEC_SIMULT_SLOW_INTERL = ((uint32_t)0x00040000), //!< Combined injected simultaneous and slow interleaved mode
  36. ADC_MODE_INJEC_SIMULT = ((uint32_t)0x00050000), //!< Injected simultaneous mode
  37. ADC_MODE_REG_SIMULT = ((uint32_t)0x00060000), //!< Regular simultaneous mode
  38. ADC_MODE_FAST_INTERL = ((uint32_t)0x00070000), //!< Fast interleaved mode
  39. ADC_MODE_SLOW_INTERL = ((uint32_t)0x00080000), //!< Slow interleaved mode
  40. ADC_MODE_ALTER_TRIG = ((uint32_t)0x00090000) //!< Alternate trigger mode
  41. } ADC_MODE_T;
  42. /**
  43. * @brief ADC external trigger sources for regular channels conversion enumeration
  44. */
  45. typedef enum
  46. {
  47. ADC_EXT_TRIG_CONV_TMR1_CC1 = ((uint32_t)0x00000000),
  48. ADC_EXT_TRIG_CONV_TMR1_CC2 = ((uint32_t)0x00020000),
  49. ADC_EXT_TRIG_CONV_TMR2_CC2 = ((uint32_t)0x00060000),
  50. ADC_EXT_TRIG_CONV_TMR3_TRGO = ((uint32_t)0x00080000),
  51. ADC_EXT_TRIG_CONV_TMR4_CC4 = ((uint32_t)0x000A0000),
  52. ADC_EXT_TRIG_CONV_EINT9_T8_TRGO = ((uint32_t)0x000C0000),
  53. ADC_EXT_TRIG_CONV_TMR1_CC3 = ((uint32_t)0x00040000),
  54. ADC_EXT_TRIG_CONV_None = ((uint32_t)0x000E0000),
  55. ADC_EXT_TRIG_CONV_TMR3_CC1 = ((uint32_t)0x00000000),
  56. ADC_EXT_TRIG_CONV_TMR2_CC3 = ((uint32_t)0x00030000),
  57. ADC_EXT_TRIG_CONV_TMR8_CC1 = ((uint32_t)0x00060000),
  58. ADC_EXT_TRIG_CONV_TMR8_TRGO = ((uint32_t)0x00080000),
  59. ADC_EXT_TRIG_CONV_TMR5_CC1 = ((uint32_t)0x000A0000),
  60. ADC_EXT_TRIG_CONV_TMR5_CC3 = ((uint32_t)0x000C0000)
  61. } ADC_EXT_TRIG_CONV_T;
  62. /**
  63. * @brief ADC Data Align
  64. */
  65. typedef enum
  66. {
  67. ADC_DATA_ALIGN_RIGHT = 0x00000000,
  68. ADC_DATA_ALIGN_LEFT = 0x00000800
  69. } ADC_DATA_ALIGN_T;
  70. /**
  71. * @brief ADC Channels
  72. */
  73. typedef enum
  74. {
  75. ADC_CHANNEL_0 = ((uint8_t)0x00),
  76. ADC_CHANNEL_1 = ((uint8_t)0x01),
  77. ADC_CHANNEL_2 = ((uint8_t)0x02),
  78. ADC_CHANNEL_3 = ((uint8_t)0x03),
  79. ADC_CHANNEL_4 = ((uint8_t)0x04),
  80. ADC_CHANNEL_5 = ((uint8_t)0x05),
  81. ADC_CHANNEL_6 = ((uint8_t)0x06),
  82. ADC_CHANNEL_7 = ((uint8_t)0x07),
  83. ADC_CHANNEL_8 = ((uint8_t)0x08),
  84. ADC_CHANNEL_9 = ((uint8_t)0x09),
  85. ADC_CHANNEL_10 = ((uint8_t)0x0A),
  86. ADC_CHANNEL_11 = ((uint8_t)0x0B),
  87. ADC_CHANNEL_12 = ((uint8_t)0x0C),
  88. ADC_CHANNEL_13 = ((uint8_t)0x0D),
  89. ADC_CHANNEL_14 = ((uint8_t)0x0E),
  90. ADC_CHANNEL_15 = ((uint8_t)0x0F),
  91. ADC_CHANNEL_16 = ((uint8_t)0x10),
  92. ADC_CHANNEL_TEMP_SENSOR = ((uint8_t)0x10),
  93. ADC_CHANNEL_17 = ((uint8_t)0x11),
  94. ADC_CHANNEL_V_REFINT = ((uint8_t)0x11)
  95. } ADC_CHANNEL_T;
  96. /**
  97. * @brief ADC Sampling Time
  98. */
  99. typedef enum
  100. {
  101. ADC_SAMPLE_TIME_1_5 = ((uint8_t)0x00),
  102. ADC_SAMPLE_TIME_7_5 = ((uint8_t)0x01),
  103. ADC_SAMPLE_TIME_13_5 = ((uint8_t)0x02),
  104. ADC_SAMPLE_TIME_28_5 = ((uint8_t)0x03),
  105. ADC_SAMPLE_TIME_41_5 = ((uint8_t)0x04),
  106. ADC_SAMPLE_TIME_55_5 = ((uint8_t)0x05),
  107. ADC_SAMPLE_TIME_71_5 = ((uint8_t)0x06),
  108. ADC_SAMPLE_TIME_239_5 = ((uint8_t)0x07)
  109. } ADC_SAMPLE_TIME_T;
  110. /**
  111. * @brief ADC external trigger sources for injected channels conversion
  112. */
  113. typedef enum
  114. {
  115. /** for ADC1 and ADC2 */
  116. ADC_EXT_TRIG_INJEC_CONV_TMR2_TRGO = ((uint8_t)0x02),
  117. ADC_EXT_TRIG_INJEC_CONV_TMR2_CC1 = ((uint8_t)0x03),
  118. ADC_EXT_TRIG_INJEC_CONV_TMR3_CC4 = ((uint8_t)0x04),
  119. ADC_EXT_TRIG_INJEC_CONV_TMR4_TRGO = ((uint8_t)0x05),
  120. ADC_EXT_TRIG_INJEC_CONV_EINT15_T8_CC4 = ((uint8_t)0x06),
  121. /** for ADC1, ADC2 and ADC3 */
  122. ADC_EXT_TRIG_INJEC_CONV_TMR1_TRGO = ((uint8_t)0x00),
  123. ADC_EXT_TRIG_INJEC_CONV_TMR1_CC4 = ((uint8_t)0x01),
  124. ADC_EXT_TRIG_INJEC_CONV_NONE = ((uint8_t)0x07),
  125. /** for ADC3 only */
  126. ADC_EXT_TRIG_INJEC_CONV_TMR4_CC3 = ((uint8_t)0x02),
  127. ADC_EXT_TRIG_INJEC_CONV_TMR8_CC2 = ((uint8_t)0x03),
  128. ADC_EXT_TRIG_INJEC_CONV_TMR8_CC4 = ((uint8_t)0x04),
  129. ADC_EXT_TRIG_INJEC_CONV_TMR5_TRGO = ((uint8_t)0x05),
  130. ADC_EXT_TRIG_INJEC_CONV_TMR5_CC4 = ((uint8_t)0x06)
  131. } ADC_EXT_TRIG_INJEC_CONV_T;
  132. /**
  133. * @brief ADC Injected channels
  134. */
  135. typedef enum
  136. {
  137. ADC_INJEC_CHANNEL_1 = ((uint8_t)0x14),
  138. ADC_INJEC_CHANNEL_2 = ((uint8_t)0x18),
  139. ADC_INJEC_CHANNEL_3 = ((uint8_t)0x1C),
  140. ADC_INJEC_CHANNEL_4 = ((uint8_t)0x20)
  141. } ADC_INJEC_CHANNEL_T;
  142. /**
  143. * @brief ADC Analog Watchdog Selection
  144. */
  145. typedef enum
  146. {
  147. ADC_ANALOG_WATCHDOG_SINGLE_REG = ((uint32_t)0x00800200),
  148. ADC_ANALOG_WATCHDOG_SINGLE_INJEC = ((uint32_t)0x00400200),
  149. ADC_ANALOG_WATCHDOG_SINGLE_REG_INJEC = ((uint32_t)0x00C00200),
  150. ADC_ANALOG_WATCHDOG_ALL_REG = ((uint32_t)0x00800000),
  151. ADC_ANALOG_WATCHDOG_ALL_INJEC = ((uint32_t)0x00400000),
  152. ADC_ANALOG_WATCHDOG_ALL_REG_ALL_INJEC = ((uint32_t)0x00C00000),
  153. ADC_ANALOG_WATCHDOG_NONE = ((uint32_t)0x00000000)
  154. } ADC_ANALOG_WATCHDOG_T;
  155. /**
  156. * @brief ADC Interrupt definition
  157. */
  158. typedef enum
  159. {
  160. ADC_INT_AWD = ((uint16_t)0x0140), //!< Analog Watchdog interrupt
  161. ADC_INT_EOC = ((uint16_t)0x0220), //!< End Of Conversion interrupt
  162. ADC_INT_INJEOC = ((uint16_t)0x0480) //!< Injected Channel End Of Conversion interrupt
  163. } ADC_INT_T;
  164. /**
  165. * @brief ADC Flag
  166. */
  167. typedef enum
  168. {
  169. ADC_FLAG_AWD = ((uint8_t)0x01), //!< Analog Watchdog event occur flag
  170. ADC_FLAG_EOC = ((uint8_t)0x02), //!< End Of Conversion flag
  171. ADC_FLAG_INJEOC = ((uint8_t)0x04), //!< Injected Channel End Of Conversion flag
  172. ADC_FLAG_INJCS = ((uint8_t)0x08), //!< Injected Channel Conversion Start flag
  173. ADC_FLAG_REGCS = ((uint8_t)0x10) //!< Regular Channel Conversion Start flag
  174. } ADC_FLAG_T;
  175. /**@} end of group ADC_Enumerations*/
  176. /** @addtogroup ADC_Macros Macros
  177. @{
  178. */
  179. /** ADC_IJD Offset */
  180. #define INJDATA_OFFSET ((uint8_t)0x28)
  181. /** ADC_RDG register address */
  182. #define RDG_ADDRESS ((uint32_t)0x4001244C)
  183. /** INJSEQ register config */
  184. #define INJSEQ_SET_INJSEQC ((uint32_t)0x0000001F)
  185. #define INJSEQ_SET_INJSEQLEN ((uint32_t)0x00300000)
  186. /** SMPTIM register SET */
  187. #define SMPCYCCFG_SET_SMPTIM1 ((uint32_t)0x00000007)
  188. #define SMPCYCCFG_SET_SMPTIM2 ((uint32_t)0x00000007)
  189. /** REGSEQ register SET */
  190. #define REGSEQC_SET_REGSEQ3 ((uint32_t)0x0000001F)
  191. #define REGSEQC_SET_REGSEQ2 ((uint32_t)0x0000001F)
  192. #define REGSEQC_SET_REGSEQ1 ((uint32_t)0x0000001F)
  193. /**@} end of group ADC_Macros*/
  194. /** @addtogroup ADC_Structure Data Structure
  195. @{
  196. */
  197. /**
  198. * @brief ADC Config structure definition
  199. */
  200. typedef struct
  201. {
  202. ADC_MODE_T mode;
  203. uint8_t scanConvMode; //!< This parameter can be ENABLE or DISABLE.
  204. uint8_t continuosConvMode; //!< This parameter can be ENABLE or DISABLE.
  205. ADC_EXT_TRIG_CONV_T externalTrigConv;
  206. ADC_DATA_ALIGN_T dataAlign;
  207. uint8_t nbrOfChannel; //!< This parameter must range from 1 to 16.
  208. } ADC_Config_T;
  209. /**@} end of group ADC_Structure*/
  210. /** @addtogroup ADC_Fuctions Fuctions
  211. @{
  212. */
  213. /** ADC reset and common configuration */
  214. void ADC_Reset(ADC_T* adc);
  215. void ADC_Config(ADC_T* adc, ADC_Config_T* adcConfig);
  216. void ADC_ConfigStructInit(ADC_Config_T* adcConfig);
  217. void ADC_ConfigRegularChannel(ADC_T* adc, uint8_t channel,uint8_t rank, uint8_t sampleTime);
  218. void ADC_Enable(ADC_T* adc);
  219. void ADC_Disable(ADC_T* adc);
  220. /** ADC for DMA */
  221. void ADC_EnableDMA(ADC_T* adc);
  222. void ADC_DisableDMA(ADC_T* adc);
  223. /** ADC Calibration */
  224. void ADC_ResetCalibration(ADC_T* adc);
  225. uint8_t ADC_ReadResetCalibrationStatus(ADC_T* adc);
  226. void ADC_StartCalibration(ADC_T* adc);
  227. uint8_t ADC_ReadCalibrationStartFlag(ADC_T* adc);
  228. /** ADC software start conversion */
  229. void ADC_EnableSoftwareStartConv(ADC_T* adc);
  230. void ADC_DisableSoftwareStartConv(ADC_T* adc);
  231. uint8_t ADC_ReadSoftwareStartConvStatus(ADC_T* adc);
  232. /** ADC Discontinuous mode */
  233. void ADC_ConfigDiscModeChannel(ADC_T* adc, uint8_t number);
  234. void ADC_EnableDiscMode(ADC_T* adc);
  235. void ADC_DisableDiscMode(ADC_T* adc);
  236. /** ADC External trigger conversion */
  237. void ADC_EnableExternalTrigConv(ADC_T* adc);
  238. void ADC_DisableExternalTrigConv(ADC_T* adc);
  239. /** ADC Conversion result */
  240. uint16_t ADC_ReadConversionValue(ADC_T* adc);
  241. uint32_t ADC_ReadDualModeConversionValue(ADC_T* adc);
  242. /** ADC Automatic injected group */
  243. void ADC_EnableInjectedConv(ADC_T* adc);
  244. void ADC_DisableInjectedConv(ADC_T* adc);
  245. void ADC_EnableInjectedDiscMode(ADC_T* adc);
  246. void ADC_DisableInjectedDiscMode(ADC_T* adc);
  247. /** ADC External trigger for injected channels conversion */
  248. void ADC_ConfigExternalTrigInjectedConv(ADC_T* adc, ADC_EXT_TRIG_INJEC_CONV_T extTrigInjecConv);
  249. void ADC_EnableExternalTrigInjectedConv(ADC_T* adc);
  250. void ADC_DisableExternalTrigInjectedConv(ADC_T* adc);
  251. /** ADC Start of the injected channels conversion */
  252. void ADC_EnableSoftwareStartInjectedConv(ADC_T* adc);
  253. void ADC_DisableSoftwareStartInjectedConv(ADC_T* adc);
  254. uint8_t ADC_ReadSoftwareStartInjectedConvStatus(ADC_T* adc);
  255. /** ADC injected channel */
  256. void ADC_ConfigInjectedChannel(ADC_T* adc, uint8_t channel, uint8_t rank, uint8_t sampleTime);
  257. void ADC_ConfigInjectedSequencerLength(ADC_T* adc, uint8_t length);
  258. void ADC_ConfigInjectedOffset(ADC_T* adc, ADC_INJEC_CHANNEL_T channel, uint16_t offSet);
  259. uint16_t ADC_ReadInjectedConversionValue(ADC_T* adc, ADC_INJEC_CHANNEL_T channel);
  260. /** ADC analog watchdog */
  261. void ADC_EnableAnalogWatchdog(ADC_T* adc, uint32_t analogWatchdog);
  262. void ADC_DisableAnalogWatchdog(ADC_T* adc);
  263. void ADC_ConfigAnalogWatchdogThresholds(ADC_T* adc, uint16_t highThreshold, uint16_t lowThreshold);
  264. void ADC_ConfigAnalogWatchdogSingleChannel(ADC_T* adc, uint8_t channel);
  265. /** ADC temperature sensor */
  266. void ADC_EnableTempSensorVrefint(ADC_T* adc);
  267. void ADC_DisableTempSensorVrefint(ADC_T* adc);
  268. /** Interrupt and flag */
  269. void ADC_EnableInterrupt(ADC_T* adc, uint16_t interrupt);
  270. void ADC_DisableInterrupt(ADC_T* adc, uint16_t interrupt);
  271. uint8_t ADC_ReadStatusFlag(ADC_T* adc, ADC_FLAG_T flag);
  272. void ADC_ClearStatusFlag(ADC_T* adc, uint8_t flag);
  273. uint8_t ADC_ReadIntFlag(ADC_T* adc, ADC_INT_T interrupt);
  274. void ADC_ClearIntFlag(ADC_T* adc, uint16_t interrupt);
  275. /**@} end of group ADC_Fuctions*/
  276. /**@} end of group ADC_Driver*/
  277. /**@} end of group Peripherals_Library*/
  278. #ifdef __cplusplus
  279. }
  280. #endif
  281. #endif /** __APM32F10X_ADC_H */