GPIO的标准接口函数
2022-09-22 09:51:28
ThanksView
  • 访问次数: 222
  • 注册日期: 2019-03-19
  • 最后登录: 2024-04-22
一、什么是GPIO的标准接口函数
在chrdev章节中访问GPIO的方法:需自己编写地址映射的版本:
request_mem_region()申请GPIO寄存器的物理内存区---->ioremap()IO内存的动态映射,得到虚拟地址---->访问虚拟地址。
需要查找CPU的使用手册。

内核封装的标准接口函数,简单的GPIO访问方法:
GPIO是嵌入式平台最常见的一个硬件模块,所以linux内核将GPIO的访问过程封装成了标准的接口函数,这些接口函数在调用的时候和平台无关的。

二、GPIO标准接口函数
参考说明文档:Documentation\gpio.txt

#include <linux/gpio.h>


1. GPIO的申请和释放
GPIO使用之前先申请,使用之后需要释放

int gpio_request(unsigned gpio, const char *label);
void gpio_free(unsigned gpio);

参数说明:
unsigned gpio ---->GPIO口号,GPIO的ID,每个GPIO口一个
const char *label ---->自定义的GPIO的名字
返回值:
returning 0 or negative errno

2. 配置GPIO为输出还是输入
int gpio_direction_input(unsigned gpio);
int gpio_direction_output(unsigned gpio, int value);

3. 获取GPIO的输入值或设置GPIO的输出值
/* GPIO INPUT:  return zero or nonzero */
int gpio_get_value(unsigned gpio);
/* GPIO OUTPUT */
void gpio_set_value(unsigned gpio, int value);
注意:这些函数是通用的标准函数,是与平台无关的。


三、GPIO口号
1. GPIO号是与硬件相关的
每个GPIO都有一个GPIO口号的,使用GPIO口号还识别/区分一个具体的GPIO。GPIO号是与硬件相关的。

2. GPIO号的定义
/kernel/arch/arm/plat-s5p6818/common/cfg_type.h
enum {
    PAD_GPIO_A      = (0 * 32),
    PAD_GPIO_B      = (1 * 32),
    PAD_GPIO_C      = (2 * 32),
    PAD_GPIO_D      = (3 * 32),
    PAD_GPIO_E      = (4 * 32),
    PAD_GPIO_ALV    = (5 * 32),
};

例子:
D8 —> GPIOC17 —>PAD_GPIO_C+17
D9 —> GPIOC8 —>PAD_GPIO_C+8
D10 —> GPIOC7 —>PAD_GPIO_C+7
D11 —> GPIOC12 —>PAD_GPIO_C+12

三维半岛官网: http://www.thanksview.com

进入首页