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

📄 drv_esp.c

📁 ROHM 公司BU9432:application:应用范围
💻 C
📖 第 1 页 / 共 3 页
字号:
//Sxxx 	20041112	俤俽俹張棟峔抸奐巒丅
//		傑偢偼丄僽儔僢僔儏傾僢僾丅柍懯僐儊儞僩傪徣偄偰偡偭偒傝
//		20041116	僷儚乕僙乕僽慻傒崬傓丅嘆偍帋偟斉丅

// ==============================================
//  CD ESP control routines
// ==============================================
//#include <machine.h>      //Z80梡
#include "BU18703.h"			//儗僕僗僞掕媊
#include "prototype.h"
#include "extern.h"
#include	"mcal.h"


extern UINT08 MP3decF;	//YTC00G 20050128 

//偙偺僼傽僀儖偺拞偩偗偺娭悢偺僾儘僩僞僀僾
//	庡偵ROM埑弅梡嫟捠張棟
void ESP_bios_valid(void);
void ESP_bios_Wclear(void);
void ESP_bios_Wstop(void);
void ESP_bios_Wstart(void);
void ESP_bios_Rclear(void);
void ESP_bios_WRclear(void);	//YTC006
void ESP_bios_Rstart(void);
void ESP_bios_Rstop(void);
void DrvDSP_SearchJUMP(void);

void DrvDSP_ctrlESP_setPSMode(void);	//YTC005
void DrvDSP_ctrlESP_clrESP(void);		//YTC006
void DrvDSP_ctrlESP_speedUP(void);		//YTC006 20050106 -ROM


//巄掕 偙偺僼傽僀儖偺拞偺僌儘乕僶儖曄悢
//static SINT32 esp_wqok;		//尰嵼棴崬拞偺僙僋僞
//static UINT08 esp_wqok_track;	//尰嵼棴崬拞偺僩儔僢僋
SINT32 esp_wqok;		//尰嵼棴崬拞偺僙僋僞
UINT08 esp_wqok_track;	//尰嵼棴崬拞偺僩儔僢僋

//僷儚乕僙乕僽 暅婣億僀儞僩昞
//YTC002 倄俿俠偑尒捈偟偰愝掕偡傞丅
const	UINT32	shoene_recoverpoint[][3] = {
		//       4M          16M         64M
		{        OFF, 0x00080000, 0x00100000 },		// 0 : JOG=OFF / 旕埑弅
		{ 0x00020000, 0x00040000, 0x00100000 },		// 1 : JOG=OFF / ADPCM	// YTC_20041228
		{        OFF, 0x00080000, 0x00300000 },		// 2 : JOG= ON / 旕埑弅
		{ 0x00020000, 0x000C0000, 0x00300000 }		// 3 : JOG= ON / ADPCM	// YTC_20041228
//		{        OFF, 0x00080000, 0x00100000 },		// 0 : JOG=OFF / 旕埑弅
//		{ 0x00020000, 0x00040000, 0x00100000 },		// 1 : JOG=OFF / ADPCM	// YTC_20041228
//		{        OFF, 0x00080000, 0x00100000 },		// 2 : JOG= ON / 旕埑弅
//		{ 0x00020000, 0x000C0000, 0x00100000 }		// 3 : JOG= ON / ADPCM	// YTC_20041228
};

UINT08	ESPMode;


// --------------------------------------------------------
//  ESP CONTROL
// --------------------------------------------------------
void DrvDSP_CtrlESP( void )
{
#if	DM_ROM
//	static UINT08 gu08_esp_read_status;	//20041128 gloval壔丅懠儌僕儏乕儖偱嶲徠偡傞偨傔丅

	static UINT08 esp_decode_green;	//撉弌奐巒俷俲 柤慜曄偊傞丅

	static UINT08 retry_count;	//愙懕儕僩儔僀
	static UINT08 n;			//弶婜棴傔僙僋僞悢僇僂儞僞

	static UINT08 matagi;		//僩儔僢僋屪偓拞僼儔僌
	// 0: PICK == SOUND    
	// 1: PICK == SOUND +1 

	static UINT08 aa_touch_f;	//AA傑偱棴崬嵪
//	static SINT32 esp_wqok;		//尰嵼棴崬拞偺僙僋僞		20041128僌儘乕僶儖壔
//	static UINT08 esp_wqok_track;	//尰嵼棴崬拞偺僩儔僢僋	20041128僌儘乕僶儖壔
	static UINT08 tmp_timing;	//尰嵼壒帪娫庢傝崬傒僞僀儈儞僌

	//  弰夞枅偵巊偄幪偰
	UINT08 ctmp_fc0;			//彂崬宯偺STATUS
	UINT08 ctmp_fc1;			//撉弌宯偺STATUS
	UINT08 ctmp_fc2;			//愙懕宯偺STATUS
	UINT08 ctmp_fe0;			//        STATUS
	UINT08 esp_subq_f;			//        STATUS

	UINT08	dramMode;
//	UINT08	i;

UINT32	tmp;
#if	!ROM
UINT08	size;

	size = gu08_kind_DRAM >> 2;
#endif

	if( gu08_sccd_ESPctrl != 0 )
	{							//ESP梫媮偁傞帪偺傒幚巤
// COMMON =======================================
#if	1		// sdc deb
	ctmp_fc0 = DrvDSP_BIOS_ReadRegMP3( 0xC0 );	// EACH STATUS 
	ctmp_fc1 = DrvDSP_BIOS_ReadRegMP3( 0xC1 );	//
	ctmp_fc2 = DrvDSP_BIOS_ReadRegMP3( 0xC2 );	//
#else
	fc0 = ctmp_fc0 = DrvDSP_BIOS_ReadRegMP3( 0xC0 );	// EACH STATUS 
	fc1 = ctmp_fc1 = DrvDSP_BIOS_ReadRegMP3( 0xC1 );	//
	fc2 = ctmp_fc2 = DrvDSP_BIOS_ReadRegMP3( 0xC2 );	//

	fc8 = DrvDSP_BIOS_ReadRegMP3( 0xC8 );
	fc9 = DrvDSP_BIOS_ReadRegMP3( 0xC9 );
	fca = DrvDSP_BIOS_ReadRegMP3( 0xCA );
	fcb = DrvDSP_BIOS_ReadRegMP3( 0xCB );
#endif		// sdc deb

	if(++tmp_timing==6)	//Suxxx joggable
	{	//@12mS
		tmp_timing=0;
// SDC 20050122		dram_zanryou = get_mp3reg_zanryo(  );	//俇夞偵堦夞偖傜偄巆検傪峏怴丅
		tmp = get_mp3reg_zanryo(  );			//俇夞偵堦夞偖傜偄巆検傪峏怴丅	// SDC 20050122

		if( !( tmp & 0x800000 ))												// 巆検壔偗偰偄側偄帪偺傒峏怴
			dram_zanryou = tmp;													// 
	}

/* B0004 --->
	dramMode = (gu08_JOGGABLE << 1) | gu08_mode_ESP;	// 0 : JOG=OFF / 旕埑弅
														// 1 : JOG=OFF / ADPCM
														// 2 : JOG= ON / 旕埑弅
														// 3 : JOG= ON / ADPCM
*/
	dramMode = gu08_mode_ESP;
// B0004 <---

// POWER SAVE control mode0 (1/2:尭懍拞)======================
	if((gu08_PowersaveMode==0) && (aa_touch_f == 0))
	{	//MODE0 僞僀僾徣僄僱丂倃侾侾亅亜倃俀侽偵愗傝懼偊傞張棟
		//乮幚幙丄愙懕拞偵偟偐巆検尭傜側偄偼偢側偺偩偗傟偳傕乯
		// AA摓払屻偼嵞壛懍偟側偄丅
		if(tmp_timing == 2)	//娫堷偔丅枅夞幚峴偡傞傎偳偺張棟偱偼側偄
		{
			if(gu08_kind_SPEED == 1)
			{	//X1.1W
#if	ROM	// SDC 20050207
				if(dram_zanryou  < shoene_recoverpoint[ dramMode ][ gu08_kind_DRAM_SIZE ])	//DRAM庬椶暿暅婣億僀儞僩埲壓偵側偭偨偐丠
#else
				if(dram_zanryou  < shoene_recoverpoint[ dramMode ][ size ])	//DRAM庬椶暿暅婣億僀儞僩埲壓偵側偭偨偐丠
#endif
				{	//尭偭偰偒偨丅壛懍偡傞丅	
					DrvDSP_ctrlESP_speedUP();	//YTC006 20050106 -ROM
				}
			}
		}
	}


// WRITE control ================================
		switch ( gu08_sccd_ESPctrl )
		{
//  --------------- 
//      case    0:  //偁傝摼側偄丅俴俽俬俠俉侽側傜惗惉偟側偄偟丅
//          break;  //
//  --------------- Rclear,Wclear偐傜棴傔捈偟
//                      SKIP捈屻丄ESPoff->on偺擖傝岥
			case 1:			//弶婜壔
				esp_wqok = gu32_val_TargetFrame;	//尰嵼ATIME曐懚 SKIP偱嶌惉偟偨嬋愭摢傪棴崬奐巒偲偡傞
//				esp_wqok_track = stInfoArea.hexPlayTitleCD;
				esp_wqok_track = Common_Hex2BCD(stInfoArea.hexPlayTitleCD);	//BCD偱庴偗庢傞丅
//YTC006		gu08_sccd_ESPctrl++;
				gu08_sccd_ESPctrl=2;	//YTC006 20060106

//YTC A2x		debug_direct_count = 0;	//for DEBUG 20050303 攑婞
				n=0;	//YTC003 
//          break;  //懕偗偰丒丒丒
// --------------
//                  僄儔乕偱僄儞僾僥傿偟偨摍 esp_wqok偑掕媊嵪傒
			case 2:			//
				ESPMode = gu08_mode_ESP;		// 撪晹儌乕僪愗傝姺偊
				DrvDSP_ctrlESP_setPSMode();		//YTC005 20050104 撪晹儌乕僪愗傝懼偊偨傜丄僷儚乕僙乕僽儌乕僪傕愗傝懼偊傞

//          	esp_wqok=嵟屻偵棴崬傫偩強丅;
				ESP_bios_WRclear();		//YTC006 20050106

				matagi = 0;	//棴捈偡偺偱丄屪偓=0;

				gu08_esp_read_status = 0;	//
				esp_decode_green = 0;	//
				gu08_GotoMsfSC = 1;		/*  GotoMSF梫媮 */

				aa_touch_f = 0;			//
//YTC006		gu08_sccd_ESPctrl++;		//
				gu08_sccd_ESPctrl=3;		//YTC006 20050106

				break;

//  --------------- 棴傔崬傒奐巒埵抲傊偺傾僋僙僗
			case 3:
				if( gu08_GotoMsfSC == 0 )
				{	//埵抲弌偟廔椆
					//Write奐巒
					ESP_bios_Wstart();		//Wstart-ADPCM_4bit
//YTC003			n = 0;					//
					esp_decode_green = 0;	//
					retry_count = 0;		//
//YTC006			gu08_sccd_ESPctrl++;		//
					gu08_sccd_ESPctrl=4;		//YTC006 20050106
				}
				break;

//  --------------- 嵟弶偺倱倳倐俻捠夁懸偪
			case 4:
				if( gu08_sts_Subq_valid == VALID)
				{
//YTC003 			gu08_sccd_ESPctrl++;
					gu08_sccd_ESPctrl=50;	//YTC003
#if	ERR_DETECT	// SDC 20041218
					gu08_sts_DISPLAY = 1;									// 昞帵 enable
#endif
				}
				break;

//  --------------- 嵟弶偺倱倳倐俻捠夁懸偪丒彂偒崬傒奐巒妋擣
			case	50:	
				if((ctmp_fc2 & B01000000 ) == 0x00 )	//
				{	//棴崬巭傑偭偰傞
//					if(++n > 10)
					if(++n > 2)	//YTC00E 20050125 柍懯偵偑傫偽傜側偄丅
					{
						n=0;
						esp_wqok++;	//
						gu32_val_TargetFrame = esp_wqok;	//偮側偑傜側偐偭偨subq偺師偐傜棴捈偟
					
					}
					ESP_bios_Wstop();
					gu08_sccd_ESPctrl=2;	//YTC003 
				}
				else
				{	//棴傔崬傒巒傑偭偨
					n=0;
					gu08_sccd_ESPctrl=5;	//YTC003 廬棃偺棳傟偵
				}
				break;


//  --------------- 棴傔崬傒拞悤
			case 5:
				if((ctmp_fc2 & B01000000 ) == 0x00 )	//
				{	//棴崬巭傑偭偰傞
					if((ctmp_fc0 & B00000010) != 0)
					{	//儊儌儕乕僼儖偵傛傞彂偒崬傒掆巭
#if	1	// SDC 041226
#if	ROM	// SDC 20050207
					  if( shoene_recoverpoint[ dramMode ][ gu08_kind_DRAM_SIZE ] != OFF )
#else
					  if( shoene_recoverpoint[ dramMode ][ size ] != OFF )
#endif
					  {
#endif	// SDC 041226
						// POWER SAVE control mode0 (2/2:壛懍拞)======================
						if(gu08_PowersaveMode==0)	//Su_xxx
						{	//mode 0 clv speed down
							gu08_kind_SPEED = 1;	//
							gu08_scc_speed = 8;		//slowdown 梫媮丅
							gu08_sccd_ESPctrl = 20;	//嵞惗拞側傜僐僱僋僩張棟傊
							if(gu08_esp_read_status ==0)
							{	//壒弌偟偰側偄
								gu08_sccd_ESPctrl = 40;	//億乕僘拞側傜億乕僘張棟傊
							}
						}
						else
						{	//mode 1 servo off
							gu08_sccd_ESPctrl = 30;	//->僷儚乕僙乕僽 mode 1傊丅
						}
#if	1	// SDC 041226
					  } else {
						gu08_sccd_ESPctrl = 20;	//->愙懕張棟傊
					  }
#endif	// SDC 041226
					}
					else	
					{	//YFLAG偵傛傞棴傔崬傒掆巭
						//傑偨偼丄偦偺懠WRITE掆巭僐儅儞僪偵傛傞掆巭側偳丅
						
						gu08_sccd_ESPctrl = 20;	//->愙懕張棟傊
					}
					break;		//
				}

#if	1	// SDC 041224
				if( esp_decode_green && !(ctmp_fc2 & B00100000) )	// read stop
				{
					esp_decode_green = 0;							// 壒巭傑偭偰偄傞僙僢僩
					gu08_esp_read_status = 0;						// 壒弌偰側偄僙僢僩
					n = 0;											// valid countor reset
				}
#endif	// SDC 041224

				if( gu08_sts_Subq_valid )
				{	//subQ偲傟偨弰夞

					//YTC002 俤俽俹偵埵抲僘儗専弌婡擻傪捛壛丅Wstop偟偰丄師偺弰夞偱棴傔崬傒掆巭張棟傊
					if( stSubq_bcd.tno == LEAD_IN )
					{	//偢傟偰偨傜丄彂偒崬傒巭傔傞
						ESP_bios_Wstop();	//Wstop 
						break;
					}
					if(gu32_frame_atime < esp_wqok)
					{	//偢傟偰偨傜丄彂偒崬傒巭傔傞
						ESP_bios_Wstop();	//Wstop 
						break;
					}
					else if((gu32_frame_atime - esp_wqok) > 20)
					{	//偢傟偰偨傜丄彂偒崬傒巭傔傞
						ESP_bios_Wstop();	//Wstop 
						break;
					}

//					if( stSubq_bcd.tno != esp_wqok_track )
					if( stSubq_bcd.tno > esp_wqok_track )
					{	//僩儔僢僋僫儞僶乕愗傝懼傢偭偨

						if( matagi == 0 )
						{	//師偺嬋
							if( stSubq_hex.tno > 99 )
							{	//AA偵屪偄偱擖偭偰峴偭偨
								 ESP_bios_valid();		//VALID! YTC002 丠
								//esp_wqok = gu32_frame_atime;			//尰嵼埵抲
								//  esp_wqok_track = 0xAA;	//YTC002 

								//border (pickup)傪曬崘     //
								matagi     = //1;			//YTC00D 20050116 -ROM 柧帵揑偵//値;偭偰彂偔偐
								aa_touch_f = 1;				//
								gu08_sccd_ESPctrl = 6;		//傕偆棴傔側偄丅億乕僘

								if(gu08_kind_SPEED != 0)	//MODE0,1娭學側偔丄AA専弌偟偨傜X1W
								{
									gu08_kind_SPEED = 1;	
									gu08_scc_speed = 8;		//slowdown 梫媮丅
								}

								if( esp_decode_green == 0 )
								{
									//傑偩壒弌偟偰偄側偄側傜偽丄弌偡
									esp_decode_green = 1;
								}
							}
							else
							{	//傆偮偆偵n->n+1
								ESP_bios_valid();		//VALID!
								//esp_wqok = gu32_frame_atime;			//尰嵼埵抲
								//esp_wqok_track = stSubq_bcd.tno;		//

								//border (pickup)傪曬崘     //
								matagi = 1;	//

								if( n < 4 )
									n++;
								else
									esp_decode_green = 1;
							}
						}
						else
						{		//師偺師偺嬋偼棴傔崬傑側偄丅
							//wrie stop傪偐偗偰丄屪偓夝徚偟偨傜愙懕張棟傊
							ESP_bios_Wstop();	//Wstop 
							gu32_val_TargetFrame = esp_wqok;		//
							gu08_GotoMsfSC = 1;					
							//matagi=1;                 			//
							gu08_sccd_ESPctrl = 7;					//
							break;
						}
					}
					else
					{			//慜夞偲摨偠僩儔僢僋
						ESP_bios_valid();		//VALID!
						//esp_wqok = gu32_frame_atime;
						//esp_wqok_track = stSubq_bcd.tno;
						if( n < 4 )
							n++;
						else
							esp_decode_green = 1;
					}
				}				//subQ庢傟偨弰夞
				break;

//  --------------- 棴崬廔椆
			case 6:			//俙俙埵抲偱億乕僘丅
				if( gu08_GotoMsfSC == 0 )
					gu08_GotoMsfSC = 1;	//pause 
				break;

//  --------------- 嬋屪偓夝徚懸偪
			case 7:			//read偑恑傫偱丄嬋屪偓夝徚偡傞傑偱懸偮
				if( matagi == 0 )
				{	//READcontrol偑儅乕僋僠僃僢僋偡傞丅
					//嬋屪偓夝徚    
					gu08_sccd_ESPctrl = 20;	//愙懕張棟傊
				}
				else
				{
					if( gu08_GotoMsfSC == 0 )
					{
						gu08_GotoMsfSC = 1;	//pause 
					}
				}
				break;

//  --------------- 彂崬宯^^^
//  --------------- 愙懕宯vvv
//  --------------- 嬻偒懸偪
			case 20:
//				dram_zanryou = get_mp3reg_zanryo(  );	//
				if( ( gl_buff_max - dram_zanryou ) > ( unsigned long ) ( 2363 * 32 ) )
				{	//2sector暘埲忋偺嬻偒僄儕傾偁傝         
					gu32_val_TargetFrame = esp_wqok - 2;	//2偙庤慜
					gu08_GotoMsfSC = 1;
//YTC006			gu08_sccd_ESPctrl++;
					gu08_sccd_ESPctrl = 21;	//YTC006
				}
				break;
//  --------------- 僺僢僋堏摦
			case 21:
				if( gu08_GotoMsfSC == 0 )
				{				//拝抧偟偨
					if( !retry_count )
						DrvDSP_BIOS_WriteRegMP3( 0x02, 0x80 );
					else if( retry_count <= 4 )
						DrvDSP_BIOS_WriteRegMP3( 0x02, 0x80 | ( retry_count - 1 ));

					Common_Wait_ms( 1 );
//YTC006			gu08_sccd_ESPctrl++;
					gu08_sccd_ESPctrl = 22;	//YTC006 -ROM
				}
				else
				{	//僺僢僋堏摦幚峴拞丅
//YTC003 20041231 No302
					if( ( ctmp_fc2 & B00100000 ) == 00 )
					{
						//拝抧慜偵壒巭傑偭偨丒丒丒棴捈偟    Wclear,Rclear偐傜傗傝捈偡丅 嵞惗愊嶼帪娫晄梫偩偟
						if( gu08_esp_read_status != 0 )
						{
							DrvDSP_Mute_Soft(  );
						}
						ESP_bios_Rstop();		//READstop
						ESP_bios_Wstop();
						dram_zanryou =0L;	//YTC003
						gu08_esp_read_status = 0;	//壒巭忬懺
						esp_decode_green = 0;		//桳岠壒僨乕僞柍偟
						esp_wqok +=4;	//偪傚偭偲屄幪偰傞丅
						gu32_val_TargetFrame = esp_wqok;	//偮側偑傜側偐偭偨subq偺師++偐傜棴捈偟
						gu08_sccd_ESPctrl = 2;
					}
				}
				break;
//  --------------- 僐僱僋僩姰椆懸偪
			case 22:
				if( ( ctmp_fc2 & B10000000 ) == 00 )
				{				//connect ok!
					retry_count = 0;
					gu08_sccd_ESPctrl = 5;
				}
				else
				{
//YTC003 
					if( ( ctmp_fc2 & B00100000 ) == 00 )
					{
						//拝抧屻丄愙懕姰椆慜偵壒巭傑偭偨丒丒丒棴捈偟	//YTC003 20041231
						if( gu08_esp_read_status != 0 )
						{
							DrvDSP_Mute_Soft(  );
						}
						ESP_bios_Rstop();		//READstop
						ESP_bios_Wstop();
						dram_zanryou =0L;	//YTC003
						gu08_esp_read_status = 0;	//壒巭忬懺
						esp_decode_green = 0;		//桳岠壒僨乕僞柍偟
						esp_wqok +=4;	//偪傚偭偲屄幪偰傞丅
						gu32_val_TargetFrame = esp_wqok;	//偮側偑傜側偐偭偨subq偺師++偐傜棴捈偟
						gu08_sccd_ESPctrl = 2;
						break;
					}

//YTC003 20041231
//					if( gu08_esp_read_status != 0 )
//					{			//壒弌偟偰偄傞
//						if( ( ctmp_fc2 & B00100000 ) == 00 )
//						{
//							//拝抧屻丄愙懕姰椆慜偵壒巭傑偭偨丒丒丒棴捈偟	//YTC003 20041231

⌨️ 快捷键说明

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