MSP430f5529外部中断
运行原理
IO口等待电平响应,未响应时CPU去做其他工作或者保持低功耗的休眠状态,直到获得响应时启动中断服务函数,处理中断内容。
MSP430中普通的IO口中断有P1和P2两组共16个,其中断优先顺序为从Px.0到Px.7中断优先级逐级递减
寄存器介绍
中断配置
首先要进行总中断使能(GIE),此步需要对状态寄存器SR进行配置
操作:_BIS_SR(GIE);
中断使能寄存器PxIE(Interrupt Enable Register)
此寄存器用于使能中断发生引脚
高电平开启
低电平关闭
中断标志寄存器PxIFG(Interrupt Flag Register)
此寄存器用于软件清除中断标志位,挂起中断。
低电平不挂起中断
高电平挂起中断
中断边沿选择寄存器PxIES(Interrupt Edge Select Tegister)
此寄存器用于选择中断检测边沿,即选择跳变方向。
高电平为检测引脚发生高电平跳变低电平
低电平为检测引脚发生低电平跳变高电平
中断发生检测
中断向量寄存器
此寄存器为只读状态
最高优先级使能中断在P1IV寄存器中产生一个序号,这个数字会被程序计数器识别或者加入其中,然后自动的执行合适的中断服务程序。关闭P1口中断不会影响P1IV寄存器中的值。P2口具有相同的功能。PxIV寄存器只能字访问。
中断服务函数
先贡上函数格式
#pragma vector=PORT1_VECTOR
__interrupt void Port_1(void)
{
...
//用户自定义中断代码
...
}
编译器指令pragma
pragma用于连接中断向量与函数,相当于51 intterrput x和32的固定中断服务函数名称,指明发生中断所应执行的函数
=后面的内容根据给定的中断向量填写,函数名随意,interrupt前面是双横杠"_ _"
示例代码
#include "msp430.h"
int main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
P1DIR = BIT0;
P1REN = BIT0;
P1OUT = BIT0;
P1OUT |= BIT1;
P1REN |= BIT1;
P1IE |= BIT1;
P1IES |= BIT1;
P1IFG &= ~BIT1;
_BIS_SR(GIE);
while(1);
}
#pragma vector=PORT1_VECTOR
__interrupt void PORT1(void)
{
P1OUT ^= BIT0;
P1IFG &= ~BIT1;
}