diff packages/hal/arm/cl7211/current/misc/lcd_test.c @ 36:e97d78785e2d ecos-sw-1999-09-12

Merge from eCos master repository on 1999-09-12-15:40:34-BST
author jlarmour
date Sun, 12 Sep 1999 15:26:05 +0000
parents 5af43b635655
children
line wrap: on
line diff
--- a/packages/hal/arm/cl7211/current/misc/lcd_test.c
+++ b/packages/hal/arm/cl7211/current/misc/lcd_test.c
@@ -31,7 +31,7 @@
 //
 // Author(s):     gthomas
 // Contributors:  gthomas
-// Date:          1999-05-15
+// Date:          1999-09-01
 // Description:   Tool used to test LCD controller
 //####DESCRIPTIONEND####
 
@@ -51,124 +51,7 @@ static char stack[STACK_SIZE];
 static cyg_thread thread_data;
 static cyg_handle_t thread_handle;
 
-// 8x8 Font - from Helios
-
-#define FIRST_CHAR 0x20
-#define LAST_CHAR  0x7E
-#define FONT_HEIGHT 8
-#define FONT_WIDTH  8
-static char font_table[LAST_CHAR-FIRST_CHAR+1][8] =
-{
-        {        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /*   */
-        {        0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x00 }, /* ! */
-        {        0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* " */
-        {        0x6C, 0x6C, 0xFE, 0x6C, 0xFE, 0x6C, 0x6C, 0x00 }, /* # */
-        {        0x30, 0xFC, 0x16, 0x7C, 0xD0, 0x7E, 0x18, 0x00 }, /* $ */
-        {        0x06, 0x66, 0x30, 0x18, 0x0C, 0x66, 0x60, 0x00 }, /* % */
-        {        0x1C, 0x36, 0x36, 0x1C, 0xB6, 0x66, 0xDC, 0x00 }, /* & */
-        {        0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* ' */
-        {        0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x18, 0x30, 0x00 }, /* ( */
-        {        0x0C, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0C, 0x00 }, /* ) */
-        {        0x00, 0x18, 0x7E, 0x3C, 0x7E, 0x18, 0x00, 0x00 }, /* * */
-        {        0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00 }, /* + */
-        {        0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x0C }, /* , */
-        {        0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00 }, /* - */
-        {        0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00 }, /* . */
-        {        0x00, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x00, 0x00 }, /* / */
-        {        0x3C, 0x66, 0x76, 0x7E, 0x6E, 0x66, 0x3C, 0x00 }, /* 0 */
-        {        0x18, 0x1C, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x00 }, /* 1 */
-        {        0x3C, 0x66, 0x60, 0x30, 0x18, 0x0C, 0x7E, 0x00 }, /* 2 */
-        {        0x3C, 0x66, 0x60, 0x38, 0x60, 0x66, 0x3C, 0x00 }, /* 3 */
-        {        0x30, 0x38, 0x3C, 0x36, 0x7E, 0x30, 0x30, 0x00 }, /* 4 */
-        {        0x7E, 0x06, 0x3E, 0x60, 0x60, 0x66, 0x3C, 0x00 }, /* 5 */
-        {        0x38, 0x0C, 0x06, 0x3E, 0x66, 0x66, 0x3C, 0x00 }, /* 6 */
-        {        0x7E, 0x60, 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x00 }, /* 7 */
-        {        0x3C, 0x66, 0x66, 0x3C, 0x66, 0x66, 0x3C, 0x00 }, /* 8 */
-        {        0x3C, 0x66, 0x66, 0x7C, 0x60, 0x30, 0x1C, 0x00 }, /* 9 */
-        {        0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00 }, /* : */
-        {        0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x0C }, /* ; */
-        {        0x30, 0x18, 0x0C, 0x06, 0x0C, 0x18, 0x30, 0x00 }, /* < */
-        {        0x00, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x00, 0x00 }, /* = */
-        {        0x0C, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0C, 0x00 }, /* > */
-        {        0x3C, 0x66, 0x30, 0x18, 0x18, 0x00, 0x18, 0x00 }, /* ? */
-        {        0x3C, 0x66, 0x76, 0x56, 0x76, 0x06, 0x3C, 0x00 }, /* @ */
-        {        0x3C, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x66, 0x00 }, /* A */
-        {        0x3E, 0x66, 0x66, 0x3E, 0x66, 0x66, 0x3E, 0x00 }, /* B */
-        {        0x3C, 0x66, 0x06, 0x06, 0x06, 0x66, 0x3C, 0x00 }, /* C */
-        {        0x1E, 0x36, 0x66, 0x66, 0x66, 0x36, 0x1E, 0x00 }, /* D */
-        {        0x7E, 0x06, 0x06, 0x3E, 0x06, 0x06, 0x7E, 0x00 }, /* E */
-        {        0x7E, 0x06, 0x06, 0x3E, 0x06, 0x06, 0x06, 0x00 }, /* F */
-        {        0x3C, 0x66, 0x06, 0x76, 0x66, 0x66, 0x3C, 0x00 }, /* G */
-        {        0x66, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x66, 0x00 }, /* H */
-        {        0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x00 }, /* I */
-        {        0x7C, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1C, 0x00 }, /* J */
-        {        0x66, 0x36, 0x1E, 0x0E, 0x1E, 0x36, 0x66, 0x00 }, /* K */
-        {        0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x7E, 0x00 }, /* L */
-        {        0xC6, 0xEE, 0xFE, 0xD6, 0xD6, 0xC6, 0xC6, 0x00 }, /* M */
-        {        0x66, 0x66, 0x6E, 0x7E, 0x76, 0x66, 0x66, 0x00 }, /* N */
-        {        0x3C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00 }, /* O */
-        {        0x3E, 0x66, 0x66, 0x3E, 0x06, 0x06, 0x06, 0x00 }, /* P */
-        {        0x3C, 0x66, 0x66, 0x66, 0x56, 0x36, 0x6C, 0x00 }, /* Q */
-        {        0x3E, 0x66, 0x66, 0x3E, 0x36, 0x66, 0x66, 0x00 }, /* R */
-        {        0x3C, 0x66, 0x06, 0x3C, 0x60, 0x66, 0x3C, 0x00 }, /* S */
-        {        0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00 }, /* T */
-        {        0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00 }, /* U */
-        {        0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x00 }, /* V */
-        {        0xC6, 0xC6, 0xD6, 0xD6, 0xFE, 0xEE, 0xC6, 0x00 }, /* W */
-        {        0x66, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x66, 0x00 }, /* X */
-        {        0x66, 0x66, 0x66, 0x3C, 0x18, 0x18, 0x18, 0x00 }, /* Y */
-        {        0x7E, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x7E, 0x00 }, /* Z */
-        {        0x3E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x3E, 0x00 }, /* [ */
-        {        0x00, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x00, 0x00 }, /* \ */
-        {        0x7C, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7C, 0x00 }, /* ] */ 
-        {        0x3C, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* ^ */
-        {        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF }, /* _ */
-        {        0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* ` */
-        {        0x00, 0x00, 0x3C, 0x60, 0x7C, 0x66, 0x7C, 0x00 }, /* a */
-        {        0x06, 0x06, 0x3E, 0x66, 0x66, 0x66, 0x3E, 0x00 }, /* b */
-        {        0x00, 0x00, 0x3C, 0x66, 0x06, 0x66, 0x3C, 0x00 }, /* c */
-        {        0x60, 0x60, 0x7C, 0x66, 0x66, 0x66, 0x7C, 0x00 }, /* d */
-        {        0x00, 0x00, 0x3C, 0x66, 0x7E, 0x06, 0x3C, 0x00 }, /* e */
-        {        0x38, 0x0C, 0x0C, 0x3E, 0x0C, 0x0C, 0x0C, 0x00 }, /* f */
-        {        0x00, 0x00, 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x3C }, /* g */
-        {        0x06, 0x06, 0x3E, 0x66, 0x66, 0x66, 0x66, 0x00 }, /* h */
-        {        0x18, 0x00, 0x1C, 0x18, 0x18, 0x18, 0x3C, 0x00 }, /* i */
-        {        0x18, 0x00, 0x1C, 0x18, 0x18, 0x18, 0x18, 0x0E }, /* j */
-        {        0x06, 0x06, 0x66, 0x36, 0x1E, 0x36, 0x66, 0x00 }, /* k */
-        {        0x1C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00 }, /* l */
-        {        0x00, 0x00, 0x6C, 0xFE, 0xD6, 0xD6, 0xC6, 0x00 }, /* m */
-        {        0x00, 0x00, 0x3E, 0x66, 0x66, 0x66, 0x66, 0x00 }, /* n */
-        {        0x00, 0x00, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00 }, /* o */
-        {        0x00, 0x00, 0x3E, 0x66, 0x66, 0x3E, 0x06, 0x06 }, /* p */
-        {        0x00, 0x00, 0x7C, 0x66, 0x66, 0x7C, 0x60, 0xE0 }, /* q */
-        {        0x00, 0x00, 0x36, 0x6E, 0x06, 0x06, 0x06, 0x00 }, /* r */
-        {        0x00, 0x00, 0x7C, 0x06, 0x3C, 0x60, 0x3E, 0x00 }, /* s */
-        {        0x0C, 0x0C, 0x3E, 0x0C, 0x0C, 0x0C, 0x38, 0x00 }, /* t */
-        {        0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x7C, 0x00 }, /* u */
-        {        0x00, 0x00, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x00 }, /* v */
-        {        0x00, 0x00, 0xC6, 0xD6, 0xD6, 0xFE, 0x6C, 0x00 }, /* w */
-        {        0x00, 0x00, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x00 }, /* x */
-        {        0x00, 0x00, 0x66, 0x66, 0x66, 0x7C, 0x60, 0x3C }, /* y */
-        {        0x00, 0x00, 0x7E, 0x30, 0x18, 0x0C, 0x7E, 0x00 }, /* z */
-        {        0x30, 0x18, 0x18, 0x0E, 0x18, 0x18, 0x30, 0x00 }, /* { */
-        {        0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00 }, /* | */
-        {        0x0C, 0x18, 0x18, 0x70, 0x18, 0x18, 0x0C, 0x00 }, /* } */
-        {        0x8C, 0xD6, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00 }  /* ~ */
-};
-
-// Physical screen info
-int lcd_depth;  // Should be 1, 2, or 4
-int lcd_width  = 320;
-int lcd_height = 240;
-cyg_uint8 *lcd_base = 0xC0000000;
-
-// Virtual screen info
-int curX = 0;  // Last used position
-int curY = 0;
-int width = 320 / FONT_WIDTH;
-int height = 240 / FONT_HEIGHT;
-int fg = 0x0F;
-int bg = 0x00;
+#include "lcd_support.c"
 
 // FUNCTIONS
 
@@ -178,136 +61,6 @@ cyg_test_exit(void)
     while (TRUE) ;
 }
 
-void
-lcd_on(int depth)
-{
-    cyg_int32 ctl_word;
-    lcd_depth = depth;
-    switch (depth) {
-    case 1:
-        *(volatile cyg_int32 *)PALLSW = 0xF0F0F0F0;
-        *(volatile cyg_int32 *)PALMSW = 0xF0F0F0F0;
-        ctl_word = 0;
-        break;
-    case 2:
-        *(volatile cyg_int32 *)PALLSW = 0xFA50FA50;
-        *(volatile cyg_int32 *)PALMSW = 0xFA50FA50;
-        ctl_word = LCDCON_GSEN;
-        break;
-    case 4:
-        *(volatile cyg_int32 *)PALLSW = 0x76543210;
-        *(volatile cyg_int32 *)PALMSW = 0xFEDCBA98;
-        ctl_word = LCDCON_GSEN | LCDCON_GSMD;
-        break;
-    }
-    // Video buffer size
-    ctl_word |= ((lcd_width * lcd_height * lcd_depth) / 128 - 1) << LCDCON_BUFSIZ_S;
-    // Line length
-    ctl_word |= ((lcd_width / 16) - 1) << LCDCON_LINE_LENGTH_S;
-    // Pixel prescale
-    ctl_word |= ((526628 / (lcd_height * lcd_width)) - 1) << LCDCON_PIX_PRESCALE_S;
-    // AC frequency bias
-    ctl_word |= 0 << LCDCON_AC_PRESCALE_S;
-    *(volatile cyg_int32 *)LCDCON = ctl_word;
-    diag_printf("Depth: %d, ctl: %x\n", depth, ctl_word);
-
-    *(volatile cyg_uint8 *)PDDR    = 0x20;  // Enable video
-    *(volatile cyg_uint8 *)PEDDR   = 0x0F;  // Register E data direction
-    *(volatile cyg_uint8 *)PEDR   |= 0x01;  // Enable PE2
-
-    *(volatile cyg_uint32 *)PMPCON = 0x500; // Enable DC-to-DC pump #1
-
-    *(volatile cyg_uint8 *)FRBADDR = 0x0C;  // Highest order nibble of LCD frame address
- 
-    *(volatile cyg_uint32 *)SYSCON1 |= SYSCON1_LCDEN;
-}
-
-// Clear screen
-static void
-lcd_clear(void)
-{
-    cyg_int8 *ptr = lcd_base;
-    int i;
-    for (i = 0;  i < (lcd_width*lcd_height*lcd_depth)/8;  i++) {
-        *ptr++ = 0;
-    }
-    curX = 0;  curY = 0;
-}
-
-// Render a character at position (X,Y) with current background/foreground
-static void
-lcd_drawc(cyg_int8 c, int x, int y)
-{
-    // Note: this only works for fonts which are a multiple of 8 bits wide!
-    cyg_uint8 *bufptr, bits;
-    int l, p;
-    switch (lcd_depth) {
-    case 1:
-        bufptr = lcd_base + ((y * FONT_HEIGHT * (lcd_width*lcd_depth)) + (x * FONT_WIDTH)) / 8;
-        for (l = 0;  l < FONT_HEIGHT;  l++) {
-            *bufptr = font_table[c][l];
-            bufptr += (lcd_width*lcd_depth)/8;
-        }
-        break;
-    case 2:
-        diag_printf("Depth 2 not implemented\n");
-        break;
-    case 4:
-        bufptr = lcd_base + ((y * FONT_HEIGHT * (lcd_width*lcd_depth)) + (x * FONT_WIDTH * lcd_depth)) / 8;
-        for (l = 0;  l < FONT_HEIGHT;  l++) {
-            bits = font_table[c][l];            
-            for (p = 0;  p < 8;  p += 2) {
-//                switch ((bits>>6) & 0x03) {
-                switch (bits & 0x03) {
-                case 0:
-                    *bufptr++ = (bg << 4) | bg;
-                    break;
-                case 1:
-                    *bufptr++ = (bg << 4) | fg;
-                    break;
-                case 2:
-                    *bufptr++ = (fg << 4) | bg;
-                    break;
-                case 3:
-                    *bufptr++ = (fg << 4) | fg;
-                    break;
-                }
-                bits >>= 2;
-//                bits <<= 2;
-            }
-            bufptr += (lcd_width*lcd_depth)/8 - 4;;
-        }
-        break;
-    }
-}
-
-static void
-lcd_putc(cyg_int8 c)
-{
-    switch (c) {
-    case '\r':
-        curX = 0;
-        break;
-    case '\n':
-        curY++;
-        break;
-    case '\b':
-        curX--;
-        if (curX < 0) {
-            curY--;
-            if (curY < 0) curY = 0;
-            curX = width-1;
-        }
-    default:
-        lcd_drawc(c, curX, curY);
-        curX++;
-        if (curX == width) {
-            curY++;
-            curX = 0;
-        }
-    } 
-}
-
 static void
 lcd_test(int depth)
 {
@@ -332,11 +85,11 @@ lcd_test(int depth)
 }
 
 static void
-lcd_exercise(void)
+lcd_exercise(cyg_addrword_t p)
 {
     diag_printf("LCD test here!\n");
 
-    lcd_test(1);
+//    lcd_test(1);
 //    lcd_test(2);
     lcd_test(4);
 
@@ -350,7 +103,7 @@ cyg_start( void )
     // Create a main thread, so we can run the scheduler and have time 'pass'
     cyg_thread_create(10,                // Priority - just a number
                       lcd_exercise,      // entry
-                      1,                 // index
+                      0,                 // entry parameter
                       "LCD_test_thread", // Name
                       &stack[0],         // Stack
                       STACK_SIZE,        // Size