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

📄 lcd.c

📁 os arm os arm os arm os arm os arm os arm os arm os arm os arm os arm os arm os arm os arm os arm
💻 C
字号:
/* *	ApOS (Another Project software for s3c2410) *	 *	This program is free software; you can redistribute it and/or modify *	it under the terms of the GNU General Public License version 2 as *	published by the Free Software Foundation. *			 *						Copyright caiyuqing * */#include "../include/s3c2410/s3c2410.h"#include "../include/s3c2410/lcd.h"extern con_bkcolor;struct lcd_control_obj lcd_control_obj;void lcd_scr_init(){	clear_screen(con_bkcolor);		*lcd_control_obj.saddr1=(((unsigned int)(lcd_control_obj.framebuffer)>>22)<<21)|M5D(((unsigned int)lcd_control_obj.framebuffer)>>1);	*lcd_control_obj.saddr2=M5D(((unsigned int)(lcd_control_obj.framebuffer)+(SCR_XSIZE_TFT*LCD_YSIZE_TFT*2))>>1);	}void lcd_config(){	*lcd_control_obj.con1=(CLKVAL_TFT<<8)|(MMODE_EACH_FRAME<<7)|(TFT_LCD_PANEL<<5)|(MODE_16_BPP_TFT<<1)|ENVID;	*lcd_control_obj.con2=(VBPD<<24)|(LINEVAL_TFT<<14)|(VFPD<<6)|(VSPW);	*lcd_control_obj.con3=(HBPD<<19)|(HOZVAL_TFT<<8)|(HFPD);	*lcd_control_obj.con4=(MVAL<<8)|(HSPW);	*lcd_control_obj.con5=(0<<11)|(1<<9)|(1<<8);		*lcd_control_obj.saddr1=(((unsigned int)(lcd_control_obj.framebuffer)>>22)<<21)|M5D(((unsigned int)lcd_control_obj.framebuffer)>>1);	*lcd_control_obj.saddr2=M5D(((unsigned int)(lcd_control_obj.framebuffer)+(SCR_XSIZE_TFT*LCD_YSIZE_TFT*PIXEL_SIZE))>>1);	*lcd_control_obj.saddr3=(((SCR_XSIZE_TFT-LCD_XSIZE_TFT)/1)<<11)|(LCD_XSIZE_TFT/1);		*lcd_control_obj.intmsk|=(FIWSEL<<2)|(INT_FRSYN<<1)|(INT_FICNT);	*lcd_control_obj.lpcsel&=DISABLE_LPC3600;	*lcd_control_obj.tpal=DISABLE_TEMP_PALETTE;}void lcd_power_on(){	*(lcd_control_obj.con5)|=(LCD_POWER_ON<<3);	// Enable power	*(lcd_control_obj.con5)&=(~(INVLEND_INVERTED<<5));	// INVPWREN}void lcd_envid_on_off(int onoff){	if(onoff==1)		*lcd_control_obj.con1|=1;			// ENVID=ON	else		*lcd_control_obj.con1&=0x3fffe;		// ENVID Off}void lcd_on(){	lcd_config();	lcd_power_on();	lcd_envid_on_off(1);	clear_screen(RGB(0,0,0));}void set_pixel(unsigned int x,unsigned int y,unsigned short color){	(lcd_control_obj.framebuffer)[(y)][(x)/2]=( (lcd_control_obj.framebuffer)[(y)][x/2]        & ~(0xffff0000>>((x)%2)*16) ) | ( (color&0x0000ffff)<<((2-1-((x)%2))*16));}void clear_screen(unsigned short _color){	unsigned int tmp=_color<<16|_color;	unsigned int buf_start	=LCDFRAMEBUFFER;	unsigned int buf_end	=LCDFRAMEBUFFER+640*480*4;	asm volatile(		"ldr r0,%1 \n\t"		"ldr r1,%2 \n\t"		"ldr r2,%0 \n\t"		"1: str r2,[r0],#4 \n\t"		"cmp r0,r1 \n\t"		"bne 	1b \n\t"		:		:"m"(tmp),"m"(buf_start),"m"(buf_end)		:"r0","r1","r2"	);}void lcd_control_obj_init(struct lcd_control_obj *lco){	lco->con1	=&rLCDCON1;	lco->con2	=&rLCDCON2;	lco->con3	=&rLCDCON3;	lco->con4	=&rLCDCON4;	lco->con5	=&rLCDCON5;	lco->saddr1	=&rLCDSADDR1;	lco->saddr2	=&rLCDSADDR2;	lco->saddr3	=&rLCDSADDR3;	lco->redlut	=&rREDLUT;	lco->greedlut	=&rGREENLUT;	lco->bluelut	=&rBLUELUT;	lco->dithmode	=&rDITHMODE;	lco->tpal	=&rTPAL;	lco->intpnd	=&rLCDINTPND;	lco->srcpnd	=&rLCDSRCPND;	lco->intmsk	=&rLCDINTMSK;	lco->lpcsel	=&rLPCSEL;	lco->framebuffer=(unsigned int (*)[SCR_XSIZE_TFT/2])LCDFRAMEBUFFER;	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -