ZHCABH5B December 2011 – February 2022 MSP430G2112 , MSP430G2152 , MSP430G2212 , MSP430G2252 , MSP430G2312 , MSP430G2352 , MSP430G2412 , MSP430G2452
除了设置时钟、引脚和其他标准 MSP430 初始化外,还需要针对多时基方法实现两个主要代码段:计时器初始化和计时器 ISR。不管用户尝试实现的频率如何,计时器初始化都基本相同。以下代码显示了 multi_freq_g2452_example.c 文件中的计时器初始化:
TACCTL0 = OUTMOD_4 + CCIE; // CCR0 toggle, interrupt enabled
TACCTL1 = OUTMOD_4 + CCIE; // CCR1 toggle, interrupt enabled
TACCTL2 = OUTMOD_4 + CCIE; // CCR2 toggle, interrupt enabled
TACTL = TASSEL_2 + MC_2 + TAIE; // SMCLK, Contmode, int enabled
根据具体的应用,此初始化过程中唯一要做出的更改是使用的 TxCCTLx 寄存器数量(应根据所需的输出频率数量来设置)和 TxCTL 寄存器中的 TxSSELx 位(应根据所需的计时器时钟源来设置)。
如果除了多个频率外还需要多个占空比,那么还需要对 TxCCTLx 寄存器进行一项设置:必须设置 CCISx 位。这是因为用于生成多个频率和占空比的 ISR(请参阅Topic Link Label4.1.2)使用 CCI 位来读回引脚上的信号,从而确定输出当前处于高电平还是低电平阶段。CCISx 位选择哪个信号或引脚会连接到该 TxCCTLx 寄存器对应的内部 CCI 信号 – 连接到 CCIxA 或 CCIxB 的任一引脚或信号。对于此实现,用户必须选择用于输出 PWM 的 GPIO 引脚所对应的 CCISx 设置。有关器件上每个计时器模块的计时器信号连接信息,请参阅具体器件的数据表。以下代码显示了 multi_freq_pwm_g2452_example.c 文件中的计时器初始化:
TACCTL0 = CCIS_0 + OUTMOD_4 + CCIE; // CCR0 toggle, interrupt enabled, CCI0A input
TACCTL1 = CCIS_0 + OUTMOD_4 + CCIE; // CCR1 toggle, interrupt enabled, CCI1A input
TACCTL2 = CCIS_0 + OUTMOD_4 + CCIE; // CCR2 toggle, interrupt enabled, CCI2A input
TACTL = TASSEL_2 + MC_2 + TAIE; // SMCLK, Contmode, int enabled