当前位置: 首页 > news >正文

mtk6589显示子系统笔记(一)

拿到MT6589的版本不久,发现显示系统代码结构改变很大。做些备忘,后续不忙的时候可以继续看。

MT6589之前的MTK的Android系统显示系统同featurePhone基本一致。

 

先来回顾下MTK之前版本的大致结构,每个Video层,每个UI层 分别对应一个layer,再通过设置一些,区域坐标,透明度,通透色等,然后启动显示模块的DMA,实现各layer的数据的叠加,。如果是CPU接口的屏,合并后的数据往 GRAM刷,如果是RGB接口的数据,那么往DDR内存中的显存刷,然后RGB控制器自动从显存来取。 

 

MT6589平台,把显示系统分成很多模块。

包括,rotator模块,scaler模块,gamrer模块,RDMA模块,WDMA模块,BLS模块。

各种LCD接口模块(DPI,DBI, DSI)。

 

各个模块的功能从名字上就可以看出来。

无非就是颜色转换,角度转换,数据叠加等。每个模块的具体功能和寄存器数据手册上写的很详细。暂时没有必要去详细了解。

当前目的是先了解框架,以后有问题可以定位再深入。

如上图就是整个显示子系统的框图。上图中的蓝色箭头指向内存。

 

其中 :RDMA用来准备数据给DPI DSI DBI接口引擎(顾名思义read DMA)

 rdma 输入支持两种模式:

1.  direct link input mode :指的是RDAM的数据源是上级的子模块(例如overlayer 模块)

2. memory link input mode: 指的是RDAM的数据来自内存。

 rdma 的输出都是给显示接口DPI 、DSI 或者DBI。

-------

MT6589有两个RDMA。

 RDMA0支持从内存输入和输出给显示接口
RDMA1只支持内存输入。

如上图中的红色虚线框部分为RDMA

 ------------------------------

WDMA: Write DMA 。从框图可以看到都是将前面几个模块产生显示buffer 写入到内存中的。

 

BLS : 自动背光调节,根据显示的数据来决定给背光占空比的一种方式,可以节省电源消耗,例如黑色部分可以降低背光亮度。省电。

 

overlayer :  从内存中或者前级模块的输出通过透明度、区域设置、等叠加,输出为一个显存。 这个也是核心部件。

2 。

再来分析如何使用这些模块刷新一个图片。 按照惯例,boot 模块(LK)只是刷一个logo,代码会比较简单,方便了解简单使用流程,后续有空再看kernel .

 

初始化

Platform.c (bootable\bootloader\lk\platform\mediatek\mt6589\lk)    

--》void platform_early_init(void)

首先找到显示系统要用地址:(从下面可以看到和以前平台一样把内存中最后一段区域的作为显存)

 

---------------------

下面就是调用显示初始化:

Platform.c (mediatek\platform\mt6589\lk)  --

 

 

 

 

从这里可以知道lk部分的显示路径

从显示内存(写提示符号的层和显示logo的层)两层通过overlay模块输出

overlay输出作为显示子系统的输入。

以上通过disp_path_config(&config)函数把参数设置到寄存器

上面都是都是CPU断的初始化。

最后初始化屏的寄存器。

lcm_drv->init()

--------------------

再看主要的函数                      disp_path_config

具体如下:

1.       首先处理各个模块的冲突以及互斥,这个不影响主流程,以后再看

2.       根据输出路径配置寄存器。

pConfig->dstModule

从这里可以看出显示系统输出逻辑上支持的五种情况。

DISP_MODULE_DSI_VDO

DISP_MODULE_DPI0

DISP_MODULE_DBI

DISP_MODULE_DSI_CMD

DISP_MODULE_WDMA1

从直观上看前四个就是显示的接口,

最后一种WDMA是将显示系统的数据输出到内存。支持过滤,抖动,色域转换。

路径配置的核心部分:

 

这部分注释已经很明确了,再根据显示子系统系统模块图就很清晰。

可以看到,如果要刷到屏上的话,都是通过:

OVERLAYER模块à经过BLS模块RDMA0模块 相应的显示接口模块

3.       配置overlayer. (既然显示部分都来自overlay)

综上:这个函数支持3种路径

1. mem->ovl->wdma1->mem

2. ovl->bls->rdma0->lcd --- LK里面只用了这个模式

3. mem->rdma->lcd  --对于这种,前面没提到补充下srcModule

pConfig->srcModule=DISP_MODULE_RDMA0

 -----------

初始化完了之后:

再来看如何第一次刷屏。

 

从这里看到LK里面 DPI刷屏比较简单,仅仅是重新设置了一下overlayer 参数。

转载于:https://www.cnblogs.com/Ph-one/p/6794675.html

相关文章:

  • 如何配置DSI时钟频率
  • /dev/sda2 is mounted; will not make a filesystem here!
  • 怎样使用alsa API
  • ubuntu下如下错误alsa/asoundlib.h: No such file or directory
  • ubuntu:undefined reference to `snd_pcm_open'
  • ubuntu 12.04安装alsa-lib、alsa-utils【转】
  • malloc、calloc、realloc和alloca各种的区别
  • Alsa中PCM参数设置⭐⭐
  • alsa 编程
  • fopen
  • RIFF和WAVE音频文件格式
  • wav音频文件头解析
  • fseek
  • signal( SIGINT, SigIntHandler )
  • Linux下直接读写物理地址内存
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 3.7、@ResponseBody 和 @RestController
  • AHK 中 = 和 == 等比较运算符的用法
  • Angular数据绑定机制
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • mysql常用命令汇总
  • Python socket服务器端、客户端传送信息
  • Vim Clutch | 面向脚踏板编程……
  • Vue UI框架库开发介绍
  • 从PHP迁移至Golang - 基础篇
  • 服务器从安装到部署全过程(二)
  • 回流、重绘及其优化
  • 将 Measurements 和 Units 应用到物理学
  • 将回调地狱按在地上摩擦的Promise
  • 开源SQL-on-Hadoop系统一览
  • 排序算法学习笔记
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 软件开发学习的5大技巧,你知道吗?
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • #{}和${}的区别?
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • #mysql 8.0 踩坑日记
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (3)llvm ir转换过程
  • (pytorch进阶之路)扩散概率模型
  • (ZT)出版业改革:该死的死,该生的生
  • (附源码)springboot教学评价 毕业设计 641310
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (转载)虚函数剖析
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • @Autowired标签与 @Resource标签 的区别
  • @Documented注解的作用
  • [ 2222 ]http://e.eqxiu.com/s/wJMf15Ku
  • [20161101]rman备份与数据文件变化7.txt
  • [20181219]script使用小技巧.txt
  • [AR Foundation] 人脸检测的流程
  • [BJDCTF2020]The mystery of ip