添加外设
本文以 GT911 电容屏驱动添加为例,介绍外设驱动添加方法。
获取源码
GT911 的 RT-Thread 驱动源码位于:https://github.com/RiceChen/gt911 下载后,将源码解压至 bsp/peripheral/touch
目录下,源码结构如下:
touch$ tree
.
├── gt911
│ ├── inc
│ │ └── gt911.h
│ ├── Kconfig
│ └── src
│ └── gt911.c
└── SConscript
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
SConscript 修改
bsp/peripheral/touch/SConscript
文件内容如下:
python
Import('AIC_ROOT')
Import('PRJ_KERNEL')
from building import *
cwd = GetCurrentDir()
src = Glob('*.c')
CPPPATH = []
if GetDepend('AIC_TOUCH_PANEL_GT911'):
CPPPATH.append(cwd + '/gt911/inc')
src += Glob('gt911/src/*.c')
group = DefineGroup('touch', src, depend = [''], CPPPATH = CPPPATH)
Return('group')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
如果后续添加其他 touch 的驱动,可在此文件中,以 GT911 为参考模板添加。
pinmux 修改
每个板卡的 pinmux.c 都定义了各个端口的 GPIO 引脚及功能,新增接口前应检查。 根据原理图:
- GT911 驱动使用的是 I2C3 接口;
- 除了 I2C 的 SCK 和 SDA引脚,还需要用到 RST 和 INT 引脚;
因此,需要在 target/<cpu>/<board>/pinmux.c
中,添加如下内容:
c
struct aic_pinmux aic_pinmux_config[] = {
...
#ifdef AIC_USING_I2C3
{1, PIN_PULL_DIS, 3, "PA.8"}, // RST
{1, PIN_PULL_DIS, 3, "PA.9"}, // INT
{4, PIN_PULL_DIS, 3, "PA.10"}, // SCK
{4, PIN_PULL_DIS, 3, "PA.11"}, // SDA
#endif
...
};
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
Kconfig 配置
源码 Kconfig
驱动源码的 Kconfig bsp/peripheral/touch/gt911/Kconfig
内容如下:
python
$ cat Kconfig
menu "Gt911 touch panel options"
config AIC_TOUCH_PANEL_GT911
bool "Using touch panel gt911"
default n
select AIC_I2C_DRV
config AIC_TOUCH_PANEL_GT911_I2C_CHA
string "gt911 using i2c channel index"
default "i2c3"
depends on AIC_TOUCH_PANEL_GT911
config AIC_TOUCH_PANEL_GT911_RST_PIN
string "gt911 reset pin"
default "PA.8"
depends on AIC_TOUCH_PANEL_GT911
config AIC_TOUCH_PANEL_GT911_INT_PIN
string "gt911 irq pin"
default "PA.9"
depends on AIC_TOUCH_PANEL_GT911
endmenu
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
外设驱动 Kconfig
在 bsp/peripheral/Kconfig
中,添加配置驱动源码的 Kconfig 路径
python
...
#--------------------------------------------
# touch panel driver global option
#--------------------------------------------
menu "Touch Panel Support"
source "bsp/peripheral/touch/gt911/Kconfig"
endmenu
...
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
menuconfig 配置
配置有两部分要做改动:
- 打开 I2C3 ,并配置为 Master;
- 使能 GT911 驱动;
运行 scons --menuconfig
或 me
( OneStep 命令 )
Board options --->
[*] Using I2c3
I2c3 Parameter --->
I2c3 Master && Slave (Master) --->
Drivers options --->
Peripheral --->
Touch Panel Support --->
Gt911 touch panel options --->
[*] Using touch panel gt911
(i2c0) gt911 using i2c channel index
(PA.10) gt911 reset pin
(PA.11) gt911 irq pin
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
编译
完成驱动添加和配置后,对 SDK 进行编译,使用命令 scons --menuconfig
或 m
( OneStep 命令 )
验证
烧写镜像,系统启动之后,通过 list_device 命令, 查看设备节点是否已成功枚举,如下所示:
aic /> list_device
device type ref count
-------- -------------------- ----------
...
gt911 Touch Device 1
...
1
2
3
4
5
6
2
3
4
5
6
看到 gt911 设备,表示已成功添加该设备。