1中断的分类
1.1 什么是中断
在我们学习中断的知识之前,我们要做的第一件事就是,知道中断是什么东西,他是来做什么的,也就是什么是中断。
中断是暂停CPU正在运行的程序,转去执行相应的中断服务程序,完毕后返回被中断的程序继续运行的现象和技术。
正如这幅CPU执行流程图,在无中断时,是顺序执行,而在有中断时,会在发生中断时,转去执行中断服务程序,当执行完中断服务程序的时候再返回现场继续执行原程序。
1.2中断优先级
我们现在看到的这张图是MSP430单片机的中断优先级顺序图。
中断优先级由引起中断的模块的排列顺序来确定,越靠近CPU/NMIRS,中断优先级越高。
1.3 中断分类(中断源)
中断首先需要有中断源发出中断请求,并征得系统允许(屏蔽、优先权)后才会发生。转去执行中断服务程序前需保护中断现场,执行完中断服务程序后应恢复中断现场。
MSP430单片机的中断分为三类,分别为:系统复位、不可屏蔽中断和可屏蔽中断。
1.4中断控制位
MSP430总中断的控制位是状态寄存器内的GIE位(该位在SR寄存器内),该位在复位状态下,所有的可屏蔽中断都不会发生响应。可屏蔽中断又分为单中断源和多中断源的。单中断源的一般响应了中断服务程序中断标志位就自动清零,而多中断源的则要求查询某个寄存器后中断标志位才会清零。
由于大多数人接触的第一款单片机通常是51,51单片机CPU在响应低优先级的中断程序过程中若有更高优先级的中断发生,单片机就会去执行高优先级,这个过程已经产生了中断嵌套。
而430单片机则不同,如果在响应低优先级中断服务程序的时候,即使来了更高优先级的中断服务请求,430也会置之不理,直至低优先级中断服务程序执行完毕,才会去响应高优先级中断。这是因为430在响应中断程序的时候,总中断GIE是复位状态的,如果要产生类似51的中断嵌套,只能在中断函数内再次置位GIE位。
2 非可屏蔽中断
2.1 非可屏蔽中断源
非可屏蔽中断指的是,不能被SR寄存器中的全局中断使能位GIE禁用,具备独立的中断使能。
MSP430的非可屏蔽中断源主要有三个:
※外部管脚NMI的触发;
※Flash非法访问;
※振荡器错误。
2.2 外部管脚NMI的触发
第一种中断源为外部关键NMI的触发,也就是上电后,RST/NMI引脚被配置为复位模式。RST/NMI引脚功能选择位在看门狗定时器控制寄存器WDTCTL中。如果RST/NMI引脚被设置为复位功能,当RST/NMI引脚为低电平时CPU被停止。当输入变成高电平后,CPU从0FFFEh开始执行程序。如果RST/NMI引脚被设置为NMI功能,并且NMIE被置位,RST/NMI引脚上的上升沿、下降沿将触发中断,RST/NMI引脚标志位NMIFG也被置位。
2.3其他非可屏蔽中断
flash非法访问,也就是flash访问错误。当flash访问出错时,ACCVIFG位被置位。当ACCVIE位被置位时,Flash访问出产生一个NMI事件。
振荡器错误,也就是发生晶振失效。当OFIE位被置位时,晶振失效产生一个NMI事件。
2.4 非可屏蔽中断源框图
这是一个MSP430内部的一个非可屏蔽的框图,大家可以看一下,这里一共有三个中断源,一个是这里,它是MSP430的一个引脚,它可以作为复位引脚,也可作为一个非可屏蔽的中断输入引脚,在这个引脚上产生一个非可屏蔽中断的信号时,它就可以向系统发送一个非可屏蔽中断的请求。还有一个中断源来自于这里,这是对MSP430内部的Flash进行操作地方时候,是需要一些特定的步骤和特定的密码,如果这个时候出错的话,也会导致非可屏蔽中断。还有就是振荡器,如果在使用振荡器的时候,由于某些原因,振荡器停振了,那么这个时候也会导致系统产生一个非可屏蔽中断,以方便用户及时的处理这种情况。
3.5非可屏蔽中断处理过程
非可屏蔽中断是一种多源中断,其实它有一个中断向量,但是这个中断向量对应多个中断标志,用户需要进入这个中断向量之后,先判断是哪种原因导致的这个中断,我们前面提过,有三种情况可以导致非可屏蔽中断,所以用户在进入这个非可屏蔽中断之后,首先就是需要判断这三个标志,确定是哪一种情况,根据相应的情况,由用户手动清除这个中断标志,清除中断标志以后,然后再进行一些相应的处理,处理完了之后,就可以退出这个非可屏蔽中断了。