1. 首页
  2. 技术文章

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: ifdef XXX_XXX ifneq ($(strip $( XXX_XXX)),FALSE) COM_DEFS += XXX_XXX endif endif 代码中就使用XXX_XXX来控制相关代码;#if defined(XXX_XXX) //add code here #endif 以MT6226(05c)平台为例:列举一些修改比较频繁的开关:

MTK平台进行驱动调试
MTK平台进行驱动调试

Custominfo.pl(mcu\tools) 这个文件是当在mcu\custom\drv下添加与LCD,image_sensor等类似的模块时,需要修改此文件以便ADS编译系统能编译到此模块下的文件;可以参考image_sensor。if (($project ne “basic”) && ($project ne “l1s”) && defined($cmos_sensor)) { if ($cmos_sensor ne “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_LCM HX8312 COLOR_LCD

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

MTK平台进行驱动调试
对于特定项目的键盘的定义和映射以及其他一些特殊的处理;代码用PHONE_TYPE和PLATFORM_NAME的组合来控制;如 PHONE_TYPE = SLIDE PLATFORM_NAME = M678 则代码控制如下:custom\drv\misc_drv\M678_BB\keypad_def.c const keypad_struct keypad_custom_def = { #if defined(__PHONE_SLIDE__) //滑盖机型 #if defined(__SLIDE_M678) //add m678 keypad define here //ROW 0(第一列) DEVICE_KEY_XX, …… //ROW 1(第二列) ……. // ……. #else #endif #elif defined(__PHONE_BAR__) //直板机型 // #elif defined(__PHONE_SPIN) //旋转机型 // #elif defined(__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为特定的按键//定义特定的按键const U16 PresentAllKeys[]= { KEY_0, KEY_1, KEY_2, KEY_3,
 
 
KEY_4, KEY_5, …… //定义特定的按键#if defined(__SLIDE_M678) ,KEY_XX #endif }; //键盘映射(注意加入顺序要与PresentAllKeys[]一致)static const KeyPadMap nKeyPadMap[] = { {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}, …… …… //映射特定的按键#if defined(__SLIDE_M678) {DEVICE_KEY_XX, KEY_XX, KEY_TIMER_IDXX, TONE_DTMF_1, DEVICE_AUDIO_PLAY_INFINITE}, #endif };//定义TIMER ID;即KEY_TIMER_IDXX plutommi\mmi\Inc\TimerEvents.h 顺序加入KEY_TIMER_IDXX;另外在drv\src\kbdmain.c 中可以修改debounce time; Long press Time; Repeat Time等参数来满足特殊的需要;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 typedef enum { vbat_adc_channel=0, visense_adc_channel, vbattmp_adc_channel, …… #if defined(__LINE_CONTROL_EARPHONE_SUPPORT__) remote_adc_channel, #endif …… } adc_channel_type; custom\drv\misc_drv\M678_BB\adc_channel.c #if defined(__LINE_CONTROL_EARPHONE_SUPPORT__) const kal_uint8 ADC_REMOTE=6; //假设硬件接ADC6 #endif kal_uint8 custom_adc_get_channel(adc_channel_type type) { Switch(type) { ……… #if defined(__LINE_CONTROL_EARPHONE_SUPPORT__) case remote_adc_channel: return ((kal_uint8)ADC_REMOTE); #endif ……… } #endif }; custom\drv\misc_drv\M678_BB\auxmain.c void aux_task_main( task_entry_struct * task_entry_ptr ) { #if defined(__LINE_CONTROL_EARPHONE_SUPPORT__) kal_uint8 remote_adc_logic_id; kal_uint8 remote_adc_no #endif …… ……
 
 
//创建#if defined(__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, &current_ilm); switch(current_ilm.msg_id) { …… //读ADC case MSG_ID_READ_ALL_ADC_CHANNEL_REQ: …… #if defined(__LINE_CONTROL_EARPHONE_SUPPORT__) aux_read_adc_channel(remote_adc_logic_id); #endif …… break; …… //销毁 case MSG_ID_BMT_ADC_MEASURE_DONE_CONF: …… #if defined(__LINE_CONTROL_EARPHONE_SUPPORT__) else if (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: typedef enum { …… #if defined(__LINE_CONTROL_EARPHONE_SUPPORT__) remote_eint_chann, #endif …… } eint_channel_type; custom\drv\misc_drv\M678_BB\Eint_def.c #if defined(__LINE_CONTROL_EARPHONE_SUPPORT__) const kal_uint8 REMOTE_EINT_NO=3; //假设硬件配置为EINT3 #endif kal_uint8 custom_eint_get_channel(eint_channel_type type) { switch(type) { …… #if defined(__LINE_CONTROL_EARPHONE_SUPPORT__) case remote_eint_chann: return ((kal_uint8)REMOTE_EINT_NO); #endif …… } } custom\drv\misc_drv\M678_BB\auxmain.c //中断处理函数void REMOTE_EINT_HISR(void) { if (remote_state) //高电平 { //相关处理代码 } else//低电平 { //相关处理代码 } }
 
 
//中断注册void aux_task_main( task_entry_struct * task_entry_ptr ) { kal_uint8 remote_eint_no; …… #if defined(__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;可以通过下面的文件来修改debounce time;而Eint4 - Eint7没有debounce机制custom\drv\misc_drv\M678_BB\Eint_def.c kal_uint8 custom_eint_sw_debounce_time_delay[EINT_MAX_CHANNEL] = { 50, /*EINT0*/ 25, /*EINT 1*/ 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[] = {}; 此为充电相关电压和电流的设置;
 
 
static const kal_int32 chr_usb_detect_volt;此为CHARGER/USB检测的电压值;Mcu\bmt\*.* Mcu\drv\src\pwic.c 9.Touch panel custom\drv\misc_drv\M678_BB\touch_panel_custom.c custom\drv\misc_drv\M678_BB\touch_panel_custom.h custom\drv\misc_drv\M678_BB\touch_panel_spi.c custom\drv\misc_drv\M678_BB\touch_panel_spi.h drv\src\touch_panel.c drv\src\touch_panel_main.c 修改点包括:GPIO分配;ADC值;坐标值;中断配置;压力检测等具体修改可参考代码;10. AFE custom\audio\M678_BB\afe.c(模拟开关、PA切换等)custom\audio\M678_BB\audcoeff.c(FIR Input/Output参数)custom\audio\M678_BB\nvram_default_audio.c(GAIN值)l1audio\afe2.c (AFE管理代码) 以上根据硬件给出的数据来进行调整!11.Task 如何在MTK平台使用Task?以DMB项目为例;请参照下述文件;DMB_SUPPPORT控制 custom\system\M678_BB\custom_config.c custom\system\M678_BB\custom_config.h custom\drv\DMB\TCC78X\dmb_hw.c 12 Nor/Nand Flash; T-Flash 添加新的NAND:Drv\src\NAND_MTD.c static const flash_list NAND_ID_Table[] = {
 
 
//{ ID, planesize in MB, blocksize in KB, pagesize in B, address cycle, IO bus width, mtd sub driver} //添加新的NAND的相关信息(参考芯片Spec)} DA(Download Agent)部分代码(一般不需修改)DA_SRC\src\nand_dev_tbl.c Const NAND_Device_S g_NandFlashDevTbl[] = { //加入新的NAND信息(参考芯片Spec)}; 添加新的Nor Flash DA_SRC\src\flash_dev_tbl.c Const Nor_Device_S g_FlashDevTbl[] = { //加入新的Nor信息(参考芯片Spec)}; 对于DA的修改;需重新生成DA文件用于Flash Download Tool 13. 其他功能调试其他的调试可根据实际情况参考本平台或者其他平台。

MSDC_SD_MMC BLUETOOTH_SUPPORT 用以是否支持蓝牙的开关;不支持为NONE;支持为所用芯片的类型;TOUCH_PANEL_SUPPORT 用以是否支持触摸屏的开关;不支持为FAL SE;支持为TRUE;MOTION_SENSOR_SUPPORT 用以是否支持Motion sensor的开关;不支持为NONE;支持为所用芯片类型MAIN_LCD_SIZE 所用LCD的大小;如240X320;176X220;120X160等FM_RADIO_CHIP 用以是否支持FM功能;不支持为NONE;支持为所用芯片类型;NAND_SUPPORT 用以是否支持NAND FLASH;不支持为FASL E;支持为TRUE PHONE_TYPE 滑盖机: SLIDE;翻盖机:CLAMSHELL;平板机:BAR;旋转:SPIN PLATFORM_NAME 项目名称;CAMERA_PIXEL 所用Sensor象素;默认30万;130万:ONE_MEGA_PIXEL; 200万:TWO_MEGA_PIXEL等等WEBCAM_SUPPORT 用以是否支持We b C a me r a功能开关;支持为TRUE;不支持为FAL SE ect……. 其他一些开关视项目而定;可以会修改;可能会添加一些开关。Custominfo.pl(mcu\tools) 这个文件是当在mcu\custom\drv下添加与LCD,image_sensor等类似的模块时,需要修改此文件以便ADS编译系统能编译到此模块下的文件;

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站不拥有所有权,不承担相关法律责任。如发现有侵权/违规的内容, 联系QQ1841324605,本站将立刻清除。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

联系我们

服务热线:130-0886-1890

QR code