WinCE5.0 SMDK2410 BSP在GEC2410开发板上的移植(4)-LCD驱动
2009-12-29 15:23
597 查看
在WinCE5.0 SMDK2410 BSP在GEC2410开发板上的移植(2)(3)两节中,我们实现了Eboot在Nor Flash和Nand Flash上运行.因为在烧写Eboot到Nor Flash比较快速(使用H_Jtag),Nand Flash将来就仅仅用来存放OS Image.
我们使用PB下载系统镜像到RAM中运行的方式来运行CE OS,待可以成功运行后在保存到Nand Flash中实现从Flash中加载到RAM中运行(这里的主要工作是实现BINFS,之后再详细介绍)
一、开发环境
编译器: Platform Builder 5.0
目标板: GEC2410 S3C2410A,NAND Flash:64M K9F1208,NOR Flash:2M SST39VF1601 SDRAM 64M,CS8900
二、移植步骤
SMDK2410的BSP已经实现了大部分的功能,通过PB下载,KITL支持,这些都不需要额外的工作了.OAL部分基本功能也都实现了,初始化什么的,不过还是值得好好看看源代码学习的.这里就不多说了,首先我们需要做的是修改LCD驱动
1.LCD驱动
需要修改的部分和之前EBoot做的修改是一样的,就是设置LCD控制器寄存器.
SMDK2410的驱动位于/WINCE500/PUBLIC/COMMON/OAK/CSP/ARM/SAMSUNG/S3C2410X/下,我们只需要把其复制到/WINCE500/PLATFORM/GEC2410/SRC/COMMON/下,这样我们就可以在其基础上进行修改了.
LCD驱动位于/DISPLAY/S3C2410X_LCD/下,修改s3c2410x_lcd.cpp的InitializeLCDRegisters函数,使用实际LCD所需参数即可.
2.添加LCD驱动到系统镜像中(NK.bin)
(1)修改dir文件,将S3C2410X添加进来
/GEC2410/SRC/COMMON/dir:
DIRS=/
smartmedia /
S3C2410X /
BOOTPART
/GEC2410/SRC/COMMON/S3C2410X/dir:
DIRS= /
display
#sdhc /
#serial /
#touch /
#wavedev /
#usb /
我们先仅仅添加LCD驱动,其他的之后在移植,因此先注释掉其他驱动
(2)修改LCD驱动的source文件,设置其编译方式,我们编译成dll,并放到Platform的target目录下,这会覆盖原来CSP目录下生成的dll
RELEASETYPE=PLATFORM
TARGETNAME=s3c2410x_lcd
TARGETTYPE=DYNLINK
(3)在platform.bib中添加该dll
; @CESYSGEN IF CE_MODULES_DISPLAY
IF BSP_NODISPLAY !
s3c2410x_lcd.dll $(_FLATRELEASEDIR)/s3c2410x_lcd.dll NK SH
ENDIF BSP_NODISPLAY !
; @CESYSGEN ENDIF CE_MODULES_DISPLAY
3.重新Sysgen,下载到开发板,就可以看到windows ce的资源浏览器了.
我们使用PB下载系统镜像到RAM中运行的方式来运行CE OS,待可以成功运行后在保存到Nand Flash中实现从Flash中加载到RAM中运行(这里的主要工作是实现BINFS,之后再详细介绍)
一、开发环境
编译器: Platform Builder 5.0
目标板: GEC2410 S3C2410A,NAND Flash:64M K9F1208,NOR Flash:2M SST39VF1601 SDRAM 64M,CS8900
二、移植步骤
SMDK2410的BSP已经实现了大部分的功能,通过PB下载,KITL支持,这些都不需要额外的工作了.OAL部分基本功能也都实现了,初始化什么的,不过还是值得好好看看源代码学习的.这里就不多说了,首先我们需要做的是修改LCD驱动
1.LCD驱动
需要修改的部分和之前EBoot做的修改是一样的,就是设置LCD控制器寄存器.
SMDK2410的驱动位于/WINCE500/PUBLIC/COMMON/OAK/CSP/ARM/SAMSUNG/S3C2410X/下,我们只需要把其复制到/WINCE500/PLATFORM/GEC2410/SRC/COMMON/下,这样我们就可以在其基础上进行修改了.
LCD驱动位于/DISPLAY/S3C2410X_LCD/下,修改s3c2410x_lcd.cpp的InitializeLCDRegisters函数,使用实际LCD所需参数即可.
static BOOL InitializeLCDRegisters(DWORD dwPhysicalFrameBase) { volatile S3C2410X_IOPORT_REG *s2410IOP = NULL; volatile S3C2410X_LCD_REG *s2410LCD = NULL; PHYSICAL_ADDRESS pa; // Map the s3c2410x register pointers. // pa.QuadPart = S3C2410X_BASE_REG_PA_IOPORT; s2410IOP = (S3C2410X_IOPORT_REG *) MmMapIoSpace(pa, sizeof(S3C2410X_IOPORT_REG), FALSE); pa.QuadPart = S3C2410X_BASE_REG_PA_LCD; s2410LCD = (S3C2410X_LCD_REG *) MmMapIoSpace(pa, sizeof(S3C2410X_LCD_REG), FALSE); if (!s2410IOP || !s2410LCD) { RETAILMSG(1, (TEXT("ERROR: s3c2410x_lcd: InitializeLCDRegisters failed./r/n"))); return(FALSE); } // Set up the LCD controller registers to display a power-on bitmap image. // s2410IOP->GPCUP = 0xFFFFFFFF; s2410IOP->GPCCON = 0xAAAA56A9; s2410IOP->GPDUP = 0xFFFFFFFF; s2410IOP->GPDCON = 0xAAAAAAAA; //s2410IOP->GPGUP &= ~(1 << 4); //s2410IOP->GPGCON &= ~(3 << 8); s2410LCD->LCDCON1 = (5 << 8) | /* VCLK = HCLK / ((CLKVAL + 1) * 2) -> About 7 Mhz */ (0 << 7) | /* 0 : Each Frame */ (3 << 5) | /* TFT LCD Pannel */ (12 << 1) | /* 16bpp Mode */ (0 << 0) ; /* Disable LCD Output */ s2410LCD->LCDCON2 = (2 << 24) | /* VBPD : 1 */ (LCD_LINEVAL_TFT << 14) | /* Vertical Size : 320 - 1 */ (2 << 6) | /* VFPD : 2 */ (4 << 0) ; /* VSPW : 1 */ s2410LCD->LCDCON3 = (8 << 19) | /* HBPD : 6 */ (LCD_HOZVAL_TFT << 8) | /* HOZVAL_TFT : 240 - 1 */ (8 << 0) ; /* HFPD : 2 */ s2410LCD->LCDCON4 = (LCD_MVAL << 8) | /* MVAL : 13 */ (6 << 0) ; /* HSPW : 4 */ s2410LCD->LCDCON5 = (0 << 12) | /* BPP24BL : LSB valid */ (1 << 11) | /* FRM565 MODE : 5:6:5 Format */ (0 << 10) | /* INVVCLK : VCLK Falling Edge */ (0 << 9) | /* INVVLINE : Inverted Polarity */ (0 << 8) | /* INVVFRAME : Inverted Polarity */ (0 << 7) | /* INVVD : Normal */ (0 << 6) | /* INVVDEN : Normal */ (0 << 5) | /* INVPWREN : Normal */ (0 << 4) | /* INVENDLINE : Normal */ (0 << 3) | /* PWREN : Disable PWREN */ (0 << 2) | /* ENLEND : Disable LEND signal */ (0 << 1) | /* BSWP : Swap Disable */ (1 << 0) ; /* HWSWP : Swap Enable */ s2410LCD->LCDSADDR1 = ((dwPhysicalFrameBase >> 22) << 21) | ((M5D(dwPhysicalFrameBase >> 1)) << 0); s2410LCD->LCDSADDR2 = M5D((dwPhysicalFrameBase + (LCD_XSIZE_TFT * LCD_YSIZE_TFT * 2)) >> 1); s2410LCD->LCDSADDR3 = (((LCD_XSIZE_TFT - LCD_XSIZE_TFT) / 1) << 11) | (LCD_XSIZE_TFT / 1); //s2410LCD->LCDINTMSK |=3; // MASK LCD Sub Interrupt s2410LCD->LPCSEL |= ~0x7; s2410LCD->TPAL = 0x0; s2410LCD->LCDCON1 |= 1; // Unmap register buffers. // MmUnmapIoSpace((PVOID)s2410IOP, 0); MmUnmapIoSpace((PVOID)s2410LCD, 0); return(TRUE); }
2.添加LCD驱动到系统镜像中(NK.bin)
(1)修改dir文件,将S3C2410X添加进来
/GEC2410/SRC/COMMON/dir:
DIRS=/
smartmedia /
S3C2410X /
BOOTPART
/GEC2410/SRC/COMMON/S3C2410X/dir:
DIRS= /
display
#sdhc /
#serial /
#touch /
#wavedev /
#usb /
我们先仅仅添加LCD驱动,其他的之后在移植,因此先注释掉其他驱动
(2)修改LCD驱动的source文件,设置其编译方式,我们编译成dll,并放到Platform的target目录下,这会覆盖原来CSP目录下生成的dll
RELEASETYPE=PLATFORM
TARGETNAME=s3c2410x_lcd
TARGETTYPE=DYNLINK
(3)在platform.bib中添加该dll
; @CESYSGEN IF CE_MODULES_DISPLAY
IF BSP_NODISPLAY !
s3c2410x_lcd.dll $(_FLATRELEASEDIR)/s3c2410x_lcd.dll NK SH
ENDIF BSP_NODISPLAY !
; @CESYSGEN ENDIF CE_MODULES_DISPLAY
3.重新Sysgen,下载到开发板,就可以看到windows ce的资源浏览器了.
相关文章推荐
- WinCE5.0 SMDK2410 BSP在GEC2410开发板上的移植(6)-SDHC驱动
- WinCE5.0 SMDK2410 BSP在GEC2410开发板上的移植(19)-Nand Flash驱动(FMD)及其简析(2)
- WinCE5.0 SMDK2410 BSP在GEC2410开发板上的移植(7)-Serial串口驱动
- WinCE5.0 SMDK2410 BSP在GEC2410开发板上的移植(14)-移植CS8900A网卡NDIS Miniport驱动
- WinCE5.0 SMDK2410 BSP在GEC2410开发板上的移植(18)-Nand Flash驱动(FMD)及其简析(1)
- WinCE5.0 SMDK2410 BSP在GEC2410开发板上的移植(5)-TouchPanel驱动
- WinCE5.0 SMDK2410 BSP在GEC2410开发板上的移植(3)-基于Nor Flash的Eboot
- WinCE5.0 SMDK2410 BSP在GEC2410开发板上的移植(11)-BINFS在Nand上的实现(Multi-Bin的实现)
- WinCE5.0 SMDK2410 BSP在GEC2410开发板上的移植(10)-FAT分区在Nand上的实现
- WinCE5.0 SMDK2410 BSP在GEC2410开发板上的移植(1)-NBoot
- WinCE5.0 SMDK2410 BSP在GEC2410开发板上的移植(16)-CS8900 NDIS Miniport driver简析(2)
- WinCE5.0 SMDK2410 BSP在GEC2410开发板上的移植(9)-BINFS在Nand上的实现(OS镜像的烧写与加载)
- WinCE5.0 SMDK2410 BSP在GEC2410开发板上的移植(17)-CS8900 NDIS Miniport driver简析(3)
- WinCE5.0 SMDK2410 BSP在GEC2410开发板上的移植(15)-CS8900 NDIS Miniport driver简析(1)
- WinCE5.0 SMDK2410 BSP在GEC2410开发板上的移植(8)-USB Function驱动
- WinCE5.0 SMDK2410 BSP在GEC2410开发板上的移植(12)-不连续地址的内存配置
- WinCE5.0 SMDK2410 BSP在GEC2410开发板上的移植(13)-HIVE注册表实现
- WinCE5.0 SMDK2410 BSP在GEC2410开发板上的移植(2)-基于Nand Flash的Eboot
- WinCE5.0 SMDK2410 BSP在GEC2410开发板上的移植(11)-BINFS在Nand上的实现(Multi-Bin的实现)
- Windows CE LCD显示驱动简析(2)(基于WinCE5.0 SMDK2410 BSP的LCD显示设备驱动)