lcd驱动几天前就是这个样子了,这两天又忙着写论文,怎么就不行呢,不管了,发上来给大家看看,知道的兄弟请指点一下。lcd是支持18位(TFT),程序设置了16位,屏幕大小800*480,如需lcd 的datasheet请联系我。运行能看到图片(有时需注释掉,有时又不需,不知道为什么),但颜色不对,好象只有两种颜色。
2006-5-30
经过一笑兄的提醒,已经修改了部分代码,现在有时能看到正确的图像了,颜色也是对的,但还有个问题依然存在,就是经常屏幕没有任何显示,这时老是需要不注释掉和注释掉rLCDCON5 = (1<<11)|(1<<9)|(1<<8)|(1<<3)|(1<<0)都编译一遍才可以看到图像,还有IO口和上拉使能该怎么配置呢?现在是 rGPCCON = 0xaaaaaaaa; rGPDCON = 0xaaaaaaaa; 没有对上拉使能进行操作,一操作就又看不到图像了。还有刷新算法的问题,我也不太明白。
2006-6-1
#include "2410addr.h"
#include "Def.h"
#include "stdio.h"
#include "stdlib.h"
extern unsigned char gImage_123[];
unsigned int (*frameBuffer16)[800/2];
extern char Image$$RW$$Limit[];
void *mallocPt=Image$$RW$$Limit;
#define M5D(n) ((n) & 0x1fffff)
void * malloc(unsigned nbyte)
{
void *returnPt=mallocPt;
mallocPt= (int *)mallocPt+nbyte/4+((nbyte%4)>0); //to align 4byte
if( (int)mallocPt > HEAPEND )
{
mallocPt=returnPt;
return NULL;
}
return returnPt;
}
int Lcd_Init()
{if((U32)frameBuffer16==0)
{
frameBuffer16=(unsigned int (*)[800/2])malloc(800*480*2);
}
//rLCDCON1 = (rLCDCON1 & 0xffc0000) | (1<<8)|(3<<5)|(0xc<<1);
rLCDCON1 = (1<<8)|(1<<7)|(3<<5)|(12<<1)|0;
rLCDCON2 = (32<<24)|(479<<14)|(11<<6)|(2);
rLCDCON3 = (88<<19)|(799<<8)|(40<<0);
rLCDCON4 = (13<<8) | (128<<0);
//rLCDCON5 = (1<<11)|(1<<9)|(1<<8)|(1<<3)|(1<<0);
rLCDSADDR1= ( ((U32)frameBuffer16>>22)<<21 ) | M5D((U32)frameBuffer16>>1);
rLCDSADDR2= M5D((((U32)frameBuffer16+(800*480*2))>>1));
rLCDSADDR3= (800) | ( 0<<11 );
rLPCSEL &= (~7);
rTPAL = 0;
rLCDCON1 |= 1;
return 0;
}
void _PutPixelG16(U32 x,U32 y,U16 c)
{
if(x<800 && y<480)
frameBuffer16[(y)][(x)/2]=( frameBuffer16[(y)][x/2] & ~(0xfffc0000>>((x)%2)*16) )
| ( (c)<<((1-((x)%2))*16) );
}
void Lcd_Bmp( U16 x0, U16 y0, U16 x1, U16 y1 , unsigned char bmp[] )
{
int x, y ;
int m = 0;
U16 t;
for( y = y0; y < y1; y++ ) //画16色图片
{
for( x = x0; x < x1; x++ )
{
t = (bmp[m]<<8) | bmp[m+1];
_PutPixelG16( x, y, t);
m+=2;
}
}
}
int Test_lcd()
{
Lcd_Init();
Lcd_Bmp( 0, 0, 320, 240 ,gImage_123);
return 0;
}