AC7801时钟配置流程
一 默认配置
在启动文件中,已经对时钟进行了初始化,默认按外部8M晶振,配置系统时钟为48MHZ,APB为系统时钟的2分频,为24MHZ。在system_ac780x.c文件中,可以找到下面这个系统初始化函数,里面有SetSysClock()函数,对时钟进行了初始化。
void SystemInit (void)
{
#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U)SCB->VTOR = (uint32_t) &__Vectors;
#endifSystemCoreClock = SYSTEM_CLOCK;SetEflashClock();SetSysClock();CKGEN_SetAPBClockDivider(APBCLK_DIV);//SPM_EnableLVD(DISABLE); //disable LVD if need
}
如果需要配置不一样的时钟,可以通过系统文件里的宏定义修改,但并不建议在系统文件上修改,可以自己写配置函数。
二 时钟模块简介
1.时钟源:
高速内部时钟(HSI):内部 RC 振荡器提供 8MHz 时钟源
外部高速时钟(HSE):外部 OSC 提供 4MHZ ~30MHz 晶振
低速内部时钟(LSI): 内部低速 RC OSC 提供 32KHz 时钟源
系统时钟 (SYSPLL): 提供高达 48MHz 的高速时钟
2.系统时钟框图
手册中的框图可以帮助我们更好的理解时钟的每个配置步骤。

输入频率:支持4~30MHZ
VCO = 输入频率 * FBKDIV / PREDIV
系统时钟 = VCO / POSDIV / SYSCLKDIV
同时,手册中也提供了典型的配置参数供参考。因为有些点的频率值是有限制的,比如VCO的频率范围是0.5GHZ~1.5GHZ,那么直接参考典型配置参考表就肯定不会有问题,找到合适的参数即可。

三 自定义时钟
以AC7801的开发板做测试,板子上外部晶振为8MHZ。这里以配置系统时钟为48MHZ,APB时钟为24MHZ为例。根据上面的参考表,可选择PREDIV = 1,FBKDIV = 96,POSDIV=16,VOC = 8*96/16 =48M。相关寄存器如下图,可知:SYSPLL1_PREDIV为0,SYSPLL1_POSDIV为8,SYSPLL1_FBKDIV为96。

为了直观的测试时钟的频率,用一个定时器,定时产生中断,在中断中翻转一个I/O电平,以此来测时钟频率。定时器初始化如下:定时器的时钟源为APB时钟24M,配置定时器装载值为24000000,则1S产生一次中断。
void TIMER_Config(void)
{TIMER_ConfigType config; memset(&config, 0, sizeof(config));config.periodValue = 24000000; /*!< TIMER channel period value */config.linkModeEn = DISABLE ; /*!< TIMER channel linkmode enable */config.interruptEn = ENABLE ; /*!< TIMER channel interrupt enable */config.callBack = TIM_CallBack; /*!< TIMER channel callback pointer */config.timerEn = ENABLE; /*!< TIMER channel enable/disable */TIMER_Init(TIMER_CHANNEL0, &config); //TIMER0初始化配置
}
1. 中断处理
void TIM_CallBack(void *device, uint32_t wpara, uint32_t lpara)
{if (wpara & TIMER_CHANNEL_TF_T**_Msk){GPIOC->ODR ^= (1<<7);}
}
2.外部时钟配置——库函数
void SYS_CLOCK_HSE(void)
{/* check if xosc enable success? */if (SPM_EnableXOSC(ENABLE) == SUCCESS){CKGEN_SetPLLReference(PLL_REF_EXTERNAL_OSC);//PLL参考时钟选择外部振荡器}else /* if xosc enable fail, */{}/* set system clock divider */CKGEN_SetSysclkDiv(0);//系统时钟1分频/* check if pll enable success? */if (SPM_EnablePLL(ENABLE) == SUCCESS)/使能SYSPLL{CKGEN_SetPllPrevDiv(0);//PREDIVCKGEN_SetPllPostDiv(8);//PLL_POSDIVCKGEN_SetPllFeedbackDiv(96);//PLL_FBKDIVCKGEN_SetSysclkSrc(SYSCLK_SRC_PLL_OUTPUT);//系统时钟源选择PLL时钟}else /* pll enable fail */{}CKGEN_SetAPBClockDivider(APBCLK_DIVIDER_2);//APB时钟为系统时钟2分频
}
3.外部时钟配置——寄存器
外部时钟的使能以及就绪标志,PLL使能以及就绪标志等,在第6章系统电源管理SPM模块下的SPM_PWR_MGR_CFG1寄存器里。
配置过程比较常规,使能时钟——>等待时钟就绪——>PLL时钟源选择——>时钟分频及倍频配置——>系统时钟源选择
void SYS_CLOCK_HSE_REG(void)
{SPM->PWR_MGR_CFG1 |= 1<<29;//外部高速时钟XOSC使能while((SPM->PWR_MGR_CFG1 &(0X80000000))==0)//等待XOSC就绪{}SPM->PWR_MGR_CFG1 |= (1<<27);//SYSPLL使能while((SPM->PWR_MGR_CFG1 &(0X40000000))==0)//等待PLL时钟就绪{}CKGEN->CTRL |= (1<<20);//PLL参考时钟选择外部振荡器CKGEN->SYSPLL1_CFG0 = ((CKGEN->SYSPLL1_CFG0 & (~(uint32_t)(0x3<<30)))|(0<<30)); //PREDIVCKGEN->SYSPLL1_CFG0 = ((CKGEN->SYSPLL1_CFG0 & (~(uint32_t)(0x1f<<25)))|(8<<25)); //POSDIVCKGEN->SYSPLL1_CFG0 = ((CKGEN->SYSPLL1_CFG0 & (~(uint32_t)(0xff<<15)))|(96<<15)); //FBKDIVCKGEN->CTRL |= ((CKGEN->CTRL & (~(3<<4)))|(0<<4)); //系统时钟分频为1CKGEN->CTRL |= (1<<0);//系统时钟源选择PLL时钟CKGEN->CTRL |= (1<<8);//APB为系统时钟2分频
}
4.内部时钟配置——库函数
采用内部高速8M时钟源做配置
void SYS_CLOCK_HSI(void)
{CKGEN_SetPLLReference(PLL_REF_INTERAL_OSC);//PLL参考时钟选择内部振荡器CKGEN_SetPllPrevDiv(0); //PREDIVCKGEN_SetPllPostDiv(8); //POSDIVCKGEN_SetPllFeedbackDiv(96); //FBKDIVCKGEN_SetSysclkDiv(0); //系统时钟1分频/* check if pll enable success? */if (SPM_EnablePLL(ENABLE) == SUCCESS){/* pll enable success,use pll output as system clock src */CKGEN_SetSysclkSrc(SYSCLK_SRC_PLL_OUTPUT);//系统时钟源选择PLL时钟}else{/* pll enable fail */}CKGEN_SetAPBClockDivider(APBCLK_DIVIDER_2);//APB为系统时钟2分频
}
5.内部时钟配置——寄存器
void SYS_CLOCK_HSI_REG(void)
{CKGEN->CTRL &= ~(1<<20);//PLL参考时钟选择内部振荡器SPM->PWR_MGR_CFG1 |= (1<<27);//SYSPLL使能while((SPM->PWR_MGR_CFG1 &(0X40000000))==0)//等待PLL时钟就绪{} CKGEN->SYSPLL1_CFG0 = ((CKGEN->SYSPLL1_CFG0 & (~(uint32_t)(0x3<<30)))|(0<<30)); //PREDIVCKGEN->SYSPLL1_CFG0 = ((CKGEN->SYSPLL1_CFG0 & (~(uint32_t)(0x1f<<25)))|(8<<25)); //POSDIVCKGEN->SYSPLL1_CFG0 = ((CKGEN->SYSPLL1_CFG0 & (~(uint32_t)(0xff<<15)))|(96<<15)); //FBKDIVCKGEN->CTRL |= ((CKGEN->CTRL & (~(3<<4)))|(0<<4)); //SYSCLK_DIV,系统时钟1分频CKGEN->CTRL |= (1<<0);//系统时钟源选择PLL时钟CKGEN->CTRL |= (1<<8);//APB为系统时钟2分频
}
6.主函数
主函数中调用时钟初始化函数,并对TIMER0配置,同时需要对使用到的I/O进行配置。
int main(void)
{//SYS_CLOCK_HSE();SYS_CLOCK_HSE_REG();//SYS_CLOCK_HSI();//SYS_CLOCK_HSI_REG();TIMER_Config();GPIO_SetFunc(GPIOC, GPIO_PIN7, GPIO_FUN0);/*功能复用选择*/GPIO_SetDir(GPIOC, GPIO_PIN7, GPIO_OUT);GPIO_SetPinLevel(GPIOC, GPIO_PIN7, GPIO_LEVEL_HIGH);while(1){}
}
相关文章:
AC7801时钟配置流程
一 默认配置 在启动文件中,已经对时钟进行了初始化,默认按外部8M晶振,配置系统时钟为48MHZ,APB为系统时钟的2分频,为24MHZ。在system_ac780x.c文件中,可以找到下面这个系统初始化函数,里面有Se…...
加密与安全_Java 加密体系 (JCA) 和 常用的开源密码库
文章目录 Java Cryptography Architecture (JCA)开源国密库国密算法对称加密(DES/AES⇒SM4)非对称加密(RSA/ECC⇒SM2)散列(摘要/哈希)算法(MD5/SHA⇒SM3) 在线生成公钥私钥对,RSA公私钥生成参考…...
读书笔记-《Spring技术内幕》(三)MVC与Web环境
前面我们学习了 Spring 最核心的 IoC 与 AOP 模块(读书笔记-《Spring技术内幕》(一)IoC容器的实现、读书笔记-《Spring技术内幕》(二)AOP的实现),接下来继续学习 MVC,其同样也是经典…...
k8s及常用对象简介
文章目录 一、k8s是什么应用程序早期部署形式容器的引入k8s的作用 二、k8s中的常用对象1、Node获取node信息 2、Namespacenamespace的使用 3、Pod生命周期pod的使用 4、DaemonSetDaemonSet的使用 5、Deployment创建deploy 6、ReplicaSet7、StatefulSet创建StatefulSet 8、更新操…...
HTTPS数字证书验证论述
1 概述 网络请求方式通常分为两种,分别是HTTP请求和HTTPS请求,其中HTTP的传输属于明文传输,在传输的过程中容易被人截取并且偷窥其中的内容,而HTTPS是一种在HTTP的基础上加了SSL/TLS层(安全套接层)的安全的…...
【高考志愿】地质资源与地质工程
目录 一、专业概述 1.1 专业定义 1.2 主要课程 1.3 专业培养目标 二、就业前景和考研方向 三、工作特点和挑战 四、如何培养核心竞争力 五、 地质资源与地质工程专业排名 六、结语 关于高考志愿选择地质资源与地质工程专业,以下是一些详细的介绍和参考信息…...
全网最佳硕士研究生复试简历模板
硕士研究生复试简历模板 ✨ 简介 提供了一个适用于国内硕士研究生复试的个人简历模板。该模板通过统一的“样式”形成规范的Word格式,是目前研究生复试的最佳简历模板之一。模板使用“华文中宋”字体,如您的电脑中未安装此字体,请提前安装。…...
Rocky Linux 9 系统OpenSSH CVE-2024-6387 漏洞修复
Rocky Linux 9系统 OpenSSH CVE-2024-6387 漏洞修复 1、漏洞修复2、修复思路3、修复方案3.1、方案一3.2、方案二 4、总结5、参考 1、漏洞修复 CVE-2024-6387:regreSSHion:OpenSSH 服务器中的远程代码执行(RCE),至少在…...
Sping源码(九)—— Bean的初始化(非懒加载)—mergeBeanDefinitionPostProcessor
序言 前几篇文章详细介绍了Spring中实例化Bean的各种方式,其中包括采用FactoryBean的方式创建对象、使用反射创建对象、自定义BeanFactoryPostProcessor以及构造器方式创建对象。 创建对象 这里再来简单回顾一下对象的创建,不知道大家有没有这样一个疑…...
labview技巧——AMC框架安装
AMC工具包的核心概念是队列,队列是一种先进先出(FIFO,First In First Out)的数据结构,适用于处理并发和异步任务。在LabVIEW中,队列可以用于在不同VI之间传递数据,确保消息的有序处理࿰…...
解锁分布式云多集群统一监控的云上最佳实践
作者:在峰 引言 在当今数字化转型加速的时代,随着混合云、多云多集群环境等技术被众多企业广泛应用,分布式云架构已成为众多企业和组织推动业务创新、实现弹性扩展的首选,分布式云容器平台 ACK One(Distributed Clou…...
学会拥抱Python六剑客,提高编程效率
在Python语言中,有六个强大的工具,它们被称为"Python六剑客"。而Python六剑客指的是Python中常用的六种功能强大且灵活的工具,它们分别是“切片(Slicing),推导列表(List Comprehensio…...
mysql 根据当前时间筛选某个时间范围内的数据
1.根据天数筛选 SELECT * FROM coupons WHERE NOW() BETWEEN start_time AND end_time; 在这个查询中,NOW()函数返回当前的日期和时间。BETWEEN操作符用于检查NOW()返回的当前时间是否在start_time和end_time之间(包括这两个时间)。 注意&a…...
Linux 常用指令详解
Linux 是一个强大而灵活的操作系统,掌握常用的 Linux 指令是使用和管理 Linux 系统的基础。本文将介绍一些常用的 Linux 指令,并附上 Vim 和 g 的常用指令说明,帮助你更好地进行开发和操作。 1. 基本文件操作指令 1.1 显示目录内容 ls常用…...
【简单讲解下npm常用命令】
🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…...
Header Location重定向机制解析与应用
Header Location重定向机制解析与应用 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将深入探讨HTTP中的Header Location重定向机制,以及在…...
硅纪元AI应用推荐 | 国产创作引擎即梦AI助力创作者探索创作新境界
“硅纪元AI应用推荐”栏目,为您精选最新、最实用的人工智能应用,无论您是AI发烧友还是新手,都能在这里找到提升生活和工作的利器。与我们一起探索AI的无限可能,开启智慧新时代! 在人工智能快速发展的今天,各…...
使用TableGeneration生成已标注的表格数据用于表格识别
利用 TableGeneration 生成多样化表格数据 TableGeneration 简介环境准备chrome浏览器(Linux下推荐)火狐浏览器(Mac下推荐) 生成表格生成表格 参数说明结论 在数据生成和处理领域,表格数据的生成是一个常见需求,尤其是在机器学习和数据分析领域。今天&am…...
赛目科技三度递表:净利率及资产回报率不断下滑,经营成本越来越高
《港湾商业观察》施子夫 5月29日,北京赛目科技股份有限公司(以下简称,赛目科技)第三次递表港交所,公司拟主板上市,独家保荐机构为光银国际。 公开信息显示,赛目科技此前曾于2022年12月&#x…...
【QT】概述|对象树模型|两种控件模式|信号和槽|lambda
目录 什么是QT 特点 QT程序 main函数 QT按钮 纯代码模式 图形化模式 对象树模型 信号和槽 连接与断开 自动连接 断开连接 信号的发射 lambda表达式 基本语法 捕获列表 Lambda表达式用于信号与槽的连接 例如 什么是QT Qt是一个跨平台的C图形用户界面应用…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
