亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? atams_processor.c

?? 飛思卡爾MC9S12uf32的一些實用驅動程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
						if (gUSBMSCSWResult)
							break;
					}
				}

				if (!gUSBMSCSWResult)					// no error
				{
					while (mCheckBit(DBEIF,QC34DSR)==0);// wait for last data to send out
					gUSBMSCSWResult = ATA_WaitATABusy();
				}
				QCDCT34 = 0;							// indicate all data xfered
			}
			else
				QCDCT34 = 1;							// indicate not all data xfered

			gATALBA += Block;
		}
		while (Block16 && !gUSBMSCSWResult);


	}
	mUSBSetBit(SNAK,UEPCSR4A);						// disable USB tx
	mSetBit(QnEN,QC1CR);									// enable QC1
	QC1REQ	= kQCREQUSBRx;								// USB Rx
	mClearBit(QnEN,QC4CR);								// disable QC4
	QC4REQ	= kQCREQNone;									// map to non existing resource
	mSetBit(QnPRST,QC3CR);								// reset QC3
	mSet2Bit(DRHE,DTHE,QC34DTR);					// enable force handshake
	mClearBit(QnTHRU,QC3CR);							// disable QC34 passthrough mode

	if (!QCDCT34)													// if all data tx out
		USBMS_SendCSW();
	else	
		USBMS_SetPhyEP5Int(0);							// short packet
}


// ==================================================================
//   SCSILIST2A() -
//
//     Write
//
// ==================================================================
void ATAMS_SCSIList2A()
{
	muint32 i;
	muint16	j;
	muint8	Block;
	muint32	*pLBA;
	muint16	*pBlock16,Block16;

	mClearBit(kLED1Pin,kLED1Port);

	pLBA 	= (muint32*) (gpbCBWPacket+kSCSI10LBAByte3);
	gATALBA 	= *pLBA;
	pBlock16 	= (muint16*) (gpbCBWPacket+kSCSI10XferLength1);
	Block16 	= *pBlock16;

	mUSBClearBit(USBTCIE,UEPCSR4A);			// disable Xfer complete int
	mSetBit(QnPRST,QC1DR);							// reset QC1
	mSetBit(CH12DBE,IQUECR);						// QC12 double buffer
	mSetBit(DBRST,QC12DCR);							// reset QC12 double buffer

//	DisableInterrupts;
	if (mCheckBit(bitATAUDMAMode,gATAStatus))	// UDMA mode
	{

		mClearBit(QnEN,QC3CR);						// disable QC3
		QC3REQ	= kQCREQNone;							// remap to non-exisiting resources
		mSetBit(QnEN,QC2CR);							// enable QC2
		QC2REQ	= kQCREQATATx;						// QC2 = ATA Tx
		mClear2Bit(DRHE,DTHE,QC12DTR);		// disable QC12 force handshake
		mSetBit(QnTHRU,QC1CR);						// QC12 passthrough mode

		do
		{
			if (Block16 & 0xFF00)						// Block > 0xff
			{
				Block = 0xff;
				Block16 -= 0xff;
			}
			else
			{
				Block = (muint8) Block16;
				Block16 = 0;
			}

			gUSBMSCSWResult = ATA_LBAATACommand(Block,kATACmdWriteDMA);
			
			if (!gUSBMSCSWResult)				// no error found
			{

		mUSBClearBit(SNAK,UEPCSR4A);	// enable USB receive

//				Block = *(gpbCBWPacket+kSCSI10XferLength0);
				QCDCT12 = Block;

				if (gUSBFullSpeed)				// full speed
				{
					for (j=0; j<8; j++)
					{
						gUSBMSCSWResult = USBMS_WaitIQUEwithATAIRQ(&QCDCT12);
						if (gUSBMSCSWResult)	// error found
							break;
						QCDCT12 = Block;
					}
					QCDCT12 = 0;		
				}
				else							// high speed
					gUSBMSCSWResult = USBMS_WaitIQUEwithATAIRQ(&QCDCT12);
			}
			gATALBA += Block;
		}
		while (Block16 && !gUSBMSCSWResult);	

		if (!QCDCT12)					// all data xfered
			gUSBMSCSWResult = ATA_WaitATABusy();	// get error including CRC
		else
			mUSBSetBit(STALL,UEPCSR4A);		// stall EP4

//	EnableInterrupts;

		mUSBSetBit(SNAK,UEPCSR4A);		// disable USB receive
		mSetBit(DBRST,QC12DCR);				// reset QC12 double buffer
		mClearBit(CH12DBE,IQUECR);			// set QC12 single buffer
		mClearBit(QnEN,QC2CR);				// disable QC2
		QC2REQ	= kQCREQNone;				// remap QC2 to unused area
		mSetBit(QnPRST,QC1CR);				// reset QC1
		mClearBit(QnTHRU,QC1CR);			// not passthrough
	}
	
	else										// PIO mode
	{
		do
		{
			if (Block16 & 0xFF00)						// Block > 0xff
			{
				Block = 0xff;
				Block16 -= 0xff;
			}
			else
			{
				Block = (muint8) Block16;
				Block16 = 0;
			}

			gUSBMSCSWResult = ATA_LBAATACommand(Block,kATACmdWrite);

			if (!gUSBMSCSWResult)					// no error found
			{
				mUSBClearBit(SNAK,UEPCSR4A);		// enable receive

				for (i=0; i<( (muint16) Block <<kOneByte);i)	// get data
				{
					while (!(QC12DSR & 0x03));		// wait while DBSF == 0

					for (j=0; j<gUSBPacketSize; j++)
					{
						i++;
						ATA_DDR = QC1DR;			// write to ATA
						if (ATA_WaitRegBusy())			
							break;					// error found	

					}
					mSetBit(TXDA, QC12DTR);					// Set Transmit acknowledge
					gUSBMSCSWResult = ATA_WaitATABusy();
					if (gUSBMSCSWResult)
						break;
				}
				if (!gUSBMSCSWResult)
					gUSBMSCSWResult = ATA_WaitATABusy();
			}		
			gATALBA += Block;
		}
		while (Block16 && !gUSBMSCSWResult);	

	}

	USBMS_SendCSW();
}

void ATAMS_SCSIList2F()
{
	gUSBMSCSWResult = 0;
	USBMS_SendCSW();
}

muint8 USBMS_WaitIQUE(volatile muint8* QCxxDCR)
{
	muint16 BegTime, CurTime;

	BegTime = MK_GetCurrentTime();		// begin time

	do
	{
	    if (!*QCxxDCR)
	    	return(kCSWPass);			// exit 
	    	
		CurTime = MK_GetCurrentTime();	// current time
	}
	while ( ((CurTime-BegTime) < kATATimeout) || ((BegTime - CurTime) < kATATimeout));

	gATAError = kSCSISKHardwareError;
	mSetBit(ATAHUT,ATA_DCR_L);
	return(kCSWPhaseError);				// timeout => phase error
}

muint8 USBMS_WaitIQUEwithATAIRQ2(volatile muint8* QCxxDCR)
{
	muint16 BegTime, CurTime;


	BegTime = MK_GetCurrentTime();		// begin time
	do
	{
//	    if ((!*QCxxDCR) && mCheckBit(ATAINTRQ,PORTS))
    if (!*QCxxDCR)
    	return(kCSWPass);			// exit if finish transfer
	    	
		if (mCheckBit(ATAINTRQ,PORTS) && (*QCxxDCR > 2) && (!mCheckBit(6,PORTS)))
		{	
			mSetBit(ATAHUT,ATA_DCR_L);
			return (kCSWFailed);
		}	
		CurTime = MK_GetCurrentTime();	// current time

	}
	while ( ((CurTime-BegTime) < kATATimeout) || ((BegTime - CurTime) < kATATimeout));

	mSetBit(ATAHUT,ATA_DCR_L);
	gATAError = kSCSISKHardwareError;
	return(kCSWPhaseError);				// timeout => phase error
}


muint8 USBMS_WaitIQUEwithATAIRQ(volatile muint8* QCxxDCR)
{
	muint16 BegTime, CurTime;


	BegTime = MK_GetCurrentTime();		// begin time
	do
	{
    if (!*QCxxDCR)
    	return(kCSWPass);			// exit if finish transfer
	    	
		if (mCheckBit(ATAINTRQ,PORTS) && (!mCheckBit(6,PORTS)))
		{	
			mSetBit(ATAHUT,ATA_DCR_L);
			return (kCSWFailed);
		}	
		CurTime = MK_GetCurrentTime();	// current time

	}
	while ( ((CurTime-BegTime) < kATATimeout) || ((BegTime - CurTime) < kATATimeout));

	mSetBit(ATAHUT,ATA_DCR_L);
	gATAError = kSCSISKHardwareError;
	return(kCSWPhaseError);				// timeout => phase error
}


/*
muint8 USBMS_WaitIQUEwithATAIRQ(volatile muint8* QCxxDCR)
{

//	mSetBit(mCheckTimeoutStart,gATATimeoutStatus);
	muint16	i,j;

	DisableInterrupts;
	for (i=0; i<0x1000; i++)
	{
		for (j=0; j<0x4000; j++)
		{

			if ( ((QC12DSR & QC1BP_H & 0x01)) && (*QCxxDCR > 1) )
			{
				while (QC1BP_L < 0xe0)
				{
					if (!mCheckBit(4,PORTS))			// no USB power
					break;
				}
	
				QC2REQ = kQCREQNone;
			}
		

			if (!mCheckBit(4,PORTS))			// no USB power
				UTL_CheckBusPower();
		
			if ( ((QC12DSR & 0x03) == 2) || (*QCxxDCR == 1))
				QC2REQ = kQCREQATATx;
			
			else if (mCheckBit(TFRERR, UEPCSR4B))
				UEPCSR4B = (1<<TFRERR);				// clear error flag

	    else if (!*QCxxDCR)
	    {
	    	EnableInterrupts;
	    	return(kCSWPass);			// exit if finish transfer
	    }
		    	
			else if (mCheckBit(ATAINTRQ,PORTS) && (*QCxxDCR) && (!mCheckBit(6,PORTS)))
			{	
				mSetBit(ATAHUT,ATA_DCR_L);
	    	EnableInterrupts;

				if (*QCxxDCR == 1)
					return(kCSWPass);
				
				asm nop;
				return (kCSWFailed);
			}	

		}
	}
	EnableInterrupts
	mSetBit(ATAHUT,ATA_DCR_L);
	gATAError = kSCSISKHardwareError;
	return(kCSWPhaseError);				// timeout => phase error
}
*/
//
// The end of file usbmb_processor.c 
// *********************************************************************************

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本最新不卡在线| 欧美日韩免费视频| 欧美日韩国产一级片| xnxx国产精品| 亚洲最大的成人av| 国产一区二区在线视频| 欧美日韩另类国产亚洲欧美一级| 久久精品人人做人人综合| 亚洲无人区一区| jlzzjlzz国产精品久久| 欧美不卡在线视频| 午夜视频久久久久久| 91九色02白丝porn| 国产精品成人在线观看| 毛片av中文字幕一区二区| 色女孩综合影院| 国产精品每日更新| 国产精品影音先锋| 日韩女优av电影| 日韩高清不卡一区| 欧美日韩精品专区| 亚洲一二三四在线观看| 91亚洲永久精品| 国产精品妹子av| 大美女一区二区三区| 久久久国产精品麻豆| 麻豆精品在线播放| 欧美一区二区三区影视| 天堂午夜影视日韩欧美一区二区| 欧美性大战久久久久久久| 亚洲男同1069视频| 欧美在线视频不卡| 亚洲一区中文日韩| 欧美肥妇free| 日本美女一区二区| 精品盗摄一区二区三区| 久久国产精品72免费观看| 欧美一区二区在线不卡| 麻豆专区一区二区三区四区五区| 9191精品国产综合久久久久久| 亚洲一区二区免费视频| 欧美日韩免费高清一区色橹橹| 日韩高清不卡一区二区| 日韩欧美在线影院| 国产精品一区二区在线观看网站 | 欧美videossexotv100| 日韩电影在线观看网站| 日韩欧美中文一区| 国产99久久久国产精品| 自拍偷拍亚洲综合| 欧美日韩免费不卡视频一区二区三区| 日韩精品一二三区| 精品粉嫩aⅴ一区二区三区四区| 国产激情视频一区二区三区欧美 | 日韩黄色一级片| 欧美成人aa大片| 成人国产在线观看| 亚洲男帅同性gay1069| 欧美日韩成人在线| 精品在线免费观看| 国产精品乱人伦| 欧美日韩一级二级| 国产露脸91国语对白| 1024国产精品| 制服丝袜成人动漫| 成人va在线观看| 香蕉久久一区二区不卡无毒影院| 日韩欧美国产三级| 91麻豆国产自产在线观看| 另类中文字幕网| 国产精品另类一区| 欧美一区二视频| 一本久久精品一区二区| 极品瑜伽女神91| 一区二区三区四区激情| 久久综合色8888| 色88888久久久久久影院按摩 | 91小视频免费观看| 青青草一区二区三区| 椎名由奈av一区二区三区| 欧美sm美女调教| 色婷婷精品大在线视频| 国产在线看一区| 天天色综合成人网| 亚洲欧洲美洲综合色网| 91麻豆精品国产91久久久资源速度 | 91免费在线视频观看| 久草在线在线精品观看| 亚洲欧洲一区二区在线播放| 精品国产一区二区三区忘忧草| 一本一本大道香蕉久在线精品| 精品一区二区在线视频| 五月激情丁香一区二区三区| 亚洲欧洲成人精品av97| 久久色在线视频| 欧美一区二区三区视频免费播放| jizzjizzjizz欧美| 国产成人一级电影| 九九视频精品免费| 日产精品久久久久久久性色| 一区二区三区日韩欧美精品| 亚洲欧洲日产国码二区| 国产精品午夜春色av| 久久蜜桃香蕉精品一区二区三区| 欧美人与z0zoxxxx视频| 欧美中文字幕一区二区三区亚洲 | 国产美女主播视频一区| 日韩电影免费一区| 午夜精品视频在线观看| 亚洲国产人成综合网站| 亚洲精品欧美二区三区中文字幕| 中文字幕国产精品一区二区| 国产欧美综合在线观看第十页 | 国产精品99久久久久久宅男| 美女一区二区久久| 免费久久精品视频| 美女网站色91| 国产原创一区二区三区| 国产精品一区一区| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 亚洲一区二区三区在线| 一个色综合网站| 亚洲精品第1页| 亚洲国产乱码最新视频| 亚洲国产精品人人做人人爽| 亚洲图片自拍偷拍| 麻豆精品在线播放| 国产一区二区女| 成人动漫视频在线| 日本高清不卡在线观看| 欧美精品一二三区| 日韩视频永久免费| 亚洲国产精品二十页| 一区视频在线播放| 图片区小说区区亚洲影院| 日韩精品久久久久久| 久久成人免费日本黄色| 国产成人精品一区二区三区四区| 99久久精品情趣| 欧美福利一区二区| 久久综合九色综合欧美98| 国产免费久久精品| 亚洲国产成人高清精品| 久久精品久久久精品美女| 成人一区在线看| 欧美无砖砖区免费| 26uuu国产在线精品一区二区| 日本一区二区成人在线| 亚洲一区中文日韩| 国产乱人伦精品一区二区在线观看| 9久草视频在线视频精品| 欧美日韩一区二区三区高清| 久久综合色天天久久综合图片| 亚洲三级电影网站| 奇米一区二区三区| 99re这里只有精品视频首页| 欧美一区二区在线免费观看| 亚洲国产高清在线| 日韩国产高清在线| 99久久99久久精品免费观看| 日韩欧美三级在线| 一区二区成人在线观看| 激情亚洲综合在线| 欧美最猛性xxxxx直播| 久久看人人爽人人| 亚洲超碰97人人做人人爱| 国产精品一级片在线观看| 欧美日韩色一区| 国产精品欧美精品| 裸体在线国模精品偷拍| 日本久久电影网| 欧美经典三级视频一区二区三区| 亚洲一区二区三区三| 成人高清av在线| 久久久99精品久久| 免费看精品久久片| 欧美午夜精品久久久久久孕妇| 国产免费观看久久| 韩国女主播一区| 91精品国产高清一区二区三区 | 5月丁香婷婷综合| 亚洲美女在线国产| 不卡av电影在线播放| 国产午夜精品美女毛片视频| 免费观看在线色综合| 欧美日韩一二区| 亚洲自拍欧美精品| 色狠狠色狠狠综合| 亚洲欧美日本在线| 色又黄又爽网站www久久| 中文字幕字幕中文在线中不卡视频| 国产精品99久久不卡二区| 日韩一区二区在线播放| 天天综合色天天| 911国产精品| 老鸭窝一区二区久久精品| 这里只有精品99re| 美国十次综合导航| 久久精品网站免费观看| 懂色av中文字幕一区二区三区 |