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

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

?? usb.c

?? 自己動(dòng)手做U盤
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):

void self_oprate()
{
	
	single_transmit(0, 0);
}


void (*StandardDeviceRequest[])(void) =
{
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 (*VendorDeviceRequest[])(void) =
{
self_oprate,
reserved,
reserved,
reserved,
reserved,
reserved,
reserved,
reserved,
reserved,
reserved,
reserved,
reserved,
//read_write_register,
reserved,
reserved,
reserved
};

void control_handler()
{
	unsigned char type, req;
	
	
	type = ControlData.DeviceRequest.bmRequestType & USB_REQUEST_TYPE_MASK;
	req = ControlData.DeviceRequest.bRequest & USB_REQUEST_MASK;
	//help_devreq(type, req); // print out device request
	if (type == USB_STANDARD_REQUEST) 		(*StandardDeviceRequest[req])();
	else if (type == USB_VENDOR_REQUEST)	(*VendorDeviceRequest[req])();
	else
	stall_ep0();
	//end:  ;
}





void bus_reset(void)
{
}


void ep0_rxdone(void)
{
	unsigned char ep_last, i;
	
	ep_last = D12_ReadLastTransactionStatus(0); // Clear interrupt flag
	
		
	if (ep_last & D12_SETUPPACKET) 
	{
		ControlData.wLength = 0;
		ControlData.wCount = 0;
		if( D12_ReadEndpoint(0, (unsigned char *)(&(ControlData.DeviceRequest)),sizeof(ControlData.DeviceRequest)) != sizeof(DEVICE_REQUEST) )
		{			
			D12_SetEndpointStatus(0, 1);
			D12_SetEndpointStatus(1, 1);
			bEPPflags.bits.control_state = USB_IDLE;
			return;
		}
	

	ControlData.DeviceRequest.wValue = SWAP(ControlData.DeviceRequest.wValue);
	ControlData.DeviceRequest.wIndex = SWAP(ControlData.DeviceRequest.wIndex);
	ControlData.DeviceRequest.wLength = SWAP(ControlData.DeviceRequest.wLength);
	D12_AcknowledgeEndpoint(0);
	D12_AcknowledgeEndpoint(1);
	ControlData.wLength = ControlData.DeviceRequest.wLength;
	ControlData.wCount = 0;
	if (ControlData.DeviceRequest.bmRequestType & (unsigned char)USB_ENDPOINT_DIRECTION_MASK)
		{
			bEPPflags.bits.setup_packet = 1;
			bEPPflags.bits.control_state = USB_TRANSMIT; /* get command */
		}
	else 
	{
		if (ControlData.DeviceRequest.wLength == 0) 
		{
			bEPPflags.bits.setup_packet = 1;
			bEPPflags.bits.control_state = USB_IDLE; /* set command */
		}
		else 
		{
				if(ControlData.DeviceRequest.wLength > MAX_CONTROLDATA_SIZE) 
				{
					bEPPflags.bits.control_state = USB_IDLE;
					D12_SetEndpointStatus(0, 1);
					D12_SetEndpointStatus(1, 1);
				}
				else 
				{
					bEPPflags.bits.control_state = USB_RECEIVE; /* set command with OUT token */
				}
			} 													// set command with data
		} 

															// else set command
	} 															// if setup packet
	else if (bEPPflags.bits.control_state == USB_RECEIVE) 
	{
		i = D12_ReadEndpoint(0, ControlData.dataBuffer + ControlData.wCount,EP0_PACKET_SIZE);
		ControlData.wCount += i;
		if( i != EP0_PACKET_SIZE || ControlData.wCount >= ControlData.wLength) 
		{
			bEPPflags.bits.setup_packet = 1;
			bEPPflags.bits.control_state = USB_IDLE;
		}
	}
	else 
	{
		bEPPflags.bits.control_state = USB_IDLE;
	}
}


void ep0_txdone(void)
{
	short i = ControlData.wLength - ControlData.wCount;	
	
	
	D12_ReadLastTransactionStatus(1); // Clear interrupt flag
	if (bEPPflags.bits.control_state != USB_TRANSMIT)	return;
	if( i >= EP0_PACKET_SIZE) 
	{
		D12_WriteEndpoint(1, ControlData.pData + ControlData.wCount, EP0_PACKET_SIZE);
		ControlData.wCount += EP0_PACKET_SIZE;
		bEPPflags.bits.control_state = USB_TRANSMIT;
	}
	else if( i != 0) 
	{
		D12_WriteEndpoint(1, ControlData.pData + ControlData.wCount, i);
		ControlData.wCount += i;
		bEPPflags.bits.control_state = USB_IDLE;
	}
	else if (i == 0)
	{
		D12_WriteEndpoint(1, 0, 0); // Send zero packet at the end ??? 
		bEPPflags.bits.control_state = USB_IDLE;
	}
}


void dma_eot(void)
{
	if(bEPPflags.bits.dma_state == DMA_PENDING)    	bEPPflags.bits.setup_dma = 1;
	else   											bEPPflags.bits.dma_state = DMA_IDLE;
	
}
void cbw_answer()
{
	;
}

void ep1_txdone(void)
{
	unsigned char i;
	i=D12_ReadLastTransactionStatus(3); /* Clear interrupt flag */
	UART0_SendByte(0xdc);
}


void ep1_rxdone(void)
{	//unsigned char p[16];
    //unsigned char dataLen;
    //unsigned char i;
	D12_ReadLastTransactionStatus(2); /* Clear interrupt flag */
 /*   dataLen=D12_ReadEndpoint(2,p,16);
    
    if(dataCount==0)        // a new command
    {
      if(*p==2)
       {
        
       }
    }
    else
    {
    
    }
    
	 for(i=0;i<dataLen;i++)
	 	{
	 	 receive_buffer[curStep]=p[i];
	 	 //UART0_SendByte(tempBuf[i]);
	 	 curStep++;
	 	 }
	 //if((receive_buffer[dataLen-4]=='E')&&(receive_buffer[dataLen-3]=='N')&&(receive_buffer[dataLen-2]=='D'))
	 	//analyse();//
	 for(i=0;i<curStep;i++)
	 	UART0_SendByte(receive_buffer[i]);
	 curStep-=1;
	 */
	bEPPflags.bits.ep1_rxdone = 1;
}

void analyse(void)
{	unsigned char *pb;
	unsigned char sendFlag;
	unsigned char tempi;
	unsigned int dlen;
	pb=receive_buffer;
	if(((*pb++)!='S')&&((*pb)!='T'))
		return ;
	pb++;
	sendFlag=(*pb)-48;
	pb++;
	for(tempi=0;tempi<4;tempi++)
		{dlen=dlen*16+(*pb)-48;pb++;}
	//UART0_SendByte(dlen);
	
}
void main_txdone(void)
{
	D12_ReadLastTransactionStatus(5); /* Clear interrupt flag */
	bEPPflags.bits.ep1_rxdone = 1;
}

void main_rxdone(void)
{
	
	unsigned char i;
	
	D12_ReadLastTransactionStatus(4); // Clear interrupt flag
	D12_SelectEndpoint(4);
	Outport_command( 0xF0);
	i=Inport_data();
	i=Inport_data();
	for(i=0;i<64;i++)
		{cbw[i]=Inport_data();}	

   	   	
	if((cbw[0]==0x55)&(cbw[1]==0x53)&(cbw[2]==0x42)&(cbw[3]==0x43))
	{
	    Outport_command(0xf2);
	    csw[0]=0x55;
	    csw[1]=0x53;
	    csw[2]=0x42;
	    csw[3]=0x53;
	    for(i=4;i<8;i++)
	    csw[i]=cbw[i];
	    for(i=8;i<12;i++)
	    csw[i]=0;
	    csw[12]=0; 
		switch(cbw[15])
		{	
			case 0x12:
				{	
				 CSW_transmit((unsigned char *)&inquirydata,36);
				 rr1:	Outport_command(5);
				 i=Inport_data();	
			  	 if(i!=0){goto rr1;}		    
			    
				 CSW_transmit((unsigned char *)&csw,13);					
				}
			   	break;
			case 0x23:
				{	
				  
				 CSW_transmit((unsigned char *)&fcap,12);
				 rr:	Outport_command(5);
				 i=Inport_data();	
			  	 if(i!=0){goto rr;}
			  	 CSW_transmit((unsigned char *)&csw,13);
				}
				break;
			case 0x25:
				{
				
				 CSW_transmit((unsigned char *)&cap,8);
				 rr2:	Outport_command(5);
				 i=Inport_data();	
			  	 if(i!=0){goto rr2;}	
			  	 		    
				 CSW_transmit((unsigned char *)&csw,13);
				}
				break;
			case 0x28:
				{
				 unsigned long int start_page;
				 unsigned long int page_num,n;				
				 start_page=cbw[17];
				 start_page=start_page*256+cbw[18];	 
				 start_page=start_page*256+cbw[19];
				 start_page=start_page*256+cbw[20];
				 page_num=cbw[22];
				 page_num=page_num*256+cbw[23];					 
				 for(n=0;n<page_num;n++)
					 {	
					 	Flash_page_read(start_page);
						CSW_transmit((unsigned char *)&Data_buffer,512);
						rr0:	Outport_command(5);
						i=Inport_data();	
				  		if(i!=0){goto rr0;}    
					    start_page++;
					 }	
				 CSW_transmit((unsigned char *)&csw,13);
				 }
				 break;
			case 0x1a:
				{					 
				 CSW_transmit((unsigned char *)&mode,12);
				 rr4:	Outport_command(5);
				 i=Inport_data();	
			  	 if(i!=0){goto rr4;}
				 CSW_transmit((unsigned char *)&csw,13);
				}
				break;			
			case 0x2a:
				{
					unsigned char j;
					unsigned int h;
					trans_start_page=cbw[17];
					trans_start_page=trans_start_page*256+cbw[18];	 
					trans_start_page=trans_start_page*256+cbw[19];
					trans_start_page=trans_start_page*256+cbw[20];
					trans_num=cbw[22];
					trans_num=trans_num*256+cbw[23];					
					block_addr=trans_start_page/32;
					count=0;
					count1=0;					
					for(j=0;j<32;j++)
							{
								Flash_page_read(block_addr*32+j);
								for(h=0;h<512;h++)
								receive_buffer[j*512+h]=Data_buffer[h];
							}
					Flash_block_erase(block_addr);	
				}
				break;
			default:
				 CSW_transmit((unsigned char *)&csw,13);			
		}
		
	}
	else
	{	unsigned char i;
		unsigned int j;		
		for(i=0;i<64;i++)
		{				
			receive_buffer[(trans_start_page%32)*512+count1]=cbw[i];		
			count1++;	
		}			
		Outport_command(0xf2);	    
		if(trans_start_page%32+trans_num<=32)
		{   
			
			
			if(count1>=(trans_num*512))				
			{ 
			   unsigned long int page=block_addr*32;
			   count1=0;	
			   for(i=0;i<10;i++)
			   {
				  for(j=0;j<512;j++)
				  Data_buffer[j]=receive_buffer[i*512+j];
				  Flash_page_program(page+i);
		       } 
		      CSW_transmit((unsigned char *)&csw,13);
		       for(i=10;i<32;i++)
			   {
				  for(j=0;j<512;j++)
				  Data_buffer[j]=receive_buffer[i*512+j];
				  Flash_page_program(page+i);
		       } 			   	 	  				     			      
			}
		}
		
		else
		{
			
			if((trans_start_page%32+count1/512)>=32)
			{
				 trans_num-=count1/512;
				 count1=0;						
				 for(i=0;i<32;i++)
					{
						for(j=0;j<512;j++)
						Data_buffer[j]=receive_buffer[i*512+j];
						Flash_page_program(block_addr*32+i);
					}			
				block_addr++;
				for(i=0;i<32;i++)
					{
						Flash_page_read(block_addr*32+i);
						for(j=0;j<512;j++)
						receive_buffer[i*512+j]=Data_buffer[j];
					}
				Flash_block_erase(block_addr);	
				trans_start_page=block_addr*32;
			}
		}
		
	}
}	


void USB_mainloop()
{
		if (bEPPflags.bits.bus_reset) 
		{
			DISABLE;
			bEPPflags.bits.bus_reset = 0;
			ENABLE;
		} // if bus reset
		if (bEPPflags.bits.suspend) 
		{
			DISABLE;
			bEPPflags.bits.suspend= 0;
			ENABLE;
			suspend_change();
		} // if suspend change
		if (bEPPflags.bits.setup_packet)
		{
			DISABLE;
			bEPPflags.bits.setup_packet = 0;
			ENABLE;
			control_handler();
		} // if setup_packet
		if(bEPPflags.bits.ep1_rxdone) 
		{
			DISABLE;
			bEPPflags.bits.ep1_rxdone = 0;
			ENABLE;
		} 
		if(bEPPflags.bits.setup_dma) 
		{
			DISABLE;
			bEPPflags.bits.setup_dma = 0;
			ENABLE;
			setup_dma();
		} // if setup_dma 

}

void fn_usb_isr()
{
	unsigned int i_st;
	
	bEPPflags.bits.in_isr = 1;
	i_st = D12_ReadInterruptRegister();
	
	if(i_st != 0)
	{
	    if(i_st & D12_INT_BUSRESET)
		{		
			bus_reset();
			bEPPflags.bits.bus_reset = 1; //StatusLED_ON(1);
		}
		else
		{
			if(i_st & D12_INT_EOT)				dma_eot();
			if(i_st & D12_INT_SUSPENDCHANGE)	bEPPflags.bits.suspend = 1;
			if(i_st & D12_INT_ENDP0IN)			ep0_txdone();
			if(i_st & D12_INT_ENDP0OUT)			ep0_rxdone();
			if(i_st & D12_INT_ENDP1IN)			ep1_txdone();
			if(i_st & D12_INT_ENDP1OUT)			ep1_rxdone();
			if(i_st & D12_INT_ENDP2IN)			main_txdone();
			if(i_st & D12_INT_ENDP2OUT)			main_rxdone();
		}
	}
	bEPPflags.bits.in_isr = 0;
	USB_mainloop();
}



void __irq IRQ_USB_Eint0(void)

{
	DISABLE;  
	fn_usb_isr();
	EXTINT = 0x01;VICVectAddr = 0;
	ENABLE;
}

void Init_USB_inter()
{
    
   	VICIntSelect = 0x00000000;		// 設(shè)置所有中斷分配為IRQ中斷
   	VICVectCntl3 = 0x20|14; 
   	VICVectAddr3 = (int)IRQ_USB_Eint0; // 設(shè)置中斷服務(wù)程序地址
   	EXTINT = 0x01;					// 清除EINT0中斷標(biāo)志	
	USB_INTERRUPT_ON;				// 使能EINT1中斷
}  	

void USB_reset()
{	
	
	USBRST_L;
	Delayms(20);
	USBRST_H;
	Delayms(10);
	
}

void USB_init(void)
{

	
	USBRST_H;
	USB_reset();
		
	Outport_command(0xF3);
	Outport_data(0x0E);
	Outport_data(0x03);
	
	Delayms(300);
	
	Outport_command(0xF3);
	Outport_data(0x1E);
	Outport_data(0x03);
				
	Init_USB_inter();
	if(USBMode==0)
    {
     pDeviceDescr=ctl_DeviceDescr;
     pConfigDescr=ctl_ConfigDescr;
    }
  else
    {
     pDeviceDescr=uDisk_DeviceDescr;
     pConfigDescr=uDisk_ConfigDescr;
    }
     
}








?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
26uuu国产在线精品一区二区| 亚洲r级在线视频| 日韩一区二区在线播放| 色综合天天综合狠狠| 国产99久久久精品| 日韩精彩视频在线观看| 奇米777欧美一区二区| 成人午夜免费av| 色一情一伦一子一伦一区| 欧美人成免费网站| 国产日韩精品一区二区三区在线| 亚洲欧美区自拍先锋| 日本亚洲最大的色成网站www| 国产福利不卡视频| 在线欧美小视频| 中文字幕国产一区二区| 日韩国产精品久久| 91老师片黄在线观看| 精品国产91洋老外米糕| 亚洲成人资源网| 成人午夜看片网址| 精品国产免费人成电影在线观看四季 | 男人的天堂久久精品| 99九九99九九九视频精品| 精品免费一区二区三区| 亚洲一区成人在线| 91香蕉视频mp4| 国产日韩av一区| 韩国一区二区视频| 日韩欧美亚洲另类制服综合在线| 亚洲一区成人在线| 91久久精品网| 亚洲夂夂婷婷色拍ww47| 91视视频在线观看入口直接观看www| 久久九九国产精品| 国产电影一区在线| 国产网红主播福利一区二区| 美女视频一区在线观看| 日韩精品综合一本久道在线视频| 亚洲一二三四在线| 欧美视频一二三区| 日本视频免费一区| 日韩欧美国产综合一区| 精品一区二区在线播放| 26uuu亚洲| 成人av中文字幕| 亚洲精品videosex极品| 欧美图片一区二区三区| 日韩高清不卡一区| 精品美女一区二区| 成人激情动漫在线观看| 成人欧美一区二区三区黑人麻豆| 色偷偷成人一区二区三区91| 丝袜美腿高跟呻吟高潮一区| 欧美一级在线免费| 国产精品一二三区| 亚洲欧美日韩在线不卡| 777a∨成人精品桃花网| 国产曰批免费观看久久久| 国产精品天干天干在线综合| 色哟哟一区二区在线观看| 日日夜夜精品视频免费| 国产视频一区在线观看| 91精彩视频在线观看| 久久精品国产久精国产| 最新国产の精品合集bt伙计| 欧美精品v国产精品v日韩精品| 国产一区欧美一区| 一区二区在线观看不卡| 久久免费的精品国产v∧| 99国产一区二区三精品乱码| 日本强好片久久久久久aaa| 中文字幕在线观看一区| 日韩精品最新网址| 亚洲一区二区三区在线看| 国产精品天干天干在线综合| 中文字幕在线观看不卡| 国产一区二区网址| 国产精品一区二区三区乱码 | 欧美在线视频你懂得| 在线观看日韩电影| 欧美日韩免费观看一区二区三区| 欧美午夜免费电影| 欧美三级电影在线观看| 91免费观看国产| 色综合久久久久综合99| 在线看日韩精品电影| 欧美日韩成人综合| 欧美日韩高清一区二区不卡| 欧美日韩一区二区三区不卡| 欧美日韩在线精品一区二区三区激情| 91香蕉视频黄| 欧美日韩三级在线| 欧美日韩免费不卡视频一区二区三区| 一本大道久久a久久精品综合| 97成人超碰视| 欧美视频一区在线| 日韩丝袜美女视频| 国产日韩视频一区二区三区| 久久精品一级爱片| 国产精品久久久久桃色tv| 亚洲人成在线观看一区二区| 激情综合网av| 韩国v欧美v亚洲v日本v| 91在线你懂得| 91精品国产一区二区| 国产视频不卡一区| 亚洲一卡二卡三卡四卡| 精品一区二区三区香蕉蜜桃| 成人的网站免费观看| 欧美午夜精品久久久久久孕妇| 欧美v日韩v国产v| 亚洲已满18点击进入久久| 老司机免费视频一区二区三区| 色视频成人在线观看免| 日韩三级视频中文字幕| 国产精品国模大尺度视频| 亚洲777理论| 成人永久免费视频| 欧美一区二区在线观看| 中文字幕中文字幕在线一区| 久久精品国产免费| 91天堂素人约啪| 久久久99久久| 久久精品国产999大香线蕉| av在线播放不卡| 日本一二三四高清不卡| 精品一二三四区| 久久亚洲精精品中文字幕早川悠里 | 91久久香蕉国产日韩欧美9色| av综合在线播放| 欧美成人精品高清在线播放| 亚洲午夜三级在线| 91免费看`日韩一区二区| 国产日本欧美一区二区| 精品一区二区免费在线观看| 欧美喷水一区二区| 亚洲欧洲成人自拍| 成人app软件下载大全免费| 国产欧美精品一区二区三区四区| 国产成人午夜99999| 久久午夜电影网| 国产最新精品免费| 久久久亚洲高清| 成人午夜在线播放| 中文字幕永久在线不卡| 一本到高清视频免费精品| 一区二区三区91| 99综合影院在线| 欧美色国产精品| 精品亚洲欧美一区| 亚洲美女视频在线观看| 韩国av一区二区三区在线观看| 欧美电视剧免费观看| 成人午夜视频在线| 日韩av不卡一区二区| 国产亚洲短视频| 欧美精品丝袜久久久中文字幕| 国产另类ts人妖一区二区| 亚洲美女一区二区三区| 精品国产一区二区亚洲人成毛片| 91亚洲午夜精品久久久久久| 蜜臀av性久久久久蜜臀av麻豆| 欧美mv日韩mv| 国内精品国产三级国产a久久| 欧美日韩性生活| 日韩福利视频网| 3751色影院一区二区三区| 亚洲精品菠萝久久久久久久| 成人国产精品免费观看视频| 欧美成人三级在线| 国模一区二区三区白浆| 日韩视频中午一区| 成人黄色国产精品网站大全在线免费观看 | 色欧美片视频在线观看| 国产精品一二一区| 国产乱人伦精品一区二区在线观看| 日韩精品欧美成人高清一区二区| 亚洲一区二区三区国产| 亚洲综合久久av| 亚洲最新视频在线观看| 亚洲午夜一区二区| 亚洲综合在线观看视频| 1024国产精品| 亚洲精品视频在线看| 亚洲欧美激情小说另类| 亚洲精品视频在线| 亚洲国产一二三| 亚洲成人激情综合网| 无码av免费一区二区三区试看| 亚洲第一福利视频在线| 五月婷婷久久丁香| 日韩不卡免费视频| 久国产精品韩国三级视频| 激情文学综合网| 国产98色在线|日韩| www.日本不卡| av综合在线播放| 欧美视频一区二区在线观看| 91精品国产综合久久久久|