MTK平台驱动调试指南 GPIO设置篇

简介: MTK平台驱动调试指南 GPIO设置篇

一、GPIO有关的函数

1. GPIO_ModeSetup:

函数原型:void GPIO_ModeSetup(kal_uint16 pin, kal_uint16 conf_dada)

功能:设置GPIO的工作模式是作为GPIO,还是作为专有功能接口。

参数:

pin:GPIO 的pin脚号,对应于原理图上MTK62XX 主CPU芯片的上的GPIO标号

conf_dada:值有0~3。其中0是表示作为GPIO模式,其他根据专有功能的不同进行设置。

这个conf_data一般根据Baseband Processor Data Sheet 的pdf文件里指定的值进行设置。

一般在使用前都需要进行设置,因为一个脚有很多用处,根据寄存器的不同值来确定做什么用

2. GPO_InitIO

函数原型:void GPIO_InitIO(char direction, char port)

功能:初始化GPIO的工作方向是作为输入,还是作为输出

参数:

 direction:工作方向,0表示输入,1表示输出

 port:GPIO的pin脚

3. GPIO_ReadIO

函数原型:char GPIO_ReadIO(char port)

功能:从GPIO读取数据

参数:

 port:GPIO的pin脚

读出来的值根据硬件提供的信息进行逻辑的判断。

4. GPIO_WriteIO

函数原型:void GPIO_WriteIO(kal_char data, kal_char port)

功能:往GPIO写数据

参数:

data: 1表示给高电平,0表示给低电平

 port:GPIO的pin脚

备注:这些函数在Gpio.C中可以找到。

二、GPIO模式设置

GPIO口在系统上电的时候,有的是默认高电平,有的是默认低电平,这是MCU内部决定的,软件无法更改,但是在系统开机过程中,会对GPIO进行初始化,MCU中有几个GPIO模式初始化寄存器,通过这个寄存器给GPIO设置初始模式。

例如:以下这个寄存器就是用来设置0-7号GPIO的模工作模式的。

这个初始化过程在Gpio_Drv.C中的函数GPIO_init()中,项目开始的时候,先要检查这个部分的模式设置是否正确。

三、各个功能模块的GPIO设置

1. LCD背光,马达

有的LCD背光是靠GPIO进行控制的,有的则靠PMIC进行控制。但不管那个方式进行控制,都只需修改Custom_equipment.c中的相关部分就可以了,具体如下:

首先,检查数组

GPIO_MAP_ENTRY gpio_map_tbl[] = {
/*GPIO_LABEL_LCD_BACKLIGHT */ {GPIO_VAILD, GPIO_PORT_24, netname[GPIO_LABEL_LCD_BACKLIGHT], NULL },
};

将没有使用的GPIO,用GPIO_INVALID给屏蔽掉。

然后,修改函数custom_cfg_gpio_set_level,在对应的GPIO类型上将控制函数添加进去即可。比如:

switch(gpio_dev_type)    
   {
   case GPIO_DEV_LED_MAINLCD:
  if( gpio_dev_level == LED_LIGHT_LEVEL0)// LEVEL0- LEVEL5是背光由若到强的控制,LEVEL0表示关闭背光
GPIO_WriteIO(GPIO_OFF, custom_cfg_outward_gpio_port(GPIO_LABEL_LCD_BACKLIGHT) );
        else
           GPIO_WriteIO(GPIO_ON, custom_cfg_outward_gpio_port(GPIO_LABEL_LCD_BACKLIGHT) );
        PWM2_level(gpio_dev_level);
        break;

2. 蓝牙

在文件bt_hw_define.h中参照原理图进行对应GPIO的修改。

#define BT_GPIO_RESET  52//39 //GPIO_39 : PMIC reset
   #define BT_GPIO_DSC  36//;4 //GPIO_4 : to disconnect RFComm link
   #define BT_GPIO_POWER 4//12 //GPIO_12: Power
   #define BT_GPIO_DATASELECT 0//;3 //GPIO_3: DataSelect

3. Camera

在文件Camera_hw.c和sccb.h中参照原理图进行对应GPIO的修改。

【Camera_hw.c】
  #define MODULE_POWER_PIN   6  // GPIO NO.
#define MODULE_RESET_PIN   12  // GPIO NO.
#define MODULE_CMPDN_PIN   13  // GPIO NO.
【sccb.h】
#define SCCB_SERIAL_CLK_PIN  8
#define SCCB_SERIAL_DATA_PIN  9

4. TouchPanel

在文件Touch_panel_spi.h中参照原理图进行对应GPIO的修改

#define SPI_DIN_PIN     1 //17  /*1GPO*/
   #define SPI_CLK_PIN     8 //20   /*8GPO*/
   #define SPI_DOUT_PIN    38 //22  /*18GPI*/
   #define SPI_CS_PIN      9 //23  /*9GPO*/
   #define SPI_BUSY_PIN    5 //21  /*5GPI*/

四、总结

GPIO 的设置相对来讲比较简单,只要仔细参对原理图,基本上就可以将GPIO配置好。当然有些时候GPIO配置好了也达不到效果,就需要和硬件工程师一起来进行检测分析,测量对应电路的工作电压或电流,来判断工作是否正常。总之在前期的调试方面,多跟硬件工程师沟通、讨论、分析,会很快解决问题。

相关文章
|
6月前
全志平台A40I GPIO操作:adb通过debugfs控制GPIO
全志平台A40I GPIO操作:adb通过debugfs控制GPIO
160 0
|
6月前
|
Linux API
嵌入式Linux中的 gpio、gpiod基本分析
嵌入式Linux中的 gpio、gpiod基本分析
493 0
|
编解码 Linux
Linux MIPI DSI驱动调试笔记-LCD时序参数配置(三)
Linux MIPI DSI驱动调试笔记-LCD时序参数配置(三)
1042 0
|
3月前
|
Android开发
基于Amlogic 安卓9.0, 驱动简说(五):基于GPIO、LED子系统的LED驱动
这篇文章是关于如何在基于Amlogic T972的Android 9.0系统上,使用GPIO和LED子系统来实现LED驱动的教程,包括了DTS设备树配置、驱动源码编写以及如何在用户空间控制LED的亮度和开关。
91 0
基于Amlogic 安卓9.0, 驱动简说(五):基于GPIO、LED子系统的LED驱动
|
编解码 Linux
基于瑞芯微RV1109 Linux串口驱动调试心得(给正点原子DS100示波器点赞!)
基于瑞芯微RV1109 Linux串口驱动调试心得(给正点原子DS100示波器点赞!)
292 0
|
编解码 Linux
基于瑞芯微RV1109 Linux触摸屏GT911驱动调试心得(二)-设备树刷厂商给的触摸屏固件
基于瑞芯微RV1109 Linux触摸屏GT911驱动调试心得(二)-设备树刷厂商给的触摸屏固件
308 0
|
编解码 监控 Linux
嵌入式Linux MIPI接口LCD调试-关于DRM显示与应用调试的干货浓缩
嵌入式Linux MIPI接口LCD调试-关于DRM显示与应用调试的干货浓缩
1160 0
|
Linux
全志A64 设备树里的gpio应用开发
全志A64 设备树里的gpio应用开发
180 0
|
Linux 开发工具 git
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(三十二)LED模板驱动程序的改造:设备树
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(三十二)LED模板驱动程序的改造:设备树
338 1
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(三十二)LED模板驱动程序的改造:设备树
|
Linux 开发工具 git
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(三十)LED模板驱动程序的改造:总线设备驱动模型
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(三十)LED模板驱动程序的改造:总线设备驱动模型
227 1
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(三十)LED模板驱动程序的改造:总线设备驱动模型