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

【AS32X601驱动系列教程】SMU_系统时钟详解

在现代嵌入式系统中,时钟与复位管理是确保系统稳定运行的关键。我们的SMU(系统管理单元)模块专注于此核心任务,通过精准的时钟配置和复位控制,为整个系统提供可靠的时序保障。

SMU模块的主要功能是完成时钟和复位的管理。在默认状态下SMU工作在IDLE状态。只有接收到PMU的使能信号后才开始工作。SMU模块会根据PMU的指令自动配置COR、AXIBUS0/1/2等总线的时钟和复位。

需要注意的是,MCU芯片AS32X601可通过BOOT选择从外部QSPI Flash启动和内部PFlash启动,外部Flash启动时,系统时钟最高90MHz,内部启动时,系统时钟可跑到180MHz。同时对于各总线时钟,同样存在具体要求,该部分在软件操作部分进行介绍。

硬件介绍

本章节只讨论SMU系统时钟配置,AS32x601系列总线以及外设时钟均由SMU模块进行配置,时钟树和总线架构可在设计手册中查到,同时,为了保证使用者可以更好理解系统时钟配置,芯片特意拉出来一个clk_out引脚以便测量,查询芯片引脚复用,该引脚位于芯片的第11管脚PB4得复用功能1。

软件设计

在本小节只针对实际操作部分代码进行讲解,其中所涉及到的工程、变量、头文件等不会涉及到,可以参考实际的demo工程。

操作流程

  1. 使能总线时钟以及clk_out所在GPIO时钟

  2. 配置SMU_PLL结构体(如果不使用PLL,可忽略此步骤)

  3. 配置EFLASH时钟同步(如果使用外部flash启动,可忽略此步骤)

  4. 配置系统时钟以及总线分频结构体

  5. 配置clk_out引脚复用

代码介绍

在芯片的所有使用过程中,主程序都应该在初始化的最开始部位首先完成此部分代码的编写,我们在此处封装成函数,在每个demo历程中均可以找到这个函数。

在这个函数中,我们把需要注意的事项以及总线时钟树和对应关系均以注释的形式贴在操作之前,在时钟使能过程中,还需要参考总线架构保证外设挂载在具体哪一条总线下,然后在此处根据注释打开相应总线时钟,具体接口的时钟使能可在接口初始化函数中进行使能。

在上述代码清单中,首先配置PLL结构体,采用外部晶振作为PLL的时钟源,开发板晶振频率为20MHz,那么根据上述公式计算可知系统时钟为20÷0x14*0xB4÷0x01 = 180M。

接下来,配置EFLASH时钟同步,此操作必须在切换系统时钟之前完成,将同步时间180写入同步配置。

之后配置总线时钟结构体,此处可设置系统时钟源是PLL、内部振荡器或者外部晶振,此外还可配置系统总线分频系数,具体参数已经在库中定义完成。

最后需要更新EFLASH时钟,强制操作,避免死机。

最后一步操作是获取所有总线时钟,此函数是为了保证部分自动计算波特率功能设定,建议最好不要删除。

至此系统时钟初始化完毕,为了验证功能,我们可以配置CLK_OUT引脚输出,代码如下:

由于此处全部都是初始化操作,完成之后,直接while(1)等待即可,编译此代码。另外,SMU_SetSysClockOut(CoreCLKDiv8Out);可以控制输出时钟来源于具体哪一路,形参已经定义好,直接选择切换即可。

烧录验证

上述代码编译烧录之后,用示波器连接PB4引脚,即可看到输出波形。

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

相关文章:

  • 09 接口自动化-用例管理框架pytest之allure报告定制以及数据驱动
  • React笔记-Ant Design X样本间对接智谱AI
  • 网络安全-等级保护(等保) 3-2 GB/T 28449-2019《信息安全技术 网络安全等级保护测评过程指南》-2018-12-28发布【现行】
  • 【Bug】--node命令加载失败
  • Java 大视界 -- 基于 Java 的大数据分布式存储在视频会议系统海量视频数据存储与回放中的应用(263)
  • ROS云课三分钟-3D性能测试supertuxkart和游戏推荐等-国际象棋
  • 汽车零部件行业PLM案例:得瑞客汽车(Dereik) 部署国产PLM
  • Web攻防-SQL注入数据格式参数类型JSONXML编码加密符号闭合
  • 浅谈测试驱动开发TDD
  • 深入解析 Flink 中的时间与窗口机制
  • 医疗AI项目文档编写核心要素硬核解析:从技术落地到合规实践
  • voc怎么转yolo,如何分割数据集为验证集,怎样检测CUDA可用性 并使用yolov8训练安全帽数据集且构建基于yolov8深度学习的安全帽检测系统
  • vllm server返回404的一种可能得解决方案
  • kafka之操作示例
  • MySQL问题:MySQL中使用索引一定有效吗?如何排查索引效果
  • OpenSSL 签名验证详解:PKCS7* p7、cafile 与 RSA 验签实现
  • 利用 `ngx_http_xslt_module` 实现 NGINX 的 XML → HTML 转换
  • C语言队列详解
  • Qt中的智能指针
  • 车载网关策略 --- 车载网关通信故障处理机制深度解析
  • 三天掌握PyTorch精髓:从感知机到ResNet的快速进阶方法论
  • Python爬虫实战:研究Selenium框架相关技术
  • 分布式缓存:三万字详解Redis
  • BiLSTM与Transformer:位置编码的隐式vs显式之争
  • html5视频播放器和微信小程序如何实现视频的自动播放功能
  • 【QT】QString和QStringList去掉空格的方法总结
  • 58同城大数据面试题及参考答案
  • 25.5.27学习总结
  • 关于vue结合elementUI输入框回车刷新问题
  • vue项目表格甘特图开发