地奇星RA6E2开发板CGC时钟系统详解从时钟源到时钟树配置很多刚开始接触瑞萨RA6E2比如立创·地奇星开发板的朋友一看到时钟配置就有点发怵。时钟系统就像是单片机的心脏它跳动的节奏决定了整个系统运行的快慢和功耗。如果时钟没配好程序可能跑不起来或者外设工作不正常。今天我就结合自己的经验带大家把RA6E2的时钟生成电路CGC彻底搞明白从有哪些“心脏起搏器”时钟源开始到它们如何驱动各个“器官”外设最后手把手教你在e2 studio里配置一遍。1. 时钟源给单片机提供“心跳”的多种选择CGC的全称是Clock Generation Circuit翻译过来就是时钟生成电路。它的任务很简单就是产生各种频率的时钟信号让CPU、内存、外设这些模块能同步、有序地工作。RA6E2这颗芯片很“大方”给了我们很多种时钟源选择你可以根据项目需求比如精度、功耗、成本来灵活选用。我把它们整理成下面这个表格方便你对比时钟源名称英文全称频率/特点主要用途主时钟振荡器Main Clock Oscillator (MOSC)8 - 24 MHz (外接晶振)提供高精度、高速的系统主时钟基准副时钟振荡器Sub-Clock Oscillator (SOSC)32.768 kHz (外接晶振)为实时时钟(RTC)提供精准的计时基准锁相环Phase Locked Loop (PLL)输入8-24MHz输出120-200MHz对输入时钟倍频获得更高的系统运行频率高速片上振荡器High-speed on-chip oscillator (HOCO)16/18/20 MHz (无需外接晶振)提供无需外部元件的高速时钟启动快中速片上振荡器Middle-speed on-chip oscillator (MOCO)固定 8 MHz提供稳定的中速时钟常用于系统初始化阶段低速片上振荡器Low-speed on-chip oscillator (LOCO)固定 32.768 kHz提供低功耗、低速的时钟用于待机或低功耗场景IWDT专用时钟IWDT-dedicated clock (IWDTLOCO)固定 15 kHz独立看门狗的专用时钟提高可靠性SWD外部时钟External clock input for SWD (SWCLK)最高 25 MHz为调试接口(SWD)提供外部时钟输入这里有几个关键点需要理解外部 vs 内部MOSC和SOSC需要你在开发板上焊接外部晶振精度高但增加成本和面积。HOCO、MOCO、LOCO是芯片内部自带的RC振荡器精度稍差但省事、启动快。PLL的作用它是“频率乘法器”。比如你外接了一个12MHz的晶振MOSC通过PLL可以倍频到最高200MHz这样CPU就能以更高的主频运行性能更强。专用时钟像IWDTLOCO是给独立看门狗专用的即使主时钟挂了它还能继续工作确保看门狗能可靠地复位系统这是个重要的安全设计。2. 内部时钟时钟是如何分配到各个模块的有了时钟源CGC会通过一系列的分频器和选择器生成不同频率的时钟分配给芯片内部各个模块。这些内部时钟主要分为三大类系统时钟、外设模块时钟和专用模块时钟。为了方便你理解我把原文中复杂的表格信息重新梳理和解释一下2.1 系统时钟 (ICLK)这是整个系统的“主脉搏”直接驱动最核心的部件。时钟源可以从MOSC、SOSC、HOCO、MOCO、LOCO或PLL中选择。驱动目标CPU、直接内存访问控制器(DMAC)、数据传输控制器(DTC)、Flash存储器、RAM。频率最高可以达到200MHz当使用PLL且配置正确时。分频支持1, 2, 4, 8, 16, 32, 64分频。比如PLL输出200MHz经过4分频后ICLK就是50MHz。2.2 外设模块时钟 (PCLKA/B/C/D)你可以把它们理解为通往不同“功能区”的“支路脉搏”。不同外设对时钟速度要求不同所以分了四组。PCLKA (最高100MHz)给高速外设用比如QSPI高速串行Flash接口、SCI串口、CAN、SPI、ADC/DAC等。PCLKB (最高50MHz)给中低速外设用比如输入输出端口(I/O Ports)、实时时钟(RTC)、看门狗(WDT)、通用定时器(AGT)、USB全速接口等。PCLKC (最高50MHz)专门给ADC12的转换时钟用。PCLKD (最高100MHz)专门给通用定时器(GPT)的计数时钟用。注意一个重要的约束关系在配置时钟时必须遵守ICLK ≥ PCLKA ≥ PCLKB以及PCLKD ≥ PCLKA ≥ PCLKB的规则。简单说就是系统主时钟要最快PCLKA不能比ICLK快PCLKB不能比PCLKA快。这是硬件设计决定的配置时如果违反了这个规则软件如e2 studio的配置工具会报错或自动调整。2.3 专用模块时钟一些特殊的外设有自己独立的时钟路径或要求比如FCLK (FlashIF时钟)给Flash存储器接口用的时钟。对它有个特殊要求在对Flash进行编程(P)或擦除(E)操作时FCLK的频率必须在4MHz到50MHz之间。读取操作时则可以到最高50MHz。同时ICLK ≥ FCLK。USBCLK (USB时钟)必须由PLL提供且频率必须精确为48MHz这是USB全速协议规定的。CANFDCLK给CAN FD外设的专用时钟最高40MHz。RTCCLK给实时时钟(RTC)的通常选择精准的32.768kHz SOSC或LOCO。3. 实战在e2 studio中配置时钟树理论说再多不如动手配一遍。瑞萨的e2 studio集成开发环境配合FSP配置器让时钟配置变得非常直观。咱们就以最常见的配置为例使用外部晶振MOSC通过PLL倍频产生系统主时钟。打开时钟配置视图在e2 studio的FSP Configuration界面找到“Clocks”选项卡并点击。你会看到一个图形化的时钟树Clock Tree视图。这个视图虽然比手册里的全图简略但对配置来说完全够用而且非常清晰。配置时钟源路径我们以配置系统时钟ICLK为例。在时钟树中找到“System clock(ICLK)”这一项它后面标注了To CPU, DMAC, DTC, Flash and RAM。点击它的“Clock Source”时钟源下拉框。这里你会看到所有可选的源MOSC, SOSC, HOCO, MOCO, LOCO, PLL。假设我们的开发板焊接了12MHz的晶振我们想通过PLL倍频到200MHz。那么路径应该是XTAL (外部晶振) - MOSC - PLL - ICLK。所以我们先要确保MOSC和PLL被正确启用和配置。配置PLL在时钟树中找到PLL模块。勾选启用它。设置它的输入时钟源Input Clock Source为MOSC。根据你的晶振频率和想要的输出频率设置倍频系数。例如输入12MHz想要200MHz输出那么倍频比Multiplier需要设置为200 / 12 16.666...。但PLL的倍频比是以0.5为步进的所以我们可以选择最近的16.5倍这样输出是12 * 16.5 198MHz或者选择17倍得到204MHz但可能超频需查芯片手册确认最高频率。这里我们以16.5倍为例。设置好后PLL的输出频率Output Frequency会自动计算显示出来如198MHz。完成ICLK配置回到“System clock(ICLK)”。现在将它的“Clock Source”选择为PLL。然后设置“Divider”分频器。如果我们希望CPU运行在99MHz那么就将分频比设置为2198MHz / 2 99MHz。此时ICLK的频率就会显示为99MHz。配置外设时钟接着根据之前讲的约束关系配置PCLKA、PCLKB等。例如将PCLKA的时钟源也选为PLL分频比设置为2得到99MHz满足ICLK ≥ PCLKA。将PCLKB的时钟源选为PLL分频比设置为4得到49.5MHz满足PCLKA ≥ PCLKB。软件会自动检查这些约束如果配置错误通常会有颜色提示或警告。配置完成后整个时钟树的概览会直观地显示各个节点的频率检查无误后保存配置生成代码即可。这样HAL库或底层驱动就会按照你的配置去初始化时钟系统了。4. 小实验用CLKOUT引脚测量时钟理论配置好了怎么验证呢RA6E2提供了一个非常实用的功能时钟输出CLKOUT。我们可以把某个内部时钟比如系统时钟引到一个特定的引脚上然后用示波器测量这个引脚的波形就能直观地看到时钟频率是否正确。下面我们做个实验把HOCO时钟经过分频后输出到CLKOUT引脚。第一步配置引脚功能在FSP Configuration中切换到“Pins”选项卡。在“Peripherals”栏下找到“CLKOUT:CLKOUT”。点击它在右侧的引脚配置中Pin Group Select: 选择Mixed混合模式。Operation Mode: 选择Custom自定义。这时下面的引脚网格图中某个引脚例如P109会被自动分配为CLKOUT功能。你可以确认或修改这个引脚。第二步配置输出时钟切换到“Clocks”选项卡。在时钟树中找到“Clock Output (CLKOUT)”这一项。配置它的参数Clock Source: 选择HOCO比如20MHz的片上振荡器。Divider: 选择分频系数比如32。计算一下输出频率应该是20 MHz / 32 625 kHz。第三步生成代码并测试按下Ctrl S保存所有配置。点击“Generate Project Content”按钮生成工程代码。编译工程下载到地奇星开发板中运行。用示波器探头连接到刚才配置的CLKOUT引脚如P109和地线GND。在示波器上你应该能看到一个频率约为625kHz的方波信号。这就证明我们的时钟配置和输出功能是正常的通过这个小实验你不仅能验证时钟系统以后在调试时如果怀疑系统时钟没起来用这个方法测一下CLKOUT引脚就能快速定位问题。