1 /*
2  * Copyright 2021-2024 NXP
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 #ifndef ADC_SAR_IP_HW_ACCESS_H
8 #define ADC_SAR_IP_HW_ACCESS_H
9 
10 /**
11 *   @file
12 *
13 *   @internal
14 *   @addtogroup adc_sar_ip Adc Sar IPL
15 *   @{
16 */
17 
18 #ifdef __cplusplus
19 extern "C"{
20 #endif
21 
22 /*==================================================================================================
23 *                                        INCLUDE FILES
24 * 1) system and project includes
25 * 2) needed interfaces from external units
26 * 3) internal and external interfaces from this unit
27 ==================================================================================================*/
28 #include "Std_Types.h"
29 #include "Adc_Sar_Ip_CfgDefines.h"
30 
31 #if (ADC_SAR_IP_DEV_ERROR_DETECT == STD_ON)
32 #include "Devassert.h"
33 #endif /* (ADC_SAR_IP_DEV_ERROR_DETECT == STD_ON) */
34 
35 /*==================================================================================================
36 *                              SOURCE FILE VERSION INFORMATION
37 ==================================================================================================*/
38 #define ADC_SAR_IP_VENDOR_ID_HWACCESS                      43
39 #define ADC_SAR_IP_AR_RELEASE_MAJOR_VERSION_HWACCESS       4
40 #define ADC_SAR_IP_AR_RELEASE_MINOR_VERSION_HWACCESS       7
41 #define ADC_SAR_IP_AR_RELEASE_REVISION_VERSION_HWACCESS    0
42 #define ADC_SAR_IP_SW_MAJOR_VERSION_HWACCESS               2
43 #define ADC_SAR_IP_SW_MINOR_VERSION_HWACCESS               0
44 #define ADC_SAR_IP_SW_PATCH_VERSION_HWACCESS               0
45 
46 /*==================================================================================================
47 *                                     FILE VERSION CHECKS
48 ==================================================================================================*/
49 /* Check if Adc_Sar_Ip_HwAccess.h file and Adc_Sar_Ip_CfgDefines.h file are of the same vendor */
50 #if (ADC_SAR_IP_VENDOR_ID_HWACCESS != ADC_SAR_IP_VENDOR_ID_CFGDEFINES)
51     #error "Adc_Sar_Ip_HwAccess.h and Adc_Sar_Ip_CfgDefines.h have different vendor ids"
52 #endif
53 
54 /* Check if Adc_Sar_Ip_HwAccess.h file and Adc_Sar_Ip_CfgDefines.h file are of the same Autosar version */
55 #if ((ADC_SAR_IP_AR_RELEASE_MAJOR_VERSION_HWACCESS != ADC_SAR_IP_AR_RELEASE_MAJOR_VERSION_CFGDEFINES) || \
56      (ADC_SAR_IP_AR_RELEASE_MINOR_VERSION_HWACCESS != ADC_SAR_IP_AR_RELEASE_MINOR_VERSION_CFGDEFINES) || \
57      (ADC_SAR_IP_AR_RELEASE_REVISION_VERSION_HWACCESS != ADC_SAR_IP_AR_RELEASE_REVISION_VERSION_CFGDEFINES) \
58     )
59     #error "AutoSar Version Numbers of Adc_Sar_Ip_HwAccess.h and Adc_Sar_Ip_CfgDefines.h are different"
60 #endif
61 
62 /* Check if Adc_Sar_Ip_HwAccess.h file and Adc_Sar_Ip_CfgDefines.h file are of the same Software version */
63 #if ((ADC_SAR_IP_SW_MAJOR_VERSION_HWACCESS != ADC_SAR_IP_SW_MAJOR_VERSION_CFGDEFINES) || \
64      (ADC_SAR_IP_SW_MINOR_VERSION_HWACCESS != ADC_SAR_IP_SW_MINOR_VERSION_CFGDEFINES) || \
65      (ADC_SAR_IP_SW_PATCH_VERSION_HWACCESS != ADC_SAR_IP_SW_PATCH_VERSION_CFGDEFINES) \
66     )
67   #error "Software Version Numbers of Adc_Sar_Ip_HwAccess.h and Adc_Sar_Ip_CfgDefines.h are different"
68 #endif
69 
70 #ifndef DISABLE_MCAL_INTERMODULE_ASR_CHECK
71 /* Check if Adc_Sar_Ip_HwAccess.h file and Std_Types.h file are of the same Autosar version */
72 #if ((ADC_SAR_IP_AR_RELEASE_MAJOR_VERSION_HWACCESS != STD_AR_RELEASE_MAJOR_VERSION) || \
73      (ADC_SAR_IP_AR_RELEASE_MINOR_VERSION_HWACCESS != STD_AR_RELEASE_MINOR_VERSION)    \
74     )
75     #error "AutoSar Version Numbers of Adc_Sar_Ip_HwAccess.h and Std_Types.h are different"
76 #endif
77 
78 #if (ADC_SAR_IP_DEV_ERROR_DETECT == STD_ON)
79 /* Check if Adc_Sar_Ip_HwAccess.h and Devassert.h are of the same Autosar version */
80 #if ((ADC_SAR_IP_AR_RELEASE_MAJOR_VERSION_HWACCESS != DEVASSERT_AR_RELEASE_MAJOR_VERSION) || \
81      (ADC_SAR_IP_AR_RELEASE_MINOR_VERSION_HWACCESS != DEVASSERT_AR_RELEASE_MINOR_VERSION) \
82     )
83     #error "AutoSar Version Numbers of Adc_Sar_Ip_HwAccess.h and Devassert.h are different"
84 #endif
85 #endif /* (ADC_SAR_IP_DEV_ERROR_DETECT == STD_ON) */
86 #endif /* DISABLE_MCAL_INTERMODULE_ASR_CHECK */
87 
88 /*==================================================================================================
89 *                                      EXTERN DECLARATIONS
90 ==================================================================================================*/
91 extern ADC_Type * const Adc_Sar_Ip_apxAdcBase[ADC_INSTANCE_COUNT];
92 #if FEATURE_ADC_HAS_APPLICATION_EXTENSION
93 extern SAR_ADC_AE_Type * const Adc_Sar_AE_Ip_apxAdcBase[SAR_ADC_AE_INSTANCE_COUNT];
94 #endif /* FEATURE_ADC_HAS_APPLICATION_EXTENSION */
95 /*==================================================================================================
96 *                                      DEFINES AND MACROS
97 ==================================================================================================*/
98 /* Define the hardware register size when calculating bit positions */
99 #define ADC_SAR_IP_HW_REG_SIZE (32u)
100 
101 /* Definitions to compute bit positions from channel index */
102 #define ADC_SAR_IP_CHAN_2_VECT(CHNIDX) ((CHNIDX) / ADC_SAR_IP_HW_REG_SIZE)
103 #define ADC_SAR_IP_CHAN_2_BIT(CHNIDX)  ((CHNIDX) % ADC_SAR_IP_HW_REG_SIZE)
104 /*==================================================================================================
105                                      FUNCTION DEFINITIONS
106 ==================================================================================================*/
107 #define ADC_START_SEC_CODE
108 #include "Adc_MemMap.h"
109 
110 /*FUNCTION*********************************************************************
111  *
112  * Function Name : Adc_Sar_Powerup
113  * Description   : Turning on power to the analog portion of ADC
114  *
115  *END*************************************************************************/
Adc_Sar_Powerup(const uint32 Instance)116 static inline void Adc_Sar_Powerup(const uint32 Instance)
117 {
118     ADC_Type * AdcBasePtr = NULL_PTR;
119 #if FEATURE_ADC_HAS_APPLICATION_EXTENSION
120     SAR_ADC_AE_Type * AdcAEBasePtr = NULL_PTR;
121 #endif /* FEATURE_ADC_HAS_APPLICATION_EXTENSION */
122 
123 #if FEATURE_ADC_HAS_APPLICATION_EXTENSION
124     if (Instance >= ADC_INSTANCE_COUNT)
125     {
126         AdcAEBasePtr = Adc_Sar_AE_Ip_apxAdcBase[Instance - ADC_INSTANCE_COUNT];
127         AdcAEBasePtr->MCR &= ~(ADC_MCR_PWDN(1u));
128     }
129     else
130 #endif /* FEATURE_ADC_HAS_APPLICATION_EXTENSION */
131     {
132         AdcBasePtr = Adc_Sar_Ip_apxAdcBase[Instance];
133         AdcBasePtr->MCR &= ~(ADC_MCR_PWDN(1u));
134     }
135 }
136 
137 /*FUNCTION*********************************************************************
138  *
139  * Function Name : Adc_Sar_Powerdown
140  * Description   : Turning off power to the analog portion of ADC
141  *
142  *END*************************************************************************/
Adc_Sar_Powerdown(const uint32 Instance)143 static inline void Adc_Sar_Powerdown(const uint32 Instance)
144 {
145     ADC_Type * AdcBasePtr = NULL_PTR;
146 #if FEATURE_ADC_HAS_APPLICATION_EXTENSION
147     SAR_ADC_AE_Type * AdcAEBasePtr = NULL_PTR;
148 #endif /* FEATURE_ADC_HAS_APPLICATION_EXTENSION */
149 
150 #if FEATURE_ADC_HAS_APPLICATION_EXTENSION
151     if (Instance >= ADC_INSTANCE_COUNT)
152     {
153         AdcAEBasePtr = Adc_Sar_AE_Ip_apxAdcBase[Instance - ADC_INSTANCE_COUNT];
154         AdcAEBasePtr->MCR |= ADC_MCR_PWDN(1u);
155     }
156     else
157 #endif /* FEATURE_ADC_HAS_APPLICATION_EXTENSION */
158     {
159         AdcBasePtr = Adc_Sar_Ip_apxAdcBase[Instance];
160         AdcBasePtr->MCR |= ADC_MCR_PWDN(1u);
161     }
162 }
163 
164 #if FEATURE_ADC_HAS_HIGH_SPEED_ENABLE
165 /*FUNCTION*********************************************************************
166  *
167  * Function Name : Adc_Sar_EnableHighSpeed
168  * Description   : Enable a high-speed calibration or a high-speed conversion
169  *
170  *END*************************************************************************/
Adc_Sar_EnableHighSpeed(ADC_Type * const Base,boolean Enable)171 static inline void Adc_Sar_EnableHighSpeed(ADC_Type * const Base,
172                                            boolean Enable)
173 {
174     uint32 Amsio = Base->AMSIO;
175 
176     Amsio &= ~(ADC_AMSIO_HSEN_MASK | ADC_AMSIO_CMPCTRL0_MASK);
177     if (TRUE == Enable)
178     {
179         Amsio |= (ADC_AMSIO_HSEN(1u) | ADC_AMSIO_CMPCTRL0(1u));
180     }
181 
182     Base->AMSIO = Amsio;
183 }
184 #endif /* FEATURE_ADC_HAS_HIGH_SPEED_ENABLE */
185 
186 /*FUNCTION*********************************************************************
187  *
188  * Function Name : Adc_Sar_WriteThresholds
189  * Description   : Write Watchdog low, high thresholds for a wdog register
190  *
191  *END*************************************************************************/
Adc_Sar_WriteThresholds(const uint32 Instance,const uint8 RegisterNumber,const uint16 HighThreshold,const uint16 LowThreshold)192 static inline void Adc_Sar_WriteThresholds(const uint32 Instance,
193                                            const uint8 RegisterNumber,
194                                            const uint16 HighThreshold,
195                                            const uint16 LowThreshold)
196 {
197     ADC_Type * AdcBasePtr = NULL_PTR;
198 #if FEATURE_ADC_HAS_APPLICATION_EXTENSION
199     SAR_ADC_AE_Type * AdcAEBasePtr = NULL_PTR;
200 #endif /* FEATURE_ADC_HAS_APPLICATION_EXTENSION */
201 #if !ADC_SAR_IP_HAS_THRHLR_ARRAY
202     volatile uint32 * THRHLR0Addr = NULL_PTR;
203     volatile uint32 * THRHLR1Addr = NULL_PTR;
204     volatile uint32 * THRHLR2Addr = NULL_PTR;
205     volatile uint32 * THRHLR3Addr = NULL_PTR;
206     volatile uint32 * THRHLR4Addr = NULL_PTR;
207     volatile uint32 * THRHLR5Addr = NULL_PTR;
208 #if ((ADC_SAR_IP_THRHLR_COUNT > 6U) || FEATURE_ADC_HAS_APPLICATION_EXTENSION)
209     volatile uint32 * THRHLR6Addr = NULL_PTR;
210     volatile uint32 * THRHLR7Addr = NULL_PTR;
211 #if ((ADC_SAR_IP_THRHLR_COUNT > 8U) || FEATURE_ADC_HAS_APPLICATION_EXTENSION)
212     volatile uint32 * THRHLR8Addr = NULL_PTR;
213     volatile uint32 * THRHLR9Addr = NULL_PTR;
214     volatile uint32 * THRHLR10Addr = NULL_PTR;
215     volatile uint32 * THRHLR11Addr = NULL_PTR;
216 #if ((ADC_SAR_IP_THRHLR_COUNT > 12U) || FEATURE_ADC_HAS_APPLICATION_EXTENSION)
217     volatile uint32 * THRHLR12Addr = NULL_PTR;
218     volatile uint32 * THRHLR13Addr = NULL_PTR;
219     volatile uint32 * THRHLR14Addr = NULL_PTR;
220     volatile uint32 * THRHLR15Addr = NULL_PTR;
221 #endif /* ((ADC_SAR_IP_THRHLR_COUNT > 12U) || ...) */
222 #endif /* ((ADC_SAR_IP_THRHLR_COUNT > 8U) || ...) */
223 #endif /* ((ADC_SAR_IP_THRHLR_COUNT > 6U) || ...) */
224 #endif /* !ADC_SAR_IP_HAS_THRHLR_ARRAY */
225 
226 #if FEATURE_ADC_HAS_APPLICATION_EXTENSION
227     if (Instance >= ADC_INSTANCE_COUNT)
228     {
229         AdcAEBasePtr = Adc_Sar_AE_Ip_apxAdcBase[Instance - ADC_INSTANCE_COUNT];
230     }
231     else
232 #endif /* FEATURE_ADC_HAS_APPLICATION_EXTENSION */
233     {
234         AdcBasePtr = Adc_Sar_Ip_apxAdcBase[Instance];
235     }
236 
237 #if !ADC_SAR_IP_HAS_THRHLR_ARRAY
238 #if FEATURE_ADC_HAS_APPLICATION_EXTENSION
239     if (Instance >= ADC_INSTANCE_COUNT)
240     {
241         THRHLR0Addr = (volatile uint32 *)&(AdcAEBasePtr->THRHLR0);
242         THRHLR1Addr = (volatile uint32 *)&(AdcAEBasePtr->THRHLR1);
243         THRHLR2Addr = (volatile uint32 *)&(AdcAEBasePtr->THRHLR2);
244         THRHLR3Addr = (volatile uint32 *)&(AdcAEBasePtr->THRHLR3);
245         THRHLR4Addr = (volatile uint32 *)&(AdcAEBasePtr->THRHLR4);
246         THRHLR5Addr = (volatile uint32 *)&(AdcAEBasePtr->THRHLR5);
247         THRHLR6Addr = (volatile uint32 *)&(AdcAEBasePtr->THRHLR6);
248         THRHLR7Addr = (volatile uint32 *)&(AdcAEBasePtr->THRHLR7);
249         THRHLR8Addr = (volatile uint32 *)&(AdcAEBasePtr->THRHLR8);
250         THRHLR9Addr = (volatile uint32 *)&(AdcAEBasePtr->THRHLR9);
251         THRHLR10Addr = (volatile uint32 *)&(AdcAEBasePtr->THRHLR10);
252         THRHLR11Addr = (volatile uint32 *)&(AdcAEBasePtr->THRHLR11);
253         THRHLR12Addr = (volatile uint32 *)&(AdcAEBasePtr->THRHLR12);
254         THRHLR13Addr = (volatile uint32 *)&(AdcAEBasePtr->THRHLR13);
255         THRHLR14Addr = (volatile uint32 *)&(AdcAEBasePtr->THRHLR14);
256         THRHLR15Addr = (volatile uint32 *)&(AdcAEBasePtr->THRHLR15);
257     }
258     else
259 #endif /* FEATURE_ADC_HAS_APPLICATION_EXTENSION */
260     {
261         THRHLR0Addr = (volatile uint32 *)&(AdcBasePtr->THRHLR0);
262         THRHLR1Addr = (volatile uint32 *)&(AdcBasePtr->THRHLR1);
263         THRHLR2Addr = (volatile uint32 *)&(AdcBasePtr->THRHLR2);
264         THRHLR3Addr = (volatile uint32 *)&(AdcBasePtr->THRHLR3);
265         THRHLR4Addr = (volatile uint32 *)&(AdcBasePtr->THRHLR4);
266         THRHLR5Addr = (volatile uint32 *)&(AdcBasePtr->THRHLR5);
267 #if (ADC_SAR_IP_THRHLR_COUNT > 6U)
268         THRHLR6Addr = (volatile uint32 *)&(AdcBasePtr->THRHLR6);
269         THRHLR7Addr = (volatile uint32 *)&(AdcBasePtr->THRHLR7);
270 #if (ADC_SAR_IP_THRHLR_COUNT > 8U)
271         THRHLR8Addr = (volatile uint32 *)&(AdcBasePtr->THRHLR8);
272         THRHLR9Addr = (volatile uint32 *)&(AdcBasePtr->THRHLR9);
273         THRHLR10Addr = (volatile uint32 *)&(AdcBasePtr->THRHLR10);
274         THRHLR11Addr = (volatile uint32 *)&(AdcBasePtr->THRHLR11);
275 #if (ADC_SAR_IP_THRHLR_COUNT > 12U)
276         THRHLR12Addr = (volatile uint32 *)&(AdcBasePtr->THRHLR12);
277         THRHLR13Addr = (volatile uint32 *)&(AdcBasePtr->THRHLR13);
278         THRHLR14Addr = (volatile uint32 *)&(AdcBasePtr->THRHLR14);
279         THRHLR15Addr = (volatile uint32 *)&(AdcBasePtr->THRHLR15);
280 #endif /* (ADC_SAR_IP_THRHLR_COUNT > 12U) */
281 #endif /* (ADC_SAR_IP_THRHLR_COUNT > 8U) */
282 #endif /* (ADC_SAR_IP_THRHLR_COUNT > 6U) */
283     }
284 #endif /* ADC_SAR_IP_HAS_THRHLR_ARRAY */
285 
286 #if ADC_SAR_IP_HAS_THRHLR_ARRAY
287 #if (ADC_SAR_IP_DEV_ERROR_DETECT == STD_ON)
288     DevAssert(RegisterNumber < ADC_SAR_IP_THRHLR_COUNT);
289 #endif /* (ADC_SAR_IP_DEV_ERROR_DETECT == STD_ON) */
290     uint32 Value = ADC_THRHLR_THRH(HighThreshold) |
291                      ADC_THRHLR_THRL(LowThreshold);
292     AdcBasePtr->THRHLR[RegisterNumber] = Value;
293 
294 #else /* ADC_SAR_IP_HAS_THRHLR_ARRAY == 0 */
295 
296     uint32 Value = ADC_THRHLR0_THRH(HighThreshold) |
297                      ADC_THRHLR0_THRL(LowThreshold);
298     switch (RegisterNumber)
299     {
300         case 0:
301             *THRHLR0Addr = Value;
302             break;
303         case 1:
304             *THRHLR1Addr = Value;
305             break;
306         case 2:
307             *THRHLR2Addr = Value;
308             break;
309         case 3:
310             *THRHLR3Addr = Value;
311             break;
312         case 4:
313             *THRHLR4Addr = Value;
314             break;
315         case 5:
316             *THRHLR5Addr = Value;
317             break;
318 #if ((ADC_SAR_IP_THRHLR_COUNT > 6U) || FEATURE_ADC_HAS_APPLICATION_EXTENSION)
319         case 6:
320             *THRHLR6Addr = Value;
321             break;
322         case 7:
323             *THRHLR7Addr = Value;
324             break;
325 #if ((ADC_SAR_IP_THRHLR_COUNT > 8U) || FEATURE_ADC_HAS_APPLICATION_EXTENSION)
326         case 8:
327             *THRHLR8Addr = Value;
328             break;
329         case 9:
330             *THRHLR9Addr = Value;
331             break;
332         case 10:
333             *THRHLR10Addr = Value;
334             break;
335         case 11:
336             *THRHLR11Addr = Value;
337             break;
338 #if ((ADC_SAR_IP_THRHLR_COUNT > 12U) || FEATURE_ADC_HAS_APPLICATION_EXTENSION)
339         case 12:
340             *THRHLR12Addr = Value;
341             break;
342         case 13:
343             *THRHLR13Addr = Value;
344             break;
345         case 14:
346             *THRHLR14Addr = Value;
347             break;
348         case 15:
349             *THRHLR15Addr = Value;
350             break;
351 #endif /* ((ADC_SAR_IP_THRHLR_COUNT > 12U) || ...) */
352 #endif /* ((ADC_SAR_IP_THRHLR_COUNT > 8U) || ...) */
353 #endif /* ((ADC_SAR_IP_THRHLR_COUNT > 6U) || ...) */
354         default:
355             ; /* no-op */
356             break;
357     }
358 #endif /* ADC_SAR_IP_HAS_THRHLR_ARRAY */
359 }
360 
361 #if (ADC_SAR_IP_HAS_CWSELR_UNROLLED == 1u)
362 /*FUNCTION*********************************************************************
363  *
364  * Function Name : Adc_Sar_GetChannelWatchdogAddress
365  * Description   : Returns the address of the specified CWSELR register
366  *
367  *END*************************************************************************/
Adc_Sar_GetChannelWatchdogAddress(const uint32 Instance,const uint32 RegisterNumber)368 static inline volatile uint32 * Adc_Sar_GetChannelWatchdogAddress(const uint32 Instance,
369                                                                   const uint32 RegisterNumber)
370 {
371     ADC_Type * AdcBasePtr = NULL_PTR;
372 #if FEATURE_ADC_HAS_APPLICATION_EXTENSION
373     SAR_ADC_AE_Type * AdcAEBasePtr = NULL_PTR;
374 #endif /* FEATURE_ADC_HAS_APPLICATION_EXTENSION */
375     volatile uint32 * CwselrAddr = NULL_PTR;
376 #if (ADC_SAR_IP_HAS_CWSELR0 || FEATURE_ADC_HAS_APPLICATION_EXTENSION)
377     volatile uint32 * CWSELR0Addr = NULL_PTR;
378 #endif /* (ADC_SAR_IP_HAS_CWSELR0 || FEATURE_ADC_HAS_APPLICATION_EXTENSION) */
379 #if (ADC_SAR_IP_HAS_CWSELR1 || FEATURE_ADC_HAS_APPLICATION_EXTENSION)
380     volatile uint32 * CWSELR1Addr = NULL_PTR;
381 #endif /* (ADC_SAR_IP_HAS_CWSELR1 || FEATURE_ADC_HAS_APPLICATION_EXTENSION) */
382 #if (ADC_SAR_IP_HAS_CWSELR2 || FEATURE_ADC_HAS_APPLICATION_EXTENSION)
383     volatile uint32 * CWSELR2Addr = NULL_PTR;
384 #endif /* (ADC_SAR_IP_HAS_CWSELR2 || FEATURE_ADC_HAS_APPLICATION_EXTENSION) */
385 
386 #if FEATURE_ADC_HAS_APPLICATION_EXTENSION
387     if (Instance >= ADC_INSTANCE_COUNT)
388     {
389         AdcAEBasePtr = Adc_Sar_AE_Ip_apxAdcBase[Instance - ADC_INSTANCE_COUNT];
390         CWSELR0Addr = (volatile uint32 *)&(AdcAEBasePtr->CWSELR0);
391         CWSELR1Addr = (volatile uint32 *)&(AdcAEBasePtr->CWSELR1);
392         CWSELR2Addr = (volatile uint32 *)&(AdcAEBasePtr->CWSELR2);
393     }
394     else
395 #endif /* FEATURE_ADC_HAS_APPLICATION_EXTENSION */
396     {
397         AdcBasePtr = Adc_Sar_Ip_apxAdcBase[Instance];
398 #if ADC_SAR_IP_HAS_CWSELR0
399         CWSELR0Addr = (volatile uint32 *)&(AdcBasePtr->CWSELR0);
400 #endif /* ADC_SAR_IP_HAS_CWSELR0 */
401 #if ADC_SAR_IP_HAS_CWSELR1
402         CWSELR1Addr = (volatile uint32 *)&(AdcBasePtr->CWSELR1);
403 #endif /* ADC_SAR_IP_HAS_CWSELR1 */
404 #if ADC_SAR_IP_HAS_CWSELR2
405         CWSELR2Addr = (volatile uint32 *)&(AdcBasePtr->CWSELR2);
406 #endif /* ADC_SAR_IP_HAS_CWSELR2 */
407     }
408 
409     switch (RegisterNumber)
410     {
411 #if (ADC_SAR_IP_HAS_CWSELR0 || FEATURE_ADC_HAS_APPLICATION_EXTENSION)
412         case 0u:
413             CwselrAddr = CWSELR0Addr;
414             break;
415 #endif /* (ADC_SAR_IP_HAS_CWSELR0 || FEATURE_ADC_HAS_APPLICATION_EXTENSION) */
416 #if (ADC_SAR_IP_HAS_CWSELR1 || FEATURE_ADC_HAS_APPLICATION_EXTENSION)
417         case 1u:
418             CwselrAddr = CWSELR1Addr;
419             break;
420 #endif /* (ADC_SAR_IP_HAS_CWSELR1 || FEATURE_ADC_HAS_APPLICATION_EXTENSION) */
421 #if (ADC_SAR_IP_HAS_CWSELR2 || FEATURE_ADC_HAS_APPLICATION_EXTENSION)
422         case 2u:
423             CwselrAddr = CWSELR2Addr;
424             break;
425 #endif /* (ADC_SAR_IP_HAS_CWSELR2 || FEATURE_ADC_HAS_APPLICATION_EXTENSION) */
426 #if ADC_SAR_IP_HAS_CWSELR3
427         case 3u:
428             CwselrAddr = (volatile uint32 *)&(AdcBasePtr->CWSELR3);
429             break;
430 #endif /* ADC_SAR_IP_HAS_CWSELR3 */
431 #if ADC_SAR_IP_HAS_CWSELR4
432         case 4u:
433             CwselrAddr = (volatile uint32 *)&(AdcBasePtr->CWSELR4);
434             break;
435 #endif /* ADC_SAR_IP_HAS_CWSELR4 */
436 #if ADC_SAR_IP_HAS_CWSELR5
437         case 5u:
438             CwselrAddr = (volatile uint32 *)&(AdcBasePtr->CWSELR5);
439             break;
440 #endif /* ADC_SAR_IP_HAS_CWSELR5 */
441 #if ADC_SAR_IP_HAS_CWSELR6
442         case 6u:
443             CwselrAddr = (volatile uint32 *)&(AdcBasePtr->CWSELR6);
444             break;
445 #endif /* ADC_SAR_IP_HAS_CWSELR6 */
446 #if ADC_SAR_IP_HAS_CWSELR7
447         case 7u:
448             CwselrAddr = (volatile uint32 *)&(AdcBasePtr->CWSELR7);
449             break;
450 #endif /* ADC_SAR_IP_HAS_CWSELR7 */
451 #if ADC_SAR_IP_HAS_CWSELR8
452         case 8u:
453             CwselrAddr = (volatile uint32 *)&(AdcBasePtr->CWSELR8);
454             break;
455 #endif /* ADC_SAR_IP_HAS_CWSELR8 */
456 #if ADC_SAR_IP_HAS_CWSELR9
457         case 9u:
458             CwselrAddr = (volatile uint32 *)&(AdcBasePtr->CWSELR9);
459             break;
460 #endif /* ADC_SAR_IP_HAS_CWSELR9 */
461 #if ADC_SAR_IP_HAS_CWSELR10
462         case 10u:
463             CwselrAddr = (volatile uint32 *)&(AdcBasePtr->CWSELR10);
464             break;
465 #endif /* ADC_SAR_IP_HAS_CWSELR10 */
466 #if ADC_SAR_IP_HAS_CWSELR11
467         case 11u:
468             CwselrAddr = (volatile uint32 *)&(AdcBasePtr->CWSELR11);
469             break;
470 #endif /* ADC_SAR_IP_HAS_CWSELR11 */
471         default:
472             ; /* the RegisterNumber does not exist */
473 #if (ADC_SAR_IP_DEV_ERROR_DETECT == STD_ON)
474             DevAssert(FALSE);
475 #endif /* (ADC_SAR_IP_DEV_ERROR_DETECT == STD_ON) */
476             break;
477     }
478 
479     return CwselrAddr;
480 }
481 #endif /* ADC_SAR_IP_HAS_CWSELR_UNROLLED == 1 */
482 
483 #if (STD_ON == ADC_SAR_IP_WDG_ENABLED)
484 /*FUNCTION*********************************************************************
485  *
486  * Function Name : Adc_Sar_WriteChannelMapping
487  * Description   :
488  *
489  *END*************************************************************************/
Adc_Sar_WriteChannelMapping(const uint32 Instance,const uint32 RegisterNumber,const uint32 FieldPosition,const uint32 Value)490 static inline void Adc_Sar_WriteChannelMapping(const uint32 Instance,
491                                                const uint32 RegisterNumber,
492                                                const uint32 FieldPosition,
493                                                const uint32 Value)
494 {
495     uint32 CwselrVal;
496     uint32 CwselrMask;
497     uint32 CwselrShift;
498 
499 #if (ADC_SAR_IP_HAS_CWSELR_UNROLLED == 1u)
500     volatile uint32 * Cwselr = Adc_Sar_GetChannelWatchdogAddress(Instance, RegisterNumber);
501 
502     /* Each CWSELR register contains 8 watchdog selections according to 8 channels
503        Each watchdog selection possibly needs maximum 4 bits for setting */
504     CwselrShift = FieldPosition * ADC_CWSELR0_WSEL_CH1_SHIFT;
505     CwselrMask = (uint32)ADC_CWSELR0_WSEL_CH0_MASK << CwselrShift;
506     CwselrVal  = (*Cwselr) & (~CwselrMask);
507     CwselrVal |= ADC_CWSELR0_WSEL_CH0(Value) << CwselrShift;
508     *Cwselr      = CwselrVal;
509 #else /* ADC_SAR_IP_HAS_CWSELR_UNROLLED == 0 */
510     ADC_Type * const AdcBasePtr = Adc_Sar_Ip_apxAdcBase[Instance];
511 
512     CwselrShift = FieldPosition * ADC_CWSELR_WSEL_CH1_SHIFT;
513     CwselrMask = (uint32)ADC_CWSELR_WSEL_CH0_MASK << CwselrShift;
514     CwselrVal  = CWSELR(AdcBasePtr, RegisterNumber) & (~CwselrMask);
515     CwselrVal |= ADC_CWSELR_WSEL_CH0(Value) << CwselrShift;
516     CWSELR(AdcBasePtr, RegisterNumber) = CwselrVal;
517 #endif /* (ADC_SAR_IP_HAS_CWSELR_UNROLLED == 1u) */
518 }
519 #endif /* (STD_ON == ADC_SAR_IP_WDG_ENABLED) */
520 
Adc_Sar_ResetWdogCWSELR(const uint32 Instance,const uint8 RegisterNumber)521 static inline void Adc_Sar_ResetWdogCWSELR(const uint32 Instance, const uint8 RegisterNumber)
522 {
523 #if (ADC_SAR_IP_HAS_CWSELR_UNROLLED == 1u)
524     volatile uint32 * Cwselr = Adc_Sar_GetChannelWatchdogAddress(Instance, (uint32)RegisterNumber);
525 
526     *Cwselr = 0U;
527 #else /* ADC_SAR_IP_HAS_CWSELR_UNROLLED == 0 */
528     ADC_Type * const AdcBasePtr = Adc_Sar_Ip_apxAdcBase[Instance];
529 
530     CWSELR(AdcBasePtr, RegisterNumber) = 0u;
531 #endif /* (ADC_SAR_IP_HAS_CWSELR_UNROLLED == 1u) */
532 }
533 
534 #define ADC_STOP_SEC_CODE
535 #include "Adc_MemMap.h"
536 
537 #ifdef __cplusplus
538 }
539 #endif
540 
541 /** @} */
542 
543 #endif /* ADC_SAR_IP_HW_ACCESS_H */
544