1# GPIO概述 2 3## 简介 4 5- GPIO(General-purpose input/output)即通用型输入输出。通常,GPIO控制器通过分组的方式管理所有GPIO管脚,每组GPIO有一个或多个寄存器与之关联,通过读写寄存器完成对GPIO管脚的操作。 6- GPIO接口定义了操作GPIO管脚的标准方法集合,包括 7 8 - 设置管脚方向: 方向可以是输入或者输出\(暂不支持高阻态\) 9 - 读写管脚电平值: 电平值可以是低电平或高电平 10 - 设置管脚中断服务函数:设置一个管脚的中断响应函数,以及中断触发方式 11 - 使能和禁止管脚中断:禁止或使能管脚中 12 13## 接口说明 14 15### 包含头文件: 16 17```c 18#include "lz_hardware.h" 19``` 20 21#### 1. GPIO初始化接口 22 23```c 24unsigned int GpioInit(GpioID id); 251) 参数说明: 26 id: Gpio管脚id 272) 返回值: 28 成功返回LZ_HARDWARE_SUCCESS, 出错返回错误码 29``` 30 31#### 2. GPIO设备释放接口: 32 33```c 34unsigned int LzGpioDeinit(GpioID id); 351) 参数说明: 36 id: Gpio管脚id 372) 返回值: 38 成功返回LZ_HARDWARE_SUCCESS, 出错返回错误码 39``` 40 41#### 3.GPIO设备配置管脚方向: 42 43```c 44unsigned int LzGpioSetDir(GpioID id, LzGpioDir dir); 451) 参数说明: 46 id: Gpio管脚id 47 dir: Gpio管脚方向 482) 返回值: 49 成功返回LZ_HARDWARE_SUCCESS, 出错返回错误码 50``` 51 52#### 4.GPIO设备获取管脚方向: 53 54```c 55unsigned int LzGpioGetDir(GpioID id, LzGpioDir *dir); 561) 参数说明: 57 id: Gpio管脚id 58 dir: Gpio管脚方向 592) 返回值: 60 成功返回LZ_HARDWARE_SUCCESS, 出错返回错误码 61``` 62 63#### 5.GPIO设备设置管脚电平值: 64 65```c 66unsigned int LzGpioSetVal(GpioID id, LzGpioValue val); 671) 参数说明: 68 id: Gpio管脚id 69 val: Gpio管脚电平值 702) 返回值: 71 成功返回LZ_HARDWARE_SUCCESS, 出错返回错误码 72``` 73 74#### 6.GPIO设备获取管脚电平值: 75 76```c 77unsigned int LzGpioGetVal(GpioID id, LzGpioValue *val); 781) 参数说明: 79 id: Gpio管脚id 80 val: Gpio管脚电平值 812) 返回值: 82 成功返回LZ_HARDWARE_SUCCESS, 出错返回错误码 83``` 84 85#### 7.GPIO设备注册管脚中断函数: 86 87```c 88unsigned int LzGpioRegisterIsrFunc(GpioID id, LzGpioIntType type, GpioIsrFunc func, void *arg); 891) 参数说明: 90 id: Gpio管脚id 91 type: Gpio中断类型 92 func: Gpio中断函数 93 arg: Gpio中断函数参数 942) 返回值: 95 成功返回LZ_HARDWARE_SUCCESS, 出错返回错误码 96``` 97 98#### 8.GPIO设备注销管脚中断函数: 99 100```c 101unsigned int LzGpioUnregisterIsrFunc(GpioID id); 1021) 参数说明: 103 id: Gpio管脚id 1042) 返回值: 105 成功返回LZ_HARDWARE_SUCCESS, 出错返回错误码 106``` 107 108#### 9.GPIO设备使能管脚中断: 109 110```c 111unsigned int LzGpioEnableIsr(GpioID id); 1121) 参数说明: 113 id: Gpio管脚id 1142) 返回值: 115 成功返回LZ_HARDWARE_SUCCESS, 出错返回错误码 116``` 117 118#### 10.GPIO设备关闭管脚中断: 119 120```c 121unsigned int LzGpioDisableIsr(GpioID id); 1221) 参数说明: 123 id: Gpio管脚id 1242) 返回值: 125 成功返回LZ_HARDWARE_SUCCESS, 出错返回错误码 126``` 127 128## 使用实例 129 130```c 131#include "lz_hardware.h" 132 133#定义从机地址 134#define TEST_GPIO GPIO0_PC6 135 136void GpioIrqFunc() 137{ 138 printf("enter GpioIrqFunc\n"); 139} 140 141unsigned int gpio_sample() 142{ 143 unsigned int ret = LZ_HARDWARE_SUCCESS; 144 uint16_t val = 0; 145 if (GpioInit(TEST_GPIO) != LZ_HARDWARE_SUCCESS) 146 return LZ_HARDWARE_FAILURE; 147 //设置GPIO管脚为输入 148 ret = LzGpioSetDir(TEST_GPIO, GPIO_DIR_IN); //input 149 //拉高GPIO管脚电平值 150 ret = LzGpioSetVal(TEST_GPIO, LZGPIO_LEVEL_HIGH); 151 //注册Gpio中断,设置Gpio管脚中断为下降沿触发 152 LzGpioRegisterIsrFunc(TEST_GPIO, LZGPIO_INT_EDGE_FALLING, GpioIrqFunc, NULL); 153 //拉低GPIO管脚电平值 154 ret = LzGpioSetVal(TEST_GPIO, LZGPIO_LEVEL_LOW); 155 //获取GPIO管脚电平值 156 ret = LzGpioGetVal(TEST_GPIO, &val); 157 return LZ_HARDWARE_SUCCESS; 158} 159``` 160 161