pdb_driver.c
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013 - 2015, Freescale Semiconductor, Inc.
3  * Copyright 2016-2017 NXP
4  * All rights reserved.
5  *
6  * THIS SOFTWARE IS PROVIDED BY NXP "AS IS" AND ANY EXPRESSED OR
7  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
8  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
9  * IN NO EVENT SHALL NXP OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
10  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
11  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
12  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
13  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
14  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
15  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
16  * THE POSSIBILITY OF SUCH DAMAGE.
17  */
18 
19 #include "pdb_driver.h"
20 #include "pdb_hw_access.h"
21 #include "interrupt_manager.h"
22 
42 /*******************************************************************************
43  * Variables
44  ******************************************************************************/
45 
46 /* Table of base addresses for PDB instances. */
48 
49 /* Table to save PDB IRQ enum numbers. */
51 
52 /*FUNCTION*********************************************************************
53  *
54  * Function Name : PDB_DRV_Init
55  * Description : Initialize the PDB counter and trigger input for PDB module.
56  * It resets PDB registers and enables the clock for PDB. So it should be
57  * called before any operation to PDB module. After initialized, the PDB can
58  * ack as a triggered timer, which lays the foundation for other features in
59  * PDB module.
60  *
61  * Implements : PDB_DRV_Init_Activity
62  *END*************************************************************************/
63 void PDB_DRV_Init(const uint32_t instance,
64  const pdb_timer_config_t * const userConfigPtr)
65 {
66  DEV_ASSERT(instance < PDB_INSTANCE_COUNT);
67  DEV_ASSERT(userConfigPtr != NULL);
68  /* Table of PDB clock names as defined in clock manager. */
69 #if (PDB_INSTANCE_COUNT == 1U)
70  static const clock_names_t s_pdbClkNames[PDB_INSTANCE_COUNT] = {PDB0_CLK};
71 #elif (PDB_INSTANCE_COUNT == 2U)
72  static const clock_names_t s_pdbClkNames[PDB_INSTANCE_COUNT] = {PDB0_CLK, PDB1_CLK};
73 #endif
74  status_t clkStatus;
75 
76  PDB_Type * base = s_pdbBase[instance];
77 
78  clock_names_t instanceClkName = s_pdbClkNames[instance];
79 
80  /* Get the PDB clock as configured in the clock manager */
81  clkStatus = CLOCK_SYS_GetFreq(instanceClkName, NULL);
82 
83  /* Exit if clock is not enabled for current instance. */
84  DEV_ASSERT(clkStatus == STATUS_SUCCESS);
85  (void)clkStatus;
86 
87  /* Reset the registers for PDB module to reset state. */
88  PDB_Init(base);
89  PDB_ConfigTimer(base, userConfigPtr);
90 
91  /* Configure NVIC. */
92  if (userConfigPtr->intEnable || userConfigPtr->seqErrIntEnable)
93  {
94  INT_SYS_EnableIRQ(s_pdbIrqId[instance]); /* Enable PDB interrupt in NVIC level.*/
95  }
96  else
97  {
98  INT_SYS_DisableIRQ(s_pdbIrqId[instance]); /* Disable PDB interrupt in NVIC level.*/
99  }
100 }
101 
102 /*FUNCTION*********************************************************************
103  *
104  * Function Name : PDB_DRV_Deinit
105  * Description : De-initialize the PDB module.
106  * When the PDB module is not used. Calling this function would shutdown the
107  * PDB module and reduce the power consumption.
108  *
109  * Implements : PDB_DRV_Deinit_Activity
110  *END*************************************************************************/
111 void PDB_DRV_Deinit(const uint32_t instance)
112 {
113  DEV_ASSERT(instance < PDB_INSTANCE_COUNT);
114  PDB_Type * base = s_pdbBase[instance];
115 
116  INT_SYS_DisableIRQ(s_pdbIrqId[instance]);
117  PDB_Disable(base);
118 }
119 
120 /*FUNCTION*********************************************************************
121  *
122  * Function Name : PDB_DRV_GetDefaultConfig
123  * Description : Gets the default configuration structure of PDB with default settings.
124  * This function is to initialize the hardware configuration structure to default values.
125  *
126  * Implements : PDB_DRV_GetDefaultConfig_Activity
127  *END*************************************************************************/
129 {
130  DEV_ASSERT(config != NULL);
131  /* Load immediately after load operation. */
133  /* Sequence error interrupt disable */
134  config->seqErrIntEnable = false;
135  /* Prescaler divider select by MULT */
136  config->clkPreDiv = PDB_CLK_PREDIV_BY_1;
137  /* Select multiplication source mode */
139  /* Trigger input source selection */
140  config->triggerInput = PDB_TRIGGER_IN0;
141  /* Run in One-shot mode */
142  config->continuousModeEnable = false;
143  /* Disable DMA */
144  config->dmaEnable = false;
145  /* Disable interrupt */
146  config->intEnable = false;
147 }
148 
149 /*FUNCTION*********************************************************************
150  *
151  * Function Name : PDB_DRV_Enable
152  * Description : Enables the PDB module, counter is on.
153  *
154  * Implements : PDB_DRV_Enable_Activity
155  *END*************************************************************************/
156 void PDB_DRV_Enable(const uint32_t instance)
157 {
158  DEV_ASSERT(instance < PDB_INSTANCE_COUNT);
159 
160  PDB_Type * base = s_pdbBase[instance];
161  PDB_Enable(base);
162 }
163 
164 /*FUNCTION*********************************************************************
165  *
166  * Function Name : PDB_DRV_Disable
167  * Description : This function disables the PDB module, counter is off also.
168  *
169  * Implements : PDB_DRV_Disable_Activity
170  *END*************************************************************************/
171 void PDB_DRV_Disable(const uint32_t instance)
172 {
173  DEV_ASSERT(instance < PDB_INSTANCE_COUNT);
174 
175  PDB_Type * base = s_pdbBase[instance];
176  PDB_Disable(base);
177 }
178 
179 /*FUNCTION*********************************************************************
180  *
181  * Function Name : PDB_DRV_SoftTriggerCmd
182  * Description : Trigger PDB by software trigger.
183  * When the PDB is set to use software trigger as input, Calling this function
184  * would trigger the PDB.
185  *
186  * Implements : PDB_DRV_SoftTriggerCmd_Activity
187  *END*************************************************************************/
188 void PDB_DRV_SoftTriggerCmd(const uint32_t instance)
189 {
190  DEV_ASSERT(instance < PDB_INSTANCE_COUNT);
191  PDB_Type * base = s_pdbBase[instance];
192 
193  PDB_SetSoftTriggerCmd(base);
194 }
195 
196 /*FUNCTION*********************************************************************
197  *
198  * Function Name : PDB_DRV_GetTimerValue
199  * Description : Get the current counter value in PDB module.
200  *
201  * Implements : PDB_DRV_GetTimerValue_Activity
202  *END*************************************************************************/
203 uint32_t PDB_DRV_GetTimerValue(const uint32_t instance)
204 {
205  DEV_ASSERT(instance < PDB_INSTANCE_COUNT);
206  PDB_Type const * base = s_pdbBase[instance];
207 
208  return PDB_GetTimerValue(base);
209 }
210 
211 /*FUNCTION*********************************************************************
212  *
213  * Function Name : PDB_DRV_GetTimerIntFlag
214  * Description : Get the interrupt flag for PDB module. It will be
215  * asserted if the PDB interrupt occurs.
216  *
217  * Implements : PDB_DRV_GetTimerIntFlag_Activity
218  *END*************************************************************************/
219 bool PDB_DRV_GetTimerIntFlag(const uint32_t instance)
220 {
221  DEV_ASSERT(instance < PDB_INSTANCE_COUNT);
222  PDB_Type const * base = s_pdbBase[instance];
223 
224  return PDB_GetTimerIntFlag(base);
225 }
226 
227 /*FUNCTION*********************************************************************
228  *
229  * Function Name : PDB_DRV_ClearTimerIntFlag
230  * Description : Clear the interrupt flag for PDB module.
231  *
232  * Implements : PDB_DRV_ClearTimerIntFlag_Activity
233  *END*************************************************************************/
234 void PDB_DRV_ClearTimerIntFlag(const uint32_t instance)
235 {
236  DEV_ASSERT(instance < PDB_INSTANCE_COUNT);
237  PDB_Type * base = s_pdbBase[instance];
238 
239  PDB_ClearTimerIntFlag(base);
240 }
241 
242 /*FUNCTION*********************************************************************
243  *
244  * Function Name : PDB_DRV_LoadValuesCmd
245  * Description : Execute the command of loading values.
246  *
247  * Implements : PDB_DRV_LoadValuesCmd_Activity
248  *END*************************************************************************/
249 void PDB_DRV_LoadValuesCmd(const uint32_t instance)
250 {
251  DEV_ASSERT(instance < PDB_INSTANCE_COUNT);
252  PDB_Type * base = s_pdbBase[instance];
253 
254  PDB_SetLoadValuesCmd(base);
255 }
256 
257 /*FUNCTION*********************************************************************
258  *
259  * Function Name : PDB_DRV_SetTimerModulusValue
260  * Description : Set the value of timer modulus.
261  *
262  * Implements : PDB_DRV_SetTimerModulusValue_Activity
263  *END*************************************************************************/
264 void PDB_DRV_SetTimerModulusValue(const uint32_t instance,
265  const uint16_t value)
266 {
267  DEV_ASSERT(instance < PDB_INSTANCE_COUNT);
268  PDB_Type * base = s_pdbBase[instance];
269 
270  PDB_SetTimerModulusValue(base, value);
271 }
272 
273 /*FUNCTION*********************************************************************
274  *
275  * Function Name : PDB_DRV_SetValueForTimerInterrupt
276  * Description : Set the value for the timer interrupt.
277  *
278  * Implements : PDB_DRV_SetValueForTimerInterrupt_Activity
279  *END*************************************************************************/
280 void PDB_DRV_SetValueForTimerInterrupt(const uint32_t instance,
281  const uint16_t value)
282 {
283  DEV_ASSERT(instance < PDB_INSTANCE_COUNT);
284  PDB_Type * base = s_pdbBase[instance];
285 
286  PDB_SetValueForTimerInterrupt(base, value);
287 }
288 
289 /*FUNCTION*********************************************************************
290  *
291  * Function Name : PDB_DRV_ConfigAdcPreTrigger
292  * Description : Configure the ADC pre_trigger in the PDB module.
293  *
294  * Implements : PDB_DRV_ConfigAdcPreTrigger_Activity
295  *END*************************************************************************/
296 void PDB_DRV_ConfigAdcPreTrigger(const uint32_t instance,
297  const uint32_t chn,
298  const pdb_adc_pretrigger_config_t * configPtr)
299 {
300  DEV_ASSERT(instance < PDB_INSTANCE_COUNT);
301  DEV_ASSERT(chn < PDB_CH_COUNT);
302  DEV_ASSERT(configPtr != NULL);
303  PDB_Type * base = s_pdbBase[instance];
304 
305  PDB_SetAdcPreTriggerEnable(base, chn, ((uint32_t)1U << (configPtr->adcPreTriggerIdx)), configPtr->preTriggerEnable);
306  PDB_SetAdcPreTriggerOutputEnable(base, chn, ((uint32_t)1U << (configPtr->adcPreTriggerIdx)), configPtr->preTriggerOutputEnable);
307  PDB_SetAdcPreTriggerBackToBackEnable(base, chn, ((uint32_t)1U << (configPtr->adcPreTriggerIdx)), configPtr->preTriggerBackToBackEnable);
308 }
309 
310 /*FUNCTION*********************************************************************
311  *
312  * Function Name : PDB_DRV_GetAdcPreTriggerFlags
313  * Description : Get the ADC pre_trigger flag in the PDB module.
314  *
315  * Implements : PDB_DRV_GetAdcPreTriggerFlags_Activity
316  *END*************************************************************************/
317 uint32_t PDB_DRV_GetAdcPreTriggerFlags(const uint32_t instance,
318  const uint32_t chn,
319  const uint32_t preChnMask)
320 {
321  DEV_ASSERT(instance < PDB_INSTANCE_COUNT);
322  DEV_ASSERT(chn < PDB_CH_COUNT);
323  PDB_Type const * base = s_pdbBase[instance];
324 
325  return PDB_GetAdcPreTriggerFlags(base, chn, preChnMask);
326 }
327 
328 /*FUNCTION*********************************************************************
329  *
330  * Function Name : PDB_DRV_ClearAdcPreTriggerFlags
331  * Description : Clear the ADC pre_trigger flag in the PDB module.
332  *
333  * Implements : PDB_DRV_ClearAdcPreTriggerFlags_Activity
334  *END*************************************************************************/
335 void PDB_DRV_ClearAdcPreTriggerFlags(const uint32_t instance,
336  const uint32_t chn,
337  const uint32_t preChnMask)
338 {
339  DEV_ASSERT(instance < PDB_INSTANCE_COUNT);
340  DEV_ASSERT(chn < PDB_CH_COUNT);
341  PDB_Type * base = s_pdbBase[instance];
342 
343  PDB_ClearAdcPreTriggerFlags(base, chn, preChnMask);
344 }
345 
346 /*FUNCTION*********************************************************************
347  *
348  * Function Name : PDB_DRV_GetAdcPreTriggerSeqErrFlags
349  * Description : Get the ADC pre_trigger flag in the PDB module.
350  *
351  * Implements : PDB_DRV_GetAdcPreTriggerSeqErrFlags_Activity
352  *END*************************************************************************/
353 uint32_t PDB_DRV_GetAdcPreTriggerSeqErrFlags(const uint32_t instance,
354  const uint32_t chn,
355  const uint32_t preChnMask)
356 {
357  DEV_ASSERT(instance < PDB_INSTANCE_COUNT);
358  DEV_ASSERT(chn < PDB_CH_COUNT);
359  PDB_Type const * base = s_pdbBase[instance];
360 
361  return PDB_GetAdcPreTriggerSeqErrFlags(base, chn, preChnMask);
362 }
363 
364 /*FUNCTION*********************************************************************
365  *
366  * Function Name : PDB_DRV_ClearAdcPreTriggerSeqErrFlags
367  * Description : Clear the ADC pre_trigger flag in the PDB module.
368  *
369  * Implements : PDB_DRV_ClearAdcPreTriggerSeqErrFlags_Activity
370  *END*************************************************************************/
371 void PDB_DRV_ClearAdcPreTriggerSeqErrFlags(const uint32_t instance,
372  const uint32_t chn,
373  const uint32_t preChnMask)
374 {
375  DEV_ASSERT(instance < PDB_INSTANCE_COUNT);
376  DEV_ASSERT(chn < PDB_CH_COUNT);
377  PDB_Type * base = s_pdbBase[instance];
378 
379  PDB_ClearAdcPreTriggerSeqErrFlags(base, chn, preChnMask);
380 }
381 
382 /*FUNCTION*********************************************************************
383  *
384  * Function Name : PDB_DRV_SetAdcPreTriggerDelayValue
385  * Description : Set the ADC pre_trigger delay value in the PDB module.
386  *
387  * Implements : PDB_DRV_SetAdcPreTriggerDelayValue_Activity
388  *END*************************************************************************/
389 void PDB_DRV_SetAdcPreTriggerDelayValue(const uint32_t instance,
390  const uint32_t chn,
391  const uint32_t preChn,
392  const uint32_t value)
393 {
394  DEV_ASSERT(instance < PDB_INSTANCE_COUNT);
395  DEV_ASSERT(chn < PDB_CH_COUNT);
396  DEV_ASSERT(value <= PDB_DLY_DLY_MASK);
397  PDB_Type * base = s_pdbBase[instance];
398 
399  PDB_SetAdcPreTriggerDelayValue(base, chn, preChn, value);
400 }
401 
402 /*FUNCTION*********************************************************************
403  *
404  * Function Name : PDB_DRV_SetCmpPulseOutEnable
405  * Description : Switch on/off the CMP pulse out in the PDB module.
406  *
407  * Implements : PDB_DRV_SetCmpPulseOutEnable_Activity
408  *END*************************************************************************/
409 void PDB_DRV_SetCmpPulseOutEnable(const uint32_t instance,
410  const uint32_t pulseChnMask,
411  const bool enable)
412 {
413  DEV_ASSERT(instance < PDB_INSTANCE_COUNT);
414  PDB_Type * base = s_pdbBase[instance];
415 
416  PDB_SetCmpPulseOutEnable(base, pulseChnMask, enable);
417 }
418 
419 /*FUNCTION*********************************************************************
420  *
421  * Function Name : PDB_DRV_SetCmpPulseOutDelayForHigh
422  * Description : Set the CMP pulse out delay value for high in the PDB module.
423  *
424  * Implements : PDB_DRV_SetCmpPulseOutDelayForHigh_Activity
425  *END*************************************************************************/
426 void PDB_DRV_SetCmpPulseOutDelayForHigh(const uint32_t instance,
427  const uint32_t pulseChn,
428  const uint32_t value)
429 {
430  DEV_ASSERT(instance < PDB_INSTANCE_COUNT);
431  DEV_ASSERT(pulseChn < PDB_POnDLY_COUNT);
432  PDB_Type * base = s_pdbBase[instance];
433 
434  PDB_SetCmpPulseOutDelayForHigh(base, pulseChn, value);
435 }
436 
437 /*FUNCTION*********************************************************************
438  *
439  * Function Name : PDB_DRV_SetCmpPulseOutDelayForLow
440  * Description : Set the CMP pulse out delay value for low in the PDB module.
441  *
442  * Implements : PDB_DRV_SetCmpPulseOutDelayForLow_Activity
443  *END*************************************************************************/
444 void PDB_DRV_SetCmpPulseOutDelayForLow(const uint32_t instance,
445  const uint32_t pulseChn,
446  const uint32_t value)
447 {
448  DEV_ASSERT(instance < PDB_INSTANCE_COUNT);
449  DEV_ASSERT(pulseChn < PDB_POnDLY_COUNT);
450  PDB_Type * base = s_pdbBase[instance];
451 
452  PDB_SetCmpPulseOutDelayForLow(base, pulseChn, value);
453 }
454 
455 /*******************************************************************************
456  * EOF
457  ******************************************************************************/
void PDB_DRV_ClearTimerIntFlag(const uint32_t instance)
Clears the interrupt flag.
Definition: pdb_driver.c:234
void PDB_DRV_SetCmpPulseOutEnable(const uint32_t instance, const uint32_t pulseChnMask, const bool enable)
Switches on/off the CMP pulse out in the PDB module.
Definition: pdb_driver.c:409
void PDB_DRV_SetAdcPreTriggerDelayValue(const uint32_t instance, const uint32_t chn, const uint32_t preChn, const uint32_t value)
Sets the ADC pre_trigger delay value in the PDB module.
Definition: pdb_driver.c:389
void PDB_DRV_ConfigAdcPreTrigger(const uint32_t instance, const uint32_t chn, const pdb_adc_pretrigger_config_t *configPtr)
Configures the ADC pre_trigger in the PDB module.
Definition: pdb_driver.c:296
void PDB_DRV_SetTimerModulusValue(const uint32_t instance, const uint16_t value)
Sets the value of timer modulus.
Definition: pdb_driver.c:264
#define PDB_POnDLY_COUNT
Definition: S32K118.h:7959
uint32_t PDB_DRV_GetAdcPreTriggerSeqErrFlags(const uint32_t instance, const uint32_t chn, const uint32_t preChnMask)
Gets the ADC pre_trigger flag in the PDB module.
Definition: pdb_driver.c:353
uint32_t PDB_DRV_GetAdcPreTriggerFlags(const uint32_t instance, const uint32_t chn, const uint32_t preChnMask)
Gets the ADC pre_trigger flag in the PDB module.
Definition: pdb_driver.c:317
#define PDB_DLY_DLY_MASK
Definition: S32K118.h:8099
Defines the type of structure for basic timer in PDB.
Definition: pdb_driver.h:106
bool PDB_DRV_GetTimerIntFlag(const uint32_t instance)
Gets the PDB interrupt flag.
Definition: pdb_driver.c:219
void INT_SYS_DisableIRQ(IRQn_Type irqNumber)
Disables an interrupt for a given IRQ number.
#define PDB_IRQS
Definition: S32K118.h:8001
#define DEV_ASSERT(x)
Definition: devassert.h:77
uint32_t PDB_DRV_GetTimerValue(const uint32_t instance)
Gets the current counter value in the PDB module.
Definition: pdb_driver.c:203
void PDB_DRV_SetCmpPulseOutDelayForLow(const uint32_t instance, const uint32_t pulseChn, const uint32_t value)
Sets the CMP pulse out delay value for low in the PDB module.
Definition: pdb_driver.c:444
#define PDB_BASE_PTRS
Definition: S32K118.h:7995
void PDB_DRV_ClearAdcPreTriggerSeqErrFlags(const uint32_t instance, const uint32_t chn, const uint32_t preChnMask)
Clears the ADC pre_trigger flag in the PDB module.
Definition: pdb_driver.c:371
status_t CLOCK_SYS_GetFreq(clock_names_t clockName, uint32_t *frequency)
Gets the clock frequency for a specific clock name.
void PDB_DRV_ClearAdcPreTriggerFlags(const uint32_t instance, const uint32_t chn, const uint32_t preChnMask)
Clears the ADC pre_trigger flag in the PDB module.
Definition: pdb_driver.c:335
pdb_clk_prescaler_mult_factor_t clkPreMultFactor
Definition: pdb_driver.h:111
status_t
Status return codes. Common error codes will be a unified enumeration (C enum) that will contain all ...
Definition: status.h:44
IRQn_Type
Defines the Interrupt Numbers definitions.
Definition: S32K118.h:188
pdb_load_value_mode_t loadValueMode
Definition: pdb_driver.h:108
void PDB_DRV_SoftTriggerCmd(const uint32_t instance)
Triggers the PDB with a software trigger.
Definition: pdb_driver.c:188
void PDB_DRV_SetValueForTimerInterrupt(const uint32_t instance, const uint16_t value)
Sets the value for the timer interrupt.
Definition: pdb_driver.c:280
void PDB_DRV_LoadValuesCmd(const uint32_t instance)
Executes the command of loading values.
Definition: pdb_driver.c:249
void PDB_DRV_Deinit(const uint32_t instance)
De-initializes the PDB module.
Definition: pdb_driver.c:111
static const IRQn_Type s_pdbIrqId[PDB_INSTANCE_COUNT]
Definition: pdb_driver.c:50
pdb_clk_prescaler_div_t clkPreDiv
Definition: pdb_driver.h:110
void PDB_DRV_SetCmpPulseOutDelayForHigh(const uint32_t instance, const uint32_t pulseChn, const uint32_t value)
Sets the CMP pulse out delay value for high in the PDB module.
Definition: pdb_driver.c:426
pdb_trigger_src_t triggerInput
Definition: pdb_driver.h:112
void PDB_DRV_Disable(const uint32_t instance)
Disables the PDB module.
Definition: pdb_driver.c:171
static PDB_Type *const s_pdbBase[PDB_INSTANCE_COUNT]
Definition: pdb_driver.c:47
void PDB_DRV_Enable(const uint32_t instance)
Enables the PDB module.
Definition: pdb_driver.c:156
void INT_SYS_EnableIRQ(IRQn_Type irqNumber)
Enables an interrupt for a given IRQ number.
void PDB_DRV_GetDefaultConfig(pdb_timer_config_t *const config)
Gets the default configuration structure of PDB with default settings.
Definition: pdb_driver.c:128
void PDB_DRV_Init(const uint32_t instance, const pdb_timer_config_t *const userConfigPtr)
Initializes the PDB counter and triggers input.
Definition: pdb_driver.c:63
Defines the type of structure for configuring ADC's pre_trigger.
Definition: pdb_driver.h:123
clock_names_t
Clock names.
#define PDB_INSTANCE_COUNT
Definition: S32K118.h:7984
#define PDB_CH_COUNT
Definition: S32K118.h:7957