BOOTLOADER
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros
testvga.c
Go to the documentation of this file.
1 /**********************************************************
2 * Function: Test s3c2440 lcd function and ch7005 vga output
3 *
4 * File: testvga.c
5 * Author: Book Chen
6 * Date: 2008.07.18
7 ***********************************************************
8 */
9 #include "includes.h"
10 
11 #define TESTVGA_MEMORY_ADDRESS 0x33400000
12 unsigned char vga640480[]={
13  0x61,0x02,0x0b,0x00,0x20,0x37,0x10,0x8c,
14  0x01,0x69,0x30,0x20,0x05,0x03,0x1b,0x15,
15  0x00,0xcb,0xff,0x40,0x3f,0x7e,0x0d,0x40,
16  0x62,0x00,0x68,0x00,0xf0,0x00,0x00,0x00,
17  0x0a,0x01,0x00,0x00,0x01,0x32,0x00,0x00,
18  0x00,0x00,0x54,0x01,0xae,0xae,0xd7,0x81,
19  0x08,0xfa,0xfa,0x1f,0x0f,0xfa,0xfa,0x03,
20  0xfc,0x00,0x00,0x0f,0x0f,0x00,0x00,0x3f
21 };
22 unsigned char pal640480[]={
23  0x61,0x02,0x0b,0x00,0x00,0x37,0x10,0x64,
24  0x01,0x69,0x30,0x20,0x05,0x03,0x0a,0x15,
25  0x00,0xcb,0xff,0x40,0x3f,0x7e,0x0d,0x40,
26  0x62,0x00,0x68,0x00,0xf0,0x00,0x00,0x00,
27  0x0a,0x01,0x00,0x00,0x01,0x32,0x00,0x00,
28  0x00,0x00,0x54,0x01,0xae,0xae,0xd7,0x81,
29  0x08,0xfa,0xfa,0x1f,0x0f,0xfa,0xfa,0x03,
30  0xfc,0x00,0x00,0x0f,0x0f,0x00,0x00,0x3f
31 };
32 unsigned char vga_mode_vga[]="VGA 640X480";
33 unsigned char vga_mode_pal[]="PAL 640X480";
34 unsigned char *pDisplayMode[TestVgaMaxDisplayMode][2]={
35  {0,0},
38 };
39 // ADS1.2 can't accept this declaraction following,but GCC can.
40 /*signed char *pDisplayMode[TestVgaMaxDisplayMode][2]={
41  {0,0},
42  {vga640480, "VGA 640X480"},
43  {pal640480, "PAL 640X480"}
44 };*/
46 volatile static unsigned short (*pTestVgaBuffer)[SCR_XSIZE_TFT_640480]=(void *)TESTVGA_MEMORY_ADDRESS;
47 void F_TestVgaInit(void);
48 //void F_TestVgaVideoOutputEnable(INT8U Enable);
49 void F_TestVgaGfxPixelColorSet(INT16U X,INT16U Y,INT16U ColorValue);
50 void F_TestVgaGfxFill(INT16U ColorValue);
51 void F_TestVgaGfxLineDraw(INT16U StartX,INT16U StartY,INT16U EndX,INT16U EndY,INT16U ColorValue);
52 void F_TestVgaGfxRectangleDraw(INT16U StartX,INT16U StartY,INT16U EndX,INT16U EndY,INT16U ColorValue);
53 void F_TestVgaGfxRectangleFill(INT16U StartX,INT16U StartY,INT16U EndX,INT16U EndY,INT16U ColorValue);
54 void F_TestVgaSvc(void);
55 void F_TestVgaPlay(void);
57 
58 void F_TestVgaInit(void){
59  TestVgaCtrl.Id=ID_TESTVGA;
60  TestVgaCtrl.InUse=FALSE;
61  TestVgaCtrl.TimeCounter=100;
62  TestVgaCtrl.State=TestVgaIdleState;
63 }
64 //void F_TestVgaVideoOutputEnable(INT8U Enable){
65 // if(Enable==TRUE) rLCDCON1|=0x00000001; // [0] is VDEN bit...video enable signal
66 // else rLCDCON1&=0x0003fffe; // [17:1] is RW bits must be kept
67 //}
70  pTestVgaBuffer[Y][X]=ColorValue;
71 }
73 {
74  unsigned int x,y ;
75 
76  for(y=0;y<SCR_YSIZE_TFT_640480;y++){
77  for(x=0;x<SCR_XSIZE_TFT_640480;x++){
78  pTestVgaBuffer[y][x]=ColorValue;
79  }
80  }
81 }
82 void F_TestVgaGfxFill(INT16U ColorValue){
83  INT16U X,Y;
84 
85  for(Y=0;Y<SCR_YSIZE_TFT_640480;Y++)
86  for(X=0;X<SCR_XSIZE_TFT_640480;X++)
87  pTestVgaBuffer[Y][X]=ColorValue;
88 }
89 void F_TestVgaGfxRectangleDraw(INT16U StartX,INT16U StartY,INT16U EndX,INT16U EndY,INT16U ColorValue){
90  F_TestVgaGfxLineDraw(StartX,StartY,EndX,StartY,ColorValue);
91  F_TestVgaGfxLineDraw(StartX,StartY,StartX,EndY,ColorValue);
92  F_TestVgaGfxLineDraw(EndX,StartY,EndX,EndY,ColorValue);
93  F_TestVgaGfxLineDraw(StartX,EndY,EndX,EndY,ColorValue);
94 }
95 void F_TestVgaGfxRectangleFill(INT16U StartX,INT16U StartY,INT16U EndX,INT16U EndY,INT16U ColorValue){
96  INT16U i;
97 
98  for(i=StartY;i<=EndY;i++){
99  F_TestVgaGfxLineDraw(StartX,i,EndX,i,ColorValue);
100  }
101 }
102 void F_TestVgaGfxLineDraw(INT16U StartX,INT16U StartY,INT16U EndX,INT16U EndY,INT16U ColorValue){
103  INT32 DeltaX,DeltaY,Difference;
104 
105  DeltaX=EndX-StartX;
106  DeltaY=EndY-StartY;
107 
108  if(DeltaX>=0)
109  {
110  if(DeltaY>=0) // DeltaY>=0
111  {
112  if(DeltaX>=DeltaY) // 1/8 octant
113  {
114  Difference=DeltaY-DeltaX/2;
115  while(StartX<=EndX)
116  {
117  F_TestVgaGfxPixelColorSet(StartX,StartY,ColorValue);
118  if(Difference>0){StartY+=1;Difference-=DeltaX;}
119  StartX+=1;
120  Difference+=DeltaY;
121  }
122  }
123  else // 2/8 octant
124  {
125  Difference=DeltaX-DeltaY/2;
126  while(StartY<=EndY)
127  {
128  F_TestVgaGfxPixelColorSet(StartX,StartY,ColorValue);
129  if(Difference>0){StartX+=1;Difference-=DeltaY;}
130  StartY+=1;
131  Difference+=DeltaX;
132  }
133  }
134  }
135  else // DeltaY<0
136  {
137  DeltaY=-DeltaY; // DeltaY=abs(DeltaY)
138 
139  if(DeltaX>=DeltaY) // 8/8 octant
140  {
141  Difference=DeltaY-DeltaX/2;
142  while(StartX<=EndX)
143  {
144  F_TestVgaGfxPixelColorSet(StartX,StartY,ColorValue);
145  if(Difference>0){StartY-=1;Difference-=DeltaX;}
146  StartX+=1;
147  Difference+=DeltaY;
148  }
149  }
150  else // 7/8 octant
151  {
152  Difference=DeltaX-DeltaY/2;
153  while(StartY>=EndY)
154  {
155  F_TestVgaGfxPixelColorSet(StartX,StartY,ColorValue);
156  if(Difference>0){StartX+=1;Difference-=DeltaY;}
157  StartY-=1;
158  Difference+=DeltaX;
159  }
160  }
161  }
162  }
163  else //DeltaX<0
164  {
165  DeltaX=-DeltaX; //DeltaX=abs(DeltaX)
166  if(DeltaY >= 0) // DeltaY>=0
167  {
168  if(DeltaX>=DeltaY) // 4/8 octant
169  {
170  Difference=DeltaY-DeltaX/2;
171  while(StartX>=EndX)
172  {
173  F_TestVgaGfxPixelColorSet(StartX,StartY,ColorValue);
174  if(Difference>0){StartY+=1;Difference-=DeltaX;}
175  StartX-=1;
176  Difference+=DeltaY;
177  }
178  }
179  else // 3/8 octant
180  {
181  Difference=DeltaX-DeltaY/2;
182  while(StartY<=EndY)
183  {
184  F_TestVgaGfxPixelColorSet(StartX,StartY,ColorValue);
185  if(Difference>0){StartX-=1;Difference-=DeltaY;}
186  StartY+=1;
187  Difference+=DeltaX;
188  }
189  }
190  }
191  else // DeltaY<0
192  {
193  DeltaY=-DeltaY; // DeltaY=abs(DeltaY)
194 
195  if(DeltaX>=DeltaY) // 5/8 octant
196  {
197  Difference=DeltaY-DeltaX/2;
198  while(StartX>=EndX)
199  {
200  F_TestVgaGfxPixelColorSet(StartX,StartY,ColorValue);
201  if(Difference>0){StartY-=1;Difference-=DeltaX;}
202  StartX-=1;
203  Difference+=DeltaY;
204  }
205  }
206  else // 6/8 octant
207  {
208  Difference=DeltaX-DeltaY/2;
209  while(StartY>=EndY)
210  {
211  F_TestVgaGfxPixelColorSet(StartX,StartY,ColorValue);
212  if(Difference>0){StartX-=1;Difference-=DeltaY;}
213  StartY-=1;
214  Difference+=DeltaX;
215  }
216  }
217  }
218  }
219 }
220 
221 #define VGA_BLANK 30
222 #define C_UP (LCD_HORIZONTAL_SIZE-VGA_BLANK*2)
223 #define C_RIGHT (LCD_HORIZONTAL_SIZE-VGA_BLANK*2)
224 #define V_BLACK ((LCD_VERTICAL_SIZE-VGA_BLANK*4)/6)
225 void F_TestVgaSvc(void){
226  INT32U i;
227 
228  //if(TestVgaCtrl.TimeCounter!=0) return;
229  //TestVgaCtrl.TimeCounter=300;
230  switch(TestVgaCtrl.State){
231  case TestVgaIdleState:
232  break;
234  if(F_LcdInUseCheck()==TRUE) return;
235  F_LcdAllocate(TestVgaCtrl.Id); // get iic resource
238  F_LcdLcdcon1Set(TestVgaCtrl.Id,i);
240  F_LcdLcdcon2Set(TestVgaCtrl.Id,i);
242  F_LcdLcdcon3Set(TestVgaCtrl.Id,i);
243  i=LCD_MVAL|LCD_HSPW;
244  F_LcdLcdcon4Set(TestVgaCtrl.Id,i);
246  F_LcdLcdcon5Set(TestVgaCtrl.Id,i);
247  i=(((INT32U)pTestVgaBuffer>>22)<<21)|(((INT32U)pTestVgaBuffer>>1)&0x1fffff);
248  F_LcdLcdsaddr1Set(TestVgaCtrl.Id,i);
249  i=(((INT32U)pTestVgaBuffer+(LCD_HORIZONTAL_SIZE*LCD_VERTICAL_SIZE*2))>>1)&0x1fffff;
250  F_LcdLcdsaddr2Set(TestVgaCtrl.Id,i);
251  i=(0<<11)|(LCD_HORIZONTAL_SIZE);
252  F_LcdLcdsaddr3Set(TestVgaCtrl.Id,i);
253  F_LcdLcdintmskSet(TestVgaCtrl.Id,0x00000003);
254  F_LcdLpcselSet(TestVgaCtrl.Id,0x00000004);
255  F_LcdTpalSet(TestVgaCtrl.Id,0);
256  F_LcdEnable(TestVgaCtrl.Id);
257  F_LcdRelease(TestVgaCtrl.Id); // release iic
258  #if(DEBUG_TESTVGA==1)
259  printf("\n TestVgaInitialState0");
260  #endif
261  TestVgaCtrl.State=TestVgaInitialState1;
262  break;
264  if(F_IicInUseCheck()==TRUE) return;
265  F_IicAllocate(TestVgaCtrl.Id); // get iic resource
267  F_IicRelease(TestVgaCtrl.Id); // release iic
268  #if(DEBUG_TESTVGA==1)
269  printf("\n TestVgaInitialState1");
270  #endif
271  F_TestVgaGfxFill((0x00<<11)|(0x00<<5)|(0x1f));
272  TestVgaCtrl.State=TestVgaInitialState2;
273  break;
274  case TestVgaInitialState2:
275  #if(DEBUG_TESTVGA==1)
276  printf("\n TestVgaInitialState2");
277  #endif
278  F_TestVgaGfxFill((0x00<<11)|(0x3f<<5)|(0x00));
279  TestVgaCtrl.State=TestVgaInitialState3;
280  break;
281  case TestVgaInitialState3:
282  #if(DEBUG_TESTVGA==1)
283  printf("\n TestVgaInitialState3");
284  #endif
285  F_TestVgaGfxFill((0x1f<<11)|(0x00<<5)|(0x00));
286  TestVgaCtrl.State=TestVgaInitialState4;
287  break;
288  case TestVgaInitialState4:
289  #if(DEBUG_TESTVGA==1)
290  printf("\n TestVgaInitialState4");
291  #endif
292  F_TestVgaGfxFill(0xffff);
293  TestVgaCtrl.State=TestVgaShowColor0State;
294  break;
296  #if(DEBUG_TESTVGA==1)
297  printf("\n TestVgaShowColor0State");
298  #endif
299  F_TestVgaGfxFill((0x00<<11)|(0x00<<5)|(0x1f));
300  TestVgaCtrl.State=TestVgaShowColor1State;
301  break;
303  #if(DEBUG_TESTVGA==1)
304  printf("\n TestVgaShowColor1State");
305  #endif
306  F_TestVgaGfxFill((0x00<<11)|(0x3f<<5)|(0x00));
307  TestVgaCtrl.State=TestVgaShowColor2State;
308  break;
310  #if(DEBUG_TESTVGA==1)
311  printf("\n TestVgaShowColor2State");
312  #endif
313  F_TestVgaGfxFill((0x1f<<11)|(0x00<<5)|(0x00));
314  TestVgaCtrl.State=TestVgaDrawRectangle0State;
315  break;
317  #if(DEBUG_TESTVGA==1)
318  printf("\n TestVgaDrawRectangle0State");
319  #endif
321  TestVgaCtrl.State=TestVgaDrawRectangle1State;
322  break;
324  #if(DEBUG_TESTVGA==1)
325  printf("\n TestVgaDrawRectangle1State");
326  #endif
327  F_TestVgaGfxRectangleDraw((VGA_BLANK*2),(VGA_BLANK*2+V_BLACK*0),(C_RIGHT),(VGA_BLANK*2+V_BLACK*1),0x001f); //fill a Rectangle with some color
328  TestVgaCtrl.State=TestVgaDrawRectangle2State;
329  break;
331  #if(DEBUG_TESTVGA==1)
332  printf("\n TestVgaDrawRectangle2State");
333  #endif
334  F_TestVgaGfxRectangleDraw((VGA_BLANK*2),(VGA_BLANK*2+V_BLACK*1),(C_RIGHT),(VGA_BLANK*2+V_BLACK*2),0x07e0); //fill a Rectangle with some color
335  TestVgaCtrl.State=TestVgaDrawRectangle3State;
336  break;
338  #if(DEBUG_TESTVGA==1)
339  printf("\n TestVgaDrawRectangle3State");
340  #endif
341  F_TestVgaGfxRectangleDraw((VGA_BLANK*2),(VGA_BLANK*2+V_BLACK*2),(C_RIGHT),(VGA_BLANK*2+V_BLACK*3),0xf800); //fill a Rectangle with some color
342  TestVgaCtrl.State=TestVgaDrawRectangle4State;
343  break;
345  #if(DEBUG_TESTVGA==1)
346  printf("\n TestVgaDrawRectangle4State");
347  #endif
348  F_TestVgaGfxRectangleDraw((VGA_BLANK*2),(VGA_BLANK*2+V_BLACK*3),(C_RIGHT),(VGA_BLANK*2+V_BLACK*4),0xffe0); //fill a Rectangle with some color
349  TestVgaCtrl.State=TestVgaDrawRectangle5State;
350  break;
352  #if(DEBUG_TESTVGA==1)
353  printf("\n TestVgaDrawRectangle5State");
354  #endif
355  F_TestVgaGfxRectangleDraw((VGA_BLANK*2),(VGA_BLANK*2+V_BLACK*4),(C_RIGHT),(VGA_BLANK*2+V_BLACK*5),0xf81f); //fill a Rectangle with some color
356  TestVgaCtrl.State=TestVgaDrawRectangle6State;
357  break;
359  #if(DEBUG_TESTVGA==1)
360  printf("\n TestVgaDrawRectangle6State");
361  #endif
362  F_TestVgaGfxRectangleDraw((VGA_BLANK*2),(VGA_BLANK*2+V_BLACK*5),(C_RIGHT),(VGA_BLANK*2+V_BLACK*6),0x07ff); //fill a Rectangle with some color
363  #if(DEBUG_TESTVGA==1)
364  printf("\n ARM:>");
365  #endif
366  TestVgaCtrl.State=TestVgaIdleState;
367  break;
368  }
369 }
370 void F_TestVgaPlay(void){
371  TestVgaCtrl.State=TestVgaInitialState0;
372 }
374  if(TestVgaCtrl.State==TestVgaIdleState) return TRUE;
375  else return FALSE;
376 }
377 
378 
379 
380