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

📄 xllp_udc.h

📁 PXA270硬件测试源代码
💻 H
📖 第 1 页 / 共 3 页
字号:
************************************************************************************
*							DATA TYPES                
************************************************************************************
*/

// USB Device Descriptor structure
typedef struct XLLP_UDC_USB_DEVICE_DESCRIPTOR_S
{
    XLLP_UINT8_T    bLength;
    XLLP_UINT8_T    bDescriptorType;
    XLLP_UINT16_T   bcdUSB;
    XLLP_UINT8_T    bDeviceClass;
    XLLP_UINT8_T    bDeviceSubClass;
    XLLP_UINT8_T    bDeviceProtocol;
    XLLP_UINT8_T    bMaxPacketSize0;
    XLLP_UINT16_T   idVendor;
    XLLP_UINT16_T   idProduct;
    XLLP_UINT16_T   bcdDevice;
    XLLP_UINT8_T    iManufacturer;
    XLLP_UINT8_T    iProduct;
    XLLP_UINT8_T    iSerialNumber;
    XLLP_UINT8_T    bNumConfigurations;
} XLLP_UDC_USB_DEVICE_DESCRIPTOR_T, P_XLLP_UDC_USB_DEVICE_DESCRIPTOR_T;

// USB Setup transaction structure
typedef struct XLLP_UDC_USB_SETUP_DATA_S
{
    XLLP_UINT8_T bmRequestType;
    XLLP_UINT8_T bRequest;
    XLLP_UINT16_T wValue;
    XLLP_UINT16_T wIndex;
    XLLP_UINT16_T wLength;
} XLLP_UDC_USB_SETUP_DATA_T, *P_XLLP_UDC_USB_SETUP_DATA_T;

// UDC Control Transfer structure
typedef struct XLLP_UDC_USB_CTRL_XFER_S
{
    XLLP_UINT32_T   statusEp0;       
    P_XLLP_UINT32_T pTxBuffEp0;
    P_XLLP_UINT32_T pRxBuffEp0;
    XLLP_UINT32_T   outDataEp0[64];
    XLLP_UINT16_T   descIndexEp0;
    XLLP_UINT16_T   descTypeEp0;
    XLLP_UINT32_T   dataLengthEp0;
} XLLP_UDC_USB_CTRL_XFER_T, *P_XLLP_UDC_USB_CTRL_XFER_T;

// UDC Vendor Request structure
typedef struct XLLP_UDC_VENDOR_REQ_DATA_S
{
    XLLP_UINT8_T	recipient;
    XLLP_UINT8_T    vendorReqType;
    XLLP_UINT16_T   vendorReqEndpointNum;
    XLLP_UINT32_T   vendorReqXferLength;
    XLLP_BOOL_T     vendorReqComplete;
} XLLP_UDC_VENDOR_REQ_DATA_T, *P_XLLP_UDC_VENDOR_REQ_DATA_T;

// UDC Interrupt statistics structure
typedef struct XLLP_UDC_INT_STATISTICS_S
{
    XLLP_UINT32_T ResetIntCount;
    XLLP_UINT32_T SuspendIntCount;
    XLLP_UINT32_T ResumeIntCount;	
    XLLP_UINT32_T SOFIntCount;
    XLLP_UINT32_T ConfigIntCount;
    XLLP_UINT32_T EpIntCount[XLLP_UDC_MAX_EP_NUM];
	
	P_XLLP_UINT32_T pRegDbg;
	XLLP_UINT32_T   totalCapturedCnt;
} XLLP_UDC_INT_STATISTICS_T, *P_XLLP_UDC_INT_STATISTICS_T;

// UDC Endpoints transfers structure
typedef struct XLLP_UDC_XFER_S
{
//    XsDmaDescriptorElementsT * firstDescVtP;
    P_XLLP_UINT32_T pDataEp;
    XLLP_UINT32_T   dmaChannel;
    XLLP_UINT32_T   xferLength;
    XLLP_UINT32_T   xferDataCounter;
    XLLP_UINT32_T   maxPacketSize;
    XLLP_BOOL_T   TxXferComplete;
    XLLP_BOOL_T   RxXferComplete;
    XLLP_BOOL_T   RxBlockXferComplete;
    XLLP_BOOL_T   enableLoopback;
} XLLP_UDC_XFER_T, *P_XLLP_UDC_XFER_T;

// UDC Registers
typedef struct XLLP_UDC_REGISTERS_S {
    XLLP_VUINT32_T UDCCR;           // UDC Control Register
    XLLP_VUINT32_T UDCICR0;         // UDC Interrrupt Control Register 0
    XLLP_VUINT32_T UDCICR1;         // UDC Interrrupt Control Register 1
    XLLP_VUINT32_T UDCISR0;         // UDC Interrrupt Status Register 0
    XLLP_VUINT32_T UDCISR1;         // UDC Interrrupt Status Register 1
    XLLP_VUINT32_T UDCFNR;          // UDC Frame Number Register
    XLLP_VUINT32_T RESERVED0[58];   // Reserved 0x40600018-0x406000FF 
    XLLP_VUINT32_T UDCCSR[24];      // UDC Control/Status registers 0, A-X
    XLLP_VUINT32_T RESERVED1[40];   // Reserved 0x4060015F-0x406001FF 
    XLLP_VUINT32_T UDCBCR[24];      // UDC Byte Count Registers 0, A-X
    XLLP_VUINT32_T RESERVED2[40];   // Reserved 0x4060025F-0x406002FF 
    XLLP_VUINT32_T UDCDR[24];       // UDC Data Registers 0, A-X
    XLLP_VUINT32_T RESERVED3[40];   // Reserved 0x4060035F-0x406003FF,
    XLLP_VUINT32_T UDCCRZ[24];      // Reserved 0x40600400-0x40600403,
                                    // 23 UDC Configuration Registers A-X
} XLLP_UDC_REGISTERS_T, *P_XLLP_UDC_REGISTERS_T;

// Note:    
// Reserved 0x4060045F-0x406FFFFF

// UDC Endpoint Configuration Structure
typedef struct XLLP_UDC_EP_CONFIG_TABLE_S {
    XLLP_UDC_EP_T       udcEndpointNum;             // UDC Endpoint Number: (0-23)
    XLLP_UINT8_T        usbConfigNum;               // Usb Configuration Number: (1-3)
    XLLP_UINT8_T        usbInterfaceNum;            // Usb Interface Number: (1-7)
    XLLP_UINT8_T        usbIntAltSettingsNum;       // Usb Interface Alternate Settings Number: (1-7)
    XLLP_UDC_USB_EP_T   usbEndpointNum;             // Usb Endpoint Number: (1-15)
    XLLP_UDC_EP_TYPE_T  usbEndpointType;            // Usb Endpoint type: Bulk, Iso, Interrupt
    XLLP_UDC_EP_DIR_T   usbEndpointDirection;       // Usb Endpoint direction: IN, OUT
    XLLP_UINT16_T       maxPacketSize;              // Max. Packet Size: (1-1023)
    XLLP_UDC_EP_DOUBLE_BUFF_T doubleBuffEnabled;    // Double Buffering Enabled if set to one
    XLLP_UDC_EP_ENABLED_T   endpointEnabled;        // Endpoint Enabled if set to one
    XLLP_UINT32_T           endpointConfigValue;    // Endpoint Configuration Register Value
} XLLP_UDC_EP_CONFIG_TABLE_T, *P_XLLP_UDC_EP_CONFIG_TABLE_T; 

typedef struct XLLP_UDC_USB_BIND_ENDPOINTS_S {
    XLLP_UDC_EP_T       udcEndpointNum;             // UDC Endpoint Number: (0-23)
    XLLP_UDC_USB_EP_T   usbEndpointNum;             // Usb Endpoint Number: (1-15)
} XLLP_UDC_USB_BIND_ENDPOINTS_T;


// UDC Handle Structure
typedef struct XLLP_UDC_S {
    P_XLLP_UDC_REGISTERS_T  pRegsBase;          // Pointer to UDC's registers
    P_XLLP_UDC_EP_CONFIG_TABLE_T pConfigTable;  // Pointer to the Endpoints Config. table
    XLLP_UDC_USB_BIND_ENDPOINTS_T listOfActiveEndpoints[XLLP_UDC_USB_MAX_EP_NUM]; 
                                                // Used to keep track of endpoints in the active configuration
    XLLP_UDC_INT_STATISTICS_T interruptStat;    // Used to keep track ot the interrupts statistics
	XLLP_UDC_XFER_T EpXferTable[XLLP_UDC_MAX_EP_NUM];  // Used to support the transfers
	XLLP_UDC_USB_CTRL_XFER_T controlXfer;       // Used to process control transfers
	XLLP_UDC_VENDOR_REQ_DATA_T vendorReq;       // Used to process vendor requests
	XLLP_BOOL_T enableDma;				        // Selects DMA to service FIFOs if set
	XLLP_BOOL_T setupComplete;			        // Used to track the complition of the setup 
    XLLP_BOOL_T enumerateComplete;		        // Used to track the complition of the enumerate command
    XLLP_BOOL_T cableAttached;                  // Used to monitor the cable attachment and disconnect
    XLLP_UINT8_T    usbConfigNumActive;         // Active Usb Configuration Number: (1-3)
    XLLP_UINT8_T    usbInterfaceNumActive;      // Active Usb Interface Number: (1-7)
    XLLP_UINT8_T    usbIntAltSettingsNumActive; // Active Usb Interface Alternate Settings Number: (1-7)
} XLLP_UDC_T, *P_XLLP_UDC_T;

/*
************************************************************************************
*                            FUNCTION PROTOTYPES 
************************************************************************************
*/
void XllpUdcComputeConfigRegisterValueSingle (
                                    XLLP_UDC_EP_T   udcEndpointNum,        
                                    XLLP_UINT8_T    usbConfigNum,          
                                    XLLP_UINT8_T    usbInterfaceNum,       
                                    XLLP_UINT8_T    usbIntAltSettingsNum,  
                                    XLLP_UDC_USB_EP_T   usbEndpointNum,        
                                    XLLP_UDC_EP_TYPE_T  usbEndpointType,       
                                    XLLP_UDC_EP_DIR_T   usbEndpointDirection,  
                                    XLLP_UINT16_T   maxPacketSize,      
                                    XLLP_UDC_EP_DOUBLE_BUFF_T   doubleBuffEnabled,  	
                                    XLLP_UDC_EP_ENABLED_T       endpointEnabled,
                                    P_XLLP_UINT32_T pEndpointConfigRegValue);
void XllpUdcComputeConfigRegisterValue (P_XLLP_UDC_EP_CONFIG_TABLE_T pEndpointsConfigTable,
                                        P_XLLP_UINT32_T pEndpointConfigRegValue);
XLLP_STATUS_T XllpUdcConfigureEndpoints (P_XLLP_UDC_T pUdcHandle);
void XllpUdcEnableInterrupt (P_XLLP_UDC_T pUdcHandle, 
                             XLLP_UDC_INTERRUPTS_T udcEndpointNum,
                             XLLP_UDC_EP_INTERRUPT_TYPE_T interruptType);
void XllpUdcDisableInterrupt (P_XLLP_UDC_T pUdcHandle, 
                              XLLP_UDC_INTERRUPTS_T udcEndpointNum,
                              XLLP_UDC_EP_INTERRUPT_TYPE_T interruptType);
void XllpUdcClearInterrupt (P_XLLP_UDC_T pUdcHandle,
                            XLLP_UDC_INTERRUPTS_T udcEndpointNum,
                            XLLP_UDC_EP_INTERRUPT_TYPE_T interruptType);

void XllpUdcGetStatusInterrupt (P_XLLP_UDC_T pUdcHandle,
                                XLLP_UDC_INTERRUPTS_T udcEndpointNum,
                                XLLP_UDC_EP_INTERRUPT_TYPE_T interruptType,  
                                P_XLLP_UINT32_T intStatus);
void XllpUdcBuildListOfActiveEndpoints (P_XLLP_UDC_T pUdcHandle,
                                        XLLP_UINT32_T configuration,
                                        XLLP_UINT32_T interface,
                                        XLLP_UINT32_T settings,
                                        P_XLLP_UINT32_T pNumActiveEndpoints);
void XllpUdcControlProcessIdle (P_XLLP_UDC_T pUdcHandle,
                                P_XLLP_UINT32_T pControlXferStatus);

void XllpUdcControlProcessOutData (P_XLLP_UDC_T pUdcHandle,
                                   P_XLLP_UINT32_T pControlXferStatus);
void XllpUdcControlProcessInData (P_XLLP_UDC_T pUdcHandle,
                                  P_XLLP_UINT32_T pControlXferStatus); 
void XllpUdcControlProcessEndXfer (P_XLLP_UDC_T pUdcHandle, 
                                   P_XLLP_UINT32_T pControlXferStatus);
void XllpUdcEp0InterruptHandler (P_XLLP_UDC_T pUdcHandle);
void XllpUdcBusDevSoftConnect (XLLP_BOOL_T connect);
void XllpUdcForceEndpointStall (P_XLLP_UDC_T pUdcHandle,
                                XLLP_UDC_EP_T udcEndpointNum);
void XllpUdcFlashEndpointFifo (P_XLLP_UDC_T pUdcHandle,
                               XLLP_UDC_EP_T udcEndpointNum);
void XllpUdcFillFifo (P_XLLP_UDC_T pUdcHandle, 
                      XLLP_UDC_EP_T udcEndpointNum,
                      XLLP_BOOL_T enableZLP);
void XllpUdcUnloadFifo (P_XLLP_UDC_T pUdcHandle, 
                        XLLP_UDC_EP_T udcEndpointNum); 
void XllpUdcConfigInterruptHandler (P_XLLP_UDC_T pUdcHandle);
XLLP_STATUS_T XllpUdcHWSetup (P_XLLP_UDC_T pUdcHandle);
XLLP_STATUS_T XllpUdcHWShutdown (P_XLLP_UDC_T pUdcHandle);
void XllpUdcSWInit (P_XLLP_UDC_T pUdcHandle, P_XLLP_UDC_REGISTERS_T pRegs);

#endif 	/* _xllp_udc_h */

⌨️ 快捷键说明

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