一般来说,时钟精度、稳定性取决于所采用的时钟源,就MCU S32K来说如内部振荡器SIRC,FIRC,128KLPO,外部晶振等,跟所使用的外设(FTM, LPIT,LPT,RTC等)和哪一路输出时钟(SYS_CLK,BUS_CLK,SPLLDVI1_CLK等)没有直接关系。

由于S32K144提供的时钟源和配置方法比较多,那么如何有效配置得到自己想要的时钟呢?
下面以S32K144为例,从时钟定义图开始,逐步介绍如何寻找S32K144时钟(CORE_CLK, BUS_CLK,)合适的配置方法,并根据测试方法验证配置是否有效。

0. 目标
输出目标
clock clock= 80MHz(以下MHz简称M)
bus clock=40MHz, Normal Mode(默认)
注意:只有支持105℃的部分S32K144型号,core clock才能支持到最高112M(HSRUN),其他型号不论HSRUN模式,还是RUN模式,最高支持80M。
测试工具
PCB: S32K144EVB-Q100
IDE: S32DS for ARM 2018.R1 

1.时钟定义

配置时钟先从学会看时钟分配图开始,会看图了,配置就成功了一半。

因为能实现目标的路径可能有多种,这里先选中一条配置路径,再判断是否可行(蓝色箭头+框)。
时钟源选择外部晶振8M,即SOSC=8M => SPLL时钟源 SPLL_CLK_SOURCE = SOSC = 8M,

  2.确认内部时钟要求

CORE_CLK/ SYS_CLK 最高支持112M(HSRUN) , 80M(RUN),目标@80M符合要求。

不过,BUS_CLK最高支持56M(HSRUN), 48M(RUN),目标@40M符合要求。

3.确认外部晶振 8M

查看S32KEVB-Q100评估板原理图,知外部晶振8M => System PLL输入 SPLL_SOURCE=8M

4.确认System PLL分频及倍频
这里选择PREDIV=0, MULT=0b11000 (10进制: 24) 
VCO_CLK=8M/(0+1) X (24+16) = 320MHz
SPLL_CLK=(VCO_CLK)/2 = 160MHz

考虑:这里MULTI还可以>24 => 倍频因子>40,那么能不能配置VCO_CLK >320M,而最终CORE_CLK=80M呢?

答案是不行,因为VCO_CLK最高支持到320M,可以参考S32K-RM。

 5.具体寄存器配置

可参考RM配置方法

6.设置检测方法

1)初步确定为通过IO口直接输出与总线时钟相关的时钟或者分频后的时钟
2)寻找SCH上是否有可直接利用的MCU引脚
MCU完整型号:FS32K144HRT0VLLT, 封装:LQFP100
查RM附件IO描述表,发现能作为CLKOUT pin的有PTD14, PTE10, PTB5。
如有可用CLKOUT pin,配置相应的pin为CLKOUT功能
1)配置PORT的MUX为CLKOUT对应ALT功能,并使能端口时钟;
2)配置SIM_CHIPCTL选择输出的时钟,以及输出的分频系数;
输出时钟结构
CLKOUTSEL - 选择输出时钟,如选择设置CLKOUTSEL=0b1001,则CLKOUT pin输出Bus_Clock
7.时钟配置代码
main.c

int main(void)
{volatile uint32_t cnt = 0;Clock_Init();Port_Init();Clock_Out_Bus();while(1){cnt ++;}return 0;
}

View Code

clock.c - 时钟配置

/*** 配置MCU时钟, 使SYS_CLK=80MHz, BUS_CLK=40MHz, FLASH_CLK=20MHz, 用外部晶振f_osc=8MHz* SPLL_CLK=160MHz, VCO_CLK=320MHz* @note* 计算公式:* BUS_CLK=SYS_CLK / DIVBUS* SYS_CLK=SPLL_CLK / DIVCORE* SPLL_CLK=(VCO_CLK) / 2* VCO_CLK=SPLL_SOURCE / (PREDIV + 1) x (MULT + 16)* 选择外部晶振作为SPLL_SOURCE, SPLL_SOURCE=8MHz*/
void Clock_Init(void)
{// 以下初始化顺序不可改变
Clock_SOSC_Init_8M(); // SOSC&SPLL_SOURCE初始化为输出8M
Clock_SPLL_Init_160M(); // SPLL&SCG初始化为输出160M
Clock_RUNMode_SYS_Init_80M(); // sys clock = 80M, bus clock = 40M, flash = 20M

}void Clock_ConfigureOut(SIM_CLKOUTSEL_Type clkoutsel)
{if(clkoutsel <= RTC_CLK){SIM->CHIPCTL &= ~SIM_CHIPCTL_CLKOUTEN_MASK; // disable CLKOUTSIM->CHIPCTL &= ~SIM_CHIPCTL_CLKOUTSEL_MASK; // clear CLKOUT
SIM->CHIPCTL |= SIM_CHIPCTL_CLKOUTSEL(clkoutsel); // select CLKOUT source = clkoutsel
SIM->CHIPCTL |= SIM_CHIPCTL_CLKOUTEN_MASK; // enable CLKOUT
    }
}/*** CLKOUT pin输出Bus CLK*/
void Clock_Out_Bus(void)
{Clock_ConfigureOut(BUS_CLK);
}/*** 配置SOSC_CLK=8M* @output SOSCDIV1_CLK* @output SOSCDIV2_CLK* @note* 外部晶振8M* 计算公式* SOSCDIV1_CLK=SOSC_CLK / SOSCDIV1* SOSCDIV2_CLK=SOSC_CLK / SOSCDIV2*/
void Clock_SOSC_Init_8M(void)
{// Frequency division for SOSCDIV1_CLK, SOSCDIV2_CLKSCG->SOSCDIV=SCG_SOSCDIV_SOSCDIV1(1) // SOSCDIV1=1 : Divide by 1| SCG_SOSCDIV_SOSCDIV2(1);   // SOSCDIV2=1 : Divide by 1
SCG->SOSCCFG=SCG_SOSCCFG_RANGE(0b11) // RANGE=3: 8-40 MHz SOSC// RANGE=3: 8-40 MHz SOSC| SCG_SOSCCFG_HGO(1)    // HGO=0: Configure crystal oscillator for high-gain operation| SCG_SOSCCFG_EREFS(1); // EREFS=1: Internal crystal oscillator of OSC selectedwhile(SCG->SOSCCSR & SCG_SOSCCSR_LK_MASK); /* Ensure SOSCCSR unlocked */SCG->SOSCCSR = SCG_SOSCCSR_SOSCEN(1);      // SOSC Enable
}/*** 配置MCU时钟SPLL_CLK=160M* @require SOSC_CLK = 8M* @output SPLL_CLK*/
void Clock_SPLL_Init_160M(void)
{while(SCG->SPLLCSR & SCG_SPLLCSR_LK_MASK); /* Ensure SPLLCSR unlocked */// 关闭SPLLSCG->SPLLCSR = 0; /* SPLLEN=0: SPLL is disabled (default) */// 配置SCG_SPLLCFG, 使VCO_CLK=320MHz, SPLL_CLK=160MHzSCG->SPLLCFG = SCG_SPLLCFG_PREDIV(0) | SCG_SPLLCFG_MULT(0b11000);SCG->RCCR = SCG_RCCR_SCS(0b0110)  // System Clock Source: System PLL (SPLL_CLK)| SCG_RCCR_DIVCORE(0)   // DIVCORE=0| SCG_RCCR_DIVBUS(1)    // DIVBUS=1| SCG_RCCR_DIVSLOW(1);  // DVISLOW=1// 使能SPLLSCG->SPLLCSR |= SCG_SPLLCSR_SPLLEN_MASK;// Lock SPLLSCG->SPLLCSR |= SCG_SPLLCSR_LK_MASK;
}/*** SYS_CLK = 80M, BUS_CLK = 40M, FLASH_CLK=20M* @require SPLL_CLK=160M* @note SYS_CLK=80MHz,BUS_CLK=40MHz, 使用外部晶振f_osc=8MHz* 前提条件使用SPLL_SOURCE=160M作为system clock* 计算公式:* SYS_CLK=SPLL_CLK / DIVCORE* BUS_CLK=SYS_CLK / DIVBUS* FLASH_CLK=SYS_CLK / DIVSLOW* SPLL_CLK=(VCO_CLK) / 2* VCO_CLK=SPLL_SOURCE / (PREDIV + 1) x (MULT + 16)** =>DIVCORE=1, DIVBUS=1,DIVSLOW=3*/
void Clock_RUNMode_SYS_Init_80M(void)
{// 配置system clock源, DIVCORE, DIVBUS, DIVFLASHSCG->RCCR = SCG_RCCR_SCS(0b0110)// Select System Clock Source: System PLL (SPLL_CLK)| SCG_RCCR_DIVCORE(1)| SCG_RCCR_DIVBUS(1)| SCG_RCCR_DIVSLOW(3);// 检查Clock Status(SCG_CSR) 是否为RCCR配置while(0b0110 != (SCG->CSR & SCG_CSR_SCS_MASK) >> SCG_CSR_SCS_SHIFT) { }
}

View Code

Port.c

#define PORTD14_IDX              14
#define PORTD16_IDX              16#define PORT_CLKOUT_IDX          PORTD14_IDX
#define PORT_LED_GREEN_IDX       PORTD16_IDX/** PTD14 - CLKOUT* PTD16 - GPO for LED*/
void Port_Init(void)
{// Enable clock to PORTDif(PCC->PCCn[PCC_PORTD_INDEX] & PCC_PCCn_PR_MASK){PCC->PCCn[PCC_PORTD_INDEX] |= PCC_PCCn_CGC(1); // Clock enabled to PORTD
    }// Set Port Data DirectionPTD->PDDR |= 1 << PORT_LED_GREEN_IDX; // Port Data Direction: output// set/clear PortD's value
//    PTD->PTSO |= 1 << PORT_LED_GREEN_IDX; // Port Set OutputPTD->PCOR |= 1 << PORT_LED_GREEN_IDX; // Port Clear Output// PTD16 - GPOPORTD->PCR[PORT_LED_GREEN_IDX] = PORT_PCR_MUX(0b0000001); // Port D16: MUX=ALT1, GPIO(to green LED on EVB/PCB)// PTD14 - CLKOUTPORTD->PCR[PORT_CLKOUT_IDX] = PORT_PCR_MUX(0b00000111);  // Port D14: MUX=ALT4, CLKOUT

}

View Code

clock.c - CLKOUT 输出选择

/*** CLKOUT pin输出Bus CLK*/
void Clock_Out_Bus(void)
{Clock_ConfigureOut(0b1001);
}void Clock_ConfigureOut(SIM_CLKOUTSEL_Type clkoutsel)
{if(clkoutsel <= 0b1110){SIM->CHIPCTL &= ~SIM_CHIPCTL_CLKOUTEN_MASK; // disable CLKOUTSIM->CHIPCTL &= ~SIM_CHIPCTL_CLKOUTSEL_MASK; // clear CLKOUT
SIM->CHIPCTL |= SIM_CHIPCTL_CLKOUTSEL(clkoutsel); // select CLKOUT source = clkoutsel
SIM->CHIPCTL |= SIM_CHIPCTL_CLKOUTEN_MASK; // enable CLKOUT
    }
}

View Code

8. 观察CLKPUT pin 输出

需要用示波器观测PTD14,截图略。

转载于:https://www.cnblogs.com/fortunely/p/11057040.html

S32K144之时钟配置相关推荐

  1. S32K144之时钟配置及时钟查看

    S32K144之时钟配置及时钟查看 以S32K144为配置测试 一.时钟树介绍 输入部分:S32K144有四个时钟源,如上图时钟树已圈出,分别是: 时钟源 允许频率 Fast IRC(内部高速时钟源) ...

  2. s32k144 isystem linux,S32K144之时钟配置

    一般来说,时钟精度.稳定性取决于所采用的时钟源,就MCU S32K来说如内部振荡器SIRC,FIRC,128KLPO,外部晶振等,跟所使用的外设(FTM, LPIT,LPT,RTC等)和哪一路输出时钟 ...

  3. S32K144之时钟

    一,时钟树. 1,时钟源. 参考:  S32K144之时钟配置及时钟查看 - 爱码网 (likecs.com) 时钟源有4种,如上图圈出来的. 2,时钟介绍 1.内核时钟(CORE_CLK) 2.总线 ...

  4. S32K144(2)时钟配置

    目录 1.简介 2.时钟树 2.1.时钟源 2.2.时钟模式 2.3.各模块的时钟频率 3.寄存器 3.1.SCG_VERID:Version ID Register 3.2.SCG_PARAM:Pa ...

  5. S32K144:1.时钟配置

    1.按照如下参数进行时钟配置 2.配置SOSC时钟 1)使用SCG_SOSCDIV寄存器配置SOSC_DIV1.DIV2时钟频率: 2)使用SCG_SOSCCFG寄存器配置选择振荡器为参考时钟.振荡器 ...

  6. STM32的时钟配置随笔

    以前使用STM32都是使用库函数开发,最近心血来潮想要使用寄存器来试试手感,于是乎便在工作之余研究了一下STM32F4的时钟配置,在此将经历过程写下来作为锻炼,同时也供和我一样的新手参考,如有错误或者 ...

  7. 华大单片机HC32L136J8TA读取DS18B20温度(源码+时钟配置)

    免费的C语言和linuxPDF文档:传送门 有一点C语言基础和华大单片机开发经验,应该就能看得懂就不多介绍了,有疑问可以留言,看到就回了; 关于协议具体解析:传送门@不脱发的程序猿 注(2021-05 ...

  8. STM32的时钟配置——时钟树解析

    此文章由于讲得较详细因此篇幅较长,请带着一点耐心去读,相信会有收获! 目录 STM32为什么要有复杂的时钟系统 详解STM32时钟系统 STM32有几个时钟源 关于时钟输出 软件配置时钟 STM32为 ...

  9. NXP(I.MX6uLL)DDR3实验——DDR3重要时间参数、时钟配置与原理图简析

    目录 DDR3 内存时间参数 传输速率 tRCD 参数 CL 参数 AL 参数 tRC 参数 tRAS 参数 I.MX6U MMDC内存控制器简介 MMDC内存控制器简介 MMDC内存控制器信号引脚 ...

最新文章

  1. Python数据结构与算法(第五天)
  2. 下一代CAN通信技术CAN XL简介
  3. linux 硬盘报错日志,Linux内核I_O系统报错日志与硬盘故障对应关系
  4. php cdi_集成CDI和WebSockets
  5. vb.net中滚动条一直显示没有数据时也显示_前端学习中你必须了解的几张图
  6. Linux文件上传下载sz 和 rz 命令
  7. Java-Runoob-高级教程-实例-字符串:14. Java 实例 - 连接字符串
  8. webview加载百度失败_独家|神秘SDK暗刷百度广告 植入数千款APP
  9. [摩斯密码表]摩斯密码对照表
  10. 安装microsoft office 和visio遇到的那些事儿
  11. 中国人的大师之路--《像外行一样思考,像专家一样实践》读后感
  12. 多开助手完美版,APP一键多开,支持安卓10
  13. PS批量处理图片大小-PS批量处理水印整齐
  14. 浩方对战平台原理分析
  15. mysql删除密码代码_mysql 用户新建、受权、删除。密码修改
  16. 10bit灰阶测试图_10bit色深是噱头?修图显示器有必要上10bit吗
  17. oracle先决条件内存,oracle11g安装客户端检查先决条件失败
  18. 穆迪将收购GCR Ratings多数股权以拓展非洲业务
  19. WiFi5 (802.11ac) Vs WiFi6(802.11ax)频宽及速率对比
  20. 基于matlab使用合成雷达和无线通信信号训练的语义分割神经网络执行频谱检测

热门文章

  1. 救活被微软封杀的Windows XP操作系统(转)
  2. Unity中鼠标的交互事件
  3. ansysworkbench直线和曲线路径设置
  4. 软件测试工程师自我介绍范文_软件测试面试自我介绍范文3篇
  5. java zmq api_zmqSocket 使用和相关java后台准备
  6. Kaggle比赛总结
  7. 理光 MP 2554 sp 打印机再windows10系统下经常脱机和打印延迟的解决方案
  8. php将字符串转换成utf8编码,php字符串转utf8编码的方法
  9. vivado技巧总结
  10. 笔记本电脑与台式机同步连接_如何将台式机与Google云端硬盘(和Google相册)同步...