内核时钟:操作系统的正常工作,是需要硬件提供一下系统时钟,系统利用改时钟进行轮转调度、sleep
总线时钟:总线时钟是挂在总线上的器件之间进行通信所参照的时序,与总线位数无关,总线上的每一位在通信时都要以此时钟为参考。
系统时钟:是一个存储于系统内存中的逻辑时钟。用于系统的计算,比如超时产生的中断异常,超时计算就是由系统时钟计算的。这种时钟在系统掉电或重新启动时每次会被清除。
S32K144芯片的时钟系统是由系统振荡器(System Oscillator OSC)、外设时钟控制器(Peripheral Clock Controlller PCC)、系统时钟发生器(System Clock Generator SCG)和电源管理器等模块组成的,其中OSC是通过外接晶体振荡器为系统引入外部参考时钟信号,SCG模块为系统中各个模块分配时钟源,PCC模块为片上外设提供时钟控制和配置,PMC模块为系统中各个模块分配时钟源。系统时钟发生器模块用于生产设备使用的大部分时钟,可以控制使用那个时钟源(内部参考时钟、外部晶振)作为设备的系统时钟,还可以将选定的时钟源分成各种时钟域,如系统总线主器件、系统总线从器件和闪存的时钟。
时钟源有四种:
SPLL部分:系统锁相环,主要是用来倍频时钟源,然后提供给内核和总线,还有flash。
1、内核时钟(CORE_CLK) 2、总线时钟(BUS_CLK) 3、FLASH 时钟 4、外设时钟,外设时钟就有比价丰富的时钟选择,包括了:SPLLDIV1_CLK、SPLLDIV2_CLK、FIRCDIV1_CLK、FIRCDIV2_CLK、SIRCDIV1_CLK、SIRCDIV2_CLK、SOSCDIV1_CLK、SOSCDIV2_CLK 5、内部低功耗时钟以及RTC时钟,LPO_CLK、RTC_CLKOUT 在时钟配置过程中,针对HSRUN、NORMAL RUN、SLOW RUN模式,有些内部时钟配置需要注意以及一些限制,不能超过一定的限制最大频率,在S32K-RM手册中也有说明总结如下:
在S32K-RM手册有讲到几种常见的时钟配置,配置了四种时钟模式,分别是Slow RUN、 Normal RUN (with VCO_CLK = 320 MHz, SPLL_CLK = 160 MHz)、Normal RUN (with VCO_CLK = 256 MHz, SPLL_CLK = 128 MHz)和High Speed RUN,具体配置详情见手册。
配置方法
通过配置寄存器来配置相关功能,S32DDS中提供了 clock manager 模块进行可视化配置。 配置时钟的一般步骤: 1.processor expert选择添加clock_manager组件 2.Clock Config -> 增加configurtions 3.在界面配置各个参数 4.配置完成后 在Generated_Code/clockMan1.c 生成配置好的结构体 5.
/*FUNCTION**********************************************************************
*
* Function Name : CLOCK_SYS_Init
* Description : Install pre-defined clock configurations.
* This function installs the pre-defined clock configuration table to the
* clock manager.
*
* Implements CLOCK_SYS_Init_Activity
*END**************************************************************************/
status_t CLOCK_SYS_Init(clock_manager_user_config_t const **clockConfigsPtr,
uint8_t configsNumber,
clock_manager_callback_user_config_t **callbacksPtr,
uint8_t callbacksNumber)
{
DEV_ASSERT(clockConfigsPtr != NULL);
DEV_ASSERT(callbacksPtr != NULL);
g_clockState.configTable = clockConfigsPtr;
g_clockState.clockConfigNum = configsNumber;
g_clockState.callbackConfig = callbacksPtr;
g_clockState.callbackNum = callbacksNumber;
/*
* errorCallbackIndex is the index of the callback which returns error
* during clock mode switch. If all callbacks return success, then the
* errorCallbackIndex is callbacksNumber.
*/
g_clockState.errorCallbackIndex = callbacksNumber;
return STATUS_SUCCESS;
}
具有6种操作(功耗)模式,可以归为两类:
1.运行模式:RUN、HSRUN、VLPR
2.停止(睡眠)模式:VLPS、STOP1、STOP2
RUN:正常运行模式为芯片的默认模式,最大主频80MHz。
HSRUN:High Speed Run,高速运行模式,我们知道S32K144最大主频为112MHz,指的是在HSRUN模式下可达112MHz,而不是在RUN模式下。
VLPR:Very Low Power Run,极低功耗的运行模式,该模式下单片机仍在运行只是以极低的功耗在运行,即4MHz。
STOP:STOP模式即睡眠或停止模式,该模式下内核时钟关闭,同时该模式下分为STOP1和STOP2两种模式具体区别如下表。
VLPS:Very Low Power Stop,极低功耗的停止模式(深度睡眠),该模式下最大限度的降低了芯片功耗同时保留了唤醒功能
3.模式转换
转换的条件: