apm32f4xx_adc.h 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432
  1. /*!
  2. * @file apm32f4xx_adc.h
  3. *
  4. * @brief This file contains all the functions prototypes for the ADC firmware library
  5. *
  6. * @version V1.0.2
  7. *
  8. * @date 2022-06-23
  9. *
  10. * @attention
  11. *
  12. * Copyright (C) 2021-2022 Geehy Semiconductor
  13. *
  14. * You may not use this file except in compliance with the
  15. * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE).
  16. *
  17. * The program is only for reference, which is distributed in the hope
  18. * that it will be usefull and instructional for customers to develop
  19. * their software. Unless required by applicable law or agreed to in
  20. * writing, the program is distributed on an "AS IS" BASIS, WITHOUT
  21. * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied.
  22. * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions
  23. * and limitations under the License.
  24. */
  25. /* Define to prevent recursive inclusion */
  26. #ifndef __APM32F4XX_ADC_H
  27. #define __APM32F4XX_ADC_H
  28. #ifdef __cplusplus
  29. extern "C" {
  30. #endif
  31. /* Includes */
  32. #include "apm32f4xx.h"
  33. /** @addtogroup APM32F4xx_StdPeriphDriver
  34. @{
  35. */
  36. /** @addtogroup ADC_Driver
  37. @{
  38. */
  39. /** @defgroup ADC_Enumerations
  40. @{
  41. */
  42. /**
  43. * @brief ADC Common mode
  44. */
  45. typedef enum
  46. {
  47. /* All the ADCs independent */
  48. ADC_MODE_INDEPENDENT = (uint8_t)0x00, /*!< Independent mode */
  49. /* ADC1 and ADC2 working together but ADC3 is independent */
  50. ADC_MODE_DUAL_REGSIMULT_INJECSIMULT = (uint8_t)0x01, /*!< regular simultaneous + injected simultaneous */
  51. ADC_MODE_DUAL_REGSIMULT_ALTERTRIG = (uint8_t)0x02, /*!< regular simultaneous + alternate trigger */
  52. ADC_MODE_DUAL_INJECSIMULT = (uint8_t)0x05, /*!< Injected simultaneous mode only */
  53. ADC_MODE_DUAL_REGSIMULT = (uint8_t)0x06, /*!< Regular simultaneous mode only */
  54. ADC_MODE_DUAL_INTERL = (uint8_t)0x07, /*!< Interleaved mode only */
  55. ADC_MODE_DUAL_ALTERTRIG = (uint8_t)0x09, /*!< Alternate trigger mode only */
  56. /* ADC1, ADC2 and ADC3 working together */
  57. ADC_MODE_TRIPLE_REGSIMULT_INJECSIMULT = (uint8_t)0x11, /*!< regular simultaneous + injected simultaneous */
  58. ADC_MODE_TRIPLE_REGSIMULT_ALTERTRIG = (uint8_t)0x12, /*!< regular simultaneous + alternate trigger */
  59. ADC_MODE_TRIPLE_INJECSIMULT = (uint8_t)0x15, /*!< Injected simultaneous mode only */
  60. ADC_MODE_TRIPLE_REGSIMULT = (uint8_t)0x16, /*!< Regular simultaneous mode only */
  61. ADC_MODE_TRIPLE_INTERL = (uint8_t)0x17, /*!< Interleaved mode only */
  62. ADC_MODE_TRIPLE_ALTERTRIG = (uint8_t)0x19 /*!< Alternate trigger mode only */
  63. } ADC_MODE_T;
  64. /**
  65. * @brief ADC Prescaler
  66. */
  67. typedef enum
  68. {
  69. ADC_PRESCALER_DIV2, /*!< PCLK2 2 divided frequency */
  70. ADC_PRESCALER_DIV4, /*!< PCLK2 4 divided frequency */
  71. ADC_PRESCALER_DIV6, /*!< PCLK2 6 divided frequency */
  72. ADC_PRESCALER_DIV8 /*!< PCLK2 8 divided frequency */
  73. } ADC_PRESCALER_T;
  74. /**
  75. * @brief ADC Direct memory access mode for multi mode
  76. */
  77. typedef enum
  78. {
  79. ADC_ACCESS_MODE_DISABLED, /*!< DMA mode disabled */
  80. ADC_ACCESS_MODE_1, /*!< DMA mode 1 enabled (2/3 half-words one by one - 1 then 2 then 3) */
  81. ADC_ACCESS_MODE_2, /*!< DMA mode 2 enabled (2/3 half-words by pairs - 2&1 then 1&3 then 3&2) */
  82. ADC_ACCESS_MODE_3 /*!< DMA mode 3 enabled (2/3 bytes by pairs - 2&1 then 1&3 then 3&2) */
  83. } ADC_ACCESS_MODE_T;
  84. /**
  85. * @brief ADC Delay between 2 sampling phases
  86. */
  87. typedef enum
  88. {
  89. ADC_TWO_SAMPLING_5CYCLES, /*!< 5*Tadcclk delay between 2 sampling phases */
  90. ADC_TWO_SAMPLING_6CYCLES, /*!< 6*Tadcclk delay between 2 sampling phases */
  91. ADC_TWO_SAMPLING_7CYCLES, /*!< 7*Tadcclk delay between 2 sampling phases */
  92. ADC_TWO_SAMPLING_8CYCLES, /*!< 8*Tadcclk delay between 2 sampling phases */
  93. ADC_TWO_SAMPLING_9CYCLES, /*!< 9*Tadcclk delay between 2 sampling phases */
  94. ADC_TWO_SAMPLING_10CYCLES, /*!< 10*Tadcclk delay between 2 sampling phases */
  95. ADC_TWO_SAMPLING_11CYCLES, /*!< 11*Tadcclk delay between 2 sampling phases */
  96. ADC_TWO_SAMPLING_12CYCLES, /*!< 12*Tadcclk delay between 2 sampling phases */
  97. ADC_TWO_SAMPLING_13CYCLES, /*!< 13*Tadcclk delay between 2 sampling phases */
  98. ADC_TWO_SAMPLING_14CYCLES, /*!< 14*Tadcclk delay between 2 sampling phases */
  99. ADC_TWO_SAMPLING_15CYCLES, /*!< 15*Tadcclk delay between 2 sampling phases */
  100. ADC_TWO_SAMPLING_16CYCLES, /*!< 16*Tadcclk delay between 2 sampling phases */
  101. ADC_TWO_SAMPLING_17CYCLES, /*!< 17*Tadcclk delay between 2 sampling phases */
  102. ADC_TWO_SAMPLING_18CYCLES, /*!< 18*Tadcclk delay between 2 sampling phases */
  103. ADC_TWO_SAMPLING_19CYCLES, /*!< 19*Tadcclk delay between 2 sampling phases */
  104. ADC_TWO_SAMPLING_20CYCLES /*!< 20*Tadcclk delay between 2 sampling phases */
  105. } ADC_TWO_SAMPLING_T;
  106. /**
  107. * @brief ADC_resolution
  108. */
  109. typedef enum
  110. {
  111. ADC_RESOLUTION_12BIT, /*!< ADC Resolution is 12 bits */
  112. ADC_RESOLUTION_10BIT, /*!< ADC Resolution is 10 bits */
  113. ADC_RESOLUTION_8BIT, /*!< ADC Resolution is 8 bits */
  114. ADC_RESOLUTION_6BIT /*!< ADC Resolution is 6 bits */
  115. } ADC_RESOLUTION_T;
  116. /**
  117. * @brief ADC External trigger edge for regular channels conversion
  118. */
  119. typedef enum
  120. {
  121. ADC_EXT_TRIG_EDGE_NONE, /*!<Trigger detection is disabled */
  122. ADC_EXT_TRIG_EDGE_RISING, /*!<Trigger detection on rising edge */
  123. ADC_EXT_TRIG_EDGE_FALLING, /*!<Trigger detection on falling edge */
  124. ADC_EXT_TRIG_EDGE_RISING_FALLING, /*!<Trigger detection on rising edge and falling edge */
  125. } ADC_EXT_TRIG_EDGE_T;
  126. /**
  127. * @brief ADC External event trigger select for regular group
  128. */
  129. typedef enum
  130. {
  131. ADC_EXT_TRIG_CONV_TMR1_CC1, /*!<Timer1 capture compare1 selected */
  132. ADC_EXT_TRIG_CONV_TMR1_CC2, /*!<Timer1 capture compare2 selected */
  133. ADC_EXT_TRIG_CONV_TMR1_CC3, /*!<Timer1 capture compare3 selected */
  134. ADC_EXT_TRIG_CONV_TMR2_CC2, /*!<Timer2 capture compare2 selected */
  135. ADC_EXT_TRIG_CONV_TMR2_CC3, /*!<Timer2 capture compare3 selected */
  136. ADC_EXT_TRIG_CONV_TMR2_CC4, /*!<Timer2 capture compare4 selected */
  137. ADC_EXT_TRIG_CONV_TMR2_TRGO, /*!<Timer2 TRGO event selected */
  138. ADC_EXT_TRIG_CONV_TMR3_CC1, /*!<Timer3 capture compare1 selected */
  139. ADC_EXT_TRIG_CONV_TMR3_TRGO, /*!<Timer3 TRGO event selected */
  140. ADC_EXT_TRIG_CONV_TMR4_CC4, /*!<Timer4 capture compare4 selected */
  141. ADC_EXT_TRIG_CONV_TMR5_CC1, /*!<Timer5 capture compare1 selected */
  142. ADC_EXT_TRIG_CONV_TMR5_CC2, /*!<Timer5 capture compare2 selected */
  143. ADC_EXT_TRIG_CONV_TMR5_CC3, /*!<Timer5 capture compare3 selected */
  144. ADC_EXT_TRIG_CONV_TMR8_CC1, /*!<Timer8 capture compare1 selected */
  145. ADC_EXT_TRIG_CONV_TMR8_TRGO, /*!<Timer8 TRGO event selected */
  146. ADC_EXT_TRIG_CONV_EINT_11 /*!<External interrupt line 11 event selected */
  147. } ADC_EXT_TRIG_CONV_T;
  148. /**
  149. * @brief ADC Data align
  150. */
  151. typedef enum
  152. {
  153. ADC_DATA_ALIGN_RIGHT, /*!<Right alignment */
  154. ADC_DATA_ALIGN_LEFT /*!<Left alignment */
  155. } ADC_DATA_ALIGN_T;
  156. /**
  157. * @brief ADC Channel number
  158. */
  159. typedef enum
  160. {
  161. ADC_CHANNEL_0, /*!< ADC Channel 0 */
  162. ADC_CHANNEL_1, /*!< ADC Channel 1 */
  163. ADC_CHANNEL_2, /*!< ADC Channel 2 */
  164. ADC_CHANNEL_3, /*!< ADC Channel 3 */
  165. ADC_CHANNEL_4, /*!< ADC Channel 4 */
  166. ADC_CHANNEL_5, /*!< ADC Channel 5 */
  167. ADC_CHANNEL_6, /*!< ADC Channel 6 */
  168. ADC_CHANNEL_7, /*!< ADC Channel 7 */
  169. ADC_CHANNEL_8, /*!< ADC Channel 8 */
  170. ADC_CHANNEL_9, /*!< ADC Channel 9 */
  171. ADC_CHANNEL_10, /*!< ADC Channel 10 */
  172. ADC_CHANNEL_11, /*!< ADC Channel 11 */
  173. ADC_CHANNEL_12, /*!< ADC Channel 12 */
  174. ADC_CHANNEL_13, /*!< ADC Channel 13 */
  175. ADC_CHANNEL_14, /*!< ADC Channel 14 */
  176. ADC_CHANNEL_15, /*!< ADC Channel 15 */
  177. ADC_CHANNEL_16, /*!< ADC Channel 16 */
  178. ADC_CHANNEL_17, /*!< ADC Channel 17 */
  179. ADC_CHANNEL_18, /*!< ADC Channel 18 */
  180. } ADC_CHANNEL_T;
  181. /**
  182. * @brief ADC_sampling_times
  183. */
  184. typedef enum
  185. {
  186. ADC_SAMPLETIME_3CYCLES, /*!< Config the channel as 3 sample cyscles */
  187. ADC_SAMPLETIME_15CYCLES, /*!< Config the channel as 15 sample cyscles */
  188. ADC_SAMPLETIME_28CYCLES, /*!< Config the channel as 28 sample cyscles */
  189. ADC_SAMPLETIME_56CYCLES, /*!< Config the channel as 56 sample cyscles */
  190. ADC_SAMPLETIME_84CYCLES, /*!< Config the channel as 84 sample cyscles */
  191. ADC_SAMPLETIME_112CYCLES, /*!< Config the channel as 112 sample cyscles */
  192. ADC_SAMPLETIME_144CYCLES, /*!< Config the channel as 144 sample cyscles */
  193. ADC_SAMPLETIME_480CYCLES /*!< Config the channel as 480 sample cyscles */
  194. } ADC_SAMPLETIME_T;
  195. /**
  196. * @brief ADC external trigger edge for injected channels conversion
  197. */
  198. typedef enum
  199. {
  200. ADC_EXT_TRIG_INJEC_EDGE_NONE, /*!< Disable the external trigger for injected channels */
  201. ADC_EXT_TRIG_INJEC_EDGE_RISING, /*!< Trigger detection on rising edge */
  202. ADC_EXT_TRIG_INJEC_EDGE_FALLING, /*!< Trigger detection on rising edge */
  203. ADC_EXT_TRIG_INJEC_EDGE_RISING_FALLING /*!< Trigger detection on rising edge and falling edge */
  204. } ADC_EXT_TRIG_INJEC_EDGE_T;
  205. /**
  206. * @brief ADC extrenal trigger sources for injected channels conversion
  207. */
  208. typedef enum
  209. {
  210. ADC_EXT_TRIG_INJEC_CONV_TMR1_CC4, /*!< Timer1 capture compare 4 selected */
  211. ADC_EXT_TRIG_INJEC_CONV_TMR1_TRGO, /*!< Timer1 TRGO event selected */
  212. ADC_EXT_TRIG_INJEC_CONV_TMR2_CC1, /*!< Timer2 capture compare 1 selected */
  213. ADC_EXT_TRIG_INJEC_CONV_TMR2_TRGO, /*!< Timer2 TRGO event selected */
  214. ADC_EXT_TRIG_INJEC_CONV_TMR3_CC2, /*!< Timer3 capture compare 2 selected */
  215. ADC_EXT_TRIG_INJEC_CONV_TMR3_CC4, /*!< Timer3 capture compare 4 selected */
  216. ADC_EXT_TRIG_INJEC_CONV_TMR4_CC1, /*!< Timer4 capture compare 1 selected */
  217. ADC_EXT_TRIG_INJEC_CONV_TMR4_CC2, /*!< Timer4 capture compare 2 selected */
  218. ADC_EXT_TRIG_INJEC_CONV_TMR4_CC3, /*!< Timer4 capture compare 3 selected */
  219. ADC_EXT_TRIG_INJEC_CONV_TMR4_TRGO, /*!< Timer4 TRGO event selected */
  220. ADC_EXT_TRIG_INJEC_CONV_TMR5_CC4, /*!< Timer5 capture compare 4 selected */
  221. ADC_EXT_TRIG_INJEC_CONV_TMR5_TRGO, /*!< Timer5 TRGO event selected */
  222. ADC_EXT_TRIG_INJEC_CONV_TMR8_CC2, /*!< Timer8 capture compare 2 selected */
  223. ADC_EXT_TRIG_INJEC_CONV_TMR8_CC3, /*!< Timer8 capture compare 3 selected */
  224. ADC_EXT_TRIG_INJEC_CONV_TMR8_CC4, /*!< Timer8 capture compare 4 selected */
  225. ADC_EXT_TRIG_INJEC_CONV_EINT15 /*!< External interrupt line 15 event selected */
  226. } ADC_EXT_TRIG_INJEC_CONV_T;
  227. /**
  228. * @brief ADC injected channel selection
  229. */
  230. typedef enum
  231. {
  232. ADC_INJEC_CHANNEL_1 = (uint8_t)0x01, /*!< Channel injected conversion Data */
  233. ADC_INJEC_CHANNEL_2 = (uint8_t)0x02, /*!< Channe2 injected conversion Data */
  234. ADC_INJEC_CHANNEL_3 = (uint8_t)0x03, /*!< Channe3 injected conversion Data */
  235. ADC_INJEC_CHANNEL_4 = (uint8_t)0x04 /*!< Channe4 injected conversion Data */
  236. } ADC_INJEC_CHANNEL_T;
  237. /**
  238. * @brief ADC analog watchdog selection
  239. */
  240. typedef enum
  241. {
  242. ADC_ANALOG_WATCHDOG_SINGLE_INJEC = (uint8_t)0x11, /*!< Analog watchdog on a single injected channel */
  243. ADC_ANALOG_WATCHDOG_SINGLE_REG = (uint8_t)0x12, /*!< Analog watchdog on a single regular channel */
  244. ADC_ANALOG_WATCHDOG_SINGLE_REG_INJEC = (uint8_t)0x13, /*!< Analog watchdog on a single regular or injected channel */
  245. ADC_ANALOG_WATCHDOG_ALL_INJEC = (uint8_t)0x01, /*!< Analog watchdog on all injected channel */
  246. ADC_ANALOG_WATCHDOG_ALL_REG = (uint8_t)0x02, /*!< Analog watchdog on all regular channel */
  247. ADC_ANALOG_WATCHDOG_ALL_REG_ALL_INJEC = (uint8_t)0x03, /*!< Analog watchdog on all regular and injected channels */
  248. ADC_ANALOG_WATCHDOG_NONE = (uint8_t)0x00 /*!< No Analog watchdog */
  249. } ADC_ANALOG_WATCHDOG_T;
  250. /**
  251. * @brief ADC interrupts
  252. */
  253. typedef enum
  254. {
  255. ADC_INT_EOC = BIT5, /*!< End of conversion interrupt mask */
  256. ADC_INT_AWD = BIT6, /*!< Analog watchdog interrupt mask */
  257. ADC_INT_INJEOC = BIT7, /*!< End of injected conversion interrupt mask */
  258. ADC_INT_OVR = BIT26 /*!< Overrun interrupt enable */
  259. } ADC_INT_T;
  260. /**
  261. * @brief ADC interrupt flags
  262. */
  263. typedef enum
  264. {
  265. ADC_INT_FLAG_AWD = 0x0501, /*!< Analog watchdog interrupt flag */
  266. ADC_INT_FLAG_EOC = 0x0602, /*!< End of conversion interrupt flag */
  267. ADC_INT_FLAG_INJEOC = 0x0704, /*!< End of injected conversion interrupt flag */
  268. ADC_INT_FLAG_OVR = 0x1A20 /*!< Overrun interrupt flag */
  269. } ADC_INT_FLAG_T;
  270. /**
  271. * @brief ADC status flags
  272. */
  273. typedef enum
  274. {
  275. ADC_FLAG_AWD = BIT0, /*!< Analog watchdog flag */
  276. ADC_FLAG_EOC = BIT1, /*!< End of conversion flag */
  277. ADC_FLAG_INJEOC = BIT2, /*!< End of injected group conversion flag */
  278. ADC_FLAG_INJCS = BIT3, /*!< Start of injected group conversion flag */
  279. ADC_FLAG_REGCS = BIT4, /*!< Start of regular group conversion flag */
  280. ADC_FLAG_OVR = BIT5 /*!< Overrun flag */
  281. } ADC_FLAG_T;
  282. /**@} end of group ADC_Enumerations*/
  283. /** @defgroup ADC_Structure
  284. @{
  285. */
  286. /**
  287. * @brief ADC configuration Mode
  288. */
  289. typedef struct
  290. {
  291. ADC_RESOLUTION_T resolution; /*!< Configures the ADC resolution dual mode.
  292. This parameter can be a value of @ref ADC_RESOLUTION_T */
  293. uint8_t scanConvMode; /*!< This value can be ENABLE or DISABLE */
  294. uint8_t continuousConvMode; /*!< This value can be ENABLE or DISABLE */
  295. ADC_EXT_TRIG_EDGE_T extTrigEdge; /*!< Enable the External Trigger for Regular Channels */
  296. ADC_EXT_TRIG_CONV_T extTrigConv; /*!< Select the External Trigger Event to Start the
  297. Regular Group Conversion */
  298. ADC_DATA_ALIGN_T dataAlign; /*!< Data Alignment Mode Configure */
  299. uint8_t nbrOfChannel; /*!< regular channel sequence length can be from 1 to 16 */
  300. } ADC_Config_T;
  301. /**
  302. * @brief ADC Common Init structure definition
  303. */
  304. typedef struct
  305. {
  306. ADC_MODE_T mode; /*!< ADC mode selection */
  307. ADC_PRESCALER_T prescaler; /*!< ADC Prescaler */
  308. ADC_ACCESS_MODE_T accessMode; /*!< DMA Mode */
  309. ADC_TWO_SAMPLING_T twoSampling; /*!< Delay Between 2 Sampling Phases */
  310. } ADC_CommonConfig_T;
  311. /**@} end of group ADC_Structure*/
  312. /** @defgroup ADC_Functions
  313. @{
  314. */
  315. /* ADC Reset */
  316. void ADC_Reset(void);
  317. /* Configuration */
  318. void ADC_Config(ADC_T* adc, ADC_Config_T* adcConfig);
  319. void ADC_ConfigStructInit(ADC_Config_T* adcConfig);
  320. void ADC_CommonConfig(ADC_CommonConfig_T* adcCommonConfig);
  321. void ADC_CommonConfigStructInit(ADC_CommonConfig_T* adcCommonConfig);
  322. void ADC_Enable(ADC_T* adc);
  323. void ADC_Disable(ADC_T* adc);
  324. /* Analog Watchdog */
  325. void ADC_EnableAnalogWatchdog(ADC_T* adc, ADC_ANALOG_WATCHDOG_T analogWatchdog);
  326. void ADC_DisableAnalogWatchdog(ADC_T* adc);
  327. void ADC_ConfigAnalogWatchdogThresholds(ADC_T* adc, uint16_t highThreshold, uint16_t lowThreshold);
  328. void ADC_ConfigAnalogWatchdogSingleChannel(ADC_T* adc, uint8_t channel);
  329. /* Temperature Sensor, Vrefint and VBAT management **/
  330. void ADC_EnableTempSensorVrefint(void);
  331. void ADC_DisableTempSensorVrefint(void);
  332. void ADC_EnableVbat(void);
  333. void ADC_DisableVbat(void);
  334. /* Regular Channels Configuration */
  335. void ADC_ConfigRegularChannel(ADC_T* adc, uint8_t channel,
  336. uint8_t rank, uint8_t sampleTime);
  337. void ADC_SoftwareStartConv(ADC_T* adc);
  338. uint8_t ADC_ReadSoftwareStartConvStatus(ADC_T* adc);
  339. void ADC_EnableEOCOnEachChannel(ADC_T* adc);
  340. void ADC_DisableEOCOnEachChannel(ADC_T* adc);
  341. /* Continuous Mode */
  342. void ADC_EnableContinuousMode(ADC_T* adc);
  343. void ADC_DisableContinuousMode(ADC_T* adc);
  344. /* Discontinuous Mode */
  345. void ADC_ConfigDiscMode(ADC_T* adc, uint8_t number);
  346. void ADC_EnableDiscMode(ADC_T* adc);
  347. void ADC_DisableDiscMode(ADC_T* adc);
  348. uint16_t ADC_ReadConversionValue(ADC_T* adc);
  349. uint32_t ADC_ReadMultiValue(void);
  350. /* Regular Channels DMA */
  351. void ADC_EnableDMA(ADC_T* adc);
  352. void ADC_DisableDMA(ADC_T* adc);
  353. void ADC_EnableDMARequest(ADC_T* adc);
  354. void ADC_DisableDMARequest(ADC_T* adc);
  355. void ADC_EnableMultiModeDMARequest(void);
  356. void ADC_DisableMultiModeDMARequest(void);
  357. /* Injected channels Configuration functions */
  358. void ADC_ConfigInjectedChannel(ADC_T* adc, uint8_t channel, uint8_t rank,
  359. uint8_t sampleTime);
  360. void ADC_ConfigInjectedSequencerLength(ADC_T* adc, uint8_t length);
  361. void ADC_ConfigInjectedOffset(ADC_T* adc, ADC_INJEC_CHANNEL_T channel, uint16_t offset);
  362. void ADC_ConfigExternalTrigInjectedConv(ADC_T* adc, ADC_EXT_TRIG_INJEC_CONV_T extTrigInjecConv);
  363. void ADC_ConfigExternalTrigInjectedConvEdge(ADC_T* adc, ADC_EXT_TRIG_INJEC_EDGE_T extTrigInjecConvEdge);
  364. void ADC_EnableSoftwareStartInjectedConv(ADC_T* adc);
  365. uint8_t ADC_ReadSoftwareStartInjectedConvStatus(ADC_T* adc);
  366. void ADC_EnableAutoInjectedConv(ADC_T* adc);
  367. void ADC_DisableAutoInjectedConv(ADC_T* adc);
  368. void ADC_EnableInjectedDiscMode(ADC_T* adc);
  369. void ADC_DisableInjectedDiscMode(ADC_T* adc);
  370. uint16_t ADC_ReadInjectedConversionValue(ADC_T* adc, ADC_INJEC_CHANNEL_T channel);
  371. /* Interrupts and flags */
  372. void ADC_EnableInterrupt(ADC_T* adc, uint32_t interrupt);
  373. void ADC_DisableInterrupt(ADC_T* adc, uint32_t interrupt);
  374. uint8_t ADC_ReadStatusFlag(ADC_T* adc, ADC_FLAG_T flag);
  375. void ADC_ClearStatusFlag(ADC_T* adc, uint32_t flag);
  376. uint16_t ADC_ReadIntFlag(ADC_T* adc, ADC_INT_FLAG_T flag);
  377. void ADC_ClearIntFlag(ADC_T* adc, uint32_t flag);
  378. #ifdef __cplusplus
  379. }
  380. #endif
  381. #endif /* __APM32F4XX_ADC_H */
  382. /**@} end of group ADC_Functions */
  383. /**@} end of group ADC_Driver */
  384. /**@} end of group APM32F4xx_StdPeriphDriver */