找回密码
 注册
搜索
查看: 1875|回复: 14

[讨论] MTK lcd驱动blockwrite函数疑问。

[复制链接]
发表于 2012-10-10 11:39:09 | 显示全部楼层 |阅读模式
MTK驱动层 blockwrite的那四个参数是从哪边传过来的?还有对于datasheet给出的四个寄存器是如何起作用的? 还有 最下面
        ENABLE_LCD_TRANSFER_COMPLETE_INT;
        ENABLE_LCD_ROI_CTRL_CMD_FIRST;
        START_LCD_TRANSFER;这三个宏,我们怎么知道他是用来做什么用的?
我尝试过追哪些参数,可是追着追着就迷路了。
麻烦知道的告诉我一下。。。万分感谢!
 楼主| 发表于 2012-10-12 19:34:18 | 显示全部楼层
ENABLE_LCD_TRANSFER_COMPLETE_INT :这个是表示刷屏数据通过DMA方式传输完成后,产生一个中断,通过这个中断知道一帧数据传输完成;
根据你的解释,这个宏起到一个标签作用,只有上面几个写寄存器命令执行完毕后,也就是刷屏数据传输完成,将LCD_INT_ENABLE_REG置1,然后BB通过对这个寄存器的判断来确定是否传输完毕。但是这个宏执行的前提得是DMA已经打开,数据传输已经完成。
根据你的解释,我感觉这边代码分布应该这样更合理:
ENABLE_LCD_ROI_CTRL_CMD_FIRST;
START_LCD_TRANSFER;
        SET_LCD_CMD_PARAMETER(num++,LCD_CMD,(kal_uint32)0x2a);
        SET_LCD_CMD_PARAMETER(num++,LCD_DATA,(kal_uint32)startx);
        SET_LCD_CMD_PARAMETER(num++,LCD_DATA,(kal_uint32)endx);
        SET_LCD_CMD_PARAMETER(num++,LCD_CMD,(kal_uint32)0x2b);
        SET_LCD_CMD_PARAMETER(num++,LCD_DATA,(kal_uint32)starty);
        SET_LCD_CMD_PARAMETER(num++,LCD_DATA,(kal_uint32)endy);
        SET_LCD_CMD_PARAMETER(num++,LCD_CMD,(kal_uint32)0x2c);
ENABLE_LCD_TRANSFER_COMPLETE_INT;

还是这些宏的执行次序,不是这样?
[此贴子已经被作者于2012-10-12 20:45:56编辑过]
点评回复

使用道具 举报

发表于 2012-10-12 15:12:23 | 显示全部楼层
LCD_CtrlWrite_240X320(0x2A);
  LCD_DataWrite_240X320(((startx&0xFF00)>>8));
  LCD_DataWrite_240X320((startx&0xFF));
  LCD_DataWrite_240X320(((endx&0xFF00)>>8));
  LCD_DataWrite_240X320((endx&0xFF));
  LCD_CtrlWrite_240X320(0x2B);
  LCD_DataWrite_240X320(((starty&0xFF00)>>8));
  LCD_DataWrite_240X320((starty&0xFF));
  LCD_DataWrite_240X320(((endy&0xFF00)>>8));
  LCD_DataWrite_240X320((endy&0xFF));

以上过程是设置lcd的窗口的相关参数,把他们写到lcd中,

ENABLE_LCD_TRANSFER_COMPLETE_INT :这个是表示刷屏数据通过DMA方式传输完成后,产生一个中断,通过这个中断知道一帧数据传输完成;

ENABLE_LCD_ROI_CTRL_CMD_FIRST 表示先要传输参数,后传输真正的像素数据

START_LCD_TRANSFER 真正开始传输,启动DMA

为什么会有ENABLE_LCD_ROI_CTRL_CMD_FIRST这个?
在lcd相关的头文件中,会有一个是否采用DMA方式传送参数的宏,
表示LCD的寄存器参数也可以用DMA方式传送,
MTK大部分平台默认都是开这个宏的,表明lcd参数默认采用DMA来传送,如果不定义这个宏的话,则说明参数不采用DMA方式传送,
从写法上看,贴出来的这堆参数应该是不采用DMA方式的,

而真正的传输常规显示的数据,都应该是用DMA方式的,
DMA好处是不占用CPU时间,也更快,

主要结合MTK的datasheet中 lcd controller部分,可以大概明白这些,
点评回复

使用道具 举报

 楼主| 发表于 2012-10-12 14:35:30 | 显示全部楼层
好,谢谢!
点评回复

使用道具 举报

发表于 2012-10-12 14:25:55 | 显示全部楼层
起动DMA,DMA是从内存到外设的DMA。 如果不了解尝试看一下DMA是如何配置的.
camera 的是一样道理,都是内存到外设 或者外设到内存的DMA。  好好理解一下。
abestone dot com
点评回复

使用道具 举报

发表于 2012-10-12 12:49:51 | 显示全部楼层
50的话看看  wfd_lcd_common.c里面这个函数
  __wfd_lcd_Blt(WFD_DEVICE* device, WFD_PORT* port, WFDEventType event),适当打几个log,应该能知道你想知道的
点评回复

使用道具 举报

发表于 2012-10-12 09:19:37 | 显示全部楼层
同意6楼理解,这些宏是发送数据的前提,就相当于屏的初始化,初始化完成才能显示是一个道理
点评回复

使用道具 举报

 楼主| 发表于 2012-10-11 16:53:50 | 显示全部楼层

11

好纠结啊。。。
[此贴子已经被作者于2012-10-12 9:28:38编辑过]
点评回复

使用道具 举报

 楼主| 发表于 2012-10-11 16:50:52 | 显示全部楼层
谢谢你的答复!再问你一个问题,你的这些理解是根据什么得出的呢?照着代码看,我实再没看出什么名堂。。。
点评回复

使用道具 举报

发表于 2012-10-11 15:51:21 | 显示全部楼层
我一点理解哈,不知道对不对,
ENABLE_LCD_TRANSFER_COMPLETE_INT 这个宏貌似只是开启 DMA 传输功能,并设置一个标志,传完应该会置位。
ENABLE_LCD_ROI_CTRL_CMD_FIRST
其实以前的命令应该都没有传输到lcd driver ic 里面,这是后才开始传输命令
START_LCD_TRANSFER
这是才传输数据的。
点评回复

使用道具 举报

 楼主| 发表于 2012-10-11 15:35:56 | 显示全部楼层
对与第一个关于中断的宏,我尝试了全局搜索,结果只有在3个地方有调用,得不到啥有用信息。往下追,结果就是给一个寄存器的置0,置1操作,然后得到了那个寄存器地址,尝试从板子datasheet查看这个寄存器啥作用,结果没有,这样线索又没了,还是不知道这宏在系统中有什么作用。。。。
help me...
点评回复

使用道具 举报

 楼主| 发表于 2012-10-11 14:30:28 | 显示全部楼层
void LCD_BlockWrite_240X320(kal_uint16 startx,kal_uint16 starty,kal_uint16 endx,kal_uint16 endy)
50平台,我是想知道这里面的四个参数是哪边传过来的,写数据是这样的
                LCD_CtrlWrite_240X320(0x2A);
                LCD_DataWrite_240X320(((startx&0xFF00)>>8));
                LCD_DataWrite_240X320((startx&0xFF));
                LCD_DataWrite_240X320(((endx&0xFF00)>>8));
                LCD_DataWrite_240X320((endx&0xFF));
                LCD_CtrlWrite_240X320(0x2B);
                LCD_DataWrite_240X320(((starty&0xFF00)>>8));
                LCD_DataWrite_240X320((starty&0xFF));
                LCD_DataWrite_240X320(((endy&0xFF00)>>8));
                LCD_DataWrite_240X320((endy&0xFF));

                LCD_CtrlWrite_240X320(0x2C);
然而最下面的三个宏 ENABLE_LCD_TRANSFER_COMPLETE_INT;
ENABLE_LCD_ROI_CTRL_CMD_FIRST;
START_LCD_TRANSFER;不知道啥作用。
点评回复

使用道具 举报

发表于 2012-10-11 12:26:11 | 显示全部楼层
那里只是启动个DMA,真正写数据不再那里啊,那你是那个平台?
点评回复

使用道具 举报

 楼主| 发表于 2012-10-11 08:51:39 | 显示全部楼层
大家知道多少说多少啊,别空着。。。
点评回复

使用道具 举报

 楼主| 发表于 2012-10-27 00:52:45 | 显示全部楼层
自己再来总结下,对于最下面三个宏的解释正如wyczaj所说,然后呢,前两个寄存器是来设置刷屏区域,最后一个寄存器用来管理GRAM。刷屏区域设好后,就等待图像数据传入了,
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-11-23 17:24 , Processed in 0.051082 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表