MTK平台驅動除錯指南

2021-06-16 03:53:51 字數 3534 閱讀 3306

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,用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

#define spi_clk_pin     8 //20  

#define spi_dout_pin   38 //22

#define spi_cs_pin      9 //23

#define spi_busy_pin    5 //21

四、總結

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給過來的**,在他們的參考設計上是一種供電方式,但是在我們的設計上可能就是不一樣了。所以在找到晶元供電部分**的時候,查詢對應資料,看是否呼叫正常。

MTK平台驅動除錯指南

gpio設定篇 一 gpio有關的函式 1 gpio modesetup 函式原型 void gpio modesetup kal uint16 pin,kal uint16 conf dada 功能 設定gpio的工作模式是作為gpio,還是作為專有功能介面。引數 pin gpio 的pin腳號,...

除錯驅動思路 MTK除錯CTP

拿到ctp和相應的驅動 原廠的驅動 差別很大,有的廠家的驅動 寫得規規矩矩,注釋清楚,有的寫的就是一團糟,甚至還存在著邏輯錯誤。拿到ctp 驅動 後,直接將 合進去,然後看效果,不管怎麼觸控,ctp的列印一直不出來。看了看,也沒什麼問題,最後用示波器看中斷腳電平,發現一直為高,高為無效。然後用萬能表...

MTK模擬器除錯指南

前篇文章介紹了手機除錯的trace技巧,mtk手機除錯是比較簡單的,除了打trace,找assert,分析dump外,剩下的就是經驗了,有經驗的人看到現象就能猜到問題出在什麼地方,簡單看一下trace只是為了確認自己的猜測.初涉此道的朋友往往需要時間,慢慢積累經驗.要達到熟練,就需要有空的時候多讀多...