GPIO#

基本信息#

  • 起草日期: 2019-12-18

  • 设计人员: wendal

为什么需要GPIO#

  • 读取外部输入的电平信号

  • 输出指定电平

设计思路和边界#

  • 管理并抽象GPIO的C API, 提供一套Lua API供用户代码调用

C API(平台层)#

#define Luat_GPIO_LOW                 0x00
#define Luat_GPIO_HIGH                0x01

#define Luat_GPIO_OUTPUT         0x00
#define Luat_GPIO_INPUT          0x01
#define Luat_GPIO_INPUT_PULLUP   0x02
#define Luat_GPIO_INPUT_PULLDOWN 0x03
#define Luat_GPIO_OUTPUT_OD      0x04

#define Luat_GPIO_RISING             0x00
#define Luat_GPIO_FALLING            0x01
#define Luat_GPIO_RISING_FALLING     0x02

int luat_gpio_setup(luat_gpio_t* gpio);
int luat_gpio_set(int pin, int level);
int luat_gpio_get(int pin);
int luat_gpio_close(int pin);

Lua API#

常量#

gpio.OUTPUT          -- 输出模式,推挽
gpio.OUTPUT_OD       -- 输出模式,开漏
gpio.INPUT_PULLUP    -- 输入模式,上拉
gpio.INPUT_PULLDOWN  -- 输入模式,下拉
gpio.INPUT           -- 输入模式,缺省
gpio.LOW             -- 低电平
gpio.HIGH            -- 高电平

进入指定的功耗级别#

-- 简单输入
gpio.setup(PIN, gpio.INPUT)
-- 简单输出
gpio.setup(PIN, gpio.OUTPUT, 0)
-- 中断,回调函数的t的值为 GPIO_RISING 或 GPIO_FALLING
-- 最后一个参数为中断模式, GPIO_RISING_FALLING就是默认值, 双边触发
gpio.setup(PIN, gpio.INPUT, function(t) end, gpio.GPIO_RISING_FALLING)
-- 设置输出为高电平
gpio.set(PIN, gpio.HIGH)
-- 获取输入电平或当前的输出电平
gpio.get(PIN)
-- 关闭引脚, 事实上是输入高阻态
gpio.close(PIN)

相关知识点#

  • Luat核心机制