本实验对应的例程在光盘资料的:i.MX6UL终结者光盘资料\04_裸机例程源码\6_key 目录下,我们在Ubuntu系统下使用命令“mkdir 6_key”建立“6_key”文件夹,如图 1所示:
使用命令“cd 6_key”进入6_key文件。如图 2所示:
然后使用命令“cp -r …/5_beep/* ./”将上一章试验中的所有内容拷贝到刚刚新建的“6_key”里面,如图 3所示:
拷贝完成以后的工程如图 4所示:
使用命令“mkdir drivers/gpio”在drivers驱动目录下新建“gpio”文件夹。GPIO操作驱动都放在这个目录下。如图 5所示:
使用命令“vi drivers/gpio/gpio.h”新建gpio.h文件。如图 14.3.6所示:
添加如下内容:
1 #ifndef _BSP_GPIO_H
2 #define _BSP_GPIO_H
3 #define _BSP_KEY_H
4 #include "imx6ul.h"
5
6 /* 枚举类型和结构体定义 */
7 typedef enum _gpio_pin_direction
8 {
9 kGPIO_DigitalInput = 0U, /* 输入 */
10 kGPIO_DigitalOutput = 1U, /* 输出 */
11 } gpio_pin_direction_t;
12
13
14 typedef struct _gpio_pin_config
15 {
16 gpio_pin_direction_t direction; /* GPIO方向:输入还是输出 */
17 uint8_t outputLogic; /* 如果是输出的话,默认输出电平 */
18 } gpio_pin_config_t;
19
20
21 /* 函数声明 */
22 void gpio_init(GPIO_Type *base, int pin, gpio_pin_config_t *config);
23 int gpio_pinread(GPIO_Type *base, int pin);
24 void gpio_pinwrite(GPIO_Type *base, int pin, int value);
25
26 #endif
gpio.h 中定义了一个枚举类型 gpio_pin_direction_t 和结构体 gpio_pin_config_t。
gpio_pin_direction_t:GPIO方向,输入或输出。
gpio_pin_config_t:GPIO配置结构体,里面有 GPIO 的方向和默认输出电平两个成员变量。
部分截图如图 7所示:
添加完成之后,保存退出文件。
使用命令“vi drivers/gpio/gpio.c”新建gpio.c文件。如图 8所示:
添加内容如下:
1 #include "gpio.h"
2
3 /*
4 * @description : GPIO初始化。
5 * @param - base : 要初始化的GPIO组。
6 * @param - pin : 要初始化GPIO在组内的编号。
7 * @param - config : GPIO配置结构体。
8 * @return : 无
9 */
10 void gpio_init(GPIO_Type *base, int pin, gpio_pin_config_t *config)
11 {
12 if(config->direction