GPIO

概述

通用型之输入输出(General-purpose input/output,通常称为GPIO),GPIO管理功能提供GPIO控制寄存器,实现软件对 GPIO 属性的配置,使用户能够方便地操作 GPIO。每个GPIO可以配置为输入、输出和可选功能三种模式。在每个模式下(除模拟可选功能),提供设置上拉,下拉,浮空三种端口状态,此外GPIO还提供中断功能,可以配置为上升沿触发,下降沿触发或者高电平/低电平触发。

注解

gpio更多资料请参考 BL602参考手册的3.2.5 GPIO概述

应用实例

GPIO实例: customer_app/peripheral/demo_gpio

API参考

Header File

  • components/platform/hosal/include/hosal_gpio.h

Functions

int hosal_gpio_init(hosal_gpio_dev_t *gpio)

Initialises a GPIO pin.

Note
Prepares a GPIO pin for use.
Return
  • 0 on success
  • EIO if an error occurred with any step
Parameters
  • gpio: the gpio pin which should be initialised

int hosal_gpio_output_set(hosal_gpio_dev_t *gpio, uint8_t value)

Set GPIO output high or low.

Note
Using this function on a gpio pin which is set to input mode is undefined.
Return
  • 0 on success
  • EIO if an error occurred with any step
Parameters
  • gpio: the gpio pin which should be set
  • value: 0 : output low | >0 : output high

int hosal_gpio_input_get(hosal_gpio_dev_t *gpio, uint8_t *value)

Get the state of an input GPIO pin. Using this function on a gpio pin which is set to output mode will return an undefined value.

Return
  • 0 on success
  • EIO if an error occurred with any step
Parameters
  • gpio: the gpio pin which should be read
  • value: gpio value

int hosal_gpio_irq_set(hosal_gpio_dev_t *gpio, hosal_gpio_irq_trigger_t trigger_type, hosal_gpio_irq_handler_t handler, void *arg)

Enables an interrupt trigger for an input GPIO pin. Using this function on a gpio pin which is set to output mode is undefined.

Return
  • 0 on success
  • EIO if an error occurred with any step
Parameters
  • gpio: the gpio pin which will provide the interrupt trigger
  • trigger: the type of trigger (rising/falling edge or both)
  • handler: a function pointer to the interrupt handler
  • arg: an argument that will be passed to the interrupt handler

int hosal_gpio_irq_mask(hosal_gpio_dev_t *gpio, uint8_t mask)

Clear an interrupt status for an input GPIO pin. Using this function on a gpio pin which has generated a interrupt.

Return
  • 0 on success
  • EIO if an error occurred with any step
Parameters
  • gpio: the gpio pin which provided the interrupt trigger
  • mask: 0 : mask | 1 : umask

int hosal_gpio_finalize(hosal_gpio_dev_t *gpio)

Set a GPIO pin in default state.

Return
  • 0 on success
  • EIO if an error occurred with any step
Parameters
  • gpio: the gpio pin which should be deinitialised

Structures

struct hosal_gpio_ctx

hosal gpio ctx, use for multi gpio irq

struct hosal_gpio_dev_t

GPIO dev struct.

Public Members

uint8_t port

gpio port

hosal_gpio_config_t config

gpio config

void *priv

priv data

Type Definitions

typedef void (*hosal_gpio_irq_handler_t)(void *arg)

GPIO interrupt callback handler.

Parameters
  • parg: :Set the custom parameters specified

typedef struct hosal_gpio_ctx hosal_gpio_ctx_t

hosal gpio ctx, use for multi gpio irq

Enumerations

enum hosal_gpio_config_t

gpio config struct

Values:

ANALOG_MODE

Used as a function pin, input and output analog.

INPUT_PULL_UP

Input with an internal pull-up resistor - use with devices that actively drive the signal low - e.g. button connected to ground.

INPUT_PULL_DOWN

Input with an internal pull-down resistor - use with devices that actively drive the signal high - e.g. button connected to a power rail.

INPUT_HIGH_IMPEDANCE

Input - must always be driven, either actively or by an external pullup resistor.

OUTPUT_PUSH_PULL

Output actively driven high and actively driven low - must not be connected to other active outputs - e.g. LED output.

OUTPUT_OPEN_DRAIN_NO_PULL

Output actively driven low but is high-impedance when set high - can be connected to other open-drain/open-collector outputs. Needs an external pull-up resistor.

OUTPUT_OPEN_DRAIN_PULL_UP

Output actively driven low and is pulled high with an internal resistor when set high - can be connected to other open-drain/open-collector outputs.

OUTPUT_OPEN_DRAIN_AF

Alternate Function Open Drain Mode.

OUTPUT_PUSH_PULL_AF

Alternate Function Push Pull Mode.

enum hosal_gpio_irq_trigger_t

GPIO interrupt trigger.

Values:

HOSAL_IRQ_TRIG_NEG_PULSE

GPIO negedge pulse trigger interrupt.

HOSAL_IRQ_TRIG_POS_PULSE

GPIO posedge pulse trigger interrupt.

HOSAL_IRQ_TRIG_NEG_LEVEL

GPIO negedge level trigger interrupt (32k 3T)

HOSAL_IRQ_TRIG_POS_LEVEL

GPIO posedge level trigger interrupt (32k 3T)