| 硬件 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 通过原理图找你需要配置的硬件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-boot\boart\s5p4418\drone\include\Cfg_gpio.h kernel\arch\arm\plat-s5p4418\drone\include\Cfg_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,则说明不使能中断功能,即不作为中断引脚。   | 
原文:http://www.cnblogs.com/muhuacat/p/7045138.html