参考文档:《液晶屏.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驱动详解的更多相关文章

  1. 16.Linux-LCD驱动(详解)

    在上一节LCD层次分析中,得出写个LCD驱动入口函数,需要以下4步: 1) 分配一个fb_info结构体: framebuffer_alloc(); 2) 设置fb_info 3) 设置硬件相关的操作 ...

  2. 16.Linux-LCD驱动(详解)【转】

    转自:https://www.cnblogs.com/lifexy/p/7604011.html 在上一节LCD层次分析中,得出写个LCD驱动入口函数,需要以下4步: 1) 分配一个fb_info结构 ...

  3. linux usb 驱动详解

    linux usb 驱动详解 USB 设备驱动代码通过urb和所有的 USB 设备通讯.urb用 struct urb 结构描述(include/linux/usb.h ). urb 以一种异步的方式 ...

  4. 25.Linux-Nor Flash驱动(详解)

    1.nor硬件介绍: 从原理图中我们能看到NOR FLASH有地址线,有数据线,它和我们的SDRAM接口相似,能直接读取数据,但是不能像SDRAM直接写入数据,需要有命令才行 1.1其中我们2440的 ...

  5. 使用VS2010编译MongoDB C++驱动详解

    最近为了解决IM消息记录的高速度写入.多文档类型支持的需求,决定使用MongoDB来解决. 考虑到MongoDB对VS版本要求较高,与我现有的VS版本不兼容,在leveldb.ssdb.redis.h ...

  6. 13.Linux键盘驱动 (详解)

    版权声明:本文为博主原创文章,未经博主允许不得转载. 在上一节分析输入子系统内的intput_handler软件处理部分后,接下来我们开始写input_dev驱动 本节目标: 实现键盘驱动,让开发板的 ...

  7. 13.Linux键盘按键驱动 (详解)

    在上一节分析输入子系统内的intput_handler软件处理部分后,接下来我们开始写input_dev驱动 本节目标: 实现键盘驱动,让开发板的4个按键代表键盘中的L.S.空格键.回车键 1.先来介 ...

  8. 18.Llinux-触摸屏驱动(详解)

    本节的触摸屏驱动也是使用之前的输入子系统 1.先来回忆之前第12节分析的输入子系统 其中输入子系统层次如下图所示, 其中事件处理层的函数都是通过input_register_handler()函数注册 ...

  9. 21.Linux-写USB键盘驱动(详解)

    本节目的: 根据上节写的USB鼠标驱动,来依葫芦画瓢写出键盘驱动 1.首先我们通过上节的代码中修改,来打印下键盘驱动的数据到底是怎样的 先来回忆下,我们之前写的鼠标驱动的id_table是这样: 所以 ...

随机推荐

  1. 使用 C++ 处理 JSON 数据交换格式

    一.摘要 JSON 的全称为:JavaScript Object Notation,顾名思义,JSON 是用于标记 Javascript 对象的,JSON 官方的解释为:JSON 是一种轻量级的数据传 ...

  2. Django 学习之From组件

    一.Form组件介绍 Form组件可以做的几件事情: 1.用户请求数据验证 2.自动生成错误信息 3.打包用户提交的正确信息 4.如果其中有一个错误了,其他的正确这,保留上次输入的内容 4.自动创建i ...

  3. Java日期时间API系列12-----Jdk8中java.time包中的新的日期时间API类,日期格式化,常用日期格式大全

    通过Java日期时间API系列10-----Jdk8中java.time包中的新的日期时间API类的DateTimeFormatter, 可以看出java8的DateTimeFormatter完美解决 ...

  4. sklearn调用SVM算法

    1.支撑向量机SVM是一种非常重要和广泛的机器学习算法,它的算法出发点是尽可能找到最优的决策边界,使得模型的泛化能力尽可能地好,因此SVM对未来数据的预测也是更加准确的. 2.SVM既可以解决分类问题 ...

  5. CSS如何实现三列布局?如果两端固定、中间是自适应又该如何做?

    使用浮动布局来实现 左侧元素与右侧元素优先渲染,分别向左和向右浮动 中间元素在文档流的最后渲染,并将 width 设为 100%,则会自动压到左右两个浮动元素的下面,随后在中间元素中再添加一个div元 ...

  6. Mybatis框架模糊查询

    一.ISmbmsUserDao层 //根据姓名模糊查询 public List<Smbms> getUser(); //多条件查询 public List<Smbms> get ...

  7. QQ企业通--客户端登陆模块设计---知识点

    AutoValidate 枚举  确定控件在失去用户输入焦点时应如何验证其数据. 成员名称 说明 Disable 将不进行隐式验证.设置此值将不会妨碍对 Validate 或 ValidateChil ...

  8. 微信小程序中,如何实现显示,隐藏密码的功能

    最近在搞小程序的开发,遇到隐藏,显示密码的功能的时候,电脑上调试没问题,但是手机上面点击却没有效果,必须要跳转到其他页面再跳回来,才能正常显示. 一时间搞得我很头疼,查找资料后,终于知道了是什么原因. ...

  9. docker-构建建tomcat镜像并启动容器

    1.下载一个tomcat8,解压好改名为tomcat并配置端口为80,删除webapps下的默认的应用,修改tomcat/bin目录下脚本的权限,chmod +x *.sh 2.路径一般放在/usr/ ...

  10. 二、点击导出按钮创建excle写入内容后下载功能实现

    /*涉及的jar包1)biframework.jar用于实现分页功能2)poi-3.7-20101029.jar:读取.创建.修改excle.word.ppt的Java APIApache POI是创 ...