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

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

?? msdc_dma.c

?? dz3000_51.0.0.4.rar
?? C
字號:
/*++

Copyright (c) 2001 Sunplus Technology Co., Ltd.

Module Name:

        msdc_dma.c

Abstract:

        Module related to Bulk-Only Transport of USB Mass Storage Device Class

Environment:

        Keil C51 Compiler

Revision History:

        08/28/2001      Richie li   created                 

--*/

//=============================================================================
//Header file
//=============================================================================
#include "general.h"
 
//richie@si0417
#if ((USBMSDC_OPTION == 2) || (USBSIDC_OPTION == 1))
//richie@si0417 mark
//#include "usbmsdc2.h"

#include "msdc_dma.h"

//patch4.3@richie@res0530
extern  xdata   ULONG   G_ulStorDataIndex;

//-----------------------------------------------------------------------------
//USBMSDC_L2_DoDMA
//-----------------------------------------------------------------------------
/* 
routine description:
  DMA data transfer, the source and the desitination cannot be the same
arguments:
  Src: the source of DMA
     0: DRAM
	 1: CPU 4K SRAM (0x1000 ~ 0x1FFF)
	 2: Storage Media
     3: Audio
	 4: USB
	 5: DMA data port (0x2300)
  Dst: the destination of DMA
     0: DRAM
	 1: CPU 4K SRAM (0x1000 ~ 0x1FFF)
	 2: Storage Media
     3: Audio
	 4: USB
	 5: DMA data port (0x2300)
  nByte: the number of byte in the DMA data transfer (tha maximum size is 1024)

  Mode: 
	 0: the function return after the DMA is completed
	 1: the function return immediately after the DMA is trigger
  FlashPageDMA
     0: normal operation
	 1: if flash is one of the DMA source/destination, flash accessing is always in the unit of page
	    the insufficent data is stuffing by 0's

return value:
  0x00	 - success
  others - error

*/ 
//richie@sd done
UCHAR USBMSDC_L2_DoDMA(UCHAR Src,UCHAR Dst, USHORT nByte, UCHAR Mode, UCHAR FlashPageDMA) USING_1
{

	data UCHAR sramflag;	// WWWW
	data UCHAR dmamode;	// WWWW

    ////PRINT_L2("        L2_DoDMA: Enter L2_DoDMA(Src=%x,Dst=%x,nByte=%x,Mode=%x,FlashPageDMA=%x)\n",(USHORT)Src,(USHORT)Dst,nByte,(USHORT)Mode,(USHORT)FlashPageDMA);

	nByte = nByte - 1;
	dmamode = Mode;

	XBYTE[0x2301] = (Dst<<4)|Src;

	XBYTE[0x2304] = 0x09;                                // reset DMA machine
	XBYTE[0x2304] = 0x08;
	XBYTE[0x23C0] = 0x00;

	if(FlashPageDMA)   XBYTE[0x2304] |= 0x02;            // padding 0's to flash
	else               XBYTE[0x2304] &= 0xfd;

	if((nByte>>10)!=0) return 0x01;                      // DMA size

	XBYTE[0x2302] = (UCHAR)nByte&0xff;
	XBYTE[0x2303] = (UCHAR)(nByte>>8)&0x03;

	sramflag = 0;
	if(Src==0x01 || Dst==0x01)
	{
		XBYTE[0x2C00] &= 0x1d;
		XBYTE[0x2C11]  = 0x02;
		XBYTE[0x2C00] |= 0x02;
		sramflag = 1;
	}

	XBYTE[0x23B0] = 0x01;                                // trigger DMA

	if(dmamode) return L2K_SUCCESS;
	else while(XBYTE[0x23C0]==0) ;                       // wait for DMA complete

	XBYTE[0x23C0] = 0x00;
	if(sramflag == 1)
	{
		XBYTE[0x2C00] &= 0x1d;
		XBYTE[0x2C11]  = 0x00;
		XBYTE[0x2C00] |= 0x02;
	}

    ////PRINT_L2("        L2_DoDMA: Exit L2_DoDMA\n");
	return L2K_SUCCESS;
}

//-----------------------------------------------------------------------------
//USBMSDC_SDRAM_Dram2Usb
//-----------------------------------------------------------------------------
BYTE USBMSDC_Dram2Usb(ULONG DramAddr,USHORT size) USING_1
{
	ULONG temp = DramAddr;
	USBMSDC_L2_SetDRAMDMA(DramAddr);
	USBMSDC_L2_SetUSBDMA(K_DMA_UsbDontCare,K_USB_CLASS_DMA_IN);//for class
        USBMSDC_L2_DoDMA(K_DMA_DRAM,K_DMA_USB,size,1,0); 		          
	//DMA from CF to sdram for "size" bytes and wait till end and no nandf
	return TRUE;
}

//-----------------------------------------------------------------------------
//USBMSDC_Usb2Dram
//-----------------------------------------------------------------------------
BYTE USBMSDC_Usb2Dram(ULONG DramAddr,USHORT size) USING_1
{
	USBMSDC_L2_SetDRAMDMA(DramAddr);
	USBMSDC_L2_SetUSBDMA(K_USB_CLASS_DMA_OUT,K_DMA_UsbDontCare);//for class
	USBMSDC_L2_DoDMA(K_DMA_USB,K_DMA_DRAM,size,1,0); 		          //DMA from CF to sdram for "size" bytes and wait till end and no nandf
	return L2K_SUCCESS;
}

//-----------------------------------------------------------------------------
//USBMSDC_Sram2Usb
//-----------------------------------------------------------------------------
BYTE USBMSDC_Sram2Usb(USHORT size) USING_1
{
	if (size <= 1024)
	{
		//USBMSDC_L2_SRAMLow2High(size,sramAddr);
		//patch4.3@richie@res0530
		USBMSDC_L2_SetSRAMDMA(0x0c00 + G_ulStorDataIndex);
		USBMSDC_L2_SetUSBDMA(K_DMA_UsbDontCare,K_USB_CLASS_DMA_IN);//for class
		USBMSDC_L2_DoDMA(K_DMA_SRAM,K_DMA_USB,size,0,0);
		USBMSDC_L2_Set4KSRAMMode(0x00);  
		return TRUE;          
	}
	else
	{
		return FALSE;
	}
}

//-----------------------------------------------------------------------------
//USBMSDC_CF_LUsb2Sram
//-----------------------------------------------------------------------------
BYTE USBMSDC_Usb2Sram(UCHAR* sramAddr, USHORT size) USING_1
{
	if (size <= 1024)
	{
		USBMSDC_L2_SetSRAMDMA(0x0c00);
		USBMSDC_L2_SetUSBDMA(K_USB_CLASS_DMA_OUT,K_DMA_UsbDontCare);//for class
		USBMSDC_L2_DoDMA(K_DMA_USB,K_DMA_SRAM,size,0,0);
		USBMSDC_L2_SRAMHigh2Low(size,sramAddr);
		//richie@0117
		USBMSDC_L2_Set4KSRAMMode(0x00);
  
		return TRUE;          
	}
	else
	{
		return FALSE;
	}
}

//-----------------------------------------------------------------------------
//USBMSDC_L2_Set4KSRAMMode
//-----------------------------------------------------------------------------
/* 
routine description:
  high bank 4k sram mode selection
arguments:
  Mode: 0: addressible SRAM (0x1000 - 0x1FFF)
        1: access data port (0x2C10) (0x0000 - 0x0FFF)
        2: used for DMA buffer (0x0000 - 0x0FFF)
return value:
  0x00	 - success
  others - error

*/
//richie@sd done
UCHAR USBMSDC_L2_Set4KSRAMMode(UCHAR Mode) USING_1
{
	UCHAR tmp0;
	tmp0 = XBYTE[0x2C00];
	XBYTE[0x2C00] = tmp0 & 0x1d;

	if(Mode == 0)        XBYTE[0x2C11] = 0x00;                    
	else if(Mode == 1)   XBYTE[0x2C11] = 0x01;
	else if(Mode == 2)   XBYTE[0x2C11] = 0x02;
	else                {XBYTE[0x2C00] = tmp0 | 0x02; return 0x01;}

	XBYTE[0x2C00] = tmp0 | 0x02;

	return L2K_SUCCESS;  
}

//-----------------------------------------------------------------------------
//USBMSDC_L2_SRAMHigh2Low
//-----------------------------------------------------------------------------
UCHAR USBMSDC_L2_SRAMHigh2Low(USHORT siz,UCHAR* buffer) USING_1
{
	USHORT i;

	XBYTE[0x2C11] &= 0xFC;   //High bank sram can is addressed from 0x1000 to 0x1fff

	for (i = 0; i < siz; i++)
	{
		buffer[i] = XBYTE[0x1c00 + i];
	}

	return L2K_SUCCESS;
}

//-----------------------------------------------------------------------------
//USBMSDC_L2_SRAMLow2High
//-----------------------------------------------------------------------------
UCHAR USBMSDC_L2_SRAMLow2High(USHORT siz,UCHAR* buffer) USING_1
{
	USHORT i;

	XBYTE[0x2C11] &= 0xFC;   //High bank sram can is addressed from 0x1000 to 0x1fff

	for (i = 0; i < siz; i++)
	{
		XBYTE[0x1c00 + i] = buffer[i];
	}

	return L2K_SUCCESS;
}

//-----------------------------------------------------------------------------
//USBMSDC_L2_SetSRAMDMA
//-----------------------------------------------------------------------------
/* 
routine description:
  SRAM DMA setting
arguments:
  SRAMAddr: 4K SRAM buffer, starting address (0x0000 - 0x0FFF)

return value:
  0x00	 - success
  others - error

*/
//richie@sd done
UCHAR USBMSDC_L2_SetSRAMDMA(USHORT SRAMAddr) USING_1
{
	if((SRAMAddr & 0xF000)!=0) return 0x01 ;
	XBYTE[0x2C12] = (UCHAR)SRAMAddr&0xFF;
	XBYTE[0x2C13] = (UCHAR)(SRAMAddr>>8)&0x0F;    
	XBYTE[0x2C11] |= 0x04;
	XBYTE[0x2C11] &= 0xFB;
	return L2K_SUCCESS;
}


//-----------------------------------------------------------------------------
//USBMSDC_L2_SetUSBDMA
//-----------------------------------------------------------------------------
/* 
routine description:
  USB DMA setting
arguments:
  USBDMASrc: 
          0: endpoint 3
		  1: endpoint 8
  USBDMADst:
          0: endpoint 2
		  1: endpoint 4
		  2: endpoint 7
		  3: endpoint 9

return value:
  0x00	 - success
  others - error

*/

UCHAR USBMSDC_L2_SetUSBDMA(UCHAR USBDMASrc, UCHAR USBDMADst) USING_1
{
	XBYTE[0x2510] = USBDMASrc;
	XBYTE[0x2511] = USBDMADst;

	return L2K_SUCCESS;
}


//-----------------------------------------------------------------------------
//USBMSDC_L2_SetDRAMDMA
//-----------------------------------------------------------------------------
/* 
routine description:
  DRAM DMA setting
arguments:
  DRAMAddr: DRAM starting address

return value:
  0x00	 - success
  others - error

*/
//richie@sd done
UCHAR USBMSDC_L2_SetDRAMDMA(ULONG DRAMAddr) USING_1
{
	XBYTE[0x2750] = (UCHAR)(DRAMAddr&0x000000ff);
	XBYTE[0x2751] = (UCHAR)((DRAMAddr>>8)&0x000000ff);
	XBYTE[0x2752] = (UCHAR)((DRAMAddr>>16)&0x000000ff);

	return L2K_SUCCESS;
}

//-----------------------------------------------------------------------------
//USBMSDC_L2_ReadDRAMDMAAdr
//-----------------------------------------------------------------------------
/* 
routine description:
  Read DRAM DMA address
arguments:
  DRAMAddr: DRAM DMA starting address

return value:
  None

*/
//richie@sd done
void USBMSDC_L2_ReadDRAMDMAAdr(ULONG* DRAMAddr) USING_1
{
	*DRAMAddr = (ULONG)XBYTE[0x2750];
	*DRAMAddr |= (ULONG)XBYTE[0x2751]<<8;
	*DRAMAddr |= (ULONG)XBYTE[0x2752]<<16;
}

#endif
//end if USBMSDC_OPTION

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产全国免费观看| 色8久久精品久久久久久蜜| 欧美大黄免费观看| 蜜桃久久av一区| 日韩视频一区在线观看| 精品一区二区在线观看| 久久你懂得1024| 99精品国产一区二区三区不卡| 国产精品久久久久一区二区三区共 | 亚洲电影激情视频网站| 在线成人免费观看| 国产福利电影一区二区三区| 2023国产精华国产精品| 成人午夜电影网站| 午夜精品久久久久久久久 | 精品福利视频一区二区三区| 成人性色生活片| 午夜精品一区在线观看| 精品久久久久久亚洲综合网 | 91精品国产高清一区二区三区 | 久久久一区二区| 一本大道久久a久久综合婷婷| 午夜国产精品影院在线观看| 久久久另类综合| 在线中文字幕一区二区| 极品美女销魂一区二区三区免费| 中文字幕av不卡| 欧美浪妇xxxx高跟鞋交| 国产999精品久久久久久| 亚洲高清一区二区三区| 国产女人18毛片水真多成人如厕| 欧美在线观看一二区| 国产成人亚洲精品青草天美| 亚洲地区一二三色| 欧美国产国产综合| 欧美高清性hdvideosex| 91在线观看下载| 久久超碰97人人做人人爱| 亚洲美女屁股眼交3| 久久精品人人爽人人爽| 欧美一区二区三区在| 99久久精品国产观看| 日韩成人午夜电影| 国产精品白丝在线| 久久在线观看免费| 欧美一区二区精品久久911| 91蜜桃视频在线| 国产成人综合精品三级| 九九精品一区二区| 亚洲超丰满肉感bbw| 1000部国产精品成人观看| 久久久www成人免费无遮挡大片| 欧美日本不卡视频| 欧美在线观看一二区| 97久久超碰国产精品| 国产suv精品一区二区883| 黄色日韩三级电影| 免费人成在线不卡| 亚洲v中文字幕| 亚洲二区在线观看| 亚洲一区在线观看网站| 国产精品国产三级国产aⅴ原创 | 国内精品免费在线观看| 亚洲高清免费在线| 亚洲国产aⅴ成人精品无吗| 亚洲激情网站免费观看| 中文字幕一区二区5566日韩| 日本一区二区三区dvd视频在线| 精品福利二区三区| 26uuu色噜噜精品一区二区| 日韩免费电影网站| 日韩久久久精品| 精品少妇一区二区三区免费观看| 欧美一区二区三区影视| 欧美一级二级三级蜜桃| 日韩一区二区三区免费观看| 日韩午夜激情免费电影| 日韩精品自拍偷拍| 欧美久久久一区| 精品欧美乱码久久久久久| 日韩欧美一二三四区| 欧美成人aa大片| 久久亚区不卡日本| 国产精品嫩草99a| 亚洲日韩欧美一区二区在线| 亚洲免费在线视频| 亚洲激情五月婷婷| 日日夜夜免费精品| 狠狠色丁香久久婷婷综合_中| 狠狠色丁香婷综合久久| 国产精品一区2区| 9i看片成人免费高清| 91麻豆文化传媒在线观看| 在线免费不卡视频| 欧美一区二区三区思思人| 久久久一区二区| 国产精品夫妻自拍| 亚洲bt欧美bt精品| 久久99国产精品尤物| 丁香啪啪综合成人亚洲小说| 色婷婷综合久久久久中文| 欧美久久免费观看| 久久久精品国产免费观看同学| 国产精品九色蝌蚪自拍| 午夜精品久久久久久不卡8050| 免费在线看一区| 国产成人精品亚洲午夜麻豆| 91精彩视频在线| 日韩免费高清视频| 亚洲欧洲av在线| 日本中文字幕不卡| 国产91精品一区二区麻豆网站| 91国产视频在线观看| 日韩免费高清视频| 日韩伦理av电影| 另类综合日韩欧美亚洲| 99re这里都是精品| 欧美电影精品一区二区| 亚洲精品一二三| 经典三级视频一区| 欧美视频在线一区二区三区| 久久久精品黄色| 丝袜美腿高跟呻吟高潮一区| 成人午夜精品一区二区三区| 欧美一区二区三区四区在线观看| 国产精品国产三级国产aⅴ无密码| 午夜精品久久久久久久99水蜜桃| 成人免费看视频| 欧美videos中文字幕| 亚洲成在线观看| 99re这里都是精品| 国产欧美精品在线观看| 毛片av一区二区三区| 在线观看精品一区| 国产精品久久久久三级| 狠狠色丁香婷婷综合久久片| 欧美日韩二区三区| 一区二区三区四区av| 成人小视频在线观看| 久久久亚洲精品石原莉奈| 亚洲成人动漫在线免费观看| 99久久久无码国产精品| 久久精品一区二区| 精品一区二区三区免费视频| 欧美电影影音先锋| 亚洲一二三四久久| av中文字幕在线不卡| 久久久www成人免费无遮挡大片| 日本不卡视频在线观看| 欧美日韩aaaaa| 亚洲成人av一区二区三区| 色综合久久中文字幕综合网 | 成人福利视频在线| 久久精品视频网| 国产一区二区三区久久悠悠色av| 制服丝袜成人动漫| 日本一区中文字幕| 日韩午夜激情av| 日韩av一级片| 日韩一区二区影院| 日本欧美一区二区三区| 欧美一区二区三区婷婷月色| 日韩高清在线观看| 日韩视频中午一区| 免费美女久久99| 日韩免费高清电影| 黑人精品欧美一区二区蜜桃 | 蜜芽一区二区三区| 日韩欧美专区在线| 激情综合色综合久久综合| 日韩欧美123| 国产一区二区三区久久悠悠色av| 久久―日本道色综合久久| 国产精品一卡二| 国产精品视频线看| 色欧美日韩亚洲| 亚洲成精国产精品女| 欧美性极品少妇| 日韩电影免费一区| 久久噜噜亚洲综合| 91在线精品秘密一区二区| 亚洲一区二区在线观看视频| 777亚洲妇女| 国产精品一区二区免费不卡| 中文字幕一区二区视频| 在线精品视频小说1| 天天色天天操综合| 国产无一区二区| 色偷偷久久人人79超碰人人澡| 亚洲v中文字幕| 精品国产一区二区三区久久久蜜月| 国产一区二区三区不卡在线观看| 欧美国产精品v| 欧美唯美清纯偷拍| 久草中文综合在线| 樱桃视频在线观看一区| 日韩美女一区二区三区| 成人黄色国产精品网站大全在线免费观看| 亚洲精品乱码久久久久久黑人| 欧美人体做爰大胆视频|