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是这样: 所以 ...
随机推荐
- 使用 C++ 处理 JSON 数据交换格式
一.摘要 JSON 的全称为:JavaScript Object Notation,顾名思义,JSON 是用于标记 Javascript 对象的,JSON 官方的解释为:JSON 是一种轻量级的数据传 ...
- Django 学习之From组件
一.Form组件介绍 Form组件可以做的几件事情: 1.用户请求数据验证 2.自动生成错误信息 3.打包用户提交的正确信息 4.如果其中有一个错误了,其他的正确这,保留上次输入的内容 4.自动创建i ...
- Java日期时间API系列12-----Jdk8中java.time包中的新的日期时间API类,日期格式化,常用日期格式大全
通过Java日期时间API系列10-----Jdk8中java.time包中的新的日期时间API类的DateTimeFormatter, 可以看出java8的DateTimeFormatter完美解决 ...
- sklearn调用SVM算法
1.支撑向量机SVM是一种非常重要和广泛的机器学习算法,它的算法出发点是尽可能找到最优的决策边界,使得模型的泛化能力尽可能地好,因此SVM对未来数据的预测也是更加准确的. 2.SVM既可以解决分类问题 ...
- CSS如何实现三列布局?如果两端固定、中间是自适应又该如何做?
使用浮动布局来实现 左侧元素与右侧元素优先渲染,分别向左和向右浮动 中间元素在文档流的最后渲染,并将 width 设为 100%,则会自动压到左右两个浮动元素的下面,随后在中间元素中再添加一个div元 ...
- Mybatis框架模糊查询
一.ISmbmsUserDao层 //根据姓名模糊查询 public List<Smbms> getUser(); //多条件查询 public List<Smbms> get ...
- QQ企业通--客户端登陆模块设计---知识点
AutoValidate 枚举 确定控件在失去用户输入焦点时应如何验证其数据. 成员名称 说明 Disable 将不进行隐式验证.设置此值将不会妨碍对 Validate 或 ValidateChil ...
- 微信小程序中,如何实现显示,隐藏密码的功能
最近在搞小程序的开发,遇到隐藏,显示密码的功能的时候,电脑上调试没问题,但是手机上面点击却没有效果,必须要跳转到其他页面再跳回来,才能正常显示. 一时间搞得我很头疼,查找资料后,终于知道了是什么原因. ...
- docker-构建建tomcat镜像并启动容器
1.下载一个tomcat8,解压好改名为tomcat并配置端口为80,删除webapps下的默认的应用,修改tomcat/bin目录下脚本的权限,chmod +x *.sh 2.路径一般放在/usr/ ...
- 二、点击导出按钮创建excle写入内容后下载功能实现
/*涉及的jar包1)biframework.jar用于实现分页功能2)poi-3.7-20101029.jar:读取.创建.修改excle.word.ppt的Java APIApache POI是创 ...