MSP430的中断优先级按所在的向量的大小排列,中断向量地址越高优先级就越大,但是默认的MSP430是不能中断嵌套的,要想在执行某一中断时能够响应更高优先级的中断,需要在低优先级的中断程序中手动打开全局中断便能位,因为在进入中断服务子程序时全局中断便能位被清零,即禁止响应其它中断。
msp430的指令中,DINT和EINT分别指关和开所有中断,也就是包涵P1IE、P2IE、WDTIE、TAIE、TBIE、ADC12IE、串口中断允许的所有中断允许位为“0”和为“1”。
当同时有多个中断来的时候才有优先级的考虑(优先级顺序可查看向量表)
有中断响应以后自动关闭总中断,这个时候即使来更高优先级的中断都不会响应
要中断嵌套的话,就必须在中断中打开总中断
msp430的指令中,DINT和EINT分别指关和开所有中断,也就是包涵P1IE、P2IE、WDTIE、TAIE、TBIE、ADC12IE、串口中断允许的所有中断允许位为“0”和为“1”。
实现中断嵌套需要注意以下几点:
1)430默认的是关闭中断嵌套的,除非你在一个中断程序中再次开总中断EINT;
2)当进入中断程序时,只要不在中断中再次开中断,则总中断是关闭的,此时来中断不管是比当前中断的优先级高还是低都不执行;
3)若在中断A中开了总中断,则可以响应后来的中断B(不管B的优先级比A高还是低),B执行完再继续执行A。注意:进入中断B后总中断同样也会关闭,如 果B中断程序执行时需响应中断C,则此时也要开总中断,若不需响应中断,则不用开中断,B执行完后跳出中断程序进入A程序时,总中断会自动打开;
4)若在中断中开了总中断,后来的中断同时有多个,则会按优先级来执行,即中断优先级只有在多个中断同时到来时才起做用!中断服务不执行抢先原则。
5)对于单源中断,只要响应中断,系统硬件自动清中断标志位,对于TA/TB定时器的比较/捕获中断,只要访问TAIV/TBIV,标志位倍被自动清除;
对于多源中断(多个中断源共用一个中断向量)要手动清标志位,比如P1/P2口中断,要手工清除相应的标志,如果在这种中断用"EINT();"开中断,而在打开中断前没有清标志,就会 有相同的中断不断嵌入,而导致堆栈溢出引起复位,所以在这类中断中必须先清标志再打开中断开关.
特别注意:
正是这段说明容易让人上当。
MSP430中断的优先级与其它CPU的中断的优先级的概念不是一回事。
1、当同时有多个中断来的时候才有优先级。其实这个时候很少发生。
2、有中断响应以后自动关闭总中断。这时候,谁也别想再中断了,哪怕你是天王老子。
3、你打开总中断,同样晕菜,谁都可以打扰你的,烦不烦。
关键字:msp430 中断优先级 中断嵌套
引用地址:
msp430的中断优先级和中断嵌套
推荐阅读最新更新时间:2024-03-16 14:38
基于MSP430单片机的低功耗主动式RFID标签设计
引言 射频识别(RFID)技术近年来在国内外得到了迅速发展。对于需要电池供电的便携式系统,功耗也越来越受到人们的重视。本文将具体阐述基于MSP430F2012和CC1100低功耗设计理念的双向主动式标签的软硬件实现方法。 低功耗设计 低功耗概述 功耗基本定义为能量消耗的速率,可分为瞬态功耗和平均功耗两类。两者意义不同,有不同的应用背景和优化策略,通常被笼统地概括为低功耗设计。实际研究中可根据不同情况区分为: (1)瞬态功耗优化:目标是降低峰值功耗,解决电路可靠性问题。 (2)平均功耗优化:目标是降低给定时间内的能量消耗,主要针对电池供电的便携电子设备,以延长电池寿命或减轻设备重量。 功耗的物理来源
[单片机]
msp430f5418使用总结
公司的产品是基于MSP430F5418开发的,在程序的调试过程中遇到过一些问题,现总结如下。 1)UCS 时钟如同处理器的心脏,每一个周期就是心脏的一次脉动。以前使用其他处理器时,只需要选择合适频率的晶体,接在XT1和XT2两端,再加两个电容就可以了。而MSP430F5418的时钟系统略显复杂,容易让刚开始接触它的人一头雾水。5418的时钟设置由UCS(Unified Clock System)来管理,使用起来比较灵活,其结构如图 所示。 UCS模块有XT1CLK和XT2CLK两个外部时钟源,以及VLOCLK、REFOCLK和DCOCLK(DCOCLKDIV是DC
[单片机]
MSP430 ADC12采样分析
AD部分主要配置ADC12模块的时钟、参考源、采样通道、采样模式、存储和采样保持。 我就一个部分一个部分来 第一个是ADC12模块的时钟,这个是模块运行时的时钟,跟采样定时器是两个概念,曾经我有一段时间被迷惑住了。这个由ADC12CTL1里面的ADC12SSEL和ADC12DIV配置,可以选择ADC12OSC/ACLK/SMCLK/MCLK,TI例程里面好像都是选择的ADC12OSC,这个是5MHZ,不过频率容易受外界影响而改变。这个部分配置好了就得到了ADC12CLK。 第二个参考源,这个部分可以用单片机的参考模块控制,也可以用ADC12模块控制,REFCTL0 &= ~REFMSTR;这句就是设置ADC模块直
[单片机]
msp430G2553串口通信_launchpad串口通信
MSP430G2553 单片机中集成了 USCI_A0功能模块,可以直接完成串口通信。 一、代码与仿真 TI官方例程中uart代码只有时钟,引脚,串口的初始化,不能直接串口收发,还需要增加发送函数和完善中断函数,我在官方例程的基础上,编写了串口通信程序,并硬件测试通过 。 硬件测试用板(TI的MSP-EXP430G2ET) 注意:图中绿圈跳帽的接法 在水平方向上, 跳线将 TXD 连接到 P1.1, 将RXD 连接到 P1.2 。 在垂直方向上, 跳线将 TXD 连接到 P1.2, 将RXD 连接到 P1.1。 用USCI_A0模块的串口时,RXD和TXD是固定的,板子的跳帽接法固定。 若是软件串口(TimerA定时器和软件结
[单片机]
MSP430 串口初始化,及串口操作
#include msp430x14x.h /* 关于UART0串口的配置,及操作函数说明 */ /* 一、uart0初始化*/ void uart0_idev_init(void) { P3SEL |= BIT4 + BIT5; // 1. 选择P3.4和P3.5做UART0通信端口 ME1 |= UTXE0 + URXE0; // 2. 使能USART0的发送和接受 UCTL0 |= CHAR; // 3. 选择8位字符 UTCTL0 |= SSEL0; // 4. 选择时钟源, ACLK :SSEL0 //
[单片机]
基于MSP430F5438A的SPI通信来进行SD卡初始化
最近需要做一个数据存储,发现SD卡这一块还不太好弄 现在的单片机有相当一部分还不支持SDIO,比如MSP430(据我所知,如果有支持的型号了还请及时告诉我~),所以只好用SPI通信来进行SD卡的操作,虽然后续涉及到更为复杂的FAT等等,但是首先需要解决的仍然是建立通信的问题。 采用的单片机型号为MSP430F5438A,用了一个开发板。 SPI通信基本例程 例程及解释如下: 鉴于CSDN的Markdown代码高亮做的实在是……唉,这里贴一个容易看的吧: SPI通信代码 SD卡通信方式 以上是给出的例程,SD卡有自己的一套通信方法: 这里引述了: http://elm-chan.org/docs/mmc/mmc_
[单片机]
MSP430比较器小结
比较器就是模拟电压比较器。该模拟外设可以用于外部模拟信号的检测或者电源电压的监测 比较器包括:同向和反向输入端的输入多路选择器,比较器,RC滤波器,基准电压发生器; 我们主要需要设定两个寄存器CACTL1,CACTL2; 从图中可以看出,我们需要设定同向输入端的输入源,反向输入端的输入源; 从图中,我们可以看出,参考电压的选择是依靠Vcaref的 而参考电压是进入同向端还是进入反向端,则是由CARSEL和CAEx来决定的勒 同我们的参考电压进行比较的也就是CA0或者CA1了 通过CACTL2中的P2CA1,P2CA0来选择; 下面是一个基本的例程。 void main () { WDTCTL=WDTPW+W
[单片机]
基于MSP430自动胀管控制器的研制
胀管机是针对冷凝器、冷油器、加热器、换热器中各类管材与管板胀接需要而设计开发的一种专用设备。其控制器的基本原理是用驱动电机(又称驱动马达、胀管机头)的工作电流来标定所加载的负荷,即驱动电机在一定的工作电流值下,提供相当数量的扭矩,而与之相当数量的扭矩可以通过旋转胀管器产生一定的膨胀量(胀力),它是可以被测量的。因此,通过精确测量并控制驱动马达的工作电流值,就可获得并控制所需要的膨胀量(胀力)。 目前,市场上大多数的胀管机采用51单片机,但其缺点比较突出。如内部无存储器,必需外接Flash或EPROM存储设置信息,这就导致电路比较复杂,不利于扩展,且工作电压范围较窄,抗干扰能力较差。而采用MSP430F149单片机的胀管机
[单片机]