main.c

来自「CS8955控制TV软件。用MCU做模拟电视的控制。」· C语言 代码 · 共 819 行 · 第 1/2 页

C
819
字号
/******************************************************************************\
     Project Version:   MTKCARDVD()
********************************************************************************
     Filename:          MAIN.c

     Author:            Alan chan

     Company:           CoreTek/ACT Company

********************************************************************************
     File Version:      1.01
     File Created:      July 2007

     Compiled Using:    keil uVision2 Version 2.23 

********************************************************************************
     Files Required:

********************************************************************************
     File Description:

********************************************************************************
     File History:

--------------------------------------------------------------------------------
  Date         Name           Description
--------------------------------------------------------------------------------
  Mar. 2007    Alan Chan    File Created
  
\******************************************************************************/
#define _MAIN_
#include "stdio.h"
#include "string.h"

#include "global.h"
#include "irkey.h"
#include "key.h"
#include "task.h"
#include "comdvd.h"
#include "e2prom.h"

#include "tv.h"

#define MCU_CS_CLK_SWAP
#ifdef MARTIN_TEST_CHANNNEL_NUMBER_SHOW
extern void vFreAFCAdjLoop(void);
#else
extern void vFreAFCAdj(void); //02Aug08
#endif
extern BYTE bTV_ADC_Read(void); //29Aug08
#ifdef MARTIN_TUNER_XF6A_PAL_M_NOT_SYNC
extern void vPalMBugAdj(void);   //martin 17Sep08 test
#endif
// Init variables
void vInitVar(void)
{
    BYTE  i;
	
    // timer 0 variables
    bTimer20ms = 0;
    wTimer0Count =100;

    // i2c variables
    vInitialI2C();

    // dvd com variables
    DvdRxIndex = DataOutValid = 0;
    for (i=0;i<(DVD_STATUS_BYTE-1);i++)
    {
        ShadowDvdInfo[i] = 0;   //otiose??? Invalid
    }
    for (i=0;i<CAR_INFO_BYTE;i++)
    {
        ShadowCarInfo[i] = 0; //otiose ?? ?Invalid
    }
   mSetDvdIr();//05Aug08

   #ifdef MARTIN_TEST_CHANNNEL_NUMBER_SHOW
     fgAFCADJState = FREQUENCY_ADJ_IDLE; //04Aug08
    #endif

     //   fgDVDTVCMD=0;
	// fgChangeTV=0;  
	
       #ifdef MARTIN_TUNER_XF6A_PAL_M_NOT_SYNC
	     bPalMAdj=1;  //17Sep08
       #endif
        fgTvVersion= TV_VERSION_VALUE;   //31Jul08
 	_bSearchPercent=fgTvVersion;	

    // IR variables init 	
    vInitIRVar();
}

// Init IO
void vInitIO()
{
#ifdef MARTIN_CS8955_IO_PORT  //martin 08May08 add
CS8955_PADMOD0=0x00;
CS8955_PADMOD1=0x00;
#ifdef SUPPORT_UART_PRINTF
CS8955_PADMOD2=0x00;//martin 16Oct08 0x34; 0x34; //0xa0;    P3.0,P3.1,P1.5,P1.6 Set " 0"  for  I/O PORT with printf variable
#else
CS8955_PADMOD2=0xa0; //0xE0;  Set " 1"  for (Master IIC) HSDA1 HSCL1,HSDA2,HSCL2, with download software
#endif
#endif


    P0 = 0xff;         
    P1 = 0xff;  //0xfe;   martin 08May08        //set P1.0(tv_pwr)=0
    P2 = 0xff;         //set P2.0(dvd_do)=1, P2.1(dvd_di)=1, P2.2(dvd_clk)=1 
    P3 = 0xff; //0xcf; martin 08May08         //set P3.2(IR)=1,P3.3(dvd_cs)=1, P3.4(tv_sda)=0, P3.5(tv_scl)=0;

  CS8955_OPTION |= 0x10;  //set master IIC==ISCL/ISDA(P3.4,P3.5);set master IIC frequency=100K(specification:PAGE 11)
  CS8955_INTEN=0xe0;   //enable TXBBUF RCBBUF INT 
  CS8955_SLVBADR=0x80|(0x4c>>1);   //Enable marter IIC B,Set master IIC B address
	
}

#ifndef MARTIN_MCU_NO_IR
// Init IR Interrupt
void vInitIRInt(void)
{
// IR Remote Control
   EX0 = 0;  //Disable INT 0 Interrupt
   IT0 =1;  // INT 0  high  level control valid, //Enable edge trigger
}
#endif

// Init Interrupt
void vInitAllInt(BIT enable)
{
   if (enable)
   {
 #ifndef MARTIN_DVD_COMM_NOT_SUPPORT_INT	
   CS8955_EINT1PEN = 0x80;
      // DVD com
      EX1 =0x01; // Enable INT1 interrupt
      IT1 =0x01; // / INT1  low / high control valid,
      #endif
      #ifndef MARTIN_MCU_NO_IR
       // IR Remote Contro Use the INT4 Pin and Function 	
       vInitIRInt();
     #endif
   }
   else 
   {
      // DVD com
      #if 1 //#ifndef MARTIN_DVD_COMM_NOT_SUPPORT_INT	
      EX1 = 0x00; // Disable INT1 interrupt
      IT1 = 0x00; // INT 1  low  level control valid,
      #endif
      #ifndef MARTIN_MCU_NO_IR  //martin 08May08
      // IR Remote Control  	
      EX0 = 0; // Disable INT0 interrupt
      #endif
   }
}

// Init Timer0
void vInitTimer()
{
    TMOD|=0x01;   // set timer0 in mode1  16 bit timer
    TH0=0xEC;   
    TL0=0x78;   

   TF0 = 0;  //clear timer0 flag
    PT0= 0;   // priority Timer0 level
    ET0=1;   // enable timer0 interrupt
    TR0=0;   // stop timer0
}   

#ifdef SUPPORT_UART_PRINTF  //26Aug08
void DRS232LogS(char *pcStr)
{
BYTE _bTNum;
unsigned char _pbTBuf[30];

     CS8955_PADMOD2=0x00; //martin 16Oct08 0x34;   P3.0,P3.1,P1.5,P1.6 Set " 0"  for  I/O PORT with printf variable
  
    for(_bTNum=0; (_bTNum<20) && (pcStr[_bTNum]); _bTNum++)
    {
      _pbTBuf[_bTNum] = (BYTE) pcStr[_bTNum];
	   SBUF = _pbTBuf[_bTNum];   while(!TI);   TI = 0;    
    }
   SBUF = 0x0D;   while(!TI);   TI = 0;   // CR ( ^M )
   SBUF = 0x0A;   while(!TI);   TI = 0;   // LF ( ^J )
   
  CS8955_PADMOD2=0xa0;  //Set " 1"  for (Master IIC) HSDA1 HSCL1,HSDA2,HSCL2,
   
}

void DRS232LogB(BYTE bV1, BYTE bV2, BYTE bV3, BYTE bV4)
{
  BYTE _bTNum;
  BYTE i=0;
  char   szTable[]   =   "0123456789";   


  CS8955_PADMOD2=0x00; //martin 16Oct08  0x34;  P3.0,P3.1,P1.5,P1.6 Set " 0"  for  I/O PORT with printf variable

//memset(_PrinTBuf,30,10);


if(bV1 == 0)
  {
        SBUF =  '0';   while(!TI);   TI = 0;    
	 SBUF =  '0';   while(!TI);   TI = 0;	
  }
else
{
 while((bV1)&&(i<4))   
  {   
      
      _PrinTBuf[i++]   =   szTable[bV1%10];   
       bV1  /= 10;   
	
  }
  _bTNum=i;
 for( _bTNum=i; (_bTNum>0) && (_PrinTBuf[_bTNum-1]); _bTNum--)
    {      
      
	  SBUF = _PrinTBuf[_bTNum-1];   while(!TI);   TI = 0;    
	
     }
}
   SBUF =  ' ';   while(!TI);   TI = 0;    

	  
  i=0;	  
if(bV2 == 0)
  {
         SBUF =  '0';   while(!TI);   TI = 0;    
	 SBUF =  '0';   while(!TI);   TI = 0;	
  }
else
{	  
 while((bV2)&&(i<4))      
  {   
          _PrinTBuf[i++]   =   szTable[bV2%10];   
       bV2  /= 10;   
  } 
     _bTNum=i;
 for( _bTNum=i; (_bTNum>0) && (_PrinTBuf[_bTNum-1]); _bTNum--)
    {      
      
	  SBUF = _PrinTBuf[_bTNum-1];   while(!TI);   TI = 0;    
	
     }
}
   SBUF =  ' ';   while(!TI);   TI = 0;    

	  
 i=0;	  
if(bV3 == 0)
  {
        SBUF =  '0';   while(!TI);   TI = 0;    
	 SBUF =  '0';   while(!TI);   TI = 0;		
  }
else
{	
 while((bV3)&&(i<4))    
  {   
        _PrinTBuf[i++]   =   szTable[bV3%10];   
       bV3  /= 10;   
  } 
  _bTNum=i;
 for( _bTNum=i; (_bTNum>0) && (_PrinTBuf[_bTNum-1]); _bTNum--)
    {      
      
	  SBUF = _PrinTBuf[_bTNum-1];   while(!TI);   TI = 0;    
	
     }
}
   SBUF =  ' ';   while(!TI);   TI = 0;    

	  
 i=0; 
if(bV4 == 0)
  {
        SBUF =  '0';   while(!TI);   TI = 0;    
	 SBUF =  '0';   while(!TI);   TI = 0;		
  }
else
{
 while((bV4)&&(i<4))    
  {   
         _PrinTBuf[i++]   =   szTable[bV4%10];   
       bV4  /= 10;   
  } 
  _bTNum=i;
 for( _bTNum=i; (_bTNum>0) && (_PrinTBuf[_bTNum-1]); _bTNum--)
    {      
      
	  SBUF = _PrinTBuf[_bTNum-1];   while(!TI);   TI = 0;    
	
     }
}
   SBUF =  ' ';   while(!TI);   TI = 0;    

   SBUF = 0x0D;   while(!TI);   TI = 0;   // CR ( ^M )
   SBUF = 0x0A;   while(!TI);   TI = 0;   // LF ( ^J )
   
  CS8955_PADMOD2=0xa0;   //Set " 1"  for (Master IIC) HSDA1 HSCL1,HSDA2,HSCL2,
}
#endif


#ifdef ENABLE_UART
// Init Uart
void vInitUart()
{
    UartRxIndex = 0; 

  CS8955_PADMOD2=0x00; //martin 16Oct08 0x74;     P3.0,P3.1,P1.5,P1.6 Set " 0"  for  I/O PORT with printf variable

   PCON |= 0x80; //UART  baud rate double control(C51 book page 158)
   SCON = 0x50;        // mode1 & enable receive

       CS8955_ETCTR &=0xF0;				/* EXEN2=0; TR2=0; C/T2#=0; CP/RL2#=0; */ //02Sep08
  	CS8955_ETCTR |=0x30;				/* RCLK = 1; TCLK=1; */    //02Sep08
       CS8955_ETCTR|=0x04;	      /*TR2=1; Timer 2 run */   //02Sep08
       CS8955_ETMOD = 0x00;   //02Sep08

 //      CS8955_THET=256-(62500/9600);  /* init value */
 //      CS8955_TLET=0xFD;                                /* init value */
 //      CS8955_RCAPETH=256-(62500/9600);                         /* reload value, baud_Rate Bds at 22.118MHz */
 //      CS8955_RCAPETL=0xFD;     
  CS8955_TLET   = 0;
   CS8955_THET   = 0;  	
//CS8955_THET= (65536-(12000000/32/4800))/256;  
//       CS8955_TLET=(65536-(12000000/32/4800))%256;  // 4800 ok , 9600 fail    
 CS8955_RCAPETL  = (65536-(12000000/32/4800))%256;  // 4800 ok , 9600 fail
   CS8955_RCAPETH  = (65536-(12000000/32/4800))/256;  

  //02Sep08  PT1= 0;   // priority Timer1 level
 //02Sep08   ET1 = 0; // Disable timer1 interrupt
 //02Sep08   TR1 = 1; // start timer1
 
   ES = 1;   // enable serial interrupt
 //02Sep08  PS = 0;  // priority serial low



 
//02Sep08 CS8955_PADMOD2=0xa0; //0xE0; 

//fgEnUART=0;  //03Jul08 test

// printf("UART is ok\n"); 
   
}
#endif

// Init CPU
void vInitCPU(void)
{
    vInitIO();  //P0-P3
    vInitTimer();   //Timer 0 Init
		      
     #ifdef SUPPORT_UART_PRINTF //   //25Aug08 test UART
     PCON = 0x80;
    SCON  = 0x50;	
    CS8955_RCAPETL  = (65536-(12000000/32/4800))%256;  // 4800 ok , 9600 fail
   CS8955_RCAPETH  = (65536-(12000000/32/4800))/256;   	
   CS8955_ETCTR = 0x34;
   CS8955_ETMOD = 0x00;
   CS8955_TLET   = 0;
   CS8955_THET   = 0;  	
     DRS232LogS("System Init Start.\n"); 	
  #else
       #ifdef ENABLE_UART
        vInitUart();  	
      #endif	 
   #endif		

     vInitVar();
    	
}
#ifdef MARTIN_SYSTEM_ONLY_TVMODE  //martin 08Mary08
void vInitSys(void)   //martin 12May08
{
	TR0=1;   // start timer0						
  	//	EX0 = 1;  // IR		
     #ifdef SUPPORT_UART_PRINTF  //26Aug08
       //  ES = 1;   // enable serial interrupt
        TI = RI = 0;
    #else   
       #ifdef ENABLE_UART  //#if (defined(ENABLE_UART) || defined(SUPPORT_UART_PRINTF))//   #ifdef ENABLE_UART
          ES = 1;   // enable serial interrupt
         TI = RI = 0;
       #endif	  
   #endif
     EA = 1;      //27Aug08

    vInitialE2prom();	

     vInitTV(); 
	 
      #ifdef SUPPORT_UART_PRINTF       
	 DRS232LogS("ChIndex System Sound: .\n"); 	
	 DRS232LogB(bTvCurrChIndex,sTvCurrChannel.bSystem,bTvCurrSound,0xff);
        DRS232LogS("System Init Finish.\n"); 	
	 DRS232LogS("Software Version:"); 	
	 DRS232LogB(fgTvVersion,0,0,0);  //26Aug08  	
   #endif
	 CS8955_PADMOD2=0xa0;  //Set " 1"  for (Master IIC) HSDA1 HSCL1,HSDA2,HSCL2,
   
     
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?