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

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

?? ep0req.c

?? 1、該PERIPHERAL文件夾包含五個有關系統外設的程序:DEC5502_USB、DEC5502_LED和DEC5502_UART程序。 2、DEC5502_USB程序主要實現了與PC機應用程
?? C
?? 第 1 頁 / 共 2 頁
字號:
/***************************************************
File:    seeddec5416usb.c
Author:  Lifeng Duan
Created: 21/11/2003

Description:Evaluates the use of SX2 with DSP

Copyright (C) SEED SEMICONDUCTOR, 2003
*****************************************************/
#include "type.h"
#include "uart.h"
#include "sx2.h"
#include "descriptors.h"
#include "ep0Req.h"
#include "cy7c68001.h"
#include "sysreg.h"
#include "timer.h"
#include "mcbsp54.h"
#include "codec.h"
#include "memory.h"
#include "dma54xx.h"

#define decintreg  0x2
#define USBINT 0x10
void delay();
/* external variables */
extern char desctbl[];

/* global variables */
extern BYTE irqValue;			/* interrupt register value */
extern BYTE setupBuff[8];		/* setup transaction buffer */
extern BOOL sx2Ready;			/* status byte for POST */ 
extern BOOL sx2BusActivity;		/* status byte for suspend */ 
extern BOOL sx2EnumOK;			/* status byte for enumeration complete */
extern BOOL sx2EP0Buf;			/* status for endpoint 0 buffer */
extern BOOL sx2Setup;			/* setup flag set in Int0() ISR */
extern BOOL readFlag;
extern BOOL FLAGS_READ;         /*FIFO的狀態讀請求*/
extern BOOL buffer_halffull;
extern BOOL buffer_full;
/* global variables specific to this test firmware */
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};
/*串口A接收緩沖區*/
#pragma DATA_SECTION(codecdat,".codec_buffer")
unsigned int codecdat[0x400];

void main()
{

	unsigned int regValue = 0;	 /* register value from a read */
	unsigned int Sx2int = 0;     /*SX2的中斷狀態*/
	unsigned int Usb2or11= 0;    /*USB工作在哪一個標準上*/
	unsigned int endpoint0count = 0;/*EP0的數據長度*/
	unsigned int endpoint0data[64] ={0};/*EP0的數據緩沖區*/
	unsigned int i = 0;
	unsigned int FifoStatus24 = 0;	/*FIFO24的狀態標識*/
	unsigned int FifoStatus68 = 0; 	/*FIFO68的狀態標識*/
	unsigned int Fifostatus = 0;
	unsigned int Fifolong = 0;     /*FIFO的長度*/
	BOOL hshostlink = FALSE; /*為真是高速USB接口,為假是低速USB接口*/
	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;
	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定時器的次數*/
	unsigned int DataToEndpoint0 = 0;/*寫入到Endpoint0的數據緩沖*/
	unsigned long flashbaddr = 0;
	unsigned int flashdata = 0;
	unsigned int flasherr = 0;
	unsigned long flashlong = 0;
	
	/*設置系統時鐘*/
	sys_clk(CLK160);
	/*初始化DEC5416板卡*/
	dec5416_init();
	/*打開codec數據接口*/
	codec_data = codec_open(CODEC_DATA);
	/*打開codec命令接口*/
	codec_command = codec_open(CODEC_COMMAND);
	/*選擇麥克風作為輸入*/
	codec_analog_mode(codec_command,0x14);
	/*設置波特率,輸入與輸出均為8K*/
	codec_sample_rate(codec_command,0xd);
	/*配置系統存儲器*/	
	memory_set(0x80);
	/*初始化dma*/
	/*工作在USB2.0標準*/
	/*dma全局寄存器的初始化*/
	dma_global_init(0x80,      /*設置優先級,禁止所有dma*/
		         		0x2,    /*IN:Value for source page reg*/
		         		0x2,    /*IN:Value for dest page reg*/
		         		0x0,    /*IN:Value for element index reg 0    */
		         		0x0,    /*IN:Value for element index reg 1    */
		         		0x0,    /*IN:Value for frame index reg 0      */
		         		0x0,    /*IN:Value for frame index reg 1      */
		         		0x800,  /*IN:Value for global src addr reload */
		         		0x23,	/*IN:Value for global dst addr reload */
		         		0x80,   /*IN:Value for global count reload reg*/
		         		0x0);   /*IN:Value for global frame reload reg*/
		                    
		/*初始化dma寄存器*/
		dma_init(	0, /*選擇通路0*/
	            	0x2000,  /*選擇XEVT0,單字格式,單幀格式(dmsefc)*/
	            	0xF141,  /*自動初始化,選擇ABU方式,設置數據空間,使有中斷(dmsefc)*/
			        0x400,	 /*設置緩沖區的長度0x400(dmctr)*/
	            	0x2,     /*設置源的程序空間地址(src_page)  */
	            	0x800,   /*設置源地址(src_addr)*/
	           		0x2,	 /*設置目的地址空間(dst_page)*/
	            	0x23);   /*設置目的地址(dst_addr)*/        		
	for(i = 0;i<0x200;i++)
	{
		codecdat[i] = 0;
	}
	/*xf的LED燈閃三下*/
	for(i = 0;i<3;i++)
	{
		asm(" RSBX XF");
		delay();
		asm(" SSBX XF");
		delay();
	}
	
	/*判斷CY68001是否準備好*/
	for(;;)
	{
      /*判斷是否有中斷到來*/
	  regValue = sysreg_read(decintreg);
	  if((regValue & USBINT) ==0)
	  {
	  	  /*判斷是何種中斷,并清中斷*/
		  Sx2int = USB_Command_Read();  
		  if(Sx2int &(SX2_INT_ENUMOK + SX2_INT_READY))
		  {
		      /*打開系統的串口中斷*/
		      sysint_enable(0x4);
		      break;  
	      }  
	  }
	  else
	  {
	  	/*打開系統的串口中斷*/
		sysint_enable(0x4);
		break;		
	  }
	}
	/*自舉循環*/	
	while(TRUE)
	{
		/* initialize global variables */
		readFlag 		= FALSE;	/* 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;
		/* load descriptor tables; halt if load fails */
		if(!Load_descriptors(DESCTBL_LEN, &desctbl[0]))
		{
			while(TRUE);
		}
	
		/*裝載描述表后,等待自舉成功*/
		while(!sx2EnumOK);
		sysint_enable(0x4c);
		/*設置當前的接口的形式*/
		Write_SX2reg(SX2_IFCONFIG , 0xE8);
		/*設置當前系統中各使能信號的極性
		  其中SLOE、SLRD、SLWR只能有EEPROM來配置*/
		Write_SX2reg(SX2_FIFOPOLAR, SX2_WUPOL | SX2_EF | SX2_FF);
		/*讀取當前工作在哪個USB的標準*/
		Read_SX2reg(SX2_FNADDR, &Usb2or11);
		hshostlink = (Usb2or11 & SX2_HSGRANT) ? TRUE : FALSE;
		/*初始化USB的工作狀態*/
		if(hshostlink ==TRUE)
		{
			/*工作在2.00標準,設定數字接口為16位,數據包的大小為512字節*/
			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
		{
			/*工作在1.1標準,設定數字接口為16位,數據包的大小為64字節*/
			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);
		}
		/*設置FLAGSA為FIFO6的空的標志位;
		  設置FLAGSB為FIFO8的空的標志位;
		  FLAGSC與FLAGSD的狀態為默認的狀態*/
		Write_SX2reg(SX2_FLAGAB , SX2_FLAGA_FF6 | SX2_FLAGB_FF8); 
		/*清空所有的節點*/
		Write_SX2reg(SX2_INPKTEND, SX2_CLEARALL);
		Read_SX2reg(SX2_EP68FLAGS, &FifoStatus68);
			
		/*自舉后進行主程序的循環*/
		while(sx2EnumOK)
		{
			/*CODEC CIRCLE運行*/
			if(codec_runing == TRUE)
			{
				if(codec_halt ==TRUE)
				{
					codec_runing = FALSE;
					codec_halt = FALSE;
				}
				else
				{
					/* Wait for sample from handset */
					while (!MCBSP_RRDY(CODEC_DATA)) {};
					/* Read sample from and write back to handset codec */
					audiodata = *(volatile u16*)DRR1_ADDR(CODEC_DATA);
					*(volatile u16*)DXR1_ADDR(CODEC_DATA) = audiodata;
				}	
			}/*CODEC CIRCLE運行*/
			/*CODE 錄音*/
			if(codec_rev == TRUE)
			{
				if(codec_halt ==TRUE)
				{
					codec_rev = FALSE;
					codec_halt = FALSE;
				}
				else
				{
					for(i = 0;i<Fifolong;i++)
					{
						/* Wait for sample from handset */
						while (!MCBSP_RRDY(CODEC_DATA)) {};
						/* Read sample from and write back to handset codec */
						epdataw[i]= *(volatile u16*)DRR1_ADDR(CODEC_DATA);
						if(codec_back == TRUE)
						{
							*(volatile u16*)DXR1_ADDR(CODEC_DATA) = epdataw[i];
						}	
					}
					/*送給微機數據*/
					SX2_FifoWrite(ENDPOINT6,&epdataw[0],Fifolong);
				}	
			}/*CODE 錄音*/
			if(timer_status())
			{
				LedCount++;
				if(LedCount & 0x1)
				{
					/*點亮LED*/
					asm(" SSBX XF");
				}
				else
				{
					/*關掉LED*/
					asm(" RSBX XF");
				}
			}/*定時器的處理*/
			/*慢速時的CODE 回放*/
			if(codec_datok == TRUE)
			{
				/* Wait for sample from handset */
				if(MCBSP_XRDY(CODEC_DATA))
				{
					/* Read sample from and write back to handset codec */
					*(volatile u16*)DXR1_ADDR(CODEC_DATA) = codecdat[codec_count];
					codec_count=codec_count + 1;
					if(codec_count == 0x40)
					{
						codec_count = 0x0;
						codec_datok = FALSE;
					}
				}		
			}/*慢速時的CODE 回放*/
			/*讀FIFO狀態*/
			if(FLAGS_READ)
			{
				FLAGS_READ = FALSE;
				/*是音頻傳送*/
				if(codec_play == TRUE)
				{
					if(hshostlink !=TRUE)
					{
						/*FIFO24狀態的讀取*/
						if(Read_SX2reg(SX2_EP24FLAGS, &FifoStatus24))
						{
							/*確定是否有FIFO滿*/
							Fifostatus = FifoStatus24;
							if(!(Fifostatus & SX2_EP2EF))
							{
								for(i = 0;i<Fifolong;i++)
								{
									codecdat[i] = SX2_FifoReadSingle(ENDPOINT2);
								}
							}
							Fifostatus = FifoStatus24;
							if(!(Fifostatus & SX2_EP4EF))
							{
								for(i = 0;i<Fifolong;i++)
								{
									codecdat[i+0x20] = SX2_FifoReadSingle(ENDPOINT4);
								}
								codec_datok = TRUE;	
							}
						}/*FIFO24狀態的讀*/	
					}
					
				}/*是音頻傳送*/
				else/*不是音頻傳送*/
				{
					/*FIFO24狀態的讀取*/
					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);
							/*小于整數據包的數據提交SX2發送給主機*/
							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);
							/*小于整數據包的數據提交SX2發送給主機*/
							if(RecievedDataLongth<(Fifolong-1))
							{
								Write_SX2reg(SX2_INPKTEND, 0x08);	
							}	
						}	
					}/*FIFO24狀態的讀取*/
					/*FIFO68狀態的讀取*/
					if(Read_SX2reg(SX2_EP68FLAGS, &FifoStatus68))
					{
						/*無操作,可由用戶測試使用*/		
					}	
				}/*不是音頻傳送*/
			}/*讀FIFO狀態*/
			
			/*關于setup中斷的處理*/
			if(sx2Setup)
			{
				/*清SETUP數據讀的標志*/
				sx2Setup = FALSE;
				/*解析OUT類型的命令申請*/
				if(setupBuff[0] == VR_TYPE_OUT)
				{
					/*分析命令類型*/
					switch(setupBuff[1])
					{	
						/*系統復位*/
						case VR_RESET:
							/*寫0到EP0的計數寄存器,結束本次控制握手*/
							Write_SX2reg(SX2_EP0BC, 0);
							break;
						/*讀命令*/
						case VR_BULK_READ:
							/*usbcommand = BULK_READ;*/
							/*寫0到EP0的計數寄存器,結束本次控制握手*/
							Write_SX2reg(SX2_EP0BC, 0);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美成人在线直播| 国产精品自在欧美一区| 26uuu久久综合| 色诱亚洲精品久久久久久| 国内精品在线播放| 激情欧美一区二区三区在线观看| 亚洲综合男人的天堂| 国产精品久久久久久久久免费桃花 | 欧美日韩亚洲丝袜制服| 日韩一区欧美二区| 亚洲一区二区在线观看视频| 中文字幕中文字幕一区| 亚洲综合网站在线观看| 欧美一区二区在线观看| 欧美一区二区三级| 国产成人午夜视频| 国产精品美女久久久久久久久| 韩国精品一区二区| 国产v综合v亚洲欧| 中国色在线观看另类| 欧美日韩免费高清一区色橹橹| 99久久婷婷国产| 99久久免费精品高清特色大片| 色婷婷久久久亚洲一区二区三区| av不卡在线观看| 色香蕉成人二区免费| 国产成人av网站| 粉嫩一区二区三区性色av| 国产高清成人在线| 不卡影院免费观看| 欧美福利视频导航| 91精品在线观看入口| 欧美一区二区三区免费视频| 国产无人区一区二区三区| 欧美国产精品久久| 亚洲欧美偷拍另类a∨色屁股| 水野朝阳av一区二区三区| 亚洲一区二区精品3399| 亚洲制服丝袜av| 天天综合网 天天综合色| 日本一道高清亚洲日美韩| 精品一二三四区| 亚洲视频在线一区| 久久精品国产一区二区三| 国产一区福利在线| 99国产精品久久| 精品国产伦一区二区三区观看方式| 国产人伦精品一区二区| 一二三四社区欧美黄| 国产乱子伦视频一区二区三区| 不卡一区二区三区四区| 777久久久精品| 最近日韩中文字幕| 免费观看一级欧美片| 成人毛片老司机大片| 在线日韩国产精品| 久久久精品中文字幕麻豆发布| 亚洲乱码国产乱码精品精小说 | 自拍偷拍国产精品| 亚洲bt欧美bt精品| 粉嫩av一区二区三区在线播放| 国产成人免费视频网站高清观看视频| 在线播放91灌醉迷j高跟美女 | 成人av一区二区三区| 欧美一区二区精美| 日韩理论片在线| 成人黄色av网站在线| 91精品国产综合久久精品| 国产精品久久久久久久久快鸭| 国产激情偷乱视频一区二区三区| 精品1区2区3区| 国产精品久久久久国产精品日日| 国产一区二区电影| 日韩欧美激情一区| 香蕉av福利精品导航| 在线观看视频一区二区| 中文字幕日韩欧美一区二区三区| 久久超级碰视频| 欧美日韩一级视频| 天堂久久久久va久久久久| 一本到不卡精品视频在线观看| 国产精品久久久久久久久免费桃花| 久久99精品一区二区三区| 欧美一级xxx| 亚洲h在线观看| 欧美日韩免费不卡视频一区二区三区| 中文字幕色av一区二区三区| 久久成人久久鬼色| 中文字幕不卡三区| 国产成人综合精品三级| 国产精品久久久久久久久图文区| 国产成人精品免费网站| 日本一区二区电影| 日本高清不卡aⅴ免费网站| 亚洲视频综合在线| 91丨porny丨首页| 亚洲福利视频一区| 欧美人动与zoxxxx乱| 污片在线观看一区二区| 欧美一区二区成人| 激情深爱一区二区| 国产色一区二区| 一本一道综合狠狠老| 午夜欧美在线一二页| 6080yy午夜一二三区久久| 亚洲一区影音先锋| 精品国内二区三区| 国产风韵犹存在线视精品| 亚洲国产精品精华液ab| 欧美吻胸吃奶大尺度电影| 日本vs亚洲vs韩国一区三区 | 欧美日韩国产一二三| 婷婷国产在线综合| 欧美激情一区不卡| 在线欧美日韩国产| 日韩国产欧美在线观看| 国产精品乱码一区二区三区软件| 91蜜桃在线观看| 日韩国产精品91| 国产精品进线69影院| 欧美日韩一区二区三区在线| 久久国产尿小便嘘嘘尿| 久久天堂av综合合色蜜桃网| 成人av网址在线观看| 亚洲国产日韩一区二区| 777a∨成人精品桃花网| 91小视频免费看| 午夜精品久久久| 国产精品情趣视频| 精品久久久久一区| 99久精品国产| 美女一区二区三区| 亚洲国产综合91精品麻豆| 日韩欧美亚洲国产另类 | 成人一区二区三区| 免费成人av资源网| 亚洲综合久久av| 久久精品视频网| 欧美成人乱码一区二区三区| 色就色 综合激情| 精品一区中文字幕| 日韩成人免费电影| 亚洲婷婷国产精品电影人久久| 日韩一区二区三区在线| 成人视屏免费看| 国模冰冰炮一区二区| 亚洲国产精品尤物yw在线观看| 国产精品网站在线播放| 欧美精品一区二区久久久| 欧美日韩在线播放三区四区| 成人免费毛片嘿嘿连载视频| 亚洲综合自拍偷拍| 国产精品色婷婷| 国产精品进线69影院| 久久久99免费| 日韩精品一区二区在线| 日韩一区二区麻豆国产| 欧洲国内综合视频| 97精品久久久久中文字幕| 99riav一区二区三区| 成人av资源下载| av电影天堂一区二区在线观看| 99久久久国产精品免费蜜臀| 国产一区二区导航在线播放| 麻豆久久久久久| 五月天亚洲精品| 亚洲成人在线免费| 一级做a爱片久久| 欧美日韩久久一区| 日韩欧美中文字幕公布| 欧美精品丝袜中出| 精品少妇一区二区三区在线播放| 2020国产精品自拍| 中文一区二区在线观看| 亚洲免费观看高清完整版在线观看 | 91精品国产欧美日韩| 日韩免费成人网| 国产精品美女久久久久久久久| 一区二区日韩电影| 九九九久久久精品| 99精品热视频| 日韩欧美中文字幕公布| 国产精品麻豆99久久久久久| 亚洲高清免费一级二级三级| 久久99精品久久久久久动态图 | 亚洲乱码国产乱码精品精的特点| 亚洲最新视频在线观看| 国产主播一区二区三区| 99久久精品99国产精品| 欧美精选午夜久久久乱码6080| 国产日产精品1区| 一卡二卡欧美日韩| 国产成人亚洲综合a∨婷婷| 欧美日韩一区在线观看| 日本一区二区三区四区| 人人狠狠综合久久亚洲| 99精品久久久久久| 久久―日本道色综合久久| 亚洲综合久久久| 成人午夜伦理影院|