十九、更改LCD显示屏
一、裸机修改
之前测试用的屏幕是480*272的分辨率,现在要换成800*480的屏,因此要对软件代码进行修改。
对于裸机驱动而言,主要有两个点需要注意,一个是屏幕分辨率变了,因此初始化的时候与屏幕分辨率有关的寄存器需要改。但是改了分辨率之后显示出来的图像能明显看到闪烁,这是因为软件设置LCD的时钟来自HCLK,HCLK的频率是133MHz,在软件中又设置了VIDCON0寄存器的CLKVAL_F域的值,如下图:
在480*272的屏的软件中将该域的值设置为了14,如下图:
因此LCD的时钟频率为133/15=8.87MHz,8870000/480/272得到约每秒67帧(当然实际上把消影信号去掉后会更少一些),这个时候显示屏是不闪烁的,如果换成了800*480的屏却不改时钟频率的话,得到8870000/800/480约23帧,算上消影的话得到的帧率肯定达不到23帧,因此肉眼能明显看到屏幕闪烁。具体VIDCON0寄存器的CLKVAL_F域该设置为多少与使用的显示屏有关,我将该域设置为5,则刷新率约57Hz,算上消影的话真实刷新率会低一些,但是肉眼肯定是分辨不出来的。
二、内核修改
在内核代码中输入make menuconfig,在Device Drivers->Graphics supports->Support for frame buffer devices,这里面有对显示屏的设置,比如Select LCD Type可以选择屏幕分辨率,Select BPP可以选择每个像素包含的位数。选择好之后保存退出。make编译内核,编译完之后再arch/arm/boot目录下会出现zImage就是我们要的内核。
内核下载参考前章,但我在测试的时候,修改了这些之后屏幕显示有一个问题,就是显示出来的东西和显示屏上的实际坐标并没有对准,显示出来的图像往屏幕右下方移动了。
我这边是由于消影导致的,需要修改内核源码,drivers/video/samsung/s3cfb_UT_LCD7A.c,如下图几个消影信号的值需要修改:
我的图像往右下方移了,因此无论是行消影还是场消影都应该调小,具体要设置到多少是能算出来的,但是我不想算了就直接试出来的。我的方法是编写一个测试程序,在屏幕的最边缘绘制一个矩形,当调整程序到能够看见一个完整的矩形的时候就OK了。
最新文章
- android 两种实现计时器时分秒的实现,把时间放在你的手中~
- struts2配置详解
- 如何去各型MCU的官网上下载正确的数据手册
- innobackupex的安装
- haskell中的cps
- yum 安装 php5.6 和 mysql5.6
- 如何提高手机APP的用户体验?
- (重)POJ 3020Antenna Placement
- Leetcode:minimum_depth_of_binary_tree解决问题的方法
- jQuery教程详解(一)
- 在VSCode中编辑HTML文档时,在Dom标签上写style属性时智能提示的问题
- python arvg用法
- java的初学感想
- Spring-boot集成RabbitMQ踩过的坑
- Quartz的时间配置
- 【算法和数据结构】_14_小算法_Blank字符替换
- POJ3287(BFS水题)
- java实现超大整数加减乘除四则运算
- (maven项目)使用java -jar命令遇到的小问题|xx.jar中没有主清单或Error:Invalid or corrupt jarfile xx.jar
- jquery ajax跨域
热门文章
- tkinter + 爬虫 实现影视在线资源系统
- Python实现多个pdf文件合并
- Autofac的基本使用---4、使用Config配置
- IntelliJ IDEA如何用maven命令打jar包
- %@ taglib uri=";http://java.sun.com/jsp/jstl/core";prefix=";c";%报错
- BOM主数据-用ECN实现可变BOM
- LVS、Nginx和HAProxy区别
- 简单4步,利用Prometheus Operator实现自定义指标监控
- logback运行时动态创建日志文件
- 效率工具 | 快速创建虚拟机,Vagrant真香!