×
单片机 > 单片机程序设计 > 详情

深入理解ARM体系架构(S3C6410)---lcd 显示图片

发布时间:2020-05-27 发布时间:
|
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的图片显示了,

原图片:

我的手机像素极差,,,,

程序如下:

初始化函数:

 

[cpp] view plaincopyprint?
 
  1. void LCD_Init(void)   
  2.  
  3.   
  4.   
  5.     //设置VD0~15  
  6.     rGPICON 0xaaaaaaaa;  //设置GPI0~15为LCD VD0~15  
  7.     rGPIPUD 0x00000000;  
  8.   
  9.     //设置VD16~23和HSYNC、VSYNC、VDEN、VCLK  
  10.     rGPJCON 0x00aaaaaa;  
  11.     rGPJPUD 0x00000000;  
  12.   
  13.     //LCD寄存器设置  
  14.     rSPCON |= (1<<0);  //设置RGBI/F配置  //rSPCON rSPCON ~(0x3) 1;  
  15.     rMIFPCON &= ~(1<<3);  //设置LCD支路为一般模式  
  16.       
  17.     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);  
  18.     rVIDCON1 1<<7;  //1=RGB类型LCD设备在VCLK上升沿得到视频数据  
  19.       
  20.     //设置屏的时序  
  21.     rVIDTCON0 (0x00<<16)|(0x00<<8)|(0x02<<0);  
  22.     rVIDTCON1 (0x2d<<16)|(0x04<<8)|(0x06<<0);  
  23.     rVIDTCON2 (271<<11)|(479<<0);  
  24.   
  25.     //设置窗口格式  
  26.     rWINCON0 11<<2;  //设置24BPP  
  27.   
  28.     //设置窗口位置  
  29.     rVIDOSD0A (0<<11)|(0<<0);  
  30.     rVIDOSD0B (479<<11)|(271<<0);  
  31.     rVIDOSD0C (((480*272)&0xffffff)<<0);  //4.3屏幕分辨率480*272  
  32.   
  33.     //设置Window1的开始和结束的缓存地址与地址在内存中的存放地址以及缓存的大小  
  34.     rVIDW00ADD0B0 ((addr>>24)<<24)|(addr&0xffffff);  
  35.     rVIDW00ADD1B0 (addr&0xffffff 480*272);  
  36.     rVIDW00ADD2 (0<<13)|(480<<0);  
  37.   
  38.     //设置抖动  
  39.     rDITHMODE=(1<<5)|(1<<3)|(1<<1)|(1<<0);  
  40.   
  41.     //开显示  
  42.     rVIDCON0 |= (3<<0);  
  43.     rWINCON0 |= (1<<0);  
  44.  

 

 

画图函数:

 

 

[cpp] view plaincopyprint?
 
  1. void LCD_DrawPixel(unsigned int x, unsigned int y, unsigned int color)  
  2.  
  3.     if((x<480) && (y<272))  
  4.         LCD_BUFFER[y][x] color;  
  5.  
  6.   
  7. void LCD_Paint_Bmp(int x0,int y0,int h,int l,const unsigned char *bmp)  
  8.  
  9.     int x,y;  
  10.     unsigned int c;  
  11.     int 0;  
  12.       
  13.     for( y0 y++  
  14.      
  15.         for( x0 x++  
  16.          
  17.             //RGB888  
  18.             (bmp[p]) (bmp[p+1]<<8) (bmp[p+2]<<16);  
  19.             if (x0+x) LCD_XSIZE) && (y0+y)  
  20.             LCD_BUFFER[y0+y][x0+x]  
  21.             p+3;    
  22.          
  23.      

关键字:ARM体系架构  S3C6410  lcd  显示图片

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32中断向量表的位置.重定向