📄 usbmain.c
字号:
#include <stdio.h>
#include <stdarg.h>
#include "sysdef.h"
#include "armusb.h"
#include "uart.h"
ARMUSBFLAGS bUSBFlags;
CONTROL_XFER ControlData;
unsigned char Ep1Buf[EP1_PACKET_SIZE];
unsigned char Ep2BufTx[EP2_PACKET_SIZE];
unsigned char Ep2BufRx[EP2_PACKET_SIZE];
unsigned char Ep1Len, Ep2LenTx, Ep2LenRx;
unsigned char key4;
unsigned char volatile gbBulkPipeStage;
unsigned char volatile gbCSWStatus;
unsigned char SBufFlag = 1;
extern unsigned char WF;
/****************************************************************************
【功能说明】系统主函数
****************************************************************************/
UDWORD UsbDevice (UDWORD argc, const UBYTE **argv)
{
unsigned char i;
UBYTE tmpch;
UsbReconnect();
printf("\r\nUSB ram disk");
while(1)
{
if(GetChar_Uart0(&tmpch)==SUCCESS)
if(tmpch=='a'||tmpch=='A')
{
UsbDisconnect();
break;
}
USB_D12_SUSPEND;
if (bUSBFlags.bits.bBus_Reset)
{
bUSBFlags.bits.bIn_ISR = 1;
USB_DISABLE_INTERRUPT;
bUSBFlags.bits.bBus_Reset = 0;
USB_D12_SUSPEND;
printf("\r\nReset");
USB_ENABLE_INTERRUPT;
bUSBFlags.bits.bIn_ISR = 0;
}
if (bUSBFlags.bits.bSuspend)
{
bUSBFlags.bits.bIn_ISR = 1;
USB_DISABLE_INTERRUPT;
bUSBFlags.bits.bSuspend= 0;
printf("\r\nSuspend");
USB_ENABLE_INTERRUPT;
bUSBFlags.bits.bIn_ISR = 0;
}
if (bUSBFlags.bits.bSetup_Packet)
{
bUSBFlags.bits.bIn_ISR = 1;
USB_DISABLE_INTERRUPT;
bUSBFlags.bits.bSetup_Packet = 0;
UsbControlHandler();
USB_D12_SUSPEND;
printf("\r\nsetup");
USB_ENABLE_INTERRUPT;
bUSBFlags.bits.bIn_ISR = 0;
}
if(bUSBFlags.bits.bEP1_RxDone)
{
bUSBFlags.bits.bIn_ISR = 1;
USB_DISABLE_INTERRUPT;
bUSBFlags.bits.bEP1_RxDone = 0;
UsbWriteEndpoint(3,Ep1Buf,Ep1Len);
if(USB_SER_DEBUG)
{
for(i=0;i<Ep1Len;i++)
printf("%2.2x ", Ep1Buf[i]);
printf("\r\n");
}
USB_ENABLE_INTERRUPT;
bUSBFlags.bits.bIn_ISR = 0;
}
if(bUSBFlags.bits.bEP2_RxDone)
{
//ToDo Mass Storage work
CheckReceiveCBW();
while(gbBulkPipeStage != S_CBW_PHASE)
{
switch(gbBulkPipeStage)
{
case S_DATA_PHASE:
UsbWriteEndpoint(5,Ep2BufTx,Ep2LenTx);
while(gbBulkPipeStage==S_DATA_PHASE);
break;
case S_CSW_PHASE:
ReturnCSW();
UsbWriteEndpoint(5,Ep2BufTx,Ep2LenTx);
while(gbBulkPipeStage==S_CSW_PHASE);
break;
case S_CSW_DONE_PHASE:
gbBulkPipeStage = S_CBW_PHASE;
break;
default:
break;
}
}
//End of Mass Storage work
}
}
return SUCCESS;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -