天嵌 ARM开发社区

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

Phoenix2440-LCD试验

[复制链接]
qiang1092 发表于 2009-8-17 11:49:55 | 显示全部楼层 |阅读模式
声明:哎,写这个东西也不容易啊,尤其是中断寄存器和这个LCD,我花费的时间很多,贴到论坛很快会沉下去。所以,接下来的试验我不再往论坛贴了,如果你喜欢,请来我的博客:http://chenjunqiang08.blog.163.com/ 。文章转载,请注明出处。谢谢!

试验目的:操作东华LCD,了解LCD使用方法。

试验环境:tq2440开发板+J-link+ADS

试验过程:

1.连上j-link,开发板上电。

2.c语言编写试验代码,并包含所需要的启动代码等文件。

3.设置ADS的RO Base为0x30000000,仿真。

4.重新设置ADS的RO Base为0x00000000,RW Base为0x33000000。下载到板子的0地址,观察现象。


5.试验中的问题:

问题a: TQ2440的板子上带的是东华的屏,这个屏跟三星的不一样,所以设置也不一样,rLCDCON1-rLCDCON5(参考数据手册18/30)按东华的手册来设。其中主要是rLCDCON5(参考手册19/30)的设置,时序图如下:

东华的:



三星的:



可以看到明显的行同步和帧同步明显不同,所以和三星的参考程序设置不一样。具体设置参考程序。

问题b:设置ADS的RO Base为0x00000000,RW Base为0x33000000。

看ADS的提示信息如下:================================================================================
  Total RO Size(Code + RO Data) 2332 ( 2.28kB)
  Total RW Size(RW Data + ZI Data) 153600 ( 150.00kB)
  Total ROM Size(Code + RO Data + RW Data) 2332 ( 2.28kB)
================================================================================
RW段大小150k,是显示缓冲区的大小。所一只设置RO Base为0x00000000是不行的,4k的大小存不下RW段,所以把RW Base为0x33000000。

6.试验参考代码:

/*******************Phoenix2440-东华屏试验************************/
/*本实验是针对东华屏的测试,请一定要注意rLCDCON的设置尤其是rLCDCON5*/

#include "2440addr.h"

//define a array for LCD buf;为显示缓冲区定义空间
volatile unsigned short LCD_BUF1[240][320];

//initialize
void Lcd_Init()
{
//配置端口,用作LCD
rGPCUP=0x0;
rGPCCON=0xaaaa56a9;// 0xaaaa02a9;  
rGPDUP=0x0;
rGPDCON=0xaaaaaaaa; //Initialize VD[15:8]

//我的HCLK=100MHZ,如果你不知道你的,请参考我的UART试验
//VCLK=100/[(7+1)*2]=6.25
rLCDCON1=(7<<8)|//CLKVAL,6.25MHZ
  (0<<7)|//VM
  (3<<5)|(12<<1)|0;
   
  //按东华手册来设
rLCDCON2=(3)| //VSPW
  (15<<24)| //VBPD
  ((240-1)<<14)| //LINRVAL
  (12<<6); //VFPD
//按东华手册来设
rLCDCON4=(13<<8)|
  30; //HSPW
rLCDCON3=(38<<19)| //HBPD
  ((320-1)<<8)| //HOZVAL
  (20); //HFPD

//为什么我们的东华屏不能显示?就在这里,信号的极性没设对,
//东华和三星的不一样  
rLCDCON5=(0<<7)| //VD数据极性,0-正常,////绝对正确///。
  (1<<11)| //0-5:5:5:1,1-5:6:5////绝对正确///。
  (0<<1)| //字节交换.////绝对正确///。
  (0)| //半字节交换.////绝对正确///。
  (1<<9)| //HSYNC,水平。行同步。////绝对正确///。
  (1<<8)| //VSYNC,垂直。帧同步。////绝对正确///。
  (0<<6)| //VDEN的极性,VM。
  (1<<5)| //PWREN极性
  (1<<10)| //0-VCLK的下降沿读数据,1-上升沿
  (0<<4); //LEND极性
   
// 下面三句是设置显示缓冲区的地址,不说了
rLCDSADDR1=(((unsigned int)LCD_BUF1>>22)<<21)|(((unsigned int)LCD_BUF1>>1)&0x1fffff);
rLCDSADDR2=((((unsigned int)LCD_BUF1+(320*240))>>1)&0x1fffff);
rLCDSADDR3=(0<<11)|320;

rLCDINTMSK|=3; // MASK LCD Sub Interrupt
rTPAL=0; // Disable Temp Palette
}

void delay(int time)
{while(time--);}

void Main()
{
int i,j,k=0;

Lcd_Init();
rLCDCON1|=1; // ENVID=ON;控制信号输出使能
rTPAL=(1<<24)|(250<<16);//display RED,满屏红
delay(999999);
rTPAL=(1<<24)|(250<<8);//display GREEN
delay(999999);
rTPAL=(1<<24)|(250);//display BLUE
delay(999999);
rTPAL=(0<<24);// Disable Temp Palette

while(1)
{//下面是为每一个像素点赋值。
  for(i=0;i<240;i++)
  {
  for(j=0;j<320;j++)
  {//这三句为什么这么麻烦?是为了让屏幕的颜色变化,请直接无视
  LCD_BUF1[j]=(k|(~k<<6)|((0xaa&k)<<11))&0xffff;
  if(k++==32)
  k=0;
  }
  delay(999999);
  }
  delay(999999);delay(999999);
}
}
TQ_guoxixiao 发表于 2012-5-10 10:38:35 | 显示全部楼层
多谢分享
可联系我们管理员,让他把你的帖子置顶
回复

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-8-2 05:51 , Processed in 2.051760 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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