📄 s3c2410_lcd_vivi.c
字号:
/***** drivers/video/s3c2410fb.c: s3c2410 lcd controler driver in vivi** include/s3c2410_lcd.h**** v 1.00**** by: godiscrazy****** copyright: 2000 ~ 2007 goldway****s3c2410_lcd_init**lcd_test***/#include "config.h"#include "machine.h"#include "vivi.h"#include <s3c2410.h>#include <2410addr.h>#include <printk.h>#include <vivi_string.h>#include <s3c2410_lcd.h>unsigned long VideoPhysicalAddr = 0x31f00000;//0x30300000; /* * Clear memory (set to '0') */void clear_memory(unsigned long base, unsigned long len){ __asm__ volatile ( "mov r0, %0\n" /* store base address */ "mov r1, %1\n" /* store length */ "mov r2, #0\n" "mov r3, r2\n" "mov r4, r2\n" "mov r5, r2\n" "mov r6, r2\n" "mov r7, r2\n" "mov r8, r2\n" "mov r9, r2\n" " 1: stmia r0!, {r2-r9}\n" /* clear 32 (4 bytes * 8) bytes */ "subs r1, r1, #(8 * 4)\n" "bne 1b\n" : /* no outputs */ : "r" (base), "r" (len) : "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9" );}void set_memory(unsigned long base, unsigned long len, unsigned short sval){ unsigned long ofs = 0; unsigned long lval; lval = (sval<<16) | sval; while (len >= sizeof(unsigned long)) { *(unsigned long *)(base + ofs) = lval; len -= sizeof(unsigned long); ofs += sizeof(unsigned long); } /*//some dots else while (len > 0) { (*(char *)(base + ofs) = (char)sval; len -= sizeof(char); ofs += sizeof(char); }*/}////s3c2410 lcd (800*600*16) show bitmap logo//???void s3c2410_lcd_logo (void){}void lcd_test(void){ char c; unsigned long delay = 0x10; short sVideoNum = 0; while(1) { if(0 == sVideoNum) { static short r = 0; static short g = 64; static short b = 128; set_memory(VideoPhysicalAddr, 0x000ec000, RGB(r,g,b)); g++;g%=256; b++;b%=256; } else if(1 == sVideoNum) { static short r = 128; static short g = 64; static short b = 0; set_memory(VideoPhysicalAddr, 0x000ec000, RGB(r,g,b)); r++;r%=256; g++;g%=256; } c = awaitkey(delay, 0);// c = getc(); if ((c == 'u') || (c == 't') || (c == 0x1b) || (c == 0x1b)) break; else if((c == 's') || (c == 'S')) { sVideoNum++; sVideoNum %= 2; } }}////Init s3c2410 lcd (800*600*16)//void s3c2410_lcd_init (void){ unsigned long lcdsaddr1; unsigned long lcdsaddr2; unsigned long lcdsaddr3; rLCDCON1 = 0x00000179;//2 rLCDCON2 = 0x0195c041; rLCDCON3 = 0x002b1f01; rLCDCON4 = 0x00000003; rLCDCON5 = 0x00014b09; lcdsaddr1 = ((VideoPhysicalAddr>>22)<<21) | ((VideoPhysicalAddr>>1)&0x001fffff); lcdsaddr2 = ((VideoPhysicalAddr + 800*600*2)>>1)&0x001fffff; lcdsaddr3 = 0 | 800; rLCDSADDR1 = lcdsaddr1; rLCDSADDR2 = lcdsaddr2; rLCDSADDR3 = lcdsaddr3; rLPCSEL &= (~7); rTPAL = 0; set_memory(VideoPhysicalAddr, 0x000ec000, RGB(0,64,128));// clear_memory(0x30301000, 0x000ec000);// memset(0x30301000, 0xffffffff, 0x000ec000);// rLCDCON1 |= 0x00000001;//enable LCD #if 0 { printk("LCDCON1 = 0x%08lx\n", rLCDCON1); printk("LCDCON2 = 0x%08lx\n", rLCDCON2); printk("LCDCON3 = 0x%08lx\n", rLCDCON3); printk("LCDCON4 = 0x%08lx\n", rLCDCON4); printk("LCDCON5 = 0x%08lx\n", rLCDCON5); printk("LCDADDR1 = 0x%08lx\n", rLCDSADDR1); printk("LCDADDR2 = 0x%08lx\n", rLCDSADDR2); printk("LCDADDR3 = 0x%08lx\n", rLCDSADDR3); }#endif}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -