1.GPIO 配置
拿到一个手机项目,GPIO 总是和MTK 提供的默认的代码的GPIO 的使用不一样,需要根据原理图进行修改GPIO配置,配置GPIO 需要使用MTK 提供的工具DrvGen.exe。
打开mediatek/dct/DrvGen.exe工具,选择mediatek/custom/project_dir/kernel/dct/dct/codegen.dws文件,点击Edit,将出现如图所示的一个窗口:
工具中各个选项说明如下:
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中。