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

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

?? mmccmd.c

?? How to control MMC interface under SZ platform
?? C
?? 第 1 頁 / 共 3 頁
字號:
	while(!((*(P_U16)MMCR_STATUS)&0x1000))i++;// wait until access operation done

	/*if(i>0&&((i&0xFF)==0)) //if(i>0 && i%256==0)
			_MMCStartClk();
	*/
/*	for(i=0;i<100000;i++)
	{	
		_MMCStartClk();
		if(((*(P_U16)MMCR_STATUS)&0x40)!=0) //wait for FIFO empty
			break;
	}
*/			
	TRACE("	Wait for last time FIFO empty. Time: %d\n",i);		

	ret|= (*(P_U16)MMCR_STATUS)&0x4;
	_MMCStopClk();
	return ret;

}



/******************************************************************************

 Function Name    : _MMCTagSectorEnd(U32 addr)

 Input Parameters : U32  addr       address
 
 Output Parameters: VOID

 Value returned   : int    0: Sucessful operation, others: meet Error

 Description      : CMD33  Sets the address of the first sector of the erase group

 Cautions         : 
 
 Prev Condition   : VOID

 Post Condition   : VOID

******************************************************************************/
MMC_STATUS _MMCTagSectorEnd(U32 addr)
{
	MMC_RESPONSES rp;
	MMC_STATUS ret;
	
	ret=_MMCNoDataCommand(MMC_CMD33,addr,MMCB_R1);	
	
	
	if(ret)
		return ret;
	
	_MMCGetResponses(&rp,MMCB_R1);
	
	return rp.status&MMC_STATUS_NOERROR;

}

/******************************************************************************

 Function Name    : _MMCErase()

 Input Parameters : U32  addr       address
 
 Output Parameters: VOID

 Value returned   : int    0: Sucessful operation, others: meet Error

 Description      : CMD38	erase all previously selected sectors

 Cautions         : 
 
 Prev Condition   : VOID

 Post Condition   : VOID

******************************************************************************/
MMC_STATUS _MMCErase()
{
	MMC_RESPONSES rp;
	MMC_STATUS ret;
	
	ret=_MMCNoDataCommand(MMC_CMD38,0,MMCB_R1);
	
	if(ret)
		return ret;
	
	_MMCGetResponses(&rp,MMCB_R1);
	

	return rp.status&MMC_STATUS_NOERROR;

}
/******************************************************************************

 Function Name    : _SDSendOpCond(U32 voltage)

 Input Parameters : U32 voltage
 
 Output Parameters: VOID

 Value returned   : int    0: Sucessful operation, others: meet Error

 Description      : ACMD41:   Ask all SD cards in idle state to send their operation 
 						  coditions register content in response on the CMD line.
 Cautions         : 
 
 Prev Condition   : VOID

 Post Condition   : VOID

******************************************************************************/
MMC_STATUS _SDSendOpCond(U32 voltage)
{
	 MMC_RESPONSES rp;
	 MMC_STATUS ret;
	 
	 ret=_MMCNoDataCommand(MMC_CMD41,voltage,MMCB_R3);

	 if(ret) 
	 	return ret; //meet some error 
	 	
	 _MMCGetResponses(&rp,MMCB_R3);
     if( !(rp.OCR&0x80000000))
     	return MMC_CARD_BUSY;
     else 
     	return 0;

}

/******************************************************************************

 Function Name    : _MMCSendSCR()

 Input Parameters : VOID
  
 Output Parameters: VOID

 Value returned   : int    0: Sucessful operation, others: meet Error

 Description      : ACMD51  Read the SD Configuration Register(SCR)
 Cautions         : 
 
 Prev Condition   : VOID

 Post Condition   : VOID

******************************************************************************/
MMC_STATUS _SDSendSCR(P_U8 pSCR)
{
	MMC_RESPONSES rp;
	MMC_STATUS ret;
	int i=0,length;
	U16 status;
	P_U16 pbuff;
	pbuff=(P_U16)pSCR;
	
	while(_MMCIsRun())
		_MMCStopClk(); 
	
	_MMCSetCmd(MMC_CMD51,0,MMCB_DATEN|MMCB_R1);
	
   
    //*(P_U16)MMCR_INT_MASK=(~MMC_CMD_DONE)&0xF;
    *(P_U16)MMCR_INT_MASK=0xF;
    
	_gMMCIsIrpt=1;
	
	*(P_U16)MMCR_STR_STP_CLK=0x06; //start clk
	
	//while(_gMMCIsIrpt)i++; //wait for CMD_DONE interrupt
	while(!((*(P_U16)MMCR_STATUS)&0x2000))i++;

		
	TRACE("	CMD Result: 0x%04X,wait time %d\n",(*(P_U16)MMCR_STATUS),i);												//TEST omit response CRC Error 
	ret=(*(P_U16)MMCR_STATUS)&MMC_CMD_TIMEOUT;           //Time Out Error  
	
	if(ret)
	{	_MMCStopClk();	
		return ret;
	}
	
	length=SD_SCR_SIZE/sizeof(U16);
	for(i=0;i<length;i++)
	{	
		if((*((P_U16)MMCR_STATUS)&0x40)!=0)//If Fifo is empty
			while((*((P_U16)MMCR_STATUS)&0x80)==0) //wait for buff full
			{	
				ret=(*((P_U16)MMCR_STATUS))&0x1;
				if(	ret )
					break;
			}
		
		//If MMC meet Time-Out of Response or CRC Read Error. 
		if(	ret )
		{	
			TRACE("	Read Data Time Out\n");
			break;
		}	
																
		*pbuff=*((P_U16)(MMCR_BUFFER_ACCESS)); //data tranferring
		pbuff++;
	}	
		
	i=0;
	while(!((*(P_U16)MMCR_STATUS)&0x800))i++; //wait data transfer done

	_MMCStopClk();
	return ret;

}

/******************************************************************************

 Function Name    : _MMCAppCmd(U32 rca)

Input Parameters : U32  rca      :Card relative address to the card
  
 Output Parameters: VOID

 Value returned   : int    0: Sucessful operation, others: meet Error

 Description      : CMD55  Indicate to the card that the next command is an application
 							specific command rather than a standard command

 Cautions         : 
 
 Prev Condition   : VOID

 Post Condition   : VOID

******************************************************************************/
MMC_STATUS _MMCAppCmd(U32 addr)
{
	MMC_RESPONSES rp;
	MMC_STATUS ret;
	
	ret=_MMCNoDataCommand(MMC_CMD55,addr<<16,MMCB_R1);	
	
	
	if(ret)
		return ret;
	
	_MMCGetResponses(&rp,MMCB_R1);
	
	return rp.status&MMC_STATUS_NOERROR;

}



/******************************************************************************

 Function Name    : _MMCNoDataCommand(U8 cmd, U32 arg,U32 ctrl,U32 EndCondition)

 Input Parameters : U8 cmd 			Command Number
 					U32 arg			Command argument
 					U32 ctrl		Command control value inculding response type	
 									and so on. See SZ menu	
 
 Output Parameters: VOID

 Value returned   : int    0: Sucessful operation, others: meet Error

 Description      : Send commend to MMC card and wait for response

 Cautions         : 
 
 Prev Condition   : VOID

 Post Condition   : VOID

******************************************************************************/
MMC_STATUS _MMCNoDataCommand(U8 cmd, U32 arg,U32 ctrl)
{
	MMC_STATUS ret;
	int i=0;
	
	_gMMCIsTransferDone=1; //no data tranferring
	
	while(_MMCIsRun())
		_MMCStopClk();
	
	_MMCSetCmd(cmd,arg,ctrl);
	
//	*(P_U16)MMCR_INT_MASK=(~MMC_CMD_DONE)&0xF;
	*(P_U16)MMCR_INT_MASK=0xF;
	
	_gMMCIsIrpt=1;
	
	_MMCStartClk();
	
//	while(_gMMCIsIrpt)i++;
	
	while(!((*(P_U16)MMCR_STATUS)&0x2000))i++;
		
	TRACE("	CMD Result: 0x%04X,wait time %d\n",(*(P_U16)MMCR_STATUS),i);												//TEST omit response CRC Error 
	ret=(*(P_U16)MMCR_STATUS)&MMC_CMD_TIMEOUT;           //Time Out Error  
	
	_MMCStopClk();
	
	return ret;	
}

/******************************************************************************

 Function Name    : U32 _MMCWaitDataTransDone()

 Input Parameters : void
 
 Output Parameters: VOID

 Value returned   : int    0: Sucessful operation, others: meet Error

 Description      : Wait until Command done or Data tranferring done

 Cautions         : 
 
 Prev Condition   : VOID

 Post Condition   : VOID

******************************************************************************/
MMC_STATUS _MMCWaitDataTransDone()
{
	int i=0;
	while(_gMMCIsTransferDone==0)
	{
		i++;
	}
		TRACE("Wait DMA Data Tran Time: %d\n",i);
	return _gMMCTransferStatus; 
}

/******************************************************************************

 Function Name    : U32 _MMCTransferEnd(U16 state)

 Input Parameters : U16 	status of DMA tranferring end
 
 Output Parameters: VOID

 Value returned   : VOID

 Description      : Callback function. It is called in DMA irpt.

 Cautions         : 
 
 Prev Condition   : VOID

 Post Condition   : VOID

******************************************************************************/
void _MMCTransferEnd(U16 state)
{
		
	if(_gMMCIsTransferDone!=0) //No any task wait for DMA over or MMC meet Error
	{	TRACE("MMC or DMA meet ERROR \n");
		return ;
	}
	
	_gMMCIsTransferDone=1;
	
	if(state==DMA_TRANSFER_COMPLETE) //If Dma Transfer successful
	{	_gMMCTransferStatus=0;		 //Success
		TRACE("MMC DMA Data Transfer OK\n");
	}
	else
	{	_gMMCTransferStatus=MMC_DMA_TRANS_ERR;       //DMA meet Error;
	}
		
	
}

/******************************************************************************

 Function Name    : U32 _MMCTransferEnd(U32 arg)

 Input Parameters : U32 arg         :no used
 
 Output Parameters: VOID

 Value returned   : VOID

 Description      : interrrupt handler of MMC

 Cautions         : 
 
 Prev Condition   : VOID

 Post Condition   : VOID

******************************************************************************/
void _MMCIrptHandle()
{
	U16 mask;
	_gMMCIsIrpt=0;
	mask=*(P_U16)MMCR_INT_MASK;
	*(P_U16)MMCR_INT_MASK=mask; //clear interrupt source
		
	if(_gMMCIsTransferDone!=0) //No any task wait for DMA over or MMC meet Error
		return ;
		
	_gMMCIsTransferDone=1; //for test
	if((*(P_U16)MMCR_STATUS)&0xD) // If MMC meet Error
	{	
		_gMMCIsTransferDone=1;
		_gMMCTransferStatus=1;       //MMC meet Error;
	
		if(_gMMCDMAChannel!=0xFF)
			_DmaCancelTransfer(_gMMCDMAChannel);
	}
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久草av在线| 久久久久久久综合色一本| 色国产综合视频| 在线免费观看日韩欧美| 777久久久精品| 国产欧美日韩视频一区二区 | 一个色综合网站| 久久国产精品99精品国产| 国产传媒欧美日韩成人| 色狠狠一区二区三区香蕉| 精品国产露脸精彩对白| 亚洲色图在线看| 秋霞影院一区二区| av不卡一区二区三区| 欧美一区二区三区视频在线| 国产日韩欧美制服另类| 一区二区三区欧美日韩| 久久国产人妖系列| 在线亚洲精品福利网址导航| 欧美电视剧在线观看完整版| 136国产福利精品导航| 欧美aaa在线| 91黄视频在线观看| 欧美美女一区二区三区| 国产精品美女久久久久aⅴ| 蜜臀av在线播放一区二区三区| 不卡一区二区在线| 久久网这里都是精品| 亚洲欧洲99久久| 国产自产2019最新不卡| 欧美日韩大陆一区二区| 亚洲色图清纯唯美| 国产电影一区二区三区| 日韩女优制服丝袜电影| 亚洲免费观看在线视频| 国产精品1区2区3区| 精品久久久久久亚洲综合网| 午夜精品一区在线观看| 在线观看不卡视频| 久久久91精品国产一区二区精品 | 亚洲欧美综合在线精品| 国产精品一区二区三区乱码| 91麻豆精品国产91久久久久久| 亚洲综合在线五月| 91亚洲精华国产精华精华液| 久久综合国产精品| 久久国产生活片100| 精品国产髙清在线看国产毛片| 日韩av电影免费观看高清完整版 | 日韩一区二区免费电影| 国产精品久久久久久久第一福利 | 亚洲永久免费av| 成人ar影院免费观看视频| 日本一二三不卡| 国产成人夜色高潮福利影视| 2020国产成人综合网| 久久国产精品99久久人人澡| 精品福利一区二区三区免费视频| 日本欧美一区二区| 精品国产一区二区三区忘忧草 | 亚洲欧洲日韩av| 91浏览器入口在线观看| 一区二区成人在线视频| 欧美日韩mp4| 麻豆91在线观看| 久久精品男人的天堂| 高清在线不卡av| 亚洲日穴在线视频| 欧美日韩综合在线| 蜜桃视频在线观看一区二区| 日韩欧美成人一区二区| 国产福利91精品| 亚洲乱码国产乱码精品精可以看 | 五月婷婷色综合| 日韩午夜电影在线观看| 国产精品一二三四| 亚洲欧洲成人自拍| 欧美嫩在线观看| 精品写真视频在线观看| 精品国产一区二区精华| 成人综合在线观看| 亚洲一区自拍偷拍| www国产成人| 国产成人精品午夜视频免费| 亚洲人成网站色在线观看| 欧美日韩中文国产| 国产一区二区三区观看| 亚洲欧美日韩久久| 日韩视频一区二区在线观看| 国产成人在线电影| 亚洲成人免费av| 国产午夜亚洲精品午夜鲁丝片| 91视频91自| 国产不卡视频在线观看| 日本欧美久久久久免费播放网| 亚洲精品国产一区二区三区四区在线| 久久婷婷成人综合色| 日韩欧美国产电影| 在线播放欧美女士性生活| 99在线精品观看| 国产成人自拍在线| 国产高清无密码一区二区三区| 蜜桃av一区二区| 日韩精品久久久久久| 亚洲国产日韩一区二区| 日韩理论电影院| 国产精品毛片a∨一区二区三区| 久久只精品国产| 久久亚洲私人国产精品va媚药| 日韩欧美视频在线| 欧美一卡二卡在线| 欧美一区二区三区在线观看 | 日本丰满少妇一区二区三区| 成人国产精品免费网站| 国产**成人网毛片九色| 成人av资源下载| av一区二区三区| 一本久道中文字幕精品亚洲嫩| 99精品视频在线播放观看| 99久久久精品| 91色在线porny| 欧美性三三影院| 欧美年轻男男videosbes| 6080日韩午夜伦伦午夜伦| 欧美肥胖老妇做爰| 日韩久久精品一区| 久久久精品国产免费观看同学| 日本一二三不卡| 亚洲欧美aⅴ...| 午夜电影一区二区| 久久国产精品免费| 国产91丝袜在线观看| 91香蕉视频mp4| 欧美日韩在线精品一区二区三区激情 | 欧美午夜影院一区| 欧美人与禽zozo性伦| 在线不卡一区二区| 久久精品亚洲精品国产欧美kt∨ | 久久婷婷一区二区三区| 亚洲视频 欧洲视频| 亚洲一二三四区| 久久av老司机精品网站导航| 懂色av一区二区三区蜜臀| 91国产免费观看| 精品噜噜噜噜久久久久久久久试看| 久久看人人爽人人| 亚洲图片欧美一区| 国产精品一线二线三线精华| 99re这里都是精品| 欧美一区二区三区在线电影| 中文字幕久久午夜不卡| 日韩电影在线免费| 成人激情校园春色| 日韩亚洲国产中文字幕欧美| 国产精品福利一区| 卡一卡二国产精品| 欧美亚男人的天堂| 国产人久久人人人人爽| 首页国产欧美久久| 99久久精品国产网站| 日韩欧美色电影| 亚洲在线免费播放| 成人av先锋影音| 日韩精品最新网址| 亚洲成年人影院| 91香蕉国产在线观看软件| 精品区一区二区| 亚洲成av人片在线观看| 波多野结衣精品在线| 日韩欧美黄色影院| 午夜精品一区在线观看| 95精品视频在线| 国产欧美日韩另类一区| 久久国产精品无码网站| 欧美日韩在线播放三区四区| 日本一区二区免费在线观看视频| 精品一区二区三区香蕉蜜桃 | 日韩激情av在线| 色婷婷精品久久二区二区蜜臂av| 国产亚洲综合在线| 国内精品在线播放| 日韩网站在线看片你懂的| 亚洲成a人片综合在线| 91蝌蚪porny| 日韩美女视频一区| 国产99久久精品| 国产亚洲精久久久久久| 国产一区二区三区精品视频| 日韩欧美国产一区二区在线播放| 午夜精品福利在线| 欧美精品丝袜中出| 亚洲一区二区欧美激情| 色婷婷激情综合| 亚洲激情六月丁香| 91福利视频网站| 亚洲综合成人在线| 91福利社在线观看| 亚洲成av人片一区二区梦乃 | 欧美国产成人精品| 波多野结衣在线aⅴ中文字幕不卡|