(TC397 学习笔记)一、TOM和ATOM的时钟计算
TC397 学习笔记每次配PWM都忘记时钟怎么配专门写一篇笔记记录一下文章目录TC397 学习笔记前言一、ATOM时钟计算1. ATOM的时钟来源2. CMU_CLK的时钟来源3. CLS0_CLK的时钟来源4.ATOM时钟树总结二、TOM时钟计算1. TOM的时钟来源2. CMU_FXCLK的来源3. PWM配置三、CCU6时钟计算参考前言PWM可以用三个模块产生分别是ATOM、TOM和CCU6本文分章节记录一下三种模块时钟来源的计算方法。一、ATOM时钟计算假设需求是使用P33.4引脚输出5ms周期50%占空比的PWM。1. ATOM的时钟来源先倒着走一遍ATOM的时钟是从CMU过来的的提供CMU_CLK八路任选其一2. CMU_CLK的时钟来源CMU_CLK0-7是由CLS0_SLK经分频得到经过了Global Clock Divider分频和Clock Source x Divider分频Global Clock Divider计算公式fCMU_GCLK_EN fCLS0_CLK × Denominator ÷ Numerator这样有个好处就是可以进行分数分频举个栗子如果只有整数分频只能得到100 MHz ÷ 2 50 MHz100 MHz ÷ 3 33.333 MHz100 MHz ÷ 4 25 MHz使用分数分频后可以设置更多比例例如100 MHz × 3/5 60 MHz100 MHz × 2/5 40 MHz100 MHz × 3/8 37.5 MHzClock Source x DividerGlobal Clock分频器下面就是Clock Source 0-7分频器了这里分出来以后就可以被ATOM选择使用了。这里也要注意实际分频系数 CLK_CNT 1因为等于零的时候不分频也就是1比如GtmCmuConfigClock0Div 我这里设置的是4假设过来的 fCMU_GCLK_EN 是100MhzCMU_CLK0 fCMU_GCLK_EN ÷ GtmCmuConfigClock0Div 1 100MHz ÷ 4 1 20MHz那么CLS0_CLK又是哪里来的呢3. CLS0_CLK的时钟来源CLS0_CLK是 GTM Cluster 0的工作时钟同时也是整个CMU的基础时钟来源。CLS0_CLK的时钟来源没找到合适的图可以看出来它肯定是来自于fGTM的。fGTM配置的是200MHzATOM2就用GtmClusterConf_2可以配置成disable、直通或者2分频对应寄存器GTM_CLS_CLK_CFG的配置如果设置成2分频那么fCLS0_CLK fGTM ÷ 2 100MHz4.ATOM时钟树总结fGTM 200 MHz│▼GTM_CLS_CLK_CFG.CLS0_CLK_DIV 10b│▼cls0_clk 100 MHz│▼CMU Global NUM/DEN 1/1│▼CMU_GCLK_EN 100 MHz│▼CMU_CLK0.CLK_CNT 4│▼CMU_CLK0 20 MHz所以最后给到PWM模块使用的时钟就是20MHz了如果需要一个5ms周期的PWMPwmPeriodDefault就可以配置成100000也就是一个周期用100000个tick对应的就是5ms了标准的5ms周期输出二、TOM时钟计算ATOM写的有点复杂了TOM就随便写一下把主要区别在CMU最后的分频上1. TOM的时钟来源TOM用的是CMU_FXCLK。2. CMU_FXCLK的来源可以看到TOM和ATOM一样都是从CMU_GCLK_EN分过来的但是还会经过一个FXCL_SEL的选择器也就是除了红色线外还可以用CMU_CLK当时基见图二。后面的FXCLK Divider 0-4每个都是固定的分频器CMU_GCLK_EN│├─ /1 → CMU_FXCLK0├─ /16 → CMU_FXCLK1├─ /256 → CMU_FXCLK2├─ /4096 → CMU_FXCLK3└─ /65536 → CMU_FXCLK4我选用了CMU_FXCLK0也就是不分频100MHz直接给到PWM。3. PWM配置现在PWM是100MHz如果想输出5ms的周期PWM那PwmPeriodDefault就得配500000以上是错误示范TOM 的周期/比较寄存器是 16 位最大值只能配到0xFFFF也就是65535ATOM是 24 位能配到0xFFFFFF也就是16777215。所以需要把PWM的时钟再降低一些改用CMU_FXCLK116分频。100MHz ÷ 16 6250000HzPwmPeriodDefault 6250000 ÷ 200 31250三、CCU6时钟计算有点忘了需求再写吧这一块参考【User Manual】AURIXTC3XX_um_part1_v1.4.pdf