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灯来测试程序的正确性。
这些知识对于今后的单片机编程工作都非常有帮助。
同时,在本次实验中我们也遇到了一些问题,例如引脚连接不正确等等,在解决这些问题的过程中也增加了我们对单片机原理和电路设计方面的认识。
MSP430常见问题汇总(利尔达)
Q11:USB 仿真器下载汇编程序时没有问题,但是下载 C 语言程序时,出报警信息 如下:
The stack plug-in failed to set a breakpoint on "main".The stack window will not be able to display stack contents. (You can change this setting in the Tools>Options dialog box. 在调试信息窗口出现 operation error. A11:调试 c 程序时 在 Tools>Options dialog box 中 stack 要选中指向 main 函数处。 汇编和 c 要建不同的工程下调试。
公司地址:杭州市登云路 425 号杭州利尔达科技大厦 Tel:0571-88800000 Fax:0571-89908519
第3页 共68页
LSD MCU TECHNOLOGY CO., LTD .
利尔达单片机技术有限公司
Q7: 请问 AR 编译器的 s43 文件用什么编辑器打开? A7:打开 IAR 编译器后就可以直接打开了;另外,记事本也可以打开
Q2:我用的 430f22x 学习套件,请问在 IAR Embedded Workbench 中仿真时如何看程序运行时间. A2:只有软件模拟下可以看, VIEW-REGISTER-CYCLECOUNT
Q3:请问各位 msp430 仿真器和编程器有什么区别啊?是不是我开发的时候这两个东西都得有?我目前用的是 msp430cg461x 系列或 msp430fg461x 系列,是不是很多仿真器和编程器都不支持? A3:一般来讲,仿真器是在先期调试程序时使用的,他不会烧断单片机熔丝,能把程序下载到单片机中,能 够单步,跟踪,快速调试。编程器就没有这些调试功能,就是单纯把你做好的程序的编译后文件写到单片机 中去,就和 51 的编程器一样,有加密熔丝烧断等功能,是在你产品成型后,生产时使用的
msp430
msp430 学习经验总结:⼀.MSP430开发环境建⽴1.安装IAR dor msp430 软件,软件带USB仿真器的驱动。
2.插⼊USB仿真器,驱动选择安装⽬录的/drivers/TIUSBFET3.建⽴⼀个⼯程,选择"option"选项,设置a、选择器件,在"General"项的"Target"标签选择⽬标器件b、选择输出仿真,在"Linker"项⾥的"Output"标签,选择输出"Debug information for C-SPY",以输出调试信息⽤于仿真。
c、若选择"Other",Output下拉框选择"zax-m"即可以输出hex⽂件⽤以烧录,注意,此时仿真不了。
d、选择"Debugger"项的"Setup"标签,"Driver"下拉框选择"FET Debugger"e、选择"FET Debugger"项的"Setup"标签,"Connection"下拉框选择"Texas Instrument USB-I"4.仿真器的接⼝,从左到右分别为 " GND,RST,TEST,VCC"⼆.IO⼝数字输⼊/输出端⼝有下列特性:每个输⼊/输出位都可以独⽴编程。
允许任意组合输⼊、输出。
P1 和 P2 所有 8 个位都可以分别设置为中断。
可以独⽴操作输⼊和输出数据寄存器。
可以分别设置上拉或下拉电阻。
在介绍这四个I/O⼝时提到了⼀个“上拉电阻”那么上拉电阻⼜是⼀个什么东东呢?他起什么作⽤呢?都说了是电阻那当然就是⼀个电阻啦,当作为输⼊时,上拉电阻将其电位拉⾼,若输⼊为低电平则可提供电流源;所以如果P0⼝如果作为输⼊时,处在⾼阻抗状态,只有外接⼀个上拉电阻才能有效。
msp430最全的指令集
4)对应的SFR的中断位#define OFIFG 0x02#define OFIE 0x02九、SVSSVSCTL(0x0056) /* SVS Control */#define SVSFG (0x01) /* SVS Flag */#define SVSOP (0x02) /* SVS output (read only) */#define SVSON (0x04) /* Switches the SVS on/off */#define PORON (0x08) /* Enable POR Generation if Lo w Voltage */#define VLDON (0x10)#define VLDOFF (0x00)#define VLD_1_8V (0x10)十一、Timer A31)寄存器:TAIV (0x012E) 中断向量寄存器TACTL (0x0160) 控制寄存器CCTL0(0x0162) 捕获比较控制寄存器0CCTL1(0x0164) 捕获比较控制寄存器1CCTL2(0x0166) 捕获比较控制寄存器2TAR(0x0170) 寄存器CCR0(0x0172) 捕获比较寄存器0CCR1(0x0174) 捕获比较寄存器1CCR2(0x0176) 捕获比较寄存器22)TACTL中的各位SSEL1 SSEL0 输入信号TASSEL2 (0x0400) 未用0 0 TACLK(特定的外部信号)TASSEL1 (0x0200) 时钟选择0 1 ACLKTASSEL0 (0x0100) 时钟选择 1 0 MCLKID1 (0x0080) 输入信号分频:00 直通;01:2分频ID0 (0x0040) 与ID1一起:10 4分频11:8分频MC1 (0x0020) 两位一起:00 停止;01:增记数到CCR0;MC0 (0x0010) 模式控制:10 连续增记数,11 增记数到CCR0,减记数到0H;TACLR (0x0004) 定时器清除位TAIE (0x0002) 中断允许TAIFG (0x0001) 定时器溢出标志#define MC_0 (0*0x10u) /* Timer A mode control: 0 - Stop */#define MC_1 (1*0x10u) /* Timer A mode control: 1 - Up to C CR0 */#define MC_2 (2*0x10u) /* Timer A mode control: 2 - Continous up */#define MC_3 (3*0x10u) /* Timer A mode control: 3 - Up/Down */ #define ID_0 (0*0x40u) /* Timer A input divider: 0 - /1 */#define ID_1 (1*0x40u) /* Timer A input divider: 1 - /2 */#define ID_2 (2*0x40u) /* Timer A input divider: 2 - /4 */#define ID_3 (3*0x40u) /* Timer A input divider: 3 - /8 */#define TASSEL_0 (0*0x100u) /* Timer A clock source select: 0 - T ACLK */#define TASSEL_1 (1*0x100u) /* Timer A clock source select: 1 - ACLK */#define TASSEL_2 (2*0x100u) /* Timer A clock source select: 2 - SMCLK */#define TASSEL_3 (3*0x100u) /* Timer A clock source select: 3 - INCLK */3)捕获比较控制寄存器CCTLX对应的位CM1 (0x8000) 00 禁止01 上升沿捕获CM0 (0x4000) 10 下降沿捕获11 上升沿与下降沿都捕获CCIS1 (0x2000) CCIS0和CCIS1输入选择00 选择CCIXA;CCIS0 (0x1000) 01 选择CCIXB,10 GND 11 VCC SCS (0x0800) 0异步捕获 1 同步捕获SCCI (0x0400) 捕获比较输入信号与比较输出EQUX同步CAP (0x0100) 0 比较模式 1 捕获模式OUTMOD2 (0x0080)OUTMOD1 (0x0040)OUTMOD0 (0x0020)CCIE (0x0010) 1 允许中断 0 禁止中断CCI (0x0008) 捕获/比较输入信号选择OUT (0x0004)COV (0x0002)CCIFG (0x0001) 中断标志(与CCRX有关)#define OUTMOD_0 (0*0x20u) /* PWM output mode: 0 - output only */ #define OUTMOD_1 (1*0x20u) /* PWM output mode: 1 - set */#define OUTMOD_2 (2*0x20u) /* PWM output mode: 2 - PWM toggle/re set */#define OUTMOD_3 (3*0x20u) /* PWM output mode: 3 - PWM set/reset */#define OUTMOD_4 (4*0x20u) /* PWM output mode: 4 - toggle */#define OUTMOD_5 (5*0x20u) /* PWM output mode: 5 - Reset */#define OUTMOD_6 (6*0x20u) /* PWM output mode: 6 - PWM toggle/ set */#define OUTMOD_7 (7*0x20u) /* PWM output mode: 7 - PWM reset/s et */#define CCIS_0 (0*0x1000u) /* Capture input select: 0 - CCIxA */ #define CCIS_1 (1*0x1000u) /* Capture input select: 1 - CCIxB */ #define CCIS_2 (2*0x1000u) /* Capture input select: 2 - GND */#define CCIS_3 (3*0x1000u) /* Capture input select: 3 - Vcc */#define CM_0 (0*0x4000u) /* Capture mode: 0 - disabled */#define FSSEL_2 (0x0080) /* Flash clock select: 2 - SMCLK */#define FSSEL_3 (0x00C0) /* Flash clock select: 3 - SMCLK */#define BUSY (0x0001) /* Flash busy: 1 */#define KEYV (0x0002) /* Flash Key violation flag */#define ACCVIFG (0x0004) /* Flash Access violation flag */#define WAIT (0x0008) /* Wait flag for segment write */#define LOCK (0x0010) /* Lock bit: 1 - Flash is locked (read onl y) */#define EMEX (0x0020) /* Flash Emergency Exit */十三、比较器#define CACTL1 (0x0059) /* Comparator A Control 1 */#define CACTL2 (0x005A) /* Comparator A Control 2 */#define CAPD (0x005B) /* Comparator A Port Disable */#define CAIFG (0x01) /* Comp. A Interrupt Flag */#define CAIE (0x02) /* Comp. A Interrupt Enable */#define CAIES (0x04) /* Comp. A Int. Edge Select: 0:rising / 1: falling */#define CAON (0x08) /* Comp. A enable */#define CAREF0 (0x10) /* Comp. A Internal Reference Select 0 */ #define CAREF1 (0x20) /* Comp. A Internal Reference Select 1 */ #define CARSEL (0x40) /* Comp. A Internal Reference Enable */ #define CAEX (0x80) /* Comp. A Exchange Inputs */#define CAREF_0 (0x00) /* Comp. A Int. Ref. Select 0 : Off */ #define CAREF_1 (0x10) /* Comp. A Int. Ref. Select 1 : 0.25*Vcc */ #define CAREF_2 (0x20) /* Comp. A Int. Ref. Select 2 : 0.5*Vcc */ #define CAREF_3 (0x30) /* Comp. A Int. Ref. Select 3 : Vt*/#define CAOUT (0x01) /* Comp. A Output */#define CAF (0x02) /* Comp. A Enable Output Filter */#define P2CA0 (0x04) /* Comp. A Connect External Signal to C A0 : 1 */#define P2CA1 (0x08) /* Comp. A Connect External Signal to C A1 : 1 */#define CACTL24 (0x10)#define CACTL25 (0x20)#define CACTL26 (0x40)#define CACTL27 (0x80)#define CAPD0 (0x01) /* Comp. A Disable Input Buffer of Port Register .0 */#define CAPD1 (0x02) /* Comp. A Disable Input Buffer of Port Register .1 */#define CAPD2 (0x04) /* Comp. A Disable Input Buffer of Port Register .2 */#define CAPD3 (0x08) /* Comp. A Disable Input Buffer of Port Register .3 */#define CAPD4 (0x10) /* Comp. A Disable Input Buffer of Port Register .4 */#define CAPD5 (0x20) /* Comp. A Disable Input Buffer of Port Register .5 */#define CAPD6 (0x40) /* Comp. A Disable Input Buffer of Port Register .6 */#define CAPD7 (0x80) /* Comp. A Disable Input Buffer of Port Register .7 */十四、中断向量#define BASICTIMER_VECTOR (0 * 2u) /* 0xFFE0 Basic Timer */#define PORT2_VECTOR (1 * 2u) /* 0xFFE2 Port 2 */#define PORT1_VECTOR (4 * 2u) /* 0xFFE8 Port 1 */#define TIMERA1_VECTOR (5 * 2u) /* 0xFFEA Timer A CC1-2, TA */#define TIMERA0_VECTOR (6 * 2u) /* 0xFFEC Timer A CC0 */#define WDT_VECTOR (10 * 2u) /* 0xFFF4 Watchdog Timer */ #define COMPARATORA_VECTOR (11 * 2u) /* 0xFFF6 Comparator A */ #define NMI_VECTOR (14 * 2u) /* 0xFFFC Non-maskable */#define RESET_VECTOR (15 * 2u) /* 0xFFFE Reset [Highest Priori ty] */。
MSP430经典例程讲解
这只是我在学习TI公司生产的16位超的功耗单片机MSP430的随笔,希望能对其他朋友有所借鉴,不对之处还请多指教。
下面,开始430之旅。
讲解430的书现在也有很多了,不过大多数都是详细说明底层硬件结构的,看了不免有些空洞和枯燥,我认为了解一个MCU的操作首先要对其基础特性有所了解,然后再仔细研究各模块的功能。
1、首先你要知道msp430的存储器结构。
典型微处理器的结构有两种:冯 ? 诺依曼结构----程序存储器和数据存储器统一编码;哈佛结构----程序存储器和数据存储器。
MSP430系列单片机属于前者,而常用的mcs51系列属于后者。
0-0xf特殊功能寄存器;0x10-0x1ff外围模块寄存器;0x200-?根据不同型号地址从低向高扩展;0x1000-0x107f seg_b0x1080_0x10ff seg_a 供flash信息存储,剩下的从0xffff 开始向下扩展,根据不同容量,例如149为60KB,0xffff-0x11002、复位信号是MCU工作的起点,430的复位型号有两种:上电复位信号POR和上电清楚信号PUC。
POR信号只在上电和RST/NMI复位管脚被设置为复位功能,且低电平时系统复位。
而PUC信号是POR信号产生,以及其他如看门狗定时溢出、安全键值出现错误是产生。
但是,无论那种信号触发的复位,都会使MSP430在地址0xffff处读取复位中断向量,然后程序从中断向量所指的地址开始执行。
复位后的状态不写了,详见参考书,嘿嘿。
3、系统时钟是一个程序运行的指挥官,时序和中断也是整个程序的核心和中轴线。
430最多有三个振荡器:DCO内部振荡器;LFXT1外接低频振荡器,常见的32768HZ,不用外接负载电容;也可接高频450KHZ-8M,需接负载电容;XT2接高频450KHZ-8M,加外接电容。
430有三种时钟信号:MCLK系统主时钟,可分频1/2/4/8,供CPU使用,其他外围模块在有选择情况下也可使用;SMCLK系统子时钟,供外围模块使用,可选则不同振荡器产生的时钟信号;ACLK辅助时钟,只能由LFXT1产生,供外围模块。
单片机中断问题总结
单片机中断问题总结在单片机中,中断是一种机制,用于在特定事件发生时打断当前的程序执行,并转去处理与该事件相关的代码。
中断是一种异步的事件驱动机制,可以提高系统的响应速度和实时性。
以下是关于单片机中断的一些常见问题总结:1.什么是中断?中断是一种从正常的程序流程中暂时跳转到特定处理函数的机制。
当某个特定的事件发生,如外部信号触发、定时器到达、数据传输完成等,单片机会立即停止当前的执行,转入中断服务程序(ISR)执行,并在完成中断处理后返回到原来的程序流程。
2.中断的优点是什么?中断机制可以提供实时响应,使单片机能够快速地处理某些事件。
它允许在程序执行过程中处理紧急事件,而无需等待特定的时间点。
中断还能避免一直轮询某个事件或等待特定条件满足,节省了处理器的资源,并提高了系统的效率。
3.如何编写中断服务程序?编写中断服务程序(ISR)需要根据单片机型号和开发工具的不同来进行配置。
一般的步骤包括:定义中断向量(Interrupt Vector)、编写中断服务函数、配置中断源和中断优先级、打开全局中断(或者禁用中断)。
具体的编写方法可以参考所使用的单片机的开发手册和编程指南。
4.中断的优先级是如何配置的?单片机通常支持多个中断源,并且可以根据需要为每个中断源分配优先级。
中断的优先级配置取决于具体的单片机型号和芯片架构,可以通过相关的寄存器设置或软件配置来实现。
5.中断可能带来哪些问题?在设计中断服务程序时,需要注意以下一些问题:中断嵌套的处理、共享的资源竞争、中断延迟和消耗的处理时间等。
合理的设计和编码可以避免这些问题,并确保中断机制的稳定和可靠性。
总之,在单片机应用中,中断是一种重要的机制,用于处理及时和紧急的事件。
了解中断的工作原理、编写和配置中断服务程序,并注意中断可能引发的问题,有助于提高单片机系统的效率和功能。
中断与异常
从而允许CPU通过数据总线读这个向量 c. 把引发信号发送到处理器的INTR引脚,即产
生一个中断 d. 等待,直到CPU应答这个信号;收到应答后,
清INTR引脚
3. 返回到第一步
传统的中断控制器:8259A
每个向量在表中有相应的中断或者异常处理程序 的入口地址。
每个描述符8个字节,共256项,占用空间2KB 内核在允许中断发生前,必须适当的初始化IDT
CPU的idtr寄存器指向IDT表的物理基地址
5.1.4 中断描述符表
• 中断描述符表(IDT):即中断向量表, 每个中断占据一个表项
5.1.4 中断描述符表
中断的基本知识中断描述符表的初始化中断处理中断的下半部处理机制中断的应用时钟中断为什么会有中断内核必须处理其他任务只有当外设真正完成了准备好了时cpu才转过来处理外设ia32linuxcpu内部中断或计算机内部硬件出错引起的异常51551中断信号的作用中断信号提供了一种特殊的方式使得cpu转去运行正常程序之外的代码比如一个外设采集到一些数据发出一个中断信号cpu必须立刻相应这个信号否则数据可能丢失当一个中断信号到达时cpu必须停止它当前正在做的事并且切换到一个新的活动为了做到这这一点在进程的内核态堆栈保存程序计数器的当前值即eip和cs寄存器并把与中断信号相关的一个地址放进程序计数器中断信号的处理原则当内核正在做一些别的事情的时候中断会随时到来
中断掠影
中断控制是计算机发展中一种重要的技术。最初它是为 克服对I/O接口控制采用程序查询所带来的处理器低效率 而产生的。
中断控制的主要优点是只有在I/O需要服务时才能得到处 理器的响应,而不需要处理器不断地进行查询。由此, 最初的中断全部是对外部设备而言的,即称为外部中断 (或硬件中断)
外部中断实验总结
外部中断实验总结外部中断实验总结一、实验目的本次实验的目的是了解外部中断的原理和应用,并通过实验掌握外部中断的使用方法。
二、实验原理外部中断是指通过外部触发器触发的中断,常见的外部触发器有按键、传感器等。
当外部触发器触发后,会发送一个中断信号到微控制器,微控制器根据中断信号进行相应的中断处理。
外部中断的使用步骤如下:1. 设置外部中断控制寄存器的相关位,启用外部中断功能;2. 设置外部中断触发条件,可以设置为下降沿触发、上升沿触发或边沿触发;3. 设置中断服务程序,中断服务程序是处理外部中断的主要功能代码,一般在该函数中执行相应的操作;4. 在主函数中开启总中断或者特定中断;5. 当外部中断触发时,中断服务程序将被自动调用执行;6. 中断服务程序执行完后,程序将恢复到中断之前的状态继续执行。
三、实验步骤与结果本次实验使用STM32F103C8T6开发板来进行外部中断的实验。
主要步骤如下:1. 搭建电路:将一个按键与STM32F103C8T6的外部中断引脚相连,将按键的另一端与地相连。
确保按键按下时,外部中断引脚与地相连,触发外部中断。
2. 配置GPIO:配置外部中断引脚与GPIO的对应关系,设置为输入模式。
3. 配置中断线:配置外部中断所对应的中断线,使其能够响应外部中断。
4. 配置中断触发方式:配置外部中断触发的方式,例如下降沿触发。
5. 编写中断服务程序:编写中断服务程序,按下按键时,LED 灯亮起;释放按键时,LED灯熄灭。
6. 开启中断:在主函数中开启总中断。
7. 通过Keil等开发工具进行编译和下载。
8. 按下按键,触发外部中断,LED灯亮起;释放按键,触发外部中断,LED灯熄灭。
四、实验总结通过本次实验,我对外部中断有了更深入的了解。
外部中断是在特定条件触发时,通过外部触发器向微控制器发送中断信号,微控制器根据中断信号进行相应的中断处理。
在实验过程中,我们需要配置外部中断的相关寄存器、设置中断触发方式、编写中断服务程序等。
MSP430单片机中断详解
MSP430 单片机中断详解
中断是MSP430 微处理器的一大特色,有效地利用中断可以简化程序和提高执行效率。
MSP430 的几乎每个外围模块都能够产生中断,为MSP430 针对事件(即外围模块产生的中断)进行的编程打下基础。
MSP430 在没有事件发生时进入低功耗模式,事件发生时,通过中断唤醒CPU,事件处理完毕后,CPU 再次进入低功耗状态。
由于CPU 的运算速度和退出低功耗的速度很快,所以在应用中,CPU 大部分时间都处于低功耗状态。
MSP430 的中断分为3 种:系统复位、不可屏蔽中断、可屏蔽中断。
(1)系统复位的中断向量为0xFFFE。
(2)不可屏蔽中断的中断向量为0xFFFC。
响应不可屏蔽中断时,硬件自动将OFIE、NMIE、ACCVIE 复位。
软件首先判断中断源并复位中断标志,接着执行用户代码。
退出中断之前需要置位OFIE、NMIE、ACCVIE,以便能够再次响应中断。
需要特别注意点:置位OFIE、NMIE、ACCVIE 后,必须立即退出中断相应程序,否则会再次触发中断,导致中断嵌套,从而导致堆栈溢出,致使程序执行结果的无法预料。
(3)可屏蔽中断的中断来源于具有中断能力的外围模块,包括看门狗定时器工作在定时器模式时溢出产生的中断。
每一个中断都可以被自己的中断控制位屏蔽,也可以由全局中断控制位屏蔽。
msp-430课程大作业实践报告
简易自行车速度计设计报告班级:二班姓名:王根胜学号: 02121187一、摘要该设计使用超低功耗MSP430单片机为控制处理器,并结合简单的硬件电路来实现自行车测速。
在自行车前轮上装有一个干簧管和一个磁铁,随着车轮每转一圈磁铁铁划过干簧管,都会吸合干簧管而接通电路,输出一个低电平脉冲信号,通过单片机计时器记录两次中断时间间隔,通过软件处理最终实现测速。
二、硬件设计自行车测速系统以MSP430单片机为处理器,通过安装在自行车前轮上的硬件系统产生周期性脉冲信号(即产生低电平信号),单片机对信号采集并计时(发生中断并记录两次中断的时间间隔),通过软件计算得到自行车的实时速度(用自行车轮周长除以周期即可的到速度),并在LCD上显示。
具体设计流程如图:图1-1 硬件设计流程图三、软件设计这个程序使用MSP430单片机的定时器来测量硬件信号的周期,给定时器设置溢出周期,通过软件计算定时器的溢出次数来测量信号的周期,进而测出自行车的行进速度。
1、主程序主程序主要包括各部件的初始化,定时器TimerA中断,I/O中断的定义等。
WDTCTL = WDTPW + WDTHOLD;TACTL=TASSEL_1+MC_2+TAIE+TACLR;//TA 清零并开始计时,ACLK,开中断LPM3;//进入低功耗模式三休眠,全部程序在中断内执行2、 数据处理子程序Period=TA_OverflowCnt*65536+TAR;//得到相邻两次中断之间相隔的时间Speed=(long)32768*Circle*36/(10*Period);//计算速度(km/h ),保留2位小数如以下程序图(图1-2)所示:3、 LCD 显示子程序void LCD_DisplayDigit(char Digit,char Location) void LCD_DisplayLetter(char Letter,char Location)void LCD_DisplayNum(unsigned int Number,charStartLocation)图1-2 数据处理子程序流程图图1-3 LCD 子程序设计流程图void LCD_DisplayDecimal(int Number,char DOT,charStartLocation)LCD_DispalyDecimal(Speed,2)如图所示设计程序:见图1-3四、测试结果对于程序的编译和调试都较为较为成功。
MSP430学习总结(含远程升级方案)
MSP430学习MSP430系列咩有自带IAP功能的特点,必须自行编写IAP程序来进行片内Flash的烧写,才能达到省级的目的。
系统构思:需要升级的二进制文件下载到相应的地址空间,然后让单片机系统自动执行IAP 升级。
MSP430F149是在片内flash中运行。
1.下载升级文件到相应的外扩flash中。
2.从片外flash中编写到片内flash中(从0x1100开始至0xffff)3.编写引导程序,讲程序拷贝到相应的RAM空间(0x0200)中,并将PC指向0x200。
用户指南:如何使用这些寄存器。
数据手册:看电气特性,引脚等等xcl文件。
该文件在安装目录的IAR Systems\Embedded Workbench 5.4 Evaluation\430\config中。
CTRL+K 快注释,屏蔽选中的代码;CTRL+SHIFT+K 取消快注释,取消屏蔽选中的代码;CTRL+SHITF+F 全局搜索,有可能是因为搜狗输入法占用了快捷键而不行!生成下载文本147与149空间对比4系列的可以直接驱动段氏的液晶,1系不可以。
硬件结构MSP:mix signal processor混合信号处理器。
MSP430F149:F表示储存器是flash,14代表ADC是12位,9代表储存容量60kDSP 或者ARM成本比较高,单片机也有自己的生存空间。
MSP430可以进行片内flash自编程。
三个时钟单元MCLK/ACK/SMCLK内部集成Hardware Multiplier硬件乘法器,运算会更快,51单片机则没有!所以做一次运算会花很多个时钟周期!四种低功耗模式!降低时钟,LPM0:active模式下,哪些模块需要打开,可以由用户确定!LPM1:MCLK(主系统时钟)关掉,CPU则停止工作,ACLK(辅助系统时钟)和SMCLK(子系统四中模式消耗的电流设置CPUOFF/SCG0/SCG1---进入不同的低功耗级别。
- 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 有中断请求。