YTM32增强型定时器eTMR的影子寄存器组及其同步载入机制解析
文章目录
Introduction
在微控制器平台上,设计多数能够产生多路PWM信号输出的高精度定时器外设(例如NXP的FTM、FlexPWM等模块),大多会使用两路时钟源驱动电路系统工作:一路是总线时钟,用于用户(CPU或DMA等总线master设备)访问外设寄存器的数字电路部分(digital wrapper);另一路专供给计数器(也可称为模块的“功能时钟”),这个时钟根据设计需求,大多越快越好,将精细的计数节拍粒度也对应着输出PWM信号更精密的控制分辨率。然而,当用户通过配置寄存器要作用于计数器相关的电路时,因为两个时钟源的频率和相位都是不同步的(来自于两个不同的独立时钟源),另外,在有些应用中,软件配置需要在特定的安全的时刻才能生效,这就是所谓的同步机制。
YTM32的增强型定时器eTMR外设,也设计了这种同步机制,并且对应使用了“影子寄存器”用于暂存尚未生效的寄存器配置值。一些用户特别是无刷电机应用中,需要严格控制eTMR输出PWM的信号的多项配置同时更新(软件写入寄存器还是有先后顺序的,但硬件要同时载入生效,否则会产生“冲突冒险”危险状态),对eTMR影子寄存器的同步机制需要特别了解。本文面向这些应用场景,以YTM32B1ME微控制器为例,从RM手册出发,将详细讲解对eTMR的同步机制。
eTMR的两路时钟源
本例中,YTM32B1ME05微控制器的手册中有表Table 13.1: IP Clock Control Table,记录eTMR使用FAST_BUS_CLK作为总线时钟,如图x所示。

在表Table 13.1: IP Clock Control Table的备注里,专门注明了eTMR外设模块的功能时钟是固定接入了FAST_BUS_CLK。如图x所示。

额,这只是碰巧使用了同一个时钟源。
在eTMR外设模块内部,还可以通过配置寄存器eTMR_CTRL[CLKSRC],选择使用计数的功能时钟源,来自FAST_BUS_CLK?或是从eTMR_TCLK_IN0引脚接入的外部时钟源。而在CIM外设中,可以通过配置寄存器CIM_ETMROPT0[ETMRx_EXTCLK_SEL],选择eTMR_TCLK_IN0/eTMR_TCLK_IN1/eTMR_TCLK_IN2其中之一生效。
eTMR的计数时钟信号CLK_SRC进入eTMR外设后,还需要经过一个7位的分频器,才会送入eTMR的计数器驱动计数CLK_CNT。这个分频器的分频因子,是在寄存器eTMR_CTRL[CLKPRS]中设定的。有计数器计数时钟频率的计算公式如下:
C L K C N T = C L K S R C C T R L [ C L K P R S ] + 1 CLK_{CNT} = \frac{CLK_{SRC}}{CTRL[CLKPRS]+1} CLKCNT=

本文详细解读了YTM32增强型定时器eTMR的影子寄存器组,以及其同步载入机制,包括不同时钟源、寄存器配置、同步更新流程和频率控制,以帮助用户理解在电机控制等应用中如何有效利用这一机制进行精确的PWM控制。
最低0.47元/天 解锁文章
46

被折叠的 条评论
为什么被折叠?



