


下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
MTK优美代码赏析5:LCD_BlackWrite与MTK中断控制器
前一段时间在跟踪我所负责项目的一个bug:进录像器时系统挂起等camera进入就绪状态,导致进入Preview很慢的问题。驱动上已经把效果调到最差最快了,问题还是存在,所以断定可能不是驱动造成的,需要跟到上层的流程去。因为自己从来没有研究过camera的架构,一时竟无法下手去跟踪这个流程,突然想到MTK的驱动架构都是基于面向对象设计的,可以从对象的元素来进行跟踪,通过这个方法不断向上跟踪,不但把问题跟踪了出来,而且对camera的流程也有了一定的了解,甚是开心。
依稀记得当时发现camera不断抓取Preview数据进行Preview后进行LCD_BlockWrite,使屏幕同步刷新,所以一直想抽时间来研究LCD_BlockWrite的机制,今夜偷闲,给出自己第一次赏析这个流程的看法,有不对的地方请大家及时提出来,让我也学习下。谢!
下面看两个有关屏幕刷新的重要参数
/*SW
XXX*/
//LCD_OWNER_ID
来自哪里的刷新
typedef
enum
{
LCD_UPDATE_MODULE_MMI
=
0,//MMI层触发的刷新
LCD_UPDATE_MODULE_MEDIA
,//camera等触发的刷新
LCD_UPDATE_MODULE_JPEG_VIDEO
,//MJPG_DECODE触发的刷新
LCD_UPDATE_MODULE_EXT_CAMERA
,
//这个不清楚,可能是拓展camera触发的刷新,类似于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
*/
//不需要缓冲区的硬件直接耦合刷新
}
LCD_UPDATE_MODE_ENUM;
//有些我也不太清楚他的意义,只能通过翻译软件来大致了解。
上面两种设计应该是互相搭配的,比如LCD_SW_TRIGGER_MODE的OWNER_ID一般肯定是LCD_UPDATE_MODULE_MMI,而缓冲区又在哪里定义的呢?下面看重要的LCD刷新接口函数:
LCD_STATUS_CODE_ENUM
lcd_fb_update(lcd_frame_update_struct
*lcd_para)
lcd_frame_update_struct结构里有如下需要注意的元素:
///
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上可以有效的防止上一次刷新未完成又进行新刷新,这个也就产生了gdi_waiting_blt_finish()函数。2.对memory_output_buffer_address和memory_output_buffer_size,是将屏幕显示向外output,可能用于camera_capture图片或者抓屏吧。函数里有要求只有当update_mod为LCD_UPDATE_MODULE_MMI时才允许向外output_bufferAdress3.数据缓冲区在哪呢?我也找不到,只有参考这个了/dp-bbsthread-237857.html可能和update_layer和hw_update_layer有点关系吧
在这里接口函数里,53平台通过调用lcd_fb_update_19_26_28_series(lcd_para);来调用驱动中的blockwrite来分别主屏和子屏进行刷新。以及刷新完成后执行callback函数lcd_block_mode_cb在mmi_gdi系统内,通过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等等刷屏函数,我主要用的是gdi_layer_blt_previous,原来有这么多刷屏函数,真是孤陋寡闻了。。。作者:张素丰,转载请注明出处:/zhangsufeng/archive/2010/09/24/1833666.html
在刷屏过程中,不论lcd_fb_update还是lcd_fb_update_19_26_28_series函数都不断的对MTK中断控制器进行操作,例如:
_lcd_wait_for_lcd_ready();关于中断控制器的相关文档可以参考/p-62184651.html/wiki/%E4%B8%AD%E6%96%AD%E6%8E%A7%E5%88%B6%E5%99%A8后悔以前没有吧计算机组成原理学好~~
在刷屏的过程中会进入中断,在这个中断进行过程中,系统是否会去相应
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 网络通讯设施建设承包合同
- 专利技术许可使用与转让协议
- 事业单位正式聘用劳动合同
- 环保科技研发与推广合作协议
- 企业向法人借款合同
- 三农田土壤健康与改良方案
- 智慧农业技术研发与应用合作协议
- 公路护栏采购合同
- 动物养殖场地租赁合同
- 经典工程劳务承包合同
- YY/T 1537-2017放射治疗用激光定位系统性能和试验方法
- SB/T 10752-2012马铃薯雪花全粉
- 复变函数与积分变换全套课件
- 湿型砂中煤粉作用及检测全解析
- 最新部编版语文五年级下册教材分析及教学建议课件
- A4横线稿纸模板(可直接打印)
- 环境材料学教学课件汇总完整版电子教案全书整套课件幻灯片(最新)
- JJF1175-2021试验筛校准规范-(高清现行)
- 产品结构设计概述课件
- 八年级下综合实践教案全套
- 第8课《山山水水》教学设计(新人教版小学美术六年级上册)
评论
0/150
提交评论