搜索
bottom↓
回复: 4

S3C2440 LCD控制器,显示不全

[复制链接]

出0入0汤圆

发表于 2011-4-3 15:27:45 | 显示全部楼层 |阅读模式
小弟调了两天了,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, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2011-4-3 15:31:32 | 显示全部楼层
这个是工程文件,ourdev_627933K3QD52.zip(文件大小:85K) (原文件名:TFT_LCD2.zip)

出0入0汤圆

发表于 2011-4-23 18:10:48 | 显示全部楼层
/* LCDCON1 */
#define LCD_WIDTH  240
#define LCD_HEIGHT 320
#define LCD_CLKVAL 7                // HCLK/((CLKVAL+1)*2) 100M/2/(7+1) = 6.25M
/* LCDCON2 */
#define LCD_VBPD 0
#define LCD_VFPD 2
#define LCD_VSPW 2

/* LCDCON3 */
#define LCD_HBPD 20
#define LCD_HFPD 10

/* LCDCON4 */
#define LCD_SPW 10

#pragma pack(100)
unsigned short VRAM[LCD_HEIGHT][LCD_WIDTH];
#pragma pack()

#define M5D(n)    ((n)&0x1fffff)

#define LCD_ADDR  (cyg_uint32)VRAM

#define LCD_POWOFF_TIMEOUT         600     //60s

static struct pos {
    cyg_uint32 x;
    cyg_uint32 y;
    cyg_uint16 c;
    cyg_uint32 idle;
    cyg_uint32 busy;
} cursor;

static void Lcd_Port_Init(void)
{
    rGPCUP  = 0xFFFFFFFF;  // Disable Pull-up register
    rGPCCON = 0xAAAA02A8;  // Initialize VD[7:0],VM,VFRAME,VLINE,VCLK

    rGPDUP  = 0xFFFFFFFF;  // Disable Pull-up register
    rGPDCON = 0xAAAAAAAA;  // Initialize VD[15:8]
}

static void LCD_Init(void)
{
    rLCDCON1 = (LCD_CLKVAL << 8) | (3 << 5) | (12 << 1);
    rLCDCON2 = (LCD_VBPD << 24) | ((LCD_HEIGHT - 1) << 14) | (LCD_VFPD << 6)|(LCD_VSPW << 0);
    rLCDCON3 = (LCD_HBPD << 19) | ((LCD_WIDTH - 1) << 8) | (LCD_HFPD << 0);
    rLCDCON4 = (LCD_SPW << 0);

#if !defined(LCD_CON5)
#    define LCD_CON5 ((1<<11) | (1 << 9) | (1 << 8) | (1 << 3) | (1 << 0))
#endif
    rLCDCON5 = LCD_CON5;

    rLCDSADDR1 = ((LCD_ADDR >> 22) << 21) | ((M5D(LCD_ADDR >> 1)) << 0);
    rLCDSADDR2 = M5D((LCD_ADDR + LCD_WIDTH * LCD_HEIGHT * 2) >> 1);
    rLCDSADDR3 = LCD_WIDTH;

    rLCDINTMSK |= 3;
    rLPCSEL &= (~7);

    rTPAL = 0x0;
    rLPCSEL &= ~((1 << 4) | 1);
}

出0入0汤圆

发表于 2011-5-1 12:34:42 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-7-19 14:47:50 | 显示全部楼层
mark
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 21:30

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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