GPIO 驱动
结构体
GPIO MUX 枚举
enum {
    GPIO_INPUT = 0,
    GPIO_OUTPUT = 1,
    GPIO_PERIPH_MUX2 = 2,
    GPIO_PERIPH_MUX3 = 3,
    GPIO_PERIPH_MUX4 = 4,
    GPIO_PERIPH_MUX5 = 5,
    GPIO_PERIPH_MUX6 = 6,
    GPIO_PERIPH_MUX7 = 7,
    GPIO_PERIPH_MUX8 = 8,
    GPIO_PERIPH_MUX14 = 14,
    GPIO_DISABLED = 0xf,
};
GPIO 端口枚举
enum {
    GPIO_PORTA = 0,
    GPIO_PORTB,
    GPIO_PORTC,
    GPIO_PORTD,
    GPIO_PORTE,
    GPIO_PORTF,
    GPIO_PORTG,
    GPIO_PORTH,
    GPIO_PORTI,
    GPIO_PORTJ,
    GPIO_PORTK,
    GPIO_PORTL,
    GPIO_PORTM,
    GPIO_PORTN,
};
GPIO 上下拉状态
enum gpio_pull_t {
    GPIO_PULL_UP = 0,
    GPIO_PULL_DOWN = 1,
    GPIO_PULL_NONE = 2,
};
GPIO 引脚定义
#define GPIO_PIN(x, y) (((uint32_t) (x << PIO_NUM_IO_BITS)) | y)
typedef struct {
    gpio_t pin;
    uint8_t mux;
} gpio_mux_t;
驱动 API
sunxi_gpio_init
void sunxi_gpio_init(gpio_t pin, int cfg);
初始化具有给定配置的指定GPIO引脚。
- pin:要初始化的GPIO引脚。
- cfg:GPIO引脚的配置值。
sunxi_gpio_set_value
void sunxi_gpio_set_value(gpio_t pin, int value);
设置指定GPIO引脚的值。
- pin:要设置值的GPIO引脚。
- value:要设置的GPIO引脚的值(0或1)。
sunxi_gpio_read
int sunxi_gpio_read(gpio_t pin);
读取指定GPIO引脚的值。
- pin:要读取值的GPIO引脚。
- 返回值:从GPIO引脚读取的值(0或1)。
sunxi_gpio_set_pull
void sunxi_gpio_set_pull(gpio_t pin, enum gpio_pull_t pull);
设置指定GPIO引脚的拉电阻配置。
- pin:要设置拉电阻配置的GPIO引脚。
- pull:要为GPIO引脚设置的拉电阻配置。
示例
声明一个GPIO,拉高或拉低
声明一个GPIO,设置为输出模式
static gpio_mux_t pl13_pins = {
        .pin = GPIO_PIN(GPIO_PORTL, 13),
        .mux = GPIO_OUTPUT,
};
拉高 GPIO
sunxi_gpio_init(pl13_pins.pin, pl13_pins.mux);
sunxi_gpio_set_value(pl13_pins.pin, 1);
拉低 GPIO
sunxi_gpio_init(pl13_pins.pin, pl13_pins.mux);
sunxi_gpio_set_value(pl13_pins.pin, 0);