📄 lcd.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 + -