📄 usbdemo.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 + -