新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 深入理解ARM體系架構(gòu)(S3C6410)---lcd 顯示圖片

深入理解ARM體系架構(gòu)(S3C6410)---lcd 顯示圖片

作者: 時(shí)間:2016-11-09 來源:網(wǎng)絡(luò) 收藏
S3C6410顯示控制器包含這樣的邏輯電路:從后處理器(POST Processor)或系統(tǒng)內(nèi)存視頻緩沖數(shù)據(jù)的本地總線傳遞數(shù)據(jù)到外部LCD驅(qū)動(dòng)接口電路的邏輯電路。S3C6410包含4種接口:傳統(tǒng)的RGB接口,I80接口,標(biāo)準(zhǔn)電視編碼接口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格式。顯示控制器能滿足水平垂直像素,數(shù)據(jù)寬度, 接口時(shí)序, 刷新頻率等各種設(shè)置需求。顯示控制器視頻數(shù)據(jù)接口包括:RGB_VD[23:0],SYS_VD[17:0], TV_OUT。

本文引用地址:http://m.butianyuan.cn/article/201611/317829.htm

顯示控制器由VSFR,VDMA,VPRCS,VTIME,和視頻時(shí)鐘產(chǎn)生器。VSFR包含一些可編程的寄存器和兩個(gè)256x25的調(diào)色板內(nèi)存。這些都是用于配置顯示控制器的。VDMA專用于顯示DMA。它能將一幀的視頻數(shù)據(jù)發(fā)送到VPRCS。通過這些特定DMA,這些視頻數(shù)據(jù)可以在CPU不調(diào)停的情況下,顯示到顯示屏上。VPRCS從VDMA接收視頻數(shù)據(jù),并把接收的數(shù)據(jù)轉(zhuǎn)化成合適的數(shù)據(jù)格式,從而再發(fā)送到顯示器件上(LCD)。VTIME包含一些可編程的邏輯器件以滿足不同顯示設(shè)備的需求,如設(shè)置接口時(shí)序和刷新頻率. 產(chǎn)生:RGB_VSYNC,RGB_HSYNC, RGB_VCLK, RGB_VDEN,SYS_CS1, SYS_CS0等信號(hào)控制顯示設(shè)備。

FIFO在VDMA中。當(dāng)FIFO為空或部分為空時(shí),VDMA就會(huì)請(qǐng)求數(shù)據(jù)。當(dāng)內(nèi)存中的總線仲裁接收到這樣的傳輸請(qǐng)求時(shí),就會(huì)從系統(tǒng)內(nèi)存向內(nèi)部FIFO傳輸4/8/16連續(xù)的字。每個(gè)FIFO有64個(gè)字,同時(shí)FIFO的使用大小又有數(shù)據(jù)的傳輸速率決定。顯示控制器有5個(gè)FIFO,主要是為了滿足5個(gè)圖像層的使用。在每個(gè)屏幕顯示模式中,只有一個(gè)FIFO被使用。VPRCS通過FIFO提取數(shù)據(jù)。VPRCS支持層功能,最多5個(gè)層。下面的圖像顯示了數(shù)據(jù)流從系統(tǒng)總線到輸出緩存的過程。

再來看看mini6410中,nec43和顯示控制器的連接原理圖:

這樣我們就可以參考相應(yīng)的寄存器設(shè)置,來實(shí)現(xiàn)lcd的圖片顯示了,

原圖片:

我的手機(jī)像素極差,,,,

程序如下:

初始化函數(shù):

[cpp]view plaincopyprint?
  1. voidLCD_Init(void)
  2. {
  3. //設(shè)置VD0~15
  4. rGPICON=0xaaaaaaaa;//設(shè)置GPI0~15為L(zhǎng)CDVD0~15
  5. rGPIPUD=0x00000000;
  6. //設(shè)置VD16~23和HSYNC、VSYNC、VDEN、VCLK
  7. rGPJCON=0x00aaaaaa;
  8. rGPJPUD=0x00000000;
  9. //LCD寄存器設(shè)置
  10. rSPCON|=(1<<0);//設(shè)置RGBI/F配置//rSPCON=rSPCON&~(0x3)|1;
  11. rMIFPCON&=~(1<<3);//設(shè)置LCD支路為一般模式
  12. 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);
  13. rVIDCON1=1<<7;//1=RGB類型LCD設(shè)備在VCLK上升沿得到視頻數(shù)據(jù)
  14. //設(shè)置屏的時(shí)序
  15. rVIDTCON0=(0x00<<16)|(0x00<<8)|(0x02<<0);
  16. rVIDTCON1=(0x2d<<16)|(0x04<<8)|(0x06<<0);
  17. rVIDTCON2=(271<<11)|(479<<0);
  18. //設(shè)置窗口格式
  19. rWINCON0=11<<2;//設(shè)置24BPP
  20. //設(shè)置窗口位置
  21. rVIDOSD0A=(0<<11)|(0<<0);
  22. rVIDOSD0B=(479<<11)|(271<<0);
  23. rVIDOSD0C=(((480*272)&0xffffff)<<0);//4.3屏幕分辨率480*272
  24. //設(shè)置Window1的開始和結(jié)束的緩存地址與地址在內(nèi)存中的存放地址以及緩存的大小
  25. rVIDW00ADD0B0=((addr>>24)<<24)|(addr&0xffffff);
  26. rVIDW00ADD1B0=(addr&0xffffff+480*272);
  27. rVIDW00ADD2=(0<<13)|(480<<0);
  28. //設(shè)置抖動(dòng)
  29. rDITHMODE=(1<<5)|(1<<3)|(1<<1)|(1<<0);
  30. //開顯示
  31. rVIDCON0|=(3<<0);
  32. rWINCON0|=(1<<0);
  33. }

畫圖函數(shù):

[cpp]view plaincopyprint?
  1. voidLCD_DrawPixel(unsignedintx,unsignedinty,unsignedintcolor)
  2. {
  3. if((x<480)&&(y<272))
  4. LCD_BUFFER[y][x]=color;
  5. }
  6. voidLCD_Paint_Bmp(intx0,inty0,inth,intl,constunsignedchar*bmp)
  7. {
  8. intx,y;
  9. unsignedintc;
  10. intp=0;
  11. for(y=y0;y<l;y++)
  12. {
  13. for(x=x0;x<h;x++)
  14. {
  15. //RGB888
  16. c=(bmp[p])|(bmp[p+1]<<8)|(bmp[p+2]<<16);
  17. if(((x0+x)<LCD_XSIZE)&&((y0+y))
  18. LCD_BUFFER[y0+y][x0+x]=c;
  19. p=p+3;
  20. }
  21. }
  22. }



評(píng)論


技術(shù)專區(qū)

關(guān)閉