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

📄 usbdemo.c

📁 44b0x的U盘源代码
💻 C
字号:
#include "..\inc\option.h"
#include "..\inc\def.h"
#include "..\inc\44b.h"
#include "..\inc\44blib.h"
#include "..\inc\memory.h"
//#include "..\inc\lcd.h"
//#include "..\inc\lcdlib.h"
#include "..\inc\glib.h"
#include "..\inc\contrast.h"
//#include "..\inc\rtc.h"
#include "d12.h"

//extern U32 MCLK;
#define	BAUD_RATE	115200
TIME_STRUC SysTime;
U16	SERIAL_BAUD = 57600;
char table_begin[] = "/***************************************************************/\n";
extern Interrupt_Register_DEF Interrupt_Register;

struct
{
	U8 Reset;
	U8 Suspend;
	U8 Endp0_out;
	U8 Endp0_in;
	U8 Endp2_out;
	U8 Endp2_in;
}Count;

void ClrCount( void )
{
	Count.Reset = 0;
	Count.Suspend = 0;
	Count.Endp0_out = 0;
	Count.Endp0_in = 0;
	Count.Endp2_out = 0;
	Count.Endp2_in = 0;
}

/*
void ShowSysClock(int argc, char *argv[])
{
	printf("System is running @%dHz\n", MCLK);	
}*/

static void SwiHandler(void)
{
	printf("Swi Interrupt detected\n");
		while(1);
}

static void DataAbortHandler(void) 
{
	printf("Data Abort detected\n");
	while (1);
}

static void FetchAbortHandler(void)
{
	printf("Prefetch Abort detected\n");
	while (1);
}

static void UndefHandler() 
{
	printf("Halt on Undefined instruction\n");
	while (1);
}

#ifndef	INTERRUPT_SUPPORT
static void IrqHandler(void)
{
	printf("Halt on IRQ!\n");
	while(1);
}
#endif

static void FiqHandler(void)
{
	puts("Halt on FIQ!\n");
	while(1);
}
extern U32 SysRstVector;
extern U32 UdfInsVector;
extern U32 SwiSvcVector;
extern U32 InsAbtVector;
extern U32 DatAbtVector;
extern U32 ReservedVector;
extern U32 IrqSvcVector;
extern U32 FiqSvcVector;

static __inline void VectorInit(void)
{
	UdfInsVector = (U32)UndefHandler;
	SwiSvcVector = (U32)SwiHandler;
	InsAbtVector = (U32)FetchAbortHandler;
	DatAbtVector = (U32)DataAbortHandler;
#ifndef	INTERRUPT_SUPPORT
	IrqSvcVector = (U32)IrqHandler;
#endif
	FiqSvcVector = (U32)FiqHandler;
}

void Main(void)
//#pragma import(__use_no_semihosting_swi)
{
	int i;
	
	BoardInitStart();
	SystemClockInit();
	TimerInit(1000);
	MemCfgInit();
	PortInit();
	VectorInit();
	BoardInitEnd();
	Delay(10);
	SerialChgBaud(BAUD_RATE);
	Uart_Select(0);
	rPCONG = 0xffffffff;
	rPCONG &= ~(0xf<<8);
//	rPUPG |= (3<<4);
	rPCONG &= ~(0x3<<0);
	rPUPG |= (1<<0);
	rTICINT |= (1<<7);
		
	
	SysTime.year    = 3;
	SysTime.month   = 7;
	SysTime.day     = 2;
	SysTime.weekday = 3;
	SysTime.hour    = 0x17;
	SysTime.min     = 0x09;
	SysTime.sec     = 0;
	
	RtcSetDay(&SysTime);
	RtcSetTime(&SysTime);			
	
	
	printf("System Initialized.\n");		
	ClrCount();
	if(D12RdChipId()==0x1210)
	{
		printf("Find Pdiusbd12, chip id = 0x1210");
		
		 disconnect_usb();
		 init_usb();
		 connect_usb();
		
		while(1)
		{
			   if(!(rPDATG&(1<<0)))
			    {
			  	 read_interrupt_register();
			//      delay(10);
			//      printc(Interrupt_Register.Register[0]);
				 if(Interrupt_Register.Interrupt.bus_reset)
				 {
				 	usb_bus_reset();
					Count.Reset++;
					continue;
				}
				 if(Interrupt_Register.Interrupt.suspend_change)
				 {
				 	usb_bus_suspend();
					Count.Suspend = 0;
					 continue;
				 }
			         if(Interrupt_Register.Interrupt.control_out_port)
				{
					endp0_out();
					Count.Endp0_out++;
					continue;
				}
				 if(Interrupt_Register.Interrupt.control_in_port&&usb_flags.flags.usb_endp0_in)
				 {
				 	endp0_in();
					Count.Endp0_in++;
					continue;
				}
			//	 if(Interrupt_Register.Interrupt.port_out_1)endp1_out();
			//	 if(Interrupt_Register.Interrupt.port_in_1)endp1_in();
				 if(Interrupt_Register.Interrupt.main_out_port)
				 {
				 	endp2_out();
					Count.Endp2_out++;
					continue;
				}
				 if(Interrupt_Register.Interrupt.main_in_port&&usb_flags.flags.usb_endp2_in)
				 {
				 	endp2_in();
					Count.Endp2_in++;
					continue;
				}
			    }
		}
	}
}

//U32 pIrqStart, pIrqFinish, pIrqHandler;

⌨️ 快捷键说明

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