亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? usb.c

?? 6713DSP  USB編程
?? C
字號:
/********************************************************************************\
\*  USB.c	V1.00													    *\

\*  Copyright 2004 by SEED Electronic Technology LTD.                           *\
\*  All rights reserved. SEED Electronic Technology LTD.                        *\
\*  Restricted rights to use, duplicate or disclose this code are               *\
\*  granted through contract.    											    *\
                                             
\*	Designed by: Hongshuai.Li												    *\
\********************************************************************************/
/********************************************************************************\
\*	The usb.c routine contain several applied functions which may be used in
 USB_Test.c. *\
\********************************************************************************/

#include <csl.h>
#include <csl_emif.h>
#include <csl_irq.h>
#include <DEC6713.h>
#include "usb.h"
#include "sx2.h"

Uint32 USBTimeOut = 0x0400;
BOOL ReadFlag;
static Uint8 setupCnt = 0;
static BOOL setupDat = False;
/* global variables */
Uint8 irqValue;			 /* interrupt register value */
Uint8 SetupBuff[8];		 /* setup transaction buffer */
BOOL sx2Ready;			 /* status byte for POST */ 
BOOL sx2BusActivity;	 /* status byte for suspend */ 
BOOL sx2EnumOK;			 /* status byte for enumeration complete */
BOOL sx2EP0Buf;			 /* status for endpoint 0 buffer */
BOOL sx2Setup;			 /* setup flag set in Int0() ISR */
BOOL FLAGS_READ = False; /* FIFO */

/********************************************************************************\
\*USB_Command_Write()		-Write USB CY7C68001 command registers or endpoint 0.
\*Parameters:	To be written data.
\*Return: No.
\********************************************************************************/
Uint16 USB_Command_Write(Uint16 regdat)
{
	Uint16 *pdata;
	Uint32 Address;
	Address = USB_Base_16Add;
	Address += USB_Command_Add;
	pdata = (Uint16 *)(Address);
	*pdata = (regdat & 0x00FF);
	return TRUE;
}
	/* Note: Must judge READY status before write command register. */
	
/********************************************************************************/

/********************************************************************************\
\*USB_Command_Read()		-Read CY7C68001 command registers.
\*Parameters:	
\*Return: The related register value.
\********************************************************************************/
Uint16 USB_Command_Read()
{
	Uint16 *pdata;
	Uint32 Address = 0;	
	
	Address = USB_Base_16Add;
	Address += USB_Command_Add;
	
	pdata = (Uint16 *)Address;
	return(*pdata & 0x00FF);
}
/********************************************************************************/

/********************************************************************************\
\*SX2_Fifo_WriteSingle()
\*Parameters:
\*Returns:
\********************************************************************************/
Uint16 SX2_Fifo_WriteSingle(Uint16 USB_Fifo_Id,Uint16 USBdata)
{
	/*
 	switch(channel)
 		{
 	     case 0:
 	     		{
 	     			(*(Uint32 *)(0x90280000+(0<<2))) = USBdata;
 	     		    return(True);
 	     		}
 	     case 1:
 	     		{
 	     			(*(Uint32 *)(0x90280000+(1<<2))) = USBdata;
 	     			return(True);
 	     		}
 	     case 2:
 	      		{
 	      			(*(Uint32 *)(0x90280000+(2<<2))) = USBdata;
 	      			return(True);
 	      		}
 	     case 3:
 	     		{
 	     			(*(Uint32 *)(0x90280000+(3<<2))) = USBdata;
 	     			return(True);
 	     		}
 	     default: return(False);
 		}
 		*/
	
//	Uint32 *pdata;
	Uint32 Address;
	Address = USB_Base_16Add;
	Address += USB_Fifo_Id<<1;
    (*(Uint16 *)Address) = USBdata;
	//*pdata = USBdata;
	return True;
	
}
/********************************************************************************/

/********************************************************************************\
\*USB_Fifo_ReadSingle()		-Read FIFO data buffer.
\*Parameters:
\*Returns:
\********************************************************************************/
Uint16 SX2_Fifo_ReadSingle(Uint16 USB_Fifo_Id)
{
	Uint32 Address;
	Uint16 *pdata;
	Address = USB_Base_16Add;
	Address += USB_Fifo_Id<<1;
	pdata = (Uint16 *)Address;
	return(*pdata & 0xFFFF);
}
/********************************************************************************/
/********************************************************************************\
\*USB_ComWriteByte()		-Write to CY7C68001 command interface.
\*Parameters: The related register valve.
\*Return: True when successing,False when failuring.
\********************************************************************************/
extern BOOL USB_ComWriteByte(Uint16 value)
{
	Uint16 TimerCounter = 0;
	/* USB ready or not. */
	Uint8 StateAdd;
	
	StateAdd = DEC6713_STAT_REG;
	while(!(DEC6713_cpld_rget(StateAdd) & 0x01))
	{
		if(TimerCounter++ > USBTimeOut)
		{
			return False;
		}
	}
	
	/* USB ready */
//	while(1)
//	{
	USB_Command_Write(value);
//	}
	return True;
}
/********************************************************************************/
/********************************************************************************\
\* Write_USBReg()		-Write CY7C68001 register.
\* Parameters: Addr. Address of register.
			   Value. Value of register.
\* Return: True when successing,False when failuring.
\********************************************************************************/
Uint16 Write_SX2reg(Uint8 Addr,Uint16 value)
{
	Uint32 TimerCounter = 0;
	Uint8 StateAdd;
	Addr = Addr & 0x3F;
	/* Write address. */
	if(!USB_ComWriteByte(0x80 | Addr))
	{
		return False;
	}
	/* Write high nibble of register data. */
	USB_ComWriteByte(value >> 4 &0x0F);
	/* Write low nibble of register data. */
	USB_ComWriteByte(value  & 0x0F);
	/* Wait ready ok. */
	StateAdd = DEC6713_STAT_REG;
	while(!(DEC6713_cpld_rget(StateAdd) & 0x01))
	{
		if(TimerCounter++ > USBTimeOut)
		{
			return False;
		}
	}
	return True;
}
/********************************************************************************/
/********************************************************************************\
\* Read_USBReg()		-Read CY7C68001 register.
\* Parameters: Addr. Address of register.
			   Value. Value of register.
\* Return: True when successing,False when failuring.
\********************************************************************************/
Uint16 Read_SX2reg(Uint8 Addr,Uint16 *value)
{
//	Uint32 value;
	Uint32 TimerCounter = 0;
	Uint8 StateAdd;
	Uint32 ReadMark = 1;
	StateAdd = DEC6713_STAT_REG;
	
	while(!(DEC6713_cpld_rget(StateAdd) & 0x01))
	{
		if(TimerCounter++ > USBTimeOut)
		{
			return False;
		}
	}
	
	/* Clear the high two bit of the addr. */
	Addr = Addr & 0x3F;
	/* Write 'read register' command to SX2.  */
	USB_Command_Write(0xC0 | Addr);
	
	/* Set read flag to indicate to the interrupt routine that we
	   are expecting an interrupt to read back the contents of the
	   addressed register. The interrupt latency of the SX2 is in
	   tens of microseconds, so it's safe to write this flag after
	   the initial 'read' byte is written.  */
	/* Set ReadFlag as Ture,the interrupt routine return ReadFlag with False only. */
	ReadFlag = True;

	/* Wait for readflag to be cleared by an interrupt. */
	while(ReadMark)
	{	
		ReadMark = ReadFlag;
	}
	
	/* Wait the ready is ok. */
	StateAdd = DEC6713_STAT_REG;
	
	while(!(DEC6713_cpld_rget(StateAdd) & 0x01))
	{
		if(TimerCounter++ > USBTimeOut)
		{
			return False;
		}
	}
	
	*value = USB_Command_Read();
	//asm(" NOP");
	
	return True;
}
/********************************************************************************/
/********************************************************************************\
\* SX2_Fifo_Write()		-Write buffer to USB FIFO.
\* Parameters:	USB_Fifo_Id. The selected endpoint.
				pdata. The pointer to databuffer.
				Length. The length of databuffer.
\* Return: True when successing,False when failuring.
\********************************************************************************/
extern BOOL SX2_Fifo_Write(Uint16 USB_Fifo_Id,Uint16 *pdata,Uint16 Length)
{
	Uint16 i;
	for(i=0;i<=Length-1;i++)
	{
		//SX2_Fifo_WriteSingle(USB_Fifo_Id,pdata[i]);
		
		if(!SX2_Fifo_WriteSingle(USB_Fifo_Id,pdata[i]))
		{
			return False;
		}

	}
	return True;
}
/********************************************************************************/
/********************************************************************************\
\* USB_Fifo_Read()		-Read buffer to USB FIFO.
\* Parameters:	USB_Fifo_Id. The selected endpoint.
				pdata. The pointer to databuffer.
				Length. The length of databuffer.
\* Return: True when successing,False when failuring.
\********************************************************************************/
extern BOOL SX2_Fifo_Read(Uint16 USB_Fifo_Id,Uint16 *pdata,Uint16 Length)
{
	Uint16 i;
	for(i=0;i<=Length-1;i++)
	{
		pdata[i] = SX2_Fifo_ReadSingle(USB_Fifo_Id);
	}
	return True;
}
/********************************************************************************/
/********************************************************************************\
\* Load_Descriptor()		-Loads the descriptor memory of SX2.
\* Parameters:	Length.
				desc.
\* Return: True when successing,False when failuring.
\********************************************************************************/
extern BOOL Load_Descriptors(Uint16 Length, Uint8 *desc)
{
	Uint8 i;
	Uint8 TempValue = 0;
	/* write LSB of descriptor length,and the address of the Descriptor */
	if(!Write_SX2reg(SX2_DESC, Length))
	{
		return False;
	}

	/* write high nibble of MSB of descriptor length */
	TempValue = (Uint8)(Length>>12);
	USB_ComWriteByte(TempValue);

	TempValue = (Uint8)((Length & 0x0F00)>>8);
	/* write low nibble of MSB of descriptor length */
	USB_ComWriteByte(TempValue);
	
	
	for(i=0; i<Length; i++)
	{
		/* write high nibble of MSB of descriptor length */
		USB_ComWriteByte((desc[i] >> 4));
		/* write low nibble of MSB of descriptor length */
		USB_ComWriteByte((desc[i] & 0x0F));
	}

	return True;
}
/********************************************************************************\
\* USB_IntHandle() 	-USB interrupt handle routine. 	*\
\* Parameters:				*\
\* Return:					*\
\********************************************************************************/
extern interrupt void c_int6(void)
{
	/* During a read, an interrupt occurs after the host CPU requests a register 
	value to read. The host CPU then reads the data from the SX2. */
	if(ReadFlag)
	{
		ReadFlag = False;
	}
	/* Setup's are a special case. Whenever we get a setup 
	   the next eight interrupts represent the data of the
	   setup packet. */
	else if(setupDat)
	{
		/* read the setup data */
		SetupBuff[setupCnt++] = USB_Command_Read();
		/* stop when we have collected eight bytes */
		if(setupCnt > 7)
		{
			setupDat = False;
			sx2Setup = True;
		}
		else
		{
			USB_Command_Write(0xC0 | SX2_SETUP);
		}
     }
	/* If this is a new request, then we have to read the
		 value and parse the interrupt value. The value 
		 can't be parsed in the main loop, otherwise we could
		 get two interrupts back to back and trash the first 
		 one in the series. */
	 else
	 {
		/* read the interrupt register value */
		irqValue = USB_Command_Read();
		switch(irqValue)
		{
			case SX2_INT_SETUP:
				/* endpoint 0 setup */
				/* next eight interrupts are setup data */
				/* parse the interrupt register value */		
				setupDat = True;			
				setupCnt = 0;
				/* send read register command to SX2 */
				USB_Command_Write(0xC0 | SX2_SETUP);
				break;
			case SX2_INT_EP0BUF:
				/* endpoint 0 ready */
				sx2EP0Buf = True;
				break;
			case SX2_INT_FLAGS:
				/* FIFO flags -FF,PF,EF */
				FLAGS_READ = True;
				break;
			case SX2_INT_ENUMOK:
				/* enumeration successful */
				sx2EnumOK = True;
				break;
			case SX2_INT_BUSACTIVITY:
				/* detected either an absence or resumption of activity on the USB bus.	 */
				/* Indicates that the host is either suspending or resuming or that a 	 */
				/* self-powered device has been plugged into or unplugged from the USB.	 */
				/* If the SX2 is bus-powered, the host processor should put the SX2 into */ 
				/* a low-power mode after detecting a USB suspend condition.			 */
				sx2BusActivity = True;
				break;
			case SX2_INT_READY:
				/* awakened from low power mode via wakeup pin */
				/* or completed power on self test */
				sx2Ready = True;
				break;
			default:
				break;
			}
  	}
}
/********************************************************************************/
/*	End of USB.c	*/
/********************************************************************************/


	

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色婷婷香蕉在线一区二区| 国产精品你懂的| 91久久线看在观草草青青| 国产精品一区二区黑丝| 国产精品一区二区在线观看网站| 麻豆91精品91久久久的内涵| 美女性感视频久久| 精久久久久久久久久久| 国产精品一区二区三区99| 国产精品1024| 91麻豆国产精品久久| 91福利视频网站| 欧美一区二区私人影院日本| 精品国产乱码久久久久久牛牛| 精品国产成人系列| 国产精品久久久久天堂| 亚洲精品国产成人久久av盗摄| 亚洲国产一区二区在线播放| 美女在线视频一区| 成人动漫一区二区在线| 欧美色中文字幕| 久久网站最新地址| 亚洲天天做日日做天天谢日日欢 | 蜜桃视频一区二区三区在线观看| 奇米一区二区三区av| 国产精品白丝av| 色8久久精品久久久久久蜜| 欧美一级电影网站| 国产精品久久久久影视| 午夜欧美大尺度福利影院在线看| 蜜桃传媒麻豆第一区在线观看| 国产91在线观看| 欧美疯狂做受xxxx富婆| 国产欧美精品国产国产专区| 亚洲成av人片一区二区梦乃| 国产一区二区精品久久99 | 亚洲午夜影视影院在线观看| 麻豆精品视频在线观看免费 | 欧美日韩综合不卡| 亚洲国产精品v| 日韩av在线免费观看不卡| 国产一二三精品| 欧美挠脚心视频网站| 国产精品美女久久久久aⅴ| 青青国产91久久久久久| 色天天综合久久久久综合片| 精品电影一区二区三区| 亚洲一区二区不卡免费| 国产成人免费视频网站高清观看视频 | 久久精品视频在线免费观看| 无码av免费一区二区三区试看 | 国产日韩欧美在线一区| 天天免费综合色| 在线这里只有精品| 国产精品网站一区| 国产酒店精品激情| 日韩午夜av一区| 亚洲电影一级片| 91在线看国产| 国产精品久久久久久久久晋中| 国模冰冰炮一区二区| 日韩欧美高清一区| 麻豆freexxxx性91精品| 激情综合网最新| 欧美精选一区二区| 亚洲成av人片一区二区梦乃| 在线看不卡av| 亚洲成人第一页| 欧美午夜电影网| 天天做天天摸天天爽国产一区| 欧美群妇大交群的观看方式| 香蕉加勒比综合久久| 欧美人狂配大交3d怪物一区| 日韩精品国产精品| 欧美一区二区三区视频在线 | 亚洲丝袜精品丝袜在线| www.在线成人| 亚洲欧美一区二区视频| av电影一区二区| 一区二区三区四区高清精品免费观看| 色悠悠久久综合| 午夜私人影院久久久久| 日韩欧美在线影院| 国产精品一区二区果冻传媒| 中文字幕一区二区三区视频| 91女人视频在线观看| 亚洲电影激情视频网站| 日韩一区二区免费视频| 国产精品一区三区| 亚洲柠檬福利资源导航| 欧美日韩国产一二三| 九九视频精品免费| 中文字幕欧美激情一区| 在线免费一区三区| 蜜臀久久久99精品久久久久久| 亚洲精品在线网站| 色综合久久88色综合天天免费| 丝袜诱惑亚洲看片| 久久色.com| 欧美性一二三区| 国产美女一区二区| 亚洲综合激情网| 久久精品水蜜桃av综合天堂| 97久久超碰精品国产| 免费在线一区观看| 亚洲美女偷拍久久| 精品少妇一区二区三区在线播放 | 成人午夜在线免费| 亚洲一区在线免费观看| 精品日韩99亚洲| 欧美伊人久久久久久午夜久久久久| 青娱乐精品在线视频| 成人欧美一区二区三区视频网页| 欧美久久免费观看| 91香蕉视频在线| 成人av网址在线| 日本视频免费一区| 亚洲精品免费视频| 国产视频一区在线观看 | 久久精品人人做人人综合| 在线观看亚洲专区| 大胆亚洲人体视频| 激情av综合网| 日本aⅴ亚洲精品中文乱码| 亚洲人成人一区二区在线观看| 久久夜色精品一区| 欧美一区二区三区影视| 欧美午夜精品一区| www.亚洲免费av| 国产a视频精品免费观看| 精品亚洲成av人在线观看| 亚洲电影在线免费观看| 日韩理论电影院| 亚洲欧美在线视频观看| 国产午夜精品一区二区| 亚洲精品在线三区| 精品嫩草影院久久| 欧美成人video| 日韩亚洲国产中文字幕欧美| 欧美精品在欧美一区二区少妇| 91色乱码一区二区三区| 99久久免费精品| 91在线观看地址| 色婷婷久久久久swag精品| 91在线看国产| 欧美亚洲日本国产| 91福利区一区二区三区| 色综合天天做天天爱| voyeur盗摄精品| 91玉足脚交白嫩脚丫在线播放| thepron国产精品| 天天操天天综合网| 日韩精品电影一区亚洲| 日韩中文字幕av电影| 日本不卡一二三区黄网| 裸体一区二区三区| 激情丁香综合五月| 成人一级片网址| 色综合久久88色综合天天| 欧美中文字幕一区二区三区亚洲| 欧洲精品中文字幕| 欧美一卡2卡3卡4卡| 久久综合成人精品亚洲另类欧美| 中文字幕欧美日韩一区| 亚洲最色的网站| 日本网站在线观看一区二区三区| 国产一区三区三区| 99视频一区二区| 在线电影一区二区三区| 国产亚洲综合av| 又紧又大又爽精品一区二区| 日本最新不卡在线| 丁香亚洲综合激情啪啪综合| 在线免费观看成人短视频| 日韩欧美国产三级电影视频| 中文字幕av一区二区三区| 亚洲国产成人porn| 国产精品18久久久久久久久 | 亚洲日本欧美天堂| 一区二区三区小说| 精品一区二区综合| 色狠狠av一区二区三区| 日韩欧美在线综合网| 国产精品电影院| 国产一区二区成人久久免费影院| 粉嫩av一区二区三区在线播放| 在线观看亚洲精品视频| 久久久久97国产精华液好用吗| 中文字幕综合网| 国产一区二区三区最好精华液| 色成人在线视频| 日本一区二区免费在线观看视频 | 国产一区二区三区黄视频| 在线精品视频一区二区三四| 久久理论电影网| 日韩成人免费电影| 日本乱人伦一区| 中文av一区二区| 韩国三级中文字幕hd久久精品| 欧美中文字幕亚洲一区二区va在线|