MSP430定时/计数器TimerA中断解惑

刚学过51单片机,再来学习MSP430F149,在定时器中断这一块,对于初学者还是有一定难度的,这是因为430的定时器配置更为灵活,比51要复杂好多,下面我把我初学时遇到的一些问题写下来供大家参考。

1、首先,用户指南中有Three configurable capture/compare registers这句话,这表明430有三个捕获比较单元可以用来配置,那么多几个捕获比较单元有什么用?答案是:非常有用,就好比百米短跑的秒表,它如果只能够计一个人的时间显然是不够的,多几个这样的单元用户可以根据自己需求灵活开发。

2、很多初学者搞不懂什么是捕获模式,什么是比较模式,打个比喻,捕获模式,就像100米短跑,当你到达终点就触发中断(秒表按下停止键),捕获到的就是你的耗时。

     而比较模式就像是给定你确定的时间(例如1分钟),当到达时间之后就会触发中断。

     捕获模式适合用于测量时间间隔,测量脉冲,速度。而比较模式适合产生周期信号。

3、当Timer_A计数计满的时候需要手动清零吗?

     答案是:不需要!看下图:

MSP430定时/计数器TimerA中断解惑_第1张图片

               用户手册中写道:TACLR是定时器复位位,当计满的时候,会自动清零。

  

4、其次,关于定时器中断有两种,一种是溢出中断TAIFG,另一种是捕获比较中断CCIFG,这两种到底有什么区别,尤其是寄存器配置过程中TAIE和CCIE到底使用哪一个,让很多初学者头疼,下面我就解释清楚;

MSP430定时/计数器TimerA中断解惑_第2张图片

这是在Continues模式(连续增计数)下,TAIFG和CCIFG产生的条件图,文字也讲的很清楚了,TAIFG is set when the timer counts from 0xffff to zero,就是说当定时器

从最大值0xffff到0的时候,溢出中断标志位会置1,也就是当定时器计满的时候再等上一个时钟周期(1h)之后置1,这个计满,是指16位的定时器计到最大值0xffff,而不是用户设定的比较值CCR0.

而CCIFG是当定时器计数到CCR0的时候置1,CCR0的值由用户自己设定。

在Up增计数模式下,由于定时器不可能计满(0xffff),他只能计到CCR0,因此CCIFG触发的时间和TAIFG触发的时间只差一个时钟周期。

当Timer=CCR0的时候捕获比较中断TAIFG置1,而当Timer从CCR0重新归零的时候TAIFG置1.

当用户使用中断的时候,需要去配置相应的中断允许位。

一定要搞懂一件事情,那就是中断标志位和中断使能位,中断标志位相当于高考分数线,而中断使能位相当于高考准考证,只有先拿到准考证(先使能中断允许),然后参加考试过了分数线(触发了中断),最终才能上大学(响应中断)。当然上大学(响应中断)也不是必要的,可以采用查询法(不领准考证,自己做套试卷,然后根据标准答案得分),当查询到符合条件(考试成绩合格),那么说明你一样具备大学生的入学能力(处理相应事件)。

用户手册中有关于TAIFG和CCIFG的使能及标志位:

MSP430定时/计数器TimerA中断解惑_第3张图片

如上图所示:寄存器TACTL的TAIE是溢出使能位。TAIFG是标志位。

MSP430定时/计数器TimerA中断解惑_第4张图片

如上图所示:CCIFG是捕获比较中断标志,而CCIE是捕获比较中断使能。

本人是电子类专业学生,上学的时候学校只开设了51单片机的课程,后来出于兴趣相继学习了16位单片机MSP430和32位单片机STM32,从寄存器开发到库函数开发到嵌入式操作系统,逐渐领略到了微控制器世界的无穷魅力。有些人一上手就是LINUX操作系统下开发或者STM32的库函数开发,我认为这种学习方式不正确,没有走过路的人是永远体会不到骑自行车轻松的,只有扎扎实实学习基于寄存器开发,才能更清楚的明白库函数开发和使用操作系统的必要性,只有经历了在单片机芯片英文手册中苦苦查找寄存器查找标记位的历练,才会在以后的学习中体会到守望云开的明朗!

你可能感兴趣的:(MSP430定时/计数器TimerA中断解惑)