【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工程。
操作流程
-
使能总线时钟以及clk_out所在GPIO时钟
-
配置SMU_PLL结构体(如果不使用PLL,可忽略此步骤)
-
配置EFLASH时钟同步(如果使用外部flash启动,可忽略此步骤)
-
配置系统时钟以及总线分频结构体
-
配置clk_out引脚复用
代码介绍
在芯片的所有使用过程中,主程序都应该在初始化的最开始部位首先完成此部分代码的编写,我们在此处封装成函数,在每个demo历程中均可以找到这个函数。
在这个函数中,我们把需要注意的事项以及总线时钟树和对应关系均以注释的形式贴在操作之前,在时钟使能过程中,还需要参考总线架构保证外设挂载在具体哪一条总线下,然后在此处根据注释打开相应总线时钟,具体接口的时钟使能可在接口初始化函数中进行使能。
在上述代码清单中,首先配置PLL结构体,采用外部晶振作为PLL的时钟源,开发板晶振频率为20MHz,那么根据上述公式计算可知系统时钟为20÷0x14*0xB4÷0x01 = 180M。
接下来,配置EFLASH时钟同步,此操作必须在切换系统时钟之前完成,将同步时间180写入同步配置。
之后配置总线时钟结构体,此处可设置系统时钟源是PLL、内部振荡器或者外部晶振,此外还可配置系统总线分频系数,具体参数已经在库中定义完成。
最后需要更新EFLASH时钟,强制操作,避免死机。
最后一步操作是获取所有总线时钟,此函数是为了保证部分自动计算波特率功能设定,建议最好不要删除。
至此系统时钟初始化完毕,为了验证功能,我们可以配置CLK_OUT引脚输出,代码如下:
由于此处全部都是初始化操作,完成之后,直接while(1)等待即可,编译此代码。另外,SMU_SetSysClockOut(CoreCLKDiv8Out);可以控制输出时钟来源于具体哪一路,形参已经定义好,直接选择切换即可。
烧录验证
上述代码编译烧录之后,用示波器连接PB4引脚,即可看到输出波形。