MTK之DrvGen的使用

打开mcu\custom\drv\Drv_Tool 【L206X_code20190321\custom\drv\Drv_Tool】下的DrvGen.exe,如下图所示:

点击"Open",选择自己的.dws文件,比如我的是mcu\custom\codegen\ULTRA2503D_11C_BB\codegen.dws【L206X_code20190321\custom\codegen\MBLTEK61D_MOS_3232_11C_BB\codegen.dws】,

点"Edit"进行具体的编辑,如下图:

对着原理图配置实际需要的IO,没用到的就不要修改了,免得出现问题。选项后面的VarName可以给IO配置别名,调用的时候直接用这个别名就可以了。配置完成后,点"确定"。先点“Save”保存,再点击“Gen Code”生成代码。

Def.Mode: GPIO默认的模式,在系统启动过程中GPIO口的模式

M0~M7: 由于一些GPIO口可以有多个功能,功能是复用的,也就说除了作为普通的GPIO口使用之外,还有其它用途,具体项目中使用那个功能,需要设置M0~M7来配置GPIO的功能。

InPull En:  GPIO是否使能上拉或下拉。
InPull SelHigh: 上面只是只是指示是否使能上拉或下拉,但是并没有指出到底是上拉还是下拉,那么就由这里来指定,如果勾选了那么就表示上拉,否则就是下拉。
Def.Dir: 指示GPIO默认的数据传输方向,是输入还是输出,都需要设置的。
In、Out: GPIO配置成 输入还是输出。
OutHigh: 指示GPIO口作为普通IO时输出电平高还是低。
VarName1: 变量的名字,有些驱动中可能会使用到一些GPIO口,那么这里就是为GPIO口定义一个别名,那么在驱动中只需要这个别名就可以了,而这个GPIO口是可以换的。

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

更详细的的使用方法查看《Driver_allinone_for_MT6261x_MT250x.pdf》

GPIO的控制方式一

使用mcu\hal\peripheral\src\gpio.c下的这几个接口:

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模式,其他根据专有功能的不同进行设置。

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配置好了也达不到效果,就需要和硬件工程师一起来进行检测分析,测量对应电路的工作电压或电流,来判断工作是否正常。总之在前期的调试方面,多跟硬件工程师沟通、讨论、分析,会很快解决问题。

?      中断调试篇
中断调试一般来说包括以下几个方面,一一做简单介绍:
1.      中断号匹配
这个部分在文件eint_def.c中进行设置,参照原理图设置即可。

2.      中断触发方式的设置
在文件eint_def.c中,首先要对中断的触发响应时间进行设置,是在数组变量custom_eint_sw_debounce_time_delay中。一般情况下这个部分是不用动的,但有时候中断触发有问题的时候,这就是一个调试点。比如对于Touchpanel的中断,对应的响应时间一般是0,如果不是0,就需要修改。
另外,因为中断触发分电平触发和边沿触发,电平触发又分高电平触发和低电平触发,边沿触发又分为上升沿触发和下降沿触发,因此先需要跟硬件工程师了解对应的中断触发方式,然后在对应的中断初始化的地方修改触发方式。

3.      中断处理流程调试
有时候中断设置好了,对应功能也不能正常使用,那么就需要调试中断处理流程了,需要增加trace,一般我们会用系统带的trace函数kal_prompt_trace,有时候调试这个函数不能正常工作,那么我们就用这个文件中的函数sys_print打印trace信息,要使用这个函数,需要在系统最开始启动的时候,调用sys_uart_init进行初始化。这个函数库是在6228平台上做的,可能在其他平台上寄存器因为不同,需要进行修改。
往往在调试的过程中,经常发现是给芯片供电方面出了问题。因为有时候MTK给过来的代码,在他们的参考设计上是一种供电方式,但是在我们的设计上可能就是不一样了。所以在找到芯片供电部分代码的时候,查找对应资料,看是否调用正常。

http://wenku.baidu.com/link?url=bjunLrV30yc5mIrxJh2xd94Slt7mtqeNcgkEd4kFZaCudKpzYikMkqPhJbQ8pII23cJ5PUEqQfWhCeWZoxLO7ivNOQIbDWuFs-8-bIoOsU_

MTK:DrvGen驱动的使用相关推荐

  1. MTK 驱动(63)---MTK TP驱动移植

    MTK TP驱动移植 对于MTK TP驱动移植一般分为六部分: 1.硬件IO口配置: 2.TP驱动移植: 3.I2C通信: 4.中断触发: 5.数据上报: 6.虚拟按键: 硬件电路: 1.GPIO配置 ...

  2. Android MTK Camera驱动代码分析

    一.Camera调用过程:      imgsensor起到承上启下的作用,在系统起来时会创建整个camera驱动运行的环境,其中主要的文件和函数如下框图所示,先设备挂载时会调用注册platform设 ...

  3. MTK Camera驱动移植

    对于MTK Camera驱动移植一般分为四部分: 1.硬件IO口配置: 2.Camera驱动移植: 3.上电时序: 4.修改i2c控制器: 硬件电路: 1.GPIO配置 打开 mediatek\dct ...

  4. MTK TP驱动移植

    对于MTK TP驱动移植一般分为六部分: 1.硬件IO口配置: 2.TP驱动移植: 3.I2C通信: 4.中断触发: 5.数据上报: 6.虚拟按键: 硬件电路: 1.GPIO配置 打开 mediate ...

  5. MTK平台驱动调试的资料

    最近要从事MTK6260平台方面的开发工作.工作内容包括BSP调试及部分功能的代码移植.之前没有接触过这类工作内容,所以在网上查找了一些资料,并添加到自己的博客上,方便自己查找. 以下为其他人的资料: ...

  6. MTK SPI驱动开发

    MTK SPI驱动开发 1.由于SPI驱动 MTK封装的比较好,所以比较好处理. 唯一需要注意的是spi使用的全局Buffer必须要放在内存地址为"NONCACHEDZI"的区域直 ...

  7. MTK无线驱动配置文件参数

    MTK无线驱动配置文件参数 MTK的默认配置文件 参数的意义 MTK的默认配置文件 #The word of "Default" must not be removed Defau ...

  8. Camera5 MTK camera驱动框架介绍

    一.概序: 前文已经介绍了camera驱动部分的内容Camera4 MTK camera驱动结构介绍,这里在回顾下之前的框架图, 这篇主要介绍红框部分的内容: imgsensor起到承上启下的作用,在 ...

  9. mtk 电池驱动的电压,电流,温度等数据通过adc通道获取

    mtk 电池驱动的电压,电流,温度等数据通过adc通道获取 pmic BATSNS 引脚电压 bat_vol = battery_meter_get_battery_voltage(KAL_TRUE) ...

最新文章

  1. 世界上最经典的25句话
  2. 双绞线传输距离_光纤传输有哪些特点 光纤传输原理介绍【图文】
  3. media player 控件播放音乐与视频 0130 winform
  4. 如果工作时间固定,居住城市是可以实现的
  5. Zephyr在编译时将二进制文件转化成c语言数组
  6. c#中跨线程调用windows窗体控件
  7. error: ac_nonexistent.h: No such file or directory
  8. 苹果清除感染 XCodeGhost 的应用
  9. 软件需求跟踪矩阵例子
  10. 【原创】Kinect for windows SDK 入门学习资源合辑
  11. mysql2016安装和配置_SQL Server2016正式版安装配置方法图文教程
  12. Mendix开发介绍实用篇(一)
  13. 网格搜索(调参)与数据预处理
  14. java喜好设置_Java中使用Preferences 的 API设置用户偏好
  15. CSS精灵图(sprite)
  16. 边缘检测:更丰富的卷积特征 Richer Convolutional Features for Edge Detection
  17. zend gard加密过期
  18. 求答案 ? 一筐鸡蛋: 1个1个拿,正好拿完。 2个2个拿,还剩1个。 3个3个拿,正好拿完。 4个4个拿,还剩1个。 5个5个拿,还差1个。 6个6个拿,还剩3个。 7个7个拿,还剩4个。 8个8个
  19. position:absolute绝对位置的正确使用
  20. 【蓝桥杯Java_C组·从零开始卷】第四节(附)、河图洛书【九宫格】(卷王必备,不想卷的略过,使用优化暴力破解,与网上莫名其妙的规律不一样)

热门文章

  1. 10大Ubuntu应用程序
  2. windows中的一个小bug
  3. BZOJ 2039 人员雇佣 (最小割)
  4. Problem D. Country Meow 2018ICPC南京
  5. aop日志(记录方法调用日志)
  6. php基础知识和函数
  7. 企业实战|CentOS8安装Zabbix 4.4
  8. top命令的使用查看进程占用
  9. Ubuntu14.04安装build-essential失败,包依赖问题如何解决?
  10. json数据转换异常:net.sf.json.JSONException: java.lang.reflect.InvocationTargetException