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

📄 usbmodule.c

📁 dsp5509a USB 驱动 pc端程序 下面还有 dsp端程序
💻 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 + -