1、ucos II+ucGUI+s3c2410+LCD+触摸屏整合 作者 :佚名 来源 :不详 录入 :Admin 更新时间: 2008-8-18 14:57:54 点击数: 240 【字体: 】 环境: ads2.2 ARM9 s3c2410 注意:由于编译器( ads1.2 或 2.2)对全局变量初始化为 0 的不完全支持,有时必须手动初始化为 0,切记! 一、 ucos II 移植到 ARM9 s3c2410 可从官网下载移植代码,基本无需改动。 在 os_cpu_a.s 中的函数 UCOS_IRQHandler 中的 bl OSIntEnter 和 bl C_IRQHandler 之间插入
2、如下代码( 见邵贝贝,第 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 taskss TCB XX 二、 ucGui 390 移植到 ARM9 s3c2410 1. Lcd驱动 : 1) 画点函数: 对 dm2410 实验板上的 lcd,左上为原点( 0, 0),函数如下: void LCD2410_SetPixel(int xp, int yp, U16 colo
3、r, 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; s2410
4、IOP-GPCCON = 0xAAAAAAAA; s2410IOP-GPDUP = 0xFFFFFFFF; s2410IOP-GPDCON = 0xAAAAAAAA; s2410IOP-GPGCON s2410LCD-LCDSADDR3=(LCD_XSIZE_TFT-LCD_XSIZE_TFT)/1)LCDINTMSK|=(3); / MASK LCD Sub Interrupt s2410LCD-LPCSEL / Disable LPC3600 s2410LCD-TPAL=0; / Disable Temp Palette s2410LCD-LCDCON1 |= 1; 其中,部分变量、常量定
5、义如下: #define LCD_XSIZE_TFT (800) #define LCD_YSIZE_TFT (480) #define HOZVAL_TFT (LCD_XSIZE_TFT-1) #define LINEVAL_TFT (LCD_YSIZE_TFT-1) #define MVAL (13) #define MVAL_USED (1) #define EACH_FRAME (0) /STN/CSTN timing parameter for LCBHBT161M(NANYA) #define WLH (3) #define WDLY (3) #define LINEBLANK (
6、1 3)填写配置文件 LCDConf.h #define LCD_XSIZE (800) /* X-resolution of LCD, Logical coor. */ #define LCD_YSIZE (480) /* Y-resolution of LCD, Logical coor. */ #define LCD_BITSPERPIXEL (16) #define LCD_CONTROLLER 1 #define LCD_SWAP_RB_0 1 2触摸屏驱动 : 触摸屏驱动计算出触摸屏的坐标( x, y),对 dm2410 实验板上的触摸屏,左下为原点,但不一定是( 0, 0)。两个
7、函数: 1) 设置中断向量,开中断: void SetTSInterrupt(void) rADCDLY = (50000); rADCCON = (1pLCD_HL = pContext-pAFont = GUI_DEFAULT_FONT; pContext-pClipRect_HL = pContext-PenSize = 1; pContext-DrawMode = GUI_DRAWMODE_NORMAL;/add pContext-TextMode = GUI_TEXTMODE_NORMAL;/add pContext-TextAlign = GUI_TA_LEFT|GUI_TA_TO
8、P;/add pContext-AA_HiResEnable = 0;/add /* Variables in WM module */ #if GUI_WINSUPPORT pContext-hAWin = WM_GetDesktopWindow(); #endif /* Variables in GUI_AA module */ pContext-AA_Factor = 3; LCD_SetBkColor(GUI_DEFAULT_BKCOLOR); LCD_SetColor(GUI_DEFAULT_COLOR); 修改如下函数为:(位于 GUIAlloc.c) void GUI_ALLOC_Init(void) . GUI_ALLOC.NumUsedBytes = 0; memset(/self aBlock0.Size = (1GUI_BLOCK_ALIGN); /* occupy minimum for a block */ . 修改如下函数为:(位于 WM.c)( New ) void WM_Init(void) if (!_IsInited) . memset(/add NextDrawWin = WM_FirstWin = WM_HWIN_NULL; .