在AM335x中,在连接显示屏的时候,存在一个问题。这个在am335x Sillicon Errata已经提到过
在RGB888模式中

 
而对于RGB565模式的硬件连接

不难看出,这个RGB是反的。
看一下我们自己硬件的连接方式
我们自己的硬件连接是RGB888

 

在模式设置成32位真彩显示时没有问题,但是一旦把32位换成32位时,就会发现图片的颜色显示异常。换一张纯色的红色bmp图片到开发板上,显示成蓝色。效果如图

 
 
 
那么如何让RGB888的硬件连接也能正常显示16位呢?
 
第一步:首先将开发板的bpp从32位改成16位
 

 
 
接下来修改驱动程序da8xx-fb.c
修改函数fb_check_var
 
实际上就是将红色与蓝色调换一下
 
static int fb_check_var(struct fb_var_screeninfo *var,
struct fb_info *info)
{
int err = 0;
struct da8xx_fb_par *par = info->par;
int bpp = var->bits_per_pixel >> 3;
unsigned long line_size = var->xres_virtual * bpp; switch (var->bits_per_pixel) {
case 1:
case 8:
var->red.offset = 0;
var->red.length = 8;
var->green.offset = 0;
var->green.length = 8;
var->blue.offset = 0;
var->blue.length = 8;
var->transp.offset = 0;
var->transp.length = 0;
break;
case 4:
var->red.offset = 0;
var->red.length = 4;
var->green.offset = 0;
var->green.length = 4;
var->blue.offset = 0;
var->blue.length = 4;
var->transp.offset = 0;
var->transp.length = 0;
break;
case 16: /* RGB 565 */
var->red.offset = 11; //改成var->blue.offset = 11;
var->red.length = 5; //改成var->blue.length = 5;
var->green.offset = 5;
var->green.length = 6;
var->blue.offset = 0; //改成var->red.offset = 0;
var->blue.length = 5; //改成var->red.length = 5;
var->transp.offset = 0;
var->transp.length = 0;
break;
case 24:
var->red.offset = 16;
var->red.length = 8;
var->green.offset = 8;
var->green.length = 8;
var->blue.offset = 0;
var->blue.length = 8;
break;
case 32:
var->transp.offset = 24;
var->transp.length = 8;
var->red.offset = 16;
var->red.length = 8;
var->green.offset = 8;
var->green.length = 8;
var->blue.offset = 0;
var->blue.length = 8;
break;
default:
err = -EINVAL;
} var->red.msb_right = 0;
var->green.msb_right = 0;
var->blue.msb_right = 0;
var->transp.msb_right = 0; if (line_size * var->yres_virtual > par->vram_size)
var->yres_virtual = par->vram_size / line_size; if (var->yres > var->yres_virtual)
var->yres = var->yres_virtual; if (var->xres > var->xres_virtual)
var->xres = var->xres_virtual; if (var->xres + var->xoffset > var->xres_virtual)
var->xoffset = var->xres_virtual - var->xres;
if (var->yres + var->yoffset > var->yres_virtual)
var->yoffset = var->yres_virtual - var->yres; return err;
}
-
 
 
x
 
 
 
1
static int fb_check_var(struct fb_var_screeninfo *var,
2
struct fb_info *info)
3
{
4
int err = 0;
5
struct da8xx_fb_par *par = info->par;
6
int bpp = var->bits_per_pixel >> 3;
7
unsigned long line_size = var->xres_virtual * bpp;
8

9
switch (var->bits_per_pixel) {
10
case 1:
11
case 8:
12
var->red.offset = 0; 
13
var->red.length = 8; 
14
var->green.offset = 0;
15
var->green.length = 8;
16
var->blue.offset = 0;
17
var->blue.length = 8;
18
var->transp.offset = 0;
19
var->transp.length = 0;
20
break;
21
case 4:
22
var->red.offset = 0;
23
var->red.length = 4;
24
var->green.offset = 0;
25
var->green.length = 4;
26
var->blue.offset = 0;
27
var->blue.length = 4;
28
var->transp.offset = 0;
29
var->transp.length = 0;
30
break;
31
case 16:/* RGB 565 */
32
var->red.offset = 11;  //改成var->blue.offset = 11;
33
var->red.length = 5;   //改成var->blue.length = 5; 
34
var->green.offset = 5;
35
var->green.length = 6;
36
var->blue.offset = 0;  //改成var->red.offset = 0; 
37
var->blue.length = 5;  //改成var->red.length = 5;
38
var->transp.offset = 0;
39
var->transp.length = 0;
40
break;
41
case 24:
42
var->red.offset = 16;
43
var->red.length = 8;
44
var->green.offset = 8;
45
var->green.length = 8;
46
var->blue.offset = 0;
47
var->blue.length = 8;
48
break;
49
case 32:
50
var->transp.offset = 24;
51
var->transp.length = 8;
52
var->red.offset = 16;
53
var->red.length = 8;
54
var->green.offset = 8;
55
var->green.length = 8;
56
var->blue.offset = 0;
57
var->blue.length = 8;
58
break;
59
default:
60
err = -EINVAL;
61
}
62

63
var->red.msb_right = 0;
64
var->green.msb_right = 0;
65
var->blue.msb_right = 0;
66
var->transp.msb_right = 0;
67

68
if (line_size * var->yres_virtual > par->vram_size)
69
var->yres_virtual = par->vram_size / line_size;
70

71
if (var->yres > var->yres_virtual)
72
var->yres = var->yres_virtual;
73

74
if (var->xres > var->xres_virtual)
75
var->xres = var->xres_virtual;
76

77
if (var->xres + var->xoffset > var->xres_virtual)
78
var->xoffset = var->xres_virtual - var->xres;
79
if (var->yres + var->yoffset > var->yres_virtual)
80
var->yoffset = var->yres_virtual - var->yres;
81

82
return err;
83
}
 
 
这样就能在开发板上正常显示颜色了

 

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">

 
 
 
 

AM335X用RGB888连接LCD如何以16位色彩模式显示图片的更多相关文章

  1. 颜色模式中8位,16位,24位,32位色彩是什么意思?会有什么区别?计算机颜色格式( 8位 16位 24位 32位色)<转>

    颜色模式中8位,16位,24位,32位色彩是什么意思?会有什么区别简单地说这里说的位数和windows系统显示器设置中的颜色位数是一样的.表示的是能够显示出来的颜色的多少. 8位的意思是说,能够显示出 ...

  2. bmp文件格式中rgb555与rgb888之间的转换,24位与16位位图的转换

    今日,有同事问我.rgb555模式下的位图文件的格式问题,于是花了一下午的时间通过推測与測试,分析出了例如以下bmp文件在rgb555模式下的文件存储规律: 1:bmp文件的文件信息头中的biBitC ...

  3. Linux LCD 显示图片【转】

    转自:https://blog.csdn.net/niepangu/article/details/50528190 BMP和JPEG图形显示程序1)  在LCD上显示BMP或JPEG图片的主流程图首 ...

  4. 使用 GCC 和 GNU Binutils 编写能在 x86 实模式运行的 16 位代码

    不可否认,这次的标题有点长.之所以把标题写得这么详细,主要是为了搜索引擎能够准确地把确实需要了解 GCC 生成 16 位实模式代码方法的朋友带到我的博客.先说一下背景,编写能在 x86 实模式下运行的 ...

  5. STM32学习之路-LCD(3)&lt;显示图片&gt;

    祝大家端午和六一快乐!原本今天是想歇息歇息的,可是实在无奈没什么事干.所以就来学习学习LCD显示图片的函数 函数是照搬奋斗的样例,算是些笔记吧.只是奋斗的样例凝视的不是非常具体.今天去看了正点原子的论 ...

  6. Linux 桌面玩家指南:08. 使用 GCC 和 GNU Binutils 编写能在 x86 实模式运行的 16 位代码

    特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...

  7. 七、在U-boot中让LCD显示图片

    1. 增加Nandflash读取代码 因为要显示图片,而图片明显是放在Nandflash中比较合适,因此需要有能够操作Nandflash的函数.在U-boot中已经有能操作Nandflash的函数了, ...

  8. 四路4 GSPS@ 12 bit,四路12 GSPS@16 位4T4R 射频芯片AD9988

    一.产品概述 AD9988 是一款高度集成的套件,是北京太速最新研发的,具有四个 16 位.12 GSPS 最大采样率.RF 数模转换器 (DAC) 内核,以及四个 12 位.4 GSPS 速率.RF ...

  9. pyserial 16进制显示与发送

    pyserial 16进制显示与发送 http://www.centoscn.com/python/2013/0817/1320.html 十六进制显示的实质是把接收到的字符诸葛转换成其对应的ASCI ...

随机推荐

  1. 洛谷 P2483 BZOJ 1975 [SDOI2010]魔法猪学院

    题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪世界的世界本原有了很多的了解:众所周知,世界是由元素构成的:元素与 ...

  2. 不错的题目-n个数连接得到的最大值

    这道题目还是很不错的 <[字符串排序]n个数连接得到最小或最大的多位整数> 题目 描述:设有n个正整数,将它们依次连成在一排,组成一个多位数,现在要求可能组成的多位数中最大的多位数是什么? ...

  3. 多个线程作用于同一个runnable对象

    多个线程作用于同一个runnable对象 学习了:https://www.cnblogs.com/ligang305/archive/2012/08/10/2632126.html http://as ...

  4. Dynamics CRM 2015 New Feature (9): Services Changes

    Dynamics CRM 2015 为开发者加入了一些新的Service Request以及一个帮助类库XrmTooling,它支持连接各种环境下的CRM,比方:Online,O365,On Prem ...

  5. JeeCG团队招聘啦!

    JeeCG团队招聘啦! 小团队攻坚,创业氛围浓厚.盼望有激情的你增加. 岗位描写叙述: 1,负责Jeecg.jeewx 微信管理系统相关的研发工作.2,高度參与整个产品设计.參与微信相关项目开发.3. ...

  6. nyoj--171--聪明的kk(动态规划--博弈)

    聪明的kk 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 聪明的"KK" 非洲某国展馆的设计灵感源于富有传奇色彩的沙漠中陡然起伏的沙丘,体现出本国不 ...

  7. 分析AWR报告

    1.AWR报告头信息 DB Name :数据库名字 DBid: 数据库id Elapsed:采样时间段 DB Time:用户操作花费的时间,不包括Oracle后台进程消耗的时间 DB Time远小于E ...

  8. B1012 [JSOI2008]最大数maxnumber 分块||RMQ

    这个题有毒,卡最大值...我开1 << 30爆零让我以为我分块错了...gg,然后去写RMQ,但是这个题st表是真简单啊.后来刘胜与巨佬一眼看出来我最大值不够大...然后1LL<&l ...

  9. 关于作者&情况

    本校第一次做信奥 , 如有错误, 见谅 本人之前从未接触编程, 选择信奥也只是因为怕被其他奥赛给淘汰... 这应该是懦弱吧...... 但自从接触编程以来, 虽然算不上极大的热爱, 但发自内心地喜欢它 ...

  10. SwiftUI 官方教程(一)

    完整中文教程及代码请查看 https://github.com/WillieWangWei/SwiftUI-Tutorials   创建和组合 View 此部分将指引你构建一个发现和分享您喜爱地方的 ...