当前位置: 首页 > news >正文

Z20K118库中寄存器及其库函数封装-CLOCK库

模块框图

 1.系统时钟控制_时钟状态寄存器(SCC)

 4个。4个位域表示4个参数的状态:1个系统时钟源,1个总线分频系数,1个内核分频系数,1个闪存(SLOW CLOCK)分频系数。

内核分频系数可理解为系统时钟分频系数,因为其位置紧挨着系统时钟之后,总线、内核等所有模块之前,此时内核模块本身不分频。参考上图。

除了CFG末尾的锁定位,SCC_CFG寄存器和SCC_CST寄存器的所有位名称完全一致,前者用于配置相关参数,后者用于读取相关参数。

1-1 

static uint32_t CLK_GetSysClkFreq(uint32_t oscFreq)

返回系统时钟频率。读取本寄存器的SCS位判断系统时钟源(FIRC64M/OSC40M两种),若为FIRC64M直接返回64M,若为OSC40M则返回输入的参数,该函数的参数不具备设置时钟频率的功能。1个,核心为返回系统时钟源。

1-2

static void CLK_WaitOSC40MSwitchReady(void)

等待OSC切换(方波切晶振)。1个,内核分频系数。该函数由其他库函数调用,用户无需使用只需了解。空循环等待外部两种OSC振荡器切换完成。外部OSC40M可同时接晶体OSC和方波OSC,当方波OSC切换到晶体OSC时需要使用该函数进行切换等待,反过来切换则无需等待。本质上就是单纯的空循环一定次数,默认为3500次(厂商设定),若设定了内核分频系数,则空循环次数/内核分频系数,例如2分频的循环次数为3500/2=1750。因此该函数的等待时间不会根据系统时钟频率发生改变,始终等于OSC振荡器40MHz时钟执行3500次,等待时间固定。

1-3

CLK_System_t CLK_GetSysClkSrc(void)

读取系统时钟源(OSC40M/FIRC64M)。实际上读取本寄存器的SCS位判断。1个。

1-4

uint32_t CLK_GetModuleClkFreq(CLK_Module_t module,uint32_t oscFreq)

获取模块频率。参考8-2。 

2.系统时钟控制_FIRC控制状态寄存器(SCC)

 

9个。5个为配置FIRC时钟:1.使能 2.停止模式使能 3.FIRC时钟监视器中断或复位使能 4.FIRC时钟监视器中断使能 5.选择监视器检测到丢失信号时中断还是复位。3个位FIRC时钟状态:1.就绪 2.被选为系统时钟 3.监视器检测到丢失信号 。1个锁定位。

FIRC控制状态寄存器与OSC控制状态寄存器内部为一一对应关系。

2-1

void CLK_FIRC64MEnable(ControlState_t stopModeEn)

正常模式和停止模式使能。2个。

2-2

void CLK_FIRC64MDisable(void)

正常模式失能,1个。

2-3

void CLK_FIRC64MMonitorEnable(CLK_MonitorAct_t act)

使能和配置FIRC的监视器为中断或复位。3个,1个使能监视器,1个使能监视器处理(中断或复位),1个选择处理方式(中断或复位)。

2-4

void CLK_FIRC64MMonitorDisable(void)

失能FIRC监视器。1个。

3.系统时钟控制_OSC控制状态寄存器&OSC配置寄存器(SCC)

CS: 9个。5个为配置OSC时钟:1.使能 2.停止模式使能 3.OSC时钟监视器中断或复位使能 4.OSC时钟监视器中断使能 5.选择监视器检测到丢失信号时中断还是复位。3个位OSC时钟状态:1.就绪 2.被选为系统时钟 3.监视器检测到丢失信号 。1个锁定位。

CFG:3个。1个选择2种OSC,1个使能循环模式,1个设置高频或低频模式。

FIRC控制状态寄存器与OSC控制状态寄存器内部为一一对应关系。

3-1 

ResultStatus_t CLK_OSC40MEnable(uint32_t freq, ControlState_t stopModeEn,CLK_OscMode_t mode)

2种OSC时钟的选择、配置和使能。厂商建议使用最下方函数而不是本函数,原因在于参数freq配置的时钟频率可能不精准。CS1个,CFG3个即全部。

先配置停止模式(CS),再根据输入频率设置低频/高频模式(CFG),再选择2种OSC时钟(CFG),再使能循环模式(CFG),最后使能OSC时钟并等待使能完成标志位。

等待标志位使用函数,4种时钟源(包括非系统时钟源)使能时都要调用该函数。

CLK_OSC40MEnable2()

3-2 

ResultStatus_t CLK_OSC40MEnable2(CLK_OscFreqMode_t freqMode, ControlState_t stopModeEn, CLK_OscMode_t mode)

OSC时钟源配置和使能。与3-1基本相同,唯一区别在于3-1的参数1为频率,函数内部通过频率设置高频模式或低频模式,本函数参数1为结构体直接设置高频模式或低频模式,这样可避免3-1输入的频率值为错误值,无需输入32位整型使得本函数更安全。

3-3 

void CLK_OSC40MDisable(void)

失能OSC40M时钟源。CS1个,CFG1个。即先OSCEN位置0失能OSC,再OLMEN置0关闭循环模式。 

3-4

void CLK_OSC40MMonitorEnable(CLK_MonitorAct_t act)

使能和配置OSC的监视器为中断或复位。3个CS,1个使能监视器,1个使能监视器处理(中断或复位),1个选择处理方式(中断或复位)。

3-5

void CLK_OSC40MMonitorDisable(void)

失能OSC监视器。1个CS。

4:系统时钟控制_时钟配置寄存器(SCC)

 5个。4个位域表示4个参数的状态:1个系统时钟源,1个总线分频系数,1个内核分频系数,1个闪存(SLOW CLOCK)分频系数。1个锁定位。

除了CFG末尾的锁定位,SCC_CFG寄存器和SCC_CST寄存器的所有位名称完全一致,前者用于配置相关参数,后者用于读取相关参数。

4-1 

ResultStatus_t CLK_SysClkSrc(CLK_System_t clk)

系统时钟源选择(OSC40M/FIRC64M)。1个。

4-2  

void CLK_SetClkDivider(CLK_Module_t module, CLK_Divider_t divider)

总线/外设/内核/闪存/的时钟分频系数配置。若为总线/外设/内核则配置本寄存器,每个各1位域。若为外设则配置对应的PARCC寄存器的相应位域,1个。

5.系统时钟控制_时钟输出配置寄存器(SCC)

1个。选择引脚的时钟输出源,5种选择:FIRC65M,OSC40M,SCC SLOW CLK,SCC BUS CLK,SCC CORE CLK。相关封装库函数参考10.芯片控制寄存器。

6.电源管理单元_LPO32K控制寄存器(PMU)

2个。1个使能,1个就绪标志位。 

6-1

void CLK_LPO32KEnable(void)

使能LPO32K时钟。1个。

6-2

void CLK_LPO32KDisable(void)

失能LPO32K时钟。1个。

7.RTC时钟_控制和状态寄存器(RTC)

RTC不仅可以选择OSC32K作为时钟源,还可选择LPO作为时钟源,本次只讨论OSC32K。 

 12个位域。仅配置其中2个。一个CRYSTAL_EN位使能OSC,一个EXTAL_32K_EN选择2种OSC。

7-1 

void CLK_OSC32KEnable(CLK_OscMode_t mode)

配置和使能OSC32K时钟。 2个。

7-2 

void CLK_OSC32KDisable(void)

失能OSC32K时钟。 2个。

8.外设访问/复位/时钟控制寄存器(PARCC)

11个位域。 

8-1 

ResultStatus_t CLK_ModuleSrc(CLK_Module_t module, CLK_Src_t clockSource)

外设时钟源选择。参数1为外设名,参数2为时钟源。1个。

8-2

uint32_t CLK_GetModuleClkFreq(CLK_Module_t module,uint32_t oscFreq)

/外设/内核/总线/慢速时钟/的时钟频率获取。参数1为需要读取时钟频率的模块。

外设:读取PARCC(约11位域)的CLKMUX得到时钟源和CLKDIV得到分频系数,相除得到频率。(若外设时钟源为OSC则参数2为其原始频率)。2个PARCC。

内核:读取SCC_CST寄存器的DIVCORE位得到分频系数,调用CLK_GetSysClkFreq(oscFreq)函数得到原始频率,后除前得内核频率。2个CST。

总线:在读取内核分频系数和原始频率的基础上再读取自身分频系数,内核频率除自身分频系数可得总线频率。3个CST。

闪存:在读取内核分频系数和原始频率的基础上再读取自身分频系数,内核频率除自身分频系数可得闪存频率。3个CST。

9.系统控制模块_定时器配置寄存器(SCM)

本寄存器3个位域,分别对应3个定时器的外部引脚选择。

9-1

void CLK_TimExternalClkSrc(CLK_TIM_t timId, CLK_TIMExtClk_t clockSrc)

配置定时器的外部引脚输入时钟源。参数1为定时器号,参数2为外部引脚号(CLK_TIM_PTB1/CLK_TIM_PTE1_PTA5/CLK_TIM_PTE8)。根据参数1选择不同位域配置不同定时器,参数2为该位域填入值。

10.系统控制模块_芯片控制寄存器(SCM)

3个位域,用于在引脚输出时钟信号。CLKOUTSEL配置时钟输出源(LPO32,OSC32或SCC系统时钟输出 ),CLKOUTDIV配置时钟输出分频系数。CLKOUTEN配置时钟输出使能。本寄存器配置一定要按照如下顺序:选择时钟源(CLKOUTSEL),配置分频系数(CLKOUTDIV),最后使能时钟(CLKOUTEN)。

10-1 

void CLK_ClkOutEnable(CLK_OutSrc_t outSrc, CLK_OutDiv_t divider)

引脚输出时钟信号的使能和配置。3个。先根据参数1配置引脚的时钟输出源,7种时钟输出源。CLKOUTSEL为10b输出LPO32K,为01b输出OSC32K,为00b则输出系统时钟(由5.时钟输出配置寄存器配置)。再根据参数2配置引脚时钟输出分频系数。最后使能。

10-2

void CLK_ClkOutDisable(void)

引脚输出时钟信号失能。1个。

X.多寄存器和通用函数

X-1

FlagStatus_t CLK_GetClkStatus(CLK_Src_t clockSource)

获取时钟是否就绪状态。根据4种时钟源分别读取PMU_LPO_32K_CFG/SCC_FIRCCS/ RTC_CSR/SCC_OSCCS的对应RDY位返回时钟准备就绪信息。

X-2

ResultStatus_t CLK_WaitClkReady(CLK_Src_t clockSource)

等待时钟就绪。通常由其他库函数调用。进行10w次计数,每次计数根据4种时钟源分别读取PMU_LPO_32K_CFG/SCC_FIRCCS/ RTC_CSR/SCC_OSCCS的对应RDY位,若RDY位置1则跳出循环代表时钟就绪,计满则时钟就绪失败。

X-3

void SCC_InstallCallBackFunc(CLK_Int_t intId,isr_cb_t * cbFun)

安装回调函数。 

X-4 

void SCC_IntClear(CLK_Int_t intId)

清除监视器丢失信号的中断标志位。根据配置将SCC_FIRCCS或SCC_OSCCS的OSCLOC或FIRCLOC置1即为清除。

X-5 

void SCC_DriverIRQHandler(void)

 中断处理驱动函数。

http://www.lryc.cn/news/610879.html

相关文章:

  • 通信算法之298: verilog语法generate和for介绍
  • 【学习笔记】FTP库函数学习
  • uniapp云打包打包安卓app失败,显示:本地安装包生成失败,请重试或者切换到非安心打包模式进行打包
  • 多模态新方向|从数据融合到场景落地,解锁视觉感知新范式
  • SOLIDWORKS 买断许可和订阅许可的资金流影响分析-代理商硕迪科技
  • Windows 安装 RabbitMQ 消息队列超详细步骤(附加详细操作截屏)
  • 项目设计模式草稿纸
  • Android --- Bug调查经验记录
  • zyh贪心类题目补题报告
  • 防御保护07-08
  • 游戏行业DDoS攻防实战指南
  • DDoS 防护的未来趋势AI 如何改变安全行业
  • Nginx 学习
  • Gradle 仓库管理模式深度解析与最佳实践指南
  • C语言自定义类型深度解析:联合体与枚举
  • 工业设备远程监控的 “颠覆性突破”:边缘计算网关让千里之外如在眼前
  • BUUCTF杂项MISC题解题思路(3)(不断更新)
  • Android 性能基准测试(Benchmark)完全指南:专业方法与最佳实践
  • 视频水印技术中的变换域嵌入方法对比分析
  • 物联网后端系统架构:从基础到AI驱动的未来 - 第十章:AI促进IOT领域发生革命式发展
  • STM32H7+FreeRTOS+LwIP移植EtherCAT开源主站SOEM
  • UE5 安装Visual Studio
  • 百胜软件胜券AI「测试用例」智能体:重塑测试流程,释放效率新势能
  • Modbus tcp 批量写线圈状态
  • 机器翻译的局限性:歧义、文化差异、专业术语翻译难题
  • 推特矩阵背后的多账号协同高效传播体系
  • 电感矩阵-信号完整性分析
  • sqli-labs靶场less36-less40
  • 是的,或许这就是意识!
  • 【qt5_study】1.Hello world