www.pudn.com > TMS320F2812usb.rar > usb.c


#include "DEC2812.h" 
#include "DSP28_Device.h" 
#include "DEC2812_USB.h" 
 
#ifndef _rtc_var 
#define _rtc_var 
 
unsigned int readFlag; 
unsigned int setupCnt; 
unsigned int sx2Setup; 
unsigned int irqValue; 
unsigned short setupDat; 
unsigned int setupBuff[512]; 
unsigned int sx2EP0Buf; 
unsigned int FLAGS_READ; 
unsigned int sx2EnumOK; 
unsigned int sx2BusActivity; 
unsigned int sx2Ready; 
 
#endif 
 
/********************************************************************************************* 
	filename:	void USB_Command_Write(unsigned int Value) 
	 
*********************************************************************************************/ 
void USB_Command_Write(unsigned int Value) 
{ 
	*USB_Command = Value; 
} 
 
unsigned int USB_Command_Read(void) 
{ 
	unsigned int i; 
	i = *USB_Command; 
	return(i); 
} 
 
unsigned short SX2_CommandWriteByte(unsigned int Value) 
{ 
	if((*USB_StatusRead & 0x08) == 0) 
	{ 
		return(FALSE); 
	} 
	USB_Command_Write(Value); 
	return(TRUE); 
} 
 
 
unsigned short SX2_Read(unsigned int addr,unsigned int *data) 
{ 
	/*READY信号准备好?*/ 
	if((*USB_StatusRead & 0x08) == 0) 
	{ 
		return(FALSE); 
	} 
	/*命令寄存器地址、读操作*/ 
	addr = addr & 0x3f; 
	USB_Command_Write(0xC0 | addr); 
	/*判断中断响应吗?*/ 
	readFlag = TRUE; 
	/*等待读标志为FALSE*/ 
	while(readFlag); 
	/*READY信号准备好?*/ 
	if((*USB_StatusRead & 0x08) == 0) 
	{ 
		return(FALSE); 
	} 
	*data = USB_Command_Read(); 
	return(TRUE); 
} 
 
unsigned short SX2_Write(unsigned int addr,unsigned int value) 
{ 
	/*READY信号准备好?*/ 
	if((*USB_StatusRead & 0x08) == 0) 
	{ 
		return(FALSE); 
	} 
	/*命令寄存器地址、读操作*/ 
	addr = addr & 0x3f; 
	USB_Command_Write(0x80 | addr); 
	/*写DATA*/ 
	USB_Command_Write((value>>4) & 0x0f); 
	USB_Command_Write(value & 0x0f); 
	/*READY信号准备好?*/ 
	if((*USB_StatusRead & 0x08) == 0) 
	{ 
		return(FALSE); 
	} 
	return(TRUE); 
} 
 
unsigned short Load_Descriptors(char length,char* desc) 
{ 
	unsigned char i; 
	if(!SX2_Write(SX2_DESC,(unsigned int)length)) 
	{ 
		return(FALSE); 
	} 
	SX2_CommandWriteByte((unsigned int)((length >> 12) & 0x0f)); 
	SX2_CommandWriteByte((unsigned int)((length >> 8) & 0x0f)); 
	SX2_CommandWriteByte((unsigned int)((length >> 4) & 0x0f)); 
	SX2_CommandWriteByte((unsigned int)(length & 0x0f)); 
	return(TRUE); 
}