📄 elcd.c
字号:
//*******************************************************************************************/
// ELCD.C
// COMMIT.INC
//AUTHOR: HANTSZHANG
//DESCRIPTION: define the function for LCD test.
//Revision :
//Note: Present i donot want to realize the charac
//NOTE: setupbussize and loadimg and lcdblink will not be finished . for i do not use them present.
//********************************************************************************************/
#include "ELCD.h"
#include "UART_IrDA.h"
#include "global_types.h"
#include "config.h"
extern void Setgroup32bit(int, int, int, int );
//********************************************************************************************/
//Functionname:int packcommand( int );
//description :re-package the command arry.
//parameter :original command data.
//********************************************************************************************/
unsigned int packcommand( unsigned int commandData)
{
int realCommand = 0;
int elcdCommandTemp0 = 0;
int elcdCommandTemp1 = 0;
int elcdCommandTemp2 = 0;
int elcdCommandTemp3 = 0;
elcdCommandTemp1 = (commandData<<1)&(0x0000ffff>>7); //get the lsb 8 bit command.
elcdCommandTemp2 = (commandData<<2)&(0x000000fF<<10 ); //get the msb 8bit command.051101 FROM FC TO FF.
realCommand = elcdCommandTemp1 + elcdCommandTemp2;
return realCommand;
}
//********************************************************************************************/
//Function Name :void setdncstatus( int );
//Description :setup the DNC signal. DNC = 0 for set T51999register index .and read LCD STATUS.
// DNC=1 for T51999 data or instrcution .
//PARAMETER :dataComand 0: for index. 1, for data.
//********************************************************************************************/
void setdncstatus( int dataComand )
{
Setgroup32bit( ELCD_CTL_REG2, 2, 1, dataComand ); //depend on the dataCommand to set the DNC.
}
//********************************************************************************************/
//FUNCTION NAME:void delay( int )
//DESCRIPTION: delay unit is ms.
//PARAMETER : how much time.
//********************************************************************************************/
void elcddelay( int elcdDelayTime )
{
while( (elcdDelayTime-- ) );
}
/********************************************************************************************/
//FUNCTION NAME: void SetupELCD( int )
//DESCRIPTION : SETUP elcd module register for normal work.
//Parameter : int nCs indicate which cs is selected.
/********************************************************************************************/
void SetupELCD( int nCs )
{
Setgroup32bit( ELCD_CONTROL_REG1, 0, 1, 1); // reset the fifo softreset.
elcddelay( 1000 );
Setgroup32bit( ELCD_CONTROL_REG1, 0, 1, 0); // release software reset return to normal mode.
if( nCs == 0 ){
Setgroup32bit( ELCD_CTL_REG2, 0, 1,1 ); // when software configure the ELCD module
// software must set the CS signal to high.
} // this function i will think if the software need them.
else {
Setgroup32bit( ELCD_CTL_REG2, 1, 1, 1 );
}
Setgroup32bit( ELCD_CONTROL_REG1, 2, 1, 1 ); //8086 mode.
// Setgroup32bit( ELCD_CONTROL_REG1, 3, 1, 0 ); //disable LCD_DMA WAKEUP.
Setgroup32bit( ELCD_DMAIT_REG , 0, 1, 1 );//disable the LCD-DMA.
Setgroup32bit( ELCD_CTL_REG2 , 14, 1, 1 ); // disable the swap.
SetupBusSize( MAINBUSSIZE ); ; //setup the main lcd bus size is 18bit.
Setgroup32bit( ELCD_ONOFFTIME_REG, 26, 6, 3 ); //setup the fclk DIV by 16.
Setgroup32bit( ELCD_ONOFFTIME_REG, 24, 1, 0 ); //set the write on polarity is low pluse.
Setgroup32bit( ELCD_ONOFFTIME_REG, 23, 1, 1 ); //set the lacth edge is rising.
Setgroup32bit( ELCD_ONOFFTIME_REG, 0, 4, 3 ); //set the one write on duration is two elcd fclk cycles
Setgroup32bit( ELCD_ONOFFTIME_REG, 6, 4, 3 ); //set the one write off duration is two elcd flck cycles.
Setgroup32bit( ELCD_COUNTERTX_REG, 0, 20, (240*320+40) ); // setup the tx number
}
/********************************************************************************************/
//Function Name: void InitOptrexLcd( void )
//Description : Init the external LCD module of OPTREX T51999. 320*240.
//PARAMETER : NO.
//REVISION : 0.1
/********************************************************************************************/
void InitOptrexLcd( int elcdCs )
{
Setgroup32bit( ELCD_CTL_REG2, 0, 1, 0 ); //SET NCS0 TO LOW
setdncstatus( 0 ); //SET DNC TO LOW.
Writecommand(packcommand( 0x0000 ), nCs0 ); //set the R00H index is 0x0001
setdncstatus( 1 );
Writedata(packcommand( 0x0001 ), nCs0 ); //set the R001 start the osc.
elcddelay( 100000 ); //delay 10ms.
setdncstatus( 0 );
Writecommand(packcommand( 0x0011 ), nCs0 ); // send reg index R11 : 2003h.
setdncstatus( 1 );
Writedata(packcommand( 0x2003 ), nCs0 );
setdncstatus( 0 );
Writecommand(packcommand( 0x0014 ), nCs0 ); //SET R14 :0X1919
setdncstatus( 1 );
Writedata(packcommand( 0x1919 ), nCs0 );
setdncstatus( 0 );
Writecommand(packcommand( 0x0010 ), nCs0 ); //SET R10:0X0B20 POWER SUPPLY SETTING 2.
setdncstatus( 1 );
Writedata(packcommand( 0x0Be0 ), nCs0 );
setdncstatus( 0 );
Writecommand(packcommand( 0x0013 ), nCs0 ); //SET R13 :0X0040 POWER ON.
setdncstatus( 1 );
Writedata(packcommand( 0x0040 ), nCs0 );
elcddelay( 500000 ); //DELAY 50MS.
setdncstatus( 0 );
Writecommand(packcommand( 0x0013 ), nCs0 ); //SET R13 :0X0060 POWER ON. PON1 =1.
setdncstatus( 1 );
Writedata(packcommand( 0x0060 ), nCs0 );
elcddelay( 500000 );
setdncstatus( 0 );
Writecommand(packcommand( 0x0013 ), nCs0 ); //SET R13 :0X0060 POWER ON. PON1 =1.
setdncstatus( 1 );
Writedata(packcommand( 0x0070 ), nCs0 ); //set r13: 70h pon =1, pon1 =1, aon = 1.
elcddelay( 150000 ); //delay 150ms.
setdncstatus( 0 );
Writecommand(packcommand( 0x0001 ), nCs0 ); //SET R01 :0X0127 ss=1, NL = 10111
setdncstatus( 1 );
Writedata(packcommand( 0x0127 ), nCs0 ); //1103 0X0127 TO 0X0027
setdncstatus( 0 );
Writecommand(packcommand( 0x0002 ), nCs0 ); //SET R02 :fld = 01, B/C=1. EOR = 1
setdncstatus( 1 );
Writedata(packcommand( 0x0700 ), nCs0 );
setdncstatus( 0 );
Writecommand(packcommand( 0x0003 ), nCs0 ); //SET R03 :0X1030 BGR = 1, I/D = 1
setdncstatus( 1 );
Writedata(packcommand( 0x1030 ), nCs0 );
setdncstatus( 0 );
Writecommand(packcommand( 0x0008 ), nCs0 ); //SET R08 :0X0808 FP = 1000H, BP = 1000H
setdncstatus( 1 );
Writedata(packcommand( 0x0808 ), nCs0 );
setdncstatus( 0 );
Writecommand(packcommand( 0x000b ), nCs0 ); //SET R000b :0X5c21 NO.01, SDT.01, VCL.REG .110
setdncstatus( 1 );
Writedata(packcommand( 0x5601 ), nCs0 ); //DCR.EX .1, RTN .01 /HANTS
setdncstatus( 0 );
Writecommand(packcommand( 0x000C ), nCs0 ); //SET R0C :0X0000 RM.0, DM.0, RIM.0
setdncstatus( 1 );
Writedata(packcommand( 0x0000 ), nCs0 );
setdncstatus( 0 );
Writecommand(packcommand( 0x0040 ), nCs0 ); //SET R40 :0X0000
setdncstatus( 1 );
Writedata(packcommand( 0x0000 ), nCs0 );
setdncstatus( 0 );
Writecommand(packcommand( 0x0041 ), nCs0 ); //SET R41 :0X0000
setdncstatus( 1 );
Writedata(packcommand( 0x0000 ), nCs0 );
setdncstatus( 0 );
Writecommand(packcommand( 0x0042 ), nCs0 ); //SET R42 :0X0000
setdncstatus( 1 );
Writedata(packcommand( 0x013F ), nCs0 ); //SE = 100111111
setdncstatus( 0 );
Writecommand(packcommand( 0x0043 ), nCs0 ); //SET R43 :0000
setdncstatus( 1 );
Writedata(packcommand( 0x0000 ), nCs0 );
setdncstatus( 0 );
Writecommand(packcommand( 0x0046 ), nCs0 ); //SET R46 :0X0000
setdncstatus( 1 );
Writedata(packcommand( 0xef00 ), nCs0 ); //SET HEA=111011111
setdncstatus( 0 );
Writecommand(packcommand( 0x0047 ), nCs0 ); //SET R47 :0X013f
setdncstatus( 1 );
Writedata(packcommand( 0x013f ), nCs0 ); //SET VEA = 10011111
setdncstatus( 0 );
Writecommand(packcommand( 0x0048 ), nCs0 ); //SET R48 :0X0000
setdncstatus( 1 );
Writedata(packcommand( 0x0000 ), nCs0 );
//FOLLOWING IS GAMA CONTROL.
setdncstatus( 0 );
Writecommand(packcommand( 0x0030 ), nCs0 ); //SET R30 :0X0000
setdncstatus( 1 );
Writedata(packcommand( 0x0000 ), nCs0 );
setdncstatus( 0 );
Writecommand(packcommand( 0x0031 ), nCs0 ); //SET R31 :0X0507
setdncstatus( 1 );
Writedata(packcommand( 0x0507 ), nCs0 );
setdncstatus( 0 );
Writecommand(packcommand( 0x0032 ), nCs0 ); //SET R32 :0305h
setdncstatus( 1 );
Writedata(packcommand( 0x0305 ), nCs0 );
setdncstatus( 0 );
Writecommand(packcommand( 0x0033 ), nCs0 ); //SET R33 :0X0000
setdncstatus( 1 );
Writedata(packcommand( 0x0000 ), nCs0 );
setdncstatus( 0 );
Writecommand(packcommand( 0x0034 ), nCs0 ); //SET R34 :0204h
setdncstatus( 1 );
Writedata(packcommand( 0x0204 ), nCs0 );
setdncstatus( 0 );
Writecommand(packcommand( 0x0035 ), nCs0 ); //SET R35 :0X0002
setdncstatus( 1 );
Writedata(packcommand( 0x0002 ), nCs0 );
setdncstatus( 0 );
Writecommand(packcommand( 0x0036 ), nCs0 ); //SET R36 :0707h
setdncstatus( 1 );
Writedata(packcommand( 0x0707 ), nCs0 );
setdncstatus( 0 );
Writecommand(packcommand( 0x0037 ), nCs0 ); //SET R37 :0X0000
setdncstatus( 1 );
Writedata(packcommand( 0x0000 ), nCs0 );
setdncstatus( 0 );
Writecommand(packcommand( 0x0038 ), nCs0 ); //SET R38 :1408h
setdncstatus( 1 );
Writedata(packcommand( 0x1408 ), nCs0 );
setdncstatus( 0 );
Writecommand(packcommand( 0x0039 ), nCs0 ); //SET R39 :1703h
setdncstatus( 1 );
Writedata(packcommand( 0x1703 ), nCs0 );
/*
setdncstatus( 0 );
Writecommand(packcommand( 0x0007 ), nCs0 ); //SET R07 :0011h GON=1, D=01
setdncstatus( 1 );
Writedata(packcommand( 0x0011 ), nCs0 );
elcddelay(400000 ); //delay 40ms.
setdncstatus( 0 );
Writecommand(packcommand( 0x0007 ), nCs0 ); //SET R07 :0X0000
setdncstatus( 1 );
Writedata(packcommand( 0x0017 ), nCs0 ); //GON=1, REV = 1, D = 11
//051102
setdncstatus( 0 );
Writecommand(packcommand( 0x0020 ), nCs0 ); //SET R20 :0X0000
setdncstatus( 1 );
Writedata(packcommand( 0x0000 ), nCs0 );
setdncstatus( 0 );
Writecommand(packcommand( 0x0021 ), nCs0 ); //SET R21 :0X0000
setdncstatus( 1 );
Writedata(packcommand( 0x0000 ), nCs0 );
*/
//051102
// END
while(!(*(int*)(ELCD_STATUS_REG)&(0x00000400))); //configure if idle.
// Setgroup32bit( ELCD_CTL_REG2, 0, 1, 1 );
// setdncstatus( 1 );
}
/********************************************************************************************/
//Function Name: void Writedata( int, int )
//Description : Write data to LCD buffer. operate the DNC and RNW pin.
//Parameter : 1. ncs 2. Pixel data.
//Revision : 0.1
/********************************************************************************************/
void Writedata( int elcdPixelData, int nCs )
{
// Setgroup32bit( ELCD_COUNTERTX_REG, 0, 20, 240*320 );
if( nCs == 0 ){
*(unsigned int *)( ELCD_DATATX_REG ) = elcdPixelData;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -