MTK平台GPIO使用及参数详解

1,620 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第4天,点击查看活动详情 >>

一、寄存器分类

1、 控制寄存器:

--l  模式寄存器:配置GPIO为输入/输出/复用/模拟模式

--l  输出类型寄存器:当GPIO在输出模式下,配置GPIO是推挽/开漏输出

--l  输出速度寄存器:配置GPIO输出速度,有低/中/高/超高速选择

--l 上/下拉寄存器:配置GPIO选择上拉/下拉电阻模式

2、 复用寄存器:

-- 在GPIO复用时需要通过此寄存器配置复用的功能

3、 数据寄存器:

--l  输入数据寄存器:GPIO实现电路会将输入的数据存储到此

--l 输出数据寄存器:往该寄存器写值,GPIO实现电路会将数据输出

4、 置/复位寄存器:

配置该寄存器,输出数据寄存器会整个置位/复位

二、Mtk专用调试接口

2.1、查看gpio状态

cat /sys/devices/platform/10005000.pinctrl/mt_gpio

image.png

注意:

1、这里pinbase=268,因此在申请gpio号或者export时应加上base值

2、cat出来的io只有184个,但我们如果要操作gpio200怎么办呢?我们需要先输入

echo start xxx > /sys/devices/platform/10005000.pinctrl/mt_gpio 从xxx号开始算起。

如:

echo start 180 > /sys/devices/platform/10005000.pinctrl/mt_gpio 从180号开始算起

2.2 详细解释

具体每一位解释如下:

[MODE]:每个GPIO可以配置的模式 

[DIR]:0=输入;1=输出

[DOUT]:作为输出引脚的高低电平,0=低;1=高

[DIN]:输入引脚的电平

[DRIVE]:驱动能力,一般可取值0~7(两位)

[SMT]:是否使能斯密特触发器

[IES]:输入使能,控制输入是否有效。

[PULL_EN]:是指GPIO是否使能上拉或下拉,只有当GPIO作为输入模式时才生效

[PULL_SEL]:上面只设置了是否使能上拉或下拉,但并没有到底是上拉还是下拉。0=下拉;1=上拉

( [R1] [R0] ): 
当前GPIO pin的(上下拉)并联电阻的使能状态: 1 0表示enable R1,disable R0
0 1表示disable R1,enable R0
1 1表示enable R1, enable R0
不打印出来,表示当前的GPIO pin不支持PUPD状况,即只有一个上拉电阻、一个下拉电阻。

三、GPIO控制方法

echo mode 198 0 > /sys/devices/platform/10005000.pinctrl/mt_gpio

echo dir 198 0 > /sys/devices/platform/10005000.pinctrl/mt_gpio

echo out 198 0 > /sys/devices/platform/10005000.pinctrl/mt_gpio

echo driving 197 0 > /sys/devices/platform/10005000.pinctrl/mt_gpio

echo ies 197 0 > /sys/devices/platform/10005000.pinctrl/mt_gpio

echo smt 197 0 > /sys/devices/platform/10005000.pinctrl/mt_gpio

echo pullen 197 0 > /sys/devices/platform/10005000.pinctrl/mt_gpio

echo pullsel 197 0 > /sys/devices/platform/10005000.pinctrl/mt_gpio

四、查看io使用情况

cat /sys/kernel/debug/pinctrl/10005000.pinctrl-pinctrl_paris/pinmux-pins

image.png

五、查看io申请情况

cat /sys/kernel/debug/gpio

注意:需要注意的是这里只能看到内核中被申请的函数占用情况

image.png