• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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