4.3寸24BPP屏驱动笔记

4.324BPP屏驱动笔记

 

 --作者:赖玉平(Auly)[email protected]

 

一、2442平台

1 , 先在EBoot 中的main.c文件修改InitDisplay()函数,目的是先摸索针对该款LCD硬件特性设置2442LCD控制器,这样只要通每次烧个EBoot进去,就能看到效果,

修改:⑴ LCDCON1  TFT LCD Pannel  24BPP      必须

      LCDCON5  0位,HWSWP――――――――0   必须

      LCDCON5  6位,INVVDEN -------------0   必须

      ⑷ 硬件上把原来DE脚上0欧到地的电阻去掉     必须

      LCDCON3     HBPD-------------45    

      ⑹ 原来的乘2变为乘4,这样才能变为全屏,本来只能显两半屏 (必须)

s2440LCD->LCDSADDR2 = M5D((IMAGE_FRAMEBUFFER_DMA_BASE + (480 * 272 * 4)) >> 1);

      s3c2440disp.cpp文件中, m_colorDepth = 32;//24BPP的屏,(必须)32

 

结果:成功在EBoot中控制LCD显示各种颜色,

2 Driver 文件夹中修改Display文件夹中的驱动,这是进入到CE系统时的驱动 

 要修改的文件有:

A wince500/platform/smdk2442/src/inc--àS3c2440a_lcd.h

主要有LCD控制器的寄存器定义、LCD控制器的工作时序定义、分辨率的定义等等。

B wince500/platform/smdk2442/src/KERNEL/OAL –Init.c

InitDisplay()函数中,设置LCD控制器的参数

发现刚进到InitDisplay马上就跳出来了,所以本BSP中没用到里面的配置

跟踪发现,也没有进入OFF.C中的InitDisplay()函数

 

 1display文件夹中,S3c2440disp.cpp文件,函数S3C2440DISP::S3C2440DISP()是负责设置LCD参数的。RegOpenKeyEx()打开注册表,

                  RegQueryValueEx()查询注册表

 2GetRotateModeFromReg()获得旋转模式,读注册表

                  RegOpenKeyEx()打开注册表,

                  RegQueryValueEx()查询注册表

总结:1 EBoot里设了LCD控制器,后面就不用设了,在DRIVER里的s3c2440disp.cpp只要设一些屏幕参数就可以了,如m_cxPhysicalScreen m_cyPhysicalScreen

      m_colorDepth = 32;//24BPP的屏,必须是32

 

二、2450平台

1 修改了 Bsp_cfg.h  加入LCD_MODULE_P043F1A4 模式,并选

2 加入预编译宏#ifdef LCDP043F1A4  只要在 source.cmn文件中加入定义就可切换

4 修改                 

lcd_vbpd = 2;//

                     lcd_vfpd = 4;// 都是典型值,没有 1 操作

                     lcd_vspw = 10;// 10

                     lcd_hbpd = 4;//

                     lcd_hfpd = 8;//

                     lcd_hspw = 41;//

5         修改clkval = 9;  使输出VCLK9.5MHZ

                              HSYNC15.7KHZ

                              VSYNC 54.9HZ

6   改变WINCON0 中的第2位为WINCONx_24BPP_888 模式

 

7 修改VIDW00ADD1B0 窗口0 buffer结束地址 (非常重要) 如果没改好,LCD控制器不工作

   s2450LCD->VIDW00ADD1B0 = (UINT32)((IMAGE_FRAMEBUFFER_DMA_BASE&0x007fffff + LCD_WIDTH*(LCD_HEIGHT+1)));

8 修改VIDW00ADD2B0 虚拟屏页宽    (非常重要) 如果没改好,LCD控制器不工作

  s2450LCD->VIDW00ADD2B0 = (offsize_in_byte<<VIDWxADD2_OFFSET_SIZE_S)|(LCD_WIDTH*4);// offsize_in_byte=0;

 

9 关掉 Half-Word swap ,因为如果反转,数据将变为BGR  蓝色在高8位了 

//       s2450LCD->WINCON0 |= (1<<WINCON_SWAP_S);    //enable Half-Word swap   

以上是去掉原来2450驱动中的语句

10  *pFB 要改为unsigned int

 

11       进入init.c 中,在InitDisplay()函数中,在开始就加入return; 因为不想再初始一次LCD控制器,

12       修改DRIVERS文件夹中的dir文件,使只编译display 文件夹

13        

14,在drivers/display文件夹中,S3c2450disp.cpp ---->S3C2450DISP::S3C2450DISP()函数,

修改参数如下:

                m_RedMaskSize = 8;

                m_RedMaskPosition = 16;

                m_GreenMaskSize = 8;

                m_GreenMaskPosition = 8;

                m_BlueMaskSize = 8;

                m_BlueMaskPosition = 0;

                            m_colorDepth = 32;  //必须的

m_FrameBufferSize = m_nScreenHeight * m_cbScanLineLength*2;

15 drivers/display文件夹,Surf.cpp ----> SetVisibleSurface函数

78步修改参数,否则在关闭media player时,进入这里重新初始会把LCD控制器 破坏,变成白屏

16 drivers/display -----ddoverlay.cpp文件:

 InitOverlay()函数,如果要用成24位,记得在这里要进行修改,不然一旦调用OVERLAY,就会使得LCD控制器不工作了

 

 

 

你可能感兴趣的:(工作,image,Module,buffer,平台,WinCE)