ucos-II+ucGUI390+ARM9s3c2410+LCD
+触摸屏基本整合成功
(最近更新于2007-3-15)
环境:
ads2.2
+
ARM9
+
s3c2410
注意:由于编译器(
ads1.2
或
2.2
)对全局变量初始化为
0
的不完全支持,有时必须手动初始化为
0
,切记!!!
一、
ucos-II
移植到
ARM9s3c2410
可从官网下载移植代码,基本无需改动。
在os_cpu_a.s中的函数UCOS_IRQHandler中的bl OSIntEnter和bl C_IRQHandler之间插入如下代码(
见邵贝贝,第
2
版,第
104
页的说明:
L3.18(4) ):
ldr r0, =OSIntNesting
ldrb r0,[r0]
cmp r0,#1
bne XX
ldr r0,=OSTCBCur
ldr r1,[r0]
str sp,[r1] ; store sp in preempted tasks's TCB
XX
二、
ucGui390
移植到
ARM9s3c2410
:
1. Lcd
驱动:
1) 画点函数:
对dm2410实验板上的lcd,左上为原点(0,0),函数如下:
void
LCD2410_SetPixel(int xp, int yp, U16 color, int dindex)
{
*(pLCDBuffer565 + SCREEN_WIDTH*yp + xp) = color;
}
为了达到更快的显示速度,别忘了开启Cache
!!!
2)LCD控制器的初始化,对2410函数如下:
int
LCD2410_Init(void)
{
if(!isLcdInit)
{
InitLcdPort();
InitLcdRegs();
isLcdInit = 1;
return 0;
}
return 1;
}
void
InitLcdPort(void)
{
// LCD port initialize.
s2410IOP->GPCUP = 0xFFFFFFFF;
s2410IOP->GPCCON = 0xAAAAAAAA;
s2410IOP->GPDUP = 0xFFFFFFFF;
s2410IOP->GPDCON = 0xAAAAAAAA;
s2410IOP->GPGCON &= ~(3 << 8); /* Set LCD_PWREN as output */
s2410IOP->GPGCON |= (1 << 8);
s2410IOP->GPGDAT |= (1 << 4); //* Backlight ON
}
void
InitLcdRegs(void)
{
s2410LCD->LCDCON1 = (CLKVAL_TFT << 8) | //* VCLK = HCLK / ((CLKVAL + 1) * 2) -> About 7 Mhz
(EACH_FRAME << 7) | //* 0 : Each Frame
(3 << 5) | // TFT LCD Pannel
(12 << 1) | //Y: // 16bpp Mode
(0 << 0) ; // Disable LCD Output
s2410LCD->LCDCON2 = (VBPD << 24) | //* VBPD : ((32-1)&0xff) = 0x1f
(LINEVAL_TFT << 14) | //* LINEVAL_TFT : 480 - 1
(VFPD << 6) | //* VFPD : ((11-1)&0xff) = 0xa
(VSPW << 0) ; //* VSPW : ((2-1) &0x3f) = 0x1
s2410LCD->LCDCON3 = (HBPD << 19) | //* HBPD : ((88-1)&0x7f)
(HOZVAL_TFT << 8) | //* HOZVAL_TFT : 800 - 1
(HFPD << 0) ; //* HFPD : ((40-1)&0xff)
s2410LCD->LCDCON4 = (MVAL << 8) | //* MVAL : 13
(HSPW << 0) ; //* HSPW : ((128-1)&0xff)
s2410LCD->LCDCON5 = (0 << 12) | // BPP24BL : LSB valid
(1 << 11) | // FRM565 MODE : 5:5:5:1 Format
(0 << 10) | // INVVCLK : VCLK Falling Edge
(1 << 9) | // INVVLINE : Inverted Polarity
(1 << 8) | // INVVFRAME : Inverted Polarity
(0 << 7) | // INVVD : Normal
(0 << 6) | // INVVDEN : Normal
(0 << 5) | // INVPWREN : Normal
(0 << 4) | // INVENDLINE : Normal
(1 << 3) | // PWREN : Disable PWREN
(0 << 2) | // ENLEND : Disable LEND signal
(0 << 1) | // BSWP : Swap Disable
(1 << 0) ; // HWSWP : Swap Enable