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文件。