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

📄 pe_usb_iso.c

📁 GM8120 linux driver.
💻 C
字号:
///////////////////////////////////////////////////////////////////////////////////	File name: OTG_ISO.c//	Version: 1.0//	Date: 2003/8/05////	Author: Andrew//	Email: yping@faraday.com.tw//	Phone: (03) 578-7888//	Company: Faraday Tech. Corp.////	Description: USB ISOCHRONOUS Transfer test Rountine & relatived subroutine/////////////////////////////////////////////////////////////////////////////////#define OTG_ISO_GLOBALS#include <stdlib.h>#include <stdio.h>#include <string.h>#include "Pe_my_usbtable.h"#include "Pe_usb.h"#include "Pe_usb_pre.h"#include "FOTG200_peripheral.h"static INT8U u8ISOOTGInit=FALSE;INT32U *u32OTGISOArray;INT32U *u32ISOOTGOutArray;INT32U u32ISOOTGInTransferCount;INT32U u32ISOOTGOutTransferCount;INT32U u32ISOOTGInTest[4096];INT8U u8ISOOTGOutCount ;/////////////////////////////////////////////////////////////////////////////////		vOTG_ISO_Initial() //		Description: ISO buffer initial//		input: none//		output: none///////////////////////////////////////////////////////////////////////////////void vOTG_ISO_Initial(void){	INT32U u32i, u32OTGISOArraySize,u32PacketSize;	INT32U u32OTGISOArrayCount = 0;	INT8U* pp;	if(u8ISOOTGInit == FALSE)	{	#if 0		if(bOTGHighSpeed)			u32PacketSize = HS_C1_I0_A0_EP1_MAX_PACKET & 0x7ff;		else			u32PacketSize = FS_C1_I0_A0_EP1_MAX_PACKET ;	#else		u32PacketSize = ((HS_C1_I0_A0_EP1_MAX_PACKET& 0x7ff)>FS_C1_I0_A0_EP1_MAX_PACKET)?						(HS_C1_I0_A0_EP1_MAX_PACKET& 0x7ff): FS_C1_I0_A0_EP1_MAX_PACKET;	#endif					u8ISOOTGOutCount = 0;		u32ISOOTGOutArray = (INT32U *)malloc(u32PacketSize * 16);		u32ISOOTGOutArray = (INT32U *)malloc(u32PacketSize * 16);				u32OTGISOArray = (INT32U *)malloc(((ISO_Wrap + 1) * u32PacketSize) * 2);		u32OTGISOArraySize = ((ISO_Wrap + 1) * u32PacketSize) * 2 ;		pp = (INT8U *)u32OTGISOArray;		for(u32i = 0; u32i < u32OTGISOArraySize; u32i++)		{					*(pp + 0	) = (INT8U)u32OTGISOArrayCount;			u32OTGISOArrayCount++;			u32OTGISOArrayCount = (u32OTGISOArrayCount <= ISO_Wrap) ? u32OTGISOArrayCount : (u32OTGISOArrayCount - (ISO_Wrap + 1));						*(pp + 1	) = (INT8U)u32OTGISOArrayCount;			u32OTGISOArrayCount++;			u32OTGISOArrayCount = (u32OTGISOArrayCount <= ISO_Wrap) ? u32OTGISOArrayCount : (u32OTGISOArrayCount - (ISO_Wrap + 1));			*(pp + 2	) = (INT8U)u32OTGISOArrayCount;			u32OTGISOArrayCount++;			u32OTGISOArrayCount = (u32OTGISOArrayCount <= ISO_Wrap) ? u32OTGISOArrayCount : (u32OTGISOArrayCount - (ISO_Wrap + 1));			*(pp + 3 ) = (INT8U)u32OTGISOArrayCount;			u32OTGISOArrayCount++;			u32OTGISOArrayCount = (u32OTGISOArrayCount <= ISO_Wrap) ? u32OTGISOArrayCount : (u32OTGISOArrayCount - (ISO_Wrap + 1));						pp = pp + 4;		}		u8ISOOTGInit = TRUE;	}}/////////////////////////////////////////////////////////////////////////////////		vOTG_ISO_In() //		Description: Use PIO/DMA send Isochronous data//		input: none//		output: none///////////////////////////////////////////////////////////////////////////////void vOTG_ISO_In(void){	INT32U u32PacketSize ;	if(bOTGHighSpeed)		u32PacketSize = HS_C1_I0_A0_EP1_MAX_PACKET & 0x7ff;	else		u32PacketSize = FS_C1_I0_A0_EP1_MAX_PACKET ;			vOTGDxFWr(FIFO0, u32OTGISOArray +  u32PacketSize * u32ISOOTGInTransferCount / 4,					(INT16U)u32PacketSize * 8);		mUsbFIFODone(FIFO0);		u32ISOOTGInTransferCount = u32ISOOTGInTransferCount + 8;		u32ISOOTGInTransferCount = (u32ISOOTGInTransferCount <= ISO_Wrap) ? 								u32ISOOTGInTransferCount : 								(u32ISOOTGInTransferCount - (ISO_Wrap + 1));}/////////////////////////////////////////////////////////////////////////////////		vOTG_ISO_Out() //		Description: Use PIO/DMA get Isochronous data//		input: none//		output: none///////////////////////////////////////////////////////////////////////////////void vOTG_ISO_Out(void){	INT32U u32PacketSize ;	INT32U u32ISO_RX_Count = mUsbFIFOOutByteCount(FIFO0);	int i;	if(bOTGHighSpeed)		u32PacketSize = HS_C1_I0_A0_EP1_MAX_PACKET & 0x7ff;	else		u32PacketSize = FS_C1_I0_A0_EP1_MAX_PACKET & 0x7ff;	if(u32PacketSize != u32ISO_RX_Count)	{		if(u8OTGMessageLevel & MESS_INFO)			printf("L%x: ISO Out Byte Count Error = %x...\n", 				u8LineOTGCount ++, (INT16U)u32ISO_RX_Count);	}		vOTGDxFRd( FIFO0, u32ISOOTGOutArray, (INT16U)u32PacketSize * 8);	u8ISOOTGOutCount = u8ISOOTGOutCount + 8;		u32ISOOTGOutTransferCount = u32ISOOTGOutTransferCount + 8;	u32ISOOTGOutTransferCount = (u32ISOOTGOutTransferCount <= ISO_Wrap + 8) ? 							   u32ISOOTGOutTransferCount : 							  (u32ISOOTGOutTransferCount - (ISO_Wrap + 1));#if 1	if(u8ISOOTGOutCount == 8)	{	#if 0		printf("ISO Out data....(u32ISOTransferCount = 0x%x)\n",(INT16U)u32ISOOTGOutTransferCount );	#endif		if(memcmp(u32ISOOTGOutArray, 				u32OTGISOArray + ((u32PacketSize * (u32ISOOTGOutTransferCount - 8)) >> 2) , 				u32ISO_RX_Count * 8) != 0)		{			printf("ISO Out error data....(u32ISOTransferCount = 0x%x)\n",				(INT16U)u32ISOOTGOutTransferCount );	#if 1			for(i = 0; i < (u32ISO_RX_Count * 8 /4); i++)			{				if(u32ISOOTGOutArray[i] != u32OTGISOArray[((u32PacketSize * (u32ISOOTGOutTransferCount - 8)) >> 2) + i])				{					printf("========>DstAddr[0x%x] = 0x%04x%04x, should be 0x%04x%04x\n", i, 						(INT16U)(u32ISOOTGOutArray[i] >> 16),(INT16U)(u32ISOOTGOutArray[i]),						(INT16U)(u32OTGISOArray[((u32PacketSize * (u32ISOOTGOutTransferCount - 8)) >> 2) + i] >> 16),						(INT16U)(u32OTGISOArray[((u32PacketSize * (u32ISOOTGOutTransferCount - 8)) >> 2) + i]));					break;				}			}	#endif				}	else {	    //  printf("ISO Out data PASS....(u32ISOTransferCount = 0x%x)\n",(INT16U)u32ISOOTGOutTransferCount );	     // while(1);	      }	}	#endif	if(u8ISOOTGOutCount == 8)		u8ISOOTGOutCount = 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -