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 + -
显示快捷键?