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

📄 lcd.c

📁 LUBBOCK板的BLOB
💻 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 + -