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

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时钟配置流程

一 默认配置 在启动文件中&#xff0c;已经对时钟进行了初始化&#xff0c;默认按外部8M晶振&#xff0c;配置系统时钟为48MHZ&#xff0c;APB为系统时钟的2分频&#xff0c;为24MHZ。在system_ac780x.c文件中&#xff0c;可以找到下面这个系统初始化函数&#xff0c;里面有Se…...

加密与安全_Java 加密体系 (JCA) 和 常用的开源密码库

文章目录 Java Cryptography Architecture (JCA)开源国密库国密算法对称加密&#xff08;DES/AES⇒SM4&#xff09;非对称加密&#xff08;RSA/ECC⇒SM2&#xff09;散列(摘要/哈希)算法&#xff08;MD5/SHA⇒SM3&#xff09; 在线生成公钥私钥对&#xff0c;RSA公私钥生成参考…...

读书笔记-《Spring技术内幕》(三)MVC与Web环境

前面我们学习了 Spring 最核心的 IoC 与 AOP 模块&#xff08;读书笔记-《Spring技术内幕》&#xff08;一&#xff09;IoC容器的实现、读书笔记-《Spring技术内幕》&#xff08;二&#xff09;AOP的实现&#xff09;&#xff0c;接下来继续学习 MVC&#xff0c;其同样也是经典…...

k8s及常用对象简介

文章目录 一、k8s是什么应用程序早期部署形式容器的引入k8s的作用 二、k8s中的常用对象1、Node获取node信息 2、Namespacenamespace的使用 3、Pod生命周期pod的使用 4、DaemonSetDaemonSet的使用 5、Deployment创建deploy 6、ReplicaSet7、StatefulSet创建StatefulSet 8、更新操…...

HTTPS数字证书验证论述

1 概述 网络请求方式通常分为两种&#xff0c;分别是HTTP请求和HTTPS请求&#xff0c;其中HTTP的传输属于明文传输&#xff0c;在传输的过程中容易被人截取并且偷窥其中的内容&#xff0c;而HTTPS是一种在HTTP的基础上加了SSL/TLS层&#xff08;安全套接层&#xff09;的安全的…...

【高考志愿】地质资源与地质工程

目录 一、专业概述 1.1 专业定义 1.2 主要课程 1.3 专业培养目标 二、就业前景和考研方向 三、工作特点和挑战 四、如何培养核心竞争力 五、 地质资源与地质工程专业排名 六、结语 关于高考志愿选择地质资源与地质工程专业&#xff0c;以下是一些详细的介绍和参考信息…...

全网最佳硕士研究生复试简历模板

硕士研究生复试简历模板 ✨ 简介 提供了一个适用于国内硕士研究生复试的个人简历模板。该模板通过统一的“样式”形成规范的Word格式&#xff0c;是目前研究生复试的最佳简历模板之一。模板使用“华文中宋”字体&#xff0c;如您的电脑中未安装此字体&#xff0c;请提前安装。…...

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&#xff1a;regreSSHion&#xff1a;OpenSSH 服务器中的远程代码执行&#xff08;RCE&#xff09;&#xff0c;至少在…...

Sping源码(九)—— Bean的初始化(非懒加载)—mergeBeanDefinitionPostProcessor

序言 前几篇文章详细介绍了Spring中实例化Bean的各种方式&#xff0c;其中包括采用FactoryBean的方式创建对象、使用反射创建对象、自定义BeanFactoryPostProcessor以及构造器方式创建对象。 创建对象 这里再来简单回顾一下对象的创建&#xff0c;不知道大家有没有这样一个疑…...

labview技巧——AMC框架安装

AMC工具包的核心概念是队列&#xff0c;队列是一种先进先出&#xff08;FIFO&#xff0c;First In First Out&#xff09;的数据结构&#xff0c;适用于处理并发和异步任务。在LabVIEW中&#xff0c;队列可以用于在不同VI之间传递数据&#xff0c;确保消息的有序处理&#xff0…...

解锁分布式云多集群统一监控的云上最佳实践

作者&#xff1a;在峰 引言 在当今数字化转型加速的时代&#xff0c;随着混合云、多云多集群环境等技术被众多企业广泛应用&#xff0c;分布式云架构已成为众多企业和组织推动业务创新、实现弹性扩展的首选&#xff0c;分布式云容器平台 ACK One&#xff08;Distributed Clou…...

学会拥抱Python六剑客,提高编程效率

在Python语言中&#xff0c;有六个强大的工具&#xff0c;它们被称为"Python六剑客"。而Python六剑客指的是Python中常用的六种功能强大且灵活的工具&#xff0c;它们分别是“切片&#xff08;Slicing&#xff09;&#xff0c;推导列表&#xff08;List Comprehensio…...

mysql 根据当前时间筛选某个时间范围内的数据

1.根据天数筛选 SELECT * FROM coupons WHERE NOW() BETWEEN start_time AND end_time; 在这个查询中&#xff0c;NOW()函数返回当前的日期和时间。BETWEEN操作符用于检查NOW()返回的当前时间是否在start_time和end_time之间&#xff08;包括这两个时间&#xff09;。 注意&a…...

Linux 常用指令详解

Linux 是一个强大而灵活的操作系统&#xff0c;掌握常用的 Linux 指令是使用和管理 Linux 系统的基础。本文将介绍一些常用的 Linux 指令&#xff0c;并附上 Vim 和 g 的常用指令说明&#xff0c;帮助你更好地进行开发和操作。 1. 基本文件操作指令 1.1 显示目录内容 ls常用…...

【简单讲解下npm常用命令】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…...

Header Location重定向机制解析与应用

Header Location重定向机制解析与应用 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将深入探讨HTTP中的Header Location重定向机制&#xff0c;以及在…...

硅纪元AI应用推荐 | 国产创作引擎即梦AI助力创作者探索创作新境界

“硅纪元AI应用推荐”栏目&#xff0c;为您精选最新、最实用的人工智能应用&#xff0c;无论您是AI发烧友还是新手&#xff0c;都能在这里找到提升生活和工作的利器。与我们一起探索AI的无限可能&#xff0c;开启智慧新时代&#xff01; 在人工智能快速发展的今天&#xff0c;各…...

使用TableGeneration生成已标注的表格数据用于表格识别

利用 TableGeneration 生成多样化表格数据 TableGeneration 简介环境准备chrome浏览器(Linux下推荐)火狐浏览器(Mac下推荐) 生成表格生成表格 参数说明结论 在数据生成和处理领域&#xff0c;表格数据的生成是一个常见需求&#xff0c;尤其是在机器学习和数据分析领域。今天&am…...

赛目科技三度递表:净利率及资产回报率不断下滑,经营成本越来越高

《港湾商业观察》施子夫 5月29日&#xff0c;北京赛目科技股份有限公司&#xff08;以下简称&#xff0c;赛目科技&#xff09;第三次递表港交所&#xff0c;公司拟主板上市&#xff0c;独家保荐机构为光银国际。 公开信息显示&#xff0c;赛目科技此前曾于2022年12月&#x…...

【QT】概述|对象树模型|两种控件模式|信号和槽|lambda

目录 什么是QT 特点 QT程序 main函数 QT按钮 纯代码模式 图形化模式 对象树模型 信号和槽 连接与断开 自动连接 断开连接 信号的发射 lambda表达式 基本语法 捕获列表 Lambda表达式用于信号与槽的连接 例如 什么是QT Qt是一个跨平台的C图形用户界面应用…...

Java中的安全编码实践与防御技巧

Java中的安全编码实践与防御技巧 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨Java中的安全编码实践与防御技巧&#xff0c;这对于开发人员来说…...

linux 常用的命令、文件路径、其他工具或软件包

命令 sudo apt dist-upgrade 解决显示 暂不升级、未被升级dd if/dev/zero of./rootfs.img bs1G count6 制作一个 6G 的空白镜像。bs 是块字节数&#xff0c;count 是 bs 的个数。dd if./rootfs.img of/dev/sdc2 bs512 烧录 rootfs.img 镜像到 /dev/sdc2。bs 是 512 个字节&…...

00 如何根据规律在变化中求发展?

你好&#xff0c;我是周大壮。目前&#xff0c;我已在搜索推荐等算法技术领域从事研发近 10 年&#xff0c;做过诸多流量分发领域的算法技术工作。 如今任 58 同城的算法架构师、技术委员会人工智能分会委员、58 本地服务事业群算法策略部负责人&#xff0c;我主要负责 58 集团…...

UUID和自增ID做主键到底哪个好?

UUID&#xff08;通用唯一识别码&#xff09; 优点&#xff1a; 全局唯一性&#xff1a;由不同算法生成&#xff0c;确保全球范围内的唯一性&#xff0c;避免主键冲突。不可预测性&#xff1a;随机生成&#xff0c;难以被猜测&#xff0c;适合保密性应用。分布式应用&#xff1…...

FW SystemUI Keyguard解析(二)

文章目录 CTS之Keyguard Menu事件处理 CTS之Keyguard Menu事件处理 事件触发点: NotificationShadeWindowViewController.dispatchKeyEvent 设置setInteractionEventHandler回调之后通过NotificationShadeWindowView 触发 调用到return mService.onMenuPressed(); public cla…...

MySQL之备份与恢复(二)

备份与恢复 定义恢复需求 如果一切正常&#xff0c;那么永远也不需要考虑恢复。但是&#xff0c;一旦需要恢复&#xff0c;只有世界上最好的备份系统是没用的&#xff0c;还需要一个强大的恢复系统。 不幸的是&#xff0c;让备份系统平滑工作比构造良好的恢复过程和工具更容易…...

MySQL:保护数据库

保护数据库 1. 用户1.1 创建用户1.2 查看用户1.3 删除用户1.4 修改密码 2. 权限2.1 授予权限2.2 查看权限2.3 撤销权限 之前都是介绍本地数据库而你自己就是数据库的唯一用户&#xff0c;所以不必考虑安全问题。但实际业务中数据库大多放在服务器里&#xff0c;你必须妥善处理好…...

不是大厂云用不起,而是五洛云更有性价比

明月代维的一个客户的大厂云境外云服务器再有几天就到期了&#xff0c;续费提醒那是提前一周准时到来&#xff0c;但是看到客户发来的续费价格截图&#xff0c;我是真的没忍住。这不就是在杀熟吗&#xff1f;就这配置续费竟然如此昂贵&#xff1f;说实话这个客户的服务器代维是…...

C++初学者指南-3.自定义类型(第一部分)-异常

C初学者指南-3.自定义类型(第一部分)-异常 文章目录 C初学者指南-3.自定义类型(第一部分)-异常简介什么是异常&#xff1f;第一个示例用途:报告违反规则的行为异常的替代方案标准库异常处理 问题和保证资源泄露使用 RAII 避免内存泄漏&#xff01;析构函数&#xff1a;不要让异…...

学会python——用python编写一个电子时钟(python实例十七)

目录 1.认识Python 2.环境与工具 2.1 python环境 2.2 Visual Studio Code编译 3.电子时钟程序 3.1 代码构思 3.2代码实例 3.3运行结果 4.总结 1.认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读性…...