2. RA时钟系统与板级时钟配置

RA系列MCU的时钟系统是整个芯片运行的“心跳源”。所有外设——无论是SCI串口、SPI、I²C、ADC、定时器还是USB——都依赖时钟树中某一级时钟作为工作基准。如果时钟配置错误,最典型的现象是串口波特率偏差、定时器周期不准、ADC采样时间异常,甚至芯片根本无法启动。因此,理解RA的时钟树结构,并能在FSP配置器中正确设置各外设时钟,是板级适配中最基础也最关键的一步。

一、RA时钟树的基本结构

RA的时钟树可以按“源—倍频—分频—分配”四个层次来理解。最上游是时钟源,RA通常支持以下几种:

  • HOCO(High-Speed On-Chip Oscillator):内部高速振荡器,常见频率为16MHz、18MHz、20MHz等,精度一般,适合对时钟精度要求不高的场合。
  • MOCO(Middle-Speed On-Chip Oscillator):内部中速振荡器,通常为8MHz,常用于低功耗模式或作为辅助时钟。
  • LOCO(Low-Speed On-Chip Oscillator):内部低速振荡器,约32.768kHz,用于看门狗、RTC等低功耗外设。
  • Main Clock:外部主时钟输入,通过XTAL/EXTAL引脚接入外部晶振或无源晶振,频率范围通常为1MHz~20MHz,精度高,是大多数应用的系统时钟源。
  • Sub Clock:外部副时钟,通常为32.768kHz晶振,用于RTC和低功耗计数。

这些时钟源进入时钟树后,会经过PLL(锁相环)进行倍频。PLL的作用是把较低频率的参考时钟倍频到较高的系统频率。例如,使用12MHz外部晶振,通过PLL倍频到120MHz或240MHz,作为系统时钟SCLK。PLL的倍频系数、分频系数以及参考时钟选择,都是FSP配置器中必须正确设置的参数。

PLL输出之后,进入分频器网络。RA的分频器通常包括:

  • ICLK:系统时钟,供给CPU、总线、存储器等。
  • PCLKA:外设时钟A,供给高速外设,如以太网、USB等。
  • PCLKB:外设时钟B,供给大多数通用外设,如SCI、SPI、I²C、ADC等。
  • PCLKC:外设时钟C,供给部分中速外设。
  • PCLKD:外设时钟D,供给低速外设或特定模块。
  • FCLK:闪存时钟,供给Flash控制器。
  • BCLK:外部总线时钟,供给外部总线接口。

每个分频器都可以独立设置分频比,通常为1/2/4/8/16/32/64等。分频比的选择必须满足外设的最大时钟频率限制,同时兼顾功耗和性能。例如,PCLKB通常不能超过某个上限(如60MHz或80MHz,具体取决于型号),如果ICLK为240MHz,PCLKB分频比至少为4,才能得到60MHz。

RA 时钟树结构示意(以 12MHz 外部晶振 + PLL 倍频为例) 时钟源 Main Clock 12MHz HOCO 16MHz MOCO 8MHz Sub Clock 32.768kHz 选择 PLL ×20 倍频 12MHz → 240MHz 240MHz 分频器与时钟域 ICLK ÷1 = 240MHz CPU / 总线 / 存储器 PCLKA ÷2 = 120MHz 以太网 / USB PCLKB ÷4 = 60MHz SCI / SPI / I²C / ADC PCLKC ÷8 = 30MHz 部分中速外设 PCLKD ÷16 = 15MHz 低速外设 FCLK ÷4 = 60MHz Flash 控制器 BCLK ÷4 = 60MHz 外部总线接口 关键约束:PCLKB ≤ 60MHz(示例型号),ICLK ≤ 240MHz;分频比必须为整数,且各外设时钟不得超过其最大允许频率。 验证方法:通过 CGC 寄存器读取当前分频设置,或使用 CLKOUT 引脚输出指定时钟,用示波器/频率计测量实际频率。

二、在FSP配置器中设置时钟

在e² studio中创建RA项目后,打开FSP配置器的“Clocks”选项卡,可以看到完整的时钟树界面。配置顺序建议从上游到下游:

  1. 选择主时钟源:在“Main Clock”区域设置外部晶振频率,例如12MHz,并启用“Main Clock Oscillator”。如果使用内部HOCO,则在“HOCO”区域设置频率。
  2. 配置PLL:在“PLL”区域选择参考时钟源(Main Clock或HOCO),设置倍频系数。例如,参考12MHz,倍频×20,得到240MHz。注意PLL的输出频率必须在芯片允许范围内。
  3. 设置系统时钟源:在“System Clock”区域选择SCLK的来源,通常选择PLL输出。然后设置ICLK、PCLKA、PCLKB、PCLKC、PCLKD、FCLK、BCLK的分频比。
  4. 检查频率合法性:FSP配置器会自动校验各时钟是否超出上限,如果超限会以红色提示。此时需要调整分频比或降低PLL倍频。
  5. 生成代码:点击“Generate Project Content”,FSP会生成时钟初始化代码,通常位于hal_entry.c或bsp_clock_init.c中。

一个典型的配置示例:外部晶振12MHz,PLL×20=240MHz,ICLK÷1=240MHz,PCLKA÷2=120MHz,PCLKB÷4=60MHz,PCLKC÷8=30MHz,PCLKD÷16=15MHz,FCLK÷4=60MHz,BCLK÷4=60MHz。这套配置在多数RA6系列芯片上可以正常工作,但具体上限需查阅对应型号的硬件手册。

三、验证时钟输出与系统频率

配置完成后,必须验证实际时钟频率是否符合预期。RA提供了两种主要验证手段:

方法一:CLKOUT引脚输出。RA的CLKOUT引脚可以将内部时钟分频后输出到外部引脚。在FSP配置器的“Clocks”选项卡中,找到“CLKOUT”设置,选择要输出的时钟源(如ICLK、PCLKB等)和分频比。然后用示波器或频率计测量该引脚的实际频率。例如,设置CLKOUT输出PCLKB÷1,如果测量到60MHz,说明PCLKB配置正确。

方法二:读取CGC寄存器。RA的时钟控制寄存器(CGC)中保存了当前的分频设置和时钟源状态。可以在代码中读取R_SYSTEM->SCKDIVCR等寄存器,通过串口打印出来,与预期值对比。这种方法不需要外部仪器,适合快速自检。

提示:如果串口通信出现乱码,首先怀疑PCLKB频率是否与波特率计算不匹配。例如,SCI的波特率计算公式中使用了PCLKB作为基准,如果PCLKB实际为60MHz但代码中按30MHz计算,波特率就会偏差一倍。
注意:修改时钟配置后,必须重新生成代码并编译下载。部分RA型号在运行时也可以动态切换时钟源,但需要遵循特定的切换顺序,否则可能导致芯片死锁。建议在板级适配阶段先固定时钟配置,待系统稳定后再考虑动态调频。

四、板级适配中的常见问题

在实际板级适配中,时钟配置最容易出问题的环节有三个:

  • 外部晶振未起振:如果使用外部主时钟,但晶振电路匹配电容不准确或晶振本身损坏,PLL将无法锁定,芯片可能自动切换到HOCO或直接停止运行。此时应检查XTAL/EXTAL引脚波形,确认晶振是否起振。
  • PLL锁定时间不足:PLL从启动到锁定需要一定时间,FSP生成的代码中通常包含等待PLL稳定的循环。如果自行编写初始化代码,必须加入足够的延时或查询PLL锁定标志位。
  • 分频比与手册不符:不同RA型号的分频比支持范围可能不同。例如,某些型号的PCLKB只支持÷1/÷2/÷4/÷8/÷16,而另一些型号支持÷1/÷2/÷4/÷8/÷16/÷32/÷64。配置前务必查阅对应型号的硬件手册“Clock Generation Circuit”章节。

总结来说,RA时钟系统的配置可以归纳为“选源、倍频、分频、验证”四个动作。在FSP配置器中完成设置后,务必通过CLKOUT或寄存器读取确认实际频率,再进入外设驱动的开发。时钟是系统稳定的基石,这一步做扎实,后续的串口、定时器、ADC调试都会顺利很多。