MTK優(yōu)美代碼賞析5LCD-BlackWrite與MTK中斷控制器_第1頁
MTK優(yōu)美代碼賞析5LCD-BlackWrite與MTK中斷控制器_第2頁
MTK優(yōu)美代碼賞析5LCD-BlackWrite與MTK中斷控制器_第3頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

MTK優(yōu)美代碼賞析5:LCD_BlackWrite與MTK中斷控制器

前一段時間在跟蹤我所負(fù)責(zé)項目的一個bug:進(jìn)錄像器時系統(tǒng)掛起等camera進(jìn)入就緒狀態(tài),導(dǎo)致進(jìn)入Preview很慢的問題。驅(qū)動上已經(jīng)把效果調(diào)到最差最快了,問題還是存在,所以斷定可能不是驅(qū)動造成的,需要跟到上層的流程去。因為自己從來沒有研究過camera的架構(gòu),一時竟無法下手去跟蹤這個流程,突然想到MTK的驅(qū)動架構(gòu)都是基于面向?qū)ο笤O(shè)計的,可以從對象的元素來進(jìn)行跟蹤,通過這個方法不斷向上跟蹤,不但把問題跟蹤了出來,而且對camera的流程也有了一定的了解,甚是開心。

依稀記得當(dāng)時發(fā)現(xiàn)camera不斷抓取Preview數(shù)據(jù)進(jìn)行Preview后進(jìn)行LCD_BlockWrite,使屏幕同步刷新,所以一直想抽時間來研究LCD_BlockWrite的機(jī)制,今夜偷閑,給出自己第一次賞析這個流程的看法,有不對的地方請大家及時提出來,讓我也學(xué)習(xí)下。謝!

下面看兩個有關(guān)屏幕刷新的重要參數(shù)

/*SW

XXX*/

//LCD_OWNER_ID

來自哪里的刷新

typedef

enum

{

LCD_UPDATE_MODULE_MMI

=

0,//MMI層觸發(fā)的刷新

LCD_UPDATE_MODULE_MEDIA

,//camera等觸發(fā)的刷新

LCD_UPDATE_MODULE_JPEG_VIDEO

,//MJPG_DECODE觸發(fā)的刷新

LCD_UPDATE_MODULE_EXT_CAMERA

,

//這個不清楚,可能是拓展camera觸發(fā)的刷新,類似于DSP

LCD_UPDATE_MODULE_LCD_FW

//這個我也不清楚

}

LCD_OWNER_ID_ENUM;

/*SW

XXX*/

//LCD_UPDATE_MODE

刷新的模式

typedef

enum

{

LCD_SW_TRIGGER_MODE

=

0,

/*

LCD

SW

trigger

with

frame

buffer

*/

//軟件緩沖刷新

LCD_HW_TRIGGER_MODE

=

1,

/*

LCD

HW

trigger

with

frame

buffer

*/

//硬件緩沖刷新

LCD_DIRECT_COUPLE_MODE

=

2

/*

LCD

HW

trigger

without

frame

buffer,

direct

couple

*/

//不需要緩沖區(qū)的硬件直接耦合刷新

}

LCD_UPDATE_MODE_ENUM;

//有些我也不太清楚他的意義,只能通過翻譯軟件來大致了解。

上面兩種設(shè)計應(yīng)該是互相搭配的,比如LCD_SW_TRIGGER_MODE的OWNER_ID一般肯定是LCD_UPDATE_MODULE_MMI,而緩沖區(qū)又在哪里定義的呢?下面看重要的LCD刷新接口函數(shù):

LCD_STATUS_CODE_ENUM

lcd_fb_update(lcd_frame_update_struct

*lcd_para)

lcd_frame_update_struct結(jié)構(gòu)里有如下需要注意的元素:

///

callback

when

lcd

update

is

done

void

(*

lcd_block_mode_cb)(void);

///

the

layers

to

be

updated

kal_uint32

update_layer;

///

which

layer

will

be

applied

by

hw

trigger

or

direct

couple

kal_uint32

hw_update_layer;

///

rotate

select

for

hardware

update

layer

kal_uint8

rotate_value;

#if

defined(DRV_LCD_MEMORY_OUTPUT)

///

enable/disable

otuput

to

memory

and

LCM

simultaneously

kal_bool

memory_output;

///

block

write

out

or

not

kal_uint8

block_mode;

///

output

data

format

to

memory,

LCD_WMEM_RGB565

or

LCD_WMEM_RGB888

for

6228,

6229.

///

always

RGB565

for

6226,6227

kal_uint8

memory_data_format;

///

memory

block

when

output

to

memory

kal_uint16

memory_block_width;

///

buffer

address

of

memory

output

buffer

kal_uint32

memory_output_buffer_address;

///

buffer

size

of

memory

output

buffer

kal_uint32

memory_output_buffer_size;

///

x

offset

of

dest

buffer

kal_uint16

dest_offset_x;

///

y

offset

of

dest

buffer

kal_uint16

dest_offset_y;

///

temp

memory

buffer

kal_uint32

dest_temp_address;

#endif

//DRV_LCD_MEMORY_OUTPUT

1.

void(*lcd_block_mode_cb)(void);為刷新完成后的callback,這個在mmi上可以有效的防止上一次刷新未完成又進(jìn)行新刷新,這個也就產(chǎn)生了gdi_waiting_blt_finish()函數(shù)。2.對memory_output_buffer_address和memory_output_buffer_size,是將屏幕顯示向外output,可能用于camera_capture圖片或者抓屏吧。函數(shù)里有要求只有當(dāng)update_mod為LCD_UPDATE_MODULE_MMI時才允許向外output_bufferAdress3.數(shù)據(jù)緩沖區(qū)在哪呢?我也找不到,只有參考這個了/dp-bbsthread-237857.html可能和update_layer和hw_update_layer有點關(guān)系吧

在這里接口函數(shù)里,53平臺通過調(diào)用lcd_fb_update_19_26_28_series(lcd_para);來調(diào)用驅(qū)動中的blockwrite來分別主屏和子屏進(jìn)行刷新。以及刷新完成后執(zhí)行callback函數(shù)lcd_block_mode_cb在mmi_gdi系統(tǒng)內(nèi),通過lcd_fb_update<-gdi_layer_blt_ext_internal<-gdi_layer_blt_ext<-gdi_layer_blt,gdi_layer_blt_previous,gdi_layer_blt_tree,gdi_lcd_paint_ext,gdi_lcd_paint_all_ext等等刷屏函數(shù),我主要用的是gdi_layer_blt_previous,原來有這么多刷屏函數(shù),真是孤陋寡聞了。。。作者:張素豐,轉(zhuǎn)載請注明出處:/zhangsufeng/archive/2010/09/24/1833666.html

在刷屏過程中,不論lcd_fb_update還是lcd_fb_update_19_26_28_series函數(shù)都不斷的對MTK中斷控制器進(jìn)行操作,例如:

_lcd_wait_for_lcd_ready();關(guān)于中斷控制器的相關(guān)文檔可以參考/p-62184651.html/wiki/%E4%B8%AD%E6%96%AD%E6%8E%A7%E5%88%B6%E5%99%A8后悔以前沒有吧計算機(jī)組成原理學(xué)好~~

在刷屏的過程中會進(jìn)入中斷,在這個中斷進(jìn)行過程中,系統(tǒng)是否會去相應(yīng)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論