當前位置:外匯行情大全網 - 外匯開戶 - 如何在MTK平臺上調試驅動程序

如何在MTK平臺上調試驅動程序

1.生成文件

MXX_GPRS.mak(mcu\make)

Option.mak(mcu\make)

對於同壹個平臺,不同的項目有不同的功能配置。對於驅動調試,需要修改和添加壹些宏開關控件;

基本格式和步驟:

MXX_GPRS.mak:

XXX_XXX = XXX

XXX_XXX =無

XXX_XXX =真

XXX_XXX = FALSE

Option.mak:

ifdef XXX_XXX

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

COM_DEFS += XXX_XXX

endif

endif

代碼中使用XXX_XXX來控制相關代碼;

#如果已定義(XXX_XXX)

//在此添加代碼

#endif

Custominfo.pl(mcu\tools)

該文件是添加類似LCD、image_sensor等模塊時需要修改的文件。在mcu\custom\drv下,這樣ADS編譯系統就可以編譯到這個模塊;

可以參考image_sensor。

if(($ project ne " basic ")& amp;& amp($ project ne " l 1s))& amp;& amp已定義($cmos_sensor)) {

if ($cmos_sensor ne "NONE") {

push(@thatdirs," drv \ \ image _ sensor \ \ $ CMOS _ sensor));

}

}

2.LCM背光;振動器

以SUNRISE_0255_LCM為例。

步驟1:

LCD_MODULE和main _ LCD _ size配置在MXX_GPRS.mak中;

LCD _模塊= SUNRISE_0255_LCM

MAIN_LCD_SIZE = 240X320

將以下內容添加到Option.mak中:

COM _ DEFS _ FOR _ SUNRISE _ 0255 _ LCM = SUNRISE _ 0255 _ LCM hx 8312 COLOR _ LCD TFT _ main LCD QVGA _ main LCD

其中HX8312為LCD的型號;

COLOR_LCD、TFT_MAINLCD和QVGA_MAINLCD是LCD的類型。

QVGA_MAINLCD:240X320

QCIF_MAINLCD: 176X220

QQVGA _ main LCD:120 x160

比如在SUNRISE_0255_LCM的基礎上增加兼容屏;然後在HX8312之後依次添加LCD型號。

如果有子LCD;需要加DUAL _ LCD按順序;COLOR_SUBLCD和型號名稱;

第二步:

在Mcu\custom\drv\LCD目錄下添加SUNRISE_0255_LCM模塊;該目錄被命名為SUNRISE_0255_LCM。

可以參考其他LCM;添加和修改五個文件,即:

lcd.c

lcd_hw.h

lcd_sw.h

液晶顯示器_軟件_公司

lcd_sw_rnd.h

Lcd.c:實現Lcd的驅動接口。

通常有init;睡懶覺;露宿;塊寫入等

Lcd_hw.h:壹般不需要修改;

配置數據地址;命令地址和輸出格式;

配置Lcd的寬度和高度;

Lcd_sw_rnd.h:壹般不需要修改;

第三步:

添加背光控制代碼;

Mcu \自定義\ drv \ misc _ drv \自定義_設備. c

kal _ bool custom _ CFG _ gpio _ set _ level(kal _ uint 8 gpio _ dev _ type,kal_uint8 gpio_dev_level)

{

//使用SUNRISE_0255_LCM控制代碼。

}

GPIO模式和PWM模式;(默認功能是PWM模式)

如果是GPIO模式;然後在函數中加入模擬代碼;

如果是PWM模式;需要根據實際情況修改MCU \ custom \ drv \ misc _ drv \ custom _ HW _ default . c文件中的PWM 1 _ level _ info;即頻率和占空比;

另外,MCU \ Pluto MMI \ MMI \ GPIO \ GPIO SRC \ General Device interface . c有詳細的背光的MMI控制代碼;

另外需要熟悉lcd_if.c(mcu\drv\src)對以上接口的調用;

3.相機模塊;傳感器

暫不討論外接DSP以OV9650為例:

步驟1:

ISP_SUPPORT和CMOS _ SENSOR在MXX_GPRS.mak中配置;

ISP_SUPPORT = TRUE

CMOS_SENSOR = OV9650

相機像素=百萬像素

註:(壹般30萬像素可以插值到654.38+0萬;1.3萬可以插值到200萬像素)

第二步:

在Mcu\custom\drv\image_sensor下添加OV9650目錄;

添加或修改文件:

Camera _ hw.c:模塊電源開/關控制;(GPIO分配取決於硬件資源分配表)

camera _ para . c:ISP和傳感器相關寄存器的配置;在實際調試中,對比效果進行修改;

image_sensor.c:定時;傳感器初始化;電源開/關;預覽;接口實現,如捕獲;

Image_sensor.h:關於傳感器的壹些屬性設置(壹些宏定義);

Camera_info.c:壹般不需要修改;

完成所有功能後;效果調試為主;

主要工具:META;CCT等等;

ISP地址請參考數據表;MTK平臺;

第三步:

需要對以下目錄中的文件有壹定的了解!

媒體\攝像機\;

媒體\視頻\;

plutommi\mtkapp\Camera\

plutommi\mtkapp\Video\

普魯托米\mtkapp\MDI\

特定項目的鍵盤定義和映射以及壹些其他特殊處理;代碼由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__) //幻燈片模式

#如果已定義(__SLIDE_M678)

//在此添加m678鍵盤定義

//第0行(第壹列)

設備密鑰XX,

……

//行1(第二列)

…….

//

…….

#否則

#endif

#elif defined(__PHONE_BAR__) //直桿模型

//

#elif defined(__PHONE_SPIN) //旋轉模式

//

# elif defined(_ _ phone _ clam shell)//翻蓋型號

//

#endif

};

如果除了平臺提供的基本鍵之外,還需要添加特定的鍵定義;除上述內容外,以下幾點需要修改:

interface\hwdrv\kbd_table.h

定義設備密鑰xx;註意順序

#定義設備密鑰XX序列值

plutommi \ MMI \ Framework \ Osl \ Osl src \ key brd . c

假設設備密鑰XX是壹個特定的密鑰。

//定義特定的鍵

const u 16 PresentAllKeys[]=

{

KEY_0,

KEY_1,

KEY_2,

KEY_3,

KEY_4,

KEY_5,

……

//定義特定的鍵

#如果已定義(__SLIDE_M678)

,KEY_XX

#endif

};

//鍵盤映射(註意添加順序要和PresentAllKeys[])壹致)

靜態常量KeyPadMap nKeyPadMap[] = {

{設備_密鑰_0,密鑰_0,密鑰_定時器_ID0,音調_雙音多頻_0,設備_音頻_播放_無限},

{設備_密鑰_1,密鑰_1,密鑰_定時器_ID1,音調_DTMF_1,設備_音頻_播放_無限},

……

……

//映射特定的鍵。

#如果已定義(__SLIDE_M678)

{設備_密鑰_XX,密鑰_XX,密鑰_定時器_IDXX,音調_DTMF_1,設備_音頻_播放_無限},

#endif

};

//定義定時器ID;也就是KEY_TIMER_IDXX

plutommi\mmi\Inc\TimerEvents.h

依次添加key _ timer _ idxx

另外,在drv \ src \ kbdmain.c中。

您可以修改去抖時間;在;按壓時間長;重復時間等參數,滿足特殊需要;

5.耳機檢測;線控駕駛系統

custom \ drv \ misc _ drv \ M678 _ BB \ aux main . c

用於耳機檢測;壹般只需要關心AUX_EINT_NO(通用平臺默認)和SENDKEY_ADC(見auxmain . c);

可以根據硬件的實際情況做壹些相關的調整;

用於線路控制;需要配置按壓/釋放對應的REMOTE_EINT_NO、REMOTE_ADC和ADC值;

具體處理流程請參考平臺_ _ line _ control _耳機_ support _ _ control的代碼;

6.物理輸出核心

MT6226平臺ADC0-ADC6的可用資源;;

以線控為例介紹修改或添加流程:

interface\hwdrv\Bmt.h

typedef枚舉{

vbat_adc_channel=0,

visense_adc_channel,

vbattmp_adc_channel,

……

#如果定義了(__ LINE _ CONTROL _耳機_支持_ _)

遠程adc通道,

#endif

……

} adc _ channel _ type

custom \ drv \ misc _ drv \ M678 _ BB \ ADC _ channel . c

#如果定義了(__ LINE _ CONTROL _耳機_支持_ _)

const kal _ uint 8 ADC _ REMOTE = 6;//假設硬件連接到ADC6。

#endif

kal _ uint 8 custom _ ADC _ get _ channel(ADC _ channel _ type類型)

{

開關(類型)

{

………

#如果定義了(__ LINE _ CONTROL _耳機_支持_ _)

案例遠程_ adc _通道:

return((kal _ uint 8)ADC _ REMOTE);

#endif

………

}

#endif

};

custom \ drv \ misc _ drv \ M678 _ BB \ aux main . c

void aux _ task _ main(task _ entry _ struct * task _ entry _ ptr)

{

#如果定義了(__ LINE _ CONTROL _耳機_支持_ _)

kal _ uint8 remote _ adc _ logic _ id

kal_uint8遠程_adc_no

#endif

……

……

//創建

#如果定義了(__ LINE _ CONTROL _耳機_支持_ _)

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-& gt;task_indx]。task _ ext _ qid & amp;current _ ILM);

開關(current_ilm.msg_id)

{

……

//讀取ADC

案例消息_ ID _讀取_全部_ ADC _通道_請求:

……

#如果定義了(__ LINE _ CONTROL _耳機_支持_ _)

aux _ read _ ADC _ channel(remote _ ADC _ logic _ id);

#endif

……

打破;

……

//銷毀

案例消息_ ID _ BMT _ ADC _測量_完成_CONF:

……

#如果定義了(__ LINE _ CONTROL _耳機_支持_ _)

else if(mea _ done _ ptr-& gt;ADC _ sche _ id = = remote _ ADC _ logic _ id)

{

ADC _ measure _ count++;

remote _ value =(kal _ int 32)mea _ done _ ptr-& gt;伏特;

aux _ remove _ ADC _ channel(remote _ ADC _ logic _ id);

}

#endif

……

}

}

}

被蛤殼中斷的REGISTOR可以添加到上述功能中。

7.EINT

關於EINT的描述,請參考平臺的數據表;

以線控為例介紹修改或添加流程:

interface\hwdrv\Eint.h:

typedef枚舉

{

……

#如果定義了(__ LINE _ CONTROL _耳機_支持_ _)

遠程通道,

#endif

……

} eint _ channel _ type

custom \ drv \ misc _ drv \ M678 _ BB \ Eint _ def . c

#如果定義了(__ LINE _ CONTROL _耳機_支持_ _)

const kal _ uint 8 REMOTE _ EINT _ NO = 3;//假設硬件配置是EINT3。

#endif

kal _ uint 8 custom _ eint _ get _ channel(eint _ channel _ type類型)

{

開關(類型)

{

……

#如果定義了(__ LINE _ CONTROL _耳機_支持_ _)

病例遠程輸入通道:

return((kal _ uint 8)REMOTE _ EINT _ NO);

#endif

……

}

}

custom \ drv \ misc _ drv \ M678 _ BB \ aux main . c

//中斷處理程序

HISR偏遠地區

{

If (remote_state) //高電平

{

//相關處理代碼

}

Else//低級別

{

//相關處理代碼

}

}

//中斷註冊

void aux _ task _ main(task _ entry _ struct * task _ entry _ ptr)

{

kal _ uint8 remote _ eint _ no

……

#如果定義了(__ LINE _ CONTROL _耳機_支持_ _)

remote _ eint _ no = custom _ eint _ get _ channel(remote _ eint _ chann);

EINT_Registration(遠程_eint_no,KAL_TRUE,遠程_state,遠程_EINT_HISR,KAL _ TRUE);

#endif

……

}

註冊中斷時應註意:

中斷觸發模式:電平觸發/邊沿觸發?

去抖:啟用/禁用?

電平觸發是在高電平激活還是在低電平激活。

對於eint 0-eint 3;您可以修改去抖時間;通過以下文件;而eint4-eint7沒有去反跳機制。

custom \ drv \ misc _ drv \ M678 _ BB \ Eint _ def . c

kal _ uint 8 custom _ EINT _ SW _ de bounce _ time _ delay[EINT _ MAX _ CHANNEL]=

{

50,/*EINT0*/

25,/*EINT 1*/

50,/*EINT2*/

50 /*EINT3*/

};

單位:50毫秒

也可以通過以下方法進行修改。

愛因斯坦博士

EINT_Set_HW_Debounce()

EINT_SW_Debounce_Modify()

如功能修改。

8.充電器/USB

參考客戶_ BMT _ v0.1.pdf

相關文件:

custom \ drv \ misc _ drv \ m678 _ bb \ chr _ parameter . c關註事項:

BMT _ customized _ struct BMT _ custom _ chr _ def[]= { };

這是充電相關電壓和電流的設置;

靜態常數kal _ int32 chr _ usb _ detect _ volt

這是充電器/USB檢測到的電壓值;

Mcu\bmt\*。*

Mcu\drv\src\pwic.c

9.觸感控制板

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.羊水栓塞

Custom\audio\M678_BB\afe.c(模擬開關、PA開關等。)

custom \ audio \ m678 _ bb \ audcoeff . c(fir輸入/輸出參數)

custom \ audio \ m678 _ bb \ NVRAM _ default _ audio . c(增益值)

L1audio\afe2.c (AFE管理代碼)

以上是根據硬件給的數據調整的!

11.工作

如何在MTK平臺上使用任務?

以DMB項目為例;請參考以下文件:Dmb _支持控制

自定義\系統\ M678 _ BB \自定義_配置. c

自定義\系統\ M678 _ BB \自定義_配置. h

自定義\drv\DMB\TCC78X\dmb_hw.c

12 Nor/Nand閃存;T-Flash

添加新的NAND:

Drv\src\NAND_MTD.c

靜態常數flash_list NAND_ID_Table[] =

{

//{ ID,planesize(MB ), block size(KB ), pagesize(B ),地址周期,IO總線寬度,mtd子驅動程序}

//添加新的NAND相關信息(參考芯片規格)

}

DA(下載代理)部分代碼(壹般不需要修改)

DA_SRC\src\nand_dev_tbl.c

const NAND _ Device _ S g _ NandFlashDevTbl[]=

{

//添加新的NAND信息(參考芯片規格)

};

添加新的Nor閃存

DA_SRC\src\flash_dev_tbl.c

const Nor _ Device _ S g _ FlashDevTbl[]=

{

//添加新的Nor信息(參考芯片規格)

};

DA的修改;需要為Flash下載工具重新生成DA文件。

  • 上一篇:如何判斷MACD的偏差?
  • 下一篇:塞浦路斯外匯監管許可證
  • copyright 2024外匯行情大全網