NONOS(2.2.0)
NONOS(2.2.0)
NONOS(2.2.0)
1.直接上菜
void gpio0_intr_handler() { uint32 gpio_status = GPIO_REG_READ(GPIO_STATUS_ADDRESS);//讀取GPIO狀態寄存器,獲取中斷信息 GPIO_REG_WRITE(GPIO_STATUS_W1TC_ADDRESS, gpio_status);//清除中斷信息 if(gpio_status & (BIT(0)))//GPIO0產生的中斷 { if(!GPIO_INPUT_GET(0))//GPIO0是低電平 GPIO0確實是下降沿產生了中斷 { os_printf("GpioDown\r\n"); } } } /****************************************************************************** * FunctionName : user_init * Description : entry of user application, init user function here * Parameters : none * Returns : none *******************************************************************************/ void ICACHE_FLASH_ATTR user_init(void) { uart_init_2(BIT_RATE_115200,BIT_RATE_115200); os_printf("SDK version:%s\n", system_get_sdk_version()); os_printf("hello_ai\n"); /*配置中斷引腳**********************************************/ PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U , FUNC_GPIO0); GPIO_DIS_OUTPUT(0);//如果以前設置過GPIO為輸出,則調用此函數關閉GPIO輸出 PIN_PULLUP_EN(PERIPHS_IO_MUX_GPIO0_U);//上拉輸入 //全局關閉GPIO中斷 ETS_GPIO_INTR_DISABLE(); //設置中斷函數 ETS_GPIO_INTR_ATTACH(gpio0_intr_handler, NULL); //設置中斷觸發方式 gpio_pin_intr_state_set(0, GPIO_PIN_INTR_NEGEDGE);//下降沿觸發 ETS_GPIO_INTR_ENABLE(); }
測試
按下按鈕
RTOS(2.2.0)
RTOS(2.2.0)
RTOS(2.2.0)
1.直接上菜
#include "gpio.h"
//設置GPIO0下降沿中斷
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U , FUNC_GPIO0);//GPIO0做為普通IO使用 GPIO_DIS_OUTPUT(0);//0:GPIO0 如果以前設置過GPIO為輸出,則調用此函數關閉GPIO0輸出 PIN_PULLUP_EN(PERIPHS_IO_MUX_GPIO0_U);//GPIO0上拉輸入 _xt_isr_mask(1<<ETS_GPIO_INUM); //關閉GPIO中斷 gpio_intr_handler_register(gpio0_intr_handler, NULL);//設置中斷函數 gpio_pin_intr_state_set(0, GPIO_PIN_INTR_NEGEDGE);//0:GPIO0 GPIO_PIN_INTR_NEGEDGE:下降沿觸發 _xt_isr_unmask(1 << ETS_GPIO_INUM); //使能GPIO中斷
//GPIO0中斷回調函數
void gpio0_intr_handler() { uint32 gpio_status = GPIO_REG_READ(GPIO_STATUS_ADDRESS);//讀取GPIO狀態寄存器,獲取中斷信息 GPIO_REG_WRITE(GPIO_STATUS_W1TC_ADDRESS, gpio_status);//清除中斷信息 if(gpio_status & (BIT(0)))//GPIO0產生的中斷 { if(!GPIO_INPUT_GET(0))//GPIO0是低電平 GPIO0確實是下降沿產生了中斷 { printf("GpioDown\r\n"); } } }
如果使用的NONOS版本請查看文章最后的區別
測試
按下按鈕
擴展:配置GPIO4
//設置GPIO4下降沿中斷
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO4_U , FUNC_GPIO4);//GPIO4做為普通IO使用
GPIO_DIS_OUTPUT(4);//4:GPIO4 如果以前設置過GPI4為輸出,則調用此函數關閉GPIO4輸出
PIN_PULLUP_EN(PERIPHS_IO_MUX_GPIO4_U);//GPIO4上拉輸入
_xt_isr_mask(1<<ETS_GPIO_INUM); //關閉GPIO中斷
gpio_intr_handler_register(gpio4_intr_handler, NULL);//設置中斷函數
gpio_pin_intr_state_set(4, GPIO_PIN_INTR_NEGEDGE);//4:GPIO4 GPIO_PIN_INTR_NEGEDGE:下降沿觸發
_xt_isr_unmask(1 << ETS_GPIO_INUM); //使能GPIO中斷
//GPIO4中斷回調函數
void gpio4_intr_handler()
{
uint32 gpio_status = GPIO_REG_READ(GPIO_STATUS_ADDRESS);//讀取GPIO狀態寄存器,獲取中斷信息
GPIO_REG_WRITE(GPIO_STATUS_W1TC_ADDRESS, gpio_status);//清除中斷信息
if(gpio_status & (BIT(4)))//GPIO4產生的中斷
{ if(!GPIO_INPUT_GET(4))//GPIO4是低電平 GPIO4確實是下降沿產生了中斷 { printf("GpioDown\r\n"); } } }