msp430中断系统

来源:本站
导读:目前正在解读《msp430中断系统》的相关信息,《msp430中断系统》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《msp430中断系统》的详细说明。
简介:MSP430的中断分为3种:系统复位、非屏蔽中断和可屏蔽中断。系统复位指向中断向量表(表3-11)的最高地址0xFFFE。非屏蔽中断和可屏蔽中断根据能否被SR寄存器中的全局中断使能位GIE禁用来区分,非屏蔽中断不受GIE的控制,具备独立的中断使能;可屏蔽中断除了受本身的中断使能控制,还接受GIE控制。

MSP430的中断分为3种:系统复位、非屏蔽中断和可屏蔽中断。系统复位指向中断向量表(表3-11)的最高地址0xFFFE。非屏蔽中断和可屏蔽中断根据能否被SR寄存器中的全局中断使能位GIE禁用来区分,非屏蔽中断不受GIE的控制,具备独立的中断使能;可屏蔽中断除了受本身的中断使能控制,还接受GIE控制。

在MSP430中非屏蔽中断主要有3个,分别是来自MSP430外部管脚NMI的触发、FLASH非法访问以及振荡器错误。非屏蔽中断都指向中断向量表中的0xFFFC地址。

MSP430具备大量的可屏蔽中断,定时器、ADC、DMA、UART、WDT、I/O、比较器等都具备中断功能。不同的可屏蔽中断优先级可根据中断向量表决定,G2系列的MSP430中断向量表如表3-11所示。可屏蔽中断的中断向量表从0xFFFA地址开始向低地址扩展,地址越高的中断向量表所对应的中断优先级越高。

每个中断向量在中断向量表里面占据一个2Byte空间的表项,这个2Byte的空间用来存储对应中断服务函数的首地址,CPU根据中断向量表里的地址跳转到中断服务函数。仔细观察中断向量表可以看到,一些中断向量对应于多个中断源。例如,地址为0xFFF8的Timer1_A3中断,当TA1CCR1中断标志位CCIFG置位或者TAIFG置位都会跳转到该向量。又如具备中断功能的P1和P2端口,端口中的任意一个管脚发生中断都会跳转到对应的中断向量。这种中断就叫做多源中断。对于多源中断,中断源中任意一个中断发生都会跳转到公用的中断向量表项,这个时候需要通过中断标志位区别具体的中断源。有了这些中断向量表的基础知识,下面介绍中断的处理过程,包括中断的接收和退出过程。

表3-11MSP430G2553中断向量表

中断源中断标志系统中断字地址优先级

中断源中断标志系统中断字地址优先级

加电

外部复位

安全装置定时器+

违反闪存密钥范围之外PCPORIFG

RSTIFG

WDTIFG

PCKEYV复位0FFFEh 31最高

NMI

振荡器故障

闪存内存访问冲突NMIIFG

OFIFG

ACCVIFG(不)可屏蔽

(不)可屏蔽(不)可屏蔽0FFFCh 30

Timer1_A3 TA1CCR0 CCIFG可屏蔽0FFFAh29

Timer1_A3TA1CCR2 TA1CCR1 CCIFG

TAIFG可屏蔽0FFF8h 28

Comparator_A+CAIFG可屏蔽0FFF6h 27

安全装置定时器+ WDTIFG可屏蔽0FFF4h 26

Timer0_A3 TA0CCR0 CCIFG可屏蔽0FFF2h25

Timer0_A3TA0CCR2 TA0CCR1 CCIFG

TAIFG可屏蔽0FFF0h24

USCI_A0/USCI_B0 接收

USCI_B0 I2C 状态UCA0RXIFG

UCB0RXIFG可屏蔽0FFEEh23

USCI_A0/USCI_B0 发送

USCI_B0 I2C 收/发UCA0TXIFG

UCB0TXIFG可屏蔽0FFECh 22

ADC10 ADC10IFG可屏蔽0FFEAh 21

I/O 端口P2P2IFG.0至P2IFG.7可屏蔽0FFE6h 19

I/O 端口P1P1IFG.0至P1IFG.7可屏蔽0FFE4h18

未使用——0FFE2h17

未使用——0FFE0h16

安全密钥(BSLSKEY)——0FFDEh15

未使用——0FFDCh~0FFC0h14~0

微控制器使用过程中一些突发的程序跑飞问题,很多时候都是由于没有正确地处理中断造成的。中断发生的先决条件是对于中断使能位使能,非屏蔽中断要求其独立的中断使能开启;可屏蔽中断要求全局中断使能和自身中断使能同时开启。

当中断请求到达,CPU从接受中断请求到开始执行中断服务函数的第一条指令需要5~6个CPU周期。前面介绍过MSP430有两种CPU,分别是CPU和CPUX。其中CPU处理过程耗费6个CPU周期,而CPUX处理过程耗费5个CPU周期。中断请求接收后,会按照以下顺序处理:

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指针出栈,接着执行中断前的代码。

在使用中断时,如果某个中断开启,则一定要写中断服务函数,即便中断服务函数为空操作。这个过程是对中断向量赋值,避免中断发生后,程序跑飞。

提醒:《msp430中断系统》最后刷新时间 2024-03-14 01:14:14,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《msp430中断系统》该内容的真实性请自行鉴别。