|
小弟调了两天了,16位5:6:5,TFT 始终只能显示两行,经测试,貌似LCD_BUFFER器的起始,结束地址没问题,数组类型应该也对,可是只能显示2行多点,各位大哥给点思路,谢谢
#include"2440addr.h"
#define U32 unsigned int
#define U16 unsigned short
#define M5D(n) ((n) & 0x1fffff)
#define CLKVAL 5
#define LINEVAL 239
#define HOZVAL 319
#define VBPD (12)
#define VFPD (4)
#define VSPW (5)
#define HBPD (22)
#define HFPD (33)
#define HSPW (44)
#define LCD_HEIGHT 240
#define LCD_WIDTH 320
U16 LCD_BUFFER[240][320];
void PLL_Init()
{
rMPLLCON = (92<<12)|(1<<4)|(0X1<<0); //FCLK=400MHz
rCLKDIVN = (0X2<<1)|(0X1<<0); //FCLK:HCLK:PCLK=1:4:8
}
void IO_Init()
{
rGPCCON = 0Xaaaa02a9;
rGPCUP = 0X00000000;
rGPDCON = 0Xaaaaaaaa;
rGPDUP = 0X00000000;
}
void PowerEnable(int invpwren, int pwren )
{
rGPGCON = (3<<8);
rGPGUP = 0X0;
rGPGDAT |= (1<<4);
rLCDCON5 = rLCDCON5&(~(1<<3))|(pwren<<3);
rLCDCON5 = rLCDCON5&(~(1<<5))|(invpwren<<5);
}
void Envidonoff(int onoff)
{
if(onoff == 1)
rLCDCON1 |= 1;
else
rLCDCON1 &= 0X3fffe;
}
void LCD_Init()
{
//Each Frame,TFT LCD,16bpp,Disable ENVID
rLCDCON1 = (CLKVAL<<8)|(0<<7)|(3<<5)|(12<<1)|0;
rLCDCON2 = (VBPD<<24)|(LINEVAL<<14)|(VFPD<<6)|(VSPW);
rLCDCON3 = (HBPD<<19)|(HOZVAL<<8)|(HFPD);
rLCDCON4 = (HSPW);
//LSB,565,falling edge,INVVLINE=1,INVVFRAME=1,PWREN=0,BSWP=1;
rLCDCON5 = (1<<11)|(0<<10)|(1<<9)|(1<<8)|(1<<0);
rLCDSADDR1 = ( (((U32)LCD_BUFFER>>22)<<21)|M5D((U32)LCD_BUFFER>>1) );
rLCDSADDR2 = (M5D(((U32)LCD_BUFFER+320*2*240)>>1));
rLCDSADDR3 = 320;
rLCDINTMSK |= 3;
rLPCSEL &= (~7);
rTPAL = 0;
}
void Brush_Background(U16 color)
{
unsigned int x,y;
for(y=0;y<240;y++)
{
for(x=0;x<320;x++)
{
LCD_BUFFER[y][x] = color;
}
}
}
void Main()
{
PLL_Init();
IO_Init();
LCD_Init();
PowerEnable(0,1);
Envidonoff(1);
Brush_Background(0xff);
while(1);
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|