📄 usbmodule.c
字号:
#include "global.h"
#include "stdio.h"
#include "hal.h"
#include "C5509REG.h"
int RdCnt=0;
unsigned long PixelCnt=0;
int SdRamCnt=0;
void Ep1_Rx(void)
{
ioport unsigned int* EndPoint=(ioport unsigned int*)0x6708;
ioport unsigned int* EpBuf;
unsigned int Length,i,buffer[64];
// static unsigned int rtime=0;
i=(EndPoint[1]<<4)+USB_BASEADDRESS;
EpBuf=(ioport unsigned int*)i;
Length=EndPoint[2]&0x7f;
for(i=0;i<Length;i++){
buffer[i]=EpBuf[i];
}
EndPoint[2] &= 0x7f;
/*搬移数据至全局buf,上位机发送过来的每一个命令都将已0xAA55开头*/
if((buffer[0]==0x55)&&(buffer[1]==0xaa))
{UsbRxBufCnt = 0;PcCommand = buffer[2];}
for(i=0;i<Length;i++)
UsbRxBuf[i+64*UsbRxBufCnt] = buffer[i];
UsbRxBufCnt++;
if(WriteCard==1)
{
if(PcCommand == 0x10)
{
for(i=0;i<Length;i++)
CmdFromCPU[i] = buffer[i+4];
CmdFromCPULength = buffer[3];
TestCard = 0;
}
if(PcCommand == 0x20)
{
for(i=0;i<Length;i++)
TestDataFromCPU[i] = buffer[i+4];
TestCardLength = buffer[3];
TestCard = 1;//This is a test for usb read and write
}
}
#ifdef _DEBUG
#endif
}
void Ep1_Tx(void)
{
ioport unsigned int* EndPoint=(ioport unsigned int*)0x6748;
ioport unsigned int* EpBuf;
unsigned int i,buffer[64];
unsigned int Length = 64;
unsigned char cardBuf[64];
unsigned char * cardResult;
//处理测试USB功能
if((WriteCard==1)&&(TestCard==1))
{
WriteCard = 0;
TestCard = 0;
for(i=0;i<TestCardLength;i++)
buffer[i+1]=TestDataFromCPU[i];
buffer[0]=TestCardLength;
for(i=0;i<64;i++)
TestDataFromCPU[i]=0;
}
i=(EndPoint[1]<<4)+USB_BASEADDRESS;
EpBuf=(ioport unsigned int*)i;
EndPoint[2] += Length;
for(i=0;i<Length;i++){
EpBuf[i]=buffer[i];
}
EndPoint[2] &= 0x7f; //reset NAK
#ifdef _DEBUG
#endif
}
void GetCommand()
{
PcCommand = SetupPkg.wValue;
#ifdef _DEBUG
printf("PC Command = %d\n",PcCommand);
#endif
if(PcCommand == 2)
{
WriteCard = 1;
}
if(PcCommand == 3)
{
*IODATA &= ~D6; //select card A
asm(" bclr xf "); //控制LED等闪烁,表明进行卡切换
Delay42KCLK();
asm(" bset xf ");
Delay42KCLK();
asm(" bclr xf ");
Delay42KCLK();
asm(" bset xf ");
Delay42KCLK();
}
if(PcCommand == 4)
{
*IODATA |= D6; //select card B
asm(" bclr xf "); ////控制LED等闪烁,表明进行卡切换
Delay42KCLK();
asm(" bset xf ");
Delay42KCLK();
asm(" bclr xf ");
Delay42KCLK();
asm(" bset xf ");
}
Stall_Ep0();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -