⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 s3c2410_lcd_vivi.c

📁 s3c2410内部控制器在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 + -