携手创作,共同成长!这是我参与「掘金日新计划 · 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
注意:
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
五、查看io申请情况
cat /sys/kernel/debug/gpio
注意:需要注意的是这里只能看到内核中被申请的函数占用情况