[Hi3751V811][Android8.0]海思平台 - GPIO

平台 内核版本 安卓版本
Hi3751V811 Linux4.1 Android8.0

文章目录

    • 工具的使用
    • 代码的实现
    • 驱动接口

工具的使用

在这里插入图片描述
使用说明:

功能描述: 演示GPIO模块接口读写的使用方法
命令格式:
	GPIO读:
	./sample_gpio_read Group | Bit 
	GPIO写:
	./sample_gpio_write Group | Bit | Value 


参数说明: Group: GPIO组号; Bit: 位号; Value:高低电平值

代码的实现

目录:android/device/hisilicon/bigfish/sdk/sample/gpio/sample_gpio_read.c

HI_S32 main(int argc, char *argv[])
{
    HI_S32 s32Ret;
    HI_U32 u32Group;
    HI_U32 u32Bit;
    HI_U32 u32Value;
    HI_U32 u32GpioNum;

    if (argc < 3)
    {
        printf("./sample_gpio_read Group | Bit \n");
        return HI_FAILURE;
    }
    //atoi (表示 ascii to integer)是把字符串转换成整型数的一个函数
    u32Group = atoi(argv[1]);
    u32Bit = atoi(argv[2]);
    if (u32Bit >= 8)
    {
        printf("Bit must be 0 - 7!\n");
        return HI_FAILURE;
    }

    u32GpioNum = u32Group * 8 + u32Bit;

    (HI_VOID)HI_SYS_Init();

    //初始化
    s32Ret = HI_UNF_GPIO_Init();
    if (HI_SUCCESS != s32Ret)
    {
        printf("%s: %d ErrorCode=0x%x\n", __FILE__, __LINE__, s32Ret);
        goto ERR0;
    }
    //读取
    s32Ret = HI_UNF_GPIO_ReadBit(u32GpioNum, &u32Value);
    if (HI_SUCCESS != s32Ret)
    {
        printf("%s: %d ErrorCode=0x%x\n", __FILE__, __LINE__, s32Ret);
        goto ERR1;
    }
    else
    {
        printf("gpio value =0x%x\n", u32Value);
    }

ERR1:

    s32Ret = HI_UNF_GPIO_DeInit();
    if (HI_SUCCESS != s32Ret)
    {
        printf("%s: %d ErrorCode=0x%x\n", __FILE__, __LINE__, s32Ret);
    }

ERR0:

    (HI_VOID)HI_SYS_DeInit();

    return s32Ret;
}

驱动接口

目录:device/hisilicon/bigfish/sdk/source/msp/include/hi_unf_gpio.h
目录:device/hisilicon/bigfish/sdk/source/msp/api/gpio/unf_gpio.c

GPIO输出类型

typedef enum hiUNF_GPIO_OUTPUTTYPE_E
{
    HI_UNF_GPIO_OUTPUTTYPE_CMOS,
    HI_UNF_GPIO_OUTPUTTYPE_OD,
    HI_UNF_GPIO_OUTPUTTYPE_BUTT,
}HI_UNF_GPIO_OUTPUTTYPE_E;

HI_S32 HI_UNF_GPIO_Init(HI_VOID) 打开GPIO设备
HI_S32 HI_UNF_GPIO_DeInit(HI_VOID) 关闭GPIO设备
HI_S32 HI_UNF_GPIO_ReadBit(HI_U32 u32GpioNo, HI_BOOL *pbHighVolt) 从GPIO单个引脚读取数据
HI_S32 HI_UNF_GPIO_WriteBit(HI_U32 u32GpioNo, HI_BOOL bHighVolt ) 向GPIO单个引脚输出数据
HI_S32 HI_UNF_GPIO_SetDirBit(HI_U32 u32GpioNo, HI_BOOL bInput) 设置GPIO单个引脚输入输出方向
HI_S32 HI_UNF_GPIO_GetDirBit(HI_U32 u32GpioNo, HI_BOOL *pbInput) 获取GPIO单个引脚输入输出方向
HI_S32 HI_UNF_GPIO_SetIntType(HI_U32 u32GpioNo, HI_UNF_GPIO_INTTYPE_E enIntType) 设置GPIO单个引脚的中断类型
HI_S32 HI_UNF_GPIO_SetIntEnable(HI_U32 u32GpioNo, HI_BOOL bEnable) 设置GPIO单个引脚的中断使能
HI_S32 HI_UNF_GPIO_QueryInt(HI_U32 *p32GpioNo, HI_U32 u32TimeoutMs) 查询GPIO中断
HI_S32 HI_UNF_GPIO_SetOutputType(HI_U32 u32GpioNo, HI_UNF_GPIO_OUTPUTTYPE_E enOutputType) 设置GPIO单个引脚的输出类型
HI_S32 HI_UNF_GPIO_GetOutputType(HI_U32 u32GpioNo, HI_UNF_GPIO_OUTPUTTYPE_E *penOutputType) 获取GPIO单个引脚的输出类型

其中管脚号计算规则:管脚号=GPIO组号*8 + GPIO管脚在组内的编号。

你可能感兴趣的:([Hi3751V811][Android8.0]海思平台 - GPIO)