luat_soc_sdk_2024 V1.0
GPIO接口

结构体

struct  luat_gpio_cfg
 GPIO控制参数 更多...
 

宏定义

#define LUAT_GPIO_LOW   (Luat_GPIO_LOW)
 GPIO配置为低电平
 
#define LUAT_GPIO_HIGH   (Luat_GPIO_HIGH)
 GPIO配置为高电平
 
#define LUAT_GPIO_OUTPUT   (Luat_GPIO_OUTPUT)
 GPIO配置为输出模式
 
#define LUAT_GPIO_INPUT   (Luat_GPIO_INPUT)
 GPIO配置为输入模式
 
#define LUAT_GPIO_IRQ   (Luat_GPIO_IRQ)
 GPIO配置为中断模式
 
#define LUAT_GPIO_DEFAULT   (Luat_GPIO_DEFAULT)
 GPIO配置为默认模式,EC618平台,上下拉只对输出模式有效,输入模式只有默认上下拉或者取消上下拉,普通的GPIO配置为LUAT_GPIO_DEFAULT,表示完全关闭上下拉;AGPIO软件上不支持配置上下拉,即使配置了也无效,一直是硬件开机或者复位时的默认状态
 
#define LUAT_GPIO_PULLUP   (Luat_GPIO_PULLUP)
 GPIO配置为上拉模式
 
#define LUAT_GPIO_PULLDOWN   (Luat_GPIO_PULLDOWN)
 GPIO配置为下拉模式
 
#define LUAT_GPIO_RISING_IRQ   (Luat_GPIO_RISING)
 上升沿中断
 
#define LUAT_GPIO_FALLING_IRQ   (Luat_GPIO_FALLING)
 下降沿中断
 
#define LUAT_GPIO_BOTH_IRQ   (Luat_GPIO_BOTH)
 上升沿 下降沿都中断
 
#define LUAT_GPIO_HIGH_IRQ   (Luat_GPIO_HIGH_IRQ)
 GPIO配置为高电平中断模式
 
#define LUAT_GPIO_LOW_IRQ   (Luat_GPIO_LOW_IRQ)
 GPIO配置为低电平模式
 
#define LUAT_GPIO_NO_IRQ   (0xff)
 GPIO没有中断模式
 
#define LUAT_GPIO_MAX_ID   (Luat_GPIO_MAX_ID)
 最大GPIO序号
 
#define LUAT_GPIO_NONE   (0xff)
 

类型定义

typedef struct luat_gpio_cfg luat_gpio_cfg_t
 GPIO控制参数
 

枚举

enum  LUAT_GPIO_CTRL_CMD_E { LUAT_GPIO_CMD_SET_PULL_MODE , LUAT_GPIO_CMD_SET_IRQ_MODE }
 GPIO上下拉\中断设置参数 更多...
 

函数

void luat_gpio_set_default_cfg (luat_gpio_cfg_t *gpio)
 GPIO设置默认参数
 
int luat_gpio_open (luat_gpio_cfg_t *gpio)
 打开GPIO
 
int luat_gpio_set (int pin, int level)
 GPIO输出电平
 
int luat_gpio_get (int pin)
 读取GPIO输入电平
 
void luat_gpio_close (int pin)
 关闭GPIO
 
int luat_gpio_set_irq_cb (int pin, luat_gpio_irq_cb cb, void *args)
 设置GPIO中断回调函数
 
void luat_gpio_pulse (int pin, uint8_t *level, uint16_t len, uint16_t delay_ns)
 GPIO模拟单线输出模式
 
int luat_gpio_ctrl (int pin, LUAT_GPIO_CTRL_CMD_E cmd, int param)
 GPIO上下拉\中断单独设置函数
 
void luat_gpio_iomux (int pin, int new_pad, uint8_t alt)
 
int luat_gpio_driver_ws2812b (int pin, uint8_t *data, uint32_t len, uint32_t frame_cnt, uint8_t bit0h, uint8_t bit0l, uint8_t bit1h, uint8_t bit1l)
 gpio方式输出bit0和bit1给WS2812B,不输出reset,由于严格的时序要求,会关闭中断来保证时序,因此驱动大量LED灯时会对其他驱动,甚至整个系统有影响。建议用多个GPIO分组驱动大量LED灯,1个GPIO最好不要超过32个灯
 

详细描述

宏定义说明

◆ LUAT_GPIO_BOTH_IRQ

#define LUAT_GPIO_BOTH_IRQ   (Luat_GPIO_BOTH)

上升沿 下降沿都中断

在文件 luat_gpio.h32 行定义.

◆ LUAT_GPIO_DEFAULT

#define LUAT_GPIO_DEFAULT   (Luat_GPIO_DEFAULT)

GPIO配置为默认模式,EC618平台,上下拉只对输出模式有效,输入模式只有默认上下拉或者取消上下拉,普通的GPIO配置为LUAT_GPIO_DEFAULT,表示完全关闭上下拉;AGPIO软件上不支持配置上下拉,即使配置了也无效,一直是硬件开机或者复位时的默认状态

在文件 luat_gpio.h26 行定义.

◆ LUAT_GPIO_FALLING_IRQ

#define LUAT_GPIO_FALLING_IRQ   (Luat_GPIO_FALLING)

下降沿中断

在文件 luat_gpio.h31 行定义.

◆ LUAT_GPIO_HIGH

#define LUAT_GPIO_HIGH   (Luat_GPIO_HIGH)

GPIO配置为高电平

在文件 luat_gpio.h20 行定义.

◆ LUAT_GPIO_HIGH_IRQ

#define LUAT_GPIO_HIGH_IRQ   (Luat_GPIO_HIGH_IRQ)

GPIO配置为高电平中断模式

在文件 luat_gpio.h33 行定义.

◆ LUAT_GPIO_INPUT

#define LUAT_GPIO_INPUT   (Luat_GPIO_INPUT)

GPIO配置为输入模式

在文件 luat_gpio.h23 行定义.

◆ LUAT_GPIO_IRQ

#define LUAT_GPIO_IRQ   (Luat_GPIO_IRQ)

GPIO配置为中断模式

在文件 luat_gpio.h24 行定义.

◆ LUAT_GPIO_LOW

#define LUAT_GPIO_LOW   (Luat_GPIO_LOW)

GPIO配置为低电平

在文件 luat_gpio.h19 行定义.

◆ LUAT_GPIO_LOW_IRQ

#define LUAT_GPIO_LOW_IRQ   (Luat_GPIO_LOW_IRQ)

GPIO配置为低电平模式

在文件 luat_gpio.h34 行定义.

◆ LUAT_GPIO_MAX_ID

#define LUAT_GPIO_MAX_ID   (Luat_GPIO_MAX_ID)

最大GPIO序号

在文件 luat_gpio.h37 行定义.

◆ LUAT_GPIO_NO_IRQ

#define LUAT_GPIO_NO_IRQ   (0xff)

GPIO没有中断模式

在文件 luat_gpio.h35 行定义.

◆ LUAT_GPIO_NONE

#define LUAT_GPIO_NONE   (0xff)

在文件 luat_gpio.h40 行定义.

◆ LUAT_GPIO_OUTPUT

#define LUAT_GPIO_OUTPUT   (Luat_GPIO_OUTPUT)

GPIO配置为输出模式

在文件 luat_gpio.h22 行定义.

◆ LUAT_GPIO_PULLDOWN

#define LUAT_GPIO_PULLDOWN   (Luat_GPIO_PULLDOWN)

GPIO配置为下拉模式

在文件 luat_gpio.h28 行定义.

◆ LUAT_GPIO_PULLUP

#define LUAT_GPIO_PULLUP   (Luat_GPIO_PULLUP)

GPIO配置为上拉模式

在文件 luat_gpio.h27 行定义.

◆ LUAT_GPIO_RISING_IRQ

#define LUAT_GPIO_RISING_IRQ   (Luat_GPIO_RISING)

上升沿中断

在文件 luat_gpio.h30 行定义.

类型定义说明

◆ luat_gpio_cfg_t

GPIO控制参数

枚举类型说明

◆ LUAT_GPIO_CTRL_CMD_E

GPIO上下拉\中断设置参数

枚举值
LUAT_GPIO_CMD_SET_PULL_MODE 

上下拉模式

LUAT_GPIO_CMD_SET_IRQ_MODE 

中断模式

在文件 luat_gpio.h61 行定义.

函数说明

◆ luat_gpio_close()

void luat_gpio_close ( int pin)

关闭GPIO

参数
PinPin序号

◆ luat_gpio_ctrl()

int luat_gpio_ctrl ( int pin,
LUAT_GPIO_CTRL_CMD_E cmd,
int param )

GPIO上下拉\中断单独设置函数

参数
pinPin序号
LUAT_GPIO_CTRL_CMD_E设置命令 LUAT_GPIO_CMD_SET_PULL_MODE 设置上下拉命令 LUAT_GPIO_CMD_SET_IRQ_MODE
param设置参数 参数取自上下拉、以及中断的宏定义
返回
-1 失败 0 成功

◆ luat_gpio_driver_ws2812b()

int luat_gpio_driver_ws2812b ( int pin,
uint8_t * data,
uint32_t len,
uint32_t frame_cnt,
uint8_t bit0h,
uint8_t bit0l,
uint8_t bit1h,
uint8_t bit1l )

gpio方式输出bit0和bit1给WS2812B,不输出reset,由于严格的时序要求,会关闭中断来保证时序,因此驱动大量LED灯时会对其他驱动,甚至整个系统有影响。建议用多个GPIO分组驱动大量LED灯,1个GPIO最好不要超过32个灯

参数
pinGPIO号
data输出的byte数据,驱动不对数据做任何RGB顺序调整,请自行调整
len输出的byte数量,必须是3的倍数
frame_cnt在一次关闭全局中断到开启全局中断中间发送的帧数,1帧3个byte。分段发送是为了能让其他中断有响应的时间,但是造成提前发送reset而导致剩下的灯不亮。写0则一次性全部发送
bit0hbit0的高电平额外延迟,默认写10,如果高电平时间不足酌情增加
bit0lbit0的低电平额外延迟,默认写0
bit1hbit1的高电平额外延迟,默认写10,如果高电平时间不足酌情增加
bit1lbit1的低电平额外延迟,默认写0
返回
-1 失败 0 成功

◆ luat_gpio_get()

int luat_gpio_get ( int pin)

读取GPIO输入电平

参数
PinPin序号
返回
1高电平, 0低电平,其他无效

◆ luat_gpio_iomux()

void luat_gpio_iomux ( int pin,
int new_pad,
uint8_t alt )

◆ luat_gpio_open()

int luat_gpio_open ( luat_gpio_cfg_t * gpio)

打开GPIO

参数
luat_gpio_cfg_t

◆ luat_gpio_pulse()

void luat_gpio_pulse ( int pin,
uint8_t * level,
uint16_t len,
uint16_t delay_ns )

GPIO模拟单线输出模式

参数
PinPin序号
Data输出电平序列
BitLen输出电平序列中一共有几个bit
Delay每个bit之间的delay
返回
注意
在同一个GPIO输出一组脉冲, 注意, len的单位是bit, 高位在前.

◆ luat_gpio_set()

int luat_gpio_set ( int pin,
int level )

GPIO输出电平

参数
PinPin序号
Level1高电平,0低电平

◆ luat_gpio_set_default_cfg()

void luat_gpio_set_default_cfg ( luat_gpio_cfg_t * gpio)

GPIO设置默认参数

参数
luat_gpio_cfg_t

◆ luat_gpio_set_irq_cb()

int luat_gpio_set_irq_cb ( int pin,
luat_gpio_irq_cb cb,
void * args )

设置GPIO中断回调函数

参数
PinPin序号
cb中断处理函数
args中断函数参数
返回
-1 失败 0 成功