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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? usb_test.c

?? DPS2812的USB驅(qū)動
?? C
?? 第 1 頁 / 共 2 頁
字號:
#include <stdlib.h>
#include "DSP28_Device.h"

#include "type.h"
#include "sx2.h"
#include "descriptors.h"
#include "DEC2812_USB.h" 
#include "ep0req.h"

BOOL Load_descriptors(char length, char* desc);
BOOL Write_SX2reg(unsigned char addr, unsigned int value);
BOOL SX2_comwritebyte(unsigned int value);
BOOL SX2_FifoWrite(int channel,unsigned int *pdata,unsigned length);
BOOL SX2_FifoWriteSingle(int channel,unsigned int pdata);
unsigned int SX2_FifoReadSingle(int channel);
interrupt void XINT2_ISR_A(void);

extern char desctbl[];

unsigned char keepAliveCnt;	/* counter of Timer0 interrupts */
HANDLE codec_command =0;
HANDLE codec_data=0;
unsigned int FifoWriteCnt = 0;
unsigned int epdatar[512] ={0};
unsigned int epdataw[512] ={0};
unsigned int epdataw1[256] ={0};  

unsigned int irqValue;			 /* interrupt register value */
unsigned int 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的狀態(tài)讀請求*/
unsigned int INT_STATUS;
unsigned int SX2_int;   

unsigned long readFlag;

unsigned int usbtimeout = 0x400;
unsigned int regdataread = 0; 	

unsigned int Fifolong = 0;     /*FIFO的長度*/

unsigned int setupCnt = 0;
unsigned int Usb2or11= 1;    /*USB工作在哪一個標(biāo)準(zhǔn)上*/
unsigned int hshostlink = 0; /*為真是高速USB接口,為假是低速USB接口*/
static BOOL setupDat = FALSE;

void main(void)
{
	unsigned int regValue = 0;	 /* register value from a read */
//	unsigned int Sx2int = 0;     /*SX2的中斷狀態(tài)*/
	
	unsigned int endpoint0count = 0;/*EP0的數(shù)據(jù)長度*/
	unsigned int endpoint0data[64] ={0};/*EP0的數(shù)據(jù)緩沖區(qū)*/
	unsigned int i = 0;
	unsigned int FifoStatus24 = 0;	/*FIFO24的狀態(tài)標(biāo)識*/
	unsigned int FifoStatus68 = 0; 	/*FIFO68的狀態(tài)標(biāo)識*/
	unsigned int Fifostatus = 0;
	
//	BOOL codec_runing = FALSE;
//	BOOL codec_halt = FALSE;
//	BOOL codec_rev = FALSE;
//	BOOL codec_play = FALSE;
//	BOOL codec_datok = FALSE;
//	BOOL codec_horfull = TRUE;
//	BOOL codec_back = FALSE;  
//	BOOL sx2EnumOK = FALSE;
//	unsigned int codec_count = 0;
//	unsigned int codec_sample = 0;
//	unsigned int codec_regvalue = 0;
//	unsigned int audiodata =0;
	unsigned int RecievedDataLongth = 0;
//	unsigned int LedCount = 0; /*記錄LED定時器的次數(shù)*/
	unsigned int DataToEndpoint0 = 0;/*寫入到Endpoint0的數(shù)據(jù)緩沖*/
//	unsigned long flashbaddr = 0;
//	unsigned int flashdata = 0;
//	unsigned int flasherr = 0;
//	unsigned long flashlong = 0;
	/*初始化系統(tǒng)*/
	InitSysCtrl();

	/*關(guān)中斷*/
	DINT;
	IER = 0x0000;
	IFR = 0x0000;

	/*初始化PIE*/
	InitPieCtrl();

	/*初始化PIE中斷矢量表*/
	InitPieVectTable();	
	
	/*初始化外設(shè)*/
	InitPeripherals();
	
	/*初始化GPIO*/
	InitGpio1();
	
	EALLOW;	// This is needed to write to EALLOW protected registers
	PieVectTable.XINT2 = &XINT2_ISR_A;
	EDIS;   // This is needed to disable write to EALLOW protected registers
	
	/*初始化ZONE 1區(qū)*/
	//InitXintf();
	/*初始化外部中斷*/
	InitXIntrupt();
	
	*USB_STS = 0x20;
	
	/*開中斷*/
	IER |= M_INT1;
	
    
	for(;;)
    	{
    		if(GpioDataRegs.GPEDAT.bit.GPIOE1 == 1)
    		{
    			InitGpio();
    			SX2_int = *USB_COMMAND & (SX2_INT_ENUMOK + SX2_INT_READY);
    			if(SX2_int)
    			{
    				EINT;   // Enable Global interrupt INTM
					ERTM;	// Enable Global realtime interrupt DBGM
				break;
			}
		}
		else
		{
			InitGpio();
			SX2_int = *USB_COMMAND & (SX2_INT_ENUMOK + SX2_INT_READY);
			EINT;   // Enable Global interrupt INTM
			ERTM;	// Enable Global realtime interrupt DBGM
			break;
		}
    	}
	
	
	for(;;)
	{
		/* initialize global variables */
		readFlag 		= 0;	/* false until register read */
		sx2Ready		= FALSE;	/* false until POST or wakeup */
		sx2BusActivity	= FALSE;	/* false until absence or resumption of USB bus activity */
		sx2EnumOK		= FALSE;	/* false until ENUMOK interrupt */
		sx2EP0Buf		= FALSE;	/* false until EP0BUF interrupt */
		sx2Setup		= FALSE;	/* false until SETUP interrupt */
		
		/* Initialize global variables specific to this test firmware */
		keepAliveCnt		= 0;

		/* Initialize local variables */
		/* reusable variable for read register data */
		regValue			= 0;
		if(!Load_descriptors(DESCTBL_LEN, &desctbl[0]))
		{
			while(TRUE);
		}
		
		/*裝載描述表后,等待自舉成功*/
		/*裝載描述表后,等待自舉成功*/
		while(TRUE)
		{
			if(sx2EnumOK == TRUE)
			{
				break;
			}
		}

		/*設(shè)置當(dāng)前的接口的形式*/
		Write_SX2reg(SX2_IFCONFIG , 0xE8);
		/*設(shè)置當(dāng)前系統(tǒng)中各使能信號的極性
		  其中SLOE、SLRD、SLWR只能有EEPROM來配置*/
		Write_SX2reg(SX2_FIFOPOLAR, SX2_WUPOL | SX2_EF | SX2_FF);
		/*讀取當(dāng)前工作在哪個USB的標(biāo)準(zhǔn)*/
		Read_SX2reg(SX2_FNADDR, &Usb2or11);
		hshostlink = (Usb2or11 & SX2_HSGRANT) ? 1 : 0;
		/*初始化USB的工作狀態(tài)*/
		//if(hshostlink == 1)
		{
			/*工作在2.00標(biāo)準(zhǔn),設(shè)定數(shù)字接口為16位,數(shù)據(jù)包的大小為512字節(jié)*/
			Fifolong = 0x100;
			Write_SX2reg(SX2_EP2PKTLENH , SX2_WORDWIDE | 0x02);
			Write_SX2reg(SX2_EP2PKTLENL , 0x00);
			Write_SX2reg(SX2_EP4PKTLENH , SX2_WORDWIDE | 0x02);
			Write_SX2reg(SX2_EP4PKTLENL , 0x00);
			Write_SX2reg(SX2_EP6PKTLENH , SX2_WORDWIDE | 0x02);
			Write_SX2reg(SX2_EP6PKTLENL , 0x00);
			Write_SX2reg(SX2_EP8PKTLENH , SX2_WORDWIDE | 0x02);
			Write_SX2reg(SX2_EP8PKTLENL , 0x00);
		}
/*		else
		{
			
			Fifolong =0x20;
			Write_SX2reg(SX2_EP2PKTLENH , SX2_WORDWIDE);
			Write_SX2reg(SX2_EP2PKTLENL , 0x40);
			Write_SX2reg(SX2_EP4PKTLENH , SX2_WORDWIDE);
			Write_SX2reg(SX2_EP4PKTLENL , 0x40);
			Write_SX2reg(SX2_EP6PKTLENH , SX2_WORDWIDE);
			Write_SX2reg(SX2_EP6PKTLENL , 0x40);
			Write_SX2reg(SX2_EP8PKTLENH , SX2_WORDWIDE);
			Write_SX2reg(SX2_EP8PKTLENL , 0x40);
		}*/
		/*設(shè)置FLAGSA為FIFO6的空的標(biāo)志位;
		  設(shè)置FLAGSB為FIFO8的空的標(biāo)志位;
		  FLAGSC與FLAGSD的狀態(tài)為默認的狀態(tài)*/
		Write_SX2reg(SX2_FLAGAB , SX2_FLAGA_FF6 | SX2_FLAGB_FF8); 
		/*清空所有的節(jié)點*/
		Write_SX2reg(SX2_INPKTEND, SX2_CLEARALL);
		Read_SX2reg(SX2_EP68FLAGS, &FifoStatus68);
			
		/*自舉后進行主程序的循環(huán)*/
		while(sx2EnumOK)
		{
		   	/*讀FIFO狀態(tài)*/
			if(FLAGS_READ)
			{
				FLAGS_READ = FALSE;
				/*FIFO24狀態(tài)的讀取*/
					if(Read_SX2reg(SX2_EP24FLAGS, &FifoStatus24))
					{
						/*確定是否有FIFO滿*/
						Fifostatus = FifoStatus24;
						if(!(Fifostatus & SX2_EP2EF))
						{
							RecievedDataLongth = Fifolong;
							for(i = 0;i<Fifolong;i++)
							{
								epdatar[i] = SX2_FifoReadSingle(ENDPOINT2);
								/*SX2_FifoWriteSingle(ENDPOINT6,epdatar[i]);*/
							}
							SX2_FifoWrite(ENDPOINT6,&epdatar[0],Fifolong);
							/*小于整數(shù)據(jù)包的數(shù)據(jù)提交SX2發(fā)送給主機*/
							if(RecievedDataLongth<(Fifolong-1))
							{
								Write_SX2reg(SX2_INPKTEND, 0x06);	
							}
						}
						Fifostatus = FifoStatus24;
						if(!(Fifostatus & SX2_EP4EF))
						{
							i = 0;
							while(!(Fifostatus & SX2_EP4EF))
							{
								epdatar[i] = SX2_FifoReadSingle(ENDPOINT4);
								Read_SX2reg(SX2_EP24FLAGS, &Fifostatus);
								RecievedDataLongth = i;
								i = i +1;	
							}
							SX2_FifoWrite(ENDPOINT8,&epdatar[0],Fifolong);
							/*小于整數(shù)據(jù)包的數(shù)據(jù)提交SX2發(fā)送給主機*/
							if(RecievedDataLongth<(Fifolong-1))
							{
								Write_SX2reg(SX2_INPKTEND, 0x08);	
							}	
						}	
					}/*FIFO24狀態(tài)的讀取*/
					/*FIFO68狀態(tài)的讀取*/
					if(Read_SX2reg(SX2_EP68FLAGS, &FifoStatus68))
					{
						/*無操作,可由用戶測試使用*/		
					}	
				}/*不是音頻傳送*/
		   	/*關(guān)于setup中斷的處理*/
			if(sx2Setup)
			{
				/*清SETUP數(shù)據(jù)讀的標(biāo)志*/
				sx2Setup = FALSE;
				/*解析OUT類型的命令申請*/
				if(setupBuff[0] == VR_TYPE_OUT)
				{
					/*分析命令類型*/
					switch(setupBuff[1])
					{	
						/*系統(tǒng)復(fù)位*/
						case VR_RESET:
							/*寫0到EP0的計數(shù)寄存器,結(jié)束本次控制握手*/
							Write_SX2reg(SX2_EP0BC, 0);
							break;
						/*讀命令*/
						case VR_BULK_READ:
							/*usbcommand = BULK_READ;*/
							/*寫0到EP0的計數(shù)寄存器,結(jié)束本次控制握手*/
							Write_SX2reg(SX2_EP0BC, 0);
							break;
						/*寫操作*/	
						case VR_BULK_WRITE:
							/*清空節(jié)點6與8*/
							/*Write_SX2reg(SX2_INPKTEND, 0xc0);*/
							switch (setupBuff[2])
							{
								case ENDPOINT6:
									/*寫入節(jié)點6*/
									for(i = 0;i<0x100;i++)
									{
										epdataw1[i] = i*2;	
									}
									for(i = 0;i<0x50;i=i+2)
									{
										epdataw[i/2] = epdataw1[i]+(epdataw1[i+1]<<8);
									}
									/*如果發(fā)送小于整數(shù)據(jù)包的數(shù)據(jù)時,設(shè)置RecievedDataLongth*/
									RecievedDataLongth = 0x3f;
									/*讀當(dāng)前FIFO的狀態(tài),是否已滿*/
									regValue = *USB_STS;
									FifoWriteCnt = 0;
									SX2_FifoWrite(ENDPOINT6,&epdataw[0],Fifolong);
									if(hshostlink ==1)
									{
										Write_SX2reg(SX2_INPKTEND, 0x06);
									}
									setupBuff[1] = 0;
									/*寫0到EP0的計數(shù)寄存器,結(jié)束本次控制握手*/
									Write_SX2reg(SX2_EP0BC, 0);
									break;
								case  ENDPOINT8:
									/*寫入節(jié)點6*/
									for(i = 0;i<0x200;i++)
									{
										epdataw1[i] = i*2+1;
									}
									for(i = 0;i<0x50;i=i+2)
									{
										epdataw[i/2] = epdataw1[i]+(epdataw1[i+1]<<8);
									}
									i = 0;
									/*如果發(fā)送小于整數(shù)據(jù)包的數(shù)據(jù)時,設(shè)置RecievedDataLongth*/
									RecievedDataLongth = 0x1f;
									/*讀當(dāng)前FIFO的狀態(tài),是否已滿*/
									regValue = *USB_STS;
									SX2_FifoWrite(ENDPOINT8,&epdataw[0],Fifolong);
									if(hshostlink ==1)
									{
										Write_SX2reg(SX2_INPKTEND, 0x06);
									}
									/*寫0到EP0的計數(shù)寄存器,結(jié)束本次控制握手*/
									Write_SX2reg(SX2_EP0BC, 0);
									break;
								default:
									/*寫0到EP0的計數(shù)寄存器,結(jié)束本次控制握手*/
									Write_SX2reg(SX2_EP0BC, 0);
									break;	
							}	
							break;

						/*Endpoint0內(nèi)容的讀操作*/	
						case VR_ENDPOINT0READ:
							/*確定Endpoint0的長度*/
							if (setupBuff[6] > 0 || setupBuff[7] > 0)
							{	
								/*等待EP0數(shù)據(jù)包準(zhǔn)備好的標(biāo)志*/
								while(!sx2EP0Buf);
								/* 清除EP0數(shù)據(jù)包準(zhǔn)備好的標(biāo)志*/
								sx2EP0Buf = FALSE;
								/*讀數(shù)據(jù)相的數(shù)據(jù)長度*/
								Read_SX2reg(SX2_EP0BC, &endpoint0count);
								/*讀數(shù)據(jù)相的數(shù)據(jù)*/
								for(i = 0; i<endpoint0count;i++)
								{
									Read_SX2reg(SX2_EP0BUF,&endpoint0data[i]);
								}
							}
							break;
						
						case VR_REGWRITE:
							/* write the actual value to the register */
							Write_SX2reg(setupBuff[4], setupBuff[2]);
							/*寫0到EP0的計數(shù)寄存器,結(jié)束本次控制握手*/
							Write_SX2reg(SX2_EP0BC, 0);
							break;

						default:
							/*不支持的請求*/
							/*寫非零數(shù)到SX2_SETUP,取消此請求*/
							Write_SX2reg(SX2_SETUP, 0xff);
							break;	
					}/*分析命令類型*/
				}
				else
				{
					/*解析IN類型的命令申請*/
					if(setupBuff[0] == VR_TYPE_IN)
					{
						/*分析命令類型*/
						switch(setupBuff[1])
						{
							
							/*USB工作的標(biāo)準(zhǔn)*/
							case VR_USB_VERION:

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人一区二区三区视频在线观看 | 亚洲免费观看高清在线观看| 在线免费观看日本欧美| 免费高清视频精品| 成人免费在线视频观看| 欧美大黄免费观看| 色综合天天综合网国产成人综合天| 久久综合五月天婷婷伊人| 99久久精品国产观看| 一区二区三区精品在线| 欧美一区二区三区在| 韩国一区二区三区| 亚洲精品ww久久久久久p站 | proumb性欧美在线观看| 午夜免费欧美电影| 日韩精品一区二区三区视频| 国产在线精品国自产拍免费| 亚洲黄网站在线观看| 久久精品在线观看| 一本大道久久a久久精品综合| 日本伊人色综合网| 亚洲女与黑人做爰| 久久色.com| 欧美精品在线观看播放| 欧美图区在线视频| 99国产欧美久久久精品| 成人一区二区三区在线观看 | 欧洲另类一二三四区| 99视频精品在线| 高清不卡在线观看av| 99国产精品久| 成人污视频在线观看| 国产成人在线色| 国产一区啦啦啦在线观看| 久久国产精品第一页| 喷白浆一区二区| 美女诱惑一区二区| 久久国产夜色精品鲁鲁99| 蜜臀av一级做a爰片久久| 日本视频一区二区| 美女视频免费一区| 激情综合五月天| 国产综合一区二区| 国产精品一区二区果冻传媒| 国产精品99久久久久久有的能看| 国产一区二区伦理| 国产91丝袜在线观看| 不卡av在线网| 日本精品视频一区二区| 在线观看亚洲精品视频| 欧美偷拍一区二区| 欧美精品日韩一区| 日韩欧美国产麻豆| 26uuu久久综合| 欧美激情在线观看视频免费| 国产精品久久久久久久久图文区| 亚洲欧洲精品一区二区三区| 亚洲曰韩产成在线| 欧美a级理论片| 国产一区二区成人久久免费影院 | 欧美日高清视频| 欧美一区二区女人| 久久精品视频在线看| 日本一区二区高清| 亚洲欧美成人一区二区三区| 五月综合激情网| 精品一区二区三区蜜桃| 丰满少妇久久久久久久 | 久久精品一区蜜桃臀影院| 国产精品免费观看视频| 亚洲五码中文字幕| 精品一区二区三区蜜桃| 成人高清av在线| 欧美日韩在线直播| 26uuu国产在线精品一区二区| 国产精品久久久久久久午夜片 | 亚洲区小说区图片区qvod| 亚洲午夜免费福利视频| 激情成人综合网| 91亚洲精华国产精华精华液| 在线电影一区二区三区| 久久久久99精品一区| 亚洲蜜臀av乱码久久精品| 裸体健美xxxx欧美裸体表演| 不卡的av网站| 日韩精品专区在线影院重磅| 国产精品国产三级国产aⅴ无密码| 亚洲午夜久久久久久久久电影院| 国产精品影视在线| 欧美日本在线播放| 中文字幕一区二区三区蜜月| 蜜桃视频一区二区| 日本电影亚洲天堂一区| xnxx国产精品| 午夜精品福利在线| 成人蜜臀av电影| 日韩三级中文字幕| 亚洲欧美福利一区二区| 狠狠色2019综合网| 精品视频免费在线| 亚洲欧洲av色图| 国产在线视频一区二区三区| 欧美性猛交xxxx乱大交退制版 | 久久久久国产精品人| 亚洲激情自拍偷拍| 丁香激情综合国产| 日韩一区二区三区在线观看| 亚洲欧美一区二区三区久本道91| 麻豆精品一区二区| 在线观看视频一区| 国产精品久久久久久久久晋中| 久久精品国产久精国产爱| 欧美天堂一区二区三区| 日韩美女视频一区| 国产成都精品91一区二区三| 欧美一区二区在线免费观看| 亚洲综合图片区| 99re热视频这里只精品| 国产日产欧产精品推荐色 | 奇米综合一区二区三区精品视频| 国产日韩精品视频一区| 毛片av一区二区| 欧美日韩国产精选| 亚洲成人免费视频| 一本到一区二区三区| 综合电影一区二区三区 | 欧美亚洲一区二区在线观看| 中文字幕一区视频| 成人a免费在线看| 国产欧美综合色| 国产毛片精品视频| 久久综合九色综合欧美就去吻 | 福利91精品一区二区三区| 久久天堂av综合合色蜜桃网| 久久66热偷产精品| 日韩视频免费直播| 精东粉嫩av免费一区二区三区| 欧美一级久久久| 另类小说欧美激情| 精品国产一区二区亚洲人成毛片| 久久99精品网久久| 久久视频一区二区| 东方aⅴ免费观看久久av| 国产欧美日韩亚州综合| 高清av一区二区| 中文字幕字幕中文在线中不卡视频| 99久久精品国产一区| 亚洲免费观看在线观看| 91成人在线观看喷潮| 亚洲自拍偷拍综合| 欧美美女激情18p| 蜜臀久久99精品久久久久宅男| 精品日产卡一卡二卡麻豆| 国产自产v一区二区三区c| 国产喷白浆一区二区三区| 91在线观看视频| 亚洲一区影音先锋| 日韩亚洲欧美一区| 国产不卡在线播放| 一区二区三区四区亚洲| 欧美一区日韩一区| 国产99久久久国产精品免费看 | 亚洲色图一区二区| 欧美唯美清纯偷拍| 精品在线观看免费| 国产精品嫩草99a| 在线一区二区观看| 美腿丝袜亚洲综合| 欧美国产精品中文字幕| 日本精品免费观看高清观看| 蜜臀a∨国产成人精品| 国产日产精品一区| 欧美日韩在线亚洲一区蜜芽| 国模无码大尺度一区二区三区| 自拍偷拍亚洲欧美日韩| 欧美一卡二卡三卡| 99精品视频一区二区三区| 丝袜a∨在线一区二区三区不卡| 亚洲精品一区二区三区福利| 91香蕉视频黄| 九九精品一区二区| 亚洲精品成人天堂一二三| 精品剧情在线观看| 色香蕉久久蜜桃| 精品一二线国产| 亚洲欧美日韩国产手机在线| 日韩一区二区免费视频| 波多野结衣亚洲| 美女爽到高潮91| 亚洲女同女同女同女同女同69| 日韩美一区二区三区| 色综合av在线| 国产一区二区毛片| 日韩精品视频网| 亚洲欧美日韩国产综合| 国产亚洲精品久| 欧美一区二区在线视频| 91视频国产资源| 国产精品一区二区三区99| 偷拍亚洲欧洲综合|