詳解MTK平臺驅(qū)動調(diào)試指南GPIO設(shè)置篇
MTK平臺驅(qū)動調(diào)試指南是本文要介紹的內(nèi)容,主要是來了解并學(xué)習(xí)MTK應(yīng)用平臺上驅(qū)動調(diào)試的相關(guān)內(nèi)容,不多說,具體內(nèi)容的實現(xiàn)來看本文詳解。
GPIO設(shè)置篇
一、GPIO有關(guān)的函數(shù)
1、GPIO_ModeSetup:
函數(shù)原型:voidGPIO_ModeSetup(kal_uint16pin,kal_uint16conf_dada)
功能:設(shè)置GPIO的工作模式是作為GPIO,還是作為專有功能接口。
參數(shù):
pin:GPIO的pin腳號,對應(yīng)于原理圖上MTK62XX主CPU芯片的上的GPIO標(biāo)號
conf_dada:值有0~3。其中0是表示作為GPIO模式,其他根據(jù)專有功能的不同進(jìn)行設(shè)置。
2、GPO_InitIO
函數(shù)原型:voidGPIO_InitIO(chardirection,charport)
功能:初始化GPIO的工作方向是作為輸入,還是作為輸出
參數(shù):
direction:工作方向,0表示輸入,1表示輸出
port:GPIO的pin腳
3、GPIO_ReadIO
函數(shù)原型:charGPIO_ReadIO(charport)
功能:從GPIO讀取數(shù)據(jù)
參數(shù):
port:GPIO的pin腳
4、GPIO_WriteIO
函數(shù)原型:voidGPIO_WriteIO(kal_chardata,kal_charport)
功能:往GPIO寫數(shù)據(jù)
參數(shù):
data:1表示給高電平,0表示給低電平
port:GPIO的pin腳
備注:這些函數(shù)在Gpio.C中可以找到。
二、GPIO模式設(shè)置
GPIO口在系統(tǒng)上電的時候,有的是默認(rèn)高電平,有的是默認(rèn)低電平,這是MCU內(nèi)部決定的,軟件無法更改,但是在系統(tǒng)開機(jī)過程中,會對GPIO進(jìn)行初始化,MCU中有幾個GPIO模式初始化寄存器,通過這個寄存器給GPIO設(shè)置初始模式。
例如:以下這個寄存器就是用來設(shè)置0-7號GPIO的模工作模式的。
這個初始化過程在Gpio_Drv.C中的函數(shù)GPIO_init()中,項目開始的時候,先要檢查這個部分的模式設(shè)置是否正確。
三、各個功能模塊的GPIO設(shè)置
1、LCD背光,馬達(dá)
有的LCD背光是靠GPIO進(jìn)行控制的,有的則靠PMIC進(jìn)行控制。但不管那個方式進(jìn)行控制,都只需修改Custom_equipment.c中的相關(guān)部分就可以了,具體如下:
首先,檢查數(shù)組
- GPIO_MAP_ENTRYgpio_map_tbl[]={
- {GPIO_VAILD,GPIO_PORT_24,netname[GPIO_LABEL_LCD_BACKLIGHT],NULL},
- };
將沒有使用的GPIO,用GPIO_INVALID給屏蔽掉。
然后,修改函數(shù)custom_cfg_gpio_set_level,在對應(yīng)的GPIO類型上將控制函數(shù)添加進(jìn)去即可。比如:
- switch(gpio_dev_type)
- {
- caseGPIO_DEV_LED_MAINLCD:
- if(gpio_dev_level==LED_LIGHT_LEVEL0)//LEVEL0-LEVEL5是背光由若到強(qiáng)的控制,LEVEL0表示關(guān)閉背光
- 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、藍(lán)牙
在文件bt_hw_define.h中參照原理圖進(jìn)行對應(yīng)GPIO的修改。
- #defineBT_GPIO_RESET52//39//GPIO_39:PMICreset
- #defineBT_GPIO_DSC36//;4//GPIO_4:todisconnectRFCommlink
- #defineBT_GPIO_POWER4//12//GPIO_12:Power
- #defineBT_GPIO_DATASELECT0//;3//GPIO_3:DataSelect
3、Camera
在文件Camera_hw.c和sccb.h中參照原理圖進(jìn)行對應(yīng)GPIO的修改。
【Camera_hw.c】
- #defineMODULE_POWER_PIN6//GPIONO.
- #defineMODULE_RESET_PIN12//GPIONO.
- #defineMODULE_CMPDN_PIN13//GPIONO.
【sccb.h】
- #defineSCCB_SERIAL_CLK_PIN8
- #defineSCCB_SERIAL_DATA_PIN9
4、TouchPanel
在文件Touch_panel_spi.h中參照原理圖進(jìn)行對應(yīng)GPIO的修改
- #defineSPI_DIN_PIN1//17
- #defineSPI_CLK_PIN8//20
- #defineSPI_DOUT_PIN38//22
- #defineSPI_CS_PIN9//23
- #defineSPI_BUSY_PIN5//21
四、總結(jié)
GPIO的設(shè)置相對來講比較簡單,只要仔細(xì)參對原理圖,基本上就可以將GPIO配置好。當(dāng)然有些時候GPIO配置好了也達(dá)不到效果,就需要和硬件工程師一起來進(jìn)行檢測分析,測量對應(yīng)電路的工作電壓或電流,來判斷工作是否正常??傊谇捌诘恼{(diào)試方面,多跟硬件工程師溝通、討論、分析,會很快解決問題。
中斷調(diào)試篇
中斷調(diào)試一般來說包括以下幾個方面,一一做簡單介紹:
1、中斷號匹配
這個部分在文件eint_def.c中進(jìn)行設(shè)置,參照原理圖設(shè)置即可。
2、中斷觸發(fā)方式的設(shè)置
在文件eint_def.c中,首先要對中斷的觸發(fā)響應(yīng)時間進(jìn)行設(shè)置,是在數(shù)組變量custom_eint_sw_debounce_time_delay中。一般情況下這個部分是不用動的,但有時候中斷觸發(fā)有問題的時候,這就是一個調(diào)試點。比如對于Touchpanel的中斷,對應(yīng)的響應(yīng)時間一般是0,如果不是0,就需要修改。
另外,因為中斷觸發(fā)分電平觸發(fā)和邊沿觸發(fā),電平觸發(fā)又分高電平觸發(fā)和低電平觸發(fā),邊沿觸發(fā)又分為上升沿觸發(fā)和下降沿觸發(fā),因此先需要跟硬件工程師了解對應(yīng)的中斷觸發(fā)方式,然后在對應(yīng)的中斷初始化的地方修改觸發(fā)方式。
3、中斷處理流程調(diào)試
有時候中斷設(shè)置好了,對應(yīng)功能也不能正常使用,那么就需要調(diào)試中斷處理流程了,需要增加trace,一般我們會用系統(tǒng)帶的trace函數(shù)kal_prompt_trace,有時候調(diào)試這個函數(shù)不能正常工作,那么我們就用這個文件中的函數(shù)sys_print打印trace信息,要使用這個函數(shù),需要在系統(tǒng)最開始啟動的時候,調(diào)用sys_uart_init進(jìn)行初始化。這個函數(shù)庫是在6228平臺上做的,可能在其他平臺上寄存器因為不同,需要進(jìn)行修改。
往往在調(diào)試的過程中,經(jīng)常發(fā)現(xiàn)是給芯片供電方面出了問題。因為有時候MTK給過來的代碼,在他們的參考設(shè)計上是一種供電方式,但是在我們的設(shè)計上可能就是不一樣了。所以在找到芯片供電部分代碼的時候,查找對應(yīng)資料,看是否調(diào)用正常。
dbg_print怎么打開?
哪個宏控制呢?
DRV_DEBUG打開后串口還是沒有信息出來
- make\drv\drv.def
中加入DRV_DEBUG
我一般在dbgprint.c里面直接修改
- #if1//defDRV_DEBUG
- #if1//(!defined(IC_MODULE_TEST))
- {
- charbuffer[50];
- sprintf(buffer,"ERROR");
- rmmi_write_to_uart((kal_uint8*)buffer,strlen(buffer),KAL_TRUE);
- }
小結(jié):詳解MTK平臺驅(qū)動調(diào)試指南的內(nèi)容介紹完了,希望通過本文的學(xué)習(xí)能對你有所幫助!