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

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

?? cf_driver.c

?? 飛思卡爾MC9S12uf32的一些實(shí)用驅(qū)動(dòng)程序
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/*********************************************************************
 
  (c) copyright Motorola Semiconductors (HK) Ltd. 2002
  ALL RIGHTS RESERVED
 
 *********************************************************************
 
                   CF Driver Module for S12 MCUs 
 
 *********************************************************************

  File:			cf_driver.c
 
  Description:  Major part of CF Driver module. (APIs & Functions)
 
  Date:         Apr. 2003
  Author:		Derek Lau
  
 ********************************************************************/


#include	"FreescaleDef.h"			// Get my definitions (Constants & Macros)
#include	"uf32reg.h"		// Get the DP256 registers.
#include	"mk_extern.h"		// Get Mini-Kernel global prototypes
#include	"cf_includes.h"	// Get ATA Driver Configuration
#define _CF_EXTRN_G_DECL_
#include	"cf_extern.h"
#include	"usbms_extern.h"
#include	"utl_includes.h"

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



CFErrorCode CF_Init(void)
{
	#ifdef	_CF_SECOND_SLOT_
		MODRR = (1<<MODRR_CFSLOT2);
	#endif

	CF_SCR1 = (1<<CFE) + (1<<CFOE) + (1<<DISINC);	// enable CF host
	CF_SCR2 = (1<<CA10E)+(1<<CA9E);

	mSetBit(CFResetPin,CFResetPort);		// set resetpin to high
	mSetBit(CFResetPin,CFResetDDR);	// set resetpin to output
	UTL_Delay(10);						// delay
	mClearBit(CFResetPin,CFResetPort);		// set resetpin to low

	UTL_Delay(10);						// delay	


//	gCFSenseKey = 0x03;
/*	
	CF_Write8Reg(CF_R_SOCKET_COPY,0x00);	// drive #0
	CF_Read8Reg(CF_R_SOCKET_COPY);
	CF_Write8Reg(CF_R_CONFIG,0x01);	// I/O Mode
	CF_Read8Reg(CF_R_CONFIG);
*/
//	CF_IQTest();

	return CF_GetSetDeviceInfo();
}

// ==================================================================
//   CF_Wait_Card_Busy() -
//
//     Wait for CF not busy.
//
//	Input -		=	nil
//				
//	Output - 	=	nil
//
//	Function returns: nil
//
// ==================================================================

CFErrorCode CF_WaitCardBusy(void)
{
	muint16 BegTime, CurTime;
	muint8 status;

	BegTime = MK_GetCurrentTime();				// begin time

	do
	{
//		status = CF_Read8Mem(CF_M_ALT_STATUS);	// get status
			status = CF_Read8Mem(CF_M_STATUS);	// get status

	    if (!mCheckBit(bitCFBUSY,status))
	    	return(kCSWPass);					// exit if not busy
	    
	    if (mCheckBit(bitCFDWF,status)||mCheckBit(bitCFERR,status))	
	 	 	return(kCSWFailed);					// write fault

		CurTime = MK_GetCurrentTime();			// current time
	}
	while ( ((CurTime-BegTime) < kCFTimeout) || ((BegTime - CurTime) < kCFTimeout));

	gCFError = kSCSISKHardwareError;
	return(kCSWPhaseError);						// timeout => phase error
}
CFErrorCode CF_WaitCardDRQ(void)
{
	muint16 BegTime, CurTime;
	muint8 status;

	BegTime = MK_GetCurrentTime();				// begin time

	do
	{
//		status = (muint8) CF_Read8Mem(CF_M_ALT_STATUS);
			status = (muint8) CF_Read8Mem(CF_M_STATUS);	// get status

	    if (mCheckBit(bitCFDRQ,status) && !mCheckBit(bitCFBUSY,status))
	    	return(kCSWPass);					// exit if data request is set
	    
	    if (mCheckBit(bitCFDWF,status)||mCheckBit(bitCFERR,status))	
	 	 	return(kCSWFailed);					// write fault
	 	 	
		CurTime = MK_GetCurrentTime();			// current time
	}
	while ( ((CurTime-BegTime) < kCFTimeout) || ((BegTime - CurTime) < kCFTimeout));

	gCFError = kSCSISKHardwareError;
	return(kCSWPhaseError);						// timeout => phase error
}



void CF_Wait8CardBusy(void)
{
	while (CF_Read8Mem(CF_M_STATUS) & (1<<bitCFBUSY));
}

CFErrorCode CF_WaitCardBusyIO(void)
{
	muint16 BegTime, CurTime;

	BegTime = MK_GetCurrentTime();		// begin time

	do
	{
		
	    if (!(CF_ReadIO(CF_M_HEAD_STATUS) & (1<<bitCFBUSY)))
	    	return(kCSWPass);			// exit 
	    	
		CurTime = MK_GetCurrentTime();	// current time
	}
	while ( ((CurTime-BegTime) < kCFTimeout) || ((BegTime - CurTime) < kCFTimeout));

	gCFError = kSCSISKHardwareError;
	return(kCSWPhaseError);				// timeout => phase error
}

// ==================================================================
//   CF_ReadReg() -
//
//     To read CF register.
//
//	Input -		=	Register
//				
//	Output - 	=	nil
//
//	Function return: data
//
// ==================================================================
muint16 CF_ReadReg(muint16 Reg)
{
	muint16 	dummy;
	CF_CCR_L	= 0;				// card in 16 bit reg mode
	CF_BBAR		= Reg;				// set reg address
	
	while (CF_CR_L & (1<<BSY));		// loop while busy
	CF_CR_L		= ((1<<INVOKE) | (1<<RWB));	// read CF
	while (CF_CR_L & (1<<BSY));		// loop while busy
	while ((CF_IFR & (1<<OOIF)) == 0);
	dummy = CF_ISR;
	return(CF_DR);
}

muint8 CF_Read8Reg(muint16 Reg)
{
	muint16 	dummy;
	CF_CCR_L	= 0;				// card in 16 bit reg mode
	CF_BBAR		= Reg;				// set reg address
	
	while (CF_CR_L & (1<<BSY));		// loop while busy
	CF_CR_L		= ((1<<INVOKE) | (1<<RWB));	// read CF
	while (CF_CR_L & (1<<BSY));		// loop while busy
	while ((CF_IFR & (1<<OOIF)) == 0);
	dummy = CF_ISR;
	return(CF_DR_H);
}

// ==================================================================
//   CF_WriteReg() -
//
//     To write CF register.
//
//	Input -		=	Register, data
//				
//	Output - 	=	nil
//
//	Function return 
//
// ==================================================================
void CF_WriteReg(muint16 Reg, muint16 Data)
{
	CF_CCR_L	= 0;		// card in 16 bit reg mode
	CF_BBAR	= Reg;			// set reg address 

	while ((CF_IFR_L & (1<<CFTEIF)) == 0);
	CF_DR	= Data;

	while (CF_CR_L & (1<<BSY));	// loop while busy
	CF_CR_L		= (1<<INVOKE);	// write CF
	while (CF_CR_L & (1<<BSY));	// loop while busy
	while ((CF_IFR & (1<<OOIF)) == 0);
}

void CF_Write8Reg(muint16 Reg, muint8 Data)
{
//	CF_CCR_L	= (1<<CE2B);	// card in 8 bit reg mode
	CF_CCR_L	= 0;
	CF_BBAR	= Reg;				// set reg address 

	while ((CF_IFR_L & (1<<CFTEIF)) == 0);
	CF_DR_H	= Data;
//	CF_DR_L	= Data;

	while (CF_CR_L & (1<<BSY));	// loop while busy
	CF_CR_L		= (1<<INVOKE);	// write CF
	while (CF_CR_L & (1<<BSY));	// loop while busy
	while ((CF_IFR & (1<<OOIF)) == 0);
}


// ==================================================================
//   CF_ReadMem() -
//
//     To read CF in 16 bit memory mode
//
//	Input -		=	Memory location
//				
//	Output - 	=	nil
//
//	Function return: data
//
// ==================================================================
muint16 CF_ReadMem(muint16 Mem)
{
	CF_CCR_L	= (1<<REGB);		// card in 16 bit memory mode

	CF_BBAR		= Mem;				// set reg address

	while (CF_CR_L & (1<<BSY));		// loop while busy
	CF_CR_L		= ((1<<INVOKE)+(1<<RWB));
	while (CF_CR_L & (1<<BSY));		// loop while busy
	while ((CF_IFR & (1<<OOIF)) == 0);

	return(CF_DR);
}

muint8 CF_Read8Mem(muint16 Mem)
{
	CF_CR_L		= 0x00;
	CF_CCR_L	= ((1<<CE2B)+(1<<REGB));	// card in 8 bit memory mode
	CF_BBAR		= Mem;				// set reg address

	while (CF_CR_L & (1<<BSY));		// loop while busy
	CF_CR_L		= ((1<<INVOKE) | (1<<RWB));
	while (CF_CR_L & (1<<BSY));		// loop while busy
	while ((CF_IFR & (1<<OOIF)) == 0);

	return(CF_DR_H);
}

muint16 CF_ReadIO(muint16 Mem)
{
	CF_CR_L		= 0x00;
	CF_CCR_L	= (1<<COM);			// card in 16 bit I/O mode
	CF_BBAR		= Mem;				// set reg address

	while (CF_CR_L & (1<<BSY));		// loop while busy
	CF_CR_L		= ((1<<INVOKE) | (1<<RWB));
	while (CF_CR_L & (1<<BSY));		// loop while busy
	while ((CF_IFR & (1<<OOIF)) == 0);

	return(CF_DR);
}
// ==================================================================
//   CF_BufferReadMem() -
//
//     Buffer Read data from CF device
//
//	Input -		= Buffer pointer, Lenght of Transfer
//				
//	Output - 	= Data return in buffer pointer	
//
//	Function returns error code
//
// ==================================================================
CFErrorCode CF_BufferReadMem(muint16 *pBuffer, muint16 XferLen)
{
	int i;

	CF_CCR_L	= (1<<REGB);		// card in 16 bit memory mode
	CF_BBAR		= CF_M_DATA;				// set reg address
	
	for (i=0; i<XferLen; i++)			// get data
	{		
		while (CF_CR_L & (1<<BSY));		// loop while busy
		CF_CR_L		= ((1<<INVOKE)+(1<<RWB));
		while (CF_CR_L & (1<<BSY));		// loop while busy
		while ((CF_IFR & (1<<OOIF)) == 0);

		*pBuffer++ = CF_DR;
	}
	return (kCFPass);	
}



// ==================================================================
//   CF_IQRead_Mem() -
//
//     To read CF in 16 bit memory mode through 
//
//	Input -		=	Memory location
//				
//	Output - 	=	data in IQUE RAM
//
//	Function return 
//
// ==================================================================
CFErrorCode CF_IQReadMem(void)
{
	muint16 dummy;

	CF_CCR_L	= (1<<REGB);		// card in 16 bit memory mode
	CF_BBAR		= CF_M_DATA;		// set reg address

	while (CF_CR_L & (1<<BSY));		// loop while busy
	CF_CR_L		= ((1<<HIS) | (1<<INVOKE) | (1<<RWB));
	while (CF_CR_L & (1<<BSY));		// loop while busy
	while ((CF_IFR & (1<<OOIF)) == 0);
	dummy = CF_CR;
	CF_CR_L = 0;
	return(0);
}

CFErrorCode CF_IQReadMemOneBlock(muint8 pIQUEBuffer)
{
	muint16 dummy;

	IQUECR = (1<<CH34DBE)+(1<<IQUEEN)+(1<<IQUERST);	// Enable IQUECR
	QC34DTR = (1<<SBTE)+(1<<DTHE);
					// enable force handshake
	QC3CR = (1<<QnEN)+(1<<QnTHRU)+(1<<Qn16EN)+(1<<QnPRST);					// enable QC3

	mSetBit(DBRST,QC34DCR);				// reset QC34 double buffer
	mSetBit(QnPRST,QC3CR);
	QC3REQ = kQCREQCFRx;
	QC3SZB = 0x10 | pIQUEBuffer;
	CF_BSR = 0x1FE;	

	CF_CCR_L	= (1<<REGB);		// card in 16 bit memory mode
	CF_BBAR		= CF_M_DATA;		// set reg address

	while (CF_CR_L & (1<<BSY));		// loop while busy
	CF_CR_L		= ((1<<HIS) | (1<<INVOKE) | (1<<RWB));
	while (CF_CR_L & (1<<BSY));		// loop while busy
	while ((CF_IFR & (1<<OOIF)) == 0);
	dummy = CF_CR;
	CF_CR_L = 0;
	while ((QC34DSR & 0x03) != 0x01);
	(void) CF_WaitCardBusy();

	mClearBit(QnEN,QC3CR);
	QC3REQ = kQCREQNone;
	mSet2Bit(DRHE,DTHE,QC34DTR);					// enable force handshake
	return(0);
}

CFErrorCode CF_IQReadMemTwoBlock(muint8 pIQUEBuffer)
{
	muint16 dummy;

	IQUECR = (1<<CH34DBE)+(1<<IQUEEN)+(1<<IQUERST);	// Enable IQUECR
	QC34DTR = (1<<SBTE)+(1<<DTHE);
	QC3CR = (1<<QnEN)+(1<<QnTHRU)+(1<<Qn16EN)+(1<<QnPRST);					// enable QC3
	QC1REQ = kQCREQNone;
	QC2REQ = kQCREQNone;
	mClearBit(QnEN,QC1CR);
	mSetBit(DBRST,QC34DCR);				// reset QC34 double buffer
	QC3REQ = kQCREQCFRx;
//	QC4REQ = kQCREQCFRx;
	QC3SZB = 0x10 | pIQUEBuffer;
	CF_BSR = 0x1FE;	
	CF_CCR_L	= (1<<REGB);		// card in 16 bit memory mode
	CF_BBAR		= CF_M_DATA;		// set reg address

	while (CF_CR_L & (1<<BSY));		// loop while busy
	CF_CR_L		= ((1<<HIS) | (1<<INVOKE) | (1<<RWB));
	while (CF_CR_L & (1<<BSY));		// loop while busy
	while ((CF_IFR & (1<<OOIF)) == 0);
	dummy = CF_CR;
	CF_CR_L = 0;

//	while ((QC34DSR & 0x03) != 0x01);
	(void) CF_WaitCardBusy();
	while (CF_CR_L & (1<<BSY));		// loop while busy

	CF_BSR = 0x1FE;	
	CF_CCR_L	= (1<<REGB);		// card in 16 bit memory mode
	CF_BBAR		= CF_M_DATA;		// set reg address

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品丝袜中出| 欧美日韩国产不卡| 香蕉成人啪国产精品视频综合网| 欧美一级黄色片| 成人18视频日本| 久久99久久99精品免视看婷婷 | 欧美v国产在线一区二区三区| 成人成人成人在线视频| 美女一区二区久久| 一区二区三区在线免费观看| 久久综合九色综合97_久久久| 91久久一区二区| 国产精品一级黄| 久久99国产精品成人| 亚洲国产裸拍裸体视频在线观看乱了| 久久久久99精品一区| 日韩一区二区三区av| 欧洲日韩一区二区三区| 成人18视频在线播放| 国产激情视频一区二区三区欧美| 日韩主播视频在线| 亚洲午夜激情网站| 一区二区三区日韩| 一区二区三区中文字幕电影| 中文字幕一区免费在线观看| 国产丝袜美腿一区二区三区| 欧美电影免费观看高清完整版在线观看| 在线观看日韩毛片| 色综合天天性综合| 99久久伊人精品| 99久久99久久精品国产片果冻 | av在线不卡免费看| 成人激情视频网站| 懂色av一区二区夜夜嗨| 国内外精品视频| 国产久卡久卡久卡久卡视频精品| 韩国三级电影一区二区| 看片的网站亚洲| 经典三级视频一区| 国产精品一区免费在线观看| 国产一区二区三区在线观看免费| 麻豆国产一区二区| 国产伦精一区二区三区| 国产米奇在线777精品观看| 国模一区二区三区白浆| 国产大陆a不卡| 成人黄色小视频| 99在线精品免费| 91国产视频在线观看| 欧美日韩高清不卡| 欧美一区二区视频网站| 2024国产精品| 中文字幕av资源一区| 中文字幕一区免费在线观看| 亚洲精品成a人| 天天爽夜夜爽夜夜爽精品视频 | 成人av在线一区二区三区| 成人黄色综合网站| 91福利视频网站| 日韩一区二区三区视频| 国产三级三级三级精品8ⅰ区| 国产午夜一区二区三区| 国产精品午夜在线观看| 一个色在线综合| 美女爽到高潮91| 粉嫩av一区二区三区在线播放 | 日韩欧美色综合网站| 精品国产伦一区二区三区免费| 国产午夜精品久久| 亚洲亚洲精品在线观看| 精品一区二区三区免费视频| 国产大陆精品国产| 欧美色成人综合| 久久在线观看免费| 亚洲激情图片小说视频| 麻豆一区二区在线| 99免费精品在线| 欧美日韩激情一区二区三区| 久久先锋影音av鲁色资源网| 中文字幕视频一区| 日韩av电影天堂| 成人高清在线视频| 91精品午夜视频| 最新国产成人在线观看| 青青草国产成人av片免费 | 欧美一级艳片视频免费观看| 欧美国产精品一区| 亚洲成人在线网站| 成人免费高清在线观看| 欧美一级xxx| 亚洲欧洲中文日韩久久av乱码| 久久狠狠亚洲综合| 91黄色激情网站| 国产偷v国产偷v亚洲高清| 日韩中文字幕区一区有砖一区| 成人美女视频在线观看18| 在线播放国产精品二区一二区四区| 国产农村妇女精品| 奇米四色…亚洲| 一本高清dvd不卡在线观看| 2022国产精品视频| 天堂在线一区二区| 色婷婷国产精品| 欧美国产丝袜视频| 久久99热这里只有精品| 欧美日韩精品一区二区三区| 亚洲天堂福利av| 国产jizzjizz一区二区| 日韩你懂的在线播放| 亚洲成人在线免费| 91福利国产成人精品照片| 国产日韩av一区二区| 精品亚洲aⅴ乱码一区二区三区| 欧美三级电影精品| 日韩美女啊v在线免费观看| 国产精品 日产精品 欧美精品| 6080午夜不卡| 亚洲成在线观看| 日本高清无吗v一区| 国产精品二三区| 成人av动漫在线| 国产欧美日韩综合精品一区二区 | 国产成人亚洲精品狼色在线| 日韩欧美资源站| 免费的成人av| 欧美一区二区三区思思人| 一区二区三区精品| 色综合久久久网| 一区二区在线观看免费| 色综合天天视频在线观看| 中文字幕一区在线| 95精品视频在线| 亚洲欧美电影一区二区| 99久久久久免费精品国产 | 精品精品国产高清a毛片牛牛| 蜜臀av一区二区在线免费观看 | 日韩**一区毛片| 7777女厕盗摄久久久| 日本免费新一区视频| 欧美xxx久久| 国内精品伊人久久久久影院对白| 精品国产露脸精彩对白| 精品午夜久久福利影院 | 精品sm在线观看| 国内精品在线播放| 欧美激情一区二区在线| 成人久久视频在线观看| 一区精品在线播放| 色老头久久综合| 日本强好片久久久久久aaa| 欧美成人伊人久久综合网| 极品瑜伽女神91| 国产欧美一区二区精品仙草咪| 成人精品视频一区| 夜夜嗨av一区二区三区四季av| 欧美日韩在线直播| 极品少妇一区二区三区精品视频| 久久精品一区二区三区不卡牛牛| 成人国产精品免费观看| 亚洲一区二区偷拍精品| 911精品国产一区二区在线| 精品一区二区精品| 亚洲欧洲三级电影| 欧美日韩在线播放| 久久99久久99| 亚洲人成精品久久久久| 欧美精品久久一区| 国产91精品露脸国语对白| 樱桃视频在线观看一区| 日韩一区二区精品| 不卡在线视频中文字幕| 偷拍日韩校园综合在线| 国产亚洲欧美色| 欧美色爱综合网| 国产传媒欧美日韩成人| 亚洲小说春色综合另类电影| 欧美mv日韩mv| 欧美在线观看视频一区二区| 麻豆91在线观看| 亚洲女人****多毛耸耸8| 欧美一区二区视频在线观看| 成人高清av在线| 蜜臀av性久久久久蜜臀aⅴ| 国产精品国产三级国产a| 4438x成人网最大色成网站| 成人小视频在线观看| 日韩综合在线视频| 综合久久久久久| 久久久久久久综合| 欧美日韩国产乱码电影| 菠萝蜜视频在线观看一区| 美女视频黄频大全不卡视频在线播放| 综合激情成人伊人| 久久噜噜亚洲综合| 欧美精品高清视频| 色老头久久综合| www.av精品| 国产激情一区二区三区四区| 日韩av不卡在线观看| 一区二区三区四区高清精品免费观看|