Chinaunix首页 | 论坛 | 博客
  • 博客访问: 36328
  • 博文数量: 16
  • 博客积分: 1425
  • 博客等级: 上尉
  • 技术积分: 135
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-06 15:00
文章分类

全部博文(16)

文章存档

2011年(1)

2010年(5)

2009年(4)

2008年(6)

我的朋友

分类: 嵌入式

2009-11-13 19:08:36

裸奔S3C2440的LCD功能,使用三星3.5的屏,主要是LCD控制器要设置好,由于没有三星屏里边的控制芯片参数,用东华手册的作为参考,总是有左的一块区域没有显示,后来灵机想到用买的开发板的一个测试程序做参考。呵呵,解决了上面的问题,但是又出了个问题,就是屏的上半部分和下半部分显示一样的内容,开始以为是VSPW
,VBPD,VFPD没设置好,弄了半天,没搞好。嘿嘿,玩了下游戏,重新比对测试程序,发现是rLCDSADDR2参数的显示缓冲区定义有问题,先将我弄好的程序帖上:
void Lcd_Init()
{
    //配置端口,用作LCD
    rGPCUP=0x0;
    rGPCCON=0xaaaa02a9;// ;      0xaaaa56a9
    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=(15)|            //VSPW
             (1<<24)|        //VBPD
             ((240-1)<<14)|    //LINRVAL
             (2<<6);        //VFPD
    
    rLCDCON4=(13<<8)|
             8;            //HSPW
    rLCDCON3=(5<<19)|        //HBPD
                  ((320-1)<<8)|    //HOZVAL
                  (15);            //HFPD
   
    rLCDCON5=(0<<7)|    //VD数据极性,0-正常,////绝对正确///。
             (1<<11)|    //0-5:5:5:1,1-5:6:5////绝对正确///。
             (0<<1)|    //字节交换.////绝对正确///。
             (1)|        //半字节交换.////绝对正确///。
             (1<<9)|    //HSYNC,水平。行同步。////绝对正确///。
             (1<<8)|    //VSYNC,垂直。帧同步。////绝对正确///。
             (0<<6)|    //VDEN的极性,VM。
             (1<<5)|    //PWREN极性
             (1<<10)|    //0-VCLK的下降沿读数据,1-上升沿
             (1<<3);    //LEND极性 (0<<4)
   
    // 下面三句是设置显示缓冲区的地址,不说了
    rLCDSADDR1=(((u32)LCD_BUFFER>>22)<<21)|(((u32)LCD_BUFFER>>1)&0x1fffff);
    rLCDSADDR2=((((u32 )LCD_BUFFER+(320*240*2))>>1)&0x1fffff);
    rLCDSADDR3=(0<<11)|320;
   
    rLCDINTMSK|=3; // MASK LCD Sub Interrupt
    rTCONSEL &= (~7) ;
    //rTCONSEL &= ~( ( 1 << 4 ) | 1 );     // Disable LPC3480
    rTPAL=0; // Disable Temp Palette
}

另外在调用上面初始函数后要使用下面函数设置背光和LCD给电。
    rLCDCON1|=1; // ENVID=ON;控制信号输出使能
    LcdBkLtSet(70);
    Lcd_PowerEnable(0, 1);
    Lcd_EnvidOnOff(1);        //turn on vedio
阅读(1028) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~