史上最全的MTK驱动调试.docx

上传人:b****6 文档编号:5552181 上传时间:2022-12-19 格式:DOCX 页数:18 大小:21.55KB
下载 相关 举报
史上最全的MTK驱动调试.docx_第1页
第1页 / 共18页
史上最全的MTK驱动调试.docx_第2页
第2页 / 共18页
史上最全的MTK驱动调试.docx_第3页
第3页 / 共18页
史上最全的MTK驱动调试.docx_第4页
第4页 / 共18页
史上最全的MTK驱动调试.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

史上最全的MTK驱动调试.docx

《史上最全的MTK驱动调试.docx》由会员分享,可在线阅读,更多相关《史上最全的MTK驱动调试.docx(18页珍藏版)》请在冰豆网上搜索。

史上最全的MTK驱动调试.docx

史上最全的MTK驱动调试

1.             makefile

MXX_GPRS.mak(mcu\make)

Option.mak(mcu\make)

 

对于同一个平台,不同的项目有着不同的功能配置。

对于驱动调试来说,需要修改和添加一些宏开关控制;

 

基本格式和步骤:

MXX_GPRS.mak :

 

XXX_XXX  =XXX

XXX_XXX =NONE

XXX_XXX  =TRUE

XXX_XXX  =FALSE

 

Option.mak:

 

ifdefXXX_XXX

ifneq($(strip$(XXX_XXX)),FALSE)

        COM_DEFS    +=XXX_XXX

endif

endif

 

代码中就使用XXX_XXX来控制相关代码;

#ifdefined(XXX_XXX)

//addcodehere

#endif

 

以MT6226(05c)平台为例:

列举一些修改比较频繁的开关:

 

 

MT6226A

MT6226B

MT6226M

MT6227A

MT6227B

PLATFORM

MT6226

MT6226

MT6226M

MT6227A

MT6227B

CHIP_VER

S00

S01

S01

S00

S01

LCD_MODULE

用于LCMModule控制;详细见No.2

CUSTOM_CFLAGS

如用JTAG进行DEBUG需打开此开关;注意关闭WatchDog

EXT_CAM_MODULE

如用外部DSP来控制Sensor;需用到此开关;详见No.3

ISP_SUPPORT

如Camera没有外挂DSP需打开此开关;

CMOS_SENSOR

用以区分Sensor的类型;如OV7660;OV9650等

NOR_FLASH_TYPE

所用NORFlash的类型;现一般是AMDSeries;

MSDC_CARD_SUPPORT_TYPE

用以是否支持T卡的开关;不支持为NONE;支持为MSDC_SD_MMC

BLUETOOTH_SUPPORT

用以是否支持蓝牙的开关;不支持为NONE;支持为所用芯片的类型;

TOUCH_PANEL_SUPPORT

用以是否支持触摸屏的开关;不支持为FALSE;支持为TRUE;

MOTION_SENSOR_SUPPORT

用以是否支持Motionsensor的开关;不支持为NONE;支持为所用芯片类型

MAIN_LCD_SIZE

所用LCD的大小;如240X320;176X220;120X160等

FM_RADIO_CHIP

用以是否支持FM功能;不支持为NONE;支持为所用芯片类型;

NAND_SUPPORT

用以是否支持NANDFLASH;不支持为FASLE;支持为TRUE

PHONE_TYPE

滑盖机:

SLIDE;翻盖机:

CLAMSHELL;平板机:

BAR;旋转:

SPIN

PLATFORM_NAME

项目名称;

CAMERA_PIXEL

所用Sensor象素;默认30万;130万:

ONE_MEGA_PIXEL;200万:

TWO_MEGA_PIXEL等等

WEBCAM_SUPPORT

用以是否支持WebCamera功能开关;支持为TRUE;不支持为FALSE

ect…….

 

 

其他一些开关视项目而定;可以会修改;可能会添加一些开关。

 

Custominfo.pl(mcu\tools)

这个文件是当在mcu\custom\drv下添加与LCD,image_sensor等类似的模块时,需要修改此文件以便ADS编译系统能编译到此模块下的文件;

可以参考image_sensor。

if(($projectne"basic")&&($projectne"l1s")&&defined($cmos_sensor)){

  if($cmos_sensorne"NONE"){

    push(@thatdirs,"drv\\image_sensor\\$cmos_sensor");

  }

}

 

 

 

2.LCM;Backlight;Vibrator

以SUNRISE_0255_LCM为例

步骤1:

MXX_GPRS.mak中配置LCD_MODULE和MAIN_LCD_SIZE;

LCD_MODULE = SUNRISE_0255_LCM

MAIN_LCD_SIZE=240X320

 

Option.mak中加入:

COM_DEFS_FOR_SUNRISE_0255_LCM  =SUNRISE_0255_LCMHX8312COLOR_LCDTFT_MAINLCDQVGA_MAINLCD

其中HX8312为LCD的型号;

COLOR_LCD,TFT_MAINLCD,QVGA_MAINLCD为LCD的类型

QVGA_MAINLCD:

240X320

QCIF_MAINLCD:

   176X220

QQVGA_MAINLCD:

120X160

 

如在SUNRISE_0255_LCM的基础上添加兼容屏;则在HX8312后面顺序加入LCD的型号

如果有SubLCD;则需要顺序加入DUAL_LCD;COLOR_SUBLCD以及型号名称;

步骤2:

Mcu\custom\drv\LCD目录下添加SUNRISE_0255_LCM模块;目录以SUNRISE_0255_LCM为名。

可以参考其他LCM;加入和修改5个文件分别为:

lcd.c

lcd_hw.h

lcd_sw.h

lcd_sw_inc.h

lcd_sw_rnd.h

 

lcd.c:

实现LCD的驱动接口

一般有init; sleepin;sleepout;blockwrite等

lcd_hw.h:

 一般不需要修改;

lcd_sw.h:

  配置dataaddress;commandaddress和outputformat;

lcd_sw_inc.h:

配置LCDWIDTH和HEIGHT;

lcd_sw_rnd.h:

 一般不需修改;

 

步骤3:

加入背光控制代码;

Mcu\custom\drv\misc_drv\custom_equipment.c

kal_boolcustom_cfg_gpio_set_level(kal_uint8gpio_dev_type,kal_uint8gpio_dev_level)

{

    //用SUNRISE_0255_LCM来控制代码

}

 

GPIO模式和PWM模式;(函数默认是PWM模式)

如果是GPIO模式;则在上述函数中加入模拟代码;

如果是PWM模式;则需要根据实际情况在Mcu\custom\drv\misc_drv\custom_hw_default.c文件中修改PWM1_Level_Info;即频率和占空比;

 

另外在mcu\plutommi\mmi\gpio\gpioSrc\GeneralDeviceInterface.c中有详细的MMI对背光的控制代码;

 

另外还需熟悉lcd_if.c(mcu\drv\src)对上述接口的调用;

 

 

 

3.Cameramodule;Sensor

外挂DSP暂不讨论;以OV9650为例:

步骤1:

MXX_GPRS.mak中配置ISP_SUPPORT和CMOS_SENSOR;

ISP_SUPPORT = TRUE

CMOS_SENSOR =OV9650

  CAMERA_PIXEL= ONE_MEGA_PIXEL

注:

(一般30万象素可以插值到100万;130万可以插值到200万象素)

 

步骤2:

  Mcu\custom\drv\image_sensor下添加OV9650目录;

添加或修改文件:

  camera_hw.c:

ModulePoweron/off 控制;(GPIO分配要看硬件的资源分配表)

  camera_para.c:

 ISP、Sensor相关寄存器配置;在实际调试中对比效果来修改;

  image_sensor.c:

timing;sensorinit;poweron/off;preview;capture等接口实现;

  image_sensor.h:

有关sensor一些属性设置(一些宏定义);

   camera_info.c:

 一般不需修改;

 

在完成所有的功能之后;效果调试是主要工作;

主要工具:

META;CCT等;

关于ISPAddress可参考MTK平台的DataSheet;

 

步骤3:

   需对以下目录的文件有一定的了解!

media\camera\;

media\video\;

plutommi\mtkapp\Camera\

plutommi\mtkapp\Video\

plutommi\mtkapp\MDI\

 

 

 

4.Keypad

按键分布图(可对照特定项目的硬件资源分配表)

 

KCOL0

KCOL1

KCOL2

KCOL3

KCOL4

KCOL5

KCOL6

KROW0

KEY_XX

KEY

KEY

KEY

KEY

KEY

KEY

KROW1

KEY

KEY

KEY

KEY

KEY

KEY

KEY

KROW2

KEY

KEY

KEY

KEY

KEY

KEY

KEY

KROW3

KEY

KEY

KEY

KEY

KEY

KEY

KEY

KROW4

KEY

KEY

KEY

KEY

KEY

KEY

KEY

KROW5

KEY

KEY

KEY

KEY

KEY

KEY

KEY

 

对于特定项目的键盘的定义和映射以及其他一些特殊的处理;代码用PHONE_TYPE和PLATFORM_NAME的组合来控制;

如  PHONE_TYPE = SLIDE

PLATFORM_NAME = M678

 

则代码控制如下:

custom\drv\misc_drv\M678_BB\keypad_def.c

constkeypad_struct  keypad_custom_def={ 

#if defined(__PHONE_SLIDE__) //滑盖机型

    #ifdefined(__SLIDE_M678)

    //addm678keypaddefinehere

    //ROW0(第一列)

DEVICE_KEY_XX,

……

//ROW1(第二列)

…….

//

…….

    #else

    #endif

#elifdefined(__PHONE_BAR__)//直板机型

    //

#elifdefined(__PHONE_SPIN)  //旋转机型

    //

#elifdefined(__PHONE_CLAMSHELL)//翻盖机型

    //

#endif

};

 

如果除了平台提供的基本的按键外还需添加特定的按键定义;则除了上述外还需修改以下几处:

interface\hwdrv\kbd_table.h

定义DEVICE_KEY_XX;注意顺序

#define DEVICE_KEY_XX    顺序值

 

plutommi\mmi\Framework\Osl\OslSrc\KeyBrd.c

假设DEVICE_KEY_XX为特定的按键

//定义特定的按键

constU16PresentAllKeys[]=

{

        KEY_0,

        KEY_1,

        KEY_2,

        KEY_3,

        KEY_4,

        KEY_5,

……

        //定义特定的按键

#ifdefined(__SLIDE_M678)

KEY_XX

#endif

};

//键盘映射(注意加入顺序要与PresentAllKeys[]一致)

staticconstKeyPadMapnKeyPadMap[]={

    {DEVICE_KEY_0,KEY_0,KEY_TIMER_ID0, TONE_DTMF_0,   DEVICE_AUDIO_PLAY_INFINITE},

{DEVICE_KEY_1,KEY_1,KEY_TIMER_ID1,  TONE_DTMF_1,  DEVICE_AUDIO_PLAY_INFINITE},

……

……

//映射特定的按键

#ifdefined(__SLIDE_M678)

{DEVICE_KEY_XX,KEY_XX,KEY_TIMER_IDXX,TONE_DTMF_1,    DEVICE_AUDIO_PLAY_INFINITE},

#endif

};

//定义TIMERID;即KEY_TIMER_IDXX

plutommi\mmi\Inc\TimerEvents.h

顺序加入KEY_TIMER_IDXX;

 

另外在drv\src\kbdmain.c

中可以修改debouncetime; LongpressTime; RepeatTime等参数来满足特殊的需要;

 

 

 

5.耳机检测;线控

custom\drv\misc_drv\M678_BB\auxmain.c

对于耳机检测;一般只需关心AUX_EINT_NO(一般平台默认)和SENDKEY_ADC(见auxmain.c);

可根据硬件的实际情况作一些相关的调整;

 

对于线控来说;需要配置REMOTE_EINT_NO、 REMOTE_ADC以及按键Press/Release对应的ADC值;

具体的处理过程可参考26平台__LINE_CONTROL_EARPHONE_SUPPORT__控制的代码;

6.ADC

MT6226平台可用资源ADC0-ADC6;

 

以线控为例,介绍一下修改或者添加流程:

interface\hwdrv\Bmt.h

typedefenum{

   vbat_adc_channel=0,

   visense_adc_channel,

   vbattmp_adc_channel,

……

#ifdefined(__LINE_CONTROL_EARPHONE_SUPPORT__)  

remote_adc_channel,

   #endif

……

}adc_channel_type;

 

custom\drv\misc_drv\M678_BB\adc_channel.c

#ifdefined(__LINE_CONTROL_EARPHONE_SUPPORT__)

constkal_uint8ADC_REMOTE=6;  //假设硬件接ADC6

#endif

 

kal_uint8custom_adc_get_channel(adc_channel_typetype)

{

     Switch(type)

{

     ………

#ifdefined(__LINE_CONTROL_EARPHONE_SUPPORT__)

         caseremote_adc_channel:

              return((kal_uint8)ADC_REMOTE); 

         #endif

     ………

}    

#endif

};

 

custom\drv\misc_drv\M678_BB\auxmain.c

voidaux_task_main(task_entry_struct*task_entry_ptr)

{

#ifdefined(__LINE_CONTROL_EARPHONE_SUPPORT__)

kal_uint8            remote_adc_logic_id;

kal_uint8          remote_adc_no

#endif

……

……

//创建

#ifdefined(__LINE_CONTROL_EARPHONE_SUPPORT__)

remote_adc_no  =custom_adc_get_channel(remote_adc_channel)

     remote_adc_logic_id=adc_sche_create_object(MOD_AUX,remote_adc_no,40,1,KAL_TRUE);

     #endif

     ……

     while

(1)

{

receive_msg_ext_q(task_info_g[task_entry_ptr->task_indx].task_ext_qid,¤t_ilm);     

      switch(current_ilm.msg_id)

      {

     ……

     //读ADC

     caseMSG_ID_READ_ALL_ADC_CHANNEL_REQ:

     ……

         #ifdefined(__LINE_CONTROL_EARPHONE_SUPPORT__)

          aux_read_adc_channel(remote_adc_logic_id);

          #endif

……

break;

     ……

     //销毁

     caseMSG_ID_BMT_ADC_MEASURE_DONE_CONF:

         ……

          #ifdefined(__LINE_CONTROL_EARPHONE_SUPPORT__)

          elseif(mea_done_ptr->adc_sche_id==remote_adc_logic_id)

         {

              adc_measure_count++;

              remote_value=(kal_int32)mea_done_ptr->volt;

              aux_remove_adc_channel(remote_adc_logic_id);  

         }

         #endif

         ……

}     

}

}

CLAMSHELL中断的REGISTOR可以在上述函数中添加

 

 

 

 

 

7.EINT

关于EINT的描述请参考平台的datasheet;

以线控为例,介绍一下修改或者添加流程:

 

interface\hwdrv\Eint.h:

typedefenum

{

     ……

     #ifdefined(__LINE_CONTROL_EARPHONE_SUPPORT__)    

     remote_eint_chann,

     #endif

     ……

}eint_channel_type;

 

custom\drv\misc_drv\M678_BB\Eint_def.c

#ifdefined(__LINE_CONTROL_EARPHONE_SUPPORT__)

     constkal_uint8REMOTE_EINT_NO=3;  //假设硬件配置为EINT3

#endif

 

kal_uint8custom_eint_get_channel(eint_channel_typetype)

{

     switch(type)

     {

         ……

         #ifdefined(__LINE_CONTROL_EARPHONE_SUPPORT__)    

         caseremote_eint_chann:

              return((kal_uint8)REMOTE_EINT_NO);

         #endif

         ……

}

}

 

custom\drv\misc_drv\M678_BB\auxmain.c

//中断处理函数

voidREMOTE_EINT_HISR(void)

{   

     if(remote_state)//高电平

     {   

         //相关处理代码

     }

     else//低电平

     {   

         //相关处理代码

     }

}

//中断注册

voidaux_task_main(task_entry_struct*task_entry_ptr)

{

     kal_uint8remote_eint_no;

     ……

#ifdefined(__LINE_CONTROL_EARPHONE_SUPPORT__)

     remote_eint_no=custom_eint_get_channel(remote_eint_chann);

     EINT_Registration(remote_eint_no,KAL_TRUE,remote_state,REMOTE_EINT_HISR,KAL_TRUE);

     #endif 

……

}

在注册中断时要注意:

中断触发方式:

电平触发/边沿触发?

debounce:

Enable/Disable?

电平触发高电平有效还是低电平有效等问题。

 

对于Eint0 - Eint3;可以通过下面的文件来修改debouncetime;而Eint4 - Eint7没有debounce机制

custom\drv\misc_drv\M678_BB\Eint_def.c

kal_uint8custom_eint_sw_debounce_time_delay[EINT_MAX_CHANNEL]=

{

   50,    /*EINT0*/

   25,    /*EINT1*/    

   50,    /*EINT2*/

   50     /*EINT3*/

};

单位:

50ms

 

也可通过下述方法来修改

EINTaddr()

EINT_Set_HW_Debounce()

EINT_SW_Debounce_Modify()

等函数来修改

 

 

 

 

8.Charger/USB

可参考Customer_BMT_V0.1.pdf

相关文件:

custom\drv\misc_drv\M678_BB\chr_parameter.c   关注点:

bmt_customized_struct  bmt_custom_chr_def[]={};

此为充电相关电压和电流的设置;

staticconstkal_int32 chr_usb_detect_volt;

此为CHARGER/USB检测的电压值;

 

Mcu\bmt\*.*

Mcu\drv\src\pwic.c

 

 

 

9.Touc

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1