430中断总结
单片机的中断与异常处理方法

单片机的中断与异常处理方法在单片机的工作过程中,中断和异常处理是非常重要的概念和方法。
它们能够有效地提高单片机的响应能力和灵活性,使其能够应对各种不同的工作需求和问题。
本文将介绍单片机中断的概念、中断的种类以及针对不同中断的处理方法,同时也会探讨单片机异常处理的原理和方法。
一、中断的概念和种类中断是指在一个程序执行的过程中,由于某种特殊的事件发生,导致程序的正常执行被打断,转而去执行一个与当前任务无关的子程序,完成该事件的相应处理。
中断可以分为外部中断和内部中断两种。
1. 外部中断外部中断是指当单片机外部引脚的电平或信号发生变化时,引发中断事件,使单片机停止当前任务的执行,去处理由该外部事件引发的中断服务程序(ISR)。
外部中断常用于与外部设备的交互,如按键输入、传感器检测等。
在编程中,我们可以通过设置中断触发条件和编写相应的中断服务程序来实现对外部中断的处理。
2. 内部中断内部中断是指当单片机内部某个特定的事件发生时,由硬件或软件触发中断请求,并且将控制权交给中断服务程序进行相应的处理。
内部中断的发生可以是由于某个特定条件的满足,如定时器溢出中断、串口接收中断等;也可以是由软件的运行结果触发,如除法溢出中断、地址错误中断等。
不同的内部中断需要通过编程实现相应的中断服务程序。
二、中断的处理方法中断处理是指在中断发生时,单片机通过中断向量表找到相应的中断服务程序,并对中断事件进行处理的过程。
下面将介绍两种常用的中断处理方法。
1. 优先级中断处理优先级中断处理是指对多个中断源按照优先级进行划分和处理的方法。
在单片机的中断系统中,每个中断源都被赋予了一个优先级,高优先级的中断可以打断当前正在执行的低优先级中断,从而增加了中断的响应速度和灵活性。
优先级中断处理需要在编程时设置中断的优先级,并根据不同的中断事件编写相应的中断服务程序。
2. 嵌套中断处理嵌套中断处理是指当一个中断正在执行的过程中,又发生了另一个中断时,将当前中断挂起,转而处理新发生的中断,并在处理完毕后返回原中断继续执行的方法。
430简介

MSP430目录[隐藏]基本简介MSP430 单片机的发展MSP430 单片机的特点MSP430 与89C51系列的比较应使用的多种MSP430[编辑本段]基本简介MSP430系列单片机是美国德州仪器(TI)1996年开始推向市场的一种16位超低功耗的混合信号处理器(Mixed Signal Processor)。
称之为混合信号处理器,主要是由于其针对实际应用需求,把许多模拟电路、数字电路和微处理器集成在一个芯片上,以提供“单片”解决方案。
[编辑本段]MSP430 单片机的发展MSP430 系列是一个16 位的、具有精简指令集的、超低功耗的混合型单片机,在1996 年问世,由于它具有极低的功耗、丰富的片内外设和方便灵活的开发手段,已成为众多单片机系列中一颗耀眼的新星。
回忆MSP430 系列单片机的发展过程,可以看出有这样三个阶段:开始阶段从1996 年推出MSP430 系列开始到2000 年初,这个阶段首先推出有33X 、32X 、31X 等几个系列,而后于2000 年初又推出了11X 、11X 1 系列。
MSP430 的33X 、32X 、31X 等系列具有LCD 驱动模块,对提高系统的集成度较有利。
每一系列有ROM 型( C )、OTP 型(P )、和EPROM 型( E )等芯片。
EPROM型的价格昂贵,运行环境温度范围窄,主要用于样机开发。
这也表明了这几个系列的开发模式,即:用户可以用EPROM 型开发样机;用OTP 型进行小批量生产;而ROM 型适应大批量生产的产品。
2000 年推出了11X/11X1 系列。
这个系列采用20 脚封装,内存容量、片上功能和I/O 引脚数比较少,但是价格比较低廉。
这个时期的MSP430 已经显露出了它的特低功耗等的一系列技术特点,但也有不尽如人意之处。
它的许多重要特性,如:片内串行通信接口、硬件乘法器、足够的I/O 引脚等,只有33X 系列才具备。
33X 系列价格较高,比较适合于较为复杂的应用系统。
430学习笔记

一,MSP430G2553单片机的各个功能模块(一),IO口模块,1,我们所用的MSP430G2553有两组IO口,P1和P2。
2,IO口的寄存器有:方向选择寄存器PxDIR,输出寄存器PxOUT,输入寄存器PxIN,IO口内部上拉或下拉电阻使能寄存器PxREN,IO口功能选择寄存器PxSEL和PxSEL2,IO口中断使能寄存器PxIE,中断沿选择寄存器PxIES,IO口中断标志寄存器PxIFG。
3,所有的IO都带有中断,其中所有的P1口公用一个中断向量,所有的P2口公用一个中断向量。
所以在使用中断时,当进入中断后,还要判断到底是哪一个IO口产生的中断,判断方法可以是判断各个IO口的电平。
4,中断标志PxIFG需要软件清除,也可以用软件置位,从而用软件触发一个中断。
注意:在设置PxIESx时根据PxINx有可能会引起相应的PxIFGx置位(具体的情况见用户指南),所以在初始化完IO口中断以后,正式使用IO中断前要先将对应的PxIFGx清零。
程序如下:void IO_interrupt_init() //IO中断初始化函数{P1REN |= BIT4+BIT5+BIT6+BIT7; // pullup 内部上拉电阻使能//使用中断时,使能内部的上拉电阻这样当该脚悬空是,电平不会跳变,防止悬空时电平跳变不停的触发中断P1OUT = BIT4+BIT5+BIT6+BIT7; // 当引脚上的上拉或下拉电阻使能时,PxOUT选择是上拉还是下来//0:下拉,1:上拉P1IE |= BIT4+BIT5+BIT6+BIT7; // interrupt enabled P13中断使能P1IES |= BIT4+BIT5+BIT6+BIT7; // Hi/lo edge 下降沿中断//P1IES &= ~BIT3; //上升沿触发中断P1IFG &= ~(BIT4+BIT5+BIT6+BIT7); //中断标志位清零}5,PxOUT:如果引脚选择了内部的上拉或下拉电阻使能,则PxOUT设定电阻是上拉还是下拉,0:下拉,1:上拉6,当IO口不用时,最好不要设为输入,且为浮动状态(这是IO口的默认状态),因为当输入为浮动时,输入电压有可能会在VIL和VIH之间,这样会产生击穿电流。
MSP430学习总结

MSP430学习总结前言这次主要看的资料是MSP430F425型号的,与MSP430F169有点区别,但由于MSP430单片机采用模块化结构,在不同型号的单片机中,同一种模块的使用方法和寄存器都是相同的。
下面会对它们的功能和区别加以说明。
一、MSP430单片机的特点1、我觉得MSP430最大的特点就是超低功耗,430之所以能够在低功耗的条件下运行,主要是由于引入了“时钟系统”的概念,和采用模块化结构。
让CPU可以间歇性的工作,节省功耗。
在MSP430单片机中,通过时钟配置可以产生3种时钟:MCLK:主时钟,MCLK是专门为CPU运行提供的时钟,MCLK配置的越高,CPU执行的速度就越快。
一旦关闭MCLKE,CPU 就停止工作,所以在超低功耗中通过间接开启MCLK的方式降低功耗。
SMCLK:子系统时钟,为单片机内部某些高速设备提供时钟,并且SMCLK是独立于MCLK的,关闭MCLK让CPU停止工作,子系统SMCLK开启,仍然可以使外设继续工作。
ACLK:活动时钟;ACLK一般是由32.768KHz晶振直接产生的低频时钟,在单片机运行时一般不关闭,和定时器使用间接唤醒CPU。
时钟系统对于3种时钟不同程度的关闭,就可以进入不同的低功耗模式(低功耗在下面讨论)。
2、MSP430单片机采用模块化结构,每一种模块都具有独立而完整的结构,这样就可以单独开启或者关闭某些模块,只需要激活某些使用的模块,以节省电力。
3、MSP430单片机的内核是16位RISC处理器,其运算能力和速度都具有一定的优势。
MSP430还有其它的一些优势在这里就不一一列举了。
二、MSP430单片机的内部资源1、I/O口寄存器PxIN: Px口输入寄存器PxOUT: Px口输出寄存器PxDIR : Px口方向寄存器 0=输入 1=输出PxSET: Px口第二功能选择寄存器 0=普通I/O 1=第二功能使用总结:以上的4个寄存器是所有I/O都具有的,在使用I/O 口之前首先要设置PxDIR,对于要使用第二功能的还要设置PxSET下面介绍的是430中P1,P2口引发中断需要设置的寄存器(MSP430单片机只有P1、P2口能引发中断)PxIE : Px口中断允许寄存器 0=不允许 1=允许PxIES : Px口中断沿选择寄存器 0=上升沿 1=下降沿PxIFG : Px口中断标志位寄存器 0=中断条件不成立1=中断条件曾经成立(说明:无论中断是否被允许,也不论是否正在执行中断服务程序,只要I/O满足中断条件,PxIFG的相应位就会置1,只能通过软件清除,这个可以用来判断哪一位I/O发生了中断,也不会漏掉每一次中断。
MPS430手册

T EXAS I NSTRUMENTSMPS430系列混合信号微控制器结构及模块用户指南目录1MSP430系列1.1特性与功能1.2系统关键性能1.3MSP430系列的各型号2结构概述2.1CPU2.2代码存储器2.3数据存储器(RAM)2.4运行控制2.5外围模块2.6振荡器、倍频器和时钟发生器3系统复位、中断和运行模式3.1系统复位和初始化3.2中断系统结构3.3中断处理3.3.1SFR中的中断控制位3.3.2外部中断3.4运行模式3.5低功耗模式3.5.1 低功耗模式0与模式1,LPM0和LPM1 3.5.2 低功耗模式2与模式3,LPM2和LPM3 3.5.3 低功耗模式4,LPM43.6 低功耗应用要点4 存储器组织4.1 存储器中的数据4.2 片内ROM组织4.2.1 ROM表的处理4.2.2 计算分支跳转和子程序调用4.3 RAM与外围模块组织4.3.1 RAM4.3.2 外围模块—地址定位4.3.3 外围模块--SFR5 16位CPU5.1 CPU寄存器5.1.1 程序计数器PC5.1.2 系统堆栈指针SP5.1.3 状态寄存器SR5.1.4 常数发生寄存器CG1与CG25.2 寻址模式5.2.1 寄存器模式5.2.2 变址模式5.2.3 符号模式5.2.4 绝对模式5.2.5 间接模式5.2.6 间接增量模式5.2.7 立即模式5.2.8 指令的时钟周期与长度5.3 指令组概述5.3.1 双操作数指令5.3.2 单操作数指令5.3.3 条件跳转5.3.4 模拟指令的短格式5.3.5 其它指令5.4 指令分布6 硬件乘法器6.1 硬件乘法器的操作6.2 硬件乘法器的寄存器6.3 硬件乘法器的SFR位6.4 硬件乘法器的软件限制6.4.1 硬件乘法器软件限制--寻址模式6.4.2 硬件乘法器软件限制--中断程序7 振荡器与系统时钟发生器7.1 晶体振荡器7.2 处理机时钟发生器7.3 系统时钟运行模式7.4 系统时钟控制寄存器7.4.1 模块寄存器7.4.2 与系统时钟发生器相关的SFR位7.5 DCO典型特性8 数字I/O配置8.1 通用端口P08.1.1 P0控制寄存器8.1.2 P0原理图8.1.3 P0中断控制功能8.2 通用端口P1、P28.2.1 P1、P2控制寄存器8.2.2 P1、P2原理图8.2.3 P1、P2中断控制功能8.3 通用端口P3、P48.3.1 P3、P4控制寄存器8.3.2 P3、P4原理图8.4 LCD端口8.5 LCD端口--定时器/端口比较器9 通用定时器/端口模块9.1 定时器/端口模块操作9.1.1 定时器/端口计数器TPCNT1,8位操作9.1.2 定时器/端口计数器TPCNT2,8位操作9.1.3 定时器/端口计数器,16位操作9.2 定时器/端口寄存器9.3 定时器/端口SFR位9.4 定时器/端口在A/D中的应用9.4.1 R/D转换原理9.4.2 分辨率高于8位的转换10 定时器10.1 Basic Timer110.1.1 BasicTimer1寄存器10.1.2 SFR位10.1.3 BasicTimer1操作10.1.4 BasicTimer1操作:LCD时钟信号f LCD 10.2 8位间隔(Interval)定时器/计数器10.2.1 8位定时器/计数器的操作10.2.2 8位定时器/计数器的寄存器10.2.3 与8位定时器/计数器有关的SFR 10.2.4 8位定时器/计数器在UART中的应用10.3 看门狗定时器10.3.1 看门狗定时器寄存器10.3.2 看门狗定时器中断控制功能10.3.3 看门狗定时器操作10.4 8位PWM定时器10.4.1 操作10.4.2 PWM寄存器11 Timer_A11.1 Timer_A的操作11.1.1 定时器操作11.1.2 捕获模式11.1.3 比较器模式11.1.4 输出单元11.2 Timer_A的寄存器11.2.1 Timer_A控制寄存器TACTL11.2.2 捕获/比较控制寄存器CCTL11.2.3 Timer_A中断向量寄存器11.3 Timer_A的应用11.3.1 Timer_A增计数模式应用11.3.2 Timer_A连续模式应用11.3.3 Timer_A增/减计数模式应用11.3.4 Timer_A软件捕获应用11.3.5 Timer_A处理异步串行通信协议11.4 Timer_A的特殊情况11.4.1 CCR0用作周期寄存器11.4.2 定时器寄存器的启/停11.4.3 输出单元Unit012 USART外围接口,UART模式12.1 异步操作12.1.1 异步帧格式12.1.2 异步通信的波特率发生器12.1.3 异步通信格式12.1.4 线路空闲多处理机模式12.1.5 地址位格式12.2 中断与控制功能12.2.1 USART接收允许12.2.2 USART发送允许12.2.3 USART接收中断操作12.2.4 USART发送中断操作12.3 控制与状态寄存器12.3.1 USART控制寄存器UCTL12.3.2 发送控制寄存器UTCTL12.3.3 接收控制寄存器URCTL12.3.4 波特率选择和调制控制寄存器12.3.5 USART接收数据缓存URXBUF12.3.6 USART发送数据缓存UTXBUF12.4 UART模式,低功耗模式应用特性12.4.1 由UART帧启动接收操作12.4.2 UART模式波特率与时钟频率12.4.3 节约MSP430资源的多处理机模式12.5 波特率的计算13 USART外围接口,SPI模式13.1 USART的同步操作13.1.1 SPI模式中的主模式,MM=1、SYNC=1 13.1.2 SPI模式中的从模式,MM=0、SYNC=1 13.2 中断与控制功能13.2.1 USART接收允许13.2.2 USART发送允许13.2.3 USART接收中断操作13.2.4 USART发送中断操作13.3 控制与状态寄存器13.3.1 USART控制寄存器13.3.2 发送控制寄存器UTCTL13.3.3 接收控制寄存器URCTL13.3.4 波特率选择和调制控制寄存器13.3.5 USART接收数据缓存URXBUF 13.3.6 USART发送数据缓存UTXBUF14 液晶显示驱动14.1 LCD驱动基本原理14.2 LCD控制器/驱动器14.2.1 LCD控制器/驱动器功能14.2.2 LCD控制及模式寄存器14.2.3 LCD显示存储器14.2.4 LCD操作软件例程14.3 LCD端口功能14.4 LCD与端口模式混合应用实例15 A/D转换器15.1 概述15.2 A/D转换操作15.2.1 A/D转换15.2.2 A/D中断15.2.3 A/D量程15.2.4 A/D电流源15.2.5 A/D输入端与多路切换15.2.6 A/D接地与降噪15.2.7 A/D输入与输出引脚15.3 A/D控制寄存器16 其它模块16.1 晶体振荡器16.2 上电电路16.3 晶振缓冲输出附录A 外围模块分布附录B 指令组说明附录C EPROM编程本书用途及表述约定MSP430用户指南以方便工程师及程序员使用的方式提供软件和硬件资料,以帮助开发应用MSP430系列的产品。
单片机中断实验总结

单片机中断实验总结单片机中断是单片机系统中一项重要的功能和特性。
通过中断,可以实现对外部事件的实时响应和处理,从而提高系统的实时性和可靠性。
在实验中,我对单片机中断进行了学习和实践,以下是我的实验总结。
在实验中,我首先了解了中断的基本概念和原理。
中断是指在程序执行过程中,由外部事件、硬件设备或软件请求而打断正常执行流程,转去执行与该事件或请求相关的子程序。
中断可以分为外部中断和内部中断。
外部中断是通过硬件引脚与外部设备进行连接并触发的,而内部中断则是由软件内部生成的。
中断的实现需要借助中断控制器,例如常用的单片机8051就内置了中断控制器。
实验中,我使用keil C编译器和STC89C52单片机开发板进行了中断的实现。
编写了一个简单的程序,当外部中断0引脚检测到高电平时,触发外部中断,执行相应的中断服务程序。
在编写程序时,首先定义了中断服务程序的函数原型,然后通过中断向量表将中断服务程序与相应的中断号关联起来。
在主程序中,使用IE寄存器和相应的位操作函数开启了外部中断。
在实验过程中,我遇到了一些问题,并进行了解决。
首先,我发现外部中断引脚的电平触发方式对中断的触发有影响。
通过查阅资料,我了解到外部中断引脚可以选择边沿触发还是电平触发,需要根据实际的需求进行设置。
其次,我发现在中断服务程序中,需要注意中断屏蔽和中断优先级的设置,以免出现中断互相屏蔽的情况。
最后,我发现中断服务程序中的代码需要尽量简洁和高效,以保证中断的响应时间和系统的实时性。
通过实验,我进一步理解了单片机中断的概念和原理,掌握了使用keil C编写中断程序的方法,提高了对单片机系统的认识和理解。
中断在单片机系统中具有重要的作用,可以实现对外部事件的实时响应和处理,从而提高系统的可靠性和实时性。
在今后的学习和实践中,我将进一步深化对中断的理解和应用,并将其应用到更为复杂的系统中。
参考内容:1. 《嵌入式系统原理与开发:使用51单片机和C语言》-程杰2. 《嵌入式系统与单片机原理实验教程》-王刚3. 《单片机原理与应用》-马利民4. STC89C52单片机数据手册5. Keil C51编译器使用手册。
MSP430的一些位操作问题

MSP430的一些位操作问题一.P2DIR = BIT0+BIT1+BIT2+BIT3+BIT4+BIT5+BIT6;什么意思?就是把P3口的0,1,2,3,4,5,6设置为输出模式。
类似的PxDIR是设置输入还是输出的,"|="是置一的意思,“&= ~()”是置0的意思。
PxOUT输出,PxIN是输入。
PxSEL是选择端口功能,置一是选择第二功能,置0是选择第一功能(I/O口);二.P2OUT&=(~BIT2);是什么意思?P2OUT=BIT2;和P2OUT|=BIT2;有什么区别?前一问:BIT2是一个位掩码的定义,应该就是0x40。
P2OUT &= (~BIT2);就等价于P2OUT = P2OUT & (~BIT2);,即将P2OUT寄存器的BIT2位置为0,不改变其它位的状态。
后一问:P2OUT = BIT2;,即将P2OUT寄存器的BIT2位置1,其余位全部置0。
P2OUT |= BIT2;,就跟上面一样,等价于P2OUT = P2OUT | BIT2;,即将P2OUT寄存器的BIT2位置1,不改变其它位的状态。
三.if((P2IN&BIT0)==BIT0) P2OUT&=~BIT4; 什么意思BIT0等价于0x01,意思是如果P2IN的第一个输入引脚检测到0 则P2OUT 的第五个引脚置0追问BIT0不是等价于0x01吗,那么是不是P2,0输入1时则P2OUT的第五个引脚置0 ?还有,请问P2IN 有具体的值么,还是就是一个输入标志?多谢!!回答第一个问题:P2.0输入0时则P2.4输出0(你再好好理下逻辑关系)第二个问题:P2IN,跟P2OUT只是表示一个方向,一个表示P2是输入,一个表示P2输出四.在msp430中P2DIR=0xFF;是什么意思这句是定义P2口的各个口线的输入输出状态,0xFF说明各个口线选择的都是输出状态,如果想改成输入状态,只需要将对应的位改成0就行了。
外部中断实验总结

外部中断实验总结一、实验目的本次实验旨在通过外部中断的方式,实现对单片机的中断响应,并掌握中断程序设计方法。
二、实验原理外部中断是指由单片机外部硬件引脚产生的中断信号,当引脚电平发生变化时,单片机会立即停止当前执行的程序,跳转到相应的中断服务程序中执行。
在本次实验中,我们使用了8051单片机的INT0和INT1两个外部中断引脚。
三、实验器材1. 8051单片机开发板2. 电脑(用于编写和下载程序)3. LED灯4. 按钮开关四、实验步骤1. 编写程序:首先需要编写一个可以响应外部中断的程序。
我们可以通过设置相应寄存器来使单片机响应INT0和INT1两个引脚上的信号。
例如,在P3口接入一个按键开关,并将其与INT0引脚相连,则当按键被按下时,INT0引脚会被拉低,从而触发一个外部中断。
此时单片机会跳转到相应的ISR(Interrupt Service Routine)函数中执行。
2. 烧录程序:将编写好的程序烧录到8051芯片上。
这可以通过专门的烧录器或者通过串口下载实现。
在烧录程序之前,需要将引脚连接好,并确定中断触发方式(上升沿触发或下降沿触发)。
3. 测试程序:将LED灯连接到单片机的某个IO口上,以便测试程序是否可以正常响应外部中断。
当按下按钮开关时,LED灯应该会亮起。
五、实验结果通过本次实验,我们成功地实现了对8051单片机的外部中断响应,并掌握了中断程序设计方法。
在实验过程中,我们还学习了如何使用按键开关和LED灯来测试程序的正确性。
六、实验总结本次实验是一项非常基础的单片机实验,但是它对于初学者来说非常重要。
通过这个实验,我们不仅学会了如何编写一个简单的中断服务程序,还学会了如何使用按键开关和LED灯来测试程序的正确性。
这些知识对于今后的单片机编程工作都非常有帮助。
同时,在本次实验中我们也遇到了一些问题,例如引脚连接不正确等等,在解决这些问题的过程中也增加了我们对单片机原理和电路设计方面的认识。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MSP430的中断分为3种:1.系统复位、2.非屏蔽中断、3.可屏蔽中断。
系统复位指向中断向量表(表3-11)的最高地址0xFFFE。
非屏蔽中断和可屏蔽中断根据能否被SR寄存器中的全局中断使能位GIE禁用来区分,非屏蔽中断不受GIE的控制,具备独立的中断使能;可屏蔽中断除了受本身的中断使能控制,还接受GIE控制。
1. 在MSP430中@非屏蔽中断主要有3个,分别是来自MSP430外部管脚NMI的触发FLASH非法访问振荡器错误非屏蔽中断都指向中断向量表中的0xFFFC地址。
2. MSP430具备大量的@可屏蔽中断,定时器、ADC、DMA、UART、WDT、I/O、比较器等都具备中断功能。
不同的可屏蔽中断优先级可根据中断向量表决定。
可屏蔽中断的中断向量表从0xFFFA地址开始向低地址扩展,地址越高的中断向量表所对应的中断优先级越高。
3. 每个中断向量在中断向量表里面占据一个2Byte空间的表项,这个2Byte的空间用来存储对应中断服务函数的首地址,CPU根据中断向量表里的地址跳转到中断服务函数。
仔细观察中断向量表可以看到,一些中断向量对应于多个中断源。
例如,地址为0xFFF8的Timer1_A3中断,当TA1CCR1中断标志位CCIFG置位或者TAIFG置位都会跳转到该向量。
又如具备中断功能的P1和P2端口,端口中的任意一个管脚发生中断都会跳转到对应的中断向量。
这种中断就叫做多源中断。
对于多源中断,中断源中任意一个中断发生都会跳转到公用的中断向量表项,这个时候需要通过中断标志位区别具体的中断源。
有了这些中断向量表的基础知识,下面介绍中断的处理过程,包括中断的接收和退出过程。
4. 微控制器使用过程中一些突发的程序跑飞问题,很多时候都是由于没有正确地处理中断造成的。
5. 中断发生的先决条件是对应中断使能位使能,@非屏蔽中断要求其独立的中断使能开启;@可屏蔽中断要求全局中断使能和自身中断使能同时开启。
6. 当中断请求到达,CPU从接受中断请求到开始执行中断服务函数的第一条指令需要5~6个CPU周期。
前面介绍过MSP430有两种CPU,分别是CPU和CPUX。
其中CPU处理过程耗费6个CPU周期,而CPUX处理过程耗费5个CPU周期。
7. 中断请求接收后,会按照以下顺序处理:1)CPU执行完当前指令。
中断和CPU一般不是同步的或者CPU正在执行的指令不是单周期指令,所以CPU先处理完当前指令。
2)指向下一条CPU指令的PC被压栈。
3)状态寄存器SR压栈。
步骤2和步骤3的目的是保护现场,为中断服务函数执行完之后恢复之前运行状态做准备。
4)选择最高优先级的中断进行服务。
中断优先级在这个时候就会发挥作用。
5)单源中断标志位会被自动清零,多源中断标志位需要软件清零。
因为具备I/O中断功能的P1、P2端口中断标志位属于多源中断标志位,其中断标志位不会自动清零,需要在代码中手动清零。
6)状态寄存器SR被清零,将会终止任何低功耗状态,并且全局中断使能被关闭(GIE)。
MSP430在接收了中断后由于SR的清零操作自动关闭全局中断使能,就是说默认状态下是不允许中断嵌套的,若用到中断嵌套的话需要在中断服务函数中,打开全局中断。
7)中断向量中存储的中断服务函数地址被装载到PC中开始执行中断服务函数。
中断服务函数的最后一条汇编指令是RETI,表示从中断服务函数中返回。
MSP430的返回过程比进入过程要快一些,主要是因为返回过程的时候CPU指令已经执行完。
返回过程对于CPU需要5个CPU周期,对于CPUX需要3个CPU周期。
按照下面的顺序执行返回操作:①状态寄存器SR出栈,SR的设置会立即生效。
②PC指针出栈,接着执行中断前的代码。
8. 在使用中断时,如果某个中断开启,则一定要写中断服务函数,即便中断服务函数为空操作。
这个过程是对中断向量赋值,避免中断发生后,程序跑飞。
其中可屏蔽中断分为系统NMI(SNMI)和用户NMI(UNMI),一般来说,不可屏蔽中断不受GIE标志位的影响。
用户不可屏蔽中断的中断源为NMIIE、ACCIE和OFIE,当响应用户不可屏蔽中断后,其他不可屏蔽中断就自动被禁止,以防止同级别的中断发生产生中断嵌套。
当同时有多个中断来的时候才有优先级的考虑(优先级顺序可查看向量表)。
有中断响应以后自动关闭总中断,这个时候即使来更高优先级的中断都不会响应。
要中断嵌套的话,就必须在中断中打开总中断。
关于中断嵌套,资料上是这么讲的: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();"开中断,而在打开中断前没有清标志,就会有相同的中断不断嵌入,而导致堆栈溢出引起复位,所以在这类中断中必须先清标志再打开中断开关。
部分具体的中断优先级由高到低为: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] */中断寄存器:一、P1、P2端口二、开门狗:三、定时器A:TAIE:定时器中断允许位0:禁止定时器溢出中断1:允许定时器溢出中断TAIFG:定时器溢出标志位增计数模式时:当定时器由CCR0计数到0,TAIFG置位;连续计数模式时:当定时器由0FFFFH 计数到0时,TAIFG置位增/减计数模式时:当定时器由CCR0减计数到0时,TAIFG置位。
0:没有TA中断请求1:有TA中断请求CCIE:捕获/比较模块中断允许位0:禁止中断(TACCRx)1:允许中断(TACCRx)COV:捕获溢出标志当CAP=0时,选择比较模式.捕获信号发生复位。
没有使COV置位的捕获事件。
当CAP=1 时,选择捕获模式。
如果捕获寄存器的值被读出前在此发生捕获事件,则COV 置位。
程序可检测COV 来判断原值读出前是否又发生捕获事件。
读捕获寄存器时不会使溢出标志复位,须用软件复位。
0:没有捕获溢出1:发生捕获溢出CCIFG:捕获比较中断标志捕获模式:寄存器CCRx 捕获了定时器TAR 值时置位。
比较模式:定时器TAR 值等于寄存器CCRx值时置位。
0:没有中断请求(TACCRx)1:有中断请求(TACCRx)CAIES:中断触发沿选择0:上升沿触发1:下降沿触发CAIE:中断允许0:中断禁止1:中断允许CAIFG:比较器中断标志0:没有中断请求1:有中断请求四、UXRCTLURXEIE:接收出错中断允许位0 不允许中断,不接收出错字符并且不改变URXIFG标志位;1 允许中断,出错字符接收并且能够置位URXIFG。
URXWIE:接收唤醒中断允许位当接收到地址字符时,该位能够置位URXIFG,当URXEIE=0,如果接收内容有错误,该位不能置位URXIFG。
0 所有接收的字符能够置位URXIFG;1 只有接收到地址字符才能置位URXIFG。
五、ADC12:ENC:转换允许位0 ADC12为初始状态,不能启动A/D 转换1 首次转换由SAMPCON 的上升沿启动注意:[1]在CONSEQ=0(单通道单次转换)的情况下,当ADC12BUSY=1时,ENC=0则会结束转换进程,并且得到错误结果。
[2]在CONSEQ≠0(非单通道单次转换)的情况下,当ADC12BUSY=1时,ENC=0则转换正常结束,得到正确结果ADC12TVIE:转换时间溢出中断允许(多次采样请求)当前转换还没有完成时,又得到一次采样请求,如果ADC12TVIE允许的话,会产生中断。
0 允许发生转换时间溢出产生中断1 禁止发生转换时间溢出产生中断ADC12OVIE:溢出中断允许(ADC12MEMx 多次写入)当ADC12MEMx还没有被读出的时候,而又有新的数据要求写入ADC12MEMx 时,如果允许则会产生中断0 允许溢出中断1 禁止溢出中断六、DAC:DAC12IE:DAC12的中断允许0 禁止中断1 允许中断DAC12IFG:DAC12的中断标志位0 没有中断请求1 有中断请求。