中断是用以提高计算机工作效率、增强计算机功能的一项重要技术。简单来说就是CPU停止执行正在执行的任务,去处理突发事件,然后再回来继续执行当前任务。中断在单片机中可以起到定时,外部信号检测等作用。
预备知识
把引起中断的原因或者能够发出中断请求的信号源统称为中断源。中断首先需要由中断源发出中断请求,并征得系统允许后才会发生。在转去执行中断服务程序前,程序需保护中断现场;在执行完中断服务程序后,应恢复中断现场。
中断源一般分成两类:外部硬件中断源和内部软件中断源。外部硬件中断源包括可屏蔽中断和不可屏蔽中断。内部软件中断源产生于单片机内部,主要有以下3种:①由CPU运行结果产生;②执行中断指令INT3;③使用DEBUG中单步或断点设置引起。
多个中断同时等待时优先响应高优先级的中断。
不可屏蔽中断通常是系统产生的,不受通用中断使能位(GIE)位影响,如时钟中断。可屏蔽的中断由外围模块产生,每个中断源都有单独的中断位控制,同时也受全局状态寄存器的GIE位控制。
当发生中断后,如果外围模块独立的使能位打开,并且全局总中断位(GIE)允许,将执行中断服务程序。
从接收中断请求到执行中断服务程序的第一条指令需要延迟六个周期,在此期间完成了以下操作:
完成当前所有的指令
指向下一条指令的PC被压入堆栈
SR压入堆栈
选择最高优先级的中断
复位单源中断标志,多源标志需要后手动清除
清除除SCG0之外的所有SR,终止低功耗模式。清除GIE位,不再响应其他中断
加载中断向量中的内容到PC中,开始执行中断服务程序。
烣复中断需要5个周期。SR将会从从堆栈中拉出,以前的各种GIE、CPUOFF等设置参数将会烣复,但在中断服务程序里边配置的将会被忽略。
从上边进栈过程可能看出,MSP430单片机在进入中断服务程序后复位了SR寄存器,会自动清除GIE位,也就是说此时不允许响应其他中断,如果需要实现中断嵌套,则需在中数服务函数里使能GIE位即可。
注意:避免在EINT全局中断使能和DINT紧临着使用,可能会导致CPU运行异常
端口中断寄存器
MSP430单片机的P1和P2端口具有中断功能(有些系列可能其他端口也具有中断功能),包含了PxIFG、PxIE、PxIEX等寄存器。
PxIFG表示对应位的IO的中断标志,在中断允许位PxIE置位并且总中断位GIE允许的情况下,输入口出现触发信号后会将PxIFG置位.当进入中断服务程序,访问PxIV寄存器后,最高优先级的PxIFG会自动复位.修改IO端口的其他寄存器可能会导致PxIFG位改变.
PxIES定义了触发边沿:
PxIES 触发方式
0 上升沿触发
1 下降沿触发
当对PxIES写操作时,可能会使PxIFG置位:
PxIES PxIN PxIFG
0–>1 0 set
0–>1 1 unchanged
1–>0 0 unchanged
1–>0 1 set
下边是一个示例,在P2.0端口出现边沿信号时会中断正常执行的程序,进入中断服务程序,闪烁一次LED:
P2IE |= BIT0; //P2.0中断
P2DIR &= ~BIT0;//P2.0 输入
P2REN |= BIT0;//使能上下拉电阻
P2OUT |= BIT0;//选择使用上拉电阻
P2IES |= 1; //下降沿触发
#pragma vector=PORT2_VECTOR
__interrupt void p2Interrupt()
{
P2IES ^= BIT0; //翻转边沿方向
blinkLED();//闪烁LED
P2IFG = 0; //清除中断标志
}
使能对应的中断允许位后,一定要指定中断向量的入口函数地址,否则系统会找不到中断服务函数。
输入端口在使用时不要悬空,不然会造成误触发,在接入外部按键等输入信号时应设计上下拉电阻,也可以使用内部的上下拉电阻,确保有一个非零即一的稳定电平.
PxREN定义了是否引入内部上下拉电阻。默认值PxREN.y=0时不接入内部电阻。
当配置PxREN.y=1时内部电阻被接入电路。电阻一端固定接在了IO输入端,至于另一端是接在VCC还是GND则由PxOUT.y决定。
当PxIN.y=0,PxREN.y=1时:
PxOUT 内部电阻
1 上拉输入
0 下拉输入
注意:
外部如果连接有机械类的传感器(如机械按键,光电检测)时,在触发时可以出现很多边沿信号,需要用一些手段进行滤波消抖.
上一篇:MSP430 一种低功耗设计
下一篇:MSP430教程6:MSP430寄存器中文注释
推荐阅读最新更新时间:2024-11-06 05:13
设计资源 培训 开发板 精华推荐
- 使用rejustor和精密仪表放大器支持高增益应用
- NUCLEO-F746ZG,STM32 Nucleo-144 开发板,带 STM32F746ZGT6 MCU,支持 Arduino、ST Zio 和 Morpho
- 使用 LTC3637EDHC 4V 至 64V 输入至 -12V 输出正负稳压器的典型应用
- NCP1012 的典型应用 从通用电源提供 7W 功率的典型转换器
- KSZ8081RNB-EVAL,KSZ8081RNB 10Base-T/100Base-TX 物理层收发器的评估板
- LT6656BCS6-5、5V 微控制器电压基准和稳压器的典型应用
- NCL30105GEVB:350 mA 降压 LED 驱动器评估板
- DC213A,具有 LTC1406 低功耗、8 位、20Msps、采样 A/D 转换器的演示板
- 使用 Analog Devices 的 LTC2862ACS8-1 的参考设计
- 便携mini音箱