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

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

?? d12_int.c

?? U盤(實(shí)際是USB SD卡讀卡器)的制作方案。 硬件構(gòu)成:ATmega168+PDIUSBD12+SD 內(nèi)附GCC源碼和原理圖。 開發(fā)環(huán)境是AvrStudio4.13 b528 + WinAVR
?? C
字號(hào):
#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,//最高位表示是否是可移動(dòng)設(shè)備  //MSB of this byte indicate that this is removable disk
 0x00,
 0x01,
 0x1F,
 0x00,0x00,0x00,

 '*',0xd5,0xc2,0xc6,0xe4,0xb2,0xa8,'*',//這一段可以自己添加內(nèi)容,但長(zhǎng)度不可變,編碼為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,//這一段可以自己添加內(nèi)容,但長(zhǎng)度不可變,編碼為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初始化后會(huì)修改
{
 0x00,0x0F,0x1C,0xF0,
 0x00,0x00,0x02,0x00
};

//the requied data of MODE SENSE
unsigned char SENSE[0x12]=                                      //模式探測(cè)返回?cái)?shù)據(jù)
{
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包標(biāo)志
	csw.dCSWTag=cbw.dCBWTag;		//主機(jī)發(fā)過來的tag
 	csw.dCSWDataResidue=DataResidue;
 	csw.bCSWStatus=status;
 	while(D12_Select_Endpoint(5));
 	D12_Write_Endpoint(5, (U8 *)&csw, 13);//定長(zhǎng)度 13字節(jié)
}

//SCSI讀操作
void read_10()
{
	U32 Byte_Count;//總字節(jié)數(shù)
	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];

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

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

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

	U8 buffer[512];	//實(shí)踐證明寫SD卡操作不可像讀操作那樣操作,否則會(huì)出錯(cuò) 所以用緩沖區(qū)來做 等收到512字節(jié)再寫

//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];

//總字節(jié)數(shù)	
	Byte_Count = 0;
	Byte_Count+=cbw.CBWCB[7];
	Byte_Count<<=8;
	Byte_Count+=cbw.CBWCB[8];
	Byte_Count<<=9;

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

//標(biāo)準(zhǔn)請(qǐng)求的函數(shù)指針
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));//調(diào)用相應(yīng)的標(biāo)準(zhǔn)請(qǐng)求響應(yīng)函數(shù)
				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包標(biāo)志

	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);//所有的數(shù)據(jù)傳輸都已在ep4內(nèi)完成,該程序沒有采用中斷機(jī)制
}

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

void D12SuspChgProc()
{
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
奇米在线7777在线精品| 蜜桃在线一区二区三区| 午夜精品久久久久久久蜜桃app| 91精品国产综合久久精品图片| 激情综合五月婷婷| 亚洲综合在线观看视频| 日本一区二区三区四区 | 欧美揉bbbbb揉bbbbb| 国产老女人精品毛片久久| 天涯成人国产亚洲精品一区av| 亚洲国产电影在线观看| 欧美www视频| 91精品久久久久久久久99蜜臂| 91网站最新地址| 成人免费高清在线观看| 国内精品伊人久久久久av影院| 五月天激情综合| 一区二区三区欧美激情| 国产精品视频在线看| 久久久亚洲午夜电影| 日韩欧美国产一二三区| 欧美欧美欧美欧美| 色94色欧美sute亚洲13| av在线这里只有精品| 国产精品538一区二区在线| 麻豆国产精品777777在线| 亚洲成人一区在线| 亚洲国产精品久久久男人的天堂 | 日韩精品在线看片z| 欧美高清性hdvideosex| 欧美日韩视频不卡| 欧美日韩一区二区在线观看| 日本韩国一区二区| 色天使久久综合网天天| 色婷婷av久久久久久久| 91国产福利在线| 欧美色图一区二区三区| 在线视频欧美区| 在线精品视频免费播放| 在线观看亚洲精品视频| 精品视频在线看| 欧美乱妇20p| 欧美日韩aaaaa| 911国产精品| 日韩欧美在线影院| 精品久久久久久久久久久久久久久久久 | 91在线观看成人| 色琪琪一区二区三区亚洲区| 日本高清不卡aⅴ免费网站| 欧美在线观看你懂的| 欧美男同性恋视频网站| 欧美一级片在线看| 26uuuu精品一区二区| 欧美国产日本韩| 亚洲特级片在线| 亚洲成人精品在线观看| 日本伊人色综合网| 国产在线视频不卡二| 国产盗摄精品一区二区三区在线| 国产白丝精品91爽爽久久| www.日本不卡| 欧美日本一道本| 2020国产精品自拍| 亚洲婷婷综合色高清在线| 亚洲综合激情网| 日本亚洲三级在线| 高清成人在线观看| 91精品办公室少妇高潮对白| 91精品国产日韩91久久久久久| 久久久久亚洲蜜桃| 自拍av一区二区三区| 视频一区二区三区入口| 国产福利一区二区三区| 91美女在线观看| 日韩视频在线观看一区二区| 欧美激情综合五月色丁香| 一区二区免费看| 精品午夜久久福利影院| 日本高清成人免费播放| 日韩精品影音先锋| 亚洲精品视频在线观看网站| 喷白浆一区二区| 99久久99久久精品免费观看 | 国产精品情趣视频| 亚洲成av人片在线| 成人a区在线观看| 91精品啪在线观看国产60岁| 国产精品久久久久精k8| 麻豆视频一区二区| 色婷婷国产精品| 精品999久久久| 亚洲国产中文字幕在线视频综合| 国产九九视频一区二区三区| 欧美在线短视频| 国产精品网站在线| 久久成人免费网| 在线看国产日韩| 最新国产の精品合集bt伙计| 狠狠色丁香久久婷婷综| 欧美日韩一区高清| 自拍偷拍亚洲综合| 国产99精品国产| 欧美tickle裸体挠脚心vk| 亚洲国产一二三| 99国产精品视频免费观看| 久久嫩草精品久久久精品| 视频一区在线播放| 欧洲av一区二区嗯嗯嗯啊| 综合激情成人伊人| 丁香六月综合激情| 久久精品男人天堂av| 九九国产精品视频| 欧美精品自拍偷拍动漫精品| 一区二区日韩av| 91看片淫黄大片一级在线观看| 久久精品亚洲麻豆av一区二区 | 国产精品一色哟哟哟| 日韩一区二区高清| 天天影视色香欲综合网老头| 色婷婷综合久久久| ㊣最新国产の精品bt伙计久久| 国产乱国产乱300精品| 欧美tickling网站挠脚心| 琪琪久久久久日韩精品| 91精品国产入口| 日韩国产一区二| 日韩一级在线观看| 男男gaygay亚洲| 欧美一区二区三区影视| 日本不卡1234视频| 欧美一级夜夜爽| 美国毛片一区二区| 精品免费视频.| 激情六月婷婷综合| 国产日韩欧美亚洲| 福利一区二区在线观看| 国产欧美日韩视频在线观看| 狠狠狠色丁香婷婷综合激情| 久久日韩精品一区二区五区| 国产精品一区二区视频| 中文字幕国产一区| 91免费看`日韩一区二区| 亚洲精品国产精华液| 欧美日韩视频第一区| 青青草一区二区三区| 久久综合网色—综合色88| 国产成人在线观看| 综合婷婷亚洲小说| 欧美三级电影一区| 无吗不卡中文字幕| 欧美成人r级一区二区三区| 国内精品伊人久久久久av一坑| 久久久五月婷婷| av高清不卡在线| 亚洲在线观看免费| 欧美一区二区三区免费在线看| 久久精品国产77777蜜臀| 久久精品亚洲精品国产欧美kt∨| 99久久精品一区| 亚洲国产va精品久久久不卡综合| 91精品国产91热久久久做人人| 寂寞少妇一区二区三区| 中文字幕在线一区二区三区| 在线影视一区二区三区| 麻豆成人免费电影| 国产精品久久久爽爽爽麻豆色哟哟| 色欧美片视频在线观看在线视频| 婷婷久久综合九色综合绿巨人 | 五月天网站亚洲| 久久美女艺术照精彩视频福利播放| 99久久99久久精品免费观看| 丝袜国产日韩另类美女| 欧美国产成人精品| 欧美精品日韩一区| 成人av影视在线观看| 亚洲第一搞黄网站| 中文字幕二三区不卡| 欧美日韩视频在线一区二区| 国产成人8x视频一区二区| 亚洲一区免费观看| 国产三级精品视频| 欧美人与性动xxxx| 国产成人精品aa毛片| 亚洲chinese男男1069| 日本一区二区不卡视频| 91麻豆精品久久久久蜜臀| 成人av电影在线播放| 久久国产精品99久久久久久老狼| 国产精品少妇自拍| 欧美一级理论性理论a| av一二三不卡影片| 麻豆精品一区二区三区| 亚洲自拍欧美精品| 国产欧美视频一区二区| 日韩亚洲欧美成人一区| 91国产精品成人| 不卡av在线网| 国产一区二区毛片| 日本va欧美va瓶| 亚洲已满18点击进入久久|