📄 main.c
字号:
/*********************************************************
Project: ST FST(TDA7540)
File name: main.c
Description:
Write/Modify: Perry Liang
Time: 2006-1-24- 15:34:58
*********************************************************/
#define ROOT
#include "public.h"
/*********************************************
Function: main
Description:
Write/Modify: Perry.Liang
Time: 2006-1-24- 15:40:45
*********************************************/
void main(void)
{
unsigned int i;
unsigned char *p;
for(i=0x0200;i<0x0880;i++)
{
p=(unsigned char *)(i);
*p=0x00;
}
MCUInit();
LibInit();
//GetOptionFromDiode();
SystemInit();
PowerInit();
KeyInit();
DisplayInit();
AudioInit();
RadioInit();
ClockInit();
RDSInit();
CDInit();
for(;;)
{
AccCheck();
AccMain();
if(WakeUpTimer>0 ||System.AccMode!=ACCMODE_ACCOFF)
{
SystemKey();
WorkModeChange();
KeyMain();
DisplayMain();
AudioMain();
PowerMain();
RadioMain();
ClockMain();
RDSMain();
AuxMain();
CDMain();
//accordo_main();
}
}
}
/*********************************************
Function: MCUInit
Description:
Write/Modify: Perry.Liang
Time: 2006-1-24- 15:40:43
*********************************************/
void MCUInit(void)
{
asm sim;
// Interrupt
ITSPR0=y01111111;
ITSPR1=y01110111;
ITSPR2=y01010100;
ITSPR3=y11110111;
EICR=0x88;
TACR2=0x08; /* Clock divided by 8 */
TACR1=0x40; /* Output Compare Int Enable */
TBCR2=0x08; /* Clock divided by 8 */
TBCR1=0x40; /* Output compare interrupt enable.*/
#ifdef HWI2C_ENABLE
// I2C
I2CCCR=0x85;
I2CSR1=0;
I2CSR2=0;
I2COAR1=0;
I2COAR2=0;
I2CCR=y00100101;
#endif
asm rim;
}
/*********************************************
Function: SystemKey
Description:
Write/Modify: Perry.Liang
Time: 2006-1-24- 15:40:41
*********************************************/
void SystemKey(void)
{
switch(KeyCode)
{
case S_AD_POWER:
case L_AD_POWER:
if(System.AccMode==ACCMODE_ACCOFF
||System.AccMode==ACCMODE_ACCOFFREQ
||System.AccMode==ACCMODE_ACCOFFWAIT)
break;
if (System.PowerMode==POWERMODE_POWERON
||System.PowerMode==POWERMODE_POWERONREQ
||System.PowerMode==POWERMODE_POWERONWAIT)
{
PowerOff();
if(RDS.F_TAEnable)
{
RDS.F_TAEnable=0;
if(F_InTASwitch)TaSwitchBack();
#ifdef EON_ENABLE
if(F_InEONTASwitch)EONTaSwitchBack();
#endif
}
}
else
{
PowerOn();
}
break;
case S_AD_MODE:
switch (System.FWorkMode.Current)
{
#ifdef CDMODE_ENABLE
case WORKMODE_RADIO:
ChangeFWorkmode(WORKMODE_DISC);
break;
case WORKMODE_DISC:
ChangeFWorkmode(WORKMODE_USB);
break;
case WORKMODE_USB:
ChangeFWorkmode(WORKMODE_SD);
break;
case WORKMODE_SD:
ChangeFWorkmode(WORKMODE_AUX);
break;
case WORKMODE_AUX:
ChangeFWorkmode(WORKMODE_RADIO);
break;
#else
case WORKMODE_RADIO:
ChangeFWorkmode(WORKMODE_AUX);
break;
case WORKMODE_AUX:
ChangeFWorkmode(WORKMODE_RADIO);
break;
#endif
}
if(F_MuteKey)
{
F_MuteKey=0;
}
if(RDS.F_TAEnable)
{
RDS.F_TAEnable=0;
if(F_InTASwitch)TaSwitchBack();
#ifdef EON_ENABLE
if(F_InEONTASwitch)EONTaSwitchBack();
#endif
}
break;
case L_AD_MODE:
if(F_MuteKey)break;
DisplayClear(CLEARNUM);
F_DISP_P=0;
CopyString(DispNum,VERSION);
DisplayNumber();
DisplaySentData();
CDSendCommand(CD_CMD_PLAY);
break;
}
}
/*********************************************
Function: SystemInit
Description:
Write/Modify: Perry.Liang
Time: 2006-1-24- 15:40:40
*********************************************/
void SystemInit(void)
{
System.FWorkMode.Last= WORKMODE_IDLE;
System.FWorkMode.Current = WORKMODE_IDLE;
System.FWorkMode.Next = WORKMODE_IDLE;
System.FWorkMode.Requst= WORKMODE_STANDBY;
System.FWorkMode.Save=WORKMODE_RADIO;
System.DispMode.Last= DISPMODE_IDLE;
System.DispMode.Current = DISPMODE_IDLE;
System.DispMode.Next = DISPMODE_IDLE;
System.DispMode.Requst= DISPMODE_STANDBY;
System.DispMode.Save=DISPMODE_RADIO;
}
/*********************************************
Function: WorkModeChange
Description:
Write/Modify: Perry.Liang
Time: 2006-1-24- 15:40:38
*********************************************/
void WorkModeChange(void)
{
switch(System.FWorkMode.Requst)
{
case WORKMODE_RADIO:
//System.DispMode.Requst=DISPMODE_RADIO;
//if(F_InTASwitch)
if(F_InTASwitch||F_InEONTASwitch)
{
System.DispMode.Requst=DISPMODE_RDS;
RDSDispMode=RDSDISP_TRAFFIC;
}
else if(RDS.F_PSExist)
{
System.DispMode.Requst=DISPMODE_RDS;
RDSDispMode=RDSDISP_PS;
}
else
{
System.DispMode.Requst=DISPMODE_RADIO;
RDSDispMode=RDSDISP_IDLE;
}
break;
case WORKMODE_DISC:
case WORKMODE_USB:
case WORKMODE_SD:
System.DispMode.Requst=DISPMODE_CD;
break;
case WORKMODE_CDC:
System.DispMode.Requst=DISPMODE_CDC;
break;
case WORKMODE_AUX:
System.DispMode.Requst=DISPMODE_AUX;
break;
case WORKMODE_PHONE:
System.DispMode.Requst=DISPMODE_PHONE;
break;
case WORKMODE_STANDBY:
System.DispMode.Requst=DISPMODE_STANDBY;
break;
case WORKMODE_ALIGN:
System.DispMode.Requst=DISPMODE_ALIGN;
break;
}
if(System.FWorkMode.Last!= WORKMODE_IDLE)
{
System.FWorkMode.Save=System.FWorkMode.Last;
System.FWorkMode.Last= WORKMODE_IDLE;
}
if(System.FWorkMode.Next != WORKMODE_IDLE
&& System.FWorkMode.Current != System.FWorkMode.Next)
{
System.FWorkMode.Last= System.FWorkMode.Current;
System.FWorkMode.Current = System.FWorkMode.Next;
}
System.FWorkMode.Next = WORKMODE_IDLE;
if(System.FWorkMode.Requst != WORKMODE_IDLE
&& System.FWorkMode.Requst != System.FWorkMode.Next)
{
System.FWorkMode.Next = System.FWorkMode.Requst;
System.FWorkMode.Requst= WORKMODE_IDLE;
}
if(System.DispMode.Last!= DISPMODE_IDLE)
{
System.DispMode.Save=System.DispMode.Last;
System.DispMode.Last= DISPMODE_IDLE;
}
if(System.DispMode.Next != DISPMODE_IDLE
&& System.DispMode.Current != System.DispMode.Next)
{
System.DispMode.Last= System.DispMode.Current;
System.DispMode.Current = System.DispMode.Next;
}
System.DispMode.Next = DISPMODE_IDLE;
if(System.DispMode.Requst != DISPMODE_IDLE
&& System.DispMode.Requst != System.DispMode.Next)
{
System.DispMode.Next = System.DispMode.Requst;
System.DispMode.Requst= DISPMODE_IDLE;
}
}
/*********************************************
Function: ChangeFWorkmode
Description:
Write/Modify: Perry.Liang
Time: 2006-1-24- 15:40:37
*********************************************/
void ChangeFWorkmode(unsigned char FMode)
{
if(System.FWorkMode.Current==FMode)return;
AudioMute(SOFTON);
System.FWorkMode.Requst=FMode;
}
/*********************************************
Function: GetOptionFromDiode
Description:
Write/Modify: Perry.Liang
Time: 2005-2-3- 14:13:46
*********************************************/
void GetOptionFromDiode(void)
{
// Jumper
/*Pin_J2=0;
PD_J2=0;
PO_J2=1;
Pin_J3=0;
PD_J3=0;
PO_J3=1;
Pin_J4=0;
PD_J4=0;
PO_J4=1;
Pin_J5=0;
PD_J5=0;
PO_J5=1;
O_J2=Pin_J2;
O_J3=Pin_J3;
O_J4=Pin_J4;
O_J5=Pin_J5;*/
}
/*********************************************************
File End
*********************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -