关于RH850系统时钟初始化的分析解读

article/2025/11/6 15:03:30

博主联系方式:QQ:1256153255 ,邮箱:1256153255@qq.com

点击这里可申请RH850开发板
点击这里可申请瑞萨E1仿真器

RH850的时钟初始化,有些是自己配置的,有些是用Smart configure图形配置后自动生成的;不管是自己配置还是自动生成,其原理及步骤都是相同的。在此分析自己配置的情况,代码如下

void R_CGC_Create(void)
{ /* Prepare 16MHz MainOsc */if((CLKCTLMOSCS&0x04u) != 0x4u)                                       /* Check if MainOsc needs to be started */{CLKCTLMOSCC=0x06;                                                    /* Set MainOSC gain for 16MHz */CLKCTLMOSCST=0x00008000;                                             /* Set MainOSC stabilization time to 2ms */protected_write(WPROTRPROTCMD0,WPROTRPROTS0,CLKCTLMOSCE,0x01u);      /* Trigger Enable (protected write) */while ((CLKCTLMOSCS&0x04u) != 0x04u);                                /* Wait for active MainOSC */}if((CLKCTLPLLS&0x04u) != 0x04u)                                      /* Check if PLL needs to be started */{/* Prepare PLLC */CLKCTLPLLC=0x00010B3B;                                             /* 16 MHz MainOSC -> 480MHz VCOUT *//* 5% @ 100kHz SSCG *///    protected_write(WPROTRPROTCMD0,WPROTRPROTS0,CLKCTLPLL0ST,0x1B80);   /* Set stabilization time to recommended value */protected_write(WPROTRPROTCMD1,WPROTRPROTS1,CLKCTLPLLE,0x01u);     /* Enable PLL */while((CLKCTLPLLS&0x04u) != 0x04u){}                               /* Wait for active PLL */}/* CPLLOUT = VCOOUT ?1/4 = 120 MHz (for Premium Device) */protected_write(WPROTRPROTCMD1,WPROTRPROTS1,CLKCTLCKSC_CPUCLKD_CTL,0x11);while(CLKCTLCKSC_CPUCLKD_ACT!=0x11);  /* CPLLOUT -> CPU Clock */ protected_write(WPROTRPROTCMD1,WPROTRPROTS1,CLKCTLCKSC_CPUCLKS_CTL,0x03u);while(CLKCTLCKSC_CPUCLKS_ACT!=0x03u);/* PPLLOUT -> PPLLCLK = 80MHz */protected_write(WPROTRPROTCMD1,WPROTRPROTS1,CLKCTLCKSC_PPLLCLKS_CTL,0x3);while(CLKCTLCKSC_PPLLCLKS_ACT!=0x3);  
}

这么一大段代码,究竟在配置什么?跟着我的手一行行分析吧.
↓↓↓

前言:

首先来一段前戏吧,要不然你都不知道后边在干啥

前戏1:RH850支持哪些时钟源?时钟源频率分别是多少?

UM(User Manual)曰:
在这里插入图片描述
图1

我们的例程选用的时钟源是MainOSC,也就是16MHz的外部晶振源。

前戏2:既然选用MainOSC,那它怎么用?

UM(User Manual)曰:
在这里插入图片描述
图2

前戏3:启用了MainOSC之后,接下来怎么用?

其实对于一款MCU来说,使用到时钟频率的无非就两个单元:①CPU单元 ②外设单元
从UM的时钟树可知,CPU时钟CPUCLK是从PLL来的,外设时钟PPLLCLK也是从PLL来的,而PLL又是从MainOSC来的
所以我们的配置步骤应该是这样的
①配置并启用MainOSC
②配置MainOSC生成PLL
④配置生成PPLLOUT和CPLLOUT
⑤配置生成CPUCLK和PPLLCLK
记住这5步配置,因为整篇博文都是在围绕这5步开展的
在这里插入图片描述
图3

正式分析:

接下来开始分析代码了

①配置并启用MainOSC

if((CLKCTLMOSCS&0x04u) != 0x4u) 

分析这行配置,首先要搞清楚寄存器CLKCTLMOSCS的功能
UM(User Manual)曰:
在这里插入图片描述
图4在这里插入图片描述
图5

也就是说CLKCTLMOSCS. MOSCCLKACT用于指示 MainOSC是否激活状态的,这行代码用于判断MainOSC是否激活态,如果已经激活则跳过,如果没激活则执行以下

CLKCTLMOSCC=0x06;                                                    /* Set MainOSC gain for 16MHz */
CLKCTLMOSCST=0x00008000;                                             /* Set MainOSC stabilization time to 2ms */
protected_write(WPROTRPROTCMD0,WPROTRPROTS0,CLKCTLMOSCE,0x01u);      /* Trigger Enable (protected write) */
while ((CLKCTLMOSCS&0x04u) != 0x04u);                                /* Wait for active MainOSC */

从图2可知,要使用MainOSC需要①选择振荡器 ②设置MainOSC稳定时长 ③激活MainOSC,这段代码就做了这三件事。
至于为什么是这几个值,请大家自行查询手册。

②配置MainOSC生成PLL

在这里插入图片描述
图6

  if((CLKCTLPLLS&0x04u) != 0x04u)                                      /* Check if PLL needs to be started */{/* Prepare PLLC */CLKCTLPLLC=0x00010B3B;                                             /* 16 MHz MainOSC -> 480MHz VCOUT *//* 5% @ 100kHz SSCG *///    protected_write(WPROTRPROTCMD0,WPROTRPROTS0,CLKCTLPLL0ST,0x1B80);   /* Set stabilization time to recommended value */protected_write(WPROTRPROTCMD1,WPROTRPROTS1,CLKCTLPLLE,0x01u);     /* Enable PLL */while((CLKCTLPLLS&0x04u) != 0x04u){}                               /* Wait for active PLL */}

由于时钟源是16Mhz,而我们的CPU频率是80MHz,毫无疑问要倍频。
在这里插入图片描述
图7
从图7可知,配置PLLCLKIN,由MainOSC生成VCOOUT,再由VCOOUT生成CPLLOUT和PPLLOUT
在这里插入图片描述
此处fPLLCLKIN = 16MHz
CLKCTLPLLC=0x00010B3B
↓↓↓↓↓
PLLC = 00000000 00000001 00001011 00111011
↓↓↓↓↓
M[1:0] = 01
N[5:0] = 111011
↓↓↓↓↓
fvcoout = 480MHz
在这里插入图片描述
图8
在这里插入图片描述
图9

④配置生成PPLLOUT和CPLLOUT

由图9可得
CPLLOUT = 80MHz
PPLLOUT = 80MHz

⑤配置生成CPUCLK和PPLLCLK

在这里插入图片描述
图10
在这里插入图片描述
图11
从图10和图11可知,CPUCLK由CPLLOUT生成,CPUCLK = CPLLOUT = 80MHz

  /* CPLLOUT -> CPU Clock */ protected_write(WPROTRPROTCMD1,WPROTRPROTS1,CLKCTLCKSC_CPUCLKS_CTL,0x03u);while(CLKCTLCKSC_CPUCLKS_ACT!=0x03u);

在这里插入图片描述
图12
PPLLCLK = PPLLOUT = 80MHz

  /* PPLLOUT -> PPLLCLK = 80MHz */protected_write(WPROTRPROTCMD1,WPROTRPROTS1,CLKCTLCKSC_PPLLCLKS_CTL,0x3);while(CLKCTLCKSC_PPLLCLKS_ACT!=0x3);  

至此,时钟初始化配置完成。


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

相关文章

RH850系列芯片Mcal代码生成教程

RH850系列芯片Mcal代码生成教程 Rh850 mcal的配置、生成代码不同于NXP、英飞凌等芯片,并非使用EB,而是使用Vector工具加Makefile组合的方式,比较繁琐。本文将以RH850/F1KM的Can模块为例,讲解Rh850的代码生成流程。 相关依赖 首…

瑞萨RH850 CS+集成开发环境Sections字段说明

在文章:瑞萨RH850 CS环境下设置堆和栈空间和瑞萨IDE:CS for CC进行BootLoader升级时开发环境配置中,讲解到Sections字段的使用。 那么Sections字段到底什么含义呢,下表进行了梳理和总结: 手册全文请参见:RH…

RH850进不去烧写

有遇到输入晶振进不去界面的嘛,引脚第二次梳理一次都是正确的,cs➕接法也进不去,请问有遇到这种情况的嘛,谢谢指点。(https://img-blog.csdnimg.cn/335b57577edd4feabd1226ab1666d154.jpg) can线不接的话板子会在上电1-2秒复位&a…

11、RH850 中断配置

前言: 单片机的中断是由单片机片内的中断系统来实现的。当中断请求源(简称中断源)发出中断请求时,如果中断请求被允许的话,单片机暂时中止当前正在执行的主程序,转到中断服务程序处理中断服务请求,处理完中…

RH850F1x Starter Kit V3用户手册(中文翻译版)

版权声明 本博文系广州欧科曼科技有限公司所有,转载请注明出处。 广州欧科曼科技有限公司致力于瑞萨MCU及周边相关产品开发设计。 email:1256153255qq.com 需要翻译版PDF文档,请联系博主QQ获取 website for purchase 瑞萨RH850开发板 and 瑞…

RH850F1L 移植freeRTOS

学习基于GHS将freeRTOS移植到RH850 F1L的过程 移植过程参考github的一个教程,其中有部分修改优化,但是不多。 GitHub - mikisama/FreeRTOS_RH850: FreeRTOS port for Renesas RH850 支持gcc、ghs、ccrh、IAR 4种编译器。 有问题一起讨论,…

瑞萨RH850 FCL、FDL和EEL库的配置和使用

目录 1、FCL库 1.1、配置FCL库 1.2、使用FCL库 2、FDL库 2.1、配置FDL库 2.2、使用FDL库 3、EEL库 瑞萨RH850 Flash中有两种存储类型:Mapping of Code Flash Memory和Mapping of Data Flash Memory。 Mapping of Code Flash Memory存储代码,Mappi…

基于IAR for RH850的瑞萨RH850 FCL库用法介绍

博主联系方式:QQ:1256153255 ,email:1256153255qq.com website for get 瑞萨RH850F1x开发板和瑞萨E1仿真器 1、简介 本文介绍了RH850 FCL的使用以及相关的经验技巧,使用的环境如下 MCU:瑞萨RH850F1K 型号…

瑞萨RH850开发环境搭建

简述 本文介绍瑞萨RH850开发环境搭建。 内部包含cancasexl的驱动安装,canoe的软件安装,IAR的软件安装,E1的自检等。 当前版本:V1.0 email:1256153255qq.com website for get 瑞萨RH850开发板 and 瑞萨E1仿真器 变…

2、RH850外设时钟选择及配置

前言 上一篇文章完成了RH850时钟源寄存器配置,外设要正常工作,必须要配置对应的时钟,这篇文章说明RH850外设时钟配置。 时钟选择寄存器 下面表格是RH850-F1K技术规格书列出的外设时钟寄存器。 外设时钟寄存器基本都相同,如TAUJ代表…

3、RH850端口说明及及复用功能配置

RH850端口有3种工作模式 通用IO口(普通数字口)。PMC控制寄存器对应bit为0。软件配置复用模式。PMC控制寄存器对应bit为1。PIPC寄存器对应bit为0。硬件直接连接模式。PMC控制寄存器对应bit为1。PIPC寄存器对应bit为1。 主要控制寄存器 PIPC 0: 端口由软件配置(software I/O c…

10、RH850 CAN通讯功能和配置

前言: CAN 是 Controller Area Network 的缩写(以下称为 CAN),是 ISO国际标准化的串行通信协议。 在当前的汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统被开发了出来。由于…

瑞萨RH850芯片在IAR和CS+编译环境下设置堆(heap)和栈(stack)的大小

博主联系方式:QQ:1256153255 ,邮箱:1256153255qq.com 点击这里了解RH850开发板 点击这里了解瑞萨E1仿真器 点击这里了解GHS Multi 在实际使用RH850开发的过程中,有时会需要调整芯片的堆栈空间大小。 对于RH850芯片&…

播放rtmp在线网站及播放器

2019独角兽企业重金招聘Python工程师标准>>> 网站地址 http://www.cutv.com/demo/live_test.swf 推流地址 rtmp://ip:8005/live/32010020160918113426717107expxqe 或者采用flash player 也可以 -----------------------------------------------------------------…

rtmp/rtsp播放器

相信大家在做rtmp、rtsp直播的时候,最大的困惑就是选个靠谱的播放器,直播的延迟,一定意义上说,90%的取决于播放器的好坏。 那啥样的播放器才是靠谱的播放器呢?笔者以为,稳定、低延迟、支持路数多&#xff0…

网页可以播放RTMP视频流?支持RTMP的网页播放器

随着4G/5G网络的发展,以及有限带宽越来越大,人们对视频直播的需求也越来越多。不仅普通的互联网直播发展很快,传统的安防监控也开始互联网化,走起了互联网直播的路。雪亮工程、明厨亮灶、手机看店、智慧幼儿园监控等等都是将传统的…

rtmp播放器,使用videojs播放,稳定

rtmp播放器测试dome下载 https://download.csdn.net/download/zhou_yongzhe/10923743 三步走 1.把video-jsplay文件夹下的文件放到nginx服务器的html文件夹下(Ubuntu系统nginx的路径为、usr/local/nginx/html/) 2.启动ngixn 3.如果是本机测试&#x…

RTMP播放器网页互联网直播音视频流媒体播放器EasyPlayer-RTMP-iOS播放H265格式的视频源

背景分析 RTMP是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。RTMP是一种设计用来进行实时数据通信的网络协议,主要用…

windows下支持H265的rtmp ffplay播放器 ffmpeg的编译

前几天在项目中添加了rtmp对H265的支持,需要推流端 服务器端 以及播放器三个方面的处理。功能已经实现 ,感兴趣的可以 去我的上一篇文章看下。 RTMP 推送H265的实现(推流端、服务器、播放端)ffmpeg 播放H265 之前是在的播放器是在…

服务器(公网推rtmp流),网页本地(qq浏览器)播放rtmp流,且可切换rtmp流播放。使用了video.js、videojs-flash.js、jquery-3.4.1.js和我自己写的一个js

问题: 最开始我想在下拉列表的值发生变化时将video标签包含的source标签里面的src中的rtmp流直接替换掉,达到切换rtmp源播放的目的,但是一直无法生效,最后我想每个源直接做一个html页面,发现如果有几百个源就需要做很多…