930电子网

 找回密码
 立即注册
艾克姆科技推出最新产品STC32G12K128开发板
查看: 14548|回复: 4

多外部中断

[复制链接]

6

主题

13

帖子

88

积分

注册会员

Rank: 2

积分
88
发表于 2018-7-19 18:21:10 | 显示全部楼层 |阅读模式
APP_BUTTON 怎么能开启大于4个按键的配置,nRF5_SDK_12.2.0_f012efa 软件里面 开5个按键就一直重启?
回复

使用道具 举报

52

主题

339

帖子

6487

积分

版主

Rank: 7Rank: 7Rank: 7

积分
6487
发表于 2018-7-19 23:25:25 | 显示全部楼层
增加第5个按键的定义和按键数量,修改“pca10040.h”中的BUTTONS_LIST数组。
回复 支持 反对

使用道具 举报

6

主题

13

帖子

88

积分

注册会员

Rank: 2

积分
88
 楼主| 发表于 2018-7-20 10:21:36 | 显示全部楼层
#define BUTTONS_NUMBER 5

#define BUTTON_START   13
#define BUTTON_1       13
#define BUTTON_2       14
#define BUTTON_3       15
#define BUTTON_4       16
#define BUTTON_5       3

#define BUTTON_STOP    16
#define BUTTON_PULL    NRF_GPIO_PIN_PULLUP

#define BUTTONS_ACTIVE_STATE 0

#define BUTTONS_LIST { BUTTON_1, BUTTON_2, BUTTON_3, BUTTON_4,BUTTON_5}

#define BSP_BUTTON_0   BUTTON_1
#define BSP_BUTTON_1   BUTTON_2
#define BSP_BUTTON_2   BUTTON_3
#define BSP_BUTTON_3   BUTTON_4
#define BSP_BUTTON_4   BUTTON_5

#define RX_PIN_NUMBER  8
#define TX_PIN_NUMBER  6
#define CTS_PIN_NUMBER 7
#define RTS_PIN_NUMBER 5

在函数里面分配第5个button 就申请不了channel
ret_code_t nrf_drv_gpiote_in_init(nrf_drv_gpiote_pin_t               pin,
                                  nrf_drv_gpiote_in_config_t const * p_config,
                                  nrf_drv_gpiote_evt_handler_t       evt_handler)
{
    ASSERT(pin < NUMBER_OF_PINS);
    ret_code_t err_code = NRF_SUCCESS;

    /* Only one GPIOTE channel can be assigned to one physical pin. */
    if (pin_in_use_by_gpiote(pin))
    {
        err_code = NRF_ERROR_INVALID_STATE;
    }
    else
    {
        int8_t channel = channel_port_alloc(pin, evt_handler, p_config->hi_accuracy);
        if (channel != NO_CHANNELS)
        {
            if (p_config->is_watcher)
            {
                nrf_gpio_cfg_watcher(pin);
            }
            else
            {
                nrf_gpio_cfg_input(pin, p_config->pull);
            }

            if (p_config->hi_accuracy)
            {
                nrf_gpiote_event_configure(channel, pin, p_config->sense);
            }
            else
            {
                m_cb.port_handlers_pins[channel -
                                        GPIOTE_CH_NUM] |= (p_config->sense) << SENSE_FIELD_POS;
            }
        }
        else
        {
            err_code = NRF_ERROR_NO_MEM;
        }
    }

    NRF_LOG_INFO("Function: %s, error code: %s.\r\n", (uint32_t)__func__,
                 (uint32_t)ERR_TO_STR(err_code));
    return err_code;
}
回复 支持 反对

使用道具 举报

52

主题

339

帖子

6487

积分

版主

Rank: 7Rank: 7Rank: 7

积分
6487
发表于 2018-7-20 21:41:03 | 显示全部楼层
陈小平 发表于 2018-7-20 10:21
#define BUTTONS_NUMBER 5

#define BUTTON_START   13

检查一下“sdk_config.h”文件中的宏定义GPIOTE_CONFIG_NUM_OF_LOW_POWER_EVENTS,使用5个按键的话,需要修改为5,否则编译无法通过,会返回错误代码:NRF_ERROR_NO_MEM。
回复 支持 反对

使用道具 举报

6

主题

13

帖子

88

积分

注册会员

Rank: 2

积分
88
 楼主| 发表于 2018-7-23 14:58:10 | 显示全部楼层
谢谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|官方淘宝店|930电子网 ( 皖ICP备16000695号-2 )

GMT+8, 2024-5-2 20:01 , Processed in 0.068102 second(s), 21 queries .

快速回复 返回顶部 返回列表