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是这样: 所以 ...
随机推荐
- 夯实Java基础(二十二)——Java8新特性之Lambda表达式
1.前言 Java 8于14年发布到现在已经有5年时间了,经过时间的磨练,毫无疑问,Java 8是继Java 5(发布于2004年)之后的又一个非常最重要的版本.因为Java 8里面出现了非常多新的特 ...
- C语言入门---第七章 C语言函数
函数就是一段封装好的,可以重复使用的代码,它使得我们的程序更加模块化,不需要编写大量重复的代码.函数可以提前保存起来,并给它起一个独一无二的名字,只要知道它的名字就能使用这段代码.函数还可以接收数据, ...
- Python学习笔记002
字符编码:把二进制字符翻译成字符 ASCII码表 256 一个字节,8个比特 支持中文: GB2312 GBK1.0 GB18030 BIG5(台湾) unicode UTF-8 开头定义 ...
- CF1285D Dr. Evil Underscores
挂个链接 Description: 给你 \(n\) 个数 \(a_1,a_2,--,a_n\) ,让你找出一个 \(x\) ,使 \(x\) 分别异或每一个数后得到的 \(n\) 个结果的最大值最小 ...
- window查看连接过的无线密码
for /f "skip=9 tokens=1,2 delims=:" %i in ('netsh wlan show profiles') do @echo %j | find ...
- 1-1SpringBoot简介
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过 ...
- Java 5 、6、 7中新特性
JDK5新特性(与1.4相比)[转] 1 循环 for (type variable : array){ body} for (type variable : arrayList){body} 而1. ...
- windows服务使用和控制启停
https://www.cnblogs.com/mq0036/p/7875864.html
- isEqual判断相等性
1.isEqual方法用来判断两个比较者的内存地址是否一样.为了细分,有isEqualToString.isEqualToNumber.isEuqalToValue等,使用时一定要精确使用,比如虽然N ...
- 「HNOI2003」消防局的设立
题目 [内存限制:$256 MiB$][时间限制:$1000 ms$] [标准输入输出][题目类型:传统][评测方式:文本比较] 题目描述 2020 年,人类在火星上建立了一个庞大的基地群,总共有 $ ...