ESP8266 RTOS 筆記(三)-GPIO(3)_input使用

這篇直接講解怎麼設定esp8266 gpio input 中斷如何使用

實例:


void gpio_intr_handler(void)
{
    _xt_isr_mask(1<<ETS_GPIO_INUM);    //disable interrupt
    os_delay_us(20*1000);//delay 20ms
    if(!GPIO_INPUT_GET(GPIO_ID_PIN(12)))
    {
        printf("\r\n receive gpio12 press!\n");
    }
    if(!GPIO_INPUT_GET(GPIO_ID_PIN(13)))
    {
      printf("\r\n receive gpio13 press!\n");
    }
    if(!GPIO_INPUT_GET(GPIO_ID_PIN(2)))
    {
      printf("\r\n receive gpio2 press!\n");
    }
    if(!GPIO_INPUT_GET(GPIO_ID_PIN(14)))
    {
      printf("\r\n receive gpio14 press!\n");
    }

    GPIO_REG_WRITE(             GPIO_STATUS_W1TC_ADDRESS,GPIO_Pin_2|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14 ); //clear interrupt mask
    _xt_isr_unmask(1 << ETS_GPIO_INUM); //Enable the GPIO interrupt

}




void buttonInit(void)
{
      GPIO_ConfigTypeDef gpio_in_cfg;
      gpio_in_cfg.GPIO_IntrType = GPIO_PIN_INTR_NEGEDGE;
      gpio_in_cfg.GPIO_Mode = GPIO_Mode_Input;
      gpio_in_cfg.GPIO_Pullup = GPIO_PullUp_EN;
      gpio_in_cfg.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_2|GPIO_Pin_14;

      gpio_config(&gpio_in_cfg);    //Initialization function

      GPIO_REG_WRITE(GPIO_STATUS_W1TC_ADDRESS, GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_2|GPIO_Pin_14);//Forbidden ouput register

      // Register the interrupt callback function
      gpio_intr_handler_register(gpio_intr_handler, NULL);
      _xt_isr_unmask(1 << ETS_GPIO_INUM);    //Enable the GPIO interrupt

//    _xt_isr_mask(1 << ETS_GPIO_INUM);    //Disable the GPIO interrupt
}


使用上也是非常的簡便!


留言

這個網誌中的熱門文章

FreeRTOS學習筆記 (二)-任務創建和刪除(xTaskCreate及vTaskDelete)

FreeRTOS學習筆記 (三)-時間管理vTaskDelay()及vTaskDelayUntil()

C語言筆記-文本處理(1) 善用 asprintf取代sprintf