S32 SDK
scg_hal.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2014, Freescale Semiconductor, Inc.
3  * Copyright 2016 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 #ifndef SCG_HAL_H
20 #define SCG_HAL_H
21 
22 #include "device_registers.h"
23 #include "status.h"
24 #include <stdbool.h>
25 #include <stddef.h>
26 
37 #if FEATURE_SOC_SCG_COUNT
38 
46 /* @brief EXTAL0 clock frequency. */
47 extern uint32_t g_xtal0ClkFreq;
48 
49 /* @brief RTC_CLKIN clock frequency. */
50 extern uint32_t g_RtcClkInFreq;
51 
52 
62 typedef enum
63 {
69 
74 typedef enum
75 {
82 
87 typedef enum
88 {
95 
100 typedef enum
101 {
119 
124 typedef struct
125 {
131 
132 /* @} */
142 typedef enum
143 {
150 /* @} */
151 
156 typedef enum
157 {
162 
167 typedef enum
168 {
178 
183 typedef enum
184 {
190 
195 typedef enum
196 {
201 
206 typedef enum
207 {
208  SCG_SOSC_GAIN_LOW, /* Configure crystal oscillator for low-power operation */
209  SCG_SOSC_GAIN_HIGH /* Configure crystal oscillator for high-gain operation */
211 
216 typedef enum
217 {
218  SCG_SOSC_REF_EXT, /* External reference clock requested */
219  SCG_SOSC_REF_OSC /* Internal oscillator of OSC requested. */
221 
226 typedef struct
227 {
228  uint32_t freq;
243  bool locked;
245  bool initialize;
247 
252 typedef enum
253 {
257 
262 typedef struct
263 {
269  bool initialize;
273  bool locked;
275 
280 typedef enum
281 {
287 
292 typedef struct
293 {
301  bool regulator;
302  bool locked;
304  bool initialize;
306 
311 typedef enum
312 {
318 
319 
324 typedef struct
325 {
328  uint8_t prediv;
329  uint8_t mult;
330  uint8_t src;
337  bool locked;
338  bool initialize;
340 
345 typedef struct
346 {
347  uint32_t rtcClkInFreq;
348  bool initialize;
350 
355 typedef struct
356 {
361  bool initialize;
363 
368 typedef struct
369 {
371  bool initialize;
373 
378 typedef struct
379 {
387 } scg_config_t;
388 
389 #if defined(__cplusplus)
390 extern "C" {
391 #endif
392 
393 /*******************************************************************************
394  * API
395  ******************************************************************************/
396 
416  scg_system_clock_config_t const *config);
417 
427 void SCG_HAL_GetSystemClockConfig(const SCG_Type * base,
429  scg_system_clock_config_t *config);
430 
431 /* @} */
432 
448 {
449  scg_clockout_src_t retValue;
450  uint32_t regValue = base->CLKOUTCNFG;
452 
453  switch(regValue)
454  {
455  case 6U:
456  retValue = SCG_CLOCKOUT_SRC_SPLL;
457  break;
458  case 3U:
459  retValue = SCG_CLOCKOUT_SRC_FIRC;
460  break;
461  case 2U:
462  retValue = SCG_CLOCKOUT_SRC_SIRC;
463  break;
464  case 1U:
465  retValue = SCG_CLOCKOUT_SRC_SOSC;
466  break;
467  case 0U:
468  /* pass-through */
469  default:
470  retValue = SCG_CLOCKOUT_SRC_SCG_SLOW;
471  break;
472  }
473  return retValue;
474 }
475 
485 static inline void SCG_HAL_SetClockoutSourceSel(SCG_Type * base, scg_clockout_src_t source)
486 {
487  uint32_t src, regValue;
488 
489  switch(source)
490  {
492  src = 6UL;
493  break;
495  src = 3UL;
496  break;
498  src = 2UL;
499  break;
501  src = 1UL;
502  break;
504  /* Pass-thourgh */
505  default:
506  src = 0UL;
507  break;
508  }
509 
510  regValue = base->CLKOUTCNFG;
511  regValue &= ~(SCG_CLKOUTCNFG_CLKOUTSEL_MASK);
512  regValue |= SCG_CLKOUTCNFG_CLKOUTSEL(src);
513  base->CLKOUTCNFG = regValue;
514 }
515 
516 /* @} */
517 
531 
548  scg_sosc_config_t const *config);
549 
563 
570 uint32_t SCG_HAL_GetSysOscFreq(const SCG_Type * base);
571 
579 uint32_t SCG_HAL_GetSysOscAsyncFreq(const SCG_Type * base,
581 
582 /* @} */
583 
597 
613  const scg_sirc_config_t *config);
614 
628 
635 uint32_t SCG_HAL_GetSircFreq(const SCG_Type * base);
636 
644 uint32_t SCG_HAL_GetSircAsyncFreq(const SCG_Type * base,
646 
647 /* @} */
648 
665 
683  const scg_firc_config_t *config);
684 
698 
705 uint32_t SCG_HAL_GetFircFreq(const SCG_Type * base);
706 
714 uint32_t SCG_HAL_GetFircAsyncFreq(const SCG_Type * base,
716 
728 {
729  scg_system_clock_src_t retValue;
730  uint32_t regValue = base->CSR;
731  regValue = (regValue & SCG_CSR_SCS_MASK) >> SCG_CSR_SCS_SHIFT;
732 
733  switch(regValue)
734  {
735  case 1U:
736  retValue = SCG_SYSTEM_CLOCK_SRC_SYS_OSC;
737  break;
738  case 2U:
739  retValue = SCG_SYSTEM_CLOCK_SRC_SIRC;
740  break;
741  case 3U:
742  retValue = SCG_SYSTEM_CLOCK_SRC_FIRC;
743  break;
744  case 6U:
745  retValue = SCG_SYSTEM_CLOCK_SRC_SYS_PLL;
746  break;
747  default:
748  retValue = SCG_SYSTEM_CLOCK_SRC_NONE;
749  break;
750  }
751  return retValue;
752 }
753 
764 uint32_t SCG_HAL_GetSystemClockFreq(const SCG_Type * base,
766 
767 /* @} */
768 
769 
783 
802  scg_spll_config_t const *config);
803 
817 
824 uint32_t SCG_HAL_GetSysPllFreq(const SCG_Type * base);
825 
833 uint32_t SCG_HAL_GetSysPllAsyncFreq(const SCG_Type * base,
835 
836 /* @} */
837 
849 void SCG_HAL_SetRtcClkInFreq(SCG_Type * base, uint32_t frequency);
850 
857 uint32_t SCG_HAL_GetRtcClkInFreq(SCG_Type * base);
858 
859 /* @} */
860 
861 #if defined(__cplusplus)
862 }
863 #endif
864 
869 #endif /* FEATURE_SOC_SCG_COUNT */
870 #endif /* SCG_HAL_H */
871 
872 /******************************************************************************
873  * EOF
874  *****************************************************************************/
875 
status_t SCG_HAL_InitSirc(SCG_Type *base, const scg_sirc_config_t *config)
Initialize SCG slow IRC clock.
#define SCG_CLKOUTCNFG_CLKOUTSEL_MASK
Definition: S32K144.h:10502
void SCG_HAL_GetSystemClockConfig(const SCG_Type *base, scg_system_clock_mode_t mode, scg_system_clock_config_t *config)
Get the system clock configuration for specified mode.
scg_async_clock_div_t div1
Definition: scg_hal.h:332
scg_async_clock_div_t div2
Definition: scg_hal.h:297
scg_async_clock_div_t div1
Definition: scg_hal.h:266
status_t SCG_HAL_InitSysOsc(SCG_Type *base, scg_sosc_config_t const *config)
Initialize SCG system OSC.
SCG ClockOut Configuration structure. Implements scg_clockout_config_t_Class.
Definition: scg_hal.h:368
#define SCG_SPLLCSR_SPLLCM_MASK
Definition: S32K144.h:10640
scg_async_clock_div_t div2
Definition: scg_hal.h:267
scg_system_clock_mode_t
SCG system clock modes. Implements scg_system_clock_mode_t_Class.
Definition: scg_hal.h:87
scg_rtc_config_t rtcConfig
Definition: scg_hal.h:384
scg_system_clock_type_t
SCG system clock type. Implements scg_system_clock_type_t_Class.
Definition: scg_hal.h:62
status_t SCG_HAL_DeinitFirc(SCG_Type *base)
De-initialize SCG fast IRC.
uint32_t SCG_HAL_GetRtcClkInFreq(SCG_Type *base)
Get SCG RTC CLKIN clock frequency.
void SCG_HAL_SetRtcClkInFreq(SCG_Type *base, uint32_t frequency)
Set SCG RTC CLKIN clock frequency.
status_t SCG_HAL_InitFirc(SCG_Type *base, const scg_firc_config_t *config)
Initialize SCG fast IRC clock.
uint32_t SCG_HAL_GetFircFreq(const SCG_Type *base)
Get SCG FIRC clock frequency.
scg_spll_monitor_mode_t
SCG system PLL monitor mode. Implements scg_spll_monitor_mode_t_Class.
Definition: scg_hal.h:311
SCG configure structure. Implements scg_config_t_Class.
Definition: scg_hal.h:378
scg_firc_range_t range
Definition: scg_hal.h:294
scg_system_clock_config_t vccrConfig
Definition: scg_hal.h:358
scg_sirc_range_t range
Definition: scg_hal.h:264
uint32_t rtcClkInFreq
Definition: scg_hal.h:347
scg_spll_monitor_mode_t monitorMode
Definition: scg_hal.h:326
scg_async_clock_div_t div2
Definition: scg_hal.h:238
uint8_t prediv
Definition: scg_hal.h:328
#define SCG_CSR_SCS_MASK
Definition: S32K144.h:10446
__I uint32_t CSR
Definition: S32K144.h:10367
void SCG_HAL_GetSircDefaultConfig(scg_sirc_config_t *config)
Get the default slow IRC clock configuration.
SCG Clock Mode Configuration structure. Implements scg_clock_mode_config_t_Class. ...
Definition: scg_hal.h:355
scg_firc_config_t fircConfig
Definition: scg_hal.h:381
static scg_system_clock_src_t SCG_HAL_GetSystemClockSrc(const SCG_Type *base)
Get SCG system clock source.
Definition: scg_hal.h:727
status_t SCG_HAL_DeinitSirc(SCG_Type *base)
De-initialize SCG slow IRC.
scg_sosc_config_t soscConfig
Definition: scg_hal.h:382
scg_sosc_ext_ref_t extRef
Definition: scg_hal.h:232
uint32_t SCG_HAL_GetSysOscAsyncFreq(const SCG_Type *base, scg_async_clock_type_t type)
Get SCG asynchronous clock frequency from system OSC.
void SCG_HAL_GetSysPllDefaultConfig(scg_spll_config_t *config)
Get the default system PLL configuration.
uint32_t SCG_HAL_GetSircFreq(const SCG_Type *base)
Get SCG SIRC clock frequency.
scg_sosc_monitor_mode_t
SCG system OSC monitor mode. Implements scg_sosc_monitor_mode_t_Class.
Definition: scg_hal.h:183
uint32_t SCG_HAL_GetSysOscFreq(const SCG_Type *base)
Get SCG system OSC clock frequency (SYSOSC).
SCG system PLL configuration. Implements scg_spll_config_t_Class.
Definition: scg_hal.h:324
SCG slow IRC clock configuration. Implements scg_sirc_config_t_Class.
Definition: scg_hal.h:262
SCG fast IRC clock configuration. Implements scg_firc_config_t_Class.
Definition: scg_hal.h:292
bool enableInLowPower
Definition: scg_hal.h:300
scg_clockout_config_t clockOutConfig
Definition: scg_hal.h:385
status_t SCG_HAL_DeinitSysPll(SCG_Type *base)
De-initialize SCG system PLL.
status_t SCG_HAL_SetSystemClockConfig(SCG_Type *base, scg_system_clock_mode_t mode, scg_system_clock_config_t const *config)
Set the system clock configuration in specified mode.
bool enableInLowPower
Definition: scg_hal.h:271
#define SCG_CSR_SCS_SHIFT
Definition: S32K144.h:10447
scg_spll_config_t spllConfig
Definition: scg_hal.h:383
scg_clockout_src_t source
Definition: scg_hal.h:370
scg_sosc_range_t
SCG OSC frequency range select Implements scg_sosc_range_t_Class.
Definition: scg_hal.h:195
scg_clock_mode_config_t clockModeConfig
Definition: scg_hal.h:386
status_t
Status return codes. Common error codes will be a unified enumeration (C enum) that will contain all ...
Definition: status.h:31
scg_sirc_config_t sircConfig
Definition: scg_hal.h:380
SCG RTC configuration. Implements scg_rtc_config_t_Class.
Definition: scg_hal.h:345
bool enableInLowPower
Definition: scg_hal.h:241
scg_sosc_gain_t gain
Definition: scg_hal.h:233
scg_async_clock_div_t div1
Definition: scg_hal.h:296
void SCG_HAL_GetFircDefaultConfig(scg_firc_config_t *config)
Get the default fast IRC clock configuration.
SCG system clock configuration. Implements scg_system_clock_config_t_Class.
Definition: scg_hal.h:124
uint32_t SCG_HAL_GetSysPllAsyncFreq(const SCG_Type *base, scg_async_clock_type_t type)
Get SCG asynchronous clock frequency from system PLL.
scg_sirc_range_t
SCG slow IRC clock frequency range. Implements scg_sirc_range_t_Class.
Definition: scg_hal.h:252
scg_system_clock_div_t divCore
Definition: scg_hal.h:128
__IO uint32_t CLKOUTCNFG
Definition: S32K144.h:10371
scg_clockout_src_t
SCG ClockOut type. Implements scg_clockout_src_t_Class.
Definition: scg_hal.h:142
scg_async_clock_div_t div2
Definition: scg_hal.h:333
scg_system_clock_div_t divSlow
Definition: scg_hal.h:126
status_t SCG_HAL_InitSysPll(SCG_Type *base, scg_spll_config_t const *config)
Initialize SCG system PLL.
#define SCG_SOSCCSR_SOSCCMRE_MASK
Definition: S32K144.h:10515
scg_system_clock_src_t
SCG system clock source. Implements scg_system_clock_src_t_Class.
Definition: scg_hal.h:74
status_t SCG_HAL_DeinitSysOsc(SCG_Type *base)
De-initialize SCG system OSC.
scg_async_clock_type_t
SCG asynchronous clock type. Implements scg_async_clock_type_t_Class.
Definition: scg_hal.h:156
scg_sosc_gain_t
SCG OSC high gain oscillator select. Implements scg_sosc_gain_t_Class.
Definition: scg_hal.h:206
#define SCG_CLKOUTCNFG_CLKOUTSEL(x)
Definition: S32K144.h:10505
scg_async_clock_div_t div1
Definition: scg_hal.h:237
uint8_t mult
Definition: scg_hal.h:329
scg_sosc_range_t range
Definition: scg_hal.h:235
uint32_t SCG_HAL_GetSysPllFreq(const SCG_Type *base)
Get SCG system PLL clock frequency.
uint32_t SCG_HAL_GetSircAsyncFreq(const SCG_Type *base, scg_async_clock_type_t type)
Get SCG asynchronous clock frequency from SIRC.
scg_sosc_monitor_mode_t monitorMode
Definition: scg_hal.h:230
SCG system OSC configuration. Implements scg_sosc_config_t_Class.
Definition: scg_hal.h:226
uint32_t g_xtal0ClkFreq
Definition: clock_S32K144.c:73
#define SCG_SPLLCSR_SPLLCMRE_MASK
Definition: S32K144.h:10644
#define SCG_SOSCCSR_SOSCCM_MASK
Definition: S32K144.h:10511
scg_system_clock_div_t
SCG system clock divider value. Implements scg_system_clock_div_t_Class.
Definition: scg_hal.h:100
uint32_t freq
Definition: scg_hal.h:228
void SCG_HAL_GetSysOscDefaultConfig(scg_sosc_config_t *config)
Get the default system OSC configuration.
scg_system_clock_config_t rccrConfig
Definition: scg_hal.h:357
scg_firc_range_t
SCG fast IRC clock frequency range. Implements scg_firc_range_t_Class.
Definition: scg_hal.h:280
scg_async_clock_div_t
SCG asynchronous clock divider value. Implements scg_async_clock_div_t_Class.
Definition: scg_hal.h:167
scg_system_clock_src_t src
Definition: scg_hal.h:129
scg_sosc_ext_ref_t
SCG OSC external reference clock select. Implements scg_sosc_ext_ref_t_Class.
Definition: scg_hal.h:216
scg_system_clock_src_t alternateClock
Definition: scg_hal.h:360
static scg_clockout_src_t SCG_HAL_GetClockoutSourceSel(const SCG_Type *base)
Get SCG ClockOut source select.
Definition: scg_hal.h:447
uint32_t SCG_HAL_GetFircAsyncFreq(const SCG_Type *base, scg_async_clock_type_t type)
Get SCG asynchronous clock frequency from FIRC.
#define SCG_CLKOUTCNFG_CLKOUTSEL_SHIFT
Definition: S32K144.h:10503
uint32_t g_RtcClkInFreq
Definition: clock_S32K144.c:70
static void SCG_HAL_SetClockoutSourceSel(SCG_Type *base, scg_clockout_src_t source)
Set SCG ClockOut source select.
Definition: scg_hal.h:485
uint32_t SCG_HAL_GetSystemClockFreq(const SCG_Type *base, scg_system_clock_type_t type)
Get SCG system clock frequency.
scg_system_clock_config_t hccrConfig
Definition: scg_hal.h:359
scg_system_clock_div_t divBus
Definition: scg_hal.h:127