|
本帖最后由 zyp568 于 2012-7-22 09:46 编辑
实验板:TQ2440
环境:ubuntu12.04 + arm-linux-gcc-3.4.5-glibc-2.3.6
我的板子上配的LCD,根据数据手册上是24bpp,从原理图上看,VD[23:0]对应的都接至了2440的VD引脚上。
写了一段代码,想要用单一颜色填充全屏,结果发现,只能显示出绿色,刚复位那一下,绿色较亮,接着就变得很暗,而且屏幕还抖动。代码贴在下面了,请各位帮忙看看是咋回事吧。
- //初始化部分
- #define TFT_X_SIZE (480)
- #define TFT_Y_SIZE (272)
-
- extern volatile unsigned int TFTBuffer[TFT_X_SIZE][TFT_Y_SIZE];
- #define CLKVAL (5)
- #define MMODE (0)
- #define PNRMODE (3)
- #define BPPMODE (13)
- #define ENVID (0)
- #define VBPD (1)
- #define LINEVAL ( TFT_Y_SIZE - 1 )
- #define VFPD (1)
- #define VSPW (9)
- #define HBPD (1)
- #define HOZVAL ( TFT_X_SIZE - 1 )
- #define HFPD (1)
- #define MVAL (13) //?
- #define HSPW (40)
- #define BPP24BL (0)
- #define FRM565 (1)
- #define INVVCLK (0)
- #define INVVLINE (1)
- #define INVVFRAME (1)
- #define INVVD (0)
- #define INVPWREN (0)
- #define INVLEND (0)
- #define PWREN (1)
- #define ENLEND (0)
- #define BSWP (0)
- #define HWSWP (0)
- #define LCDBANK ( (unsigned long)TFTBuffer>>22 )
- #define LCDBASEU ( ((unsigned long)TFTBuffer>>1)&0x1FFFFF )
- #define LCDBASEL ( (((unsigned long)TFTBuffer + (TFT_X_SIZE*TFT_Y_SIZE*4))>>1)&0x1FFFFF )
- #define OFFSIZE (0)
- #define PAGEWIDTH (TFT_X_SIZE*2)
-
- #define LCDCON1_VAL ( CLKVAL<<8 | MMODE<<7 | PNRMODE<<5 | BPPMODE<<1 | ENVID )
- #define LCDCON2_VAL ( VBPD<<24 | LINEVAL<<14 | VFPD<<6 | VSPW )
- #define LCDCON3_VAL ( HBPD<<19 | HOZVAL<<8 | HFPD )
- #define LCDCON4_VAL ( MVAL<<8 | HSPW )
- #define LCDCON5_VAL ( BPP24BL<<12 | FRM565<<11 | INVVCLK<<10 | \
- INVVLINE<<9 | INVVFRAME<<8 | INVVD<<7 | INVVD<<6 | \
- INVPWREN<<5 | INVLEND<<4 | PWREN<<3 | ENLEND<<2 | \
- BSWP<<1 | HWSWP )
- #define LCDSADDR1_VAL ( LCDBANK<<21 | LCDBASEU )
- #define LCDSADDR2_VAL ( LCDBASEL )
- #define LCDSADDR3_VAL ( OFFSIZE<<11 | PAGEWIDTH )
- #define GPDCON_Val 0xAAAAAAAA //IO口是在一个IO初始化函数中统一初始化的。
- #define GPDDAT_Val 0xFFFF //试过使能上拉,现象一样
- #define GPCCON_Val 0xAAAAAAAA
- #define GPCDAT_Val 0xFF00
- void InitTFT( void )
- {
- LCDCON1 = LCDCON1_VAL;
- LCDCON2 = LCDCON2_VAL;
- LCDCON3 = LCDCON3_VAL;
- LCDCON4 = LCDCON4_VAL;
- LCDCON5 = LCDCON5_VAL;
- LCDSADDR1 = LCDSADDR1_VAL;
- LCDSADDR2 = LCDSADDR2_VAL;
- LCDSADDR3 = LCDSADDR3_VAL;
- LCDINTMSK |= 0x3; //屏蔽LCD中断
- LPCSEL = 0; //禁止LPC3600/LCC3600模式
- TPAL = 0; //禁止临时调色板
- }
复制代码- //功能函数
- volatile unsigned int TFTBuffer[TFT_X_SIZE][TFT_Y_SIZE];
- //开启或关闭TFTLCD控制器
- void TFT_EnOrDis( unsigned int iState )
- {
- if( iState == 0 )
- LCDCON1 &= ~1;
- else
- LCDCON1 |= 1;
- }
- //在指定坐标特定颜色的点描点
- int TFT_DrawPoint( unsigned int x, unsigned int y, unsigned int iColour )
- {
- if( x>HOZVAL || y>LINEVAL ) return FAIL; TFTBuffer[x][y] = iColour;
- return SUCCESS;
- }
复制代码- //在main()中调用功能函数填充全屏
- TFT_EnOrDis(1);
- iColour = TFT_RED;
- for( x = 0 ; x < 480 ; x++ )
- for( y = 0 ; y < 272 ; y++ )
- TFT_DrawPoint( x, y, iColour );
复制代码
|
|