MTK6762 gpio控制
1.内核dws保存文件路径
kernel-4.9/drivers/misc/mediatek/dws\mt6765/k62v1_64_bsp.dws
2.lk dws 保存文件路径
vendor/mediatek/proprietary/bootable/bootloader/lk/target/k62v1_64_bsp/dct/dct/codegen.dws
3.preloader dws 保存文件路径
vendor/mediatek/proprietary/bootable/bootloader/preloader/custom/k62v1_64_bsp/dct/dct/codegen.dws
4.DrvGen.exe工具配置路径
vendor/mediatek/proprietary/scripts/dct/DrvGen.exe
5.配置dws gpio解析
(1)解析各选项的作用
EintMode: 指示是否当作中断引脚来使用,例如GPIO0就可以当作ENTI0,如果选中了该模式,其它模式是不可见的。
Def.Mode: GPIO默认的模式,什么意思呢,就是在系统启动过程中GPIO口的模式,GPIO口启动模式是定义在文件cust_gpio_boot.h文件中的,例如,GPIO3的启动模式就是作为普通的GPIO口来使用,即模式为GPIO_MODE_00,稍后会为大家讲解cust_gpio_boot.h文件是怎么生成的。
M0~M7: 由于GPIO口是复用的,也就说除了作为普通的GPIO口使用之外,还有其它用途,所以这里会在cust_gpio_usage.h文件中产生一些宏定义,可能某些驱动中会用到这些宏定义。这里是没有这选项的,有些同系列的芯片有这些选项。
InPull En: 是指GPIO是否使能上拉或下拉。
InPull SelHigh: 上面只是只是指示是否使能上拉或下拉,但是并没有指出到底是上拉还是下拉,那么就由这里来指定,如果勾选了那么就表示上拉,否则就是下拉。
Def.Dir: 指示GPIO默认的数据传输方向,是输入还是输出,都需要设置的。
In、Out: In和Out这两个选项暂时不知道有何用处,根据字面意思呢,应该是允许输入或输出的。
OutHigh: 指示GPIO口作为普通IO时输出电平高低。
VarName1: 变量的名字,有些驱动中可能会使用到一些GPIO口,那么这里就是为GPIO口定义一个别名,那么在驱动中只需要这个别名就可以了,而这个GPIO口是可以换的,所以这里也是为了可移植性。
SMT:使能施密特触发器
IES:输入使能(默认1)
在GPIO口配置完成之后,首先是需要点击Save来保存这个配置,可以点击Gen Code去生成新的代码,新的代码就生成在和codegen.dws同一个目录下。
前面说了在系统启动过程中会初始化这些GPIO口,那么什么地方在做初始化呢,有两个地方preloader和lk,preloader初始化代码流程如下:
mt_gpio_set_default()->mt_gpio_set_default_chip()
而该部分代码在mediatek/platform/mt6762/preloader/src/drivers/gpio_init.c中,在该文件中首先就是包含文件cust_gpio_boot.h。
而lk部分初始化流程都是差不多的,流程如下:
mt_gpio_set_default()->mt_gpio_set_default_chip()
lk部分代码在mediatek/platform/mt6582/lk/mt_gpio_init.c中。
(2)获取gpio的值,或则电平的高低
int getLcd_index_from_gpio_switch()
{int ret = 0;int bit0,bit1,bit2,bit3;bit3 = mt_get_gpio_value(0x80000000+GPIO168)> 0 ? 1:0; //switch1 67 4bit2 = mt_get_gpio_value(0x80000000+GPIO12)> 0 ? 1:0; //switch2 69 3bit1 = mt_get_gpio_value(0x80000000+GPIO8)> 0 ? 1:0; //switch3 70 2bit0 = mt_get_gpio_value(0x80000000+GPIO10)> 0 ? 1:0; //switch4 72 1ret = (bit3<<0x3)|(bit2<<0x2)|(bit1<<0x1)|bit0;printf("ZQ9008 use switch_gpio val %d,%d,%d,%d,%d \n",ret,bit0,bit1,bit2,bit3);return ret;
}
位操作取值 。
bit3 = (mt_get_gpio_value(6)&0x2) >> 0x01 ; bit2 = mt_get_gpio_value(12)&0x01 ; bit1 = mt_get_gpio_value(8)&0x01; bit0 = mt_get_gpio_value(10)&0x01;
(3)代码手动配置gpio 模式,输入或输出方向,高低电平。
//设置gpio0为GPIO模式
mt_set_gpio_mode(GPIO18, GPIO_MODE_GPIO);
//设置gpio0方向为out
mt_set_gpio_dir(GPIO0, GPIO_DIR_OUT);
//设置gpio0高
mt_set_gpio_out(GPIO0, GPIO_OUT_ONE); //低是ZERO
vendor/mediatek/proprietary/bootable/bootloader/lk/platform/mt6762/uart.c
mt_set_gpio_mode(GPIO0, GPIO_MODE_00);
mt_set_gpio_dir(GPIO0, GPIO_DIR_OUT);
mt_set_gpio_out(GPIO0, GPIO_OUT_ONE);
vendor/mediatek/proprietary/bootable/bootloader/preloader/platform/mt6762/src/drivers/platform.c
mt_set_gpio_mode(GPIO0, GPIO_MODE_00);
mt_set_gpio_dir(GPIO23, GPIO_DIR_OUT);
mt_set_gpio_out(GPIO0, GPIO_OUT_ZERO);
6.内核配置路径
kernel-4.9/arch/arm64/boot/dts/mediatek/k62v1_64_bsp.dts
zdong_pins_LcdPowerState_input: LcdPowerState_input {pins_cmd_dat {pinmux = <PINMUX_GPIO45__FUNC_GPIO45>;slew-rate = <0>; //in 0输入默认填0bias-disable;};};zdong_pins_BoardLed_output0: BoardLed_output0 {pins_cmd_dat {pinmux = <PINMUX_GPIO11__FUNC_GPIO11>;slew-rate = <1>; //out 1 输出默认填1output-low;};};gpio0: gpio@0 {pins_cmd_dat {pins = <PINMUX_GPIO0__FUNC_IDDIG>; //模式slew-rate = <0>; //方向0--in 1--outbias-pull-down = <11>; //pull使能,并且pull-down【<11>功能保留,写<00>也行】bias-disable; //pull失能,与bias-pull-down/up冲突output-low; //设置输出low,可以output-high【方向为out才有效】input-schmitt-enable = <0>;};};
查看pinctrl是否被占用
ZQ9008:/ # cat /sys/kernel/debug/pinctrl/pinctrl-maps
Pinctrl maps:
device ziqigpio
state state_LcdPowerState_input
type MUX_GROUP (2)
controlling device 1000b000.pinctrl
group GPIO45
function func0device ziqigpio
state state_LcdPowerState_input
type CONFIGS_GROUP (4)
controlling device 1000b000.pinctrl
group GPIO45
config 00000001
config 00000011device ziqigpio
state state_BoardLed_output0
type MUX_GROUP (2)
controlling device 1000b000.pinctrl
group GPIO11
function func0device ziqigpio
state state_BoardLed_output0
type CONFIGS_GROUP (4)
controlling device 1000b000.pinctrl
group GPIO11
config 0000000f
config 00010011
config 配置的值的意义
查看一些gpio用途
ZQ9008:/ # cat /sys/kernel/debug/gpio
gpiochip0: GPIOs 332-511, parent: platform/1000b000.pinctrl, 1000b000.pinctrl:gpio-332 ( |cd ) in hi IRQgpio-337 ( |xr117x_irq_gpio ) in hi IRQgpio-345 ( |ziqi-encrypt ) out hi gpio-346 ( |ziqi-encrypt ) out hi gpio-347 ( |icn6211_power ) out hi gpio-491 ( |GPIO_ICN6211_RST ) out hi gpio-495 ( |xr117x_rst_gpio ) out hi gpio-500 ( |GPIO_LCD_3V3 ) out lo
ZQ9008:/ #
MTK6762 gpio控制相关推荐
- 终极教程,带具体实验现象,1个GPIO控制2个LED显示4种状态,欢迎讨论!
芯片之家前几天发了一篇文章,讨论1个GPIO控制2个LED显示4种状态,并没有带具体的实验现象,有点小遗憾: 绝妙!1个GPIO控制2个LED显示4种状态,什么?你不信?(点击阅读) 今天在卓老师公众 ...
- 巧用1个GPIO控制2个LED显示4种状态
很多电子产品有状态指示灯,比如电视机: 待机状态亮红灯 开机状态亮绿灯 实现起来很简单,微控制器MCU的两个GPIO分别控制就行: 不过资源总是紧张的,有时候会碰到GPIO不够用的情况. 如果只用1个 ...
- Linux学习~树莓派gpio控制
WiringPi 是应用于树莓派平台的 GPIO 控制库函数,WiringPi 遵守 GUN Lv3.wiringPi 使用 C 或者 C++ 开发并且可以被其他语言包转,例如 Python.ruby ...
- 树莓派GPIO控制/使用的教程
树莓派GPIO控制/使用的教程 介绍 使用说明 (一)导入库 (二)设置编码规范 (三)引脚设置 (四)电平控制 (五)读取引脚的输入状态 (六)释放GPIO资源 (七)示例代码 (八)PWM设置 一 ...
- K210应用2-使用GPIO控制LED状态
使用gpio控制led 实验目的 本次主要应用K210最基础的功能,了解FPIOA引脚映射,以及GPIO设置.该节验证方式为通过控制LED的亮灭来进行验证. 实验准备 1).带发光二极管(LED)的K ...
- (12)树莓派B+ GPIO控制四驱车
吐槽一下:本人还是个小白,CSDN文章分类不知道选哪个 如果你手上的材料是五线四相步进电机驱动板ULN2003+五线四相步进电机28BYJ-48-5V,那么应该算是非常幸运,因为这两样是配套的,一个驱 ...
- keil 4c语言读写寄存器,【STM32单片机学习】第四课:GPIO控制LED(用寄存器编程)
[朱老师课程总结] 第一部分.章节目录 第二部分.章节介绍 3.5.1.STM32的GPIO模块数据手册详解1 本节讲解STM32数据手册中GPIO模块相关的部分,主要是GPIO的各类模式及其配置方法 ...
- mtk平台的gpio控制
https://yq.aliyun.com/ziliao/273436 一.mtk平台的gpio控制 1.1 内核中的gpio配置 //设置gpio18为GPIO模式 mt_set_gpio_m ...
- 二、点亮LED(GPIO控制)
二.点亮LED(GPIO控制) 文件状态: [ ] 草稿 [ ] 正在修改 [ √ ] 正式发布 文件标识: 当前版本: V1.1 作 者: Skymixos 完成日期: 2022年10月02日 版 ...
最新文章
- pycharm的安装配置和简单使用
- mysql 修改某列数据_mysql修改表某列数据问题
- 为outlook增加“邮件召回”功能
- 精品教程--Android实战系列源码与教程
- servlet url-pattern配置中 / 和 /* 的区别 记录
- 抑郁症是不可告人的病吗?
- Django之中间件,csrf跨站伪造请求,auth认证模块
- windows idea Tomcat端口被占用
- cibersortx怎么用_Xbox series x加速器怎么用 Xbox series x加速器的使用教程
- dxp交流电源怎么找_常见dxp元件搜索方法
- Win7下安装Ubuntu(双硬盘)的简要步骤
- 前端工程师面试时自我介绍该如何做?
- 【毕业设计】基于大数据的招聘职业爬取与分析可视化
- 小技巧之chrome浏览器安装淘宝比价插件
- sublime text 3 插件 OmniMarkupPreviewer 报404解决办法
- 线上慎用Java断言
- 这是一篇假的回顾过去展望未来计划书
- iOS在图片上添加文字或图片
- html怎么做小米logo,CSS3:一个标签画LOGO——小米
- 力扣 leetcode 605. 种花问题 (python)
热门文章
- 【大数据技术】centos7下配置hive连接mysql,mysql-connector-java-8.0.26-1.el7.noarch.
- 红米电脑开机无法自动修复此计算机,红米手机怎么恢复出厂设置 【图文】
- 柯西变异和自适应权重优化的蝴蝶算法-附代码
- 易语言开发IE工具条 -- 另类篇
- Win10编译FFmpeg-64位动态库
- 音视频基础之音频常见名词
- 《不畏将来,不念过去》笔记
- MySQL之——MySQL远程连接丢失问题解决方法(Lost connection to MySQL server)
- 《天龙八部3D》Unity技术方案揭秘 1
- nuxt项目中调用百度地图api