【RTD MCAL 篇3】 K312 MCU时钟系统配置

【RTD MCAL 篇3】 K312 MCU时钟系统配置

  • 一,文档简介
  • 二, 时钟系统理论与配置
    • 2.1 K312 时钟系统
      • 2.1.1 PLL
      • 2.1.2 MUX_0系统
      • 2.1.3 MUX_6 时钟输出
      • 2.1.4 option B推荐方案
    • 2.2 EB 配置
      • 2.2.1 General 配置
      • 2.2.2 McuClockSettingConfig配置
        • 2.2.2.1 McuFIRC配置
        • 2.2.2.2 McuSIRC配置
        • 2.2.2.3 McuFXOSC配置
        • 2.2.2.4 McuCgm0ClockMux0配置
        • 2.2.2.5 McuCgm0ClockMux1配置
        • 2.2.2.6 McuCgm0ClockMux3配置
        • 2.2.2.7 McuCgm0ClockMux4配置
        • 2.2.2.8 McuCgm0ClockMux5配置
        • 2.2.2.9 McuCgm0ClockMux6配置
        • 2.2.2.10 McuCgm0ClockMux11配置
        • 2.2.2.11 McuRtcClockSelect配置
        • 2.2.2.12 McuPLL配置
        • 2.2.2.13 McuClockReferencePoint配置
      • 2.2.3 McuModeSettingConf 配置
      • 2.2.4 PORT 配置
  • 三,测试结果
    • 3.1 CLKOUT FIRC_CLK DIV2
    • 3.2 CLKOUT SIRC_CLK DIV2
    • 3.3 CLKOUT FXOSC_CLK DIV10
    • 3.4 CLKOUT PLLPH0 CLK DIV10
    • 3.5 CLKOUT CORE CLK DIV10
    • 3.6 CLKOUT PLLPH1 CLK DIV4
    • 3.7 CLKOUT HSE CLK DIV10
    • 3.8 CLKOUT AIPS_PLAT CLK DIV10
    • 3.9 CLKOUT AIPS_SLOW CLK DIV10

一,文档简介

很久没开张了,理由省掉一万字,结论为绝非偷懒!抓着2024的尾巴尖,再次激活下写文章系统。既然新的一年要开始了,那么就从MCU的小心脏跳动起来: 谈谈如何在K3芯片MCAL的MCU中配置时钟系统。这个话题之前在做LLD的时候,一直是不屑去讲的,因为K3的时钟系统实在是太过简单,内部快慢时钟源,外部快慢时钟源,一个PLL倍频,然后各路内核外设来分羹,K3的RM甚至还做了几个option把规则给框了起来,从LLD的角度,尤其是S32DS CT配置的角度,更是简洁明了,来个CT图秀一下:
在这里插入图片描述

图 1

在这里插入图片描述

图 2

就这么个时钟系统,小手点点戳戳几下,一生成代码不就完事了。但是在LLD里面太过自由,到了MCAL却时常磕磕碰碰,所以,索性花些许时间把这个MCAL MCU的整个时钟系统给整的明明白白,本文以K312为例来讲解,其他的K3系列类似。

二, 时钟系统理论与配置

2.1 K312 时钟系统

从RM的时钟章节,可以看到整个系统框图情况:
在这里插入图片描述

图 3

这个框图把每个部分的情况都画的很清晰,时钟来源有四种:
内部快速时钟FIRC:48MHz, +/-5%误差,启动最大25us
内部慢速时钟SIRC: 32KHz,+/-10%误差,启动最大3ms
外部快速时钟FXOSC: 8-40MHz, 启动稳定时间FXOSC_CTRL[EOCV] × 128
外部慢速时钟SXOSC:32.768KHz, 启动稳定时间SXOSC_CTRL[EOCV] x 128
一个PLL:输入8-40MHZ,VOC输出640M-1280Mhz,PLL_PHIn_CLK输出25-480MHz。
MUX_0:输出CORE_CLK, AIPS_PLAT_CLK, AIPS_SLOW_CLK, HSE_CLK,DCM_CLK
MUX_1: 输出系统定时器STM0_CLK
MUX_3: 输出FLEXCAN0-2时钟
MUX_4: 输出FLEXCAN3-5时钟
MUX_5: 输出CLKOUT_STANDBY
MUX_6: 输出 CLKOUT_RUN
MUX_11: 输出TRACE_CLK
RTC_CLK:RTC时钟

2.1.1 PLL

从PLL角度,需要知道倍频和哪些值有关,可以通过如下公式去计算:
在这里插入图片描述

图4

如果是整数情况,上图的红色框是常用的方式,本文也会用上面的方式去配置。
PLL_PHI是最终PLL输出的时钟,供给其他MUX对应的MC去选择的。

2.1.2 MUX_0系统

从RM中可以看到细节的MUX_0系统:
在这里插入图片描述

图 5

可以看到,MUX_0的时钟源头可以是两种:PLL或者内部FIRC。
然后后面是可以生成内核时钟,AIPS_PLAT_CLK, AIPS_SLOW_CLK, HSE_CLK, DCM_CLK.
那么具体是生成时钟的频率是多少?原则上是符合各个模块对应的最大时钟即可,但是K3系列里面还做了一些option的推荐,比如K312推荐RUN的时候用optionB模式,尤其HSE的时钟,通常是需要严格满足option的推荐。

2.1.3 MUX_6 时钟输出

为了检查芯片内对应时钟情况,可以通过CLKOUT引脚输出对应的时钟,CLKOUT引脚可以对应多个时钟源的选择,具体情况如下:

在这里插入图片描述

图 6

图中黄色的内容是K312的CLKOUT_RUN所能支持的,后续配置时钟之后,将会具体选择对应的时钟测试是否输出和配置一致。

2.1.4 option B推荐方案

本文K312将会在EB中配置optionB的时钟情况。
在这里插入图片描述

图 7

2.2 EB 配置

首先先新建一个K312的EB工程,具体新建方法可以参考之前的文章:

S32K3 工具篇8:如何移植RTD现有demo到其他K3芯片
本文将重点讲解基于RTD400 MCAL的MCU模块对应的时钟配置,对于MCU配置,两个文档需要作为工具书查阅:
C:\NXP\SW32K3_S32M27x_RTD_R21-11_4.0.0\eclipse\plugins\Mcu_TS_T40D34M40I0R0\doc下的:RTD_MCU_UM.pdf和RTD_MCU_IM.pdf
有些不知道怎么配置的,就按照文档推荐的默认值配置即可。
下图是mcu的概览,主要配置的模块有如下三个组件:
General, McuClockSettingConfig, McuModeSettingConf
在这里插入图片描述

图8

2.2.1 General 配置

除了图8,需要打开内部外部快慢速时钟控制以及PLL控制,并且添加对应API, 以及晶振频率情况,如果这边不打开,后面的对应配置将会无法配置。
在这里插入图片描述

图 9

2.2.2 McuClockSettingConfig配置

这里是MCU时钟配置的核心区域,里面包含了时钟源,PLL,以及各大MUX情况。

首先需要先添加一个时钟配置:
在这里插入图片描述

图 10

点击进去,里面会有详细的配置:
在这里插入图片描述

图 11

里面一共17个选项,对于第1,6可以保持默认配置,5外部慢速晶振,由于板子没接,所以不配置。其余要根据实际情况配置,下面予以一一讲解:

2.2.2.1 McuFIRC配置

内部快速时钟,48MHz:
在这里插入图片描述

图 12
2.2.2.2 McuSIRC配置

内部慢速时钟32Khz
在这里插入图片描述

图 13
2.2.2.3 McuFXOSC配置

外部晶振16MHZ,根据实际连接情况填写。
在这里插入图片描述

图 14
2.2.2.4 McuCgm0ClockMux0配置

Mux0配置,这里配置的有内核时钟,AIPS_PLAT_CLK,AIPS_SLOW_CLK,HSE, DCM_CLK,是满足optionB要求,并且时钟来源于PLL_PHI0_CLK,真正配置的时候,先配置PLL时钟输出正确的PLL_PHI0_CLK, PLL_PHI1_CLK时钟。
在这里插入图片描述

图 15
2.2.2.5 McuCgm0ClockMux1配置

在这里插入图片描述

图16

可以根据实际模块需要的时钟源情况去配置。

2.2.2.6 McuCgm0ClockMux3配置

配置FLEXCAN0-2模块的时钟源:
在这里插入图片描述

图 17
2.2.2.7 McuCgm0ClockMux4配置

配置FLEXCAN3-5模块的时钟源:
在这里插入图片描述

图 18
2.2.2.8 McuCgm0ClockMux5配置

配置CLKOUT_STANBY模块的时钟源:
在这里插入图片描述

图19
2.2.2.9 McuCgm0ClockMux6配置

配置CLKOUT_RUN模块的时钟源
在这里插入图片描述

图20
2.2.2.10 McuCgm0ClockMux11配置

配置TRACE_CLK模块的时钟源
在这里插入图片描述

图21
2.2.2.11 McuRtcClockSelect配置

配置RTC模块的时钟源
在这里插入图片描述

图22
2.2.2.12 McuPLL配置

配置PLL模块的时钟源
在这里插入图片描述

图23
2.2.2.13 McuClockReferencePoint配置

配置参考时钟,外设模块的时钟源选择接口。
在这里插入图片描述

图24

到这里,时钟就配置结束了。
下面为了验证,可以使用CLKOUT_RUN这个输出,将对应的时钟输出到引脚PTD10查看。

2.2.3 McuModeSettingConf 配置

Mcu中的McuModeSettingConf->McuPeripheral这里需要把使用到的外设给打开:
在这里插入图片描述

图 25

2.2.4 PORT 配置

因为需要将内部时钟输出到CLKOUT_RUN, K312的PTD10 MSCR106查看,所以添加PORT引脚如下:

在这里插入图片描述

图26

三,测试结果

下面在S32K312-EVB板子上,通过修改EB的CLKOUT_RUN的时钟源测试看看时钟是否和配置的能够对上。
常用的mcu相关驱动如下:
在这里插入图片描述

图 27

系统启动MCU初始化的调用顺序如下:
1). Mcu_Init()
2). Mcu_InitClock()
3). Mcu_GetPllStatus() - Till PLL is locked.
4). Mcu_DistributePllClock()
5). Mcu_SetMode()
6). Mcu_InitRamSection() - If required

对应的main代码如下:

#include "Mcu.h"
#include "Mcu_Cfg.h"
#include "Port.h"
#include "Dio.h"
#include "Port_Cfg.h"
#include "Platform.h"
void TestDelay(uint32 delay);
void TestDelay(uint32 delay)
{static volatile uint32 DelayTimer = 0;while(DelayTimer < delay){DelayTimer++;}DelayTimer = 0;
}/**
* @brief        Main function of the example
* @details      Initialize the used drivers and uses the Icu
*               and Dio drivers to toggle a LED on a push button
*/
int main(void)
{uint8 count = 0U;uint8 u8TimeOut = 100U;/* Initialize the Mcu driver */
#if (MCU_PRECOMPILE_SUPPORT == STD_ON)Mcu_Init(NULL_PTR);
#elif (MCU_PRECOMPILE_SUPPORT == STD_OFF)Mcu_Init(&Mcu_Config_VS_0);
#endif /* (MCU_PRECOMPILE_SUPPORT == STD_ON) *//* Initialize the clock tree and apply PLL as system clock */Mcu_InitClock(McuClockSettingConfig_0);#if (MCU_NO_PLL == STD_OFF)while ( MCU_PLL_LOCKED != Mcu_GetPllStatus() ){}Mcu_DistributePllClock();
#endif/* Apply a mode configuration */Mcu_SetMode(McuModeSettingConf_0);/* Initialize all pins using the Port driver */Port_Init(NULL_PTR);/* Initialize Platform driver */Platform_Init(NULL_PTR);while (count++ < 10){Dio_WriteChannel(DioConf_DioChannel_Digital_Output_LED_Q172, STD_HIGH);Dio_WriteChannel(DioConf_DioChannel_Digital_Output_LED_Q257, STD_HIGH);TestDelay(5000000);Dio_WriteChannel(DioConf_DioChannel_Digital_Output_LED_Q172, STD_LOW);Dio_WriteChannel(DioConf_DioChannel_Digital_Output_LED_Q257, STD_LOW);TestDelay(5000000);}//    Exit_Example(TRUE);return (0U);
}#ifdef __cplusplus
}
#endif

3.1 CLKOUT FIRC_CLK DIV2

在这里插入图片描述

图28

可以看到对于FIRC原本48Mhz的时钟做2分频输出,得到了24Mhz的时钟波形,正确!

3.2 CLKOUT SIRC_CLK DIV2

在这里插入图片描述

图29

可以看到对于SIRC原本32Khz的时钟做2分频输出,得到了16khz的时钟波形,正确!

3.3 CLKOUT FXOSC_CLK DIV10

在这里插入图片描述

图30

可以看到对于FXOSC原本16Mhz的时钟做10分频输出,得到了1.6Mhz的时钟波形,正确

3.4 CLKOUT PLLPH0 CLK DIV10

在这里插入图片描述

图31

可以看到对于PLLPH0原本120Mhz的时钟做10分频输出,得到了12Mhz的时钟波形,正确

3.5 CLKOUT CORE CLK DIV10

在这里插入图片描述

图32

可以看到对于CORE原本120Mhz的时钟做10分频输出,得到了12Mhz的时钟波形,正确

3.6 CLKOUT PLLPH1 CLK DIV4

在这里插入图片描述

图33

可以看到对于PLLPH1原本48Mhz的时钟做4分频输出,得到了12Mhz的时钟波形,正确

3.7 CLKOUT HSE CLK DIV10

在这里插入图片描述

图34

可以看到对于HSE原本60Mhz的时钟做10分频输出,得到了6Mhz的时钟波形,正确

3.8 CLKOUT AIPS_PLAT CLK DIV10

在这里插入图片描述

图35

可以看到对于AIPS_PLAT_CLK原本60Mhz的时钟做10分频输出,得到了6Mhz的时钟波形,正确

3.9 CLKOUT AIPS_SLOW CLK DIV10

在这里插入图片描述

图36

可以看到对于AIPS_SLOW_CLK原本30Mhz的时钟做10分频输出,得到了3Mhz的时钟波形,正确

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/501959.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vite-plugin-imagemin安装问题

vite-plugin-imagemin 是一款图片资源压缩插件,能够在打包的时候显著的降低图片资源占用。不过,在安装过程中我们遇到了如下的问题。 对于上面的问题,有以下几种常见的解决方案: 1,使用 yarn 在 package.json 内配置(推荐) 打开 package.json 配置文件,然后添加如下脚本…

c-动态内存管理 (动态内存管理比较深入的分析和理解博客总结)

本节博客主要是堆C语言动态内存管理进行一定深度的谈论, 主要谈论主题请见目录~ 目录 1. 复习 与 铺垫(动态内存管理基本知识)1.1 什么是动态内存管理(基本代码)?1.2 为什么要有动态内存管理?1.3 什么是野指针? 2. C程序地址空间分布2.1 两者的空间是如上图所示的吗? 我们验…

【JVM】总结篇-运行时内存篇

文章目录 JVM内存模型&#xff08;内存结构&#xff09;程序计数器 pc虚拟机栈本地方法栈 native堆堆空间堆中一些JVM参数堆中垃圾回收过程MinorGC MajorGC FullGC年轻代GC(Minor GC)触发机制&#xff1a;老年代GC&#xff08;Major GC/Full GC&#xff09;触发机制&#xff1a…

Tableau数据可视化与仪表盘搭建-安装教程

下载 tableau.com/zh-cn/support/releases 滚动到最下方的下载 在下载的同时 我们点击登录&#xff0c;去注册一个tableau的账号 下面点击我们下载好的tableau安装程序 不要自定义安装&#xff0c;会有路径问题 点击试用14天 点击激活 激活学生 tableau.com/zh-cn/academic…

GitHub的简单操作

引言 今天开始就要开始做项目了&#xff0c;上午是要把git搭好。搭的过程中遇到好多好多的问题。下面就说一下git的简单操作流程。我们是使用的GitHub,下面也就以这个为例了 一、GitHub账号的登录注册 https://github.com/ 通过这个网址可以来到GitHub首页 点击中间绿色的S…

【2025最新计算机毕业设计】基于Spring Boot+Vue影院购票系统(高质量源码,提供文档,免费部署到本地)

作者简介&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容&#xff1a;&#x1f31f;Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…

数据安全防护

数据安全防护有几个层面 边界安全 网络防火墙负责的部分 认证 kerberos负责的部分 授权 识别用户是否有访问某个模块的权限 认证是kerberos负责的事情 1. 客户端请求认证服务器&#xff0c;希望得到访问服务端票据的票据 2.客户端拿到访问服务端票据的票据后&#xff0c;去…

Cursor连接腾讯云Cloud Studio开发环境

文章目录 环境准备Cloud StudioCursor Cursor连接Cloud Studio开发环境 环境 腾讯云Cloud Studio语言模板All In One实例Windows 11Firefox 133.0.3 (64 位)Cursor 0.44.9 准备 Cloud Studio 在腾讯云Cloud Studio&#xff08; https://ide.cloud.tencent.com/ &#xff09…

【工具整理】WIN换MAC机器使用工具整理

最近公司电脑升级&#xff0c;研发同学统一更换了 Mac Book Pro 笔记版电脑&#xff0c;整理一下安装了那些软件以及出处&#xff0c;分享记录下&#xff5e; 知识库工具 1、语雀 网址&#xff1a;语雀&#xff0c;为每一个人提供优秀的文档和知识库工具 语雀 个人花园&…

面试题解,Java中的“对象”剖析

一、说一说JVM中对象的内存布局&#xff1f;new一个对象到底占多大内存&#xff1f; 话不多说&#xff0c;看下图&#xff0c;对象的内存布局图 一个对象的内存布局主要由三部分组成&#xff1a;对象头&#xff08;Object Header&#xff09;、实例数据&#xff08;Instance D…

大白话拆解——多线程中关于死锁的一切(七)(已完结)

前言&#xff1a; 25年初&#xff0c;这个时候好多小伙伴都在备战期末 小编明天还有一科考试&#xff0c;日更一篇&#xff0c;今天这篇一定会对小白非常有用的&#xff01;&#xff01;&#xff01; 因为我们会把案例到用代码实现的全过程思路呈现出来&#xff01;&#xff…

家教老师预约平台小程序系统开发方案

家教老师预约平台小程序系统将连接学生/家长与家教老师&#xff0c;提供一站式的家教服务预约体验。 一、用户需求分析1、家教老师&#xff1a;希望获得更多的学生资源&#xff0c;通过平台展示自己的教学特长和经验&#xff0c;管理个人日程&#xff0c;接收并确认预约请求&a…

windows 图形基础架构简介

背景 本文尝试对Windows系统中的一些Graphic相关的概念进行介绍和厘清。 windows图形基础架构简介 Windows 为图形提供了多个 API&#xff0c;下图显示了这些 API。 上图出自微软官方https://learn.microsoft.com/en-us/windows/win32/learnwin32/overview-of-the-windows-…

QML使用Popup实现弹出Message

方案一&#xff1a;popup import QtQuick 2.15 import QtQuick.Controls 2.15 import QtQuick.Layouts 1.15ApplicationWindow {visible: truewidth: 640height: 480title: qsTr("Top Message Popup Example")ColumnLayout {anchors.centerIn: parentspacing: 10Butt…

Ⅱ.INTRODUCTION TO CUDA C

前言 上一节环境配置好了&#xff0c;我们开始吧&#xff01; 一、A First Program 1. Hello, World! 我们先写一个C语言的 Hello, World! 作为对比 int main(void){printf("Hello, World!\n");return 0; }大家应该知道这个代码运行在CPU上吧&#xff0c;我们CP…

如何轻松关闭 iPhone 上的 HEIC [HEIC 图像技巧]

您是否正在为关闭 iPhone 上的 HEIC 而烦恼&#xff1f;你不是一个人; Apple 的首选图像文件格式仍可能存在一些兼容性问题。当您与某人共享照片或尝试在Windows计算机上打开图像时&#xff0c;就会出现此问题。幸运的是&#xff0c;Apple 使关闭 HEIC iPhone 变得更加容易。 …

Postgresql 命令还原数据库

因为PgAdmin打不开&#xff0c;但是数据库已经安装成功了&#xff0c;这里借助Pg命令来还原数据库 C:\Program Files\PostgreSQL\15\bin\psql.exe #链接数据库 psql -U postgres -p 5432#创建数据库 CREATE DATABASE "数据库名称"WITHOWNER postgresENCODING UTF8…

docker中使用Volume完成数据共享

情景概述 在一个docker中&#xff0c;部署两个MySQL容器&#xff0c;假如它们的数据都存储在自己容器内部的data目录中。这样的存储方式会有以下问题&#xff1a; 1.无法保证两个MySQL容器中的数据同步。 2.容器删除后&#xff0c;数据就会丢失。 基于以上问题&#xff0c;容…

vue——滑块验证

1. 介绍 1.1 简介 基于滑动式的验证码&#xff0c;免于字母验证码的繁琐输入 用于网页注册或者登录 1.2 来源说明 vue使用滑块验证功能&#xff0c;是基于vue-monoplasty-slide-verify这样的一个开源项目&#xff0c;进行实现的&#xff0c;这是这个开源项目的网址传送阵&#…

如何很快将文件转换成另外一种编码格式?编码?按指定编码格式编译?如何检测文件编码格式?Java .class文件编码和JVM运行期内存编码?

如何很快将文件转换成另外一种编码格式? 利用VS Code右下角的"选择编码"功能&#xff0c;选择"通过编码保存"可以很方便将文件转换成另外一种编码格式。尤其&#xff0c;在测试w/ BOM或w/o BOM, 或者ANSI编码和UTF编码转换&#xff0c;特别方便。VS文件另…