MSP430 中断优先级

MSP430的中断优先级、打开关闭、中断嵌套

优先级顺序从高到低为:
    PORT2_VECTOR (1 * 2u) /* 0xFFE2 Port 2 */
    PORT1_VECTOR (4 * 2u) /* 0xFFE8 Port 1 */
    TIMERA1_VECTOR (5 * 2u) /* 0xFFEA Timer A CC1-2, TA */
    TIMERA0_VECTOR (6 * 2u) /* 0xFFEC Timer A CC0 */
    ADC_VECTOR (7 * 2u) /* 0xFFEE ADC */
    USART0TX_VECTOR (8 * 2u) /* 0xFFF0 USART 0 Transmit */
    USART0RX_VECTOR (9 * 2u) /* 0xFFF2 USART 0 Receive */
    WDT_VECTOR (10 * 2u) /* 0xFFF4 Watchdog Timer */
    COMPARATORA_VECTOR (11 * 2u) /* 0xFFF6 Comparator A */
   TIMERB1_VECTOR (12 * 2u) /* 0xFFF8 Timer B CC1-2, TB */
   TIMERB0_VECTOR (13 * 2u) /* 0xFFFA Timer B CC0 */
   NMI_VECTOR (14 * 2u) /* 0xFFFC Non-maska××e */
   RESET_VECTOR (15 * 2u) /* 0xFFFE Reset [Highest Priority] */

当同时有多个中断来的时候才有优先级的考虑(优先级顺序可查看向量表)
    有中断响应以后自动关闭总中断,这个时候即使来更高优先级的中断都不会响应
    要中断嵌套的话,就必须在中断中打开总中断!
   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();"开中断,而在打开中断前没有清标志,就会有相同的中断不断嵌入,而导致堆栈溢出引起复位,所以在这类中断中必须先清标志再打开中断开关.

时间: 2024-10-06 02:21:33

MSP430 中断优先级的相关文章

msp430知识

IO口 数字输入/输出端口有下列特性:□ 每个输入/输出位都可以独立编程.□ 允许任意组合输入.输出.□ P1 和 P2 所有 8 个位都可以分别设置为中断.□ 可以独立操作输入和输出数据寄存器.□ 可以分别设置上拉或下拉电阻. 在介绍这四个I/O口时提到了一个“上拉电阻”那么上拉电阻又是一个什么东东呢?他起什么作用呢?都说了是电阻那当然就是一个电阻啦,当作为输入时,上拉电阻将其电位拉高,若输入为低电平则可提供电流源;所以如果P0口如果作为输入时,处在高阻抗状态,只有外接一个上拉电阻才能有效.

MSP430之ADC采集滤波

占位符 1 /* 加权平均滤波 */ 2 static unsigned char coe[13] = {1,2,3,4,5,6,7,8,9,10,11,12,13}; 3 static unsigned int coeSum= 1+2+3+4+5+6+7+8+9+10+11+12+13; 4 unsigned long temp = 0; 5 6 for (i = 0; i<ADCN; i++) 7 { 8 temp += arr[i]*coe[i]; 9 } 10 temp = (unsig

ARM Cortex-M3 异常优先级以及CMSIS RTOS RTX的中断优先级

通常异常包括一些系统异常,以及中断. 异常类型 Cortex-M3处理器支持多种类型的异常: RESET, NMI, HardWare Fault; PSV,SVC等可编程中断: 其他的可编程中断,例如timer,GPIO等. 其中第1类异常的优先级是固定,不可改变的.其他都是可以修改的. Cortex-M3处理器提供了PRIMASK选项,用来屏蔽所有可编程的中断:提供了FAULTMASK来屏蔽HardWare Fault和所有可屏蔽中断. 异常优先级 Cortex-M3处理器支持NVIC的中断

msp430之lcd12864驱动

并行驱动代码: #include "msp430g2553.h" #define uint unsigned int #define uchar unsigned char /***************************************** RS--->>P2.0 RW--->>P2.1 E---->>P2.2 PSB-->>P2.3 PAUSE>>P2.4 RES-->>P2.5 *******

(二)STM32中中断优先级理解

很多人在配置STM32中断时对固件库中的这个函数NVIC_PriorityGroupConfig()——配置优先级分组方式,会很不理解,尤其是看中文翻译版的,因为中文翻译版里把这里翻译成“先占优先级和从优先级”这样翻译其实是不对的,很容易让人误解.为了便于大家理解,有必要先解释两个概念: 抢占式优先级/响应优先级: STM32(Cortex-M3)中有两个优先级的概念——抢占式优先级和响应优先级,有人把响应优先级称作'亚优先级'或'副优先级',每个中断源都需要被指定这两种优先级. 具有高抢占式优

MSP430 G2553 Launchpad实现电容测量

一.基本原理 对于Source-Free RC电路,其电容放电的特性可以描述为: 其中V0是电容的初始电压,t是放电时间,R是串接的电阻阻值,C是电容值,v(t)是t时刻电容上的电压.因此,若已知V0.R.以及t1时刻的电压Vt1,便可求得C: 二.如何控制和测量 如上图所示,大致步骤为:1)由GPIO通过电阻R给电容C充电至Vcc:2)该GPIO输出0,电容C通过R进行放电,同时Timer开始计时.CA+开启:3)当电容电压放电至参考电压(此处是0.25Vcc)时,比较器CA+输出端出现电平变

STM32F4——NVIC中断优先级及外部中断

NVIC中断优先级 一.简介: CM4内核可以支持256个中断,包括16个内核中断和240个外部中断,256级的可编程中断设置.对于STM32F4没有用到CM4内核的所有东西,只是用到了一部分,对于STM32F40和41系列共有92个中断,其中有10个内核中断和82个可屏蔽中断,常用的为82个可屏蔽中断. 二.相关寄存器: ISER[8]-中断使能寄存器组,用来使能中断,每一位控制一个中断,由于上面已经说明了控制82个可屏蔽的中断,因此利用ISER[0~2]这三个32位寄存器就够了.一下的几个寄

(原创)基于MCU的频率可调,占空比可调的PWM实现(MCU,MCS-51/MSP430)

1.Abstract     做这个是受朋友之邀,用在控制电机转动的方面.他刚好在一家好的单位实习,手头工作比较多,无暇分身,所以找我帮忙做个模型.要求很明晰,PWM的频率在0~1KHz范围内,占空比0~99%范围内,二者均可调.抄下指标以后,回到实验室,细细分析以后,决定用MCU来实现一下,毕竟只分析,无实际结果也不是一个好的交代. 2.Content   2.1 理论分析     归根结底来说,是一个时序逻辑,即PWM输出波形是随着时间的推移而变化.用时序图的方式解释更明晰些. FIG2.1

msp430学习笔记-IO及低功耗

引用:http://bbs.ednchina.com/BLOG_ARTICLE_3013511.HTM MSP430F149有6个8位的IO口,其中P1,P2口占两个中断向量,共可以接16个中断源.还可以直接利用P口的输入输出寄存器,直接对外进行通信.因为所有的IO口都是和其他外设复用的,因此在用端口前都要用功能选择寄存器选定所用的功能是外设还是P口,还要在方向寄存器中确定是输入还是输出 MSP430F149的端口功能 端口 功能 P1,P2 I/O,中断功能,其他片内外设功能 P3,P4,P5