📄 pe_usb_iso.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 + -