LCD驱动详解
参考文档:《液晶屏.pdf》《S3C2440用户手册》《JZ2440-V3原理图》

frame buffer: 显存,用于存放LCD显示数据;frame buffer通过LCD控制器和LCD Panel建立一一映射关系;
LCD控制器: 参考LCD用户手册,配置LCD控制器,用于发出LCD控制信号,驱动LCD显示;
扫描方向: 如图①所示,由start到end的扫描方向是:从左到右,从上到下(扫描方向的一种);
HSYNC: 行同步信号,用于行切换,一行扫描结束,需要扫描新行时,需要先发送行同步信号;
VSYNC: 列同步信号,用于列切换,一帧扫描结束,需要扫描新的一帧时,需要先发送列同步信号;
时钟信号: 每来一个时钟,扫描的点移位一;
原理图——管脚说明



硬件操作配置
①配置LCD控制引脚;
②根据LCD手册,配置LCD控制器;
③分配Frame buffer,并映射到LCD Panel;
《液晶屏.pdf》
Block Diagram

Interface Timing

Driver Timing

Timing Chart
a、

b、

《S3C2440用户手册》
LCD CONTROLLER SPECIAL REGISTERS






















MEMORY DATA FORMAT (TFT)



驱动程序
1
22
26
31
];
44
};
51
52
53
56
60
62 ];
64
66 {
68 chan chan }
72
73 {
77
79 {
81 }
83
84 val val val
89 pseudo_palette[regno]
91 ;
92 }
93
94
95 .owner .fb_setcolreg .fb_fillrect .fb_copyarea .fb_imageblit };
102
103 {
106 lcd_info ,
110 strcpy(lcd_info lcd_info lcd_info lcd_info lcd_info
118 lcd_info lcd_info lcd_info lcd_info lcd_info lcd_info
126 lcd_info lcd_info lcd_info lcd_info lcd_info lcd_info
134 lcd_info
137 lcd_info lcd_info
142 gpc_con );
145 gpd_con );
146 gpg_con );
147 gpb_con );
148 gpb_dat
150
153
156 );
158
161
164 lcd_regs lcd_regs lcd_regs lcd_regs lcd_regs lcd_regs
172 lcd_info
176 lcd_regs lcd_regs lcd_regs
180 lcd_regs lcd_regs
186 register_framebuffer(lcd_info);
188
190 ;
191 }
192
193 {
195 dma_free_writecombine( unregister_framebuffer(lcd_info);
197 lcd_regs lcd_regs
202 iounmap(lcd_regs);
203 iounmap(gpc_con);
204 iounmap(gpd_con);
205 iounmap(gpg_con);
206 iounmap(gpb_con);
207
208 framebuffer_release(lcd_info);
209 }
211
212 module_init(lcd_init);
213 module_exit(lcd_exit);
214 MODULE_LICENSE("GPL");
215 /******** 1 end ********/
附:
1 /**
2 * framebuffer_alloc - creates a new frame buffer info structure
3 *
4 * @size: size of driver private data, can be zero
5 * @dev: pointer to the device for this fb, this can be NULL
6 *
7 * Creates a new frame buffer info structure. Also reserves @size bytes
8 * for driver private data (info->par). info->par (if any) will be
9 * aligned to sizeof(long).
10 *
11 * Returns the new structure, or NULL if an error occured.
12 *
13 */
14 struct fb_info *framebuffer_alloc(size_t size, struct device *dev);
调试
pc-linux:
cd /work/system/linux-2.6.22.6/
make menuconfig
(lcd驱动以模块方式编译)
make uImage
make modules
cp /work/system/linux-2.6.22.6/drivers/video/cfbcopyarea.ko /work/nfs_root
cp /work/system/linux-2.6.22.6/drivers/video/cfbfillrect.ko /work/nfs_root
cp /work/system/linux-2.6.22.6/drivers/video/cfbimgblt.ko /work/nfs_root
cp /work/system/linux-2.6.22.6/arch/arm/boot/uImage /work/nfs_root/uImage_nolcd
board-u-boot:
nfs 30000000 192.168.0.103:/work/nfs_root/uImage_nolcd
bootm 30000000
board-linux:
mount -t nfs -o nolock,vers=2 192.168.0.103:/work/nfs_root /mnt
cd /mnt
insmod cfbcopyarea.ko
insmod cfbfillrect.ko
insmod cfbimgblt.ko
insmod lcd.ko
echo hello world! 2019/10/18 > /dev/tty1

cat test.bmp > /dev/fb0

vi /etc/inittab
#+++
tty1::askfirst:-/bin/sh
reboot
insmod buttons.ko
insmod cfbcopyarea.ko
insmod cfbfillrect.ko
insmod cfbimgblt.ko
insmod lcd.ko
<input way:key>
KEY_L KEY_S KEY_ENTER(ls'\n')

LCD驱动详解的更多相关文章
- 16.Linux-LCD驱动(详解)
在上一节LCD层次分析中,得出写个LCD驱动入口函数,需要以下4步: 1) 分配一个fb_info结构体: framebuffer_alloc(); 2) 设置fb_info 3) 设置硬件相关的操作 ...
- 16.Linux-LCD驱动(详解)【转】
转自:https://www.cnblogs.com/lifexy/p/7604011.html 在上一节LCD层次分析中,得出写个LCD驱动入口函数,需要以下4步: 1) 分配一个fb_info结构 ...
- linux usb 驱动详解
linux usb 驱动详解 USB 设备驱动代码通过urb和所有的 USB 设备通讯.urb用 struct urb 结构描述(include/linux/usb.h ). urb 以一种异步的方式 ...
- 25.Linux-Nor Flash驱动(详解)
1.nor硬件介绍: 从原理图中我们能看到NOR FLASH有地址线,有数据线,它和我们的SDRAM接口相似,能直接读取数据,但是不能像SDRAM直接写入数据,需要有命令才行 1.1其中我们2440的 ...
- 使用VS2010编译MongoDB C++驱动详解
最近为了解决IM消息记录的高速度写入.多文档类型支持的需求,决定使用MongoDB来解决. 考虑到MongoDB对VS版本要求较高,与我现有的VS版本不兼容,在leveldb.ssdb.redis.h ...
- 13.Linux键盘驱动 (详解)
版权声明:本文为博主原创文章,未经博主允许不得转载. 在上一节分析输入子系统内的intput_handler软件处理部分后,接下来我们开始写input_dev驱动 本节目标: 实现键盘驱动,让开发板的 ...
- 13.Linux键盘按键驱动 (详解)
在上一节分析输入子系统内的intput_handler软件处理部分后,接下来我们开始写input_dev驱动 本节目标: 实现键盘驱动,让开发板的4个按键代表键盘中的L.S.空格键.回车键 1.先来介 ...
- 18.Llinux-触摸屏驱动(详解)
本节的触摸屏驱动也是使用之前的输入子系统 1.先来回忆之前第12节分析的输入子系统 其中输入子系统层次如下图所示, 其中事件处理层的函数都是通过input_register_handler()函数注册 ...
- 21.Linux-写USB键盘驱动(详解)
本节目的: 根据上节写的USB鼠标驱动,来依葫芦画瓢写出键盘驱动 1.首先我们通过上节的代码中修改,来打印下键盘驱动的数据到底是怎样的 先来回忆下,我们之前写的鼠标驱动的id_table是这样: 所以 ...
随机推荐
- css height VS min-height
height:容器高度固定(值是百分比时除外): min-height:容器高度小于该值时取该值,大于该值时按实际的值.应用:页面中页脚置底.
- Java基础 -5
方法的定义与使用 方法(method)的基本定义 本次方法定义在主类之中并且由主方法直接调用,所以方法的定义语法形式如下: public static 返回值类型 方法名称([参数类型 变量, ... ...
- Codeforces Round #551 (Div. 2)D(树形DP)
#define HAVE_STRUCT_TIMESPEC#include <bits/stdc++.h>using namespace std;int val[300007],num[30 ...
- [POI 2014]PTA-Little Bird
Description 题库连接 给你 \(n\) 棵树,第 \(i\) 棵树的高度为 \(d_i\).有一只鸟从 1 号树出发,每次飞跃不能超过 \(k\) 的距离.若飞到下一棵树的高度大于等于这一 ...
- JVM虚拟机内存溢出垃圾收集及类加载机制总结
1.Java内存区域与内存溢出异常 虚拟机栈:为虚拟机执行Java方法服务 本地方法栈:为虚拟机使用到的native方法服务. Java堆:是Java虚拟机所管理的内存中最大的一块,被所有线程共享的一 ...
- RIFF
RIFF全称为资源互换文件格式(Resources Interchange File Format),是Windows下大部分多媒体文件遵循的一种文件结构. RIFF文件所包含的数据类型由该文件的扩展 ...
- 设计模式课程 设计模式精讲 8-8 单例设计模式-Enum枚举单例、原理源码解析以及反编译实战
1 课堂解析 2 代码演练 2.1 枚举类单例解决序列化破坏demo 2.2 枚举类单例解决序列化破坏原理 2.3 枚举类单例解决反射攻击demo 2.4 枚举类单例解决反射攻击原理 3 jad的使用 ...
- 解决在高分屏下开发winform界面变形
Form.AutoScaleMode = AutoScaleMode.None; 需要在超大屏下显示的时候,再考虑 AutoScaleMode.Font; AutoScaleMode.Dpi;
- css元素隐藏方式
1.opacity:设置一个元素的透明度 .hide {opacity: 0;} 2.visibility:设置一个元素可见\不可见.hide {visibility: hidden} .hide { ...
- Burp Suite Pro1.7.36破解版
百度网盘下载(H大会一直更新):链接: https://pan.baidu.com/s/1brjPKM7 密码: 9v4r 爱盘下载:https://down.52pojie.cn/Tools/Net ...