MTK GPIO的定制详解

如果需要定制GPIO口呢,需要使 mediatek/dct/DrvGen.exe工具,点击Open,选择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,稍后会为大家讲解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口是可以换的,所以这里也是为了可移植性。

在GPIO口配置完成之后,首先是需要点击Save来保存这个配置,可以点击 Gen Code去生成新的代码,新的代码就生成在和codegen.dws同一个目录下,但是在Android 4.4版本上我都不是这样做的,在保存以后,直接运行./mk n k也会生成新的代码,生成目录在:
out/target/product/project_dir/obj/CUSTGEN/custom/kernel/dct/,如果是其他版本,可能会不相同。

前面说了在系统启动过程中会初始化这些GPIO口,那么什么地方在做初始化呢,有两个地方preloader和lk,preloader初始化代码流程如下:
mt_gpio_set_default()->mt_gpio_set_default_chip()
而该部分代码在mediatek/platform/mt6582/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中。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
HAL库是STM32系列MCU的官方库之一,提供了丰富的函数接口,以便于开发者快速开发和调试。其中,GPIO函数是HAL库中最常用的函数之一,本文将详细介绍HAL库中GPIO函数的用法和参数。 1. GPIO初始化函数 ```c void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init); ``` 该函数用于初始化一个GPIO端口,其中GPIOx是GPIO端口号,GPIO_Init是GPIO初始化结构体。GPIO_Init结构体包含如下参数: | 参数 | 说明 | | ------------------- | ------------------------------------------------------------ | | GPIO_Pin | 指定GPIO口的位,可以为一个或多个位 | | GPIO_Mode | 指定GPIO口的模式,包括输入、输出、复用功能、模拟模式等 | | GPIO_Speed | 指定GPIO口的速度,包括低速、中速、高速等 | | GPIO_Pull | 指定GPIO口的上拉/下拉设置,包括上拉、下拉、不上拉不下拉等 | | GPIO_Alternate | 指定GPIO口的复用功能,用于特殊功能的实现 | | GPIO_InitTypeDef *p | 指向GPIO初始化结构体的指针,用于配置GPIO口的参数 | 2. GPIO读取输入函数 ```c GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); ``` 该函数用于读取一个GPIO端口的输入状态,其中GPIOx是GPIO端口号,GPIO_Pin是GPIO口位。返回值为GPIO_PinState类型,包括GPIO_PIN_RESET和GPIO_PIN_SET两种状态。 3. GPIO输出设置函数 ```c void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState); ``` 该函数用于设置一个GPIO端口的输出状态,其中GPIOx是GPIO端口号,GPIO_Pin是GPIO口位,PinState是GPIO的输出状态,包括GPIO_PIN_RESET和GPIO_PIN_SET两种状态。 4. GPIO输出翻转函数 ```c void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); ``` 该函数用于翻转一个GPIO端口的输出状态,其中GPIOx是GPIO端口号,GPIO_Pin是GPIO口位。 以上就是HAL库中GPIO函数的详细介绍,希望对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值