设为首页 加入收藏

TOP

Linux-2.6_LCD驱动学习(三)
2019-09-01 23:08:21 】 浏览:79
Tags:Linux-2.6_LCD 驱动 学习
319
175 * bit[13:6] : VFPD, 发出最后一行数据之后,再过多长时间才发出VSYNC 176 * LCD手册T2-T5=322-320=2, 所以VFPD=2-1=1 177 * bit[5:0] : VSPW, VSYNC信号的脉冲宽度, LCD手册T1=1, 所以VSPW=1-1=0 178 */ 179 lcd_regs->lcdcon2 = (3<<24) | (319<<14) | (1<<6) | (0<<0); 180 181 182 /* 水平方向的时间参数 183 * bit[25:19]: HBPD, VSYNC之后再过多长时间才能发出第1行数据 184 * LCD手册 T6-T7-T8=17 185 * HBPD=16 186 * bit[18:8]: 多少列, 240, 所以HOZVAL=240-1=239 187 * bit[7:0] : HFPD, 发出最后一行里最后一个象素数据之后,再过多长时间才发出HSYNC 188 * LCD手册T8-T11=251-240=11, 所以HFPD=11-1=10 189 */ 190 lcd_regs->lcdcon3 = (16<<19) | (239<<8) | (10<<0); 191 192 /* 水平方向的同步信号 193 * bit[7:0] : HSPW, HSYNC信号的脉冲宽度, LCD手册T7=5, 所以HSPW=5-1=4 194 */ 195 lcd_regs->lcdcon4 = 4; 196 197 #else 198 lcd_regs->lcdcon2 = S3C2410_LCDCON2_VBPD(5) | \ 199 S3C2410_LCDCON2_LINeva l(319) | \ 200 S3C2410_LCDCON2_VFPD(3) | \ 201 S3C2410_LCDCON2_VSPW(1); 202 203 lcd_regs->lcdcon3 = S3C2410_LCDCON3_HBPD(10) | \ 204 S3C2410_LCDCON3_HOZVAL(239) | \ 205 S3C2410_LCDCON3_HFPD(1); 206 207 lcd_regs->lcdcon4 = S3C2410_LCDCON4_MVAL(13) | \ 208 S3C2410_LCDCON4_HSPW(0); 209 210 #endif 211 /* 信号的极性 212 * bit[11]: 1=565 format 213 * bit[10]: 0 = The video data is fetched at VCLK falling edge 214 * bit[9] : 1 = HSYNC信号要反转,即低电平有效 215 * bit[8] : 1 = VSYNC信号要反转,即低电平有效 216 * bit[6] : 0 = VDEN不用反转 217 * bit[3] : 0 = PWREN输出0 218 * bit[1] : 0 = BSWP 219 * bit[0] : 1 = HWSWP 2440手册P413 220 */ 221 lcd_regs->lcdcon5 = (1<<11) | (0<<10) | (1<<9) | (1<<8) | (1<<0); 222 223 /* 3.3 分配显存(framebuffer), 并把地址告诉LCD控制器 */ 224 s3c_lcd->screen_base = dma_alloc_writecombine(NULL, s3c_lcd->fix.smem_len, &s3c_lcd->fix.smem_start, GFP_KERNEL); 225 226 lcd_regs->lcdsaddr1 = (s3c_lcd->fix.smem_start >> 1) & ~(3<<30); 227 lcd_regs->lcdsaddr2 = ((s3c_lcd->fix.smem_start + s3c_lcd->fix.smem_len) >> 1) & 0x1fffff; 228 lcd_regs->lcdsaddr3 = (240*16/16); /* 一行的长度(单位: 2字节) */ 229 230 //s3c_lcd->fix.smem_start = xxx; /* 显存的物理地址 */ 231 /* 启动LCD */ 232 lcd_regs->lcdcon1 |= (1<<0); /* 使能LCD控制器 */ 233 lcd_regs->lcdcon5 |= (1<<3); /* 使能LCD本身 */ 234 *gpbdat |= 1; /* 输出高电平, 使能背光 */ 235 236 /* 4. 注册 */ 237 register_framebuffer(s3c_lcd); 238 239 return 0; 240 } 241 242 static void lcd_exit(void) 243 { 244 unregister_framebuffer(s3c_lcd); 245 lcd_regs->lcdcon1 &= ~(1<<0); /* 关闭LCD本身 */ 246 *gpbdat &= ~1; /* 关闭背光 */ 247 dma_free_writecombine(NULL, s3c_lcd->fix.smem_len, s3c_lcd->screen_base, s3c_lcd->fix.smem_start); 248 iounmap(lcd_regs); 249 iounmap(gpbcon); 250 iounmap(gpccon); 251 iounmap(gpdcon); 252 iounmap(gpgcon); 253 framebuffer_release(s3c_lcd); 254 } 255 256 module_init(lcd_init); 257 module_exit(lcd_exit); 258 259 MODULE_LICENSE("GPL"); LCD Code

insmod cfbcopyarea.ko
insmod cfbfillrect.ko
insmod cfbimgblt.ko
insmod lcd.ko

 

 

还有一种是系统自带的LCD驱动程序,使用分层分离所写,再来学习!

首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇CFS调度器(1)-基本原理 下一篇linux中服务环境的搭建

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目