当前位置:首页 > 单片机 > 单片机
[导读]PC主机:Ubuntu 10.4 和redhat 9.0目标板:TQ2440开发板 Linux内核:2.6.30屏幕型号:WXCAT35-TG3#001F 分辨率: 320X240本文将介绍如何移植LCD设备。在移植前,先配置下内核,将LCD设备编译进内核。1.移植移植LCD设

PC主机:Ubuntu 10.4 和redhat 9.0

目标板:TQ2440开发板 Linux内核:2.6.30

屏幕型号:WXCAT35-TG3#001F 分辨率: 320X240


本文将介绍如何移植LCD设备。

在移植前,先配置下内核,将LCD设备编译进内核。


1.移植

移植LCD设置只须修改位于arch/arm/mach-s3c2440/mach-smdk2440.c中的两个结构体的数据。

1.1 s3c2410fb_display结构

修改后的内容如下:



/*LCDdriverinfo*/

staticstructs3c2410fb_displaysmdk2440_lcd_cfg__initdata={

.lcdcon5=S3C2410_LCDCON5_FRM565|

S3C2410_LCDCON5_INVVLINE|

S3C2410_LCDCON5_INVVFRAME|

S3C2410_LCDCON5_PWREN|

S3C2410_LCDCON5_HWSWP,

.type=S3C2410_LCDCON1_TFT,

.width=320,//240,

.height=240,//320,

.pixclock=156250,//166667,/*HCLK60MHz,divisor10*/

.xres=320,//240,

.yres=240,//320,

.bpp=16,

.left_margin=20,

.right_margin=38,//8,

.hsync_len=30,//4,

.upper_margin=15,//8,

.lower_margin=12,//7,

.vsync_len=3,//4,

};


上面的参数是如何修改的呢?我们来看下。


type表示显示模式,这里为TFT模式。

width和height表示屏幕的分辨率,我的分辨率是320X240。

xres和yres分别等于width和height。

bpp表示所每个像素点位数,这里使用16位。

left_margin,right_margin,hsync_len,upper_margin,lower_margin,vsync_len这六个参数的值由LCD的手册给出。下图为LCD中的参数:


在这里,我给出上面6个参数和LCD手册中数据的对应关系:


.left_margin = Hsync front porch = 20

.right_margin = Hsync back porch = 38

.hsync_len = Hsync pulse width = 30

.upper_margin = Vsyncbackporch = 15

.lower_margin = Vsync front porch = 12

.vsync_len = Vsync pulse width = 3


pixclock的值是用来计算CLKVAL的。在S3C2440的datasheet中,CLKVAL的计算公式为:

CLKVAL = HCLK / VCLK / 2 -1,而VCLK即为上面图中的Dclk,值为6.4MHz。


/*s3c2410fb_activate_var

*

*activate(set)thecontrollerfromthegivenframebuffer

*information

*/

staticvoids3c2410fb_activate_var(structfb_info*info)

{

structs3c2410fb_info*fbi=info->par;

void__iomem*regs=fbi->io;

inttype=fbi->regs.lcdcon1&S3C2410_LCDCON1_TFT;/*regs.lcdcon1在s3c2410fb_check_var设置*/

structfb_var_screeninfo*var=&info->var;

intclkdiv=s3c2410fb_calc_pixclk(fbi,var->pixclock)/2;

dprintk("%s:var->xres=%dn",__func__,var->xres);

dprintk("%s:var->yres=%dn",__func__,var->yres);

dprintk("%s:var->bpp=%dn",__func__,var->bits_per_pixel);

if(type==S3C2410_LCDCON1_TFT){

s3c2410fb_calculate_tft_lcd_regs(info,&fbi->regs);/*根据var,计算出控制寄存器需要设置的值*/

--clkdiv;

if(clkdiv<0)

clkdiv=0;

}else{

s3c2410fb_calculate_stn_lcd_regs(info,&fbi->regs);

if(clkdiv<2)

clkdiv=2;

}

fbi->regs.lcdcon1|=S3C2410_LCDCON1_CLKVAL(clkdiv);/*设置CLKVAL*/

/*writenewregisters*/

dprintk("newregisterset:n");

dprintk("lcdcon[1]=0x%08lxn",fbi->regs.lcdcon1);

dprintk("lcdcon[2]=0x%08lxn",fbi->regs.lcdcon2);

dprintk("lcdcon[3]=0x%08lxn",fbi->regs.lcdcon3);

dprintk("lcdcon[4]=0x%08lxn",fbi->regs.lcdcon4);

dprintk("lcdcon[5]=0x%08lxn",fbi->regs.lcdcon5);

/*把计算好的值填入LCD控制器中*/

writel(fbi->regs.lcdcon1&~S3C2410_LCDCON1_ENVID,

regs+S3C2410_LCDCON1);/*仍然禁止LCD*/

writel(fbi->regs.lcdcon2,regs+S3C2410_LCDCON2);

writel(fbi->regs.lcdcon3,regs+S3C2410_LCDCON3);

writel(fbi->regs.lcdcon4,regs+S3C2410_LCDCON4);

writel(fbi->regs.lcdcon5,regs+S3C2410_LCDCON5);

/*setlcdaddresspointers*/

s3c2410fb_set_lcdaddr(info);/*设置LCD帧缓冲起始地址*/

fbi->regs.lcdcon1|=S3C2410_LCDCON1_ENVID,

writel(fbi->regs.lcdcon1,regs+S3C2410_LCDCON1);/*使能LCD*/

}

staticunsignedints3c2410fb_calc_pixclk(structs3c2410fb_info*fbi,

unsignedlongpixclk)

{

unsignedlongclk=clk_get_rate(fbi->clk);/*获取当前时钟频率(Hz)*/

unsignedlonglongdiv;

/*pixclkisinpicoseconds,ourclockisinHz

*

*Hz->picosecondsis/10^-12

*/

div = (unsigned long long)clk * pixclk;

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

7月29日消息,LG Display已将其在美国的70项LCD液晶显示器相关专利转让给三星显示,值得注意的是,三星显示已于三年前退出LCD业务。

关键字: LCD 三星

HT16K24操作电压为2.4V~5.5V,内建I²C通信接口,提供三种LCD显示与按键模式:24SEG × 4COM + 24 KEY;22SEG × 6COM + 22 KEY;20SEG × 8COM + 20 K...

关键字: LCD MCU 蜂鸣器

离线GPS工具:跟踪、保存和查找具有距离和方位的航路点——没有网络,没有云,您的数据,您的规则。

关键字: GPS设备 LCD 微控制器 Arduino Uno

在技术上,LCD和OLED各有其独特之处。液晶电视通过控制液态晶体实现图像显示,其原理是在两片玻璃基板中夹入液态晶体,通过细小的电线控制水晶分子的方向。而OLED凭借自发光二极管带来更优的视角与色彩表现,其RGB色彩信号...

关键字: OLED LCD

双锁系统,通过键盘输入密码开门,客人来了用短信开门

关键字: LCD 双锁系统 L293D 变压器

在汽车显示系统领域,TFT LCD显示屏目前是车载显示面板的主流选择。与此同时,OLED和micro-LED显示屏也逐渐吸引了市场的广泛关注。为了适应不同的显示技术,我们需要开发相应的电源技术。TFT LCD显示屏通常使...

关键字: LCD OLED micro-LED

如今,汽车行业对先进显示屏的需求空前高涨,亟需能够实现更大尺寸、更高亮度、曲面设计、更高分辨率和更高对比度的解决方案。与此同时,各类新型车载显示屏也日益受到青睐。目前,TFT LCD是汽车平板显示技术的主流选择。OLED...

关键字: LCD OLED micro-LED

大家好,欢迎回来。在这个项目中,我们将学习如何使用键盘和LCD显示制作一个安全的基于Arduino的门锁。你可以用它来保护你的办公室、房间或家里的保险箱。要锁门和开锁,你需要在安全系统中输入密码。这确保了只有经过授权的人...

关键字: 键盘 LCD Arduino 电子门锁

April 1, 2025 ---- 乐金显示广州LCD 8.5代线今日(4月1日)正式交割至TCL华星光电,并改名为t11。至此,TCL华星光电将拥有2条6代、4条8.5代、1条8.6代和2条10.5代LCD产线。Tr...

关键字: 电视 PID面板 LCD

将您的树莓派Pico变成带有触摸屏界面的USB-HID设备!在这个项目中,我们将在Arduino IDE中设置编程环境,为3.5”Pico Touch LCD屏蔽配置库,测试基本功能,创建简单的按钮(用于复制和粘贴),显...

关键字: 树莓派 触摸屏 LCD Windows
关闭