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

📄 drv_mp3.c

📁 ROHM 公司BU9432:application:应用范围
💻 C
📖 第 1 页 / 共 5 页
字号:
/******************************************************************************/
/*	[NAME]   :Drv_MP3.c														  */
/*	[OUTLINE]:																  */
/*	[HISTORY]:																  */
/*	[NOTE]   :TAB=4															  */
/******************************************************************************/
//#include <machine.h>  /*  Z80梡   */
#include "BU18703.h"			/*  CPU儗僕僗僞掕媊 */
#include "prototype.h"
#include "extern.h"
#include	"mcal.h"

#include <string.h>
/*----------------------------------------------------------------------------*/

//偙偺僼傽僀儖偺僾儘僩僞僀僾
//void Common_Wait_1mS(void);	//徣ROM	偙傟偱-77僶僀僩
//void DrvMP3_ReadFAT_engin_00(void);
//void DrvMP3_ReadFAT_set_InfoArea(void);	//20050106 -ROM梡嫟捠張棟

//#if	ROM	// SDC 20050205
//UINT08 MP3Ctrl_WriteProc_WqokSkip(UINT08);	//YTC00F
//#else
//void	MP3Ctrl_WriteProc_WqokSkip( UINT08 );	//YTC00F
//#endif

//#if	!ROM	// SDC 20050205
//SINT16 	song_parts;
//UINT08	flag_flagment;		// 1:偱懕偒桳傝
//UINT32	sEnd;
//#endif

//CNVL	bufferLBN;															// SDC 20050121	No.xx4
//UINT08	scc_crt, crt_cnt;													// 

/*
#if	TOOLCHIP	// SDC 041227
void mp3_download( void )
{
//	UINT16 counter;

	//UINT16 counter1;
	//static UINT08 romdatah;
	//static UINT08 romdatal;
	//static UINT08 flash[1024];

//弨旛
//
	DrvDSP_BIOS_WriteRegMP3( 0x70, 0x01 );	//MP3 debug mode in

	DrvDSP_BIOS_WriteReg( 0xB2, 0x00 );	//DSP DRAM=MP3's DRAM
	DrvDSP_BIOS_WriteRegMP3( 0x72, 0x00 );	//
	DrvDSP_BIOS_WriteRegMP3( 0x74, 0x3f );	//
	DrvDSP_BIOS_WriteRegMP3( 0x78, 0x00 );	//

	DrvDSP_BIOS_WriteRegMP3( 0x74, 0x20 );	//
	DrvDSP_BIOS_WriteRegMP3( 0x78, 0x00 );	//
	DrvDSP_BIOS_WriteRegMP3( 0x72, 0x04 );	//
	DrvDSP_BIOS_WriteRegMP3( 0x75, 0x00 );	//
	DrvDSP_BIOS_WriteRegMP3( 0x74, 0xB3 );	//
	DrvDSP_BIOS_WriteRegMP3( 0x78, 0x00 );	//
	DrvDSP_BIOS_WriteRegMP3( 0x74, 0xC0 );	//
	DrvDSP_BIOS_WriteRegMP3( 0x78, 0xFF );	//
	DrvDSP_BIOS_WriteRegMP3( 0x78, 0x00 );	//
	DrvDSP_BIOS_WriteRegMP3( 0x78, 0x00 );	//

	DrvDSP_BIOS_WriteRegMP3( 0x71, 0x03 );	//RETpRAM
}
#endif	// SDC 041227
*/			//ad

//YTC006 20050105 Mr.Fujita+Mr.Doi's Idea ROOT崬傒俋俋俋僼僅儖僟懳嶔
//Sxxx FAT夝愅張棟
//2041218 4M/16M/64M DRAM懳墳丅
/*----------------------------------------------------------------------------*/
/*	[NAME]     :DrvMP3_ReadFAT												  */
/*	[FUNCTION] :															  */
/*	[RETURN]   :void  														  */
/*	[PARAMETER]:void														  */
/*	[HISTORY]  :															  */
/*	[NOTE]     :															  */
/*----------------------------------------------------------------------------*/
/*
void DrvMP3_ReadFAT( void )
{
#if	ROM	// SDC 20050204
	UINT32 dram_addr_iend;
	SINT16 n;					//
#endif
	UINT08 fat_data[32];

	if(( gu08_sts_ReadFAT != 99 ) && ( gu08_scc_ServoError == 2 ))
	{
		SCC_BF = gu08_sts_ReadFAT;
		gu08_sts_ReadFAT = 99;
	}

	if(gu08_sts_ReadFAT >= 2)	
	{	//
		if(gu16_Timer_ReadTOC == 0)
		{	//timeout 
			gu08_sts_ReadFAT = 0;	//FAT_F=0偺傑傑廔椆
			
			mp3_stop_cmds();
		}
	}

	switch(gu08_sts_ReadFAT)
	{
		case	1:
//YTC009
			//check ROOT DIR 
			//弶婜愝掕乣夝愅梫媮
			gu08_scc_ServoError = 1;					// 僄儔乕専弌奐巒
//YTC00H	gu16_Timer_ReadTOC = CONST_TIMER_READ_FAT;	//FAT夝愅偵僞僀儉傾僂僩傪丅	//20050131


			gu16_Timer_ReadTOC = CONST_TIMER_READ_FAT;	//FAT夝愅偵僞僀儉傾僂僩傪丅			//YTC00H 20050131
			if((gu08_kind_Disc & B00000001) != 0)	//CDDA桳傝
			{
				gu16_Timer_ReadTOC = CONST_TIMER_READ_FAT_CD;	//FAT夝愅偵僞僀儉傾僂僩傪丅	//YTC00H 20050131
			}


			DrvDSP_BIOS_WriteRegMP3( 0x40, 0x04 );	//YFLAG_DISABLE L偱YFLAG桳岠偵丅
			DrvDSP_BIOS_WriteReg( 0xE0, 0x01 );	//DAcin=MP3

			DrvDSP_BIOS_WriteRegMP3( 0x38, 0x05 );	// ECC帋峴夞悢=5	
			DrvDSP_BIOS_WriteRegMP3( 0x60, 0x00 );	// RCTEST_off		
#if	ROM	// SDC 20050203
			Common_Wait_1mS();	// 
#endif

//9			adr.ul = gl_dram_send - 0x00010000;		//DRAM偺偍怟愝掕 RCSEND僶僢僼傽儊儌儕僙僋僞廔椆傾僪儗僗偺愝掕
//			DrvDSP_BIOS_WriteRegMP3_32(0x44,adr);	// RCSEND愝掕
//
//			mp3Ctl.WR.conn_mode = 0x05;	// SYNC愙懕儌乕僪慖戰
//
//			MP3Ctrl_Write_SetMode( 0x02 );	// WRITE宯 @CDROM
//			MP3Ctrl_Read_SetMode( 0x0A );	// READ宯  @FAT

			DrvMP3_ReadFAT_set_InfoArea();	//20050106 -ROM梡嫟捠張棟

#if	ROM	// SDC 20050203
			DrvDSP_BIOS_WriteRegMP3( 0x20, 0x01 );			//step1 偼1dir-1file偱ROOT偩偗僠僃僢僋
			Common_Wait_1mS();	//嵟戝僨傿儗僋僩儕悢 99 1
			DrvDSP_BIOS_WriteRegMP3( 0x21, 0x00 );
			Common_Wait_1mS();

			DrvDSP_BIOS_WriteRegMP3( 0x22, 0x01 );
			Common_Wait_1mS();	// 嵟戝僼傽僀儖悢 
			DrvDSP_BIOS_WriteRegMP3( 0x23, 0x00 );
			Common_Wait_1mS();	//999(ODEN忋偺嵟戝) 1
#else
			DrvDSP_BIOS_WriteRegMP3_32( 0x20, 0x00010001 );
#endif

//			mp3Reg.rcrmd |= 0x80;	//  俽倁俢桪愭 	//YTC006 20050107
			mp3Reg.rcrmd &= 0x7f;	//  PVD桪愭 		//YTC009 20050111_23:15寛掕丅
			DrvDSP_BIOS_WriteRegMP3( 0x30, mp3Reg.rcrmd );
#if	ROM	// SDC 20050203
			Common_Wait_1mS();
#endif


			// VD慖戰
//YTC00620050107 TEST		mp3Reg.rcrmd &= 0x7F;	//  PVD桪愭 
//			mp3Reg.rcrmd |= 0x80;	//  俽倁俢桪愭 	//YTC006 20050107
//
//			DrvDSP_BIOS_WriteRegMP3( 0x30, mp3Reg.rcrmd );	//YTC006 -ROM嫟捠張棟傊堏摦
//			Common_Wait_1mS();

			DrvDSP_BIOS_WriteRegMP3( 0x32, 'M' );
#if	ROM	// SDC 20050203
			Common_Wait_1mS();	//M
#endif
			DrvDSP_BIOS_WriteRegMP3( 0x33, 'P' );
#if	ROM	// SDC 20050203
			Common_Wait_1mS();	//P
#endif
			DrvDSP_BIOS_WriteRegMP3( 0x34, '3' );
#if	ROM	// SDC 20050203
			Common_Wait_1mS();	//3
#endif
			DrvDSP_BIOS_WriteRegMP3( 0x31, 0x81 );
#if	ROM	// SDC 20050203
			Common_Wait_1mS();	//01斣偲偟偰桳岠丅
#endif

//YTC A2F 20050304 MP1/MP2/MP3 compatible 
			DrvDSP_BIOS_WriteRegMP3( 0x34, '2' );
//			Common_Wait_1mS();	//						//僐儅儞僪FIFO僴儞僪僔僃僀僋傪怣偠傞
			DrvDSP_BIOS_WriteRegMP3( 0x31, 0x82 );		//
//			Common_Wait_1mS();	//02斣偲偟偰桳岠丅		//
			DrvDSP_BIOS_WriteRegMP3( 0x34, '1' );		//
//			Common_Wait_1mS();	//						//
			DrvDSP_BIOS_WriteRegMP3( 0x31, 0x83 );		//
//			Common_Wait_1mS();	//03斣偲偟偰桳岠丅		//
//<<<

			gu08_sccd_ReadFAT = 1;	//
			gu08_sts_ReadFAT = 2;	//
			break;
			
#if	ROM	// SDC 20050203	*********************************************
		case	2:
			//夝愅姰椆懸偪乣寢壥嬦枴丄杮夝愅梫媮
			DrvMP3_ReadFAT_engin();
			if(gu08_sccd_ReadFAT == 0)
			{	//夝愅侾廔椆
				get_FAT_data( 1, fat_data );	//Infomation of ROOT DIR
				DrvMP3_ReadFAT_set_InfoArea();	//-ROM 20050106

				if ((fat_data[30]==0) && (fat_data[31]==0))
				{	//ROOT 偵偼*.MP3僼傽僀儖柍偄
					DrvDSP_BIOS_WriteRegMP3( 0x20, 0x64 );	//max=100
				}
				else
				{	//ROOT 偵傕*.MP3僼傽僀儖桳傝
					DrvDSP_BIOS_WriteRegMP3( 0x20, 0x63 );	//max=99
				}
				Common_Wait_1mS();	//嵟戝僨傿儗僋僩儕悢 99(root偵MP3桳) | 100(root偵俵俹俁柍)
				DrvDSP_BIOS_WriteRegMP3( 0x21, 0x00 );
				Common_Wait_1mS();

				DrvDSP_BIOS_WriteRegMP3( 0x22, 0xE7 );
				Common_Wait_1mS();	// 嵟戝僼傽僀儖悢
				DrvDSP_BIOS_WriteRegMP3( 0x23, 0x03 );
				Common_Wait_1mS();	//999(ODEN忋偺嵟戝)
				gu08_sccd_ReadFAT = 1;	//夝愅梫媮
				gu08_sts_ReadFAT = 3;	//
			}
			else if(gu08_sccd_ReadFAT == 0xff)
			{	//BAD 
				gu08_sts_ReadFAT = 0;
			}
			break;

		case	3:
			//夝愅姰椆懸偪乣寢壥嬦枴
			DrvMP3_ReadFAT_engin();
			if(gu08_sccd_ReadFAT == 0)
			{	//夝愅2廔椆
				//惓忢廔椆帪偺張棟
				// 1  DRAM偐傜僨乕僞傪庢傝崬傓
				// 1.1 僀儞僼僅儊乕僔儑儞僄儕傾偺偍怟傾僪儗僗傪庢摼
				dram_addr_iend = DrvDSP_BIOS_ReadRegMP3_32(0xEC);	// adr.ul;
				gl_buff_max = ( dram_addr_iend - 1L );	//僶僢僼傽乕儊儌儕乕椞堟偺偍怟傪嶼弌
				DrvDSP_BIOS_WriteRegMP3_32(0x44,gl_buff_max); 	// RCSEND嵞愝掕

				// 2.0 FAT 僉儍僢僔儏偺弶婜壔
				for ( n = 0; n < FAT_CACHE_SIZE; n++ )
				{
					fat_cache[n].nIndex = -1;
				}

//         		偣偭偐偔偩偐傜丄俥俙俿夝愅寢壥傪昞帵

				get_FAT_data( 0, fat_data );
				// VOLUME 
				gu08_sts_UDFDISC=0;
				if((fat_data[19] & B10000000)!=0)
				{
					gu08_sts_UDFDISC=1;	//nUDF偱偡丅
				}
				// total DIRs
				stInfoArea.hexTotalFolder =	( ( UINT16 ) ( fat_data[28] ) << 8 ) +	( UINT16 ) fat_data[29];
				stInfoArea.hexTotalFile.uc.hi =	fat_data[17];	//nUDF懳墳
				stInfoArea.hexTotalFile.uc.lo =	fat_data[18];	//

				fat_f = 1;	//俥俙俿夝愅惓忢廔椆
				gu08_sts_ReadFAT = 0;

			}
			else if(gu08_sccd_ReadFAT == 0xff)
			{	//BAD 
				gu08_sts_ReadFAT = 0;
			}
			break;
#else	//***********************************************************
#if	ROM
		case	2:															// 夝愅姰椆懸偪乣寢壥嬦枴丄杮夝愅梫媮
		case	3:															// 夝愅姰椆懸偪乣寢壥嬦枴
#else
		default:
#endif
			DrvMP3_ReadFAT_engin();
			switch( gu08_sccd_ReadFAT )
			{
			case 0:
				if( gu08_sts_ReadFAT == 2 )
				{															// 夝愅侾廔椆
					get_FAT_data( 1, fat_data );							//Infomation of ROOT DIR
					DrvMP3_ReadFAT_set_InfoArea();							//-ROM 20050106

					gu32Work.l = 0x03E70063;									// ROOT 偵傕 *.MP3 僼傽僀儖桳傝	max = 99
#if	LCD_DM	//[dyna-DM]
					if( !( fat_data[30] | fat_data[31] ))
#else
					if( !( fat_data[DIR_MP3_FILES0] | fat_data[DIR_MP3_FILES1] ))
#endif
						gu32Work.b.ll = 0x64;									// ROOT 偵偼 *.MP3 僼傽僀儖柍偄	max = 100

					DrvDSP_BIOS_WriteRegMP3_32( 0x20, gu32Work.l );				// 嵟戝僨傿儗僋僩儕悢丄嵟戝僼傽僀儖悢愝掕

					gu08_sccd_ReadFAT = 1;									//夝愅梫媮
					gu08_sts_ReadFAT = 3;									//
				}else
				{															// 夝愅俀廔椆
					//惓忢廔椆帪偺張棟
					// 1  DRAM偐傜僨乕僞傪庢傝崬傓
					// 1.1 僀儞僼僅儊乕僔儑儞僄儕傾偺偍怟傾僪儗僗傪庢摼
					gl_buff_max = DrvDSP_BIOS_ReadRegMP3_32( 0xEC );
					DrvDSP_BIOS_WriteRegMP3_32( 0x44, --gl_buff_max );		// RCSEND嵞愝掕

#if	!ROM	// SDC 20050205
					// SEND 寁嶼
					sEnd  = gl_buff_max / 1182L;							// gl_buff_max 偺抣偑寛傑偭偨帪偵寁嶼偡傞
					sEnd *= 1182L;
#endif

#if	ROM	// SDC 20050205
					// 2.0 FAT 僉儍僢僔儏偺弶婜壔
					for ( n = 0; n < FAT_CACHE_SIZE; n++ )
					{
						fat_cache[n].nIndex = -1;
					}
#endif

//	         		偣偭偐偔偩偐傜丄俥俙俿夝愅寢壥傪昞帵

					get_FAT_data( 0, fat_data );
					// VOLUME 
#if	LCD_DM	//[dyna-DM]
					gu08_sts_UDFDISC = fat_data[19] & B10000000;
#else
					gu08_sts_UDFDISC = fat_data[DISC_FRAGMENT_FRAG] & B10000000;
#endif
					// total DIRs
#if	LCD_DM	//[dyna-DM]
					stInfoArea.hexTotalFolder =	( ( UINT16 ) ( fat_data[28] ) << 8 ) +	( UINT16 ) fat_data[29];
					stInfoArea.hexTotalFile.uc.hi =	fat_data[17];			//nUDF懳墳
					stInfoArea.hexTotalFile.uc.lo =	fat_data[18];			//
#else
					stInfoArea.hexTotalFolder =	( ( UINT16 ) ( fat_data[DISC_DIR_NUMBER0] ) << 8 ) +
												  ( UINT16 )   fat_data[DISC_DIR_NUMBER1];
					stInfoArea.hexTotalFile.uc.hi =	fat_data[DISC_DEFRAGMENT_FILES0];			//nUDF懳墳
					stInfoArea.hexTotalFile.uc.lo =	fat_data[DISC_DEFRAGMENT_FILES1];			//
#endif
					fat_f = 1;												//俥俙俿夝愅惓忢廔椆
					gu08_sts_ReadFAT = 0;
				}
				break;

			case 0xff:														// BAD
				gu08_sts_ReadFAT = 0;
			}
			break;

#endif	//***********************************************************
		case 99:															// 僄儔乕儕僇僶儕乕姰椆懸偪
			if( gu08_scc_ServoError == 0 )
			{																// 儕僇僶儕乕張棟廔椆
				if(gu08_sts_Error==0)
				{
					gu08_scc_ServoError = 1;								// 僄儔乕専弌梫媮
					gu08_sts_ReadFAT = SCC_BF;								// 尦偺忬懺傊
				}
				else
				{	//暅婣晄擻
					gu08_sts_ReadFAT = 0;

//YTC008 20050110 屇傃弌偟懁偱傕摨條偺張棟偟偰偄傞丅
//YTC008 			stInfoArea.Command[CMD_READ_FAT][CMD_RESPONSE] = CMD_RES_COMPLETE;
//YTC008			CDCtrl_ExecCommand[CMD_READ_FAT] = CDCtrl_Nop;
//YTC008			gu08_kind_Disc = NO_DISC;								// 僨傿僗僋柍偟
				}
			}
			break;
	}
}
*/
/*----------------------------------------------------------------------------*/
/*	[NAME]     :DrvMP3_ReadFAT_engin										  */
/*	[FUNCTION] :															  */
/*	[RETURN]   :void  														  */
/*	[PARAMETER]:void														  */
/*	[HISTORY]  :															  */
/*	[NOTE]     :															  */
/*----------------------------------------------------------------------------*/
/*
void DrvMP3_ReadFAT_engin()
{
	static SINT16 total_try;
#if	ROM	// SDC 20050203
	static SINT32 last_atime;
	UINT08 tmp_fc1;
#endif
//	CNVL atime;

	switch(gu08_sccd_ReadFAT)
	{
		case 1:
			// WRITE摦嶌愝掕
//			mp3Ctl.WR.begin_sector = gl_track_begin + 10L;	//巄掕(+16L偱張棟偟偨偄丄梫専徹)
			mp3Ctl.WR.begin_sector = gl_track_begin + 6L;	//巄掕(+16L偱張棟偟偨偄丄梫専徹)

			mp3Ctl.WR.end_sector = 0;
			mp3Ctl.WR.nSect = 32;	// 32僙僋僞偩偗WRITE 偡傞

			mp3Ctl.WR.threshold = 0x3FFFFF;	//YTC002

			// READ摦嶌愝掕
			total_try = 0;

			MP3Ctrl_Write_Start(  );	//  MP3Ctrl_WriteProc()奐巒 
			gu08_sccd_ReadFAT = 2;
			break;

		case 2:				// 棴傔崬傒拞
			// WRITE掆巭偺妋擣
			if( MP3Ctrl_Write_GetStatus(  ) == 0x81 )
			{	// WRITE 掆巭偟偨
				DrvDSP_BIOS_WriteRegMP3( 0x01, 0x80 | mp3Ctl.RD.mode );	//READ start without AMUTE
				gu08_sccd_ReadFAT = 3;
			}
			break;

		case 3:
#if	ROM	// SDC 20050203
			if( !gu08_sts_Subq_valid )	//柍偄偲僟儊偩偭偨
			{
				break;
			}
			// READ掆巭偺妋擣
			if( !( DrvDSP_BIOS_ReadRegMP3( 0xC2 ) & 0x20 ) )
#else
			if( !( DrvDSP_BIOS_ReadRegMP3( 0xC2 ) & 0x20 ) && gu08_sts_Subq_valid )
#endif
			{	//俥俙俿夝愅姰椆偭丅
				Common_Wait_1mS();
#if	ROM	// SDC 20050203
				tmp_fc1 = DrvDSP_BIOS_ReadRegMP3( 0xC1 );

				switch ( tmp_fc1 & 0xBF )
#else
				switch( DrvDSP_BIOS_ReadRegMP3( 0xC1 ) & 0xBF )
#endif
				{
					case 0x80:	// 惓忢廔椆
#if	ROM	// SDC 20050203		儅僗僋偟偰傞
					case 0xC0:	// 惓忢廔椆乮僄儔乕偁傝乯
#endif
						//惓忢廔椆偺昞帵
						MP3Ctrl_Write_Reset(  );	// WRITE 僋儕傾
						gu08_sccd_ReadFAT = 0;
						break;

					case 0xA0:	// DR媡弴
						// Nero懳墳 // Next LBN傪撉傓
#if	ROM	// SDC 20050203
						last_atime = DrvDSP_BIOS_ReadRegMP3_32(0xF0) + 150L - 6L;		//Sxxx僗僩儕乕儉戝僘儗懳嶔
						mp3Ctl.WR.wqok = last_atime;
#else
						mp3Ctl.WR.wqok = DrvDSP_BIOS_ReadRegMP3_32( 0xF0 ) + 150L - 6L;
#endif
						DrvMP3_ReadFAT_engin_00();
//						mp3Ctl.WR.nSect = 32;
//						MP3Ctrl_Write_Restart(  );
//						gu08_sccd_ReadFAT = 2;		//->loop
						break;

⌨️ 快捷键说明

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