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

📄 main.c

📁 我个人编写的车载dvd上的程序
💻 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)
{


	MCUInit();
	LibInit();
	SystemInit();
	PowerInit();
	KeyInit();
	//DisplayInit();
	AudioInit();
	AmpInit();
	RadioInit();
	ClockInit();
	RDSInit();
	//DVDInit();
    	Motor_Init(); // modiy by jzq 2008 - 11- 28
    	IPOD_init();
    	TouchPanelInit();
	#ifdef SUPPORT_TCON
	      //TFTBACKLED_Init();
		//Reset_TFT();
	#endif

	for(;;)
	{
		AccCheck(); 
		AccMain();
	  
		if(WakeUpTimer>0 ||System.AccMode!=ACCMODE_ACCOFF)
		{
	  
                   //  TFTBACKLED_Ctrl(1);
                  
      			SystemKey();
			WorkModeChange();
			KeyMain();	 
			//DisplayMain();  // 取消该部分为 jzq
			AudioMain();
			PowerMain();
			RadioMain();
			ClockMain();
			RDSMain();
            		TouchPanelMain();
			//AuxMain();
			#ifdef CDMODE_ENABLE
			CDMain();
			#endif

			#ifdef DVDMODE_ENABLE
				DVDMain();
			#endif
            
			DSAMain();
			MotorMain();
			//IPODMain();
			GPSMain();
			BTMain();
			LibMain();
			AmpMain();
            		
		}
		
	}

	
}

/*********************************************
	Function:		MCUInit
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2006-1-24- 15:40:43
*********************************************/
void MCUInit(void)
{

	CLK_CKDIVR=0;
/**********此处设置成LSI时钟了****/	
	CLK_ECKR |=0x01;
	
	CLK_CMSR=0xB4; //Must be set by hardware ??
	//modify it by jzq
/*********************************************/	

/*
	CLK_ECKR_HSEEN  = 1;
       CLK_ICKR_HSIEN = 0;
	CLK_SWCR_SWEN  = 1;
	CLK_SWR  = 0xb4;
	*/
	DI;

	// Interrupt
	ITC_SPR1 = y01010101;
	ITC_SPR2 = y01010101;
	ITC_SPR3 = y01010101;
	ITC_SPR4 = y01010101;
	ITC_SPR5 = y01010101;
	ITC_SPR6 = y01010101;
	ITC_SPR7 = y01010101;
	ITC_SPR8 = y11110101;
	EXTI_CR1 = y01100101;  
	EXTI_CR2 = 0x01;

	TIM2_PSCR = 0x04;
	TIM2_IER = y00000110;
	TIM2_CR1_CEN = 1;

	TIM4_CR1=0x05;
	TIM4_PSCR=0x07;
	TIM4_ARR=250;
	TIM4_IER_UIE=1;

#if 0 // DEBUG_SCI_ENABLE
	// 19200 --- None --- 8 --- 1

	//USART_DIV=26+1/16=26.0625
	//Baud=8M/16/26.0625=19185
	USART_BRR1=26;
	USART_BRR2=1;
	USART_CR2=y00001100;
#endif
       UART_init();
       LINUART_init();
       
	EI;
       
#ifdef DEBUG_SCI_ENABLE
	SCI_SendString("ST Car Audio Platform 4 --- Shenzhen CRM Lab");
#endif
    
    //DSA_init();
}

/*********************************************
	Function:		SystemKey
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2006-1-24- 15:40:41
*********************************************/
void SystemKey(void)
{
	switch(SysCommand)
	{
             
		case  SYSTEM_COMMAND_POWER:
			//debug("power key press");
			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 SYSTEM_COMMAND_MODE:
			//debug("mode");
#if 1
			if(F_InTASwitch)break;
			#ifdef EON_ENABLE
				if(F_InEONTASwitch)break;
			#endif
#endif			
			switch (System.FWorkMode.Current)
			{

			     //  debug_val("modechang:",System.FWorkMode.Current);
			       case WORKMODE_STANDBY:
			       	ChangeFWorkmode(WORKMODE_MENU);
			       	debug("menu");
			       	 break;
			        case WORKMODE_MENU:
			        	 ChangeFWorkmode(WORKMODE_RADIO);
			        	  debug("radio");
			        	  break;
				case WORKMODE_RADIO:
					ChangeFWorkmode(WORKMODE_DVD);
					debug("dvd");
					break;
				case WORKMODE_DVD:
					ChangeFWorkmode(WORKMODE_USB);
					debug("usb");
					break;	
				case WORKMODE_USB:
					ChangeFWorkmode(WORKMODE_SD);
					debug("sd");
					break;	
				case WORKMODE_SD:
					ChangeFWorkmode(WORKMODE_GPS);
					debug("gps");
					break;	
				case WORKMODE_GPS:
					ChangeFWorkmode(WORKMODE_IPOD);
					debug("ipod");
					break;
				case WORKMODE_IPOD:
					ChangeFWorkmode(WORKMODE_BT);
					debug("bt");
					break;
				case WORKMODE_BT:
					 ChangeFWorkmode(WORKMODE_STANDBY);
					 debug("STANDBY");
					 break;
			       
			
			}
			if(F_MuteKey)
			{
				F_MuteKey=0;
			}
			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.FWorkMode.Save = WORKMODE_MENU;

	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;
	//System.DispMode.Save  = DISPMODE_MENU;
     

}

/*********************************************
	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_DVD:
			System.DispMode.Requst  = DISPMODE_DVD;
			  break;
		case WORKMODE_USB:		
			System.DispMode.Requst  = DISPMODE_USB;
		case WORKMODE_SD:
			System.DispMode.Requst=DISPMODE_SD;
			break;
		case WORKMODE_GPS:
			System.DispMode.Requst=DISPMODE_GPS;
			break;
		case WORKMODE_BT:
			System.DispMode.Requst=DISPMODE_BT;
			break;
		case WORKMODE_IPOD:
			System.DispMode.Requst=DISPMODE_IPOD;
			break;
		case WORKMODE_STANDBY:
			System.DispMode.Requst=DISPMODE_STANDBY;
			break;
		case WORKMODE_MENU:
			System.DispMode.Requst = DISPMODE_MENU;
			break;
			
		
	}
	
	
#if 1
	
	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;
	}
#endif	
    // debug_val("WORKMODE:",System.FWorkMode.Current);

}


/*********************************************
	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
*********************************************************/
#ifdef MASTER_CLOCK_SWITCH
/*********************************************************
 Destriptor:switch the master clock from EXT to INT or INTERN to EXT
 input : HSE 0 and HSI 1
 output: none
 Writer: JZQ   date:2008 - 12 - 5
***********************************************************/
#define HSE2HSI 0
#define HSI2HSE 1
#define HSI_AS_MASTER_CLOCK  0xe1
#define LSI_AS_MASTER_CLOCK  0xd2
#define HSE_AS_MASTER_CLOCK 0xb4
void MasterClockSwitchAUTO(unsigned char master)
{
     CLK_SWCR_SWEN =  1;
     CLK_SWCR_SWIEN = 1;
     CLK_SWR = master;
}
void MasterClockSwitchManual(unsigned char master)
{
   CLK_SWR = master;
   
}

#endif

⌨️ 快捷键说明

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