#define __KERNEL__ #include "/root/uClinux-dist-h8300/linux-2.4.x/include/asm-h8300/regs306x.h" #include #include "lcd.h" #include "reg.h" #define BASE_ADR 0xa00000 #define CMD0 (BASE_ADR+2) #define CMD1 (BASE_ADR+4) #define DATA0 (BASE_ADR+3) #define DATA1 (BASE_ADR+5) #define s ((((((((0 #define x )*2+1 #define X )*2+1 #define _ )*2 static const char PatternDataA[] = { s _ _ _ X X _ _ _ , s _ _ X _ _ X _ _ , s _ X _ _ _ _ X _ , s _ X X X X X X _ , s _ X _ _ _ _ X _ , s _ X _ _ _ _ X _ , s _ X _ _ _ _ X _ , s _ X _ _ _ _ X _ , } ; static const char PatternDataB[] = { s _ X X X X _ _ _ , s _ X _ _ _ X _ _ , s _ X _ _ _ _ X _ , s _ X X X X X _ _ , s _ X _ _ _ _ X _ , s _ X _ _ _ _ X _ , s _ X _ _ _ _ X _ , s _ X x x x x _ _ , } ; void WritePattern( char* Data ) ; static void StartPwm( void ) { SetReg8( CSCR, ReadReg8( CSCR ) | 0xff ); SetReg8( TCR0 ,0x43 ) ; SetReg8( TIOR0, 0x33 ) ; SetReg16( GRB0H, 3125/4 ) ; SetReg16( GRA0H, 3125/4 ) ; SetReg8( TSTR, 1 ) ; } void WriteLcdCmd( char cs, unsigned char data ) { switch( cs ) { case 0 : SetReg8( CMD0,data); break ; case 1 : SetReg8( CMD1,data); break ; } } void WriteLcdData( char cs, unsigned char data ) { switch( cs ) { case 0 : SetReg8(DATA0,data ) ; break ; case 1 : SetReg8(DATA1, data ); break ; } } void InitLcd( void ) { StartPwm(); usleep( 1000*100 ) ;/* ハードリセット終了待ち */ WriteLcdCmd( LEFT, 0xe2 ); /* リセット */ WriteLcdCmd( RIGHT, 0xe2 ); usleep( 1000*100 ) ;/* リセット終了待ち */ WriteLcdCmd( LEFT, 0xa9 ); /* DUTY=1/32 */ WriteLcdCmd( RIGHT, 0xa9 ); WriteLcdCmd( LEFT, 0xa0 ); /* ADC=右回り */ WriteLcdCmd( RIGHT, 0xa0 ); WriteLcdCmd( LEFT, 0xa4 ); /* 通常表示 */ WriteLcdCmd( RIGHT, 0xa4 ); WriteLcdCmd( LEFT, 0xb8 ); /* ページ0 */ WriteLcdCmd( RIGHT, 0xb8 ); WriteLcdCmd( LEFT, 0xaf ); /* ここでランダムパターン表示 */ WriteLcdCmd( RIGHT, 0xaf ); } void ChangeLcdPage( char cs, char page ) { page &= 0x3; WriteLcdCmd( cs, 0xb8 + page ); } void SetLcdColumn( char cs, char col ) { col &= 0x7f; if( col > 79 ){ col = 79; } WriteLcdCmd( cs, col ); } void Bar( int a ) { int i ; ChangeLcdPage(LEFT, 0 ) ; SetLcdColumn(LEFT, 0 ) ; for( i = 0 ; i < a ; i ++ ) { WriteLcdData( LEFT, 0x3 ) ; } for( i = a ; i < 62 ; i ++ ) { WriteLcdData( LEFT, 0x0 ) ; } } void ClearLcd( void ) { char i, j; for( i = 0; i < 4; i++ ){ ChangeLcdPage( LEFT, i ); SetLcdColumn( LEFT, 0 ); for( j = 0; j < 62; j++ ){ WriteLcdData( LEFT, 0 ); } } for( i = 0; i < 4; i++ ){ ChangeLcdPage( RIGHT, i ); SetLcdColumn( RIGHT, 0 ); for( j = 0; j < 62; j++ ){ WriteLcdData( RIGHT, 0 ); } } ChangeLcdPage( LEFT, 0 ); SetLcdColumn( LEFT, 0 ); } void FillLcd( char Data ) { char i, j; for( i = 0; i < 4; i++ ){ ChangeLcdPage( LEFT, i ); SetLcdColumn( LEFT, 0 ); for( j = 0; j < 62*3; j++ ){ WriteLcdData( LEFT, Data ++ ); } } for( i = 0; i < 4; i++ ){ ChangeLcdPage( RIGHT, i ); SetLcdColumn( RIGHT, 0 ); for( j = 0; j < 62*3; j++ ){ WriteLcdData( RIGHT, Data ++ ); } } //Sleep( 200 ) ; ChangeLcdPage( LEFT, 0 ); SetLcdColumn( LEFT, 0 ); } void PutPattern( int PatternNo ) { switch( PatternNo ) { case 0 : WritePattern( PatternDataA ) ; break ; case 1 : WritePattern( PatternDataA ) ; break ; } } void WritePattern( char* Data ) { for( i = 0 ; i < 8 ; i ++ ) { WriteLcdData( RIGHT, *Data ); Data ++ ; } }