GPIO(通用输入输出,General Purpose Input/Output)子系统
是Linux内核中用于控制和使用GPIO引脚的一组功能。
GPIO引脚是微控制器和计算机系统中用于控制硬件组件的简单接口。
GPIO引脚可以被配置为输入或输出,可以被用来连接按钮、灯、传感器等各种设备。
GPIO子系统的主要功能
输入/输出配置:GPIO引脚可以配置为输入模式(用于读取传感器的状态)或输出模式(用于控制LED、继电器等)。
电平读取和设置:GPIO系统允许驱动程序读取引脚的电平状态(高或低)以及设置引脚的电平。
中断处理:GPIO子系统支持通过中断方式响应引脚状态的变化(如按钮按下),使得系统能及时做出反应。
设备树支持:在多数系统中,GPIO引脚的配置可以通过设备树来描述,便于对硬件的抽象和兼容支持。
1. GPIO引脚请求与释放
int of_get_named_gpio(struct device_node *np, const char *propname, int index);
功能:从设备树节点中获取指定索引的GPIO。
参数:
np:设备树节点。
propname:GPIO属性名称。
index:GPIO索引。
返回值:成功返回GPIO号码,失败时返回负的错误码。
gpio_request
int gpio_request(unsigned int gpio, const char *label);
功能:请求使用一个特定的GPIO引脚。
参数:
gpio:要请求的GPIO引脚号码。
label:用于描述请求使用的GPIO的标签字符串(用于调试和日志记录)。
返回值:成功返回0,失败时返回负的错误码。
gpio_free
void gpio_free(unsigned int gpio);
功能:释放先前请求的GPIO引脚,使其可供其他模块使用。
参数:
gpio:要释放的GPIO引脚号码。
2. GPIO引脚设置与读取
gpio_direction_input
int gpio_direction_input(unsigned int gpio);
功能:将GPIO引脚配置为输入模式。
参数:
gpio:要配置的GPIO引脚号码。
返回值:成功返回0,失败时返回负的错误码。
gpio_direction_output
int gpio_direction_output(unsigned int gpio, int value);
功能:将GPIO引脚配置为输出模式,并设置初始电平。
参数:
gpio:要配置的GPIO引脚号码。
value:输出的初始电平(0或1)。
返回值:成功返回0,失败时返回负的错误码。
gpio_get_value
int gpio_get_value(unsigned int gpio);
功能:读取GPIO引脚的当前电平。
参数:
gpio:要读取的GPIO引脚号码。
返回值:返回引脚的电平状态(0或1)。
gpio_set_value
void gpio_set_value(unsigned int gpio, int value);
功能:设置GPIO引脚的电平状态。
参数:
gpio:要设置的GPIO引脚号码。
value:要设置的电平状态(0或1)。
- GPIO中断处理
gpio_to_irq
int gpio_to_irq(unsigned int gpio);
功能:将GPIO引脚转换为IRQ编号,以便为该引脚设置中断。
参数:
gpio:目标GPIO引脚的号码。
返回值:返回对应的IRQ编号,失败时返回负的错误码。
request_irq
int request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, const char *devname, void *dev_id)