| 本帖最后由 绯村 于 2013-4-1 01:11 编辑 
 RT。本人新买的本本Win7系统。前个月刚买的TQ2440板子。 群创7寸屏幕。由于在win7下USB驱动总是安装失败。无奈只有用Linux了。可是Linux下没有ADS这样的工具。所以麻烦就来了。
 
 
 因为光盘里面给的代码都是用ADS包装过的,所以想要用Linux下的交叉编译工具来编译那么就得先把ADS工程里面的代码提取出来,去掉与ADS无关的部分,关键的问题就在于彻底搞懂代码的含义才能自己动手修改,然后编写makefile。关于裸奔Lcd的问题如下:
 
 
 关于宏定义#define CSTM_LCD(文于LCD_TFT.h 14行),在定义了这个之后,LCD_TFT.c里面的函数实现都不同. 在lcd_tft.c中几个关键函数如下:
 
 在cstm_lcd.c中,实现如下:
 
 而两者是否定义CSTM_LCD的差距关系到LCD的初始化、PutPixel和LCDBUFFER的定义。关于LCDBUFFER的定义是这样:
 #ifdef CSTM_LCD
 extern volatile unsigned short *LCD_BUFFER;
 #else
 volatile unsigned short LCD_BUFFER[SCR_YSIZE_TFT][SCR_XSIZE_TFT];
 #endif
 
 这里假如定义了CSTM_LCD  那么这里的LCDBUFFER在cstm_lcd.c里面将被初始化为:
 #ifdef CSTM_LCD
 LCD_BUFFER=(volatile unsigned short *)malloc(sizeof(short)*gp_lcd->Scr_ysize*gp_lcd->Scr_xsize);
 _lcd_init(gp_lcd);
 #endif
 
 对于malloc这个函数,在2440lib.c里面是这么实现的;
 
 显然这里的数组定义对于C编译器来说是非法的,除非你把这个Image$$奇怪的数组作为函数的型参,否则是不允许这种未指明大小的数组的。(我猜测可能是ADS扩展了C的用法),所以这个是没办法用arm-linux-gcc来编译的。
 
 
 说了这么多,只是想搞明白:
 1.  对于群创7寸屏幕,LCD的实现是怎么样的?
 2.  宏定义#define CSTM_LCD(文于LCD_TFT.h 14行)是否有用? 是不是在LCD_TFT.c里面用的都是#ifndef后面的条件来编译的。
 3.   对于这样简单的裸奔程序,这些与LCD貌似无关的设置是必须的吗?比如Main.c 里面的
 
 Port_Init();
 Isr_Init();
 ChangeMPllValue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3);
 ChangeClockDivider(key, 12);
 cal_cpu_bus_clk();
 
 MMU_Init();
 望知道的人指点一二,LED和键盘扫描都已经实现,唯独这个LCD卡了我很久了。一直没搞定。
 我写的LCD显示单色代码在Github里面。(我现在只求能够显示单色就OK),实现语句为
 Lcd_ClearScr( (0x00<<11) | (0x00<<5) | (0x1f)  )  ;                //clear screen
 Uart_Printf( "Display Blue! Press any key to continue!\n" );
 Uart_Getch() ;                //wait uart input
 我把Uart的语句全部都删除了。 求人指点阿。。代码地址:
 https://github.com/ashbell/ashbell/tree/master/lcd               代码编译能通过,下载到板子上就是白屏,没有出现预期的蓝色屏幕。
 
 
 
 
 
 
 
 |