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
    {
          
   

    }
}
经验分享 程序员 微信小程序 职场和发展