在4418平台上如何配置GPIO口的状态

硬件
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
通过原理图找你需要配置的硬件IO口的管脚
 4418 6818 内核中,所有 GPIO 引脚被分为 ABCDE 等几组,每组 32 个。
每组引脚起始地址定义如下图:

硬件引脚都对应分配在这几组引脚中:
例如:
GPIOB29 对应 PAD_GPIO_B + 29
硬件上的命名: GPIOB29
软件上的命名: PAD_GPIO_B + 29
GPIOC10 对应 PAD_GPIO_C + 10
硬件上的命名: GPIOC10
软件上的命名: PAD_GPIO_C + 10  
 
软件
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
GPIO配置文件
u-bootoarts5p4418droneincludeCfg_gpio.h
kernelarcharmplat-s5p4418droneincludeCfg_gpio.h
 
u-boot与kernel中
例如:
#define PAD_GPIOAO    (PAD_MODE_OUT | PAD_FUNC_ALT0 | PAD_LEVEL_HIGH | PAD_PULL_OFF | PAD_STRENGTH_0)           
第一个参数:输出,输入              (输入为:PAD_MODE_IN, 输出为:PAD_MODE_OUT)
第二个参数:功能选择
        ——————————————————————————————————————         
        | 注:                                                                                                                                  |
        |  // 0: GPIO          1: VIP1_VD[4]           ,2: MPEGTSI_TDATA1[0]   ,3:_                    =        |
        |  这里的GPIO对应的是0,那么第二个参数就是 PAD_FUNC_ALT0                                       |
        |----------------------------------------------------------------------------------------------|
        |    // 0: MCUS_SD[15]   ,1: GPIO       ,2: MPEGTSI0_TDATA[7]   ,3: UART5_TXD       =      |
        |  若GPIO对应的是1,那么第二个参数就是PAD_FUNC_ALT1                                               |
        ——————————————————————————————————————
第三个参数:高低电平            (高电平:PAD_LEVEL_HIGH,低电平AD_LEVEL_LOW)               
第四个参数:上拉,下拉,关闭上下拉   (上拉:PAD_PULL_UP, 下拉:PAD_PULL_DN,  关闭上下拉:PAD_PULL_OFF)
第五个参数:驱动能力
 
注:
最好不要在cfg_gpio.h文件中配置GPIO,因为有些GPIO会有复用功能,可能会影响其他的功能,最好用GPIO有关的函数来实现
 
GPIO有关的函数
GPIO 输出功能设置
如果要对 GPIO 配置为输出功能,输出高或输出低,就是拉高拉低的意思。
我们可以用 int gpio_direction_output(unsigned gpio, int value)
从函数的参数来看
unsigned gpio:这个单个 GPIO 的值 ;
int value:这个是要设置的值( 0 代表低电平, 1 代表高电平)
比如我要对 LCD 供电的 GPIO 拉高,那么软件上这样写
gpio_direction_output(PAD_GPIO_C + 10, 1);
如果要拉低:
gpio_direction_output(PAD_GPIO_C + 10, 0);
我们在 LCD 驱动、触摸屏驱动、按键驱动等都有对 GPIO 设置,请参考源码对应的修改进行理解。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
GPIO 输入功能设置
如果我们想了解一个外部的电平的高低情况,那么我们可以通过 GPIO 连接该路电平,接着把 GPIO 设成输入功能即可。
软件上用一个函数即可让 GPIO 变成输入功能
int gpio_direction_input(unsigned gpio)
从这上面我们只看到一个参数,就是对应 GPIO 的值
比如我要让 GPIOC10 改成输入功能
gpio_direction_input( PAD_GPIO_C + 10);
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
GPIO 电平读取
当我们需要读取当前 GPIO 的值(输出、输入、复用功能都可以读取),我们也可以通过函
数去读取
static inline int gpio_get_value(unsigned gpio)
参数 GPIO 代表需要读取 GPIO 对应的值
比如我要读 GPIOC10 的值
gpio_get_value(PAD_GPIO_C + 10)  
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
GPIO 中断功能设置
当我们需要引脚中断功能的时候,那么我们就需要实现 GPIO 的中断功能。
参数:
void nxp_soc_gpio_set_int_enable(unsigned int io, int on)
unsigned io :代表单个 GPIO 引脚
int on:置为 1,则代表使能中断功能,置为 0,则说明不使能中断功能,即不作为中断引脚。  
原文地址:https://www.cnblogs.com/muhuacat/p/7045138.html