文档库 最新最全的文档下载
当前位置:文档库 › 6410_mcu驱动

6410_mcu驱动



#include "s3c6410_addr.h"
#include "utils.h"
#include "lcd.h"
#include "utils.h"

extern const unsigned char pic_arry[];

void BL_ON(void);
void BL_OFF(void);
void LCD_SetPort (void);
void LCD_Stop(void);
void Clock_Source(void);
void LCD_InitBase2(void);
void LCD_SetAllWinOnOff(unsigned int uOnOff);
void LCD_SetAllWinColorMapOnOff(unsigned int uOnOff);
void LCD_SetAllWinColorKeyOnOff(unsigned int uOnOff);
void LCD_SetAlpha(void);
void LCD_InitWinRegs(void);
void PutPixe(unsigned int cvalue);
void LCD_Start(void);
void LCD_SimpleBasicDisp(void);
void Write_lcd_picture(unsigned int x,unsigned int y);

/*
流程图
LCD_SetPort(); //port;
LCD_InitLDI((CPUIF_LDI)LCD_CPUIF_CS); //cs init

LCD_InitBase2((CLK_SRC)LCLK_DOUT_MPLL, PNR_Parallel_RGB, CPU_16BIT); /
LCD_InitWin(RGB16, uHSz, uVSz, 0, 0, uHSz, uVSz, 0, 0, LCD_FRAMEBUFFER_ST, WIN0, false);
LCD_SetWinOnOff(1, WIN0);
LCD_GetFrmSz(&uHSz, &uVSz, WIN0);
GLIB_InitInstance(LCD_FRAMEBUFFER_ST, uHSz, uVSz, RGB16);
GLIB_DrawPattern(uHSz, uVSz);

LCD_Start();

UART_Printf("\nIf you want to stop display, press any key\n");
UART_Getc();

LCD_SetAllWinOnOff(0);
LCD_Stop();

*/


/*
bl: BACKLIGHT
GPE0 控制背光的开关
GPE0 = 1 : ON GPE0 = 0 : OFF
*/
void BL_ON(void)
{
Uart_Printf( " bl open\r\n" );
rGPECON = (rGPECON & ~(0xF<<0))|(0x1<<0);

rGPEPUD = (rGPEPUD & ~(0x3 <<0))|(0x01<<0);

rGPEDAT = (rGPEDAT & ~(0x1 <<0))|(0x01<<0);

}

void BL_OFF(void)
{

rGPECON = (rGPECON & ~(0xF<<0))|(0x1<<0);

rGPEPUD = (rGPEPUD & ~(0x3 <<0))|(0x01<<0);

rGPEDAT = (rGPEDAT & ~(0x1 <<0))|(0x00<<0);

}




void LCD_SetPort (void)
{
// GPIO_SetLCDType(eRGBIF);

rMIFPCON =(rMIFPCON & ~(0x1<<3)) | (0<<3); //bypass[3]
Uart_Printf( " rMIFPCON:= %x\r\n " ,rMIFPCON);
rSPCON = (rSPCON & ~(0x3<<0)) | (1<<0);

Uart_Printf( " rSPCON:= %x\r\n " ,rSPCON);
rGPICON = (rGPICON & ~(0xffffffff<<0)) | (0xaaaaaaaa<<0); //1010 lcd vd[15-0]
Uart_Printf( " rGPICON:= %x\r\n " ,rGPICON);
rGPJCON = (rGPJCON & ~(0xffffff<<0)) | (0xaaaaaa<<0); //GPJ[7..0]-> RGB VD[23..16], GPJ[11..8]-> VCLK, VDEN, VSYNC, HSYNC
Uart_Printf( " rGPJCON:= %x\r\n " ,rGPJCON);

Delay(1000);



}



/*
0 = Disable the video output and the Display control signal.

29: progressive interlace (27:26: 00 RGBi/f) 17:RGB Parallel (rgb)
*/
void LCD_Stop(void)
{

rVIDCON0 = (rVIDCON0 & ~(0x3<<0)) ;

}








/*
clkval_f: 13:6
VCLK = Video Clock Source / (CLKVAL+1) where CLKVAL >= 1

uLcdHSz += HBPD_LTV350QV + HFPD_LTV350QV + HSPW_LTV350QV +3;
uLcdVSz+= VBPD_LTV350QV + VFPD_LTV350QV + VSPW_LTV350QV +3;

*/

void Clock_Source(void)
{

unsigned int LCD_HTIMER,LCD_VTIMER,CLKVAL_F;
double clk_div;

LCD_HTIMER = HBPD_LTV430QV + HFPD_LTV430QV + HSPW_LTV430QV +3 +LCD_HSIZE;
LCD_VTIMER= VBPD_LTV430QV + VFPD_LTV430QV + VS

PW_LTV430QV +3 + LCD_VSIZE;



//clk_div = 66000000/(double)(LCD_HTIMER * LCD_VTIMER *LCD_FRM_RATE) - 1;
//clk_div = (clk_div+0.5)*10;
//CLKVAL_F = (((int)(clk_div/10.0)) & 0xff)<<6;



CLKVAL_F = (14& 0xff)<<6;
Uart_Printf( "CLKVAL_F : %x\r\n ", CLKVAL_F);
rVIDCON0 = (rVIDCON0 & ~(0x3<<2))|(0<<2); // clock source : hclk


rVIDCON0 =PROGRESSIVE | VIDOUTFORMAT | PNRMODE_RGB_P | CLKVALUP_ALWAYS |
CLKVAL_F | VCLKEN_ENABLE | CLKDIR_F_EN | VideoClockSource|
ENVID_DISABLE | ENVID_F_DISABLE;


}




/*

rVIDCON1 video control h v den (normal inverted)

rVIDTCON0 vertical back
rVIDTCON1 horizontal
rVIDTCON2 v size hsize lcd_vsize (240) lcd_hvsize (320)
rDITHMODE #define RDATA (0) //0:8BIT 1:6BIT 2:5BIT
#define GDATA (0) //0:8BIT 1:6BIT 2:5BIT
#define BDATA (0) //0:8BIT 1:6BIT 2:5BIT
//VIDCON1 = (1<<6 1<<5 1<<4 ) h v den INVERTED (反转)

*/


void LCD_InitBase2(void)
{

// h v den pulse polarity
rVIDCON1 = (rVIDCON1 & ~(0x7<<4)) | (0x0<<4) | (0x0<<5) | (0x0<<6);

//rVIDTCON0 = (rVIDTCON0 & ~(0xffffffff<<0)) | VBPDE(VBPD_LTV430QV) | VBPD(VBPD_LTV430QV) | VFPD(VFPD_LTV430QV) | VSPW(VSPW_LTV430QV); //v port
rVIDTCON0 = (rVIDTCON0 & ~(0xffffffff<<0)) | VBPD(VBPD_LTV430QV) | VFPD(VFPD_LTV430QV) | VSPW(VSPW_LTV430QV); //v port
//rVIDTCON1 = (rVIDTCON1 & ~(0xffffffff<<0)) | VFPDE(HBPD_LTV430QV) | HBPD(HBPD_LTV430QV) | HFPD(HFPD_LTV430QV) | HSPW(HSPW_LTV430QV); //hport
rVIDTCON1 = (rVIDTCON1 & ~(0xffffffff<<0)) | HBPD(HBPD_LTV430QV) | HFPD(HFPD_LTV430QV) | HSPW(HSPW_LTV430QV); //hport

rVIDTCON2 =((LCD_VSIZE-1)<<11) |((LCD_HSIZE-1)<<0); //size v h

// rVIDTCON2 =((480-1)<<11) |((272-1)<<0); //size v h
Uart_Printf( "rVIDTCON2 : %d\r\n ", rVIDTCON2&0x7ff);

Uart_Printf( "rVIDTCON2 : %d\r\n ", rVIDTCON2>>11);




//rDITHMODE = (rDITHMODE & ~(0xff<<0)) |((RDATA)<<5) |((GDATA)<<3) |((BDATA)<<1) |(0<<0);

//LCD_Stop();
while (1)
{

if( (rVIDCON0&0x03) == 0 ) // checking whether disable the video output and the Display control signal or not.
break;
}

Clock_Source();
//LCD_SetAllWinOnOff(0);
// LCD_SetAllWinColorMapOnOff(0);
// LCD_SetAllWinColorKeyOnOff(0);
// LCD_SetAlpha();


}



void LCD_SetAllWinOnOff(unsigned int uOnOff)
{
if (uOnOff)
{
rWINCON0 = (rWINCON0 & ~(0x1<<0))|ENWIN_F_ENABLE;
rWINCON1 = (rWINCON1 & ~(0x1<<0))|ENWIN_F_ENABLE;
rWINCON2 = (rWINCON2 & ~(0x1<<0))|ENWIN_F_ENABLE;
rWINCON3 = (rWINCON3 & ~(0x1<<0))|ENWIN_F_ENABLE;
rWINCON4 = (rWINCON4 & ~(0x1<<0))|ENWIN_F_ENABLE;

}
else
{
rWINCON0 = (rWINCON0 & ~(0x1<<0))|ENWIN_F_DISABLE;
rWINCON1 = (rWINCON1 & ~(0x1<<0))|ENWIN_F_DISABLE;
rWINCON2 = (rWINCON2 & ~(0x1<<0))|ENWIN_F_DISABLE;
rWINCON3 = (rWINCON3 & ~(0x1<<0))|ENWIN_F_DISABLE;
rWINCON4 = (rWINCON4 & ~(0x1<<0))|ENWIN_F_DISABLE;
}

}


void LCD

_SetAllWinColorMapOnOff(unsigned int uOnOff)
{
if (uOnOff)
{
rWIN0MAP = (rWIN0MAP & ~(0x1<<24))|COLOR_MAP_ENABLE;
rWIN1MAP = (rWIN1MAP & ~(0x1<<24))|COLOR_MAP_ENABLE;
rWIN2MAP = (rWIN2MAP & ~(0x1<<24))|COLOR_MAP_ENABLE;
rWIN3MAP = (rWIN3MAP & ~(0x1<<24))|COLOR_MAP_ENABLE;
rWIN4MAP = (rWIN4MAP & ~(0x1<<24))|COLOR_MAP_ENABLE;

}
else
{
rWIN0MAP = (rWIN0MAP & ~(0x1<<24))&(~COLOR_MAP_ENABLE);
rWIN1MAP = (rWIN1MAP & ~(0x1<<24))&(~COLOR_MAP_ENABLE);
rWIN2MAP = (rWIN2MAP & ~(0x1<<24))&(~COLOR_MAP_ENABLE);
rWIN3MAP = (rWIN3MAP & ~(0x1<<24))&(~COLOR_MAP_ENABLE);
rWIN4MAP = (rWIN4MAP & ~(0x1<<24))&(~COLOR_MAP_ENABLE);
}

}



void LCD_SetAllWinColorKeyOnOff(unsigned int uOnOff)
{
if (uOnOff)
{
rW1KEYCON0 = (rW1KEYCON0 & ~(0x1<<25))|KEYEN_F_ENABLE;
rW2KEYCON0 = (rW2KEYCON0 & ~(0x1<<25))|KEYEN_F_ENABLE;
rW3KEYCON0 = (rW3KEYCON0 & ~(0x1<<25))|KEYEN_F_ENABLE;
rW4KEYCON0 = (rW4KEYCON0 & ~(0x1<<25))|KEYEN_F_ENABLE;

}
else
{
rW1KEYCON0 = (rW1KEYCON0 & ~(0x3<<25))& KEYEN_F_DISABLE & KEYBLEN_DISABLE;
rW2KEYCON0 = (rW2KEYCON0 & ~(0x3<<25))& KEYEN_F_DISABLE & KEYBLEN_DISABLE;
rW3KEYCON0 = (rW3KEYCON0 & ~(0x3<<25))& KEYEN_F_DISABLE & KEYBLEN_DISABLE;
rW4KEYCON0 = (rW4KEYCON0 & ~(0x3<<25))& KEYEN_F_DISABLE & KEYBLEN_DISABLE;
}



}



void LCD_SetAlpha(void)
{
rVIDOSD1C= (rVIDOSD1C & ~(0xfffff<<0));
rVIDOSD2C= (rVIDOSD2C & ~(0xfffff<<0));
rVIDOSD3C= (rVIDOSD3C & ~(0xfffff<<0));
rVIDOSD4C= (rVIDOSD4C & ~(0xfffff<<0));
}




//************************************************
// LCD_InitWin(RGB16, uHSz, uVSz, 0, 0, uHSz, uVSz, 0, 0, LCD_FRAMEBUFFER_ST, WIN0, false);


/*

*********rWINCON0*************************
#define W0DMA (0<<22) // data access method :dedicated DMA
#define W0BUF0 (0<<20) //BUFF SET 0
#define W0BUFAUTO_DISABLE (0<<19) //ATUO DISABLE
#define BITSWP_DISABLE (0<<18) //BIT SWAP DISABLE
#define BYTESWP_DISABLE (0<<17) //Byte SWAP DISABLE
#define HAWSWP_DISABLE (0<<16) //Half-Word swap DISABLE
#define HAWSWP_ENABLE (1<<16) //Half-Word swap ENABLE

#define BURSTLEN (0<<9) //16WORD-BURST

#define BPPMODE_F_16BPP_565 5<<2 //565
#define BPPMODE_F_24BPP_888 11<<2 //888

******************************************************

#define LCD_FRAMEBUFFER_ST 0x52000000 //rVIDW00ADD0B0
#define MUBYTES 2
#define MUBITS 1
#define MUPAGEWIDTH ((LCD_VIEW_HSIZE*MUBYTES)/MUBITS)
#define LCD_FRAMEBUFFER_END (LCD_FRAMEBUFFER_ST+MUPAGEWIDTH*LCD_VIEW_VSIZE) //Virtual screen page width

rVIDW00ADD0B0
rVIDW00ADD1B1
#define LCD_VIEW_VSIZE (240)
#define LCD_VIEW_HSIZE (320)
*/


//osd view
// lcd_window win0 init
void LCD_InitWinRegs(void)
{
//rVIDW00ADD0B0 = LCD_FRAMEBUFFER_ST; //buffer 1 start addr

// rVIDW00ADD1B1 = LCD_FRAMEBUFFER_END;



// rVIDOSD1C = (0xffffff);



rWINCON0 = W0DMA | W0BUFAUTO_DISABLE | BITSWP_DISABLE |
BYTESWP_DISABLE | HAWSWP_DISABLE|
BURSTLEN |BPPMODE_F_16BPP_565 |
ENWIN_F_DISABLE;

rVIDW00ADD0B0 = LCD_FRAMEBUFFER_ST;

Uart_Printf( "rVIDW00ADD0B0 : %x\r\n ", rVIDW00ADD0B0);

rVIDW00ADD1B0 = LCD_FRAMEBUFFER_END;

Uart_Printf( "rVIDW00ADD1B0 : %x\r\n ", rVIDW00ADD1B0);
rVIDW00ADD2 = MUPAGEWIDTH;
Uart_Printf( "rVIDW00ADD2 : %x\r\n ", rVIDW00ADD2);

rVIDOSD0A = (0<<11|0<0);

Uart_Printf( "rVIDOSD0A : %x\r\n ", rVIDOSD0A);

rVIDOSD0B = ((LCD_VIEW_HSIZE)<<11 )|((LCD_VIEW_VSIZE));

// rVIDOSD0B = ((479<<11 )|271);

rVIDOSD0C = ((LCD_VIEW_VSIZE *LCD_VIEW_HSIZE*3/4)&0xffffff)<<0;

Uart_Printf( "rVIDOSD0B : %x\r\n ", rVIDOSD0B);
// rVIDOSD0B = ((1)<<11 )|((1)>>1);
// rWINCON0 = (rWINCON0 & ~(0x1<<0))| ENWIN_F_ENABLE;

}


void LCD_SetWinOnOff(unsigned int uOnOff)
{
if (uOnOff) // Turn OSD on
rWINCON0 |= ENWIN_F_ENABLE;
else // Turn OSD off
rWINCON0 &= ~ENWIN_F_ENABLE;



}



/*
#define RGB16 16
#define RGB24 24

#define BPP RGB16
(*(volatile unsigned *)(VID_BASE+0x48))
*/
void PutPixe(unsigned int cvalue)
{

unsigned int * lcd_buffer_st;
(volatile unsigned *)lcd_buffer_st =(volatile unsigned *)LCD_FRAMEBUFFER_ST;

if (BPP == 16)
{
//lcd_buffer_st = (unsigned short *)LCD_FRAMEBUFFER_ST;

*(((unsigned short *)(lcd_buffer_st))++) = (unsigned short)cvalue;

}
else if (BPP== 18 || BPP == 24)
{
*(((unsigned int *)(lcd_buffer_st))++) =(unsigned int)cvalue;
}
}



void Write_lcd_full(unsigned int x,unsigned int y,unsigned short color)
{
int i,j;
unsigned int * lcd_buffer_st;

(volatile unsigned *)lcd_buffer_st =(volatile unsigned *)LCD_FRAMEBUFFER_ST;


for( j = 0; j< (y/2) ; j++)
for( i=0; i< x; i++)
{

*(((unsigned int *)(lcd_buffer_st))+LCD_VIEW_HSIZE*j+i) =((unsigned int )color<<16|(unsigned int )color);


}



}

/*
p1 = pic_arry;
LCD_Window_Set(0,0,LCD_WIDTH-1,LCD_HEIGHT-1);
for(i=0;i<240;i++)
for(j=0;j<320;j++)
{
tmp1=*p1;p1++;
tmp2=*p1;p1++;
tmp2=(tmp1<<8)|tmp2;
LCD_Pixel_wr(tmp2);
*/




void Write_lcd_rgb(void)
{
int i,j;
unsigned int * lcd_buffer_st;

lcd_buffer_st =( unsigned int *)LCD_FRAMEBUFFER_ST;


for( j = 0; j<45 ; j++)
for( i=0; i<480; i++)
{

*(((unsigned int *)(lcd_buffer_st))+LCD_VIEW_HSIZE*j+i) =0xf800f800;

//*(((unsigned int *)(lcd_buffer_st))++) =0xff0000;


}


Uart_Printf( " red ok\r\n" );
for( j = 45; j<90 ; j++)
for( i=0; i< 480; i++)
{

*(((unsigned int *)(lcd_buffer_st))+LCD_VIEW_HSIZE*j+i) =0x07a007a0;
// *(((unsigned int *)(lcd_buffer_st))++) =0x00ff00;

}

Uart_

Printf( "green ok\r\n" );

for( j = 90; j<186 ; j++)
for( i=0; i< 480; i++)
{

*(((unsigned int *)(lcd_buffer_st))+LCD_VIEW_HSIZE*j+i) =0x001f001f;
//*(((unsigned int *)(lcd_buffer_st))++) =0x0000ff;

}

Uart_Printf( "blue ok\r\n" );

}





void Write_lcd_picture(unsigned int x,unsigned int y)
{
int i,j;
unsigned int tmp1,tmp2,tmp3,tmp4,tmp5;
const unsigned char *p1;
unsigned int * lcd_buffer_st;
(volatile unsigned *)lcd_buffer_st =(volatile unsigned *)LCD_FRAMEBUFFER_ST;


p1 = pic_arry;
for( j = 0; j<( y/2) ; j++)
for( i=0; i< x; i++)
{ tmp1=(*p1);p1++;
tmp2=(*p1);p1++;
tmp3=(*p1);p1++;
tmp4=(*p1);p1++;

tmp5=((tmp1<<24)|(tmp2<<16)|tmp3<<8|tmp4);


*(((unsigned int *)(lcd_buffer_st))+LCD_VIEW_HSIZE*j+i) =tmp5;


}



}


void LCD_Start(void)
{

rWINCON0 = (rWINCON0 & ~(0x1<<0))| ENWIN_F_ENABLE;
rVIDCON0 |= 0x3<<0;
Uart_Printf( " rVIDCON0 open\r\n " );

}




void LCD_SimpleBasicDisp(void)
{

Uart_Printf( " lcd open\r\n " );
BL_ON();
LCD_SetPort();
LCD_InitBase2();
LCD_InitWinRegs();
LCD_SetWinOnOff(1);

LCD_Start();
Write_lcd_full(480,272,0xf800);

Delay(2000);
Write_lcd_full(480,272,0x07a0);

Delay(2000);
Write_lcd_full(480,272,0x001f);
Delay(2000);

// Write_lcd_full(480,272,0xff00);
// Delay(1000);


Write_lcd_full(480,272,0x000000);
Delay(2000);


Write_lcd_rgb();




Delay(2000);



Write_lcd_picture(480,272);
// LCD_Start();
Delay(100);

// LCD_Stop();
// Delay(10000);



}


















相关文档
相关文档 最新文档