微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > MSP430FR5969学习心得

MSP430FR5969学习心得

时间:11-21 来源:互联网 点击:

制寄存器

TASSELx:TA时钟源选择

0:TACLK;1:ACLK;2:SMCLK;3:INCLK

IDx: 输入分频,分时钟源分频再输入TimerA

0/1/2/3:1/2/4/8 分频

MCx: 模式控制

0:停止定时器;1:增模式,定时器计数到TACCR0;

2:连续模式,定时器计数到0xFFFF;3:增减模式,0->TACCR0->0

TACLR:定时器清零位。该位置位会复位 TAR,时钟分频和计数方向。TACLR位会自动复位并读出值为0

TAIE: TA 中断允许。该位允许 TAIFG 中断请求
0:中断禁止;1:中断允许

TAIFG:TA中断标记

0:无中断挂起;1:中断挂起

2、TAR:TimerA计数寄存器

3、TACCTLx:捕获比较控制寄存器

CMx:捕获模式

0:不捕获 ;1:上升沿捕获;2:下降沿捕获 ;3:上升和下降沿都捕获

CCISx:捕获比较选择,该位选择 TACCRx 的输入信号

0:CCIxA;1:CCIxB;2:GND;3:VCC

SCS:同步捕获源,该位用于将捕获通信和时钟同步
0:异步捕获;1:同步捕获

SCCI:同步的捕获/比较输入,所选择的 CCI 输入信号由 EQUx 信号锁存,并可通过该位读取

CAP:捕获模式

0:比较模式;1:捕获模式

OUTMODx:输出模式位。由于在模式 2,3,6 和 7 下 EQUx= EQU0,因此这些模式对 TACCR0 无效

0:OUT位的值;1:置位;2:翻转/复位;3:置位/复位
4:翻转;5:复位;6:翻转/置位;7:复位/置位

CCIE:捕获比较中断允许位,该位允许相应的 CCIFG 标志中断请求
0:中断禁止;1:中断允许

CCI:捕获比较输入。所选择的输入信号可以通过该位读取

OUT:对于输出模式 0,该位直接控制输出状态
0:输出低电平;1:输出高电平

COV:捕获溢出位。该位表示一个捕获溢出发生。COV 必须由软件复位。

0:没有捕获溢出发生;1:有捕获溢出发生

CCIFG:捕获比较中断标志位

0:没有中断挂起;1:有中断挂起

4、TAIV:TimerA中断向量寄存器

寄存器的值:

0:无中断挂起;

2:捕获比较1 TACCR1 CCIFG;

4:捕获比较2 TACCR2 CCIFG;

0xA:定时器溢出 TAIFG

5.MSP430中断嵌套机制

(1)430默认的是关闭中断嵌套的,除非你在一个中断程序中再次开总中断EINT。

(2)当进入中断程序时,只要不在中断中再次开中断,刚总中断是关闭的,此时来中断不管是比当前中断的优先级高还是低都不执行。

(3)若在中断A中开了总中断,刚可以响应后来的中断B(不管B的优先级比A高还是低),B执行完现继续执行。注意:进入中断B生总中断同样也会关闭,如果B中断程序执行时需响应中断C,则此时也要开总中断,若不需响应中断,则不用开中断,B执行完后中跳出中断程序进入A程序时,总中断会自动打开。

(4)若在中断中开了总中断,后来的中断同时有多个,则会按优先级来执行,即中断优先级只有在多个中断同时到来才起做用!中断服务不执行抢先原则。

(5)对于单源中断,只要响应中断,系统硬件自动清中断标志位,对于TA/TB定时器的比较/捕获中断,只要访问TAIV/TBIV,标志位倍被自动清除;对于多源中断要手动清标志位,比如P1/P2口中断,要手工清除相应的标志,如果在这种中断用“EINT();”开中断,而在打开中断前没有清标志,就会有相同的中断不断嵌入,而导致堆栈溢出引起复位,所以在这类中断必须先清标志现打开中断开关。

6.关于MSP430中断机制--我的理解

因DC的邀请写一个有关中断的东东,我也接触430不久只能以自己的心得体会更大家分享,若有纰漏恳请见谅。MSP430用户手册上有的中断介绍我就不赘述了,大家可以看User Guider.我讲的主要是书上没有的,或者是点的不透的。希望对大家有用。

1.中断嵌套,优先级
430总中断的控制位是状态寄存器内的GIE位(该位在SR寄存器内),该位在复位状态下,所有的可屏蔽中断都不会发生响应。可屏蔽中断又分为单中断源和多中断源的。单中断源的一般响应了中断服务程序中断标志位就自动清零,而多中断源的则要求查询某个寄存器后中断标志位才会清零。由于大多数人接触的第一款单片机通常是51,51单片机CPU在响应低优先级的中断程序过程中若有更高优先级的中断发生,单片机就会去执行高优先级,这个过程已经产生了中断嵌套。而430单片机则不同,如果在响应低优先级中断服务程序的时候,即使来了更高优先级的中断服务请求,430也会置之不理,直至低优先级中断服务程序执行完毕,才会去响应高优先级中断。这是因为430在响应中断程序的时候,总中断GIE是复位状态的,如果要产生类似51的中断嵌套,只能在中断函数内再次置位GIE位。

2.定时器TA
TimerA有2个中断向量。TIMERA0,TIMERA1
TIMERA0只针对CCR0的计数溢出
TIMERA1再查询TAIV后可知道是CCR1,还是CCR2,亦或TAIFG引起的,至于TAIFG是什么情况下置位的,则要看TA工作的模式
具体看用户手册。还有一点TA本身有PWM输出功能,无须借用中断功能。在这个问题上经常出现应用弯路的是如何结合TA和AD实行定时采样的问题,很多人都是在TA中断里打开AD这样来做。这是不适宜的,因为430 的ADC10,ADC12(SD16不熟悉,没发言权)模块均有脉冲采样模式和扩展采样模式。只要选择AD是由TA触发采样,然后把TA设置成PWM输出模式,当然输出PWM波的都是特殊功能脚,但是在这里它是不需要输出的,所以引脚设置不必理会。值得关心的就是PWM的频率,也就是你AD的采样率。

3.看门狗复位
看门狗有2种工作模式:定时器 ,看门狗
定时器工作模式下WDTIFG在响应中断服务程序有标志位自动复位,而在看门狗模式下,该标志位只能软件清零。但是怎么判断复位是由于WDT工作在看门狗模式下的定时溢出引起的,还是看门狗写密钥错误引起的呢?………………………………
答案是没有方法,至少我没见过有什么方法,也没见过周边的人有什么方法。若有人知道方法谢谢分享。
4.经常有人会问这个语句的MOV.B#LPM0,0(SP)的作用。假如你在进入中断函数之前,430是在LPM0下待机,若要求执行完中断函数之后进入LPM3待机,在中断函数里写MOV.B#LPM3,SR是无效的。因为在进入中断时430会把PC,SR压栈,( SR内保存着低

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top