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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? atams_processor.c

?? 飛思卡爾MC9S12uf32的一些實(shí)用驅(qū)動(dòng)程序
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
/******************************************************************************
*                                                  
*  (c) copyright Freescale Semiconductor Hong Kong Ltd 2004
*  ALL RIGHTS RESERVED
*                                                                       
*******************************************************************************  
** THIS  CODE IS ONLY INTENDED AS AN EXAMPLE FOR DEMONSTRATING THE FREESCALE **
** MICROCONTROLLERS.  IT  HAS ONLY BEEN GIVEN A MIMIMUM LEVEL OF TEST. IT IS **
** PROVIDED  'AS  SEEN'  WITH  NO  GUARANTEES  AND  NO  PROMISE  OF SUPPORT. **
*******************************************************************************  
*                                                                           
* FILE:        atams_processor.c	 REVISION 0.1
*  
* DESCRIPTION: This module handles the ATA Mass Storage applicaton tasks for 
*              the system
*
* NOTES:       All modules remain at their reset addresses
*                                                  
* UPDATED HISTORY:
*
* REV   YYYY.MM.DD  AUTHOR        DESCRIPTION OF CHANGE
* ---   ----------  ------        --------------------- 
* 0.0   2003.06.27  Derek Lau     Initial version
* 0.1   2004.04.08  Derek Lau			Demo version
*
******************************************************************************/                                                                        
/* Freescale  is  not  obligated  to  provide  any  support, upgrades or new */
/* releases  of  the Software. Freescale may make changes to the Software at */
/* any time, without any obligation to notify or provide updated versions of */
/* the  Software  to you. Freescale expressly disclaims any warranty for the */
/* Software.  The  Software is provided as is, without warranty of any kind, */
/* either  express  or  implied,  including, without limitation, the implied */
/* warranties  of  merchantability,  fitness  for  a  particular purpose, or */
/* non-infringement.  You  assume  the entire risk arising out of the use or */
/* performance of the Software, or any systems you design using the software */
/* (if  any).  Nothing  may  be construed as a warranty or representation by */
/* Freescale  that  the  Software  or  any derivative work developed with or */
/* incorporating  the  Software  will  be  free  from  infringement  of  the */
/* intellectual property rights of third parties. In no event will Freescale */
/* be  liable,  whether in contract, tort, or otherwise, for any incidental, */
/* special,  indirect, consequential or punitive damages, including, but not */
/* limited  to,  damages  for  any loss of use, loss of time, inconvenience, */
/* commercial loss, or lost profits, savings, or revenues to the full extent */
/* such  may be disclaimed by law. The Software is not fault tolerant and is */
/* not  designed,  manufactured  or  intended by Freescale for incorporation */
/* into  products intended for use or resale in on-line control equipment in */
/* hazardous, dangerous to life or potentially life-threatening environments */
/* requiring  fail-safe  performance,  such  as  in the operation of nuclear */
/* facilities,  aircraft  navigation  or  communication systems, air traffic */
/* control,  direct  life  support machines or weapons systems, in which the */
/* failure  of  products  could  lead  directly to death, personal injury or */
/* severe  physical  or  environmental  damage  (High  Risk Activities). You */
/* specifically  represent and warrant that you will not use the Software or */
/* any  derivative  work of the Software for High Risk Activities.           */
/* Freescale  and the Freescale logos are registered trademarks of Freescale */
/* Semiconductor Inc.                                                        */ 
/*****************************************************************************/


#include	"UF32reg.h"			// Get the UF32 registers.
#include	"usbms_includes.h"	// Get USB Mass Storage 
#include	"usb_extern.h"
#include	"usb_includes.h"
#include	"ata_includes.h" 
#include	"ata_extern.h"
#include 	"app_extern.h"
#include	"mk_extern.h"
#include	"usbms_extern.h"	// Get USB Mass Storage global prototypes
#define _ATA_SCSILIST_EXTERN_G_DECL_
#include	"atams_scsilist.h"


// code is placed in the main code area.
#pragma CODE_SEG	DEFAULT

// ==================================================================
//   SCSILIST00() -
//
//     Test Unit Ready
//
// ==================================================================

void ATAMS_SCSIList00(/*msSCSIMessage	*myEventMsg*/)
{
	if (!gUSBMSDeviceReady[HARDISK])
	{
		USBMS_SCSINotSupport();
		return;
	}

	gUSBMSCSWResult = kCSWPass;
	USBMS_SendCSW();
}


// ==================================================================
//   SCSILIST03() -
//
//     Request Sense
//
// ==================================================================
void ATAMS_SCSIList03()
{
	muint16 zero;

	zero = 0;
	if (gUSBMSDeviceReady[HARDISK])
		gUSBMSSenseKey[HARDISK] = (muint16) gATAError << 8;
		
	mSetBit(QnPRST, QC3CR);
	QC3DR 	 = 0x7000;										// error code 	/ segment number
	QC3DR = gUSBMSSenseKey[HARDISK];
	QC3DR = zero;												// information	/ information
	QC3DR = 0x000a;												// information 	/ additional sense length	
	QC3DR = zero;												// command specific information
	QC3DR = zero;												// command specific informaton
	QC3DR = gUSBMSAddSenseKey[HARDISK];// Add sense key/ add sense code qualifier
	QC3DR = zero;
	QC3DR = zero;
	gUSBMSCSWResult = kCSWPass;
	USBMS_SetPhyEP5Int1(*(gpbCBWPacket+kCBWXferLength0),0x12);
}


// ==================================================================
//   SCSILIST12() -
//
//     Inquiry
//
// ==================================================================
void ATAMS_SCSIList12(void)
{
	muint16 *pBuffer;
	muint8 i;
	
	const char S[] = "FSL_UF32 ATA Device";	// Vendor Identification 8 bytes
	pBuffer = (muint16 *) 0x2400;

	QC3DR	= 0x0000;					// fixed Hardisk	
	QC3DR = 0x0002;					// SCSI 2 compatible
	QC3DR = 0x1f00;					// addition length = 31
	QC3DR = 0x0000;					// reserved

	if (gUSBMSDeviceReady[HARDISK])
	{
		gUSBMSCSWResult = ATA_SCSIInquiry(pBuffer);		
	}
	else
	{
		pBuffer = (muint16 *) &S[0];
		for (i=0; i<14; i++)
		{
			QC3DR = *pBuffer++;
		}
		gUSBMSCSWResult = kCSWPass;	
	}
	
	USBMS_SetPhyEP5Int1(*(gpbCBWPacket+kCBWXferLength0),0x24);
}




// ==================================================================
//   SCSILIST25() -
//
//     Read Capacity
//
// ==================================================================

void ATAMS_SCSIList25()
{
	muint8 *pBuffer;
	pBuffer = (muint8 *) 0x2400;

	if (!gUSBMSDeviceReady[HARDISK])
	{
		USBMS_SCSINotSupport();
		return;
	}
		
	mSetBit(QnPRST, QC3CR);
	gUSBMSCSWResult = ATA_SCSIReadCapacity(pBuffer);
	USB_Move2QUE3(pBuffer,8);		
	USBMS_SetPhyEP5Int(8);

}


// ==================================================================
//   SCSILIST28() -
//
//     Read
//
// ==================================================================
void ATAMS_SCSIList28()
{
	muint32	i;
	muint16 j,data,dummy;
	muint8	Block;
	muint32	*pLBA;
	muint16	*pBlock16,Block16;

	if (!gUSBMSDeviceReady[HARDISK])
	{
		USBMS_SCSINotSupport();
		return;
	}

	mClearBit(kLED1Pin,kLED1Port);
	pLBA 	= (muint32*) (gpbCBWPacket+kSCSI10LBAByte3);
	gATALBA 	= *pLBA;
	pBlock16 	= (muint16*) (gpbCBWPacket+kSCSI10XferLength1);
	Block16 	= *pBlock16;

	mSetBit(DBRST,QC34DCR);						// reset QC34 double buffer
	mSetBit(QnTHRU,QC3CR);						// QC34 pass through mode
	mClearBit(QnEN,QC1CR);						// disable QC1
	QC1REQ	= kQCREQNone;							// remap QC1 to mon-existing resources
	QC4REQ	= kQCREQATARx;						// ATA receive
	mClear2Bit(DRHE,DTHE,QC34DTR);		// disable force handshake

	mUSBClearBit(USBTCIE,UEPCSR5A);				// disable PhyEP5 Xfer complete int
//	block = *(gpbCBWPacket+kSCSI10XferLength0);

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

		do
		{
			if (Block16 & 0xFF00)			// Block > 0xff
			{
				Block = 0xff;
				Block16 -= 0xff;
			}
			else
			{
				Block = (muint8) Block16;
				Block16 = 0;
			}
			
			gUSBMSCSWResult = ATA_LBAATACommand(Block,kATACmdReadDMA);
			QCDCT34 = Block;

	
			if (!gUSBMSCSWResult)					// no error found
			{

				USBMS_SetPhyEP5(gUSBPacketSize*2);	// set USB buffer size

				if (gUSBFullSpeed)					// full speed
				{
					for (j=0; j<8; j++)				
					{	
						if (USBMS_WaitIQUEwithATAIRQ2(&QCDCT34))
						{
							gUSBMSCSWResult = kCSWPhaseError;
							break;
						}	
						QCDCT34 = Block;
					}
					if (!gUSBMSCSWResult)			// no error found
						QCDCT34 = 0;				// indicate all data xfered

				}

				if (Block > 0x80)
					asm nop

				else								// high speed
				{
					if (USBMS_WaitIQUEwithATAIRQ2(&QCDCT34))
						gUSBMSCSWResult = kCSWPhaseError;
				}
		
				if (!QCDCT34)						// if all data xfered
					gUSBMSCSWResult = ATA_WaitATABusy();
			}
			
			gATALBA += Block;
		}
		while (Block16 && !gUSBMSCSWResult);
		
		if (gUSBFullSpeed)
			QC3CR	= (1<<QnEN)+(1<<QnSML)+(1<<Qn16EN)+(1<<QnPRST);	// 16 byte block mode
		else
			QC3CR	= (1<<QnEN)+(1<<Qn16EN)+(1<<QnPRST);			// 256 byte block mode
	}
	
	else											// PIO mode
	{
		do
		{
			if (Block16 & 0xFF00)			// Block > 0xff
			{
				Block = 0xff;
				Block16 -= 0xff;
			}
			else
			{
				Block = (muint8) Block16;
				Block16 = 0;
			}


			gUSBMSCSWResult = ATA_LBAATACommand(Block,kATACmdRead);

			if (!gUSBMSCSWResult)
			{
				USBMS_SetPhyEP5(gUSBPacketSize*2);			// set USB buffer size
				for (i=0; i< (muint16) Block<<kOneByte;i)			// get data
				{
					for (j=0; j<gUSBPacketSize; j++)
					{
						i++;
						dummy = ATA_DDR;
						(void) ATA_WaitRegBusy();
						data = ATA_DDR;
						QC3DR = data;
					}
					mSetBit(RXDA, QC34DTR);				// Set Receive acknowledge
					while ((QC34DSR & 0x03) == 2);	// wait while both buffer are full

					if ((i & 0x00ff) == 0)
					{
						gUSBMSCSWResult = ATA_WaitATABusy();

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲三级免费电影| 日韩视频免费观看高清完整版在线观看 | 国产一区不卡精品| 久久综合九色综合欧美98| 国产一区三区三区| 亚洲国产精品黑人久久久| 国产精品小仙女| 国产精品私人自拍| 99久久综合狠狠综合久久| 中文字幕佐山爱一区二区免费| 99re66热这里只有精品3直播| 国产精品久久久久久久久免费樱桃| av电影在线观看不卡| 夜夜夜精品看看| 91精品欧美综合在线观看最新| 麻豆一区二区99久久久久| 久久精品日韩一区二区三区| 99久久久精品| 日日摸夜夜添夜夜添精品视频| 日韩精品影音先锋| www.在线成人| 日日摸夜夜添夜夜添国产精品 | 国产传媒欧美日韩成人| 久久蜜臀精品av| 国产福利精品一区二区| 国产精品家庭影院| 91丨porny丨在线| 亚洲狠狠爱一区二区三区| 在线观看国产日韩| 视频在线观看一区| 久久新电视剧免费观看| 不卡av免费在线观看| 亚洲视频电影在线| 欧美精品视频www在线观看| 日本免费新一区视频| 久久久精品国产免费观看同学| www.亚洲在线| 日本美女一区二区三区视频| 久久久久国产精品免费免费搜索| 成人综合在线视频| 樱花草国产18久久久久| 制服丝袜亚洲网站| 国产成人午夜99999| 一区二区三区高清不卡| 日韩三级精品电影久久久| 国产乱码精品一区二区三| 亚洲免费电影在线| 精品免费日韩av| 91丨porny丨国产| 奇米精品一区二区三区在线观看一| 欧美精品一区二区三区视频| 91视频在线观看免费| 琪琪一区二区三区| **欧美大码日韩| 日韩一级完整毛片| a级精品国产片在线观看| 亚洲色图视频网站| 欧美变态tickling挠脚心| 欧洲精品一区二区| 国产精品一级片| 日韩和欧美一区二区三区| 亚洲桃色在线一区| 26uuu另类欧美| 欧美无人高清视频在线观看| 国产精品香蕉一区二区三区| 丝袜美腿亚洲一区| 亚洲精品中文字幕乱码三区| 亚洲精品一线二线三线| 欧美性xxxxxxxx| 丁香激情综合五月| 久久国产精品99久久人人澡| 夜夜揉揉日日人人青青一国产精品| 久久综合九色综合欧美98| 69堂成人精品免费视频| av一二三不卡影片| 成人高清视频免费观看| 紧缚捆绑精品一区二区| 五月激情综合婷婷| 亚洲精品国产一区二区精华液 | 337p日本欧洲亚洲大胆色噜噜| 欧美在线观看一区二区| 91香蕉视频污在线| 国产精品18久久久久久久网站| 日韩电影网1区2区| 五月婷婷综合网| 亚洲视频精选在线| 亚洲欧美激情视频在线观看一区二区三区| 日韩欧美一区二区视频| 666欧美在线视频| 欧美视频在线观看一区二区| 99九九99九九九视频精品| 成人小视频免费观看| 国产精品资源在线看| 国产在线一区二区| 国产一区二区三区在线观看免费| 视频一区在线视频| 免播放器亚洲一区| 青青草国产成人99久久| 久久成人免费网| 久久国产精品区| 国产精品原创巨作av| 国产一区999| 成人av网址在线| 91无套直看片红桃| 不卡的av网站| 99精品国产视频| 欧美网站大全在线观看| 欧美老年两性高潮| 日韩欧美aaaaaa| 久久精品一区八戒影视| 欧美国产亚洲另类动漫| 日韩毛片一二三区| 亚洲高清视频中文字幕| 婷婷中文字幕一区三区| 老司机精品视频在线| 国产高清不卡二三区| 91在线精品秘密一区二区| 欧美偷拍一区二区| 欧美成人aa大片| 中日韩av电影| 午夜私人影院久久久久| 日本91福利区| 成人亚洲一区二区一| 在线观看视频欧美| 日韩精品专区在线影院观看| 日本一区二区动态图| 夜夜嗨av一区二区三区中文字幕| 亚洲国产一二三| 麻豆精品在线播放| 国产传媒一区在线| 色婷婷综合视频在线观看| 日韩一级完整毛片| 国产精品欧美久久久久无广告| 亚洲444eee在线观看| 国产成人午夜99999| 欧美性色黄大片手机版| 精品久久人人做人人爽| 自拍av一区二区三区| 人人超碰91尤物精品国产| 成人午夜激情在线| 欧美一级欧美三级| 亚洲天堂2016| 国产另类ts人妖一区二区| 色美美综合视频| 精品少妇一区二区三区在线播放| 亚洲免费色视频| 国产尤物一区二区| 欧美日韩国产影片| 久久毛片高清国产| 悠悠色在线精品| av一本久道久久综合久久鬼色| 欧美一区二区三区爱爱| 亚洲特黄一级片| 国产99久久久国产精品潘金网站| 欧美高清你懂得| 亚洲欧美福利一区二区| 狠狠色狠狠色综合系列| 欧美日产国产精品| 亚洲欧洲国产日本综合| 久久se精品一区精品二区| 91豆麻精品91久久久久久| 国产欧美一区二区精品性色| 秋霞影院一区二区| 一道本成人在线| 国产视频在线观看一区二区三区| 亚洲成人精品在线观看| 国产盗摄女厕一区二区三区| 日韩欧美亚洲国产精品字幕久久久| 亚洲已满18点击进入久久| 不卡的看片网站| 中文字幕精品—区二区四季| 久久av资源网| 日韩欧美黄色影院| 午夜免费久久看| 欧美中文字幕亚洲一区二区va在线 | 精品国产1区2区3区| 日韩精品国产精品| 欧美绝品在线观看成人午夜影视| 亚洲精品亚洲人成人网在线播放| 成人精品国产福利| 国产欧美日韩综合精品一区二区| 久久激情五月激情| 日韩一区二区三区高清免费看看| 午夜在线电影亚洲一区| 欧美精品视频www在线观看| 国产精品成人一区二区艾草| 国产成人自拍高清视频在线免费播放| 日韩视频在线观看一区二区| 美女视频一区在线观看| 日韩一区二区三区三四区视频在线观看| 视频一区二区不卡| 日韩小视频在线观看专区| 久久精品国产亚洲高清剧情介绍| 884aa四虎影成人精品一区| 一个色在线综合| 在线观看三级视频欧美| 亚洲色欲色欲www在线观看| 色偷偷久久一区二区三区| 亚洲午夜精品一区二区三区他趣| 欧美色国产精品|