msp432数据手册slau356h.pdf,P782


目录

1. 时钟源选择和分频器

2. 定时器A工作(计数)模式

2.1 停止模式

2.2 增计数模式

2.3 连续计数模式

2.4 增减计数模式

3. 捕获/比较模块

3.1 捕获模式

3.2 比较模式

4. 中断

5. Timer_A寄存器

6. 软件实例


MSP432单片机定时器模块有:看门狗定时器,16位定时器A,32位定时器,实时时钟。这里主要讨论定时器A。

定时器A(Timer_A)特点:

(1) 4种计数工作模式的异步16位定时/计数器

(2)参考时钟源可选择配置

(3)具有7个可配置的捕获/比较寄存器

(4)具有8种输出模式,可配置PWM输出

(5)异步输入和输出锁存

Timer_A可主要分为两个部分:主计数器和捕获/比较模块。主计数器负责定时、计时/计数,计数值(TAR寄存器的值)被送到各个捕获/比较模块中,它们可在无需CPU干预情况下根据触发触发条件和计数器值自动完成某些测量和输出功能。

定时器A的结构框图如下图所示:

16位定时器的计数值寄存器TAR在每个时钟信号的上升沿进行增加/减少,可利用软件读取TAR寄存器的计数值。此外,当定时时间到,并且产生溢出时,定时器可产生中断。置位定时器控制寄存器中的TACLR控制位可自动清除TAR寄存器的计数值;同时,在增减计数模式下,清除了时钟分频器和计数方向。

1. 时钟源选择和分频器

根据定时器A的结构框图可知,可通过TASSEL控制位进行选择Timer_A的时钟源(ACLK、SMCLK、TACLK、INCLK),对于选择的时钟源可通过ID控制位进行1/2/4/8分频,后通过TAIDEX控制位进行1/2/3/4/5/6/7/8分频。

PS:TASSEL控制位(寄存器CTL的9-8bit),ID控制位(寄存器CTL的7-6bit),TAIDEX控制位(寄存器EX0的2-0bit)

eg:若选择12MHz SMCLK作为Timer_A时钟源,分频值均为1,则每计一个数所需时长为:1/12000000=83.33ns.

2. 定时器A工作(计数)模式

计数器A有4种计数模式:停止模式、增计数模式、连续计数模式、增减计数模式,其工作模式可通过MC控制位(CTL寄存器5-4bit)进行选择,见下表。

2.1 停止模式

停止模式用于定时器暂停,并不发生复位,所有寄存器现行的内容在停止模式结束后都可用。当定时器暂停后重新计数时,计数器将从暂停时的值开始以暂停前的计数方向计数。

eg:停止模式前,Timer_A定时器工作于增减计数模式并且处于下降计数方向,停止模式后,Timer_A仍然工作于增减计数模式下,从暂停前的状态开始继续沿着下降方向开始计数。如若不想这样,则可通过 TAxCTL寄存器中的TACLR控制位来清除定时器的计数及方向记忆特性。

2.2 增计数模式

比较寄存器TAxCCR0用作Timer_A增计数模式的周期寄存器,由于TAxCCR0为16位寄存器,所以在该模式下,定时器A连续计数值应小于0FFFFh。TAxCCR0的数值定义了定时的周期,计数器TAR可以增计数到TAxCCR0的值,当计数值与TAxCCR0的值相等(或定时器值大于TAxCCR0的值)时,定时器复位并从0开始重新计数。

2.3 连续计数模式

        在连续计数模式下,Timer_A定时器增计数到0FFFFh之后从0开始重新计数,如此往复。

2.4 增减计数模式

需要对称波形的情况往往可以使用增减计数模式。在该模式下,定时器先增计数到TAxCCR0的值,然后反方向减计数到0。计数周期仍由TAxCCR0定义,它是TAxCCR0值的2倍。

3. 捕获/比较模块

除了主计数器之外,Timer_A定时器还具有高达7个相同的捕获/比较模块TAxCCRn(其中n等于0~6),任何一个捕获/比较模块都可以用于捕获事件发生的时间或产生的时间间隔。每个捕获/比较模块都有单独的模式控制寄存器以及捕获/比较值寄存器。可通过CAP控制位(CCTLn寄存器中的8bit,n为0-6)选择捕获/比较模块工作在捕获模式/比较模式。

捕获/比较模块的逻辑结构见下图(以CCR6为例):

3.1 捕获模式

CAP控制位(CCTLn寄存器8bit)设置为1时,捕获/比较模块配置为捕获模式。在捕获模式下,用定时器输入引脚电平跳变触发捕获电路,将此刻主计数器的计数值自动保存到相应的捕获值寄存器中,捕获事件发生的时间,可以用于测频率、测周期、测脉宽、测占空比等需要获得波形中精确时间。

捕获输入CCIxA和CCIxB可连接外部引脚或内部信号,这需通过CCIS控制位(CCTLn寄存器13-12bit)进行配置。可通过CM控制位(CCTLn寄存器15-14bit)将捕获输入信号触发沿配置为上升沿触发、下降沿触发或两者都触发。

捕获事件在所选输入信号触发沿产生,如果产生捕获事件,定时器将完成以下工作:

(1)主计数器TAR寄存器计数值复制到TAxCCRn寄存器中;

(2)置位中断标志位CCIFG(CCTLn寄存器0bit)

输入信号的电平可在任意时刻通过CCI控制位(CCTLn寄存器3bit)进行读取。捕获信号可能会和定时器时钟不同步,并导致竞争条件产生,将SCS控制位(CCTLn寄存器11bit)置位,可在下个定时器时钟使捕获同步。捕获信号示意图见下图。

如果第二次捕获在第一次捕获的值被读取之前发生,捕获比较寄存器就会产生一个溢出逻辑,在此情况下,将置位COV标志位。注意COV标志位必须通过软件消除。

总结:捕获模式的实质就是在捕获上升沿或下降沿的同时进入捕获中断,执行中断服务函数,同时把TAR计数的值赋给 TACCRn寄存器(n要看具体用的是哪个引脚的捕获),从而捕获到当前TAR(计数器)的值。

步骤:

step1. for 主计数器模块:设置TAxCTL寄存器(工作模式--stop mode、时钟源、预分频),清零TAR计数值;

step2. for 捕获/比较模块:设置TAxCCTLn寄存器(信号触发沿、输入引脚、信号同步、捕获/比较模式、中断使能、clear中断标志位);

step3. 设置NVIC:在NVIC优先级寄存器中设置优先级,在NVIC中断使能寄存器中使能中断;

step4. 启动计数器(up、continuous、up/down mode);

//以上步骤写在Timer_A捕获初始化函数中

step5. 编写中断服务函数;

step6. 启用中断(在所有设备初始化后的主程序中);

3.2 比较模式

CAP控制位设为0时,捕获/比较模块工作在比较模式。在比较模式下,每个捕获/比较模块将不断地将自身的比较值寄存器与主计数器的计数值进行比较,一旦相等,就将自动改变定时器输出引脚的输出电平,Timer_A具有8种输出模式,从而可在无需CPU干预的情况下输出PWM波、可变单稳态脉冲、移向方波、相位调制等常用波形。此模式下TAxCCRn的值可由软件写入,并通过比较器与主计数器的计数值TAR进行比较,当TAR计数到TAxCCRn时,将依次产生以下事件:

(1)置位中断标志位CCIFG;

(2)产生内部信号EQUn=1;
(3)EQUn信号根据不同的输出模式触发输出逻辑;
(4)输入信号CCI被锁存到SCCI。

每个捕获/比较模块都包含一个输出单元,用于产生输出信号,例如PWM信号等。每个输出单元都有8种工作模式,可产生EQUx的多种信号。输出模式可通过OUTMOD控制位(CCTLn寄存器中的7-5bit,n为0-6)进行选择,见下表:

例子:P2.6(TA0.3), P2.7(TA0.4)输出PWM波

/ PWM outputs on P2.6(TA0.3), P2.7(TA0.4)
// Inputs:  period : the value of TA0CCR0 //the Period of PWM is 2*period*8*(1/12M)
//          duty3  : the value of TA0CCR3 //the duty cycle of PWM_P2.6 is duty3/period
//          duty4  : the value of TA0CCR4 //the duty cycle of PWM_P2.7 is duty4/period
// Outputs: none
// SMCLK = 48MHz/4 = 12 MHz, 83.33ns
// Counter counts up to TA0CCR0 and back down
// Let Timerclock period T = 8/12MHz = 666.7ns
// period of P7.3 squarewave is 4*period*666.7ns
// P2.6=1 when timer equals TA0CCR3 on way down, P2.6=0 when timer equals TA0CCR3 on way up
// P2.7=1 when timer equals TA0CCR4 on way down, P2.7=0 when timer equals TA0CCR4 on way upvoid PWM_Init34(uint16_t period, uint16_t duty3, uint16_t duty4){if(duty3 >= period) return; // bad inputif(duty4 >= period) return; // bad inputP2->DIR |= 0xC0;          // P2.6, P2.7 outputP2->SEL0 |= 0xC0;         // P2.6, P2.7 Timer0A functionsP2->SEL1 &= ~0xC0;        // P2.6, P2.7 Timer0A functionsTIMER_A0->CCTL[0] = 0x0080;      // output mode : CCI0 toggleTIMER_A0->CCR[0] = period;       // Period is 2*period*8*83.33ns is 1.333*periodTIMER_A0->EX0 = 0x0000;          // divide by 1(IDEX divider)TIMER_A0->CCTL[3] = 0x0040;      // output mode : CCR3 toggle/resetTIMER_A0->CCR[3] = duty3;        // CCR3 duty cycle is duty3/periodTIMER_A0->CCTL[4] = 0x0040;      // output mode : CCR4 toggle/resetTIMER_A0->CCR[4] = duty4;        // CCR4 duty cycle is duty4/periodTIMER_A0->CTL = 0x02F0;        // SMCLK=12MHz, divide by 8(ID divider), up-down mode//TA0CTL register// bit  mode// 9-8  10    TASSEL, SMCLK=12MHz// 7-6  11    ID, divide by 8// 5-4  11    MC, up-down mode// 2    0     TACLR, no clear// 1    0     TAIE, no interrupt// 0          TAIFG
}

4. 中断

        16位定时器Timer_A具有两个中断向量:
 
        (1)TAxCCR0的中断向量CCIFG0;
        
        (2)具有其余TAxCCRn的中断标志CCIFGn及TAIFG的中断向量TAIV。

在捕获模式下,当定时计数器TAR的值被捕获到TAxCCRn寄存器内时,置位相关的CCIFGn中断标志位。在比较模式下,当定时计数器TAR的值计数到TAxCCRn的值时,置位相关的CCIFGn中断标志位。也可利用软件置位或清除任意一个CCIFG中断标志位,当相关的CCIE中断允许位置位,CCIFGn中断标志位将请求产生中断。

TAxIV中断主要包括TAxCCRn的中断标志CCIFGn和TAIFG中断标志。中断向量寄存器可被用来判断当前被挂起的Timer_A中断,之后通过查中断向量表得到中断服务程序的入口地址,并将其添加到程序计数器中,程序将自动转入中断服务程序。禁用Timer_A中断功能并不影响TAxIV中断向量寄存器的值。

5. Timer_A寄存器

PS: 各寄存器详细介绍见msp432数据手册slau356h.pdf,P796。

6. 软件实例

(6条消息) PWM驱动直流电机_一颗ting的博客-CSDN博客https://blog.csdn.net/qq_43855258/article/details/126371468

MSP432---Timer_A定时器详解相关推荐

  1. Jmeter性能测试工具Timer定时器详解

    jmeter提供了很多元件,帮助我们更好的完成各种场景的性能测试,其中,定时器(timer)是很重要的一个元件,jemter提供了9种定时器,下面一一介绍: 一.定时器的作用域 1.定时器是在每个sa ...

  2. STM32的定时器详解(嵌入式学习)

    STM32的定时器详解 0. 前言 1. Systick定时器 概念 工作原理 时钟基准 Systick练习 2. HAL_Delay函数分析 3. 定时器 基本概念 定时器分类 定时器组成 计数器 ...

  3. STM32 定时器详解

    STM32 定时器详解 吃了一个猛亏,自己理解花了大半天时间,结果一看代码发现巨简单 算了,把自己理解的放上来吧 目录 STM32 定时器详解 前言 一.定时器种类和区分 二.时钟源 三.计数过程 3 ...

  4. STM32基础定时器详解

    目录 01.定时器介绍 02.时钟源 03.时基单元 04.计数模式 4.1.向上计数模式 4.2.向下计数模式 4.3.中央对齐(向上/向下计数模式) 05.基础定时代码 定时器最基本的功能就是定时 ...

  5. Timer定时器详解

    Timer定时器主要做定时任务或者按照一定的时间间隔做任务,例如每天4点钟定时执行作业等 Timer的特性 1.它属于单线程的,每创建个Timer实例,就会创建一个新线程 2.Timer默认情况下不是 ...

  6. stm32f103zet6linux,stm32f103zet6定时器详解及应用

    1.stm32f103zet6芯片及引脚图 2.stm32f103xx器件功能与配置 3.stm32f103zet6 定时器 大容量的STM32F103XX增强型系列产品包含最多2个高级控制定时器.4 ...

  7. STM32F103的11个定时器详解

    STM32F103系列的单片机一共有11个定时器,其中: 2个高级定时器 4个普通定时器 2个基本定时器 2个看门狗定时器 1个系统嘀嗒定时器 出去看门狗定时器和系统滴答定时器的八个定时器列表; 8个 ...

  8. linux 内核定时器精度_linux使用select实现精确定时器详解

    在编写程序时,我们经常会用到定时器.首先看看select函数原型如下: int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set * ...

  9. linux多线程select定时器,linux使用select实现精肯定时器详解

    转载自:http://www.jb51.net/article/43199.htm数组 本文讲述如何使用select实现超级时钟.使用select函数,咱们能实现微妙级别精度的定时器.同时,selec ...

最新文章

  1. 潦草字体在线识别_小学生“狂草”字体走红,字迹凌乱老师认不出,网友:谁翻译一下...
  2. 代码Overlay机制
  3. Redis(十二):Redis事务的基本操作
  4. 基本shell编程【3】- 常用的工具awk\sed\sort\uniq\od
  5. 防止U盘中病毒的小技巧
  6. 经常听到一些老板说,你来公司上班就只是为了赚钱吗?
  7. 开发者测试android studio 试手
  8. 数据挖掘项目:银行信用评分卡建模分析(上篇)
  9. MySQL数据库使某个不是主键的字段唯一
  10. 解决Android 11 获取不到Serial number方法
  11. beetle-j2ee-application-framework框架介绍.md
  12. RGB与CMYK两种色彩模式的区别
  13. 计算机出现假桌面怎么解决办法,Win10系统下“AppHangXProcB1”导致桌面频繁假死如何解决?...
  14. 【实践】人体红外传感器
  15. Ebean报错java.lang.ClassCastException: com.project.model.xxx cannot be cast to com.project.model.xxx
  16. Sony微单相机alpha6000 wifi远程控制(2)
  17. Mysql——分组查询
  18. MOTT介绍(2)window安装MQTT服务器和client
  19. 3V, 256Mb MX25L25673GM2I-08G FLASH - NOR 存储器PDF
  20. “天才少年”!华中科技大学这一研究生,刚毕业年薪201万!

热门文章

  1. 2021年12月20日|21日|22日|23日|24日
  2. 145240-80-8|Neu5Ac Methyl Ester是一种广泛分布于自然界中的碳水化合物
  3. WSL如何帮我从MacOS回归Windows
  4. 珂朵莉树(odt老司机树)
  5. ConfigBus:Twitter的动态配置实践
  6. 如何快速的进行sql脚本升级
  7. 精灵盛典服务器最多,精灵盛典黎明精灵新生824服开服时间表_精灵盛典黎明新区开服预告_第一手游网手游开服表...
  8. Python type(anyObj) 函数与 types 模块
  9. clearInterval()仍然执行剩余代码的解决方案
  10. 基于昇思MindSpore的同元软控AI系列工具箱正式发布,大幅度降低产品研发成本