学习msp430单片机时,熟练掌握定时器的使用,可满足多种应用需求。例如,调节电动机(特别是直流电动机)转速时,通常利用定时器生成PWM信号来控制电机转速。以下以msp430的Timer_A为例,介绍PWM信号的生成方法。
1、 msp430x2xx系列单片机通常包含Timer_A、Timer_B和看门狗定时器中的一个或多个。本文先介绍Timer_A定时器,其他定时器原理与此相似。
2、 Timer_A定时器功能概述
3、 Timer_A 是一个 16 位定时/计数器,支持多路捕获与比较功能。其时钟源可选 TACLK、ACLK、SMCLK 或 INCLK。其中 ACLK 为辅助时钟,SMCLK 为子系统时钟,通过 TASSELx 设置具体时钟源。

4、 需要注意的是,从上图可以看出
5、 IDx可用于对输入时钟源进行分频,支持1、2、4、8分频。
6、 TAR为16位定时计数器,可对分频后的时钟信号进行边沿计数。
7、 TAR计数值可与CCR1/CCR2值对比,若启用对应比较中断,计数值达到CCRx时将触发中断信号。
8、 若要启用输入捕获/比较功能,需配置相应模块,此处暂不详述。以下是输出示例:

9、 如何设置定时器:
10、 若需PWM信号输出,应配置引脚功能;
11、 设置定时器的基准计数器CCR0值,从而确定PWM信号的周期。
12、 配置定时器CCR1与CCR2,调整PWM输出的占空比参数。
13、 设置定时器中断与比较输出模式;
14、 选择定时器时钟源,建议采用SMCLK或ACLK,配置工作模式,开启系统中断GIE。
15、 (6)编写中断处理程序。
16、 配置Timer_A时,通常需要设置以下寄存器:

17、 要注意,同一个定时器可能有2个中断向量地址:一个是CCR0定时器溢出中断,另一个为CCR1/CCR2或TAR计数溢出中断,具体可参考以下代码实现。
18、 */
19、 {
20、 }
21、 CCR1/CCR2和TAR计数溢出中断对应的中断服务程序如下:
22、 */
23、 {
24、 {
25、 }
26、 }
27、 TA0IV为中断向量寄存器,用于区分定时器中断来源。当TA0IV=2时,表示CCR1中断;若TA0IV=10,则为定时器TAR计数溢出中断。
28、 程序员写代码:
29、 /**
30、 */
31、 {
32、 }
33、 /**
34、 *
35、 */
36、 {
37、 }
38、 /**
39、 *
40、 */
41、 {
42、 }
43、 上述仅为示例代码,Timer_A选用SMCLK时钟,且SMCLK频率为16MHz。
44、 开启或关闭定时器,可使用以下函数进行控制:
45、 /**
46、 *
47、 */
48、 {
49、 {
50、 }
51、 {
52、 }
53、 }
54、 MC_0时,定时器处于关闭状态,不会运行。如有疑问,请查阅MSP430x2xx系列单片机说明书。