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只是為了確認自己的猜測.初涉此道的朋友往往需要時間,慢慢積累經驗.要達到熟練,就需要有空的時候多讀多...