SDK:esp-idf v4.4、esp-adf v2.4
逻辑需求:
1. GPIO_NUM_39作为GPIO输入中断,双边沿触发;GPIO_NUM_39,外部已下拉;当触发中断,则改变GPIO_NUM_32输出状态。
Code: Select all
void trigger_demo(void *arg) {
static uint8_t demo_state = 0;
demo_state = ~demo_state;
gpio_set_level(GPIO_NUM_32, demo_state);
}
void board_pins_init(void) {
gpio_isr_handle_t handle;
gpio_config_t io_conf;
memset(&io_conf, 0, sizeof(io_conf));
io_conf.mode = GPIO_MODE_INPUT;
io_conf.pin_bit_mask = BIT64(GPIO_NUM_39);
io_conf.pull_down_en = 0;
io_conf.pull_up_en = 1;
io_conf.intr_type = GPIO_INTR_ANYEDGE;
gpio_config(&io_conf);
gpio_install_isr_service(0);
gpio_isr_handler_add(ALARM_INPUT_GPIO, trigger_demo, NULL);
Code: Select all
int app_bt_init(audio_board_handle_t board_handle)
{
esp_err_t err;
if(is_inited) {
ESP_LOGW(TAG, "app bt already had been initialized!");
return ESP_OK;
}
err = esp_bt_controller_mem_release(ESP_BT_MODE_BLE);
if(err != ESP_OK) {
ESP_LOGE(TAG, "bt controller mem release error:%d", err);
goto init_err;
}
esp_bt_controller_config_t bt_cfg = BT_CONTROLLER_INIT_CONFIG_DEFAULT();
err = esp_bt_controller_init(&bt_cfg);
if(err != ESP_OK) {
ESP_LOGE(TAG, "bt controller init error: %d", err);
goto init_err;
}
err = esp_bt_controller_enable(ESP_BT_MODE_BTDM);
if(err != ESP_OK) {
ESP_LOGE(TAG, "bt controller enable error: %d", err);
goto init_err;
}
err = esp_bluedroid_init();
if(err != ESP_OK) {
ESP_LOGE(TAG, "bluedroid init error: %d", err);
goto init_err;
}
err = esp_bluedroid_enable();
if(err != ESP_OK) {
ESP_LOGE(TAG, "bluedroid enable error: %d", err);
goto init_err;
}
/** 设置蓝牙可被连接,且可被发现 */
esp_bt_gap_set_scan_mode(ESP_BT_CONNECTABLE, ESP_BT_GENERAL_DISCOVERABLE);
}
在启动蓝牙的情况下,存在以下问题:
1. 当GPIO_NUM_39输入高电平,将会每1秒进入一次中断;当停止高电平输入,不会出现每1秒进入中断这种现象。
2. 当屏蔽上述esp_bt_gap_set_scan_mode(ESP_BT_CONNECTABLE, ESP_BT_GENERAL_DISCOVERABLE);,则GPIO_NUM_39输入高,只触发一次中断。断开高电平,也是触发一次中断。GPIO双边沿中断逻辑正常。
请教下,设置蓝牙可被连接且发现,为什么会影响到GPIO中断?谢谢!