英飞凌Aurix2G TC3XX 时钟系统详解

英飞凌Aurix2G TC3XX 时钟系统详解

本文主要介绍Infineon Aurix2G TC3XX时钟系统,以及MCAL相关配置。


1. 模块简介

对任何一个计算机系统来说,时钟都是不可或缺的,它就像人的心跳一样,驱动着系统的运转。我们常说的Intel某款芯片,主频多少,也就是CPU内核的时钟源的频率。

在这里插入图片描述

CPU时钟频率越高,与之对应的,芯片的计算频率也就越高,但是相应的功耗和发热也就越严重。现如今桌面端设备的主频基本已经饱和,基本都是GHz量级的,要想提升算力,就不得不增加内核数量,也就是我们常说的多核计算机系统。而嵌入式领域的MCU主芯片,当前的主频基本都在百MHz量级。Aurix2G TC3XX系列的主频最高支持300MHz,其他有些厂家的芯片已经达到了600MHz。同一系列的芯片毫无疑问算力和主频成正比的,但是不同芯片的算力比较不能只看主频,还要看指令集性能和厂商硬件优化。
除了CPU需要使用时钟外,其他模块例如ADC等外设、RAM、FLASH、总线都是需要时钟的。对于外设也是一样,时钟频率越高,速度越快,定时器精度越高,相应的功耗和发热也会升高,因此在系统设计时要根据实际需求进行斟酌。
今天我们就来介绍Aurix2G TC3XX系列芯片的时钟系统,以及如何在MCAL中进行配置。

2. 功能介绍

TC3XX系列时钟系统主要包括时钟源、锁相环、时钟分配器组成。

2.1 时钟源

要使用时钟的话,物理上必须有一个时钟源,TC3XX系列时钟电路允许两种外部时钟源,第一种是外部直接时钟源,也就是通过其他芯片或电路直接进行时钟Tick输入,这种情况下XTAL1连接时钟信号,XTAL2悬空。
在这里插入图片描述

第二种是采用石英或陶瓷(一般为石英)晶振,通过电路连接实现时钟源输入。
在这里插入图片描述
时钟源电路一般由电子电器部门进行设计,作为软件方,我们只需要关注外部时钟频率,也就是上图中的fOSC0,它是我们所有模块的物理时钟源,一般为20MHz。还有就是时钟的精度,对于有些功能例如控制器之间进行对时就对精度有一定的要求。
另外TC3XX系列芯片还提供了一个内置的备用时钟,稳定可靠但是精度相对较低,可以在主时钟异常时使用。

2.2 时钟倍频(PLL)

细心的朋友可能已经发现,前文提到嵌入式MCU的主频一般为百MHz量级,而外部时钟源一般为20MHz,20MHz的时钟如何能提供300MHz的Tick呢?这里就得用到时钟的锁相环电路系统,它是通过时钟的相位捕捉,利用内部的比较器、控制环、振荡器、反馈电路等模块,通过相位切分的原理,将一个输入Tick,切分为多个时钟Tick,从而达到倍频的目的。关于锁相环,这里就不多做介绍了,感兴趣的朋友可以自行查阅资料。
TC3XX系列芯片时钟系统中一共有两个锁相环模块,一个是系统锁相环模块,其产生的时钟主要供CPU、存储等模块使用;一个是外设锁相环模块,顾名思义,其产生的时钟主要供外设模块使用。

2.2.1 系统锁相环(System PLL)

系统锁相环能够将低频的外部时钟源进行倍频,以给CPU等模块提供稳定高频的时钟源。同时还提供安全监控功能,当外部时钟源频率超出范围时执行紧急动作。
在这里插入图片描述
如上图为系统锁相环模块示意图,从图上我们可以看出,外部时钟源fOSC会首先经过一个P-DIV进行预分频,随后经过锁相环相关模块进行倍频得到fDCO,最后再经过K2-DIV进行一个最终分频,然后输出fPLL0,也就是系统时钟源
这里我们主要关注三个参数,也就是预分频值P-DIV、反馈分频值NDIV和输出分频值K2-DIV。系统时钟的计算主要依赖这三个参数。其运算公式如下:

f P L L 0 = f O S C ∗ N P ∗ K 2 \begin{equation} f_{PLL0} = \frac {f_{OSC}*N} {P*K2} \end{equation} fPLL0=PK2fOSCN

  • P:预分频值P-DIV+1,P-DIV对应寄存器SYSPLLCON0.PDIV
  • N:反馈分频值NDIV+1,NDIV对应寄存器SYSPLLCON0.NDIV
  • K2:输出分频值K2-DIV+1,K2-DIV对应寄存器SYSPLLCON1.K2DIV

这里P参数和N参数的设定需要参考DataSheet中的fDCO时钟范围,如下图中fDCO的输入范围是10~40 MHz,也就是说在20MHz的fOSC下,P的范围为0~1 ,一般P-DIV设置为0,也就是fDCO输入为20MHz;然后fDCO时钟的输出范围为400~800MHz,如果要输出PLL0为主频最大300MHz,最合适的fDCO输出频率为600MHz,即NDIV设置为29;然后将K2-DIV设置为1,进行二倍分频,最终得到fPLL0=300MHz
在这里插入图片描述
因为锁相环是一个反馈电路设计,因此在设置完之后需要进行等待锁相环稳定,在初始化设置完时钟后,可通过while循环SYSPLLSTAT.LOCK==0来等待锁相环稳定。
如果在运行时设置锁相环,注意关掉SMU中的PLL监控(默认关闭),否则会产生误报Tick丢失故障。

2.2.2 外设锁相环(Peripheral PLL)

与系统锁相环功能相同,外设锁相环的目的也是将外部时钟信号通过锁相环模块进行倍频得到外设时钟源。
在这里插入图片描述
从上图外设时钟锁相环模块示意图中可以看出,外部时钟源fOSC进入后同样进行一次预分频,锁相环倍频,然后进行输出分频输出fPLL1、fPLL2和fHSCT,其中fHSCT是供HSSL模块使用的一路特殊时钟。这里我们同样也主要关注这几个参数:预分频值P-DIV、反馈分频值NDIV、pll1输出分频值K2-DIV、pll2输出分频值K3-IDV、除数分频值DIVBY。fPLL1的计算公式为:

f P L L 1 = f O S C ∗ N P ∗ K 2 \begin{equation} f_{PLL1} = \frac {f_{OSC}*N} {P*K2} \end{equation} fPLL1=PK2fOSCN

  • P:预分频值P-DIV+1,P-DIV对应寄存器PERPLLCON0.PDIV
  • N:反馈分频值NDIV+1,NDIV对应寄存器PERPLLCON0.NDIV
  • K2:输出分频值K2-DIV+1,K2-DIV对应寄存器PERPLLCON1.K2DIV
    fPLL1的计算方法是和fPLL0基本相同,然后PLL2的公式存在一点差异即引入了一个被除数变量:

f P L L 2 = f O S C ∗ N P ∗ K 3 ∗ D I V B Y \begin{equation} f_{PLL2} = \frac {f_{OSC}*N} {P*K3*DIVBY} \end{equation} fPLL2=PK3DIVBYfOSCN

  • K3:输出分频值K3-DIV+1,K3-DIV对应寄存器PERPLLCON1.K3DIV
  • DIVBY:被除数变量,当寄存器PERPLLCON0.DIVBY为0时,DIVBY=1.6,当PERPLLCON0.DIVBY为1时,DIVBY=2

fHSCT的分频值较为固定,计算公式为:

f H S C T = f O S C ∗ N P ∗ 2 \begin{equation} f_{HSCT} = \frac {f_{OSC}*N} {P*2} \end{equation} fHSCT=P2fOSCN

同样我们也能够在DataSheet中查询到外设锁相环模块的参数限制:

在这里插入图片描述

这里类比也是将P-DIV设置为0,然后外设时钟的设置则需要考虑外设一般的使用情况,且要与CPU尽量避开倍数关系,防止硬件EMC问题。然后考虑外设如CAN等模块的使用情况,一般PLL1输出320MHz(PLL1到外设之间还有一层二分频,所以作用到外设上的一般是160MHz),PLL2输出200MHz,配置NDIV=31,K2-DIV=3,K3-DIV=1,DIVBY=0。如果有特殊需求可根据实际情况配置分频,需要注意的是外设模块时钟源的连接由时钟分配单元CCU控制,具有耦合性,例如为了某个外设需要调整PLL1,则要考虑其他同样使用PLL1的外设。

2.3 时钟分配单元(CCU)

至此我们得到了系统时钟PLL0两个外设时钟PLL1和PLL2和一个特殊外设时钟HSCT。除了HSCT专供HSSL使用外,其他几个主要的时钟源需要和CPU及外设模块进行连接,并设置对应的时钟分频,时钟分配单元CCU就是负责该功能的。
CCU模块和PLL时钟源之间存在选择转换关系,如下图所示,每个时钟源可选PLL时钟或备用时钟。这里需要注意的是,PLL1到fSOURCE1之间存在一个可配置2倍分频器,仅当fSOURCE1选择PLL1且CCUCON1.PLL1DIVDIS=0时,fSOURCE1=fPLL1/2,其余情况不分频。
在这里插入图片描述

各个模块所使用的时钟源如下表所示。

在这里插入图片描述

每个外设模块都有指定的时钟源,有些模块具有多个可选时钟源;有些模块的输入时钟是固定分频比,比如ADC,而有些模块可以配置时钟分频比。下面我们就来介绍各个模块的时钟连接及分频机制。

  • fSRI:SRI总线时钟,决定SRI总线数据交互的频率,通过CCUCON0.SRIDIV进行设置分频参数
  • fCPUx:CPUx的主频,通过CCUCONi.CPUxDIV来进行设置,具体参考芯片核数量
  • fSPB:系统外设总线时钟,决定外设总线数据交互的频率,通过CCUCON0.SPBDIV来进行设置
  • fFSI2:PFlash时钟,决定PFlash读取速度,通过CCUCON0.FSI2DIV来设置
  • fFSI:除PFlash以外的其他Flash时钟,通过CCUCON0.FSIDIV来设置
  • fREFCLK1/2:调试参考时钟,分别为PLL0/1的24倍分频值
  • fBBB:BBB总线时钟,决定BBB总线访问速度,通过CCUCON0.BBBDIV来进行设置
  • fERAY:ERAY模块时钟,固定分频比,fERAY=fSOURCE1/2
  • fGTM:GTM模块主时钟,可变时钟源,当CCUCON0.GTMDIV=1时fGTM=fSPB*2;否则fGTM=fSOURCE0/GTMDIV
  • fSTM:STM模块主时钟,决定STM工作频率,通过CCUCON0.STMDIV来进行设置
  • fMSC:MSC模块主时钟,决定MSC工作频率,通过CCUCON1.MSCDIV来进行设置
  • fGETH:GETH以太网模块主时钟,通过CCUCON5.GETHDIV来进行配置
  • fADAS:SPU与RIF内核时钟,不可访问
  • fMCANH:CAN模块主时钟,决定CAN模块工作及CANRAM访问速度,通过CCUCON5.MCANHDIV来进行配置
  • fMCAN:CAN模块时钟,用来配置CAN的波特率,必须小于fMCANH,通过CCUCON1.MCANDIV来进行配置
  • fASCLINF/S:ASCLIN模块快/慢时钟源,用来配置ASCLIN模块波特率,fASCLINF通过CCUCON2.ASCLINFDIV配置,fASCLINS可选时钟源,通过CCUCON2.CLKSELASCLINS选择时钟源,通过CCUCON2.ASCLINSDIV配置
  • fQSPI:QSPI模块主时钟,可变时钟源,通过CCUCON1.CLKSELQSPI选择时钟源,通过CCUCON1.QSPIDIV配置
  • fADC:ADC模块主时钟,不可配置分频,fADC=fSOURCE1
  • fI2C:I2C模块主时钟,通过CCUCON1.I2CDIV配置
  • fEBU:EBU模块主时钟,不可配置分频,fEBU=fSOURCE1
  • fHSPDMx:HSPDM主时钟,不可配置分频,fHSPDMx=fSOURCE1

另外还有一些外设例如GPT12、SMU模块,使用的时钟为fSPB时钟源,后续在模块介绍中会进行说明。
除此之外,时钟的设置还存在一些关系限制,参见下表:
在这里插入图片描述

3. MCAL配置实例

TC3XX时钟的配置在MCU模块中,首先我们可以看到系统锁相环的配置:

在这里插入图片描述

然后是外设锁相环的配置:

在这里插入图片描述

然后是各个模块的时钟分配设置,这里可以直接设置目标频率,然后工具会自动计算分频比,不合理的值会报错提示:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

MCAL代码中对于时钟的配置调用Mcu_InitClock()接口即可,然后等待锁相环稳定,最后进行时钟分配。

Mcu_Init(&Mcu_Config);
InitClockRetVal = Mcu_InitClock(McuConf_McuClockSettingConfig_McuClockSettingConfig_0);
if(InitClockRetVal == E_OK)
{
    do
    {
    Mcu_GetPllStatusRetVal = Mcu_GetPllStatus ();
    } while(Mcu_GetPllStatusRetVal != MCU_PLL_LOCKED);

    #if (MCU_DISTRIBUTE_PLL_CLOCK_API == STD_ON)
    Mcu_DistributePllClock ();
    #endif
}

4. 小结

本文主要介绍了Aurix2G TC3XX系列芯片中时钟系统的原理,各个模块的时钟源连接关系,以及如何进行分频设置。该系列芯片提供了三个主时钟域,通过连接和分频配置分配给各个模块,为开发者提供了灵活的时钟树选项。

参考资料

  1. Infineon-AURIX_TC3xx_Part1-UserManual-v02_00-EN.pdf
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值