author | daisy.skye的博客_CSDN博客-嵌入式,Qt,Linux领域博主 |
代码路径 | bootable/bootloader/lk/platform/msm8953/gpio.c |
void gpio_tlmm_config(uint32_t gpio, uint8_t func,
uint8_t dir, uint8_t pull,
uint8_t drvstr, uint32_t enable)
{
uint32_t val = 0;
val |= pull;
val |= func << 2;
val |= drvstr << 6;
val |= enable << 9;
writel(val, (uint32_t *)GPIO_CONFIG_ADDR(gpio));
return;
}
void gpio_set_dir(uint32_t gpio, uint32_t dir)
{
writel(dir, (uint32_t *)GPIO_IN_OUT_ADDR(gpio));
return;
}
gpio_tlmm_config配置gpio的引脚,功能,方向,能力,gpio_set_dir配置gpio的高低电平,先根据函数和定义自行理解后
GPIO配置函数头文件定义
#include <gpio.h>
/* GPIO TLMM: Direction */
#define GPIO_INPUT 0
#define GPIO_OUTPUT 1
/* GPIO TLMM: Pullup/Pulldown */
#define GPIO_NO_PULL 0
#define GPIO_PULL_DOWN 1
#define GPIO_KEEPER 2
#define GPIO_PULL_UP 3
/* GPIO TLMM: Drive Strength */
#define GPIO_2MA 0
#define GPIO_4MA 1
#define GPIO_6MA 2
#define GPIO_8MA 3
#define GPIO_10MA 4
#define GPIO_12MA 5
#define GPIO_14MA 6
#define GPIO_16MA 7
/* GPIO TLMM: Status */
#define GPIO_ENABLE 0
#define GPIO_DISABLE 1
void gpio_config_uart_dm(uint8_t id);
void gpio_config_blsp_i2c(uint8_t, uint8_t);
#endif
代码参数详细解析
函数 | void gpio_tlmm_config(uint32_t gpio, uint8_t func, uint8_t dir, uint8_t pull, uint8_t drvstr, uint32_t enable) |
参数 | |
gpio | gpio 引脚:具体根据原理图 |
func | 功能定义:默认0表示普通io;串口使用2;spo使用1 |
dir | 方向:输入或者输出 |
pull | 是否上拉下拉:输出配置不拉,输入根据电路配置上拉or下拉 |
drvstr | 驱动能力:从2mA到16mA,一般定义8mA |
enable | 使能情况:输出配置GPIO_DISABLE,输入配置GPIO_ENABLE |
举个列子
gpio_tlmm_config(6, 0, GPIO_OUTPUT, GPIO_NO_PULL,
GPIO_8MA, GPIO_DISABLE);//设置GPIO6为输出模式
gpio_set_dir(6, 2);//设置输出高电平
//gpio_set_dir(6, 0);//设置输出低电平