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

📄 lcd.c

📁 arm7,44b0芯片的blob程序,适用于学嵌入式linux的新手.
💻 C
字号:
/********************************************************************** * lcd.c * * AUTOR:	SELETZ * * Generic lcd framework * * Copyright (C) 2001 Stefan Eletzhofer <stefan.eletzhofer@www.eletztrick.net> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA *//********************************************************************** * includes */#ifdef HAVE_CONFIG_H# include <blob/config.h>#endif#include <blob/types.h>#include <blob/errno.h>#include <blob/util.h>#include <blob/command.h>#include <blob/serial.h>#include <blob/sa1100.h>#include <blob/lcd.h>/********************************************************************** * defines */#define WEAK_SYM __attribute__ (( weak ))#define MEM(adr)	(*((u32 *)adr))#define SET(reg,bit)	((reg) |= (1<<(bit)))#define CLR(reg,bit)	((reg) &= ~(1<<(bit)))#define LCD_DEBUG 1#define OUTHEX( val ) SerialOutputString( #val"=0x" ); \	SerialOutputHex( val ); \	serial_write( '\n' );/********************************************************************** * program globals *//********************************************************************** * module globals */u16 *lcd_palette = (u16*)(LCD_PALETTE_DMA_ADR);u32 *lcd_vram = (u32*)(LCD_VIDEORAM_START);/********************************************************************** * Prototypes */void lcd_palette_set( int no, int val );/**********************************************************************//**********************************************************************//**********************************************************************//********************************************************************** * Do whatever necessary to power up lcd display */int WEAK_SYM lcd_power_up( void ){	return 0;}int WEAK_SYM lcd_power_down( void ){	return 0;}int WEAK_SYM lcd_gpio_setup( void ){	GPDR |= 0x3FC;	GAFR |= 0x3FC;	return 0;}int WEAK_SYM lcd_controller_setup( void ){	lcd_palette[0] &= 0xcfff;	lcd_palette[0] |= 2<<16;	// 8 bpp	/* Sequence from 11.7.10 */	LCCR3 = LCD_LCCR3;	LCCR2 = LCD_LCCR2;	LCCR1 = LCD_LCCR1;	LCCR0 = LCD_LCCR0 & ~LCCR0_LEN;	DBAR1 = (u32)LCD_PALETTE_DMA_ADR;	DBAR2 = (u32)LCD_VIDEORAM_DMA_ADR;	return 0;}int WEAK_SYM lcd_controller_enable( void ){	LCCR0 |= LCCR0_LEN;	return 0;}int WEAK_SYM lcd_controller_disable( void ){	LCCR0 &= ~LCCR0_LEN;	return 0;}int WEAK_SYM lcd_backlight_on( void ){	return 0;}int WEAK_SYM lcd_backlight_off( void ){	return 0;}int WEAK_SYM lcd_palette_setup( void ){	int n;	for ( n = 0 ; n < 128 ; n++ ) {		lcd_palette_set(n, 0x1FFF );	}	for ( n = 128 ; n < 256 ; n++ ) {		lcd_palette_set(n, 0x1000 );	}	return 0;}int WEAK_SYM lcd_contrast( int value ){	return 0;}int WEAK_SYM lcd_brightness( int value ){	return 0;}/********************************************************************** * Statische Funktionen */static int lcd_test( int argc, char *argv[] ){	int ret = 0;	int x,y;	int c;#if LCD_DEBUG	OUTHEX( LCD_LCCR0 );	OUTHEX( LCD_LCCR1 );	OUTHEX( LCD_LCCR2 );	OUTHEX( LCD_LCCR3 );	OUTHEX( LCD_BPP );	OUTHEX( LCD_COLS );	OUTHEX( LCD_ROWS );	OUTHEX( LCD_PALETTE_ENTRIES );	OUTHEX( LCD_PALETTE_SIZE );	OUTHEX( LCD_RAM_BASE );	OUTHEX( LCD_VIDEORAM_SIZE );	OUTHEX( LCD_VIDEORAM_START );	OUTHEX( LCD_VIDEORAM_END );	OUTHEX( LCD_VIDEORAM_DMA_ADR );	OUTHEX( LCD_PALETTE_DMA_ADR );#endif	SerialOutputString( "LCD: power up ..." );	ret = lcd_power_up();	if ( ret != 0 )		return ret;	SerialOutputString( "done\n" );	SerialOutputString( "LCD: gpio setup ..." );	ret = lcd_gpio_setup();	if ( ret != 0 )		return ret;	SerialOutputString( "done\n" );	SerialOutputString( "LCD: controller setup ..." );	ret = lcd_controller_setup();	if ( ret != 0 )		return ret;	SerialOutputString( "done\n" );	SerialOutputString( "LCD: palette setup ..." );	ret = lcd_palette_setup();	if ( ret != 0 )		return ret;	SerialOutputString( "done\n" );	SerialOutputString( "LCD: controller enable ..." );	ret = lcd_controller_enable();	if ( ret != 0 )		return ret;	SerialOutputString( "done\n" );	SerialOutputString( "LCD: backlight on ..." );	ret = lcd_backlight_on();	if ( ret != 0 )		return ret;	SerialOutputString( "done\n" );	/* vertical lines */	SerialOutputString( "LCD: vertical lines test pattern ..." );	for ( y=0; y<LCD_ROWS; y++ ) {		for ( x=0; x<(LCD_COLS>>2); x++ ) {			if ( x%2 == 0 ) {				lcd_vram[y*(LCD_COLS>>2) + x ] = 0xffffffff;			} else {				lcd_vram[y*(LCD_COLS>>2) + x ] = 0x00000000;			}		}	}	SerialOutputString( "done\n" );	SerialOutputString( "LCD: press any key to proceed\n" );	c = serial_read();	SerialOutputString( "LCD: backlight off ..." );	ret = lcd_backlight_off();	if ( ret != 0 )		return ret;	SerialOutputString( "done\n" );	SerialOutputString( "LCD: controller disable ..." );	ret = lcd_controller_disable();	if ( ret != 0 )		return ret;	SerialOutputString( "done\n" );	SerialOutputString( "LCD: power down ..." );	ret = lcd_power_down();	if ( ret != 0 )		return ret;	SerialOutputString( "done\n" );	return 0;}static char testlcdhelp[] = "lcdtest\nTests lcd display\n";__commandlist(lcd_test, "lcdtest", testlcdhelp);void lcd_palette_set( int no, int val ){	if ( no < 0 || no > 255 )		return;	lcd_palette[ no ] = val;	return;}

⌨️ 快捷键说明

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