定时器
定时器模块是MSP432单片机中非常重要的资源,可以用来实现定时控制、延时、频率测量、脉宽测量以及信号产生等。此外,还可以在多任务的系统中作为中断信号实现程序的切换。例如在MSP432单片机实时控制和处理系统中,需要每隔一定时间就对处理对象进行采样,再对获得的数据进行处理,这就要用到定时信号。
MSP432单片机的定时器模块功能如下:
(1)看门狗定时器:基本定时,当程序发送错误时执行一个受控的系统重启动;
(2)16位定时器A:基本定时,支持捕获输入信号、比较产生PWM波形等功能;
(3)32位定时器:基本定时,功能基本同定时器A,但比定时器A灵活,功能更强大;
(4)定时时钟:基本定时,日历功能。
看门狗相关知识
看门狗相关知识
看门狗定时器
MSP432单片机内部集成了看门狗定时器,既可作为看门狗使用,也可为产生时间间隔进行进行定时。当用作看门狗时,若定时时间到,将产生一个系统复位信号;如果在用户应用程序中,不需要看门狗,可将看门狗定时器用作一般定时使用,在选定的时间间隔到达时,将发生定时中断。
看门狗定时器具有如下特点:
软件可编程的8种时间间隔选择;
看门狗模式;
定时计数模式;
对看门狗控制寄存器的更改受口令保护,若口令输入错误,则控制寄存器无法更改;
多种时钟源供选择;
可选择关闭看门狗以减少功耗;
时钟故障保护功能。
MSP432单片机的看门狗定时器逻辑结构框图如图17-1所示。由该图可知,MSP432单片机的看门狗定时器由中断产生逻辑单元、看门狗定时计数器、口令比较单元、看门狗控制寄存器、参考时钟选择逻辑单元等构成。
看门狗定时计数器(WDTCNT)
看门狗定时计数器是一个32位增计数器,不能通过软件直接访问其计数值。软件可通过看门狗控制寄存器(WDTCTL)控制看门狗定时计数器及配置其产生的时间间隔。看门狗定时计数器的参考时钟源可通过WDTSSEL控制位配置为SMCLK、ACLK、VLOCLK或BCLK,产生的时间间隔可通过WDTIS控制位选择,具体请参考相应的寄存器配置。
注意:当CPU停止工作时,看门狗定时计数器会自动配置为停止计数,这样可以在程序开发和调试中,不必禁用看门狗定时器,或者当CPU停止工作时,如果计数器被允许继续运行,则不会不断地出现看门狗启动的复位。
看门狗定时器模块可以通过配置WDTCTL寄存器,使其工作在看门狗模式或定时计数模式。WDTCTL是一个16位的带密码保护的读写寄存器。对WDTCTL的配置需要先在高字节写入密码Ah,写入其它内容都会产生错误。若产生错误后,读WDTCTL高字节的结果是069h。
看门狗模式
在一个上单复位清除后,看门狗定时器被默认配置为采用SMCLK作为参考时钟源,在计数到达之前,需要通过软件设置或停止WDT。例如,如果SMCLK默认来源于设置为3MHz的DCO,则会产生大约10.92ms的看门狗间隔窗口。用户必须在看门狗复位时间间隔期满或另一个复位信号产生之前,配置、停止或清除看门狗定时器。当看门狗定时器被配置工作在看门狗模式时,利用一个错误的口令密码操作看门狗控制寄存器(WDTCTL)或选择的时间间隔期满都将产生一个PUC复位信号,一个PUC复位信号可将看门狗定时器复位到默认状态。
定时计数模式
将WDTTMSEL控制位选择为1,看门狗定时器被配置为定时计数模式。这个模式可以被用来产生周期性中断,在定时计数模式下,当选定的时间间隔到来时,将置位看门狗定时计数中断标志位(WDTIFG),但并不产生PUC复位信号。当看门狗定时计数中断允许控制位(WDTIE)置位,而且在NVIC中启动看门狗定时计数中断时,CPU将响应WDTIFG中断请求。中断请求被响应后,单片机将自动清除看门狗定时计数中断标志。当然,也可以通过软件手动清除看门狗定时计数中断标志位。
看门狗定时器中断
看门狗定时器中断利用以下两个寄存器控制看门狗定时器中断;
(1)看门狗中断标志位WDTIFG;
(2)看门狗中断允许控制位WDTIE。
当看门狗定时器工作正在看门狗模式时,看门狗中断标志位WDTIFG来源于一个复位向量中断。复位中断复位程序可利用看门狗中断标志位WDTIFG来判定看门狗定时器是否产生了一个系统复位信号。若WDTIFG标志置位,看门狗定时器产生一个复位条件,要么复位定时时间到,要么口令密码错误。
当看门狗定时器工作在定时计数模式时,当定时时间到,将置位看门狗中断标志位WDTIFG。若WTDIE使能,则可响应看门狗定时计数中断。
时钟故障保护功能
看门狗定时器提供了一个时钟故障保护功能,确保在看门狗模式下,参考时钟不失效,这就意味着低功耗模式将有可能影响看门狗定时器参考时钟的选择。如果SMCLK或ACLK作为定时器参考时钟源时失效,看门狗定时器将自动选择VCOCLK作为其参考时钟源。当看门狗定时器工作于定时计数模式时,看门狗定时器没有时钟故障保护功能。
低功耗模式下的看门狗操作
MSP432单片机具有多种低功耗模式,在不同的低功耗模式下,启用不同的时钟信号。程序的需要以及所选时钟的类型决定了看门狗定时器的配置,例如如果用户想用低功耗模式3(LPM3),需要将时钟源设置为BCLK或VLOCLK。当不需要看门狗定时器时,可利用WDTHOLD控制位关闭看门狗计数器(WDTCNT),以减少单片机功耗。
看门狗定时器控制寄存器
看门狗定时控制寄存器(WDTCTL)列表如表6-8所示。
定时器A(Timer_A)
Timer_A定时器为16位定时器,具有高达7个捕获比较寄存器。Timer_A支持多路捕获/比较、PWM输出和定时计数。Timer_A也具有丰富的中断能力,当定时时间到或满足捕获/比较条件时,将可触发定时器A中断。
定时器A具有如下特点:
4种运行模式的异步16位定时/计数器;
参考时钟源可选择配置;
高达7个可配置的捕获/比较寄存器
可配置的PWM输出;
异步输入和输出锁存;
具有可对Timer_A中断快速响应的中断向量寄存器。
基本结构
工作模式
单次计数模式:计数器计数到0就产生中断并停止计数
循环计数模式:每次计数器计数到0便产生一次中断,随后重新载入初始值计数器的值,继续计数
特性
输入捕获;
输出比较;
脉宽调制PWM(Pulse width modulation mode)。
MSP432中的定时器——Timer32
Timer32模块包含两个独立的递减计数器,每个都能配置为16位或32位。
三种运行模式——自由运行模式、周期定时器模式或单次定时器模式
自由运行模式:在计数器计数至0时,继续从最大值开始倒计时
周期定时器模式:计数器以一定的间隔产生中断,并在计数至0时重新载入最初设定的值
单次定时器模式:指计数器只产生一次中断,即计数器计数至0时,定时器挂起,直到用户对其进行重新编程
timer_A基本运行模式
MSP432中的定时器——TimerA
4个TimerA模块
每个TimerA模块有7个捕获/比较寄存器
支持中断
时钟源——ACLK、SMCLK、TAxCLK、INCLK
四种计数模式——连续计数模式、增计数模式、增减计数模式、停止
连续计数模式
增计数模式
增减计数模式
结构框图
定时器A的结构框图如图19-1所示。可见,Timer_A定时器主要分为两个部分:主计数器和捕获/比较模块。主计数器负责定时、计时或计数,计数值(TAR寄存器的值)被送到各个捕获/比较模块中,它们可以在无需CPU千预的情况下根据触发条件与计数器值自动完成某些测量和输出功能。只需定时、计数功能时,可以只使用主计数器部分。在PWM调制、利用捕获测量脉宽、周期等应用中,还需要捕获/比较模块的配合。
16位定时器原理
16位定时器的计数值寄存器TAR在每个时钟信号的上升沿进行增加/减少,可利用软件读取TAR寄存器的计数值。此外,当定时时间到,并且产生溢出时,定时器可产生中断。置位定时器控制寄存器中的TACLR控制位可自动清除TAR寄存器的计数值;同时,在增加计数模式下,清除了时钟分频器和计数方向。
1、时钟源选择和分频器
定时器的参考时钟源可以来自内部时钟ACLK、SMCLK或者来自TACLK、INCLK引脚输入,通过TASSEL控制位进行选择。选择的时钟源首先通过PID控制位进行1、2、4、8分频,对于分频后的时钟,可通过TAIDEX控制位进行1、2、3、4、5、6、7、8分频。
2、Timer_A工作模式
Timer_A共有四种工作模式:停止模式、增计数模式、连续计数模式和增减计数模式,具体工作模式可以通过MC控制位进行选择,具体配置如表19-1所示。
(1)停止模式
停止模式用于定时器暂停,并不发生复位,所有寄存器现行的内容在停止模式结束后都可用。当定时器暂停后重新计数时,计数器将从暂停时的值开始以暂停前的计数方向计数。例如,停止模式前,Timer_A定时器工作于增减计数模式并处于下降计数方向,停止模式后,Timer_A仍然工作于增减计数模式下,从暂停前的状态开始继续沿着下降方向开始计数。如若不想这样,则可通过TAxCTL中的TACLR控制位来清除定时器的计数及方向记忆特性。
(2)增计数模式
比较寄存器TAxCCR0用作Timer_A增计数模式的周期寄存器,由于TAxCCR0为16位寄存器,所以在该模式下,定时器A连续计数值应小于0FFFFh。TAxCCR0的数值定义了定时的周期,计数器TAR可以增计数到TAxCCR0的值,当计数值与TAxCCR0的值相等(或定时器值大于TAxCCR0的值)时,定时器复位并从0开始重新计数。增计数模式下的计数过程如图19-2所示。
当定时器计数值计数到TAxCCR0时,置位CCR0中断标志位CCIFG。当定时器从TAxCCR0计数到0时,置位Timer_A中断标志位TAIFG。增计数模式下中断标志位设置过程如图19-3所示。
(3)连续计数模式
在连续计数模式时,Timer_A定时器增计数到0FFFFh之后从0开始重新计数,如此往复。连续计数模式下的计数过程如图19-4所示。
当定时器计数值从0FFFFh计数到0时,置位Timer_A中断标志位TAIFG,连续计数模式下的中断标志位如图19-5所示。
连续计数模式的典型应用如下:
1)产生多个独立的时序信号:利用捕获比较寄存器捕获各种其他外部事件发生的定时器数据;
2)产生多个定时信号:在连续计数模式下,每完成一个TAxCCRn(其中n取值为0~6)计数间隔,将产生一个中断,在中断服务程序中,将下一个时间间隔计数值赋给TAxCCRn,图19-6表示了利用两个捕获比较器TAxCCR0和TAxCCR1产生两个定时信号t0和t1。在这种情况下,定时完全通过硬件实现,不存在软件中断响应延迟的影响,具体实现示意图如图19-6。
(4)增减计数模式
需要对称波形的情况往往可以使用增减计数模式。在该模式下,定时器先增计数到TAxCCR0的值,然后反方向减计数到0。计数周期仍由TAxCCR0定义,它是TAxCCR0值的2倍。增减计数模式下的计数过程如图19-7所示。
在增减计数模式下,TAxCCR0中断标志位CCIFG和Timer_A中断标志位TAIFG在一个周期内仅设置位一次,当定时器计数器增计数从TAxCCR0-1计数到TAxCCR0时,置位TAxCCR0中断标志位CCIFG。当定时器计数器减计数从0001h到0000h时,置位Timer_A中断标志位TAIFG。增减计数模式下中断标志位的设置过程如图19-8所示。
捕获-比较功能
除了主计数器之外,Timer_A定时器还具有高达7个相同的捕获/比较模块TAxCCRn(其中n等于0~6),任何一个捕获/比较模块都可以用于捕获事件发生的时间或产生的时间间隔。每个捕获/比较模块都有单独的模式控制寄存器以及捕获/比较值寄存器。
在比较模式下,每个捕获/比较模块将不断地将自身的比较值寄存器与主计数器的计数值进行比较,一旦相等,就将自动改变定时器输出引脚的输出电平,Timer_A具有8种输出模式,从而可在无需CPU千预的情况下输出PWM波、可变单稳态脉冲、移向方波、相位调制等常用波形。
在捕获模式下,用定时器输入引脚电平跳变触发捕获电路,将此刻主计数器的计数值自动保存到相应的捕获值寄存器中。可以用于测频率、测周期、测脉宽、测占空比等需要获得波形中精确时间量的场合。
捕获/比较模块的逻辑结构如图19-1所示,在此以捕获/比较模块TAxCCR6为例。
(1)捕获模式
当CAP控制位设置为1时,捕获/比较模块配置为捕获模式。捕获模式被用于捕获事件发生的时间。捕获输入CCIxA和CCIxB可连接外部引脚或内部信号,这需通过CCIS控制位进行配置。可通过CM控制位将捕获输入信号触发沿配置为上升沿触发、下降沿触发或两者都触发。捕获事件在所选输入信号触发沿产生,如果产生捕获事件,定时器将完成以下工作:
1)主计数器计数值复制到TAxCCRn寄存器中;
2)置位中断标志位CCIFG;
输入信号的电平可在任意时刻通过CCI控制位进行读取。捕获信号可能会和定时器时钟不同步,并导致竞争条件的产生,将SCS控制位置位可在下个定时器时钟使捕获同步。捕获信号示意图如图19-10所示。
如果第二次捕获在第一次捕获的值被读取之前发生,捕获比较器就会产生一个溢出逻辑,在此情况下,将置位COV标志位,如图19-11所示。注意COV标志位必须通过软件清除。
(2)比较模式
当CAP控制位设为0时,捕获/比较模块工作在比较模式。比较模式用来产生PVM输出信号或者在特定的时间间隔产生中断。此时TAxCCRn的值可由软件写入,并通过比较器与主计数器的计数值TAR进行比较,当TAR计数到TAxCCRn时,将依次产生以下事件:
置位中断标志位CCIFG
产生内部信号EQUn=1;
EQUn信号根据不同的输出模式触发输出逻辑;
输入信号CCI被锁存到SCCI。
每个捕获/比较模块都包含一个输出单元,用于产生输出信号,例如PWM信号等。每个输出都有8种工作模式,可产生EQUx的多种信号。输出模式可通过OUTMOD控制位进行定义,具体列表如表19-2所示。
1)增计数模式下,定时器比较输出
在增计数模式下,当TAR增加到TAxCCRn或从TAxCCR0计数到0时,定时器输出信号按选择的输出模式发生变化。实例如图19-12所示,在该实例中利用了TAxCCR0和TAxCCR1。
2)连续计数模式下,定时器比较输出
在连续计数模式下,定时器输出波形与增计数模式一样,只是计数器在增计数到TAxCCRO后还要继续增计数到OFFFFh,这样就延长了计数器计数到TAxCCR1数值的时间。在连续计数模式下的输出波形如图19-13所示,在该示例中同样利用TAxCCRo和TAxCCR1。
3)增减计数模式下,定时器比较输出
Timer_A中断
16位定时器Timer_A具有两个中断向量,分别如下:
TAxCCR0的中断向量CCIFG0;
具有其余TAxCCRn的中断标志CCIFGn及TAIFG的中断向量TAIV。
在捕获模式下,当定时计数器TAR的值被捕获到TAxCCRn寄存器内时,置位相关的CCIFGn中断标志位。在比较模式下,当定时计数器TAR的值计数到TAxCCRn的值时,置位相关的CCIFGn中断标志位。也可利用软件置位或清除任意一个CCIFG中断标志位,当相关的CCIE中断允许位置位,CCIFGn中断标志位将请求产生中断。
TAxIV中断主要包括TAxCCRn的中断标志CCIFGn和TAIFG中断标志。中断向量寄存器可被用来判断当前被挂起的Timer_A中断,之后通过查中断向量表得到中断服务程序的入口地址,并将其添加到程序计数器中,程序将自动转入中断服务程序。禁用Timer_A中断功能并不影响TAxIV中断向量寄存器的值。
Timer_A寄存器
Timer_A具有丰富的寄存器资源供用户使用,详细列表如表所示。
连续计数模式和增计数模式实例
连续计数模式
在CCS中导入所安装的SDK的目录下C:tisimplelink_msp432p4_sdk_3_40_01_02examplesnortosMSP_EXP432P401Rdriverlibtimer_a_continuous_overflow_interruptccs 的工程文件
导入后打开timer_a_continuous_overflow_interrupt.c文件:
/* DriverLib Includes */
#include /* Standard Includes */ #include /* Statics */ const Timer_A_ContinuousModeConfig continuousModeConfig = { TIMER_A_CLOCKSOURCE_ACLK, // ACLK Clock Source TIMER_A_CLOCKSOURCE_DIVIDER_1, // ACLK/1 = 32khz TIMER_A_TAIE_INTERRUPT_ENABLE, // Enable Overflow ISR TIMER_A_DO_CLEAR // Clear Counter }; int main(void) { /* Stop watchdog timer */ MAP_WDT_A_holdTimer(); /* Configuring P1.0 as output */ MAP_GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN0); MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0); /* Starting and enabling ACLK (32kHz) */ MAP_CS_setReferenceOscillatorFrequency(CS_REFO_128KHZ); MAP_CS_initClockSignal(CS_ACLK, CS_REFOCLK_SELECT, CS_CLOCK_DIVIDER_4); /* Configuring Continuous Mode */ MAP_Timer_A_configureContinuousMode(TIMER_A0_BASE, &continuousModeConfig); /* Enabling interrupts and going to sleep */ MAP_Interrupt_enableSleepOnIsrExit(); MAP_Interrupt_enableInterrupt(INT_TA0_N); /* Enabling MASTER interrupts */ MAP_Interrupt_enableMaster(); /* Starting the Timer_A0 in continuous mode */ MAP_Timer_A_startCounter(TIMER_A0_BASE, TIMER_A_CONTINUOUS_MODE); while(1) { MAP_PCM_gotoLPM0(); } } //****************************************************************************** // //This is the TIMERA interrupt vector service routine. // //****************************************************************************** void TA0_N_IRQHandler(void) { MAP_Timer_A_clearInterruptFlag(TIMER_A0_BASE); MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P1, GPIO_PIN0); } 增计数模式 C:tisimplelink_msp432p4_sdk_3_40_01_02examplesnortosMSP_EXP432P401Rdriverlibtimer_a_upmode_gpio_toggleccs 的工程文件 导入后打开timer_a_upmode_gpio_toggle.c文件: /* DriverLib Includes */ #include /* Application Defines */ #define TIMER_PERIOD 0x2DC6 //11718 /* Timer_A UpMode Configuration Parameter */ const Timer_A_UpModeConfig upConfig = { TIMER_A_CLOCKSOURCE_SMCLK, // SMCLK Clock Source SMCLK时钟默认3MHz TIMER_A_CLOCKSOURCE_DIVIDER_64, // 64分频 SMCLK/64 = 46875Hz TIMER_PERIOD, // 5000 tick period TIMER_A_TAIE_INTERRUPT_DISABLE, // Disable Timer interrupt TIMER_A_CCIE_CCR0_INTERRUPT_ENABLE , // Enable CCR0 interrupt TIMER_A_DO_CLEAR // Clear value }; //周期=1/46785*11718=0.249984s
上一篇:MSP432的ADC模数转换
下一篇:MSP432的PWM功能实现
推荐阅读最新更新时间:2024-11-13 11:14
设计资源 培训 开发板 精华推荐
- LTC4061 的典型应用 - 具有热敏电阻输入的独立线性锂离子电池充电器
- DEV-15110,SparkFun ESP32 Thing Plus DMX to LED Shield
- AD9246-80EBZ,用于评估 AD9246 14 位、80 MSPS 模数转换器的评估板
- LTC3456,用于手持设备的完整电源。包括两个开关通道和一个线性稳压器
- 天猫精灵typec转接板
- 触摸屏电子气动量仪
- AM2F-1207SZ 7.2V 2 瓦 DC/DC 转换器的典型应用
- ATSAMA5D2-XULT、SAMA5D2 Xplained Ultra 评估套件,用于基于 SMART SAMA5D2 ARM Cortex-A5 的嵌入式微处理器单元 (eMPU)
- LT1086CM 高效双路线性电源的典型应用
- 使用 Microchip Technology 的 MIC5326 的参考设计