6621Px GPIO Api使用注意事项

yangzh · 279次点击 · 9个月前

6621Px GPIO 相关API 规则概括如下

(1) GPIO API中,只有 pinmux_config() 这个函数,可以针对所有管脚都适用。参数直接用IO编号, 但只能一个个设置。不能多个IO一起配置。

(2) IO编号低等于31的,除pinmux_config()函数外,GPIO相关API 均使用 不带_EX 字符的接口。 参数中都使用BIT_MASK,且不需要减32。

(3) IO号高于32(包括),除pinmux_config()函数外,GPIO操作函数,使用的API 均有 _ex 后缀,参数均使用BIT_MASK按位设置。  ,, 且BIT MASK时需要减32,如(idx-32) 

带Ex的接口函数如下

image.png  image.png 

我们6621Px的IO口会超过31口的编号,这种情况默认的simple中IO口配置会有一些修改,现在举例如下:

1)

static uint32_t pin_wakeup_mask = (BIT_MASK(PIN_WAKEUP_0-32) | BIT_MASK(PIN_WAKEUP_1-32));


static void pinmux_init(void)
{
    // KEY
    #if 1
    pinmux_config(PIN_WAKEUP_0,  PINMUX_GPIO_MODE_CFG);//32-36
    pinmux_config(PIN_WAKEUP_1,  PINMUX_GPIO_MODE_CFG);//32-36
    pmu_pin_mode_set_ex(pin_wakeup_mask, PMU_PIN_MODE_PU);

    #endif
    // UART0
    pinmux_config(PIN_UART0_TX, PINMUX_UART0_SDA_O_CFG);//32-36
    // UART1
    pinmux_config(PIN_UART1_TX,  PINMUX_UART1_SDA_O_CFG);//32-36
    pinmux_config(PIN_UART1_RX,  PINMUX_UART1_SDA_I_CFG);//32-36
    pmu_pin_mode_set_ex(BITMASK(PIN_UART1_TX-32), PMU_PIN_MODE_PP);//32-36
    pmu_pin_mode_set_ex(BITMASK(PIN_UART1_TX-32), PMU_PIN_MODE_PP);//32-36
    pmu_pin_mode_set_ex(BITMASK(PIN_UART1_RX-32), PMU_PIN_MODE_PU);//32-36

    pinmux_config(PIN_LED_0,  PINMUX_GPIO_MODE_CFG);//32-36
    pmu_pin_mode_set_ex(BITMASK(PIN_LED_0-32), PMU_PIN_MODE_PP);//32-36

}


2)

static void peripheral_init(void)
{
    // Init GPIO
    gpio_open();

    // Wakeup Pin
    gpio_set_direction_ex(pin_wakeup_mask, GPIO_INPUT);//32-36
    gpio_set_interrupt_ex(pin_wakeup_mask, GPIO_BOTH_EDGE);//32-36
    gpio_set_interrupt_callback_ex(gpio_handler);//32-36
    // wakeup
    pmu_wakeup_pin_set_ex(pin_wakeup_mask, PMU_PIN_WAKEUP_LOW_LEVEL);//32-36
    pmu_wakeup_pin_register_callback_ex(wakeup_gpio_handler, wakeup_gpio_handler);//32-36


#if 1  
    pmu_pin_mode_set_ex(BIT_MASK(PIN_FACTORY_RESET - 32), PMU_PIN_MODE_PU);//32-36
    gpio_set_direction_ex(BIT_MASK(PIN_FACTORY_RESET-32), GPIO_INPUT);//32-36
    gpio_set_interrupt_ex(BIT_MASK(PIN_FACTORY_RESET-32), GPIO_FALLING_EDGE);//32-36
    pmu_pin_mode_set_ex(BIT_MASK(PIN_FACTORY_RESET_1 - 32), PMU_PIN_MODE_PU);//32-36
    gpio_set_direction_ex(BIT_MASK(PIN_FACTORY_RESET_1-32), GPIO_INPUT);//32-36
    gpio_set_interrupt_ex(BIT_MASK(PIN_FACTORY_RESET_1-32), GPIO_FALLING_EDGE);//32-36
    gpio_set_interrupt_callback_ex(gpio_ex_handler);    //32-36
   
    pmu_wakeup_pin_set_ex(BIT_MASK(PIN_FACTORY_RESET - 32)|BIT_MASK(PIN_FACTORY_RESET_1 - 32), PMU_PIN_WAKEUP_LOW_LEVEL);//32-36
    pmu_wakeup_pin_register_callback_ex(wakeup_gpio_ex_handler, wakeup_gpio_ex_handler);//32-36

#endif
    // Init UART
    uart_open(HS_UART0, DEBUG_UART_BAUDRATE, UART_FLOW_CTRL_DISABLED, NULL);
    uart_open(HS_UART1, HCI_UART_BAUDRATE, UART_FLOW_CTRL_DISABLED, app_uart1_rx_callback);

    gpio_write_ex(BITMASK(PIN_LED_0-32), GPIO_HIGH);//32-36
    gpio_set_direction_ex(BITMASK(PIN_LED_0-32), GPIO_OUTPUT);//32-36
}


被收藏 0  ∙  0 赞  
加入收藏
点赞
1 回复  
善言善语 (您需要 登录 后才能回复 没有账号 ?)

请先登录网站