MSP432---Timer_A定时器详解

这篇具有很好参考价值的文章主要介绍了MSP432---Timer_A定时器详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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的结构框图如下图所示:

msp432定时器,MSP432-RSLK小车,单片机,嵌入式硬件

        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)

msp432定时器,MSP432-RSLK小车,单片机,嵌入式硬件

msp432定时器,MSP432-RSLK小车,单片机,嵌入式硬件

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

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

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

msp432定时器,MSP432-RSLK小车,单片机,嵌入式硬件

 2.1 停止模式

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

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

 2.2 增计数模式

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

msp432定时器,MSP432-RSLK小车,单片机,嵌入式硬件

 2.3 连续计数模式

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

msp432定时器,MSP432-RSLK小车,单片机,嵌入式硬件

 2.4 增减计数模式

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

msp432定时器,MSP432-RSLK小车,单片机,嵌入式硬件

3. 捕获/比较模块

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

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

msp432定时器,MSP432-RSLK小车,单片机,嵌入式硬件

 3.1 捕获模式

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

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

 

msp432定时器,MSP432-RSLK小车,单片机,嵌入式硬件

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

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

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

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

msp432定时器,MSP432-RSLK小车,单片机,嵌入式硬件

        如果第二次捕获在第一次捕获的值被读取之前发生,捕获比较寄存器就会产生一个溢出逻辑,在此情况下,将置位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)进行选择,见下表:

 

msp432定时器,MSP432-RSLK小车,单片机,嵌入式硬件

例子: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 up

void PWM_Init34(uint16_t period, uint16_t duty3, uint16_t duty4){
  if(duty3 >= period) return; // bad input
  if(duty4 >= period) return; // bad input
  P2->DIR |= 0xC0;          // P2.6, P2.7 output
  P2->SEL0 |= 0xC0;         // P2.6, P2.7 Timer0A functions
  P2->SEL1 &= ~0xC0;        // P2.6, P2.7 Timer0A functions
  TIMER_A0->CCTL[0] = 0x0080;      // output mode : CCI0 toggle
  TIMER_A0->CCR[0] = period;       // Period is 2*period*8*83.33ns is 1.333*period
  TIMER_A0->EX0 = 0x0000;          // divide by 1(IDEX divider)
  TIMER_A0->CCTL[3] = 0x0040;      // output mode : CCR3 toggle/reset
  TIMER_A0->CCR[3] = duty3;        // CCR3 duty cycle is duty3/period
  TIMER_A0->CCTL[4] = 0x0040;      // output mode : CCR4 toggle/reset
  TIMER_A0->CCR[4] = duty4;        // CCR4 duty cycle is duty4/period
  TIMER_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寄存器

msp432定时器,MSP432-RSLK小车,单片机,嵌入式硬件

 msp432定时器,MSP432-RSLK小车,单片机,嵌入式硬件

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

6. 软件实例

(6条消息) PWM驱动直流电机_一颗ting的博客-CSDN博客https://blog.csdn.net/qq_43855258/article/details/126371468文章来源地址https://www.toymoban.com/news/detail-605102.html

到了这里,关于MSP432---Timer_A定时器详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MSP430F5529库函数定时器A——捕获实验

    需提前学习:MSP430F5529库函数学习——串口;MSP430F5529库函数定时器A——硬件PWM 目录 引脚手册获取 实验目的 代码 代码解析 串口数据发送部分 数据捕获部分 定时器部分可选参数 设置定时器部分 捕获部分可选参数 设置捕获引脚部分 中断处理 TA2IV_TACCR2解析 TA2IV_TAIFG解析 主函

    2024年02月13日
    浏览(42)
  • MSP430F5529库函数定时器A——硬件PWM

    需提前学习:MSP430F5529库函数定时器A——定时中断;引脚手册获取; 目录 先上代码 详解 引脚复用 选择引脚 获取引脚手册 看手册  时钟选择 分频 周期 REGISTER选择 比较输出模式 模式类型  增计数模式下的比较输出 连续计数模式下的比较输出 增减计数模式下的比较输出 占

    2024年02月16日
    浏览(61)
  • 【电赛MSP430系列】GPIO、LED、按键、时钟、中断、串口、定时器、PWM、ADC

    MSP430 是德州仪器(TI)一款性能卓越的超低功耗 16 位单片机,自问世以来,MSP430 单片机一直是业内公认的功耗最低的单片机。除采用先进的制造工艺使芯片的静态电流尽可能降低外,MSP430 的独立可配置的时钟系统是其低功耗的基石之一。在追求绿色能源的今天,MSP430 超低功

    2024年02月02日
    浏览(69)
  • 利用MSP430F5529定时器捕获功能,实现信号周期或频率的测量

    // 这个程序利用TIMER A0生成1KHz的方波,从引脚P1.3输出,送到引脚P7.4,  // 再利用TIMER B0测量周期。为测试方便,引脚P1.0输出32KHz的ACLK, // 引脚P2.2输出12MHz的SMCLK. //  ACLK = LFXT1 = 32kHz; SMCLK = MCLK = 12MHz // //                 MSP430F5529 //             ------------------------- //      

    2024年02月16日
    浏览(41)
  • MSP432学习笔记4:时钟与滴答计时器

    所用单片机型号:MSP432P401r 今日继续更新我的MSP432电赛速通笔记: 提示: 本节内容相当于讲述delay_ms() 和delay_us() 俩延时函数的由来, 所以不需要花费过多时间斟酌 MSP432单片机各部件能在有条不紊地自动工作,实际上是在其系统时钟作用下,由CPU指挥芯片内各个部件自

    2024年02月16日
    浏览(58)
  • 【Java|多线程与高并发】定时器(Timer)详解

    在Java中,定时器 Timer 类是用于执行定时任务的工具类。它允许你安排一个任务在未来的某个时间点执行,或者以固定的时间间隔重复执行。 在服务器开发中,客户端向服务器发送请求,然后等待服务器响应. 但服务器什么时候返回响应,并不确定. 但也不能让客户端一直等下去

    2024年02月07日
    浏览(46)
  • 【GD32】从0开始学GD32单片机(10)—— TIMER基本定时器详解+1毫秒延时例程

    在GD32中定时器是非常重要的外设,它可以帮我们精准的控制程序的调度,就如之前讲过的SysTick就是一个定时器,我们可以通过设置这个定时器的寄存器实现延时函数。 GD32的定时器可大致分为3种—— 基本定时器、通用定时器、高级定时器 。 它们之间的区别如下图所示: 这

    2024年01月17日
    浏览(57)
  • Flink timer定时器

    常见timer 基于处理时间或者事件时间处理过一个元素之后, 注册一个定时器, 然后指定的时间执行. Context和OnTimerContext 所持有的TimerService对象拥有以下方法: currentProcessingTime(): Long 返回当前处理时间 currentWatermark(): Long 返回当前watermark的时间戳 registerProcessingTimeTimer(timestamp: Lon

    2024年02月07日
    浏览(53)
  • Python中的定时器用法:Timer定时器和schedule库

    目录 一、引言 二、Timer定时器 1、Timer定时器的原理 2、Timer定时器的使用方法 3、Timer定时器的实际应用案例 三、schedule库 1、schedule库的原理 2、schedule库的使用方法 3、schedule库的实际应用案例 四、Timer定时器和schedule库的比较 1、功能差异 2、适用场景 五、实际应用案例 六、

    2024年01月16日
    浏览(74)
  • Jmeter之同步定时器(Synchronizing Timer)

    同步定时器类似LoadRunner的集合点,作用是阻塞线程,达到指定的线程数量后,再一起释放。 添加定时器同步定时器(Synchronizing Timer) 1、模拟用户组的数量:每次释放的线程数量,即 并发数。 默认为0 设置为0则并发数等于线程租中的线程数;设置大于0则等待达到这个数量

    2024年02月11日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包