MSP432笔记——按键中断
GPIO按键外部中断
所用板卡 MSP432P401R LaunchPad 按键电路图 按键连接GPIO P1.1 P1.4 按键按下时,对应IO变化为低电平,按键必须使用上拉电阻 程序编写 使用库函数 driverLib
main中需要的步骤
{
-
设置IO输入/输出方向,带上拉电阻的输入模式 清除中断标识位,在配置时就需要清除标志位 设置中断触发边沿,上升沿/下降沿 使能GPIO中断 使能总中断(3个中断函数)
} main源码
int main(void)
{
/* Stop Watchdog */
MAP_WDT_A_holdTimer();
//GPIO Interrupt test
GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P1,GPIO_PIN1); //P1.1 button1
GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P1,GPIO_PIN4); //P1.4 button2
GPIO_clearInterruptFlag(GPIO_PORT_P1,GPIO_PIN1); //清空中断标识位
GPIO_clearInterruptFlag(GPIO_PORT_P1,GPIO_PIN4); //清空中断标识位
GPIO_interruptEdgeSelect(GPIO_PORT_P1,GPIO_PIN1,GPIO_HIGH_TO_LOW_TRANSITION); //edge
GPIO_interruptEdgeSelect(GPIO_PORT_P1,GPIO_PIN4,GPIO_HIGH_TO_LOW_TRANSITION); //edge
GPIO_enableInterrupt(GPIO_PORT_P1,GPIO_PIN1);
GPIO_enableInterrupt(GPIO_PORT_P1,GPIO_PIN4);
//使能中断
Interrupt_enableInterrupt(INT_PORT1);
Interrupt_enableSleepOnIsrExit();
Interrupt_enableMaster();
while(1)
{
}
}
中断服务函数,P1接口有中断服务函数,需要自己编写其中内容, 具体函数名位于项目路径下的/ccs/startup_msp432p401r_ccs.c文件中
P1.0~P1.15所有位产生中断都会进入此中断函数,在中断服务函数中再去分辨是哪一位触发了中断 使用&按位与,中断状态status & 相应的位地址, 因为产生中断后,在相应位的中断上是1,与这一位相与结果是1,中断状态与非产生原因的位相与,结果为0
中断服务函数PORT1_IRQHandler,需要的步骤
{
-
获取中断状态 status 清除中断标志位 根据status判断是哪一位发生中断 用户自定的程序
}
void PORT1_IRQHandler(void)
{
//中断服务
uint32_t status = GPIO_getEnabledInterruptStatus(GPIO_PORT_P1); //获取中断状态
GPIO_clearInterruptFlag(GPIO_PORT_P1,status); //清除标志位
if(status & GPIO_PIN1)
{
GPIO_setOutputLowOnPin(GPIO_PORT_P1,GPIO_PIN0); //off
}
else if( status & GPIO_PIN4 )
{
GPIO_setOutputHighOnPin(GPIO_PORT_P1,GPIO_PIN0); //on
}
else
{
}
}
