TimerA主定时器知识讲解

上传人:yulij****0329 文档编号:142553349 上传时间:2020-08-20 格式:PPT 页数:66 大小:1.42MB
返回 下载 相关 举报
TimerA主定时器知识讲解_第1页
第1页 / 共66页
TimerA主定时器知识讲解_第2页
第2页 / 共66页
TimerA主定时器知识讲解_第3页
第3页 / 共66页
TimerA主定时器知识讲解_第4页
第4页 / 共66页
TimerA主定时器知识讲解_第5页
第5页 / 共66页
点击查看更多>>
资源描述

《TimerA主定时器知识讲解》由会员分享,可在线阅读,更多相关《TimerA主定时器知识讲解(66页珍藏版)》请在金锄头文库上搜索。

1、Timer_A,1、概述,定时器在任何单片机中都具有极其重要的作用。 单片机是顺序执行指令,把CPU看成是人,一个每次只能干一件事的人。 没有定时器的帮助,人就会像在监狱服刑一样.,犯人的一天,早上起床,吃早饭,干苦力、放风、吃晚饭、睡觉、早上起床. 偶尔有的变数就是有人探监(外部中断)。 可怕的是,如果吃饭时“耳背”,狱警喊停没听见,那作为犯人就必须一直吃下去,干苦力时出了岔子就更悲催了。,自由人的一天,起床:相当于main循环的起始。 刷牙:相当于执行各种inital操作,此task主人(CPU)必须亲力亲为,并且不能被其他事打扰。 烧水:代表不需要人(CPU)一直干的task。,烧水Ta

2、sk,主人灌好烧水壶打开灶台火焰。不巧的是烧水壶并没有水烧好的鸣响(外设中断),怎么办?最傻的办法是人一直盯着看烧水的过程。但是有定时器,主人就不必要这么做,因为烧好一壶水的时间基本是知道的,主人设定好闹钟就可以去看报纸(其他任务)或者打瞌睡了(休眠)。待闹钟响起,人去关火,泡咖啡.,敲门Event,敲门:有访客敲门相当于突发事件event。假设主人住在大庄园里,又恰巧没有门铃(外部中断)怎么办?难道要主人成天蹲在大门口吗? 不用,有定时器呢。假定访客敲门都最少会敲5分钟,主人将定时器设定为5分钟响一次,每5分钟去门口看一次,这样就不会错过客人来访了。其他时间,主人可以打dota或者发呆。,吃

3、药Event,吃药:假如主人每隔1小时需要吃药一次,这相当于对时间要求严格的task,按理说这不就是用个闹钟就完了吗。憋屈的是,主人只有1个闹钟,已经用在“接客”上了,怎么办? 没关系,主人可以数定时5分钟的闹钟响了多少次,数够12次就吃药。类似的方法,主人可以数着闹钟的“节拍”处理其他时间要求严格的task。,来访Event,好了,5分钟去大门口看一次,真有访客了,可分为两种情况,送快递的(不需要立刻后续处理的event)或是上门拜访的(需要立刻接待处理的event)。调用事件处理函数。 因为对于快递包裹,主人验货收下即可(写全局变量标志位),以后有时间再研究包裹内的物品。而上门拜访的客人,

4、主人立刻亲自接待(中断子函数,占用CPU)。,看门狗复位,客人赖着不走:客人脑子进水了说个没完没了(程序跑飞或外设错误),影响主人正常生活了,怎么办? 没事,幸好有看门狗定时器在,每隔设定时间,必须喂狗(重置看门狗定时器),否则设定时间一到,看门狗该咬人了(重启单片机)。主人的一天要重新开始了。,总结,总结一下主人的一天,一个住着大庄园的主人,却没有仆人(有的话成双CPU了)。还非常憋屈的没有自动报警的烧水壶,庄园大门没有门铃,吃药都没有专人伺候。 但是依靠1个闹钟(定时器),主人还是可以惬意的生活,有时间打dota,有时间打盹。甚至当“天下大乱”的时候,还有看门狗可以让一天重来。,单片机的入

5、门,定时器作为单片机中最有用的片内外设,就是为弥补顺序执行程序这个“死脑经”缺陷而量身定做的。学会使用定时器的思想,才算真正是单片机入了门。,2、 Timer_A模块,除了概述中最基本的定时器功能外,定时器还有很多种不同的构造(辅助功能),以更方便的为人所利用,比如一个倒计时方式的闹钟可能更有用。 MSP430单片机中Timer_A定时器就是一种辅助功能强大的定时器,具备PWM输出、捕获等极其有用功能。 TA的构造原理具备普世价值。,TA原理框图,3 TA的16位定时器,Timer_A的核心单元是一个16位的主定时器,其实也就是个16位计数器,如果计数脉冲的频率精确稳定的话,计数的同时就是计时

6、。 主定时器的工作模式MCx寄存器可配置4种模式,其中MCx=00为停止,无需解释。剩下3种,连续技术模式、增计数模式、增减计数模式,就算是初学者也有必须知道的一清二楚!,3.1连续计数模式,一定要计满65536才复位 周期仅由时钟源决定,3.2 增计数模式,计到TACCR0寄存器的值时,复位,周期不仅由时钟源决定 而且由TACCR0决定,3.2 增减计数模式,计数到TACCR0寄存器的值时,改为减计数。,3.3 主定时器的一般设置,确定计数脉冲的来源寄存器TASSELx及分频值寄存器IDx,反正翻来覆去就那么几种来源,用到再说。 确定定时器的工作模式寄存器MCx,重复的从0增计数到 TACC

7、R0 又减计数到0,产生中断的时刻,连续计数和增计数都是在“尖峰时刻”产生中断。,增减计数是在“谷底”产生TA的中断TAIFG。 注意对比相同TACCR0情况下: 增减计数的周期是增计数的2倍,4 Timer_A的捕获/比较模块CCRx,所有捕获/比较模块CCRx都必须依靠16位定时器工作。,捕获模块Capture:可以判断输入信号的边沿,并瞬间用TACCRx寄存器记录下边沿时刻(TAR值),用于精确测定脉宽或频率。 比较模块Comparator:通过将TAR寄存器值与TACCRx中预设值比较,自动按“预设方案”反转IO电平,可以自动生成各种波形。 捕获/比较共用了TACCRx寄存器,所以不能

8、同时使用,CAP寄存器位用于选择捕获/比较工作模式。CAP=0为比较,CAP=1为捕获。,4.1 捕获模块,设为连续计数模式,1、两次上升沿的差就是周期 2、上升沿和下降沿的差就是脉宽,捕获法与中断法的区别,1、捕获模块是瞬间记录数据到TACCRx。 2、中断的方法是先响应中断,在中断中读取TAR的值,误差比较大。 3、捕获后,不需要CPU立即响应,数据已经在TACCR0里,有空再处理。 4、中断法必须立刻响应,否则误差就大到没边了。,捕获的若干常见问题,1、周期和脉宽超过65536最大计数值怎么办? 答: TAR到达65536溢出后,i+,数i的值,就可以把时间标尺无限延长。 2、长时间不读

9、取TACCR0会发生什么? 答:下次捕获事件到达时,如果上次的TACCRx没被读取,则会触发COV中断标志。,4.2 比较模块,比较模块是用于自动产生波形的。,比较模块概述,8种OUTMODx规则配合主定时器TAR的3种模式(连续计数、增计数、增减计数),可以无需CPU干预生成各种波形。 这样的排列组合将有24种,但是只有几种组合是“有用的”,用于生成以下4种特定波形:,单稳态波形,普通PWM,CCR1和CCR2各可生成1路。普通PWM的占空比可调范围0100%。,带死区控制的双路对称PWM,死区PWM的占空比可调范围必须小于50%,具体留多少余量,由死区时间决定。,3路 50%占空比方波,占

10、空比不可调,必须是50%,但相位可调,模式0,通过CCRx模块各自的OUT控制位控制TAx输出,像操作普通IO口那样。 一般用于程序预设定TAx的电平,相当于init一下TA管脚的初始电平。,模式1和模式5,模式3和模式7,TACCR0已被用于设定周期(频率) 所以只有TA1和TA2能输出PWM,模式2和模式6:双路死区PWM,模式4:最多3路移相方波,4 总结,定时器极其有用,一个仅有闹钟功能的定时器都可以使单片机化腐朽为神奇。 捕获模块Caputure就是一个能把待测信号边沿时刻瞬间“自动”记录的装置,能精确记录边沿时刻。 比较模块Comparator可以自动的基于主时钟去产生各种信号,而

11、不需要CPU操心。,5 TA_PWM库,当我们编写一个库函数时,首先需要穷举函数传入参数有哪些,这些参数不一定要写在一个超级大函数里。应区分哪些传入参数是一次性写入一般不会再改变,哪些传入参数可能会被频繁调用,分别用函数来描述。,5.1 库函数分析,时钟来源、分频系数、主定时器工作模式和捕获模块工作模式一般一次写入。应建立TA_PWM_Init()函数来设置。 CCR0的比较值TACCR0用于设定周期,在程序运行中可能会单独要求改变。应建立TA_PWM_SetPeriod ()函数来随时设定。,库函数分析,CCR1/2的比较值TACCR1/2用于设定占空比,在程序运行中可能会单独要求改变。应建

12、立TA_PWM_SetPermill()函数单独设定。 注:Permill的字面含义是千分比,这里不用百分比的原因是,一般PWM精度都要达到0.1%,使用百分比将出现浮点数。而用浮点数运算速度会奇慢,所以占空比设定应使用千分比,避免浮点数。,库函数分析,对于比较重要的传入参数类函数,程序中应判断传入参数的合理性,能修正则修正,不能修正则需返回错误。 关于代码的花哨方面:寄存器赋值几乎都需要一条一条写代码,很少能用神乎其技的方法批量写(除非是寄存器地址连续)。所以,对于大部分都是配置寄存器的库函数,写起来会非常长。,5.2 头文件,5.3 TA0_PWM_Init(),我们在编程中,总是会有大量

13、的初始化函数,这类函数的共同特点就是一般只需设定一次,不会被经常修改。初始化函数有的非常简单,有的就任务繁重,本例中,初始化函数需要做以下几件事:,定时器CLK的来源、分频值。这个简单,对传入参数进行“翻译”并配置寄存器即可。 主定时器的工作模式。这需要判断是普通PWM还是带死区PWM,普通PWM则为增计数模式,带死区PWM时,主定时器应配置为增减模式。 比较模块的设置。普通PWM时,超前PWM(上升沿在主定时0位置)配置模式7,滞后PWM配置模式3。带死区PWM时,两路输出都必须开启,并且一路模式为6另一路必须为2。 传入参数错误时,退出函数并返回错误代码0。配置成功返回1。,宏定义TA口,

14、/=TA_PWM.c= #include msp430g2553.h #define DEADTIME 20/预设死区时间,以TA的clk为单位 /*设定TA输出IO口,目前设定为MSP430G2553,20Pin封装无TA0.2*/ #define TA01_SET P1SEL |= BIT6; P1DIR |= BIT6/P1.6 #define TA02_SET P3SEL |= BIT0; P3DIR |= BIT0/P3.0 #define TA11_SET P2SEL |= BIT2; P2DIR |= BIT2/P2.2 #define TA12_SET P2SEL |= BIT

15、4; P2DIR |= BIT4/P2.4 #define TA01_OFF P1SEL/ 清除以前设置 switch(Clk) /为定时器TA选择时钟源 case A: case a: TA0CTL|=TASSEL_1; break; /ACLK case S: case s: TA0CTL|=TASSEL_2; break; /SMCLK case E: TA0CTL|=TASSEL_0; break; /外部输入(TACLK) case e: TA0CTL|=TASSEL_3; break; /外部输入(TACLK取反) default : return(0); /设置参数有误,返回0 switch(Div) /为定时器TA选择分频系数 case 1: TA0CTL|=ID_0; break; /1 case 2: TA0CTL|=ID_1; break; /2 case 4: TA0CTL|=ID_2; break; /4 case 8: TA0CTL|=ID_3; break; /8 default : return(0); /设置参数有误,返回0 ,设置PWM周期,设置占空比,1.6 调用TA_PWM举例,工程目录,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件 > 高中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号