天嵌 ARM开发社区

 找回密码
 注册
查看: 2485|回复: 1

再次请教TFTLCD的问题

[复制链接]
zyp568 发表于 2012-7-22 09:13:45 | 显示全部楼层 |阅读模式
本帖最后由 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引脚上。
写了一段代码,想要用单一颜色填充全屏,结果发现,只能显示出绿色,刚复位那一下,绿色较亮,接着就变得很暗,而且屏幕还抖动。代码贴在下面了,请各位帮忙看看是咋回事吧。
  1. //初始化部分
  2. #define TFT_X_SIZE (480)
  3. #define TFT_Y_SIZE (272)

  4. extern volatile unsigned int TFTBuffer[TFT_X_SIZE][TFT_Y_SIZE];

  5. #define CLKVAL (5)
  6. #define MMODE  (0)
  7. #define PNRMODE (3)
  8. #define BPPMODE (13)
  9. #define ENVID (0)
  10. #define VBPD  (1)
  11. #define LINEVAL ( TFT_Y_SIZE - 1 )
  12. #define VFPD (1)
  13. #define VSPW (9)
  14. #define HBPD (1)
  15. #define HOZVAL ( TFT_X_SIZE - 1 )
  16. #define HFPD (1)
  17. #define MVAL (13)    //?
  18. #define HSPW (40)
  19. #define BPP24BL  (0)
  20. #define FRM565  (1)
  21. #define INVVCLK  (0)
  22. #define INVVLINE (1)
  23. #define INVVFRAME (1)
  24. #define INVVD  (0)
  25. #define INVPWREN (0)
  26. #define INVLEND  (0)
  27. #define PWREN  (1)
  28. #define ENLEND  (0)
  29. #define BSWP  (0)
  30. #define HWSWP  (0)
  31. #define LCDBANK  ( (unsigned long)TFTBuffer>>22 )
  32. #define LCDBASEU ( ((unsigned long)TFTBuffer>>1)&0x1FFFFF )
  33. #define LCDBASEL ( (((unsigned long)TFTBuffer + (TFT_X_SIZE*TFT_Y_SIZE*4))>>1)&0x1FFFFF )

  34. #define OFFSIZE  (0)
  35. #define PAGEWIDTH (TFT_X_SIZE*2)

  36. #define LCDCON1_VAL ( CLKVAL<<8 | MMODE<<7 | PNRMODE<<5 | BPPMODE<<1 | ENVID )
  37. #define LCDCON2_VAL ( VBPD<<24 | LINEVAL<<14 | VFPD<<6 | VSPW )
  38. #define LCDCON3_VAL ( HBPD<<19 | HOZVAL<<8 | HFPD )
  39. #define LCDCON4_VAL ( MVAL<<8 | HSPW )
  40. #define LCDCON5_VAL ( BPP24BL<<12 | FRM565<<11 | INVVCLK<<10 | \
  41.        INVVLINE<<9 | INVVFRAME<<8 | INVVD<<7 | INVVD<<6 | \
  42.        INVPWREN<<5 | INVLEND<<4 | PWREN<<3 | ENLEND<<2 | \
  43.        BSWP<<1 | HWSWP )
  44. #define LCDSADDR1_VAL ( LCDBANK<<21 | LCDBASEU )
  45. #define LCDSADDR2_VAL ( LCDBASEL )
  46. #define LCDSADDR3_VAL ( OFFSIZE<<11 | PAGEWIDTH )

  47. #define GPDCON_Val  0xAAAAAAAA        //IO口是在一个IO初始化函数中统一初始化的。
  48. #define GPDDAT_Val  0xFFFF            //试过使能上拉,现象一样
  49. #define GPCCON_Val  0xAAAAAAAA
  50. #define GPCDAT_Val   0xFF00

  51. void InitTFT( void )
  52. {
  53.     LCDCON1 = LCDCON1_VAL;
  54.     LCDCON2 = LCDCON2_VAL;
  55.     LCDCON3 = LCDCON3_VAL;
  56.     LCDCON4 = LCDCON4_VAL;
  57.     LCDCON5 = LCDCON5_VAL;

  58.     LCDSADDR1 = LCDSADDR1_VAL;
  59.     LCDSADDR2 = LCDSADDR2_VAL;
  60.     LCDSADDR3 = LCDSADDR3_VAL;

  61.     LCDINTMSK |= 0x3;   //屏蔽LCD中断
  62.     LPCSEL = 0;         //禁止LPC3600/LCC3600模式
  63.     TPAL = 0;           //禁止临时调色板
  64. }
复制代码
  1. //功能函数

  2. volatile unsigned int TFTBuffer[TFT_X_SIZE][TFT_Y_SIZE];

  3. //开启或关闭TFTLCD控制器
  4. void TFT_EnOrDis( unsigned int iState )
  5. {
  6.     if( iState == 0 )
  7.         LCDCON1 &= ~1;
  8.     else
  9.         LCDCON1 |= 1;
  10. }

  11. //在指定坐标特定颜色的点描点
  12. int TFT_DrawPoint( unsigned int x, unsigned int y, unsigned int iColour )
  13. {
  14.     if( x>HOZVAL || y>LINEVAL ) return FAIL;    TFTBuffer[x][y] = iColour;
  15.     return SUCCESS;
  16. }
复制代码
  1. //在main()中调用功能函数填充全屏

  2. TFT_EnOrDis(1);
  3. iColour = TFT_RED;

  4. for( x = 0 ; x < 480 ; x++ )
  5.     for( y = 0 ; y < 272 ; y++ )
  6.         TFT_DrawPoint( x, y, iColour );
复制代码

 楼主| zyp568 发表于 2012-7-22 12:38:35 | 显示全部楼层
贴上整个测试工程,求各位高人笼罩啊。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-5-2 23:15 , Processed in 1.031243 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表