📄 pe_usb.h
字号:
#ifndef __USB_H
#define __USB_H
#include "flib.h"
#include "symbol.h"
#include "FOTG200_peripheral.h"
#define HighBandWidth_None 0x00
#define HighBandWidth_2 0x01
#define HighBandWidth_3 0x02
////// Define USB transfer test defines//////
#define Bulk_AP 0
#define Interrupt_AP 1 //Important:this setting only for cross-connection, NOT for PC test-bench
#define IsochronousIN_AP 2
#define IsochronousOUT_AP 3
#define OTG_AP_Satus Bulk_AP
////// Define Bulk transfer FIFO test ///////
#define Bulk_FIFO_SingleDir 0
#define Bulk_FIFO_BiDir 1
#define Bulk_Satus Bulk_FIFO_BiDir
//================ 1. Define for control Vandor test==================================================
extern INT8U u8CxOUTVandorDataCount;
extern INT8U u8CxINVandorDataCount;
//================ 2.Define for Bulk =====================================================================================
#define ShowMassMsg 0
#define MAX_BUFFER_SIZE 0x10000//0x2000//bruce;;04182005;;0x10000
#define DBUS_RD 1
#define DBUS_WR 2
#define APB_RD 3
#define APB_WR 4
#define DBUS2APB 5
#define APB2DBUS 6
#define CBW_SIGNATE 0x43425355
#define CSW_SIGNATE 0x53425355
#define CSW_STATUS_CMD_PASS 0x00
#define CSW_STATUS_CMD_FAIL 0x01
#define CSW_STATUS_PHASE_ERROR 0x02
typedef enum
{
IDLE,
STATE_CBW,
STATE_CB_DATA_IN,
STATE_CB_DATA_OUT,
STATE_CSW
} MassStorageState;
typedef struct CommandBlockWrapper
{
INT32U u32Signature;
INT32U u32Tag;
INT32U u32DataTransferLength;
INT8U u8Flags;
INT8U u8LUN;
INT8U u8CBLength;
INT8U u8CB[16];
} CBW;
typedef struct CommandStatusWrapper
{
INT32U u32Signature;
INT32U u32Tag;
INT32U u32DataResidue;
INT8U u8Status;
} CSW;
extern CBW tOTGCBW;
extern CSW tOTGCSW;
extern MassStorageState eUsbOTGMassStorageState;
extern INT8U *u8VirtOTGMemory;//[MAX_BUFFER_SIZE];
extern INT32U* u32VirtOTGMemory;
extern INT32U u32VirtOTGMemoryIndex;
extern INT32U u32OTGFIFOUseDMA;
extern INT32U u32UseDMAOTGChannel;
extern INT8U bOTGDMARunning;
extern void vUsb_Bulk_Out(INT16U u16FIFOByteCount);
extern void vUsb_Bulk_In(void);
extern void vOTG_APInit(void);
extern void vOTGCheckDMA(void);
//================ 3.Define for Interrupt =====================================================================================
#define IntTransSizeFix 0
extern INT8U *u8InterruptOTGArray;
extern INT8U u8OTGInterruptCount;
extern INT32U u32OTGInterrupt_TX_COUNT ;
extern INT8U u8OTGInterruptOutCount ;
extern INT32U u32OTGInterrupt_RX_COUNT ;
extern void vOTG_Interrupt_In(void);
extern void vOTG_Interrupt_Initial(void);
extern void vOTG_Interrupt_Out(void);
//================ Define for Isochronous =========================
#define ISO_Wrap 254//254
extern INT32U *u32OTGISOArray;
extern INT32U u32ISOOTGInTransferCount;
extern INT32U u32ISOOTGOutTransferCount;
extern INT32U u32ISOOTGInTest[4096];
extern INT32U *u32ISOOTGOutArray;
extern INT8U u8ISOOTGOutCount ;
extern void vOTG_ISO_Initial(void);
extern void vOTG_ISO_In(void);
extern void vOTG_ISO_Out(void);
extern void vAHB_DMA_WaitIntStatus(UINT32 Channel);
//============== 4.Define for main.c =========================================
extern INT8U u8LineOTGCount;
//============== 5.Define for usb.c =========================================
typedef enum
{
CMD_VOID, // No command
CMD_GET_DESCRIPTOR, // Get_Descriptor command
CMD_SET_DESCRIPTOR, // Set_Descriptor command
CMD_CxOUT_Vendor, //Cx OUT Vandor command test
CMD_CxIN_Vendor //Cx IN Vandor command test
} CommandType;
typedef enum
{
ACT_IDLE,
ACT_DONE,
ACT_STALL
} Action;
#define DCacheEnable 0
// Table 9-5. Descriptor Types
#define DT_DEVICE 1
#define DT_CONFIGURATION 2
#define DT_STRING 3
#define DT_INTERFACE 4
#define DT_ENDPOINT 5
#define DT_DEVICE_QUALIFIER 6
#define DT_OTHER_SPEED_CONFIGURATION 7
#define DT_INTERFACE_POWER 8
#define DT_OTG 9 //For OTG
//For OTG
#define OTG_SRP_SUPPORT 0x01
#define OTG_HNP_SUPPORT 0x02
#define FS_OTG_SUPPORT (OTG_SRP_SUPPORT | OTG_HNP_SUPPORT)
#define TEST_J 0x02
#define TEST_K 0x04
#define TEST_SE0_NAK 0x08
#define TEST_PKY 0x10
//*******************************************************
// Structure
typedef struct Setup_Packet
{
INT8U Direction; /*Data transfer direction: IN, OUT*/
INT8U Type; /*Request Type: Standard, Class, Vendor*/
INT8U Object; /*Recipient: Device, Interface, Endpoint,other*/
INT16U Request; /*Refer to Table 9-3*/
INT16U Value;
INT16U Index;
INT16U Length;
} SetupPacket;
extern BOOLEAN bOTGBufferEmpty;
extern INT8U u8OTGMessageLevel;
extern INT32U OTG_interrupt_level1;
extern INT32U OTG_interrupt_level1_Save;
extern INT32U OTG_interrupt_level1_Mask;
extern INT8U u8OTGConfigValue;
extern INT8U u8OTGInterfaceValue;
extern INT8U u8OTGInterfaceAlternateSetting;
extern BOOLEAN bOTGHighSpeed;
extern void vOTGInit(void);
extern void vOTGHandler(void);
extern void vOTGFIFO_EPxCfg_HS(void);
extern void vOTGFIFO_EPxCfg_FS(void);
extern void vFOTG200_Dev_Init(void);
extern void vOTG_ep0setup(void);
extern BOOLEAN bOTGStandardCommand(void);
extern BOOLEAN bGet_OTGstatus(void);
extern BOOLEAN bClear_OTGfeature(void);
extern BOOLEAN bSet_OTGfeature(void);
extern BOOLEAN bSet_OTGaddress(void);
extern BOOLEAN bGet_OTGdescriptor(void);
extern void vOTGEP0TxData(void);
extern BOOLEAN bSet_OTGdescriptor(void);
extern void vOTGEP0RxData(void);
extern void vGet_OTGconfiguration(void);
extern BOOLEAN bSet_OTGconfiguration(void);
extern void vOTGClrEPx(void);
extern void vOTGClrEPxFIFOxReg(void);
extern BOOLEAN bGet_OTGinterface(void);
extern BOOLEAN bSet_OTGinterface(void);
extern BOOLEAN bSynch_OTGframe(void);
extern void vOTG_ep0tx(void);
extern void vOTGEP0TxData(void);
extern void vOTG_ep0rx(void);
extern void vOTGEP0RxData(void);
extern void vOTG_ep0end(void);
extern void vOTG_ep0fail(void);
extern void vOTG_ep0abort(void);
extern void vOTG_rst(void);
extern void vOTG_suspend(void);
extern void vOTG_resm(void);
extern void vOTG_sof(void);
extern void vOTG_ISO_SeqErr(void);
extern void vOTG_ISO_SeqAbort(void);
extern void vOTG_TX0Byte(void);
extern void vOTG_RX0Byte(void);
extern void vOTGDxFWr(INT8U FIFONum, INT8U * pu8Buffer, INT16U u16Num);
extern void vOTGDxFRd(INT8U FIFONum, INT8U * pu8Buffer, INT16U u16Num);
extern void vOTGCxFWr( INT8U *pu8Buffer, INT16U u16Num);
extern void vOTGCxFRd( INT8U *pu8Buffer, INT16U u16Num);
extern void flib_Debug_LED_Init(void);
extern void flib_Debug_LED_On_All(void);
extern void flib_Debug_LED_Off_All(void);
#endif /* __USB_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -