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

📄 usbmain.c

📁 Philips PIDUSBP11 驱动代码
💻 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 + -