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

📄 elcd.c

📁 OMAP1030 处理器的ARM 侧硬件测试代码 OMAP1030 是TI的双核处理器
💻 C
📖 第 1 页 / 共 2 页
字号:
//*******************************************************************************************/
//                                     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 + -