1、系统时钟模块介绍
Aurix2G TC3XX系列的主频最高支持300MHz。该系列时钟系统主要包括时钟源、锁相环、时钟分配器组成。
系统时钟主要由以下几个时钟功能模块组成:
1、Basic clock generation(Clock Source)时钟源(一般由晶振提供)
2、Clock Speed up-scaling(PLLs)时钟倍频(锁相环)
3、Clock distribution(CCU)时钟分配单元
4、Individual clock configuration(Peripherals) 独立时钟配置(外设)
2、功能介绍
2.1、时钟源
TC3XX系列有两种外部时钟源可供选择。
1、外部直接接入时钟源,也就是通过其它芯片或者电路直接进行时钟Tick输入。硬件连接如下图:
2、第二种是采用晶振(石英或者陶瓷),外部电路连接如下图:
作为软件,一般只需关注外部的时钟频率,也就是图中的FOSC0。一般为20MHz。
2.2、时钟倍频(PLL)
TC3xx系列一共有两个锁相环,系统锁相环其产生的时钟主要供CPU、存储模块使用。外设锁相环,其产生
时钟主要供外设模块使用。
1、系统锁相环(System PLL)
系统锁相环可以将低频的外部输入时钟源进行倍频,提供给CPU等模块稳定高效的时钟源,同时提供安全
监控功能,当外部时钟源超出范围时执行紧急动作。系统锁相环模块示意图如下:
由图可知外部输入时钟源fOSC首先经过一个P-DIV进行预分频,在经过锁相环模块倍频得到fDCO,最后通过
K2-DIV分频得到最终的输出频率FPLL0。这就是系统时钟。
P:预分频值P-DIV+1,P-DIV对应寄存器SYSPLLCON0.PDIV
N:反馈分频值NDIV+1,NDIV对应寄存器SYSPLLCON0.NDIV
K2:输出分频值K2-DIV+1,K2-DIV对应寄存器SYSPLLCON1.K2DIV
在DataSheet中对FDCO时钟输入范围限制在10MHz---40MHz,也就是在20MHzfOSC下,P的范围为0/1,一般
P-DIV设为0。也就是fDOC输入为20MHz;然后fDCO时钟输出范围为400---800MHz,若要输出PLL0为主频最大
300MHz,fDCO最适合的输出频率为600MHz,即NDIV设置为29;然后将K2-DIV设置为1。进行二倍分频,
最终得到FPLL0=300MHz。
锁相环是一个反馈电路设计,在初始化设置完时钟后,可通过while循环SYSPLLSTAT.LOCK==0来等待锁相环
稳定。若需在运行中设置锁相环,需注意关闭SMU中的PLL监控(默认关闭),否则会产生误报Tick丢失故障。
2、外设锁相环
外设锁相环模块示意图如下:
由上图可知外部时钟源fOSC进入后同样会通过P-DIV分配,锁相环倍频,然后进行分频输出Fpll1、Fpll2、
fhsct三个输出时钟。其中fhsct是提供给HSSL模块使用的一路特殊时钟。需要关注的参数:预分频P-DIV、
反馈分频值NDIV、pll1输出分频值K2-DIV、pll2输出分频值K3-IDV、除数分频值DIVBY。
P:预分频值P-DIV+1,P-DIV对应寄存器PERPLLCON0.PDIV
N:反馈分频值NDIV+1,NDIV对应寄存器PERPLLCON0.NDIV
K2:输出分频值K2-DIV+1,K2-DIV对应寄存器PERPLLCON1.K2DIV
K3:输出分频值K3-DIV+1,K3-DIV对应寄存器PERPLLCON1.K3DIV
DIVBY:被除数变量,当寄存器PERPLLCON0.DIVBY为0时,DIVBY=1.6,为1时,DIVBY=2。
在DataSheet中同样存在相关外设锁相环的参数限制:
这里也是将P-DIV设置为0,外设时钟的设置需要考虑外设一般的使用情况,且要与CPU尽量避开倍数关系,
防止硬件EMC问题。考虑到外设如CAN等模块的使用情况,一般PLL1输出320MHz(PLL1到外设之间还有一层
二分频,所以作用到外设上一般是160MHz),PLL2输出200MHz,配置NDIV=31,K2-DIV=3,K3-DIV=1,DIVBY=0。
2.3、时钟分配单元(CCU)
我们得到了系统时钟PLL0,两个外设时钟PLL1和PLL2和一个特殊外设时钟HSCT。除HSCT专供HSSL使用。其它
几个主要的时钟源需要和CPU及外设模块进行连接,并设置对应的时钟分频他,CCU就是负责该功能。
CCU模块和PLL时钟源之间存在选择转换关系,如下图所示:
由上图可知,PLL1到fsource1之间存在一个可配置2倍分频器,仅当fsource1选择PLL1且CCUCON1.PLL1DIVDIS=0时
Fsource1 = Fpll1/2其余情况不分频。
各个模块所使用的时钟源如下表所示:
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=fSOURCE/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.MACANDIV来进行配置
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
时钟的设置还存在一些关系限制,如下表:
如下图,以一个20MHz的晶振源时钟配置如下图所示:
3、MACL配置实例
TC3xx时钟的配置在MCU模块中,首先我们配置系统的锁相环参数:
外设锁相环配置如下图:
各个模块的时钟频率设置,工具会自动计算分频比,不合理值会报错
MACL代码对于MCU时钟配置直接调用Mcu_InitClock()接口即可,然后等锁相环稳定,最后进行时钟分配使用
Mcu_DistributePllClock()接口。如下图:
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/sinat_37508529/article/details/141818753
|