1. 程式人生 > >MTK平臺驅動除錯指南

MTK平臺驅動除錯指南

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

                 

Ø      GPIO設定篇

一、GPIO有關的函式

1.GPIO_ModeSetup:

函式原型:void GPIO_ModeSetup(kal_uint16 pin, kal_uint16 conf_dada)

功能:設定GPIO的工作模式是作為GPIO,還是作為專有功能介面。

引數:

pin:GPIO 的pin腳號,對應於原理圖上MTK62XX 主CPU晶片的上的GPIO標號

conf_dada:值有0~3。其中0是表示作為GPIO模式,其他根據專有功能的不同進行設定。

 

2.GPO_InitIO

函式原型:void GPIO_InitIO(char direction, char port)

功能:初始化GPIO的工作方向是作為輸入,還是作為輸出

引數:

    direction:工作方向,0表示輸入,1表示輸出

    port:GPIO的pin腳

 

 

3.GPIO_ReadIO

函式原型:char GPIO_ReadIO(char port)

功能:從GPIO讀取資料

引數:

    port:GPIO的pin腳

 

4.GPIO_WriteIO

函式原型:void GPIO_WriteIO(kal_char data, kal_char port)

功能:往GPIO寫資料

引數:

data: 1表示給高電平,0表示給低電平

    port:GPIO的pin腳

 

備註:這些函式在Gpio.C中可以找到。

 

 

二、GPIO模式設定

    GPIO口在系統上電的時候,有的是預設高電平,有的是預設低電平,這是MCU內部決定的,軟體無法更改,但是在系統開機過程中,會對GPIO進行初始化,MCU中有幾個GPIO模式初始化暫存器,通過這個暫存器給GPIO設定初始模式。

    例如:以下這個暫存器就是用來設定0-7號GPIO的模工作模式的。

    這個初始化過程在Gpio_Drv.C中的函式GPIO_init()中,專案開始的時候,先要檢查這個部分的模式設定是否正確。

 

 

三、各個功能模組的GPIO設定

 

1.    LCD背光,馬達

有的LCD背光是靠GPIO進行控制的,有的則靠PMIC進行控制。但不管那個方式進行控制,都只需修改Custom_equipment.c中的相關部分就可以了,具體如下:

首先,檢查陣列

GPIO_MAP_ENTRY gpio_map_tbl[] = {

/*GPIO_LABEL_LCD_BACKLIGHT */   {GPIO_VAILD, GPIO_PORT_24, netname[GPIO_LABEL_LCD_BACKLIGHT], NULL },

};

將沒有使用的GPIO,用GPIO_INVALID給遮蔽掉。

然後,修改函式custom_cfg_gpio_set_level,在對應的GPIO型別上將控制函式新增進去即可。比如:

   switch(gpio_dev_type)    

   {

   case GPIO_DEV_LED_MAINLCD:

     if( gpio_dev_level == LED_LIGHT_LEVEL0)// LEVEL0- LEVEL5是背光由若到強的控制,LEVEL0表示關閉背光

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.    藍芽

在檔案bt_hw_define.h中參照原理圖進行對應GPIO的修改。

   #define BT_GPIO_RESET     52//39 //GPIO_39 : PMIC reset

   #define BT_GPIO_DSC       36//;4 //GPIO_4 : to disconnect RFComm link

   #define BT_GPIO_POWER 4//12 //GPIO_12: Power

   #define BT_GPIO_DATASELECT 0//;3 //GPIO_3: DataSelect

 

3.    Camera

在檔案Camera_hw.c和sccb.h中參照原理圖進行對應GPIO的修改。

【Camera_hw.c】

       #define MODULE_POWER_PIN        6  // GPIO NO.

#define MODULE_RESET_PIN        12  // GPIO NO.

#define MODULE_CMPDN_PIN        13  // GPIO NO.

 

【sccb.h】

#define SCCB_SERIAL_CLK_PIN     8

#define SCCB_SERIAL_DATA_PIN       9

      

4.    TouchPanel

在檔案Touch_panel_spi.h中參照原理圖進行對應GPIO的修改

   #define SPI_DIN_PIN     1 //17  /*1GPO*/

   #define SPI_CLK_PIN     8 //20   /*8GPO*/

   #define SPI_DOUT_PIN    38 //22  /*18GPI*/

   #define SPI_CS_PIN      9 //23  /*9GPO*/

   #define SPI_BUSY_PIN    5 //21  /*5GPI*/

 

四、總結

    GPIO的設定相對來講比較簡單,只要仔細參對原理圖,基本上就可以將GPIO配置好。當然有些時候GPIO配置好了也達不到效果,就需要和硬體工程師一起來進行檢測分析,測量對應電路的工作電壓或電流,來判斷工作是否正常。總之在前期的除錯方面,多跟硬體工程師溝通、討論、分析,會很快解決問題。


 

Ø      中斷除錯篇

中斷除錯一般來說包括以下幾個方面,一一做簡單介紹:

1.      中斷號匹配

這個部分在檔案eint_def.c中進行設定,參照原理圖設定即可。

 

2.      中斷觸發方式的設定

在檔案eint_def.c中,首先要對中斷的觸發響應時間進行設定,是在陣列變數custom_eint_sw_debounce_time_delay中。一般情況下這個部分是不用動的,但有時候中斷觸發有問題的時候,這就是一個除錯點。比如對於Touchpanel的中斷,對應的響應時間一般是0,如果不是0,就需要修改。

另外,因為中斷觸發分電平觸發和邊沿觸發,電平觸發又分高電平觸發和低電平觸發,邊沿觸發又分為上升沿觸發和下降沿觸發,因此先需要跟硬體工程師瞭解對應的中斷觸發方式,然後在對應的中斷初始化的地方修改觸發方式。

 

3.      中斷處理流程除錯

有時候中斷設定好了,對應功能也不能正常使用,那麼就需要除錯中斷處理流程了,需要增加trace,一般我們會用系統帶的trace函式kal_prompt_trace,有時候除錯這個函式不能正常工作,那麼我們就用這個檔案中的函式sys_print列印trace資訊,要使用這個函式,需要在系統最開始啟動的時候,呼叫sys_uart_init進行初始化。這個函式庫是在6228平臺上做的,可能在其他平臺上暫存器因為不同,需要進行修改。

往往在除錯的過程中,經常發現是給晶片供電方面出了問題。因為有時候MTK給過來的程式碼,在他們的參考設計上是一種供電方式,但是在我們的設計上可能就是不一樣了。所以在找到晶片供電部分程式碼的時候,查詢對應資料,看是否呼叫正常。

           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述