G32R430 Device Driver Layer v1.0.4
G32R4xx Device Driver Layer API Reference
g32r4xx_ddl_adc16.c
Go to the documentation of this file.
1
43
44#if defined(USE_FULL_DDL_DRIVER)
45
46/* Includes ------------------------------------------------------------------*/
47#include "g32r4xx_ddl_adc16.h"
48#include "g32r4xx_ddl_rcm.h"
49#include "g32r4xx_ddl_flash.h"
50
51#ifdef USE_FULL_ASSERT
52 #include "g32_assert.h"
53#else
54 #define ASSERT_PARAM(_PARAM_) ((void)0U)
55#endif
56
60
61#if defined (ADC1) || defined (ADC2)
62
66
67/* Private types -------------------------------------------------------------*/
68/* Private variables ---------------------------------------------------------*/
69/* Private constants ---------------------------------------------------------*/
70/* Private macros ------------------------------------------------------------*/
71
75
79
80/* Definitions of ADC hardware constraints delays */
81/* Note: Only ADC peripheral HW delays are defined in ADC LL driver driver, */
82/* not timeout values: */
83/* Timeout values for ADC operations are dependent to device clock */
84/* configuration (system clock versus ADC clock), */
85/* and therefore must be defined in user application. */
86/* Refer to @ref ADC_LL_EC_HW_DELAYS for description of ADC timeout */
87/* values definition. */
88/* Note: ADC timeout values are defined here in CPU cycles to be independent */
89/* of device clock setting. */
90/* In user application, ADC timeout values should be defined with */
91/* temporal values, in function of device clock settings. */
92/* Highest ratio CPU clock frequency vs ADC clock frequency: */
93/* - ADC clock from synchronous clock with AHB prescaler 512, */
94/* ADC prescaler 4. */
95/* Ratio max = 512 *4 = 2048 */
96/* - ADC clock from asynchronous clock (PLLP) with prescaler 256. */
97/* Highest CPU clock PLL (PLLR). */
98/* Ratio max = PLLRmax /PPLPmin * 256 = (VCO/2) / (VCO/31) * 256 */
99/* = 3968 */
100/* Unit: CPU cycles. */
101#define ADC_CLOCK_RATIO_VS_CPU_HIGHEST (3968UL)
102#define ADC_TIMEOUT_DISABLE_CPU_CYCLES (ADC_CLOCK_RATIO_VS_CPU_HIGHEST * 1UL)
103#define ADC_TIMEOUT_STOP_CONVERSION_CPU_CYCLES (ADC_CLOCK_RATIO_VS_CPU_HIGHEST * 1UL)
104
105#define IS_DDL_ADC16_LOW_POWER(__LOW_POWER__) \
106 (((__LOW_POWER__) == DDL_ADC16_LP_MODE_NONE) \
107 || ((__LOW_POWER__) == DDL_ADC16_LP_AUTOWAIT) \
108 )
109
110#define IS_DDL_ADC16_REG_TRIG_SOURCE(__ADC_INSTANCE__, __REG_TRIG_SOURCE__) \
111 (((__REG_TRIG_SOURCE__) == DDL_ADC16_REG_TRIG_SOFTWARE) \
112 || ((__REG_TRIG_SOURCE__) == DDL_ADC16_REG_TRIG_EXT_TMR1_CC1) \
113 || ((__REG_TRIG_SOURCE__) == DDL_ADC16_REG_TRIG_EXT_TMR1_CC2) \
114 || ((__REG_TRIG_SOURCE__) == DDL_ADC16_REG_TRIG_EXT_TMR1_CC3) \
115 || ((__REG_TRIG_SOURCE__) == DDL_ADC16_REG_TRIG_EXT_TMR2_CC2) \
116 || ((__REG_TRIG_SOURCE__) == DDL_ADC16_REG_TRIG_EXT_TMR3_TRGO) \
117 || ((__REG_TRIG_SOURCE__) == DDL_ADC16_REG_TRIG_EXT_TMR4_CC4) \
118 || ((__REG_TRIG_SOURCE__) == DDL_ADC16_REG_TRIG_EXT_EINT_LINE11) \
119 || ((__REG_TRIG_SOURCE__) == DDL_ADC16_REG_TRIG_EXT_TMR1_TRGO) \
120 || ((__REG_TRIG_SOURCE__) == DDL_ADC16_REG_TRIG_EXT_TMR2_TRGO) \
121 || ((__REG_TRIG_SOURCE__) == DDL_ADC16_REG_TRIG_EXT_TMR4_TRGO) \
122 || ((__REG_TRIG_SOURCE__) == DDL_ADC16_REG_TRIG_EXT_TMR3_CC4) \
123 || ((__REG_TRIG_SOURCE__) == DDL_ADC16_REG_TRIG_EXT_LPTMROUT) \
124 )
125
126#define IS_DDL_ADC16_REG_SEQ_SCAN_LENGTH(__REG_SEQ_SCAN_LENGTH__) \
127 (((__REG_SEQ_SCAN_LENGTH__) == DDL_ADC16_REG_SEQ_SCAN_DISABLE) \
128 || ((__REG_SEQ_SCAN_LENGTH__) == DDL_ADC16_REG_SEQ_SCAN_ENABLE_2RANKS) \
129 || ((__REG_SEQ_SCAN_LENGTH__) == DDL_ADC16_REG_SEQ_SCAN_ENABLE_3RANKS) \
130 || ((__REG_SEQ_SCAN_LENGTH__) == DDL_ADC16_REG_SEQ_SCAN_ENABLE_4RANKS) \
131 || ((__REG_SEQ_SCAN_LENGTH__) == DDL_ADC16_REG_SEQ_SCAN_ENABLE_5RANKS) \
132 || ((__REG_SEQ_SCAN_LENGTH__) == DDL_ADC16_REG_SEQ_SCAN_ENABLE_6RANKS) \
133 || ((__REG_SEQ_SCAN_LENGTH__) == DDL_ADC16_REG_SEQ_SCAN_ENABLE_7RANKS) \
134 || ((__REG_SEQ_SCAN_LENGTH__) == DDL_ADC16_REG_SEQ_SCAN_ENABLE_8RANKS) \
135 || ((__REG_SEQ_SCAN_LENGTH__) == DDL_ADC16_REG_SEQ_SCAN_ENABLE_9RANKS) \
136 || ((__REG_SEQ_SCAN_LENGTH__) == DDL_ADC16_REG_SEQ_SCAN_ENABLE_10RANKS) \
137 || ((__REG_SEQ_SCAN_LENGTH__) == DDL_ADC16_REG_SEQ_SCAN_ENABLE_11RANKS) \
138 || ((__REG_SEQ_SCAN_LENGTH__) == DDL_ADC16_REG_SEQ_SCAN_ENABLE_12RANKS) \
139 )
140
141#define IS_DDL_ADC16_REG_SEQ_SCAN_DISCONT_MODE(__REG_SEQ_DISCONT_MODE__) \
142 (((__REG_SEQ_DISCONT_MODE__) == DDL_ADC16_REG_SEQ_DISCONT_DISABLE) \
143 || ((__REG_SEQ_DISCONT_MODE__) == DDL_ADC16_REG_SEQ_DISCONT_1RANK) \
144 || ((__REG_SEQ_DISCONT_MODE__) == DDL_ADC16_REG_SEQ_DISCONT_2RANKS) \
145 || ((__REG_SEQ_DISCONT_MODE__) == DDL_ADC16_REG_SEQ_DISCONT_3RANKS) \
146 || ((__REG_SEQ_DISCONT_MODE__) == DDL_ADC16_REG_SEQ_DISCONT_4RANKS) \
147 || ((__REG_SEQ_DISCONT_MODE__) == DDL_ADC16_REG_SEQ_DISCONT_5RANKS) \
148 || ((__REG_SEQ_DISCONT_MODE__) == DDL_ADC16_REG_SEQ_DISCONT_6RANKS) \
149 )
150
151#define IS_DDL_ADC16_REG_CONTINUOUS_MODE(__REG_CONTINUOUS_MODE__) \
152 (((__REG_CONTINUOUS_MODE__) == DDL_ADC16_REG_CONV_SINGLE) \
153 || ((__REG_CONTINUOUS_MODE__) == DDL_ADC16_REG_CONV_CONTINUOUS) \
154 )
155
156#define IS_DDL_ADC16_REG_DMA_TRANSFER(__REG_DMA_TRANSFER__) \
157 (((__REG_DMA_TRANSFER__) == DDL_ADC16_REG_DMA_TRANSFER_NONE) \
158 || ((__REG_DMA_TRANSFER__) == DDL_ADC16_REG_DMA_TRANSFER_LIMITED) \
159 || ((__REG_DMA_TRANSFER__) == DDL_ADC16_REG_DMA_TRANSFER_UNLIMITED) \
160 )
161
162#define IS_DDL_ADC16_REG_OVR_DATA_BEHAVIOR(__REG_OVR_DATA_BEHAVIOR__) \
163 (((__REG_OVR_DATA_BEHAVIOR__) == DDL_ADC16_REG_OVR_DATA_PRESERVED) \
164 || ((__REG_OVR_DATA_BEHAVIOR__) == DDL_ADC16_REG_OVR_DATA_OVERWRITTEN) \
165 )
166
167#define IS_DDL_ADC16_INJ_TRIG_SOURCE(__ADC_INSTANCE__, __INJ_TRIG_SOURCE__) \
168 (((__INJ_TRIG_SOURCE__) == DDL_ADC16_INJ_TRIG_SOFTWARE) \
169 || ((__INJ_TRIG_SOURCE__) == DDL_ADC16_INJ_TRIG_EXT_TMR1_TRGO) \
170 || ((__INJ_TRIG_SOURCE__) == DDL_ADC16_INJ_TRIG_EXT_TMR1_CC4) \
171 || ((__INJ_TRIG_SOURCE__) == DDL_ADC16_INJ_TRIG_EXT_TMR2_TRGO) \
172 || ((__INJ_TRIG_SOURCE__) == DDL_ADC16_INJ_TRIG_EXT_TMR2_CC1) \
173 || ((__INJ_TRIG_SOURCE__) == DDL_ADC16_INJ_TRIG_EXT_TMR2_CC4) \
174 || ((__INJ_TRIG_SOURCE__) == DDL_ADC16_INJ_TRIG_EXT_TMR4_TRGO) \
175 || ((__INJ_TRIG_SOURCE__) == DDL_ADC16_INJ_TRIG_EXT_EINT_LINE15) \
176 || ((__INJ_TRIG_SOURCE__) == DDL_ADC16_INJ_TRIG_EXT_TMR3_CC3) \
177 || ((__INJ_TRIG_SOURCE__) == DDL_ADC16_INJ_TRIG_EXT_TMR3_TRGO) \
178 || ((__INJ_TRIG_SOURCE__) == DDL_ADC16_INJ_TRIG_EXT_TMR3_CC1) \
179 || ((__INJ_TRIG_SOURCE__) == DDL_ADC16_INJ_TRIG_EXT_LPTMROUT) \
180 )
181
182#define IS_DDL_ADC16_INJ_TRIG_EXT_EDGE(__INJ_TRIG_EXT_EDGE__) \
183 (((__INJ_TRIG_EXT_EDGE__) == DDL_ADC16_INJ_TRIG_EXT_RISING) \
184 || ((__INJ_TRIG_EXT_EDGE__) == DDL_ADC16_INJ_TRIG_EXT_FALLING) \
185 || ((__INJ_TRIG_EXT_EDGE__) == DDL_ADC16_INJ_TRIG_EXT_RISINGFALLING) \
186 )
187
188#define IS_DDL_ADC16_INJ_TRIG_AUTO(__INJ_TRIG_AUTO__) \
189 (((__INJ_TRIG_AUTO__) == DDL_ADC16_INJ_TRIG_INDEPENDENT) \
190 || ((__INJ_TRIG_AUTO__) == DDL_ADC16_INJ_TRIG_FROM_GRP_REGULAR) \
191 )
192
193#define IS_DDL_ADC16_INJ_SEQ_SCAN_LENGTH(__INJ_SEQ_SCAN_LENGTH__) \
194 (((__INJ_SEQ_SCAN_LENGTH__) == DDL_ADC16_INJ_SEQ_SCAN_DISABLE) \
195 || ((__INJ_SEQ_SCAN_LENGTH__) == DDL_ADC16_INJ_SEQ_SCAN_ENABLE_2RANKS) \
196 || ((__INJ_SEQ_SCAN_LENGTH__) == DDL_ADC16_INJ_SEQ_SCAN_ENABLE_3RANKS) \
197 || ((__INJ_SEQ_SCAN_LENGTH__) == DDL_ADC16_INJ_SEQ_SCAN_ENABLE_4RANKS) \
198 )
199
200#define IS_DDL_ADC16_INJ_SEQ_SCAN_DISCONT_MODE(__INJ_SEQ_DISCONT_MODE__) \
201 (((__INJ_SEQ_DISCONT_MODE__) == DDL_ADC16_INJ_SEQ_DISCONT_DISABLE) \
202 || ((__INJ_SEQ_DISCONT_MODE__) == DDL_ADC16_INJ_SEQ_DISCONT_1RANK) \
203 )
204
205#define IS_DDL_ADC16_SINGLE_DIFFERENTIAL(__SINGLE_DIFFERENTIAL__) \
206 (((__SINGLE_DIFFERENTIAL__) == DDL_ADC16_SINGLE_ENDED) \
207 || ((__SINGLE_DIFFERENTIAL__) == DDL_ADC16_DIFFERENTIAL_ENDED) \
208 )
209
210#define IS_DDL_ADC16_CHANNEL(__CHANNEL__) \
211 (((__CHANNEL__) == DDL_ADC16_CHANNEL_0) \
212 || ((__CHANNEL__) == DDL_ADC16_CHANNEL_1) \
213 || ((__CHANNEL__) == DDL_ADC16_CHANNEL_2) \
214 || ((__CHANNEL__) == DDL_ADC16_CHANNEL_3) \
215 || ((__CHANNEL__) == DDL_ADC16_CHANNEL_4) \
216 || ((__CHANNEL__) == DDL_ADC16_CHANNEL_5) \
217 )
218
222
223
227
228
229/* Private function prototypes -----------------------------------------------*/
230
231/* Exported functions --------------------------------------------------------*/
235
239
250ErrorStatus DDL_ADC16_DeInit(ADC16_TypeDef *ADCx)
251{
252 ErrorStatus status = SUCCESS;
253
254 __IO uint32_t timeout_cpu_cycles = 0UL;
255
256 /* Check the parameters */
257 ASSERT_PARAM(IS_ADC16_ALL_INSTANCE(ADCx));
258
259 /* Disable ADC instance if not already disabled. */
260 if (DDL_ADC16_IsEnabled(ADCx) == 1UL)
261 {
262 /* Set ADC group regular trigger source to SW start to ensure to not */
263 /* have an external trigger event occurring during the conversion stop */
264 /* ADC disable process. */
266
267 /* Stop potential ADC conversion on going on ADC group regular. */
268 if (DDL_ADC16_REG_IsConversionOngoing(ADCx) != 0UL)
269 {
271 {
273 }
274 }
275
276 /* Set ADC group injected trigger source to SW start to ensure to not */
277 /* have an external trigger event occurring during the conversion stop */
278 /* ADC disable process. */
280
281 /* Stop potential ADC conversion on going on ADC group injected. */
282 if (DDL_ADC16_INJ_IsConversionOngoing(ADCx) != 0UL)
283 {
285 {
287 }
288 }
289
290 /* Wait for ADC conversions are effectively stopped */
291 timeout_cpu_cycles = ADC_TIMEOUT_STOP_CONVERSION_CPU_CYCLES;
294 {
295 timeout_cpu_cycles--;
296 if (timeout_cpu_cycles == 0UL)
297 {
298 /* Time-out error */
299 status = ERROR;
300 break;
301 }
302 }
303
304 /* Disable the ADC instance */
305 DDL_ADC16_Disable(ADCx);
306
307 }
308
309 /* Check whether ADC state is compliant with expected state */
310 if (READ_BIT(ADCx->CR,
311 (ADC_CR_JADSTP | ADC_CR_ADSTP | ADC_CR_JADSTART | ADC_CR_ADSTART
312 | ADC_CR_ADEN)
313 )
314 == 0UL)
315 {
316 /* ========== Reset ADC registers ========== */
317 /* Reset register IER */
318 CLEAR_BIT(ADCx->IER,
329 )
330 );
331
332 /* Reset register ISR */
333 SET_BIT(ADCx->ISR,
344 )
345 );
346
347 /* Reset register CR */
348 /* - Bits ADC_CR_JADSTP, ADC_CR_ADSTP, ADC_CR_JADSTART, ADC_CR_ADSTART, */
349 /* ADC_CR_ADCAL, ADC_CR_ADDIS, ADC_CR_ADEN are in */
350 /* access mode "read-set": no direct reset applicable. */
351 /* - Reset Calibration mode to default setting (single ended). */
352 /* - Disable ADC internal voltage regulator. */
353 /* - Enable ADC deep power down. */
354 /* Note: ADC internal voltage regulator disable and ADC deep power */
355 /* down enable are conditioned to ADC state disabled: */
356 /* already done above. */
357
358 /* Reset register CFGR */
359 MODIFY_REG(ADCx->CFGR,
360 ( ADC_CFGR_AWD1CH | ADC_CFGR_JAUTO | ADC_CFGR_JAWD1EN
361 | ADC_CFGR_AWD1EN | ADC_CFGR_AWD1SGL | ADC_CFGR_JQM
362 | ADC_CFGR_JDISCEN | ADC_CFGR_DISCNUM | ADC_CFGR_DISCEN
363 | ADC_CFGR_AUTDLY | ADC_CFGR_CONT | ADC_CFGR_OVRMOD
364 | ADC_CFGR_EXTEN | ADC_CFGR_EXTSEL
365 | ADC_CFGR_DMACFG | ADC_CFGR_DMAEN),
366 ADC_CFGR_JQDIS
367 );
368
369 /* Reset register CFGR2 */
370 CLEAR_BIT(ADCx->CFGR2,
371 ( ADC_CFGR2_DIFSEL | ADC_CFGR2_AWDFILT
372 | ADC_CFGR2_ROVSM | ADC_CFGR2_TROVS | ADC_CFGR2_OVSS
373 | ADC_CFGR2_OVSR | ADC_CFGR2_JOVSE | ADC_CFGR2_ROVSE)
374 );
375
376 /* Reset register SMPR1 */
377 CLEAR_BIT(ADCx->SMPR1,
378 ( ADC_SMPR1_SMP5 | ADC_SMPR1_SMP4 | ADC_SMPR1_SMP3
379 | ADC_SMPR1_SMP2 | ADC_SMPR1_SMP1 | ADC_SMPR1_SMP0)
380 );
381
382 /* Reset register TR1 */
383 MODIFY_REG(ADCx->TR1, ADC_TR1_HT1 | ADC_TR1_LT1, ADC_TR1_HT1);
384
385 /* Reset register TR2 */
386 MODIFY_REG(ADCx->TR2, ADC_TR2_HT2 | ADC_TR2_LT2, ADC_TR2_HT2);
387
388 /* Reset register TR3 */
389 MODIFY_REG(ADCx->TR3, ADC_TR3_HT3 | ADC_TR3_LT3, ADC_TR3_HT3);
390
391 /* Reset register SQR1 */
392 CLEAR_BIT(ADCx->SQR1,
393 ( ADC_SQR1_SQ7 | ADC_SQR1_SQ6 | ADC_SQR1_SQ5
394 | ADC_SQR1_SQ4 | ADC_SQR1_SQ3 | ADC_SQR1_SQ2
395 | ADC_SQR1_SQ1 | ADC_SQR1_RL)
396 );
397
398 /* Reset register SQR2 */
399 CLEAR_BIT(ADCx->SQR2,
400 ( ADC_SQR2_SQ12 | ADC_SQR2_SQ11 | ADC_SQR2_SQ10
401 | ADC_SQR2_SQ9 | ADC_SQR2_SQ8)
402 );
403
404 /* Reset register JSQR */
405 CLEAR_BIT(ADCx->JSQR,
406 (ADC_JSQR_JL
407 | ADC_JSQR_JEXTSEL | ADC_JSQR_JEXTEN
408 | ADC_JSQR_JSQ4 | ADC_JSQR_JSQ3
409 | ADC_JSQR_JSQ2 | ADC_JSQR_JSQ1)
410 );
411
412 /* Reset register DR */
413 /* Note: bits in access mode read only, no direct reset applicable */
414
415 /* Reset register OFFSET0 */
416 CLEAR_BIT(ADCx->OFFSET0, ADC_OFFSET0_OFFSET0_EN | ADC_OFFSET0_OFFSET0 | ADC_OFFSET0_OFFSETPOS);
417 /* Reset register OFFSET1 */
418 CLEAR_BIT(ADCx->OFFSET1, ADC_OFFSET1_OFFSET1_EN | ADC_OFFSET1_OFFSET1 | ADC_OFFSET1_OFFSETPOS);
419 /* Reset register OFFSET2 */
420 CLEAR_BIT(ADCx->OFFSET2, ADC_OFFSET2_OFFSET2_EN | ADC_OFFSET2_OFFSET2 | ADC_OFFSET2_OFFSETPOS);
421 /* Reset register OFFSET3 */
422 CLEAR_BIT(ADCx->OFFSET3, ADC_OFFSET3_OFFSET3_EN | ADC_OFFSET3_OFFSET3 | ADC_OFFSET3_OFFSETPOS);
423 /* Reset register OFFSET4 */
424 CLEAR_BIT(ADCx->OFFSET4, ADC_OFFSET4_OFFSET4_EN | ADC_OFFSET4_OFFSET4 | ADC_OFFSET4_OFFSETPOS);
425 /* Reset register OFFSET5 */
426 CLEAR_BIT(ADCx->OFFSET5, ADC_OFFSET5_OFFSET5_EN | ADC_OFFSET5_OFFSET5 | ADC_OFFSET5_OFFSETPOS);
427
428 /* Reset registers JDR1, JDR2, JDR3, JDR4 */
429 /* Note: bits in access mode read only, no direct reset applicable */
430
431 /* Reset register AWD2CR */
432 CLEAR_BIT(ADCx->AWD2CR, ADC_AWD2CR_AWD2CH);
433
434 /* Reset register AWD3CR */
435 CLEAR_BIT(ADCx->AWD3CR, ADC_AWD3CR_AWD3CH);
436
437 /* Reset register CAL */
438 CLEAR_BIT( ADCx->CAL,ADC_CAL_REF_SEL);
439 }
440 else
441 {
442 /* ADC instance is in an unknown state */
443 /* Need to performing a hard reset of ADC instance, using high level */
444 /* clock source RCM ADC reset. */
445 status = ERROR;
446 }
447
448 return status;
449}
450
484ErrorStatus DDL_ADC16_Init(ADC16_TypeDef *ADCx, DDL_ADC16_InitTypeDef *ADC_InitStruct)
485{
486 ErrorStatus status = SUCCESS;
487
488 /* Check the parameters */
489 ASSERT_PARAM(IS_ADC16_ALL_INSTANCE(ADCx));
490
492
493 /* Note: Hardware constraint (refer to description of this function): */
494 /* ADC instance must be disabled. */
495 if (DDL_ADC16_IsEnabled(ADCx) == 0UL)
496 {
497 /* Configuration of ADC hierarchical scope: */
498 /* - ADC instance */
499 /* - Set ADC low power mode */
500 MODIFY_REG(ADCx->CFGR, ADC_CFGR_AUTDLY, ADC_InitStruct->LowPowerMode);
501
502 }
503 else
504 {
505 /* Initialization error: ADC instance is not disabled. */
506 status = ERROR;
507 }
508
509 return status;
510}
511
519{
520 /* Set ADC_InitStruct fields to default values */
521 /* Set fields of ADC instance */
522 ADC_InitStruct->LowPowerMode = DDL_ADC16_LP_MODE_NONE;
523}
524
557ErrorStatus DDL_ADC16_REG_Init(ADC16_TypeDef *ADCx, DDL_ADC16_REG_InitTypeDef *ADC_REG_InitStruct)
558{
559 ErrorStatus status = SUCCESS;
560
561 /* Check the parameters */
562 ASSERT_PARAM(IS_ADC16_ALL_INSTANCE(ADCx));
563 ASSERT_PARAM(IS_DDL_ADC16_REG_TRIG_SOURCE(ADCx, ADC_REG_InitStruct->TriggerSource));
565 if (ADC_REG_InitStruct->SequencerLength != DDL_ADC16_REG_SEQ_SCAN_DISABLE)
566 {
568
569 /* ADC group regular continuous mode and discontinuous mode */
570 /* can not be enabled simultenaeously */
572 || (ADC_REG_InitStruct->SequencerDiscont == DDL_ADC16_REG_SEQ_DISCONT_DISABLE));
573 }
577
578 /* Note: Hardware constraint (refer to description of this function): */
579 /* ADC instance must be disabled. */
580 if (DDL_ADC16_IsEnabled(ADCx) == 0UL)
581 {
582 /* Configuration of ADC hierarchical scope: */
583 /* - ADC group regular */
584 /* - Set ADC group regular trigger source */
585 /* - Set ADC group regular sequencer length */
586 /* - Set ADC group regular sequencer discontinuous mode */
587 /* - Set ADC group regular continuous mode */
588 /* - Set ADC group regular conversion data transfer: no transfer or */
589 /* transfer by DMA, and DMA requests mode */
590 /* - Set ADC group regular overrun behavior */
591 /* Note: On this G32R4 series, ADC trigger edge is set to value 0x0 by */
592 /* setting of trigger source to SW start. */
593 if (ADC_REG_InitStruct->SequencerLength != DDL_ADC16_REG_SEQ_SCAN_DISABLE)
594 {
595 MODIFY_REG(ADCx->CFGR,
596 ADC_CFGR_EXTSEL
597 | ADC_CFGR_EXTEN
598 | ADC_CFGR_DISCEN
599 | ADC_CFGR_DISCNUM
600 | ADC_CFGR_CONT
601 | ADC_CFGR_DMAEN
602 | ADC_CFGR_DMACFG
603 | ADC_CFGR_OVRMOD
604 ,
605 ADC_REG_InitStruct->TriggerSource
606 | ADC_REG_InitStruct->SequencerDiscont
607 | ADC_REG_InitStruct->ContinuousMode
608 | ADC_REG_InitStruct->DMATransfer
609 | ADC_REG_InitStruct->Overrun
610 );
611 }
612 else
613 {
614 MODIFY_REG(ADCx->CFGR,
615 ADC_CFGR_EXTSEL
616 | ADC_CFGR_EXTEN
617 | ADC_CFGR_DISCEN
618 | ADC_CFGR_DISCNUM
619 | ADC_CFGR_CONT
620 | ADC_CFGR_DMAEN
621 | ADC_CFGR_DMACFG
622 | ADC_CFGR_OVRMOD
623 ,
624 ADC_REG_InitStruct->TriggerSource
626 | ADC_REG_InitStruct->ContinuousMode
627 | ADC_REG_InitStruct->DMATransfer
628 | ADC_REG_InitStruct->Overrun
629 );
630 }
631
632 /* Set ADC group regular sequencer length and scan direction */
633 DDL_ADC16_REG_SetSequencerLength(ADCx, ADC_REG_InitStruct->SequencerLength);
634 }
635 else
636 {
637 /* Initialization error: ADC instance is not disabled. */
638 status = ERROR;
639 }
640 return status;
641}
642
650{
651 /* Set ADC_REG_InitStruct fields to default values */
652 /* Set fields of ADC group regular */
653 /* Note: On this G32R4 series, ADC trigger edge is set to value 0x0 by */
654 /* setting of trigger source to SW start. */
655 ADC_REG_InitStruct->TriggerSource = DDL_ADC16_REG_TRIG_SOFTWARE;
658 ADC_REG_InitStruct->ContinuousMode = DDL_ADC16_REG_CONV_SINGLE;
659 ADC_REG_InitStruct->DMATransfer = DDL_ADC16_REG_DMA_TRANSFER_NONE;
660 ADC_REG_InitStruct->Overrun = DDL_ADC16_REG_OVR_DATA_OVERWRITTEN;
661}
662
695ErrorStatus DDL_ADC16_INJ_Init(ADC16_TypeDef *ADCx, DDL_ADC16_INJ_InitTypeDef *ADC_INJ_InitStruct)
696{
697 ErrorStatus status = SUCCESS;
698
699 /* Check the parameters */
700 ASSERT_PARAM(IS_ADC16_ALL_INSTANCE(ADCx));
701 ASSERT_PARAM(IS_DDL_ADC16_INJ_TRIG_SOURCE(ADCx, ADC_INJ_InitStruct->TriggerSource));
703 if (ADC_INJ_InitStruct->SequencerLength != DDL_ADC16_INJ_SEQ_SCAN_DISABLE)
704 {
706 }
708
709 /* Note: Hardware constraint (refer to description of this function): */
710 /* ADC instance must be disabled. */
711 if (DDL_ADC16_IsEnabled(ADCx) == 0UL)
712 {
713 /* Configuration of ADC hierarchical scope: */
714 /* - ADC group injected */
715 /* - Set ADC group injected trigger source */
716 /* - Set ADC group injected sequencer length */
717 /* - Set ADC group injected sequencer discontinuous mode */
718 /* - Set ADC group injected conversion trigger: independent or */
719 /* from ADC group regular */
720 /* Note: On this G32R4 series, ADC trigger edge is set to value 0x0 by */
721 /* setting of trigger source to SW start. */
722 if (ADC_INJ_InitStruct->SequencerLength != DDL_ADC16_REG_SEQ_SCAN_DISABLE)
723 {
724 MODIFY_REG(ADCx->CFGR,
725 ADC_CFGR_JDISCEN
726 | ADC_CFGR_JAUTO
727 ,
728 ADC_INJ_InitStruct->SequencerDiscont
729 | ADC_INJ_InitStruct->TrigAuto
730 );
731 }
732 else
733 {
734 MODIFY_REG(ADCx->CFGR,
735 ADC_CFGR_JDISCEN
736 | ADC_CFGR_JAUTO
737 ,
739 | ADC_INJ_InitStruct->TrigAuto
740 );
741 }
742
743 MODIFY_REG(ADCx->JSQR,
744 ADC_JSQR_JEXTSEL
745 | ADC_JSQR_JEXTEN
746 | ADC_JSQR_JL
747 ,
748 ADC_INJ_InitStruct->TriggerSource
749 | ADC_INJ_InitStruct->SequencerLength
750 );
751 }
752 else
753 {
754 /* Initialization error: ADC instance is not disabled. */
755 status = ERROR;
756 }
757 return status;
758}
759
767{
768 /* Set ADC_INJ_InitStruct fields to default values */
769 /* Set fields of ADC group injected */
770 ADC_INJ_InitStruct->TriggerSource = DDL_ADC16_INJ_TRIG_SOFTWARE;
773 ADC_INJ_InitStruct->TrigAuto = DDL_ADC16_INJ_TRIG_INDEPENDENT;
774}
775
779
783
787
788#endif /* ADC2 ADC3 */
789
793
794#endif /* USE_FULL_DDL_DRIVER */
795
G32 assert template file. This file should be copied to the application folder and renamed to g32_ass...
#define ASSERT_PARAM(_PARAM_)
Definition g32_assert.h:58
Header file of ADC DDL module.
Header file of FLASH DDL module.
Header file of RCM DDL module.
#define DDL_ADC16_FLAG_AWD2
#define DDL_ADC16_FLAG_EOS
#define DDL_ADC16_FLAG_AWD1
#define DDL_ADC16_FLAG_JQOVF
#define DDL_ADC16_FLAG_OVR
#define DDL_ADC16_FLAG_EOSMP
#define DDL_ADC16_FLAG_AWD3
#define DDL_ADC16_FLAG_JEOC
#define DDL_ADC16_FLAG_JEOS
#define DDL_ADC16_FLAG_EOC
#define DDL_ADC16_INJ_SEQ_DISCONT_DISABLE
#define DDL_ADC16_INJ_SEQ_SCAN_DISABLE
#define DDL_ADC16_INJ_TRIG_SOFTWARE
#define DDL_ADC16_INJ_TRIG_INDEPENDENT
#define DDL_ADC16_IT_EOSMP
#define DDL_ADC16_IT_EOC
#define DDL_ADC16_IT_JEOS
#define DDL_ADC16_IT_EOS
#define DDL_ADC16_IT_OVR
#define DDL_ADC16_IT_AWD2
#define DDL_ADC16_IT_JQOVF
#define DDL_ADC16_IT_AWD1
#define DDL_ADC16_IT_AWD3
#define DDL_ADC16_IT_JEOC
#define DDL_ADC16_LP_MODE_NONE
#define DDL_ADC16_REG_CONV_SINGLE
#define DDL_ADC16_REG_DMA_TRANSFER_NONE
#define DDL_ADC16_REG_OVR_DATA_OVERWRITTEN
#define DDL_ADC16_REG_SEQ_DISCONT_DISABLE
#define DDL_ADC16_REG_SEQ_SCAN_DISABLE
#define DDL_ADC16_REG_TRIG_SOFTWARE
__STATIC_INLINE void DDL_ADC16_INJ_SetTriggerSource(ADC16_TypeDef *ADCx, uint32_t TriggerSource)
Set ADC group injected conversion trigger source: internal (SW start) or from external peripheral (ti...
__STATIC_INLINE void DDL_ADC16_REG_SetTriggerSource(ADC16_TypeDef *ADCx, uint32_t TriggerSource)
Set ADC group regular conversion trigger source: internal (SW start) or from external peripheral (tim...
__STATIC_INLINE void DDL_ADC16_REG_SetSequencerLength(ADC16_TypeDef *ADCx, uint32_t SequencerNbRanks)
Set ADC group regular sequencer length and scan direction.
void DDL_ADC16_REG_StructInit(DDL_ADC16_REG_InitTypeDef *ADC_REG_InitStruct)
Set each DDL_ADC16_REG_InitTypeDef field to default value.
void DDL_ADC16_StructInit(DDL_ADC16_InitTypeDef *ADC_InitStruct)
Set each DDL_ADC16_InitTypeDef field to default value.
void DDL_ADC16_INJ_StructInit(DDL_ADC16_INJ_InitTypeDef *ADC_INJ_InitStruct)
Set each DDL_ADC16_INJ_InitTypeDef field to default value.
ErrorStatus DDL_ADC16_DeInit(ADC16_TypeDef *ADCx)
De-initialize registers of the selected ADC instance to their default reset values.
ErrorStatus DDL_ADC16_Init(ADC16_TypeDef *ADCx, DDL_ADC16_InitTypeDef *ADC_InitStruct)
Initialize some features of ADC instance.
ErrorStatus DDL_ADC16_INJ_Init(ADC16_TypeDef *ADCx, DDL_ADC16_INJ_InitTypeDef *ADC_INJ_InitStruct)
Initialize some features of ADC group injected.
ErrorStatus DDL_ADC16_REG_Init(ADC16_TypeDef *ADCx, DDL_ADC16_REG_InitTypeDef *ADC_REG_InitStruct)
Initialize some features of ADC group regular.
__STATIC_INLINE void DDL_ADC16_INJ_StopConversion(ADC16_TypeDef *ADCx)
Stop ADC group injected conversion.
__STATIC_INLINE uint32_t DDL_ADC16_INJ_IsConversionOngoing(ADC16_TypeDef *ADCx)
Get ADC group injected conversion state.
__STATIC_INLINE uint32_t DDL_ADC16_INJ_IsStopConversionOngoing(ADC16_TypeDef *ADCx)
Get ADC group injected command of conversion stop state.
__STATIC_INLINE void DDL_ADC16_REG_StopConversion(ADC16_TypeDef *ADCx)
Stop ADC group regular conversion.
__STATIC_INLINE uint32_t DDL_ADC16_REG_IsStopConversionOngoing(ADC16_TypeDef *ADCx)
Get ADC group regular command of conversion stop state.
__STATIC_INLINE uint32_t DDL_ADC16_REG_IsConversionOngoing(ADC16_TypeDef *ADCx)
Get ADC group regular conversion state.
__STATIC_INLINE void DDL_ADC16_Disable(ADC16_TypeDef *ADCx)
Disable the selected ADC instance.
__STATIC_INLINE uint32_t DDL_ADC16_IsEnabled(ADC16_TypeDef *ADCx)
Get the selected ADC instance enable state.
#define IS_DDL_ADC16_INJ_SEQ_SCAN_LENGTH(__INJ_SEQ_SCAN_LENGTH__)
#define IS_DDL_ADC16_INJ_TRIG_SOURCE(__ADC_INSTANCE__, __INJ_TRIG_SOURCE__)
#define IS_DDL_ADC16_REG_SEQ_SCAN_LENGTH(__REG_SEQ_SCAN_LENGTH__)
#define ADC_TIMEOUT_STOP_CONVERSION_CPU_CYCLES
#define IS_DDL_ADC16_REG_DMA_TRANSFER(__REG_DMA_TRANSFER__)
#define IS_DDL_ADC16_REG_SEQ_SCAN_DISCONT_MODE(__REG_SEQ_DISCONT_MODE__)
#define IS_DDL_ADC16_REG_TRIG_SOURCE(__ADC_INSTANCE__, __REG_TRIG_SOURCE__)
#define IS_DDL_ADC16_REG_OVR_DATA_BEHAVIOR(__REG_OVR_DATA_BEHAVIOR__)
#define IS_DDL_ADC16_INJ_TRIG_AUTO(__INJ_TRIG_AUTO__)
#define IS_DDL_ADC16_INJ_SEQ_SCAN_DISCONT_MODE(__INJ_SEQ_DISCONT_MODE__)
#define IS_DDL_ADC16_LOW_POWER(__LOW_POWER__)
#define IS_DDL_ADC16_REG_CONTINUOUS_MODE(__REG_CONTINUOUS_MODE__)
Structure definition of some features of ADC group injected.
Structure definition of some features of ADC instance.
Structure definition of some features of ADC group regular.