定时器介绍及简单应用

定时器介绍及简单应用

文章目录

1.定时器基本介绍

定时器的用途:定时控制,精确延时,频率测量,脉宽测量,信号产生等。

1.1MSP430的四种定时器:

  1. 看门狗定时器:基本定时,当程序发生错误时执行一个受控的系统重启动
  2. 定时器A:基本定时,工作在低频率,低功耗条件下
  3. 定时器B:基本定时,功能基本同定时器A,但更灵活,功能更强大
  4. 实时时钟:基本定时,日历功能

2.定时器A(Timer_A)

2.1特点

定时器A具有如下特点:

  • 4种类运行模式 的异步16位定时/计时器
  • 参考时钟源可选择
  • 5/3 可配置的捕获/比较寄存器
  • 可配置PWM输出
  • 异步输入和输出锁存
  • 具有可对Timer_A中断快速响应中断向量寄存器

同步和异步的区别:

  • 执行顺序:同步按顺序依次执行任务;异步任务执行顺序不固定,可同时启动多个任务。
  • 阻塞特性:同步通常会阻塞线程,直到操作完成;异步一般是非阻塞的,调用后可继续执行其他代码。
  • 应用场景:同步适用于需保证任务顺序和数据一致性的场景;异步用于处理耗时操作,以提升程序响应速度和性能。

2.2寄存器的命名

MSP430F5529 的定时器A由3个形似相近的模块构成。其中TA0有5个捕获/比较器;TA1/2有3个捕获/比较器

命名形式:TAx,TAxCCRx(x与具体型号有关)。

例如:

c 复制代码
TA0,TA0CCR0,TA0CCR1,TA0CCR2......
    
TA1,TA1CCR0,TA1CCR1,TA1CCR2......

2.3寄存器表格

2.4计数器原理说明

2.4.1时钟源、分频器、计数器、工作模式

计数器部件由时钟源选择分频器16位计数器 以及工作模式控制组成

2.4.2计数器复位

2.5定时器中断

2.5.1定时器中断条件及标志位
  • 中断可以由计时器溢出 引起,也可来自捕获/比较寄存器
  • 定时计数器溢出中断标志位时TAIFG
  • TAxCCR0 中断标志位TAxCCR0 CCIFG
2.5.2中断的中断向量

定时器A中断有两个中断向量(以TA0为例)

  • TACCR0中断比较特殊 ,它独自 拥有一个中断向量(TIMERO AO VECTOR),是单源中断
  • 定时器溢出中断和其它两个比较/捕获中断共享一个中断向量 (TIMERO A1 VECTOR),属于共源中断。

2.6计数工作模式

Timer_A共有4中工作模式:

停止模式增计数模式连续计数模式增/减计数模式

  1. 停止模式(MCx=00)
    停止模式下计数器将暂停计数且 TAR 保持计数停止前的内容。
    当定时器启动计数时,计数器将从暂停时的值开始按照事先设置好的计数方式进行计数。
  2. 连续计数模式(MCx=10)
    在连续计数模式下,Timer A定时器增计数到0FFFFh之后从0开始重新计数,如此往复。

连续计数模式的中断:

  • 计数周期为65536
  • 当定时器计数值从0FFFFh计数到0时,置位TimerA中断标志位,之后又从0开始重新计数。(见上图)

2.6寄存器位设置说明

  • 第 15 - 10 位:Reserved(保留位),保留给未来可能的功能扩展使用,一般不进行操作 。
  • 第 9 - 8 位 :TASSEL(定时器时钟源选择位 )。
    • 00:选择 TAxCLK 作为时钟源;
    • 01:选择 ACLK(辅助时钟)作为时钟源;
    • 10:选择 SMCLK(系统主时钟)作为时钟源;
    • 11:选择 INCLK(外部输入时钟)作为时钟源。
  • 第 7 位 :ID(输入分频位 )。
    • 00:不分频;
    • 01:2 分频;
    • 10:4 分频;
    • 11:8 分频。
  • 第 6 位 :MC(计数模式控制位 )。
    • 00:停止模式;
    • 01:增计数模式;
    • 10:连续计数模式;
    • 11:增 / 减计数模式 。
  • 第 5 - 3 位:Reserved(保留位),保留用途,不操作。
  • 第 2 位:TACLR(定时器清除位 ),写 1 时清除定时器 TAxR 和捕获 / 比较寄存器,同时复位分频器,写 0 无响。
  • 第 1 位:TAIE(定时器中断使能位 ),置 1 时使能定时器溢出中断,清 0 时禁止。
  • 第 0 位:TAIFG(定时器溢出标志位 ),定时器计数溢出时置 1,可通过软件清 0 。

2.7使用TA0定时器点灯(实操)

原理:使用定时器TA0,使用SMCLK时钟,连续模式,根据定时器溢出中断来改变灯的状态。

c 复制代码
#include "intrinsics.h"
#include "msp430f5529.h"

int main(void) {
    WDTCTL = WDTPW | WDTHOLD; // 停止看门狗定时器,防止其复位系统
    P1DIR |= BIT0;
    // 配置定时器A0
    // TASSEL_2: 选择SMCLK作为时钟源
    // MC_2: 连续模式(定时器从0计数到最大值后重新开始)
    // TACLR: 清除定时器计数器
    // TAIE: 开启定时器溢出中断
    TA0CTL |= TASSEL_2 + MC_2 + TACLR + TAIE;

    // 进入低功耗模式0(LPM0),并开启全局中断(GIE)
    __bis_SR_register(LPM0_bits + GIE);
}

#pragma vector = TIMER0_A1_VECTOR
// 定时器A0的中断服务程序
__interrupt void TIMER_A1_ISR(void) {
    switch (__even_in_range(TA0IV, 14)) {
        case 0: break;       // 无中断(通常不会发生)
        case 2: break;       // CCR1 不使用
        case 4: break;       // CCR2 不使用
        case 6: break;       // 保留
        case 8: break;       // 保留
        case 10: break;      // 保留
        case 12: break;      // 保留
        case 14: 
            P1OUT ^= BIT0;//闪烁
            break;// 定时器溢出中断(TAIFG标志位触发)
        default: break;      // 默认情况,忽略
    }
}
相关推荐
序属秋秋秋1 天前
《Linux系统编程之进程环境》【环境变量】
linux·运维·服务器·c语言·c++·操作系统·系统编程
雲烟1 天前
嵌入式设备EMC安规检测参考
网络·单片机·嵌入式硬件
泽虞1 天前
《STM32单片机开发》p7
笔记·stm32·单片机·嵌入式硬件
Yue丶越1 天前
【C语言】数据在内存中的存储
c语言·开发语言·网络
田甲1 天前
【STM32】 数码管驱动
stm32·单片机·嵌入式硬件
up向上up1 天前
基于51单片机垃圾箱自动分类加料机快递物流分拣器系统设计
单片机·嵌入式硬件·51单片机
Yue丶越1 天前
【C语言】字符函数和字符串函数
c语言·开发语言·算法
纳祥科技1 天前
Switch快充方案,内置GaN,集成了多个独立芯片
单片机
蓝牙先生2 天前
简易TCP C/S通信
c语言·tcp/ip·算法
单片机日志2 天前
【单片机毕业设计】【mcugc-mcu826】基于单片机的智能风扇系统设计
stm32·单片机·嵌入式硬件·毕业设计·智能家居·课程设计·电子信息