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. 终极教程,带具体实验现象,1个GPIO控制2个LED显示4种状态,欢迎讨论!

    芯片之家前几天发了一篇文章,讨论1个GPIO控制2个LED显示4种状态,并没有带具体的实验现象,有点小遗憾: 绝妙!1个GPIO控制2个LED显示4种状态,什么?你不信?(点击阅读) 今天在卓老师公众 ...

  2. 巧用1个GPIO控制2个LED显示4种状态

    很多电子产品有状态指示灯,比如电视机: 待机状态亮红灯 开机状态亮绿灯 实现起来很简单,微控制器MCU的两个GPIO分别控制就行: 不过资源总是紧张的,有时候会碰到GPIO不够用的情况. 如果只用1个 ...

  3. Linux学习~树莓派gpio控制

    WiringPi 是应用于树莓派平台的 GPIO 控制库函数,WiringPi 遵守 GUN Lv3.wiringPi 使用 C 或者 C++ 开发并且可以被其他语言包转,例如 Python.ruby ...

  4. 树莓派GPIO控制/使用的教程

    树莓派GPIO控制/使用的教程 介绍 使用说明 (一)导入库 (二)设置编码规范 (三)引脚设置 (四)电平控制 (五)读取引脚的输入状态 (六)释放GPIO资源 (七)示例代码 (八)PWM设置 一 ...

  5. K210应用2-使用GPIO控制LED状态

    使用gpio控制led 实验目的 本次主要应用K210最基础的功能,了解FPIOA引脚映射,以及GPIO设置.该节验证方式为通过控制LED的亮灭来进行验证. 实验准备 1).带发光二极管(LED)的K ...

  6. (12)树莓派B+ GPIO控制四驱车

    吐槽一下:本人还是个小白,CSDN文章分类不知道选哪个 如果你手上的材料是五线四相步进电机驱动板ULN2003+五线四相步进电机28BYJ-48-5V,那么应该算是非常幸运,因为这两样是配套的,一个驱 ...

  7. keil 4c语言读写寄存器,【STM32单片机学习】第四课:GPIO控制LED(用寄存器编程)

    [朱老师课程总结] 第一部分.章节目录 第二部分.章节介绍 3.5.1.STM32的GPIO模块数据手册详解1 本节讲解STM32数据手册中GPIO模块相关的部分,主要是GPIO的各类模式及其配置方法 ...

  8. mtk平台的gpio控制

    https://yq.aliyun.com/ziliao/273436 一.mtk平台的gpio控制  1.1 内核中的gpio配置  //设置gpio18为GPIO模式  mt_set_gpio_m ...

  9. 二、点亮LED(GPIO控制)

    二.点亮LED(GPIO控制) 文件状态: [ ] 草稿 [ ] 正在修改 [ √ ] 正式发布 文件标识: 当前版本: V1.1 作 者: Skymixos 完成日期: 2022年10月02日 版 ...

最新文章

  1. pycharm的安装配置和简单使用
  2. mysql 修改某列数据_mysql修改表某列数据问题
  3. 为outlook增加“邮件召回”功能
  4. 精品教程--Android实战系列源码与教程
  5. servlet url-pattern配置中 / 和 /* 的区别 记录
  6. 抑郁症是不可告人的病吗?
  7. Django之中间件,csrf跨站伪造请求,auth认证模块
  8. windows idea Tomcat端口被占用
  9. cibersortx怎么用_Xbox series x加速器怎么用 Xbox series x加速器的使用教程
  10. dxp交流电源怎么找_常见dxp元件搜索方法
  11. Win7下安装Ubuntu(双硬盘)的简要步骤
  12. 前端工程师面试时自我介绍该如何做?
  13. 【毕业设计】基于大数据的招聘职业爬取与分析可视化
  14. 小技巧之chrome浏览器安装淘宝比价插件
  15. sublime text 3 插件 OmniMarkupPreviewer 报404解决办法
  16. 线上慎用Java断言
  17. 这是一篇假的回顾过去展望未来计划书
  18. iOS在图片上添加文字或图片
  19. html怎么做小米logo,CSS3:一个标签画LOGO——小米
  20. 力扣 leetcode 605. 种花问题 (python)

热门文章

  1. 【大数据技术】centos7下配置hive连接mysql,mysql-connector-java-8.0.26-1.el7.noarch.
  2. 红米电脑开机无法自动修复此计算机,红米手机怎么恢复出厂设置 【图文】
  3. 柯西变异和自适应权重优化的蝴蝶算法-附代码
  4. 易语言开发IE工具条 -- 另类篇
  5. Win10编译FFmpeg-64位动态库
  6. 音视频基础之音频常见名词
  7. 《不畏将来,不念过去》笔记
  8. MySQL之——MySQL远程连接丢失问题解决方法(Lost connection to MySQL server)
  9. 《天龙八部3D》Unity技术方案揭秘 1
  10. nuxt项目中调用百度地图api