MTK 驱动开发(2)---GPIO 配置

时间:2024-03-19 21:06:09

1.GPIO 配置  

 拿到一个手机项目,GPIO 总是和MTK 提供的默认的代码的GPIO 的使用不一样,需要根据原理图进行修改GPIO配置,配置GPIO 需要使用MTK 提供的工DrvGen.exe

  打开mediatek/dct/DrvGen.exe工具,选择mediatek/custom/project_dir/kernel/dct/dct/codegen.dws文件,点击Edit,将出现如图所示的一个窗口:MTK 驱动开发(2)---GPIO 配置
工具中各个选项说明如下:

EintMode: 指示是否当作中断引来使,例如GPIO0就可以当作ENTI0,如果选中了该模式,其它模式是不可见的。
Def.Mode: GPIO默认的模式,在系统启动过程中GPIO口的模式,GPIO口启动模式是定义在文件cust_gpio_boot.h文件中的,例如,GPIO3的启动模式就是作为普通的GPIO口来使,即模式为GPIO_MODE_00。


M0~M7: 由于一些GPIO口可以有多个功能,功能是复的,也就说除了作为普通的GPIO口使之外,还有其它途,具体项目中使用那个功能,需要设置M0~M7来配置GPIO的功能。在cust_gpio_usage.h文件中产生一些宏定义,可能某些驱动中会到这些宏定义。
InPull En:  GPIO是否使能上拉或下拉。
InPull SelHigh: 上面只是只是指示是否使能上拉或下拉,但是并没有指出到底是上拉还是下拉,那么就由这里来指定,如果勾选了那么就表示上拉,否则就是下拉。
Def.Dir: 指示GPIO默认的数据传输方向,是输入还是输出,都需要设置的。

In、Out: GPIO配置成 输入还是输出
OutHigh: 指示GPIO口作为普通IO时输出电平高还是低。
VarName1: 变量的名字,有些驱动中可能会使到一些GPIO口,那么这里就是为GPIO口定义一个别名,那么在驱动中只需要这个别名就可以了,而这个GPIO口是可以换的。

  在GPIO口配置完成之后,首先是需要Save来保存这个配置,可以点击Gen Code去生成新的代码,新的代码就生成在和codegen.dws同一个目录下。

2.GPIO使用

系统启动过程中会初始化这些GPIO口,有两个地方preloader和lk

2.1preloader初始化代码流程如下

mt_gpio_set_default()->mt_gpio_set_default_chip()
而该部分代码在mediatek/platform/mtXXXX/preloader/src/drivers/gpio_init.c中,在该文件中首先就是包含文件cust_gpio_boot.h。

2.2lk部分初始化流程如下:

mt_gpio_set_default()->mt_gpio_set_default_chip()
lk部分代码在mediatek/platform/mtXXXX/lk/mt_gpio_init.c中。