tiny4412 裸机程序 八、重定位到DRAM及LCD实验
一、实验原理
上一章已经解释的很清楚了,如何将所要运行的user_bin程序定位到DRAM中,这一章要进行重定位到DRAM后运行LCD程序,实际上一章中BL2中程序可以不用改动,直接重写我们的USER目录下的程序即可,将USER目录下的LED灯闪烁程序用LCD程序替换就行,最后编译出的程序名字也叫user_bin.bin即可,这样也可以用上一章中的fast_fuse.sh进行烧写到SD卡运行。
1、LCD控制器
Exynos4412的LCD控制器可以通过编程支持不同LCD屏的要求,例如行和列像素数,数据总线宽度,接口时序和刷新频率等。LCD控制器的主要作用,是将定位在系统存储器中的显示缓冲区中的LCD图像数据传送到外部LCD驱动器,并产生必要的控制信号,例如RGB_VSYNC,RGB_HSYNC, RGB_VCLK等。
图8-1、Exynos4412 LCD控制器框图
(下面的部分来自网络翻译,规格书中的描述)
如上图8-1所示,在Exynos4412规格书中截图,LCD控制器的构成主要由VSFR,VDMA,VPRCS , VTIME和视频时钟产生器几个模块组成:
(1)、VSFR由121个可编程控制器组,一套gammaLUT寄存器组(包括64个寄存器),一套i80命令寄存器组(包括12个寄存器)和5块256*32调色板存储器组成,主要用于对lcd控制器进行配置。
(2)、VDMA是LCD专用的DMA传输通道,可以自动从系统总线上获取视频数据传送到VPRCS,无需CPU干涉。
(3)、VPRCS收到数据后组成特定的格式(如16bpp或24bpp),然后通过数据接口(RGB_VD, VEN_VD, V656_VD or SYS_VD)传送到外部LCD屏上。
(4)、VTIME模块由可编程逻辑组成,负责不同lcd驱动器的接口时序控制需求。VTIME模块产生 RGB_VSYNC, RGB_HSYNC, RGB_VCLK, RGB_VDEN,VEN_VSYNC等信号。
Exynos4412的LCD主要特性:
(1)、支持4种接口类型:RGB/i80/ITU601(656)/YTU444
(2)、支持单色、4级灰度、16级灰度、256色的调色板显示模式
(3)、支持64K和16M色非调色板显示模式
(4)、支持多种规格和分辨率的LCD
(5)、虚拟屏幕最大可达16MB
(6)、5个256*32位调色板内存
(7)、支持透明叠加
2、接口信号
LCD的FIMD显示控制器全部信号定义如下表8-1所示
表8-1、LCD接口信号表
Signal |
I/O |
Description |
LCD Type |
LCD_HSYNC |
O |
水平同步信号 |
RGB I/F |
LCD_VSYNC |
O |
垂直同步信号 |
|
LCD_VDEN |
O |
数据使能 |
|
LCD_VCLK |
O |
视频时钟 |
|
LCD_VD[23:0] |
O |
LCD像素数据输出 |
|
SYS_OE |
O |
输出使能 |
|
VSYNC_LDI |
O |
Indirect i80接口,垂直同步信号 |
i80 I/F |
SYS_CS0 |
O |
Indirect i80接口,片选LCD0 |
|
SYS_CS1 |
O |
Indirect i80接口,片选LCD1 |
|
SYS_RS |
O |
Indirect i80接口,寄存器选择信号 |
|
SYS_WE |
O |
Indirect i80接口,写使能信号 |
|
SYS_VD[23:0] |
IO |
Indirect i80接口,视频数据输入输出 |
|
SYS_OE |
O |
Indirect i80接口,输出使能信号 |
|
VEN_HSYNC |
O |
601接口水平同步信号 |
ITU 601/656 I/F |
VEN_VSYNC |
O |
601接口垂直同步信号 |
|
VEN_HREF |
O |
601接口数据使能 |
|
V601_CLK |
O |
601接口数据时钟 |
|
VEN_DATA[7:0] |
O |
601接口YUV422格式数据输出 |
|
V656_DATA[7:0] |
O |
656接口YUV422格式数据输出 |
|
V656_CLK |
O |
656接口数据时钟 |
|
VEN_FIELD |
O |
601接口域信号 |
其中主要的RGB接口信号:
(1)、LCD_HSYNC:行同步信号,表示一行数据的开始,LCD控制器在整个水平线(整行)数据移入LCD驱动器后,插入一个LCD_HSYNC信号;
(2)、LCD_VSYNC: 帧同步信号,表示一帧数据的开始,LCD控制器在一个完整帧显示完成后立即插入一个LCD_VSYNC信号,开始新一帧的显示;VSYNC信号出现的频率表示一秒钟内能显示多少帧图像,称为“显示器的频率”
(3)、LCD_VCLK:像素时钟信号,表示正在传输一个像素的数据;
(4)、LCD_VDEN:数据使能信号;
(5)、 LCD_VD[23:0]: LCD像素数据输出端口
3、RGB信号的时序
如下图8-2是LCD的RGB接口工作时序图,图中各时钟延时参数的含义如下,这些配置可以在所使用的LCD规格书中查取:
(1)、相关参数说明
VBPD(vertical back porch):表示在一帧图像开始时,垂直同步信号以后的无效的行数。
VFBD(vertical front porch):表示在一帧图像结束后,垂直同步信号以前的无效的行数。VSPW(vertical sync pulse width):表示垂直同步脉冲的宽度,用行数计算。
HBPD(horizontal back porch):表示从水平同步信号开始到一行的有效数据开始之间的VCLK的个数。
HFPD(horizontal front porth):表示一行的有效数据结束到下一个水平同步信号开始之间的VCLK的个数。
HSPW(horizontal sync pulse width):表示水平同步信号的宽度,用VCLK计算。
VSYNC信号有效时,表示一帧数据的开始,信号宽度为(VSPW +1)个HSYNC信号周期,即(VSPW +1)个无效行;
VSYNC信号脉冲之后,总共还要经过(VBPD+ 1)个HSYNC信号周期,有效的行数据才出现; 所以,在VSYNC信号有效之后,还要经过(VSPW +1 + VBPD + 1)个无效的行;
HSYNC信号有效时,表示一行数据的开始,信号宽度为(HSPW+ 1)个VCLK信号周期,即(HSPW +1)个无效像素;
HSYNC信号脉冲之后,还要经过(HBPD +1)个VCLK信号周期,有效的像素数据才出现;
其实现实的图像有像素点组成行、行组成场、场组成动画、动画叠加也就是3D的出现,也就是我们所说的“点动成线、线动成面、面动成体”。
4、LCD的硬件接口
5、16M(24BPP)色的显示模式
以上内容是我从以前调试uboot中LCD显示查阅到的资料整合,其主要来自于网络,网络上还有各种介绍LCD的相交资料,有兴趣的朋友可以自己深究,也可以参考我即将整理的UBOOT相关文档。
二、程序说明
下面对程序进行简要说明,这时我只对USER目录下的程序实现过程进行必要说明,其他相关细节,请自行对照手册来分析程序,这一章的程序我也进行必要的注释,
首先来看一下Makefile和sdram.lds start.S几个文件
1、USER/Makefile sdram.lds start.S
2、USER/main.c
Mian函数很清楚,一开始调用lcd_init();然后调用lcd_clear_screen(0x000000)清屏,接着画一个十字,再画了几条水平线和一条垂直线,最后让LDE灯一直闪烁。
3、USER/LCD.C
lcd_init()
#define LCDBLK_CFG (*(volatile unsigned int *)0x10010210)
//MAX drive strength---------//
这里调用一个Memset()函数,对地址0x54000000处,0X200000大小的DRAM进行初始化为统一值,一开始我设置为,后来为了调试,我将其设置为0xff00,即可以显示为绿色。
3.5、设置VIDCONx,设置接口类型,时钟分频,极性以及使能LCD控制器等
// #define EXYNOS_VIDCON0_CLKVAL_F(x) (((x) & 0xff) << 6)
//VIDCON0 = EXYNOS_VIDCON0_CLKVAL_F(23); //not use this method ,it does not work???
如下图8.4所示是VIDTCON0取值过程,VIDTCON0设置帧同步时序。
VIDTCON0 = (22 << 16) | (21 << 8) | (0);
如下图8.5所示是VIDTCON1取值过程,VIDTCON1设置像素同步时序。
VIDTCON1 = (45 << 16) | (209 << 8) | (0);
Exynos4412的LCD控制器有overlay功能,它支持5个window。这里只使用window0,设置其代码RGB模式为24bit(A888)且使能window0,其相关的代码设置如下:
E、设置VID0SD0A/B/C,即设置Window0的坐标系。
F、配置VIDW00ADD0B0和VIDW00ADD1B0,设置framebuffer的地址;
VIDW00ADD0B0 = LCD_VIDEO_ADDR;
VIDW00ADD1B0 = LCD_VIDEO_ADDR + VIDOSD0C * 4;
G、配置SHADOWCON和WINCHMAP2、选择使能DMA通道0。由于我们使用的是Window0,所以需要使能DMA通道0;
lcd_draw_pixel()
void lcd_draw_pixel(int row, int col, intcolor)
unsigned long * pixel = (unsigned long *)LCD_VIDEO_ADDR;
*(pixel + row * COL + col) = color;
三、完整的烧写过程
已将SD卡插入电脑,假设linux识别了SD卡,其识别号为sdb。执行下面命令:
四、上电实验
将sd卡插入Tiny4412中,选择sd卡启动,和电脑能过串口0连接好,打开一个串口调试助手,然后上电,可以看到以下现象:
串口助手中会显示一些信息,LCD初始化完成后,LCD屏幕首先会显示一整幅的绿色背景。 一两秒钟后,会显示Mian()函数中所画的几条横线和一条竖线以及一个十字,板上的LED灯会一直闪烁。
tiny4412 裸机程序 八、重定位到DRAM及LCD实验相关推荐
- tiny4412 裸机程序 八、重定位到DRAM及LCD实验【转】
本文转载自:http://blog.csdn.net/eshing/article/details/37407423 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 一.实验原 ...
- tiny4412 裸机程序 六、重定位代码到IRAM+0x8000【转】
本文转载自:http://blog.csdn.net/eshing/article/details/37115697 一.重定向 对于程序而言,我们需要理解两个概念,一是程序当前所处的地址,即程序在运 ...
- tiny4412 裸机程序 六、重定位代码到IRAM+0x8000
一.重定向 对于程序而言,我们需要理解两个概念,一是程序当前所处的地址,即程序在运行时,所处的当前地址:二是程序的链接地址,即程序运行时应该位于的运行地址.编译程序时,可以指定程序的链接地址.对于Ti ...
- tiny4412 裸机程序 九、串口排查驱动原因及字符图片显示
一.实验原理 大家可能会有疑问,不是在BL2目录中的mem_init_tiny4412.S实现了串口初始化了,且也有串口输出函数,要不然怎么串口调试助手上怎么会有打印信息呢,这里为什么还要重新初始化? ...
- tiny4412 裸机程序 九、串口排查驱动原因及字符图片显示【转】
本文转载自:http://blog.csdn.net/eshing/article/details/37410571 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 一.实验原 ...
- Tiny4412裸机程序之代码在DDR SDRAM中运行
转载:http://www.techbulo.com/1509.html Tiny4412裸机程序之代码在DDR SDRAM中运行 2014年11月13日 ⁄ 裸机程序 ⁄ 共 8647字 ⁄ 字号 ...
- tiny4412 裸机程序 一、说明【转】
本文转载自:http://blog.csdn.net/eshing/article/details/37109115 首先.我想说明为什么我写这个文档?我自己想学点东西,过于求成,又过于自信,直接买了 ...
- tiny4412 裸机程序 七、重定位代码到DRAM【转】
本文转载自:http://blog.csdn.net/eshing/article/details/37116637 一.关于DRAM 上一章我们讲解了如何对代码进行重定位,但是将代码重定位到只有25 ...
- Tiny4412裸机程序之代码重定位初体验
转载:http://www.techbulo.com/1412.html 从前面一节Exynos 4412的启动过程分析 ,我们知道:一上电,exynos4412首先执行固化在IROM中的代码,iRO ...
最新文章
- XML(eXtensible Markup Language)文件的解析
- [LeetCode] Add Two Numbers(stored in List)
- 写底部样式一定要加的属性
- SpringBoot: SpringBoot里面创建导出Excel的接口(亲测)
- C 语言快速入门,21 个小项目足矣!「不走弯路就是捷径」
- 【渝粤教育】国家开放大学2018年春季 8634-21TAndroid智能手机编程 参考试题
- linux oracle11g开机,Linux 下Oracle11g 自动随系统启动
- java异常处理机制_Java核心技术梳理-异常处理
- 从开源爱好者到 Apache 董事,他花了 11 年
- [转载] 使用selenium_一日一技:使用Selenium的浏览器自动化
- 【背包问题】基于matlab多目标粒子群算法求解多背包问题【含Matlab源码 654期】
- 机器学习入门09 - 特征组合 (Feature Crosses)
- linux windows 共享 smbd 部署
- 通过cv2.VideoCapture完成跳帧截取视频图片
- html5怎么写副标题,毕业论文副标题怎么写
- 【Vue】高级系列(五)Vue模块化实战-demo2-任务清单todoList
- 计算机网络与新媒体是什么,网络与新媒体专业课程是什么
- 腾讯云企业邮箱设置别名
- 人机猜拳代码python_python 实现人和电脑猜拳的示例代码
- 白盒测试与黑盒测试的比较
热门文章
- 苹果怎么换行打字_通过这 684 关小游戏,你的打字速度可以赢过专业录入员
- 在不同的环境中编译hello world程序
- 杂事记诗-- 读网文《穷鬼的上下两千年》有感
- 趣味计算机冷知识,19个科学趣味冷知识,你知道多少个
- RuntimeError: No such operator aten::cudnn_convolution_backward_weight
- 《中国人的紧箍咒》,你一定要支持的理由——
- blt功能_C++中BitBlt的使用方法详解
- TCP/IP 之大明王朝邮差
- 哨兵二号数据下载(欧空局)
- Android音视频开发基础(七):视频采集-系统API基础