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

📄 main.c

📁 威望公司MP3 + USB MCU 的参考软件
💻 C
字号:
/****************************************************************
*                      Viaon Technology (Suzhou) Co.,Ltd
*
*    Copyright 2007, Viaon Technology (Suzhou) Co.,Ltd,Suzhou,China
*                    All rights reserved.
*
*
* Filename:      	main.c
*
* Programmer:    	Greg 
*
* Created: 	 	1/2/2008
*
* Description: 		public functions 
*              
*        
* Change History (most recent first):	2008.1.2
****************************************************************/
//#include <stdio.h>
//#include <intrins.h>
//#include <string.h>

#include "utiltypedef.h"
#include "va4010reg.h"
#include "common.h"
#include "timer.h"
#include "halmp3dec.h"
#include "hali2c.h"
#include "hallcm.h"
#include "halir.h"
#include "halfm.h"
#include "libfatif.h"
#include "4010UI.h"
#include "halvol.h"
#include "halsdif.h"
#include "halusbhif.h"
#include "halinfo.h"
#include "halrunled.h"
#include "haldevchk.h"
#include "display.h"

BYTE data FSMState;
BYTE DBUF[SECT_LEN];  	// 512B data buffer
STREAM *fd_mp3;
BYTE volatile data keystatus;
BYTE volatile data mp3status = MP3STATUS_IDLE;
ST_SEARCH_INFO Mp3SearchInfo;
ST_MP3_SREQ data Mp3SReq;	
//extern BYTE code MyCarDot[];

#ifdef SDENUM_RETRY_ENABLE 
extern BYTE data bDEVFlag;
#endif
static void _VA4010Reset(void)
{
	//HW reset
	MP3_DEC_DISABLE();//Mp3Ctrl = 0x04; //Disable and mute MP3 dec

	//global variable clear
	FSMState = FSMSTATE_USB;
	keystatus = KEY_STATUS_NOKEY;
	fd_mp3 = NULL;
	//mp3status = MP3STATUS_IDLE;	

#ifdef ENABLE_PLAYMODE_KEY
	bPMode = MP3_PMODE_REPEAT; // Default Repeat All
#endif

	return;
}

static void _halDevInit(void)
{
	UartOutText("-I-: halDevInit() \r\n");

#if (UART_DEBUG == UART_DEBUG_ENABLE)
	SCON = SCON_BLAZE;		   // set UART speed 115200bps
#endif

	P3_DDR &= 0xf7;//P3^3 IR input direc.
	MUTE_HW();	
	UartOutText("----MUTE_HW----\r\n");	
	halINTInit();	
	DispInit();
	halLEDInit();
	return;
}

/*------------------------------------------------------------------------------------*/
void main(void)
{
	BYTE devid;
	DISABLE_INTERRUPTS;
	
	halCheckInfo1();
	_halDevInit();
       _VA4010Reset();	

#ifdef SDENUM_RETRY_ENABLE
	//ReadE2PRom((BYTE*)&bDEVFlag, sizeof(bDEVFlag), SDENUM_PAGE_ADDR<<E2PROM_PAGE_SIZEEXP);
	Read_N_Bytes((BYTE*)&bDEVFlag, sizeof(bDEVFlag), SDENUM_PAGE_ADDR<<E2PROM_PAGE_SIZEEXP);
	if(bDEVFlag == SD_ENUMGOING_FLAG){
		UartOutText("\rread SD_ENUMGOING_FLAG\t\n");
		FSMState = FSMSTATE_SD;
	}
#endif
	
	while(1){
		//usb Attach detect
		if(FSMState==FSMSTATE_USB){
			UartOutText("-----FSMSTATE_USB\r\n");
			SysTicks = 0;
			while(SysTicks < 10);
			if(halUsbInit() == TRUE){	
				halLCMClear(0, 3);
				halLCMWriteData(32, 1,"USB", 3);				
				if(halUsbEnum()){
					DelayMs(2000);
					UartOutText("-I-: USB_DISK \r\n");
					devid = USB_DISK;
					FSMState = FSMSTATE_ATTACHED;
				}
			}else{
				DelayMs(200);
#ifdef ENABLE_SD_CARD	
				FSMState = FSMSTATE_SD; 		
#endif		
			}	
		}
		
#ifdef ENABLE_SD_CARD
		//sd Attach detect
		if(FSMState == FSMSTATE_SD){
			UartOutText("-----FSMSTATE_SD\r\n");
			SysTicks = 0;
			while(SysTicks < 10);
			if(halSDCheck()){
				halLCMClear(0, 3);
				halLCMWriteData(40,1, "SD", 2);				
				halSDInit();				
				UartOutText("-I-: SD_DISK \r\n");			
				devid = SD_DISK;
				FSMState = FSMSTATE_ATTACHED;
			}else
				FSMState = FSMSTATE_USB;
		}		
#endif
		//File System Init
		if(FSMState == FSMSTATE_ATTACHED){
			FileSystemInit();
			DriveAdd(devid);
			UartOutText("\r\n\r\n------------------\r\n");
			Mp3SReq.bySType = SEARCH_MP3_TOTALCNT;// Search through the whole disk for total mp3 counter.
			FileSearch(&Mp3SearchInfo, &Mp3SReq);	
			halCheckMp3Info();
			keystatus  = KEY_STATUS_PLAYPAUSE;
			mp3status = MP3STATUS_WAKEUP;
			FSMState = FSMSTATE_INIT;
		}

		if(FSMState == FSMSTATE_INIT){
			if(halMp3Req(fd_mp3) == MP3_DATREQ_OVER){
				MP3_DEC_DISABLE();
				UartOutText("\r\n/*---------OV--------------*/\r\n");	
#if 0
				//Check Device Disattachment
				if(halDevCheck(devid, DEV_CHECK_CUR) == FALSE){
					UartOutText("Current device removed\r\n");
					//FSMState = FSMSTATE_USB;
					//FSMState = FSMSta[drv->DevID];
					keystatus = KEY_STATUS_DEVCHG;
				}else{
#endif			
#ifdef ENABLE_PLAYMODE_KEY		
					if(bPMode == MP3_PMODE_REPEAT1){
						mp3status = MP3STATUS_WAKEUP;
						keystatus = KEY_STATUS_PLAYPAUSE;			
					}else{
						Mp3SReq.bySType = SEARCH_MP3_NEXT;
						keystatus = KEY_STATUS_PLAYPAUSE;
						mp3status = MP3STATUS_IDLE;
					}
#else
					Mp3SReq.bySType = SEARCH_MP3_NEXT;
					keystatus = KEY_STATUS_PLAYPAUSE;
					mp3status = MP3STATUS_IDLE;			
#endif
				//}
			}
			halVolSmthFSM();
			
			halDevPnP();		
		}	
		
		halIRHandle();
		halKeyFSM();
		DispFSM();
		halRunLED();
		halKeyHandle(FSMState);	

	}

	return;
}


⌨️ 快捷键说明

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