本文主要是介绍s5pv210 LCD控制器初始化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
s5pv210 LCD控制器功能模块框图:
初始化中对寄存器的配置:
(1)VIDCON0:时钟信号配置
(2)VIDCON1:信号极性设置
(3)VIDTCON0:VSYNC时序配置
(4)VIDTCON1:HSYNC时序配置
(5)VIDTCON2:像素设置
(6)WINCON0:设置像素对应数据的特征
(7)SHODOWCON:通道使能
(8)VIDOSD0A:窗口在LCD屏幕中左上角坐标的定位
(9)VIDOSD0B:设置窗口在LCD屏幕中右下角坐标的定位
(10)VIDOSD0C:确定窗口的大小
(11)VIDW00ADD0B0:framebuffer的起始地址设置
(12)VIDW00ADD1B0:framebuffer的末位地址设置
(13)VID00ADD2:设置framebuffer在虚拟屏幕中的偏移量和尺寸,用于反推framebuffer的末位地址
(14)DISPLAY_CONTROL:选择模式输出
初始化源码参考:
#include "stdio.h"
#include "s5pv210.h"void lcd_PortInit()
{rGPF0CON =0x22222222;rGPF1CON =0x22222222;rGPF2CON =0x22222222;rGPF3CON =0x22222222;
}void lcd_Init()
{//VIDCON0[0:1]=0B11;[2]=0;[4]=1;[6:13]=4;[26:28]=000;rVIDCON0 |= (0X3<<0);rVIDCON0 &= ~(0X1<<2);rVIDCON0 |= (0X1<<4);rVIDCON0 &= ~(0XFF<<6);rVIDCON0 |= (0X4<<6);rVIDCON0 &= ~(0X7<<26);//VIDCON1[4]=0;[5]=1;[6]=1;rVIDCON1 &= ~(0X1<<4); //Specifies the VDEN signal polarityrVIDCON1 |= (0X1<<5); //Specifies the VSYNC pulse polarity. rVIDCON1 |= (0X1<<6); //Specifies the HSYNC pulse polarity//VIDTCON0[0:7]=19;[8:15]=21;[16:23]=2;rVIDTCON0 &= ~(0XFF<<0); //VSPWrVIDTCON0 |= (0X13<<0);rVIDTCON0 &= ~(0XFF<<8); //VFPDrVIDTCON0 |= (0X15<<8);rVIDTCON0 &= ~(0XFF<<16); //VBPD rVIDTCON0 |= (0X2<<16);//VIDTCON1[0:7]=39;[8:15]=29;[16:23]=5;rVIDTCON1 &= ~(0XFF<<0); //HSPWrVIDTCON1 |= (0X27<<0);rVIDTCON1 &= ~(0XFF<<8); //HFPDrVIDTCON1 |= (0X1D<<8);rVIDTCON1 &= ~(0XFF<<16); //HBPD rVIDTCON1 |= (0X5<<16);//VIDTCON2[0:10]=799;[11:21]=479;Determines the size of displayrVIDTCON2 &= ~(0X7FF<<0);rVIDTCON2 |= (0X31F); //HOZVAL = (Horizontal display size) -1 rVIDTCON2 &= ~(0X7FF<<11);rVIDTCON2 |= (0X1DF<<11); //LINEVAL = (Vertical display size) –1//WINCON0[0]=1;[2:5]=0XB;[15]=1;rWINCON0 |= (0X1<<0);rWINCON0 &= ~(0XF<<2);rWINCON0 |= (0XB<<2); //1011 = Unpacked 24 bpp ( non-palletized R:8-G:8-B:8 )rWINCON0 |= (0X1<<15); //Specifies the Word swap control bit//SHADOWCON[0]=1;rSHADOWCON |= (0X1<<0); //Enables Channel 0//VIDOSD0A[0:10]=0;[11:21]=0;rVIDOSD0A &= ~(0X7FF<<0); //Specifies the vertical screen coordinate for left top pixel of OSD imagerVIDOSD0A &= ~(0X7FF<<11); //Specifies the horizontal screen coordinate for left top pixel of OSD image.//VIDOSD0B[0:10]=479;[11:21]=799;rVIDOSD0B &= ~(0X7FF<<0); rVIDOSD0B |= (0X1DF<<0);rVIDOSD0B &= ~(0X7FF<<11);rVIDOSD0B |= (0X31F<<11);//VIDOSD0C[0:23]=800*480rVIDOSD0C &= ~(0XFFFFFF);rVIDOSD0C |= (0X5DC00); //Specifies the Window Size//VIDW00ADD0B0[0:31]=0X42000000rVIDW00ADD0B0 &= ~(0XFFFFFFFF);rVIDW00ADD0B0 |= (0X42000000); // Specifies window 0’s buffer start address//VIDW00ADD1B0[0:31]=0X4200000+800*480*4rVIDW00ADD1B0 &= ~(0XFFFFFFFF);rVIDW00ADD1B0 |= (0X42177000); //Specifies window 0’s buffer end address//VIDW00ADD2[0:12]=800;[13:25]=0;rVIDW00ADD2 &= ~(0X3FFFFFF);rVIDW00ADD2 |= (0X320<<0);//DISPLAY_CONTROL[0:1]=0B10rDISPLAY_CONTROL &= ~(0X3<<0);rDISPLAY_CONTROL |= (0X1<<1); //10: RGB=FIMD I80=FIMD ITU=FIMD
}void delay()
{int i,j;for(i=0;i<100;i++)for(j=0;j<100;j++);
}void lcd_screen(int i,int j,int i1,int j1,int color) //(i,j) is the site of the focus.
{unsigned int *fbuf =(unsigned int *)0x42000000;int x,y;for(y=0;y<480;y++){for(x=0;x<800;x++){ if(((x-i)*(x-i)+(y-j)*(y-j))<=900)*(fbuf+800*y+x)=0xffff00;else if(((x-i1)*(x-i1)+(y-j1)*(y-j1))<=900)*(fbuf+800*y+x)=0x00ffff;else*(fbuf+800*y+x)=color;}}delay();
}int fimd_lcd()
{int x=400,y=240,x1=400,y1=240,flag_x=1,flag_y=1,flag_x1=1,flag_y1=1;lcd_PortInit();lcd_Init();while(1){if(x==30)flag_x=1; //x have to increaseif(x==770)flag_x=0; //x have to decreaseif(y==30)flag_y=1; //y have to increaseif(y==450)flag_y=0; //y have to decreaseif(x1==30)flag_x1=1; //x1 have to increaseif(x1==770)flag_x1=0; //x1 have to decreaseif(y1==30)flag_y1=1; //y1have to increaseif(y1==450)flag_y1=0; //y1 have to decreaseif(flag_x)x=x+2;else x-=2;if(flag_y)y++;elsey--;if(flag_x1)x1++;else x1--;if(flag_y1)y1=y1+2;elsey1=y1-2;lcd_screen(x,y,x1,y1,0xffffff); }return 0;
}
这篇关于s5pv210 LCD控制器初始化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!