KEAZ128 时钟配置

article/2025/9/9 7:56:43

本文介绍如何用KEAZ128评估版(FRDM-KEAZ128Q80)配置为40MHz core freqency/20MHz bus frequency。

 

1.了解器件时钟特性 

参见NXP KEA128 DS(S9KEA128P80M48SF0.pdf ),可以知道这个MCU最高支持48MHz core frequency.

从KEA128 RM(KEA128RM (中文).pdf),可以知道KEA128各个时钟名称及频率等特性。这里需要注意,设置的配置内核时钟频率(40MHz)不能超过最高频率(48MHz)。由于外部时钟较内部时钟稳定、可靠,所以选择外部晶振作为总线时钟源。

不过,为何内核频率最高频率是48MHz?使用外部晶振8MHz最高支持多少频率呢?接着往下看。

 

  

 

 

 

3.观察时钟框图,选择一条配置时钟的路线

可以从RM时钟示意图,看到KEA各种类型时钟及连接关系,

 

 

假如以IRC=37.5KHZ作为FLL基准时钟,FLL倍频=1280,那么内核时钟=37.5KHZ * 1280 = 48000KHZ = 48MHZ。这解释了48MHZ最大频率是怎么计算得来的。

 

  

但是,想要的,不是使用内部时钟IRC,而是外部晶振(8MHz)作为时钟源,这样应该选择下面这条路线配置。

 

 

  

 4.计算时钟及所需配置的参数

从上面的路线图,知道要用8M生成40MHz,必须经过FLL倍频(*1280),而8M*1280  = 10240M >> 48M,明显不合理,所以8M不会是直接送到FLL输入,必须先经过系统振荡器模块(OSC)进行分频处理后,才能经过FLL倍频。

设OSC分频系数=n,那么内核时钟 = 8M / n * 1280 / bdiv / div1 , 其中n属于OSC模块,bdiv属于ICS模块,div1属于SIM模块。

不过,OSC是个什么模块?跟ICS是什么关系?

 

5. 分析内部时钟源模块(ICS)

查看RM ICS章节,发现可以选择如下线路配置ICSOUT(ICSOUTCLK),进而配置内核时钟。这里外部基准时钟输入后,会有一个RDIV决定的分频,再由FLL倍频,再由BDIV分频,得到ICSOUT。

 

 

1)先看看RDIV,是如何分频的。

看寄存器描述,可以得知,RDIV的分频,与OSC_CR[RANGE](频率范围)相关。而8M外部晶振作为OSC模块时钟时(8M > 4M),必然选择OSC_CR[RANGE] = 1,也就是说,RDIV所代表的分频系数只能是32,64,...1024.

不妨试试RDIV=0b000,也就是rdiv=32,那么内核时钟 = 8M / 32 * 1280 / bdiv / div1 = 320M/bdiv / div1 ,理论上,可以设置bdiv * div1 = 8,让内核时钟最终为40MHz,但是过程中,会导致传输的时钟为8M/32*1280=320M,这可能会导致器件无法正常各种。

配置时钟的时候,不仅要最终的结果满足小于最大时钟,而且过程中的时钟,也必须符合手册规范。这里,选择RDIV=0b011 => rdiv = 256, 内核时钟= 8M/256 *1280 / bdiv / div1 = 31.25kHz *1280 / bidv / div1 = 40M / bdiv / div1, 这里40M作为FLL输出,是符合40M~50M要求的。

 

 

   

 FLL输出,要求<50M

 

  2)FLL倍频

固定为*1280,也就是FLL输出ICSFLLCLK = 1280*FLL输入 ,FLL输入只能是OSCCLK(外部晶振或OSC),或者37.5 kHz IRC (内部IRC)

 

3)再看看BDIV是怎么分频的

直接通过设置BDIV的值,范围0~0b111来决定分频系数。

 

4)系统时钟(core clock/system clock)与总线时钟(bus clock/flash clock),FTM/PWT关系

由RM时钟分布章节可知,core clock = ICSOUTCLK / div1, bus clock = core clock / div2, FTM/PWT时钟  = core clock / div3

一般地建议是,div2 = 2, div3 = 2,也就是说,如果core clock = 40M, 那么其他的需要配置为bus clock = 20M, FTM/PWT时钟 = 20M

=> 建议值DIV1 = 0, DIV2 = 1, DIV3 = 1

 

6. 其他注意事项

1)配置时钟前,建议关闭看门狗和中断,MCU必要外设初始化完成后再开启;

2)非屏蔽中断NMI功能(NMI_b引脚)不用时,建议关闭(默认是开启的,见SIM_SOPT0[NMIE]描述);

 

7. 代码实现

简便起见,本文基于S32DS for ARM 2018.R1提供的KEAZ128 SDK V1.0.0实现。

复制代码

1 #define ICS_Trim_VALUE         54u
2 
3 void ClockManager_Init(void)
4 {
5     ICS_Trim(ICS_Trim_VALUE);
6 
7     ClockManager_Init_Bus_20M();
8 }

复制代码

 

复制代码

 1 /**2  * void ClockManager_Init_Bus_20M(void)3  * @param void4  * @note configure bus clock work at 20MHz, core clock 40MHz, disable NMI pin as default5  * bus clock = core clock / 2 , see function ICS_Init()6  */7 void ClockManager_Init_Bus_20M(void)8 {9     ICS_ConfigType sConfig = {0};
10 
11     SIM->CLKDIV |= SIM_CLKDIV_OUTDIV2_MASK;  //OUTDIV2 = 1, bus clock = core clock / 2
12 
13     sConfig.bdiv = 0;
14     sConfig.bLPEnable = 0;
15     sConfig.u8ClkMode = ICS_CLK_MODE_FEE;
16 
17 #if EXT_CLK_FREQ > 4000
18     sConfig.oscConfig.bRange =1;
19 #endif
20 
21     sConfig.oscConfig.bGain = 1;
22     sConfig.oscConfig.bIsCryst = 1; // use OSC
23     sConfig.oscConfig.bEnable = 1;
24     sConfig.oscConfig.bWaitInit = 1;
25     sConfig.oscConfig.u32OscFreq = EXT_CLK_FREQ;
26 
27     ICS_Init(&sConfig);
28 }

复制代码

 

8. 验证配置

通过配置PTH2为BUSOUT功能(ALT2),然后用示波器测量PTH2 pin输出波形,查看是否为20M bus clock 。


http://chatgpt.dhexx.cn/article/tHDu69Yl.shtml

相关文章

《软件工程》整理

目录 Scrum开发 概念 scrum开发流程 Scrum开发 需求获取&#xff08;拆分&#xff09; DevOps Server的CMMI模型对需求的层级划分&#xff0c;Epic&#xff08;长篇故事&#xff09;、Feature&#xff08;特性&#xff09;、Requirement&#xff08;需求&#xff09;其中&am…

RTKLIB源码调试.trace文件解析.stat文件解析

.trace文件是调试文件&#xff0c;帮助用户在程序、输入数据时&#xff0c;进行分析的一个很好的提示&#xff01; .trace文件的生成、trace文件内容的生成&#xff0c;均在execses中&#xff01; 以单点定位为例&#xff0c;大体流程为&#xff1a; 生成.trace文件&#xf…

sopt:一个简单的python最优化库

sopt:一个简单的python最优化库引言 最近有些朋友总来问我有关遗传算法的东西&#xff0c;我是在大学搞数学建模的时候接触过一些最优化和进化算法方面的东西&#xff0c;以前也写过几篇博客记录过,比如遗传算法的C语言实现(一):以非线性函数求极值为例和C语言实现粒子群算法(P…

python古诗词生成_Python一日一练02----诗词生成器

要求 编写一段程序&#xff0c;可以自动生成小诗。 格式如下 源码 import random import sys articles ["the", "a", "another", "her", "his"] subjects ["cat", "dog", "horse", "m…

LSTM古诗词生成

Le LSTM古诗词生成 一、简介 基于LSTM的古诗词生成&#xff0c;设计神经网络模型&#xff0c;使模型学习数据是6291首古诗&#xff0c;没有专门的验证数据和测试数据&#xff0c;感觉不会预测正确。边学习边生成古诗&#xff0c;从生成的古诗来看学习的效果。 涉及到的模块有Py…

宋词自动生成

利用宋词语料库&#xff0c;通过单双词的组合与模板的匹配&#xff0c;实现指定词牌宋词的生成 import random import tkinter as tk import re from tkinter import messageboxlist []class Window:# 界面设计def __init__(self, root):label1 tk.Label(root, text输入词牌…

基于Python的宋词生成器

资源下载地址&#xff1a;https://download.csdn.net/download/sheziqiong/85631523 1. 背景 我有两个爱好&#xff0c;一个是传统文化&#xff0c;另一个是高新技术。 传统文化&#xff0c;我喜欢唐诗宋词、笔墨丹青&#xff0c;高新技术我则从事前沿的IT编程&#xff0c;喜…

基于java的古诗词生成管理系统

10161-古诗词生成管理系统 开发工具 eclipse tomact mysql jdk 功能详情&#xff1a; 古诗搜索、古诗问答、机器回复、古诗管理&#xff08;添加古诗、古诗分类、古诗标签、古诗列表&#xff09;、用户管理

田字格字帖生成器、孩子取名系列工具

大家好&#xff0c;我是小寻&#xff0c;欢迎关注公众号:工具优选&#xff0c;免费领取优质项目源码和常用工具&#xff0c;还可以加入我的交流群! 这是是一款2013年上线的在线小工具集&#xff0c;包括了 13 款中文学习工具&#xff0c;有田字格字帖、拼音田字格、古诗词字帖…

有趣的深度学习——使用TensorFlow 2.0 + RNN 实现一个古体诗生成器

一、前言 很早之前&#xff0c;我曾经写过一个古体诗生成器&#xff08;详情可以戳TensorFlow练手项目二&#xff1a;基于循环神经网络(RNN)的古诗生成器&#xff09;&#xff0c;那个时候用的还是Python 2.7和TensorFlow 1.4。 随着框架的迭代&#xff0c;API 的变更&#x…

现在还可以一键自动生成古诗词,你知道吗?

人类在漫长的历史长河中&#xff0c;一直在探索着各种各样的美好&#xff0c;不断地追求着更高的境界。而如今&#xff0c;随着科技的不断发展&#xff0c;人工智能已经成为了我们得力的伙伴之一&#xff0c;为我们带来了更多的便利和可能性。尤其是在艺术和文化领域&#xff0…

古诗词在线起名 - 一刀工具箱

古诗词名字生成器帮助你在线生成古诗词名字&#xff0c;包含&#xff1a;诗经、楚辞、唐诗、宋词、辞赋等古风的名字&#xff0c;这些名字都非常的优美好听&#xff0c;希望你们能够喜欢这款古诗词起名工具。 代码片段 async subName() {let name_arr Object.keys(this.userN…

NLP入门 - 基于Word Embedding + LSTM的古诗生成器

一共实现三个功能&#xff1a; 1. 续写五言诗 2. 续写七言诗 3. 写五言藏头诗 之前用这个做Intro to Computer Science的期末项目折腾太久&#xff0c;不想赘述&#xff0c;内容介绍及实现方法可参考期末presentation的slides&#xff1a; https://docs.google.com/presen…

基于古诗词的名字生成器

数据集 因为数据量庞大&#xff0c;使用本地的 CSV 数据进行测试。 后续改进 CSV 文件保存到 mongodb 数据库&#xff0c;便于聚合查询。 数据分词 我们需要一个分词器将这些数据进行分词&#xff0c;用到的是 Golang 版的 jieba 库如下&#xff1a; "github.com/go-e…

基于LSTM + keras 的古诗生成器

1.语料准备&#xff1a;包含 5.5 万首唐诗、26 万首宋诗、2.1 万首宋词和其他古典文集。诗人包括唐宋两朝近 1.4 万古诗人&#xff0c;和两宋时期 1.5 千古词人。数据来源于互联网。每行一首诗&#xff0c;标题在预处理的时候已经去掉了。2.模型参数配置&#xff1a;预先定义模…

唐诗生成器

使用唐诗语料库&#xff0c;经过去噪预处理、分词、生成搭配、生成主题等过程&#xff0c;生成唐诗。 csdn下载地址&#xff1a;http://download.csdn.net/detail/lijiancheng0614/9840952 github上repository地址&#xff1a;https://github.com/lijiancheng0614/poem_genera…

JQuery中的val()函数

JQuery中的val()函数相当于Javascript中的value属性&#xff0c;可以用来设置和获取元素的值。 下面用一个简单的邮箱登陆界面来举个例子&#xff1a; 在默认情况下邮箱的地址输入框和密码输入框都有相应的提示。 要求&#xff1a;当鼠标聚焦在邮箱地址输入框时&#xff0c;提…

【Python】sklearn中的cross_val_score()函数参数

sklearn 中的cross_val_score函数可以用来进行交叉验证&#xff0c;因此十分常用&#xff0c;这里介绍这个函数的参数含义。 sklearn.cross_validation.cross_val_score(estimator, X, yNone, scoringNone, cvNone, n_jobs1, verbose0, fit_paramsNone, pre_dispatch‘2*n_job…

sklearn交叉验证函数cross_val_score用法及参数解释

文章目录 一 、使用示例二、参数含义三、常见的scoring取值1.分类、回归和聚类scoring参数选择2.f1_micro和f1_macro区别3.负均方误差和均方误差 一 、使用示例 import numpy as np from sklearn.model_selection import train_test_split from sklearn import svm from sklea…

java val_Java中是否有val()函数?

慕尼黑的夜晚无繁华 很少有实际用例能够评估String作为Java代码的一个片段是必要的或可取的。也就是说&#xff0c;询问如何做到这一点实际上是XY问题&#xff1a;你实际上有一个不同的问题&#xff0c;可以用不同的方法来解决。先问问自己&#xff0c;这是怎么回事String你想要…