关于nRF52832的GPIOTE功能(外部中断)

时间:2017-11-15 01:58:53

标签: nrf52

使用nRF52832 sdk控制GPIOTE功能时遇到一些麻烦, 当使用14.01版本(SDK)时,似乎GPIOTE功能无法与BLE功能一起使用,我使用下面的代码,它制作系统的挂起问题,为什么?

我想知道GPIOTE功能是否不能与BLE功能一起使用, 和另一种使用BLE功能的方法, 感谢您的支持和善意,

#define PIN_IN  BUTTON_4
//#define PIN_OUT BSP_LED_3

void in_pin_handler(nrf_drv_gpiote_pin_t pin, nrf_gpiote_polarity_t action)
{
    printf("love %d: %d\n", (int)pin, (int)action); 
//  nrf_drv_gpiote_out_toggle(PIN_OUT);
}

/**
 * @brief Function for configuring: PIN_IN pin for input, PIN_OUT pin for output,
 * and configures GPIOTE to give an interrupt on pin change.
 */

void gpio_external_int_init(void)//love_1108
{
    uint32_t  err_code;

    err_code = nrf_drv_ppi_init();
    APP_ERROR_CHECK(err_code);  
//  
    err_code = nrf_drv_gpiote_init();
    APP_ERROR_CHECK(err_code);
//
//  (void)nrf_drv_gpiote_init();    

//  nrf_drv_gpiote_out_config_t out_config = GPIOTE_CONFIG_OUT_SIMPLE(false);
//  err_code = nrf_drv_gpiote_out_init(PIN_OUT, &out_config);
//  APP_ERROR_CHECK(err_code);

    nrf_drv_gpiote_in_config_t in_config = GPIOTE_CONFIG_IN_SENSE_TOGGLE(false);
    in_config.pull = NRF_GPIO_PIN_PULLUP;
    err_code = nrf_drv_gpiote_in_init(PIN_IN, &in_config, in_pin_handler);
    APP_ERROR_CHECK(err_code);

    nrf_drv_gpiote_in_event_enable(PIN_IN, true);
}

1 个答案:

答案 0 :(得分:0)

虽然您没有提供太多详细信息,例如&#34;与BLE功能&#34;一起使用的含义,但我发现SDK示例ble_app_template存在问题。在我的情况下,原因是文件bsp_btn_ble.c要求按钮比board_custom.h定义的更多。因此函数startup_event_extract()想要检查我的硬件上不存在的BTN_ID_WAKEUP_BOND_DELETE的状态会导致断言。令人不安的是,BTN_ID_WAKEUP_BOND_DELETE和其他按钮在c文件中定义,而不是从custom_board.h派生。 因此,跟踪电路板初始化,您可能会发现类似ASSERT(button_idx < BUTTONS_NUMBER)的内容,这会导致我的情况挂起。