⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 03.htm

📁 硬盘MP3开发的所有源代码!整理自21ICBBS。 原作者xwj!
💻 HTM
📖 第 1 页 / 共 5 页
字号:
            status)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//返回CSW数据包<BR>{ 
            <BR>csw.dCSWTag=cbw.dCBWTag;<BR>csw.dCSWDataResidue=DataResidue;<BR>csw.bCSWStatus=status;<BR>write_endpoint_buff(1,sizeof(CSW),(unsigned 
            char 
            *)(&amp;csw));<BR>USB_usb_endp1_in=0;<BR>USB_usb_endp2_out=0;<BR>SCSI_Command=1;<BR>SCSI_Data=0;<BR>}<BR><BR><BR>void 
            write_10(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//SCSI写操作<BR>{<BR>unsigned 
            long int LBA,Byte_Count;<BR>unsigned char 
            i;<BR>if(SCSI_Data)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;((unsigned 
            char*)&amp;LBA)[0]=cbw.CBWCB[2];<BR>&nbsp;&nbsp;&nbsp;((unsigned 
            char*)&amp;LBA)[1]=cbw.CBWCB[3];<BR>&nbsp;&nbsp;&nbsp;((unsigned 
            char*)&amp;LBA)[2]=cbw.CBWCB[4];<BR>&nbsp;&nbsp;&nbsp;((unsigned 
            char*)&amp;LBA)[3]=cbw.CBWCB[5];<BR>&nbsp;&nbsp;&nbsp;((unsigned 
            char*)&amp;Byte_Count)[0]=0;<BR>&nbsp;&nbsp;&nbsp;((unsigned 
            char*)&amp;Byte_Count)[1]=cbw.CBWCB[7];<BR>&nbsp;&nbsp;&nbsp;((unsigned 
            char*)&amp;Byte_Count)[2]=cbw.CBWCB[8];<BR>&nbsp;&nbsp;&nbsp;((unsigned 
            char*)&amp;Byte_Count)[3]=0;<BR>&nbsp;&nbsp;&nbsp;Byte_Count&lt;&lt;=1;<BR>&nbsp;&nbsp;&nbsp;pData=buffer;<BR>&nbsp;&nbsp;&nbsp;while(USB_usb_endp2_out)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if((((unsigned 
            char *)&amp;Byte_Count)[3]==0)&amp;&amp;((((unsigned char 
            *)&amp;Byte_Count)[2]&amp;0x01)==0))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wait_IDE_busy();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_IDE_LBA(LBA);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_IDE_sector_count(1);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_IDE_command(IDE_Write_Sectors);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IDE_Address=IDE_Data;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set_IDE_address();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LBA++;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(!(RXOUTB0||RXOUTB1));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Byte_Count&gt;MAX_BULK_DATA_SIZE)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UEPNUM=2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//选择端点<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt;MAX_BULK_DATA_SIZE;i++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(!IDE_IORDY);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IDE_DIOW=0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IDE_DATA_L=UEPDATX;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i++;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IDE_DATA_H=UEPDATX;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IDE_DIOW=1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UEPSTAX=UEPSTAX 
            &amp; (~0x42);//清除RXOUTB 
            位<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Byte_Count-=MAX_BULK_DATA_SIZE;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else 
            <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UEPNUM=2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//选择端点<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt;Byte_Count;i++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(!IDE_IORDY);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IDE_DIOW=0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IDE_DATA_L=UEPDATX;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i++;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IDE_DATA_H=UEPDATX;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IDE_DIOW=1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UEPSTAX=UEPSTAX 
            &amp; (~0x42);//清除RXOUTB 
            位&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return_CSW(0x00,SUCCESS);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wait_IDE_busy();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IDE_Address=IDE_Bus_Not_Use;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set_IDE_address();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;}<BR>else<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;error(3);<BR>&nbsp;&nbsp;}<BR>}<BR><BR>void 
            endp2_out(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//主端点输出处理<BR>{<BR>if(SCSI_Command)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;if(read_endpoint_buff(2,sizeof(CBW),(unsigned 
            char 
            *)(&amp;cbw))!=sizeof(CBW)){error(2);return;}<BR>&nbsp;&nbsp;&nbsp;if(cbw.dCBWSignature!=0x55534243){error(3);return;}<BR>&nbsp;&nbsp;&nbsp;SCSI_Command=0;<BR>&nbsp;&nbsp;&nbsp;SCSI_Data=1;<BR>&nbsp;&nbsp;&nbsp;if(cbw.bmCBWFlags&amp;0x80)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;USB_usb_endp1_in=1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;USB_usb_endp2_out=0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;USB_usb_endp1_in=0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;USB_usb_endp2_out=1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch(cbw.CBWCB[0])<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Write_10: 
            USB_LED=!USB_LED;write_10();break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 
            Test_Unit_Ready: Return_CSW(0x00,SUCCESS);break; 
            <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Verify: 
            Return_CSW(0x00,SUCCESS);break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: 
            Return_CSW(cbw.dCBWDataTransgerLength,FAIL);break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;}<BR>else<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;read_endpoint_buff(2,0,0);<BR>&nbsp;&nbsp;}<BR>}<BR><BR><BR>void 
            read_10(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//SCSI读处理<BR>{<BR>unsigned 
            long int LBA=0,Byte_Count;<BR>unsigned char 
            i;<BR>if(SCSI_Data)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;((unsigned 
            char*)&amp;LBA)[0]=cbw.CBWCB[2];<BR>&nbsp;&nbsp;&nbsp;((unsigned 
            char*)&amp;LBA)[1]=cbw.CBWCB[3];<BR>&nbsp;&nbsp;&nbsp;((unsigned 
            char*)&amp;LBA)[2]=cbw.CBWCB[4];<BR>&nbsp;&nbsp;&nbsp;((unsigned 
            char*)&amp;LBA)[3]=cbw.CBWCB[5];<BR>&nbsp;&nbsp;&nbsp;((unsigned 
            char*)&amp;Byte_Count)[0]=0;<BR>&nbsp;&nbsp;&nbsp;((unsigned 
            char*)&amp;Byte_Count)[1]=cbw.CBWCB[7];<BR>&nbsp;&nbsp;&nbsp;((unsigned 
            char*)&amp;Byte_Count)[2]=cbw.CBWCB[8];<BR>&nbsp;&nbsp;&nbsp;((unsigned 
            char*)&amp;Byte_Count)[3]=0;<BR>&nbsp;&nbsp;&nbsp;Byte_Count&lt;&lt;=1;<BR>&nbsp;&nbsp;&nbsp;pData=buffer;<BR>&nbsp;&nbsp;&nbsp;while(USB_usb_endp1_in)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if((((unsigned 
            char *)&amp;Byte_Count)[3]==0)&amp;&amp;((((unsigned char 
            *)&amp;Byte_Count)[2]&amp;0x01)==0))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_IDE_LBA(LBA);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_IDE_sector_count(1);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_IDE_command(IDE_Read_Sectors);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IDE_Address=IDE_Data;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set_IDE_address();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IDE_DATA_H=0xFF;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IDE_DATA_L=0xFF;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LBA++;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Byte_Count&gt;MAX_BULK_DATA_SIZE)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UEPNUM=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//选择端点<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt;MAX_BULK_DATA_SIZE;i++)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//填数据寄存器<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(!IDE_IORDY);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//等待IDE 
            IO口忙<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IDE_DIOR=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//发读信号<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UEPDATX=IDE_DATA_L;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//读低字节<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i++;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UEPDATX=IDE_DATA_H;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//读高字节<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IDE_DIOR=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UEPSTAX=UEPSTAX | 
            0x10;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//设置TXRDY位<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(!( 
            UEPSTAX &amp; 0x01 
            ));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//等待TXCMP<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UEPSTAX=UEPSTAX 
            &amp; 
            (~0x01);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//清除TXCMP<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Byte_Count-=MAX_BULK_DATA_SIZE;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UEPNUM=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//选择端点<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt;Byte_Count;i++)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//填数据寄存器<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(!IDE_IORDY);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IDE_DIOR=0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UEPDATX=IDE_DATA_L;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i++;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UEPDATX=IDE_DATA_H;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IDE_DIOR=1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UEPSTAX=UEPSTAX 
            | 
            0x10;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//设置TXRDY位<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(!( 
            UEPSTAX &amp; 0x01 
            ));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//等待TXCMP<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UEPSTAX=UEPSTAX 
            &amp; 
            (~0x01);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//清除TXCMP<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return_CSW(0x00,SUCCESS);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IDE_Address=IDE_Bus_Not_Use;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set_IDE_address();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IDE_DATA_L=0xFF;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;}<BR>}<BR>else 
            error(2);return;<BR>}<BR><BR>void 
            endp1_in(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//主端点输入处理<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;switch(cbw.CBWCB[0])<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Read_10: 
            USB_LED=!USB_LED;read_10();break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Inquiry: 
            write_endpoint_buff(1,0x24,DISK_INF);Return_CSW(0x00,SUCCESS); 
            break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Read_Capacity: 
            write_endpoint_buff(1,0x08,DISK_CAPACITY);Return_CSW(0x00,SUCCESS);break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 
            Read_Format_capacity: 
            write_endpoint_buff(1,0x00,0x00);Return_CSW(cbw.dCBWDataTransgerLength,FAIL);break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Request_Sense: 
            write_endpoint_buff(1,0x12,SENSE);Return_CSW(0x00,SUCCESS);break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Medium_Removal: 
            Return_CSW(0x00,SUCCESS);break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x1a: 
            write_endpoint_buff(1,0x00,0x00);Return_CSW(cbw.dCBWDataTransgerLength,FAIL);break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: 
            write_endpoint_buff(1,0x00,0x00);Return_CSW(cbw.dCBWDataTransgerLength,FAIL);break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>}<BR><BR>void 
            usb(void)<BR>{<BR>LCD_go_home();<BR>prints("移动硬盘模式 
            ");<BR>LCD_line_feed();<BR>prints("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");<BR>disconnect_usb();<BR>init_usb();<BR>connect_usb();<BR>while(1)<BR>&nbsp;&nbsp;{ 
            <BR>&nbsp;&nbsp;&nbsp;read_usb_status();<BR>&nbsp;&nbsp;&nbsp;if(status_bus_reset){usb_bus_reset();continue;}<BR>&nbsp;&nbsp;&nbsp;if(status_suspend_change){usb_bus_suspend();continue;}<BR>&nbsp;&nbsp;&nbsp;if(status_control_out_port){endp0_out();continue;}<BR>&nbsp;&nbsp;&nbsp;if(status_control_in_port&amp;&amp;USB_usb_endp0_in){endp0_in();continue;}<BR>&nbsp;&nbsp;&nbsp;if(status_main_out_port){endp2_out();continue;}<BR>&nbsp;&nbsp;&nbsp;if(status_main_in_port&amp;&amp;USB_usb_endp1_in){endp1_in();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -