zoukankan      html  css  js  c++  java
  • 单片机TM4C123学习(二):中断与按键控制

    1.按键初始化

    按键K1——PD7

    按键K2——PF4

    按键K3——PA3

    按键K4——PA2

        //
        // key1 init
        // SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);已经在LED init写过了,不然也是要写的
    GPIOPinTypeGPIOInput(GPIO_PORTD_BASE, GPIO_PIN_7);

    也就是说,按键初始化只需要(外部设备使能和)设置管脚类型为输入两个步骤。

    2.中断使能

    三个步骤:设置端口中断类型,使能端口中断,为端口注册一个中断处理句柄

        //
        // interrupt enable--key1
        //
        GPIOIntTypeSet(GPIO_PORTD_BASE,GPIO_PIN_7,GPIO_FALLING_EDGE);    //设置PD7中断类型为下降沿触发
        GPIOIntEnable(GPIO_PORTD_BASE,GPIO_PIN_7);        //使能PF4中断
        GPIOIntRegister(GPIO_PORTD_BASE, Key1IntHandler);  //为PF4注册一个中断处理句柄        
    void Key1IntHandler()
      {
        GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_6,0<<6);//红灯亮
        GPIOIntClear(GPIO_PORTD_BASE,GPIO_INT_PIN_7);//清除key1
      }

    特别注意的是,中断处理句柄中最后要清除按键状态,表示这个中断已经处理完毕

    void Key34IntHandler()
      {
        uint32_t IntStatus_raw;
        IntStatus_raw = GPIOIntStatus( GPIO_PORTA_BASE, 0); //读GPIORIS寄存器
        if(IntStatus_raw & GPIO_INT_PIN_3)  // PA3引脚有中断事件
        {
            GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_0,0<<0);//蓝灯亮
            GPIOIntClear(GPIO_PORTA_BASE,GPIO_INT_PIN_3);//清除key3
        }
        if(IntStatus_raw & GPIO_INT_PIN_2)  // PA2引脚有中断事件
        {
            GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_6,1<<6);//灭灯
                GPIOPinWrite(GPIO_PORTA_BASE,GPIO_PIN_4,1<<4);//灭灯
                GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_0,1<<0);//灭灯
            GPIOIntClear(GPIO_PORTA_BASE,GPIO_INT_PIN_2);//清除key4
        }
      }

    一个模块需要共用一个中断入口,所以按键3和4需要合在一起写

  • 相关阅读:
    python学习笔记:遍历目录
    c++笔记:友元函数
    VMware Workstation 9: This virtual machine's policies are too old to be run by this version of VMware
    inet_ntoa内存问题
    python学习笔记:sqlite3查询
    python学习笔记:利用asyncore的端口映射(端口转发)
    编写谷歌浏览器的油猴脚本
    window编译7z
    通过配置nginx的header路由到不同环境的服务器
    用U盘给物理机安装ubuntu20.04
  • 原文地址:https://www.cnblogs.com/pursuit1996/p/4912520.html
Copyright © 2011-2022 走看看