深入理解ARM体系架构(S3C6410)---lcd 显示图片
本系列文章由张同浩编写,转载请注明出处:http://blog.csdn.net/muge0913/article/details/7437153
邮箱:muge0913@sina.com
S3C6410显示控制器包含这样的逻辑电路:从后处理器(POST Processor)或系统内存视频缓冲数据的本地总线传递数据到外部LCD驱动接口电路的逻辑电路。S3C6410包含4种接口:传统的RGB接口,I80接口,标准电视编码接口NTSC/PAL,IT-R BT.601接口。S3C6410显示控制器支持5层图像窗口。层图像窗口支持:various color format,16 level alpha blending, color key, x-y position control, soft scrolling,variable window size。显示控制器支持1BPP~24BPP 色彩的RGB格式和YCbCr格式。显示控制器能满足水平垂直像素,数据宽度, 接口时序, 刷新频率等各种设置需求。显示控制器视频数据接口包括:RGB_VD[23:0],SYS_VD[17:0], TV_OUT。
显示控制器由VSFR,VDMA,VPRCS,VTIME,和视频时钟产生器。VSFR包含一些可编程的寄存器和两个256x25的调色板内存。这些都是用于配置显示控制器的。VDMA专用于显示DMA。它能将一帧的视频数据发送到VPRCS。通过这些特定DMA,这些视频数据可以在CPU不调停的情况下,显示到显示屏上。VPRCS从VDMA接收视频数据,并把接收的数据转化成合适的数据格式,从而再发送到显示器件上(LCD)。VTIME包含一些可编程的逻辑器件以满足不同显示设备的需求,如设置接口时序和刷新频率. 产生:RGB_VSYNC,RGB_HSYNC, RGB_VCLK, RGB_VDEN,SYS_CS1, SYS_CS0等信号控制显示设备。
FIFO在VDMA中。当FIFO为空或部分为空时,VDMA就会请求数据。当内存中的总线仲裁接收到这样的传输请求时,就会从系统内存向内部FIFO传输4/8/16连续的字。每个FIFO有64个字,同时FIFO的使用大小又有数据的传输速率决定。显示控制器有5个FIFO,主要是为了满足5个图像层的使用。在每个屏幕显示模式中,只有一个FIFO被使用。VPRCS通过FIFO提取数据。VPRCS支持层功能,最多5个层。下面的图像显示了数据流从系统总线到输出缓存的过程。
再来看看mini6410中,nec43和显示控制器的连接原理图:
这样我们就可以参考相应的寄存器设置,来实现lcd的图片显示了,
原图片:
我的手机像素极差,,,,
程序如下:
初始化函数:
- void LCD_Init(void)
- {
- //设置VD0~15
- rGPICON = 0xaaaaaaaa; //设置GPI0~15为LCD VD0~15
- rGPIPUD = 0x00000000;
- //设置VD16~23和HSYNC、VSYNC、VDEN、VCLK
- rGPJCON = 0x00aaaaaa;
- rGPJPUD = 0x00000000;
- //LCD寄存器设置
- rSPCON |= (1<<0); //设置RGBI/F配置 //rSPCON = rSPCON & ~(0x3) | 1;
- rMIFPCON &= ~(1<<3); //设置LCD支路为一般模式
- rVIDCON0 = (0<<29)|(0<<27)|(0<<26)|(0<<18)|(0<<17)|(0<<16)|(9<<6)|(0<<5)|(1<<4)|(0<<3)|(0<<2)|(1<<1)|(1<<0);
- rVIDCON1 = 1<<7; //1=RGB类型LCD设备在VCLK上升沿得到视频数据
- //设置屏的时序
- rVIDTCON0 = (0x00<<16)|(0x00<<8)|(0x02<<0);
- rVIDTCON1 = (0x2d<<16)|(0x04<<8)|(0x06<<0);
- rVIDTCON2 = (271<<11)|(479<<0);
- //设置窗口格式
- rWINCON0 = 11<<2; //设置24BPP
- //设置窗口位置
- rVIDOSD0A = (0<<11)|(0<<0);
- rVIDOSD0B = (479<<11)|(271<<0);
- rVIDOSD0C = (((480*272)&0xffffff)<<0); //4.3屏幕分辨率480*272
- //设置Window1的开始和结束的缓存地址与地址在内存中的存放地址以及缓存的大小
- rVIDW00ADD0B0 = ((addr>>24)<<24)|(addr&0xffffff);
- rVIDW00ADD1B0 = (addr&0xffffff + 480*272);
- rVIDW00ADD2 = (0<<13)|(480<<0);
- //设置抖动
- rDITHMODE=(1<<5)|(1<<3)|(1<<1)|(1<<0);
- //开显示
- rVIDCON0 |= (3<<0);
- rWINCON0 |= (1<<0);
- }
画图函数:
- void LCD_DrawPixel(unsigned int x, unsigned int y, unsigned int color)
- {
- if((x<480) && (y<272))
- LCD_BUFFER[y][x] = color;
- }
- void LCD_Paint_Bmp(int x0,int y0,int h,int l,const unsigned char *bmp)
- {
- int x,y;
- unsigned int c;
- int p = 0;
- for( y = y0 ; y < l ; y++ )
- {
- for( x = x0 ; x < h ; x++ )
- {
- //RGB888
- c = (bmp[p]) | (bmp[p+1]<<8) | (bmp[p+2]<<16);
- if ( ( (x0+x) < LCD_XSIZE) && ( (y0+y) <LCD_YSIZE) )
- LCD_BUFFER[y0+y][x0+x] = c ;
- p = p+3;
- }
- }
- }
深入理解ARM体系架构(S3C6410)---lcd 显示图片相关推荐
- 深入理解ARM体系架构(S3C6410)---认识S3C6410
芯片架构如图 S3C64xx系列的应用处理器芯片是三星主推的16/32 RISC 微处理器,三星目前推出了S3C6400和S3C6410,都是基于ARM11架构的,而且硬件管脚兼容,应该说大致的功能基 ...
- 深入理解ARM体系架构(S3C6410)---PWM实例
S3C6410X中有5个定时器,这些定时器产生内部中断.其中,Timer0和Timer1具有PWM功能,而Timer2,3,4没有此功能. The S3C6410X RISC microprocess ...
- 深入理解ARM体系架构(S3C6410)---arm7,arm9,arm11区别
本系列文章由muge0913编写,转载请注明出处:http://blog.csdn.net/muge0913/article/details/7350789 1. 时钟频率的提高 虽然内核架构相同,但 ...
- ARM体系架构—ARMv7-A指令集:内存操作指令
ARM体系架构-ARMv7-A指令集 一.ARMv7-A指令集 一.ARMv7-A内存操作指令 二.单寄存器寻址内存操作指令 三.多寄存器寻址内存操作指令 四.SWP,SWPB 一.ARMv7-A指令 ...
- 硬件安全之ARM体系架构的演进
安全从业者脑中有一系列的安全名词,比如安全三要素Confidenciality .Integrity.Availability,比如硬件安全品牌TPM.TrustZone.SGX.Titan-M,比如 ...
- ARM体系架构—ARMv7-A指令集:协处理器指令
ARM体系架构-ARMv7-A指令集 一.ARMv7-A指令集 二.ARMv7-A协处理器 二.ARMv7-A协处理器指令 三.读懂Linux Kernel协处理器指令 一.ARMv7-A指令集 AR ...
- 【龙芯1B】:LCD显示图片文字背景色前景色、小创语音控制lcd显示、数码管倒计时
项目场景: 闲来无事,写了几个关于嵌入式技能大赛的任务.希望对大家有所帮助.本文开发板由百科荣创的龙芯1b开发板支持,关于嵌入式技能大赛的开发板. LCD显示图片&文字&背景 ...
- Hadoop:HDFS的概念理解和体系架构-成都加米谷大数据分享
HDFS是什么? HDFS 全称 Hadoop Distributed File System ,简称HDFS,是一个分布式文件系统.它是谷歌的GFS提出之后出现的另外一种文件系统.它有一定高度的容错 ...
- 单片机ARM体系架构知识你知道多少?
想学习单片机的同学可以关注.私信我或者在评论区回复我要入门.在嵌入式领域中ARM可谓一家独大,所以我们要学习嵌入式开发,一定要了解ARM体系,只有在了解ARM体系的基础上才能理解ARM汇编(GNU汇编 ...
最新文章
- POJ-1185 炮兵阵地 动态规划+状态压缩
- 涉及支付,资金方案的操作要考虑的问题
- 预备AI工程师升级必备:大厂常见图像分类面试题
- C++中placement new操作符(经典)
- 8口网管型工业以太网交换机产品性能介绍
- Oracle RAC
- LeetCode刷题——Z字形变换
- mysql 设置一个字段为null_MySQL中,为什么要设置NOT NULL?
- excel数据库_EXCEL建立简单数据库,使用VLOOKUP调用(单元格联动)
- Python中的字符串比较:与== [重复]
- c# 存储图片到oracle,c# winform 读取oracle中blob字段的图片并且显示到pictureBox里 保存进库...
- 信号处理 | 维纳滤波推导
- 校验身份证号码是否正确
- python 输出上三角行列式
- HDU 5234 Happy birthday 01背包
- Mac虚拟机VMware Fusion如何强制关机虚拟系统
- 黑苹果强制关机导致硬盘挂在失败问题
- Xshell远程连接服务器上的jupyter notebook
- DSO源码解析学习笔记(初始化)
- VSCode 出现 正在保存“xxxx.vue”: 从 “‘Vetur‘, ‘ESLint‘“(configure)中获取代码操作。
热门文章
- Mac homebrew报错Error: homebrew-core is a shallow clone.
- [BZOJ4591][SHOI2015]超能粒子炮·改(Lucas定理+数位DP)
- 学习笔记:平衡树-splay
- 简单nginx+tomca负载均衡
- Qt之QToolButton
- “HTTPS”安全在哪里?
- 【shell编程基础0】bash shell编程的基本配置
- C++中宏的定义与用法(现已被内联函数所代替)
- python学习之路-书籍推荐
- 使用命令行编译Less源文件