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

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

?? d12_int.c

?? 我的小作品--U盤(實際是USB SD卡讀卡器) ATmega168+PDIUSBD12+SD (內含GCC源碼和原理圖)
?? C
字號:
#include "D12_INT.h"
#include "USB_MassStorage.h"

#include "MMC_SD.h"


CBW cbw;
CSW csw;

unsigned char DISK_INF[36]=                   //Disk infomation                   //磁盤信息
{
 0x00,
 0x00,//最高位表示是否是可移動設備  //MSB of this byte indicate that this is removable disk
 0x00,
 0x01,
 0x1F,
 0x00,0x00,0x00,

 '*',0xd5,0xc2,0xc6,0xe4,0xb2,0xa8,'*',//這一段可以自己添加內容,但長度不可變,編碼為ascii 也可是gbk
//You can add infomation here, a ASCII string needed, but the length must be 8 
 
 0xd6,0xc6,0xd7,0xf7,0xb5,0xc4,0xbf,0xc9,0xd2,0xc6,0xb6,0xaf,0xb4,0xc5,0xc5,0xcc,//這一段可以自己添加內容,但長度不可變,編碼為ascii 也可是gbk
//You can add infomation here, a ASCII string needed, but the length must be 16
 
 
 
 0x31,0x2E,0x30,0x31
};

//Dis capacity. The first four bytes is the max LBA address
//It will be reinitialized when SD card is ready
unsigned char DISK_CAPACITY[8]=                                  //磁盤容量//在SD初始化后會修改
{
 0x00,0x0F,0x1C,0xF0,
 0x00,0x00,0x02,0x00
};

//the requied data of MODE SENSE
unsigned char SENSE[0x12]=                                      //模式探測返回數據
{
0x70, 0x00, 0x05, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00
};

//返回CSW包
void Send_CSW(U32 DataResidue,U8 status)
{
	csw.dCSWSignature = 0x53425355; //csw包標志
	csw.dCSWTag=cbw.dCBWTag;		//主機發過來的tag
 	csw.dCSWDataResidue=DataResidue;
 	csw.bCSWStatus=status;
 	while(D12_Select_Endpoint(5));
 	D12_Write_Endpoint(5, (U8 *)&csw, 13);//定長度 13字節
}

//SCSI讀操作
void read_10()
{
	U32 Byte_Count;//總字節數
	U32 LBA;		//LBA地址
	U8 j=0;


//得到LBA地址	
	LBA = 0;
	LBA += cbw.CBWCB[2];
	LBA <<= 8;
	LBA += cbw.CBWCB[3];
	LBA <<= 8;
	LBA += cbw.CBWCB[4];
	LBA <<= 8;
	LBA += cbw.CBWCB[5];

//得到傳輸字節數	
	Byte_Count = 0;
	Byte_Count+=cbw.CBWCB[7];
	Byte_Count<<=8;
	Byte_Count+=cbw.CBWCB[8];
	Byte_Count<<=9;
 
//傳輸數據   //一個while循環為讀一個扇區 
   while(1)	
   {
   		//以下為SD讀一扇區的前導操作
		if(MMC_SD_SendCommand(17, LBA<<9)!=0x00){return;} 
		SPI_CS_Assert();
		while(SPI_WriteByte(0xff) != 0xfe);//等數據的開始	//wait to start recieve data
		LBA++;
		for(j=0;j<8;j++)
		{
			D12_Write_Endpoint_SD(5);//寫端點,與SD卡同時操作//每次64字節
			Byte_Count-=64;
			if(Byte_Count==0)
			{
				//讀一扇區結尾的偽crc
				SPI_WriteByte(0xff);//偽crc
				SPI_WriteByte(0xff);
	
				SPI_CS_Deassert();

				return;//結束返回
			}
		}
		//讀一扇區結尾的偽crc
		SPI_WriteByte(0xff);//偽crc
		SPI_WriteByte(0xff);
	
		SPI_CS_Deassert();
	}
}

//SCSI寫操作
void write_10()
{
	U32 Byte_Count;//寫字節數
	U32 LBA;		//寫LBA地址
	U8 j=0;

	U8 buffer[512];	//實踐證明寫SD卡操作不可像讀操作那樣操作,否則會出錯 所以用緩沖區來做 等收到512字節再寫

//LBA地址
	LBA = 0;
	LBA += cbw.CBWCB[2];
	LBA <<= 8;
	LBA += cbw.CBWCB[3];
	LBA <<= 8;
	LBA += cbw.CBWCB[4];
	LBA <<= 8;
	LBA += cbw.CBWCB[5];

//總字節數	
	Byte_Count = 0;
	Byte_Count+=cbw.CBWCB[7];
	Byte_Count<<=8;
	Byte_Count+=cbw.CBWCB[8];
	Byte_Count<<=9;

//寫操作 1個while循環寫1扇區   
	while(1)	
	{
		D12_Read_Endpoint(4, &buffer[j*64], 64);//正常端點讀操作
		j++;
		Byte_Count-=64;
		if(j==8)//計滿512字節后一起寫到sd卡內
		{
			j=0;
			MMC_SD_WriteSingleBlock(LBA++, buffer);
		}
		if(Byte_Count==0)return;//結束返回
	}
}

//標準請求的函數指針
U8 (*Stand_Device_Request[])(U8 *SetupPacket) = 
{
	Get_Status,
	Clear_Feature,
	Reserved,
	Set_Feature,
	Reserved,
	Set_Address,
	Get_Descriptor,
	Reserved,
	Get_Configuration,
	Set_Configuration,
	Get_Interface,
	Set_Interface,
	Reserved,
	Reserved,
	Reserved,
	Reserved
}; 


/**************************************/
void USB_Delay(U16 Time)
{
	while(Time--)asm("nop");
}



/*****************初始化USB********************/
U8 USB_Init()
{
//	D12_PORT_INI();
	USB_Delay(20000);

	if(D12_Read_Chip_ID()!=0x1210 )
		return 0;

	D12_Set_DMA(MyD12DmaCfg);
	if(D12_Get_DMA()!=MyD12DmaCfg)
		return 0;

	D12_Set_Mode(MyD12EpCfgOff, D12Pll24M);
	USB_Delay(20000);
	USB_Delay(20000);
	D12_Set_Mode(MyD12EpCfgOn, D12Pll24M);

	return 1;
}


/********************** D12 interrupt process ******************/
void D12Ep0IntProc()
{
	U8 SetupPacket[8];
	U8 i = 0;
	
	Clear_Remain_Descriptor_Flag();
	//printf("\nEndpoint0 Process!");
	if(D12_Read_Last_Transaction_Status(0)&0x20)
	{	

		if(D12_Read_Endpoint(0, SetupPacket, 8)==8)
		{
			D12_Ack_Endpoint(0);
			D12_Ack_Endpoint(1);
			
			//for(i=0; i<8; i++)
				//printf("%x,", SetupPacket[i]);
			if(SetupPacket[0] == 0xa1 && SetupPacket[1] == 0xfe)
			{
				D12_Write_Endpoint(1,&i,1);
			}
			if(!Stand_Device_Request[SetupPacket[1]&0xf](SetupPacket));//調用相應的標準請求響應函數
				return;
		}
	}
					
	D12_Set_Endpoint_Status(0, D12EpStall);
	D12_Set_Endpoint_Status(1, D12EpStall);		
}

void D12Ep1IntProc()
{
	U8 i;
	//printf("\nEndpoint1 Process!\n");
	i = D12_Read_Last_Transaction_Status(1);
	if(Remain_Descriptor_Flag())
		Send_Descriptor();
		
}

void D12Ep2IntProc()
{
//	printf("\nEndpoint2 Process!\n");
	D12_Set_Endpoint_Status(2, D12EpStall);
}

void D12Ep3IntProc()
{
//	printf("\nEndpoint3 Process!\n");
	D12_Set_Endpoint_Status(3, D12EpStall);
}

void D12Ep4IntProc()
{
	//printf("\nEndpoint4 Process!\n");
	D12_Read_Last_Transaction_Status(4);	
	D12_Read_Endpoint(4, (U8 *)&cbw, Endpoint2_Packet_Size);
	if(cbw.dCBWSignature != 0x43425355)return;			//cbw包標志

	if(cbw.bmCBWFlags&0x80)								//寫操作
	{
		switch(cbw.CBWCB[0])
		{
			case              Read_10: read_10();Send_CSW(0x00,SUCCESS);break;
			case              Inquiry: D12_Write_Endpoint(5,DISK_INF,36);Send_CSW(0x00,SUCCESS); break;
  		  	case        Read_Capacity: D12_Write_Endpoint(5,DISK_CAPACITY,0x08);Send_CSW(0x00,SUCCESS);break;
  	 	 	case Read_Format_capacity: D12_Write_Endpoint(5,0x00,0x00);Send_CSW(cbw.dCBWDataTransgerLength,FAIL);break;
   		 	case        Request_Sense: D12_Write_Endpoint(5,SENSE,0x12);Send_CSW(0x00,SUCCESS);break;
		 	case                 0x1a: D12_Write_Endpoint(5,0x00,0x00);Send_CSW(cbw.dCBWDataTransgerLength,FAIL);break;
   		 	default                  : D12_Write_Endpoint(5,0x00,0x00);Send_CSW(cbw.dCBWDataTransgerLength,FAIL);break;
		}
	}
	else												//讀操作
	{
		switch(cbw.CBWCB[0])
		{
			case        Write_10: write_10();Send_CSW(0x00,SUCCESS);break;
			case Test_Unit_Ready: Send_CSW(0x00,SUCCESS);break; 
			case          Verify: Send_CSW(0x00,SUCCESS);break;
			default             : Send_CSW(cbw.dCBWDataTransgerLength,FAIL);break;
		}
	}
}

void D12Ep5IntProc()
{
	//printf("\nEndpoint5 Process!\n");
	D12_Read_Last_Transaction_Status(5);//所有的數據傳輸都已在ep4內完成,該程序沒有采用中斷機制
}

void D12BusRstProc()
{
	//printf("\nBus Reset!");
	D12_Clear_Buffer();
	D12_Enable_Buffer();
	D12_Set_Endpoint_Enable(1);
}

void D12SuspChgProc()
{
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品国久久99热| 精一区二区三区| 狂野欧美性猛交blacked| 成人性色生活片| 日韩欧美国产综合一区| 亚洲人成网站在线| 高清不卡在线观看av| 日韩一区二区中文字幕| 亚洲美女免费视频| 国产99久久久精品| 日韩免费高清视频| 天天综合天天做天天综合| av亚洲精华国产精华精| 久久综合九色综合欧美亚洲| 午夜精品一区二区三区电影天堂| 一本久久a久久精品亚洲| 久久久久亚洲蜜桃| 久久精品噜噜噜成人av农村| 欧美精品1区2区3区| 亚洲丶国产丶欧美一区二区三区| 99久久综合色| 国产精品久久久久久久久免费丝袜| 蓝色福利精品导航| 日韩视频一区二区三区在线播放| 亚洲高清免费观看高清完整版在线观看| 不卡的av电影在线观看| 久久久久久亚洲综合| 国产综合成人久久大片91| 日韩视频一区二区三区 | 国产成人免费视频精品含羞草妖精| 欧美日韩大陆在线| 日韩电影在线免费看| 欧美狂野另类xxxxoooo| 日韩国产成人精品| 精品欧美一区二区在线观看| 久久疯狂做爰流白浆xx| 精品国产乱码久久久久久闺蜜| 美国三级日本三级久久99| 日韩欧美国产麻豆| 国产精品2024| 亚洲素人一区二区| 欧美日韩日本视频| 精品一区二区三区视频在线观看| 精品久久久久久无| 高清不卡一区二区| 亚洲视频免费观看| 欧美日韩精品欧美日韩精品| 日本中文字幕一区| 久久久久9999亚洲精品| 风间由美一区二区av101| 亚洲三级在线播放| 欧美欧美欧美欧美首页| 精品在线亚洲视频| 国产精品白丝在线| 欧美日韩精品久久久| 国产一区二区三区黄视频| 国产欧美日韩中文久久| 色综合天天综合给合国产| 亚洲一级二级三级在线免费观看| 日韩欧美国产一二三区| av不卡免费电影| 日日夜夜免费精品视频| 国产午夜精品在线观看| 在线观看免费视频综合| 久久99国产精品久久99果冻传媒| 中文字幕av不卡| 欧美精品一卡二卡| 不卡的电影网站| 免费xxxx性欧美18vr| 亚洲欧洲在线观看av| 日韩三级伦理片妻子的秘密按摩| 99在线精品免费| 日本不卡一区二区| 亚洲欧美一区二区三区国产精品 | 欧美一区二区三级| 99久久伊人精品| 蜜桃一区二区三区在线| 伊人性伊人情综合网| 精品少妇一区二区三区日产乱码 | 国产夫妻精品视频| 三级亚洲高清视频| 亚洲人成小说网站色在线| 久久人人爽人人爽| 91麻豆精品91久久久久久清纯| 丁香六月久久综合狠狠色| 男女性色大片免费观看一区二区| 国产精品看片你懂得| 精品国产区一区| 欧美日本在线播放| 99久久久精品| 国产精品亚洲第一| 美女一区二区三区| 午夜电影网一区| 亚洲人成7777| 国产精品麻豆视频| 久久女同互慰一区二区三区| 91精品国产综合久久久久| 在线观看av一区| 在线亚洲一区二区| 91麻豆精品在线观看| 国产成人精品三级| 国产精品亚洲综合一区在线观看| 蜜臀av一区二区| 另类小说一区二区三区| 亚洲成人777| 亚洲成人www| 亚洲成av人片在线观看无码| 一区二区三区四区国产精品| 自拍视频在线观看一区二区| 国产精品久久久久影视| 国产精品入口麻豆九色| 国产三级三级三级精品8ⅰ区| 日韩一区二区三区四区| 91精品国产综合久久蜜臀| 欧美一级搡bbbb搡bbbb| 日韩一区二区在线观看视频播放| 欧美精品丝袜久久久中文字幕| 欧美亚洲综合在线| 欧美一区永久视频免费观看| 欧美一区欧美二区| 精品99久久久久久| 日本一区二区电影| 最新成人av在线| 亚洲综合视频网| 亚洲成人激情综合网| 日韩精品电影在线| 国内精品伊人久久久久av影院| 黄色日韩网站视频| 成人免费福利片| 色天使色偷偷av一区二区| 欧美三级日韩三级国产三级| 《视频一区视频二区| 亚洲午夜在线电影| 久久国产剧场电影| 波多野洁衣一区| 欧美曰成人黄网| 精品成人一区二区| 国产精品久久久99| 一区二区三区四区不卡在线 | 在线日韩一区二区| 欧美高清www午色夜在线视频| 欧美成人video| 国产精品天干天干在线综合| 亚洲乱码国产乱码精品精的特点| 天堂久久一区二区三区| 国产在线不卡一区| 欧美在线一二三四区| 久久综合一区二区| 亚洲美女电影在线| 精品一区二区日韩| 91浏览器打开| 精品国产免费人成在线观看| 中文字幕一区二区三中文字幕| 日日夜夜免费精品视频| 懂色av一区二区三区蜜臀| 欧美精品电影在线播放| 国产精品福利在线播放| 日韩av电影免费观看高清完整版| 国产不卡一区视频| 777色狠狠一区二区三区| 国产精品三级视频| 青青草97国产精品免费观看| 97久久超碰国产精品电影| 日韩小视频在线观看专区| 亚洲卡通动漫在线| 国产精品88888| 日韩三级免费观看| 亚洲电影激情视频网站| av在线一区二区| 国产色一区二区| 美女久久久精品| 欧美日韩色一区| 亚洲麻豆国产自偷在线| 成人app网站| 久久久99精品免费观看| 日韩av网站在线观看| 欧美日韩综合一区| 一区二区久久久久久| 99久久国产免费看| 日本一区二区三区高清不卡 | 日韩国产欧美在线播放| 91在线观看视频| 国产精品久久毛片| 风间由美性色一区二区三区| 日韩精品一区二区在线| 天天av天天翘天天综合网色鬼国产 | 久久综合一区二区| 日欧美一区二区| 欧美日韩视频专区在线播放| 亚洲欧美日韩在线| 久久一夜天堂av一区二区三区| 午夜精品免费在线| 欧美做爰猛烈大尺度电影无法无天| 国产精品素人一区二区| 国产成人自拍网| 国产三级精品在线| 国产成人av一区二区三区在线观看| 精品美女在线播放| 国产成人在线视频网址| 欧美国产日韩亚洲一区|