📄 usb_otg.h
字号:
/**
* Project Name : 2460 Verification
*
* Copyright 2005 by Samsung Electronics,Inc.
* All rights reserved.
*
* Project Description :
*
*/
/**
* File Name : usb_otg.h
*
* File Description :
* this file defines the otg controller
* and declares function prototypes needed
*
* Author : Haksoo Kim(Sue)
* Dept : AP
* Created Date : 2005/03/02
* Version : 0.9
*
* Revision History :
* (who) (when) (why)
* Haksoo Kim 2005/03/02 .....
*
*/
#ifndef __USBOTG_H__
#define __USBOTG_H__
#ifdef __cplusplus
extern "C"
{
#endif
#include "type.h"
//===================================
// OTG DEVICE SIDE
//
#define OTG_DEV_TX_FIFO(n) ((uint8 *)(0x41900000 + OTG_DEV_FIFO_OFFSET_SIZE * (n)))
#define OTG_DEV_FIFO_OFFSET_SIZE 0x4000
#define OTG_DEV_RX_FIFO ((uint32 *)0x41940000)
/* otg TLI-specific SFRs(USB Device Mode) */
typedef struct apOTG_TLI_DEV_S_REG
{
/* IN Endpoint-specific registers */
struct
{
uint32 control;
uint32 status;
uint32 txfifoSize;
uint32 txCount;
}
InEP[5];
uint32 reserved[44]; //0x50~0xFC
/* OUT Endpoint-specific registers */
struct
{
uint32 control; //0x100,0x110,0x120,0x130,0x140
uint32 reserved[3]; //0x104~0x10C......
}
OutEP[5];
}
apOTG_TLI_DEV_S_REG;
#define apOTG_TLI_DEV_S ((volatile apOTG_TLI_DEV_S_REG*)(0x41944000))
//* apOTG_TLI_DEV_S->In/OutEP[n].control
# define OTG_DEV_TX_SENDSTALL 0x0001
# define OTG_DEV_TX_SENDNAK 0x0002
# define OTG_DEV_TX_FLUSHFIFO 0x0004
# define OTG_DEV_TX_FIFOREADY 0x0008
# define OTG_DEV_TX_GOOD_STATUS 0x0001
# define OTG_DEV_TX_STATUS_INTR 0x0002
# define OTG_DEV_TX_THRESH_INTR 0x0004
# define OTG_DEV_TX_NAK_INTR 0x0008
# define OTG_DEV_TX_UNDERRUN 0x0010
# define OTG_DEV_RX_SENDSTALL 0x0001
# define OTG_DEV_RX_SENDNAK 0x0002
# define OTG_DEV_RX_FLUSHFIFO 0x0004
# define OTG_DEV_RX_FIFOREADY 0x0008
/* otg TLI-global SFRs(USB Device Mode) */
typedef struct apOTG_TLI_DEV_G_REG
{
uint32 devConfig;
uint32 devStatus;
uint32 devIntr;
uint32 devIntrMask;
uint32 rxfifoSize;
uint32 epIntrMask;
uint32 threshold;
uint32 rxStatus;
uint32 setupStatus;
uint32 epIntr;
uint32 frameNum;
uint32 reserved[53]; //0x4194_42FC
uint32 setupData1; //0x4194_4300
uint32 setupData2; //0x4194_4304
uint32 slvBiuDlyCnt; //0x4194_4308
uint32 i2cReg; //0x4194_430C
}
apOTG_TLI_DEV_G_REG;
#define apOTG_TLI_DEV_G ((volatile apOTG_TLI_DEV_G_REG*)(0x41944200))
//* apOTG_TLI_DEV_G->devConfig
# define OTG_DEV_CONFIG_SPEEDLOW 0x0002
# define OTG_DEV_CONFIG_SPEEDFULL 0x0003
# define OTG_DEV_CONFIG_REMOTEWAKE 0x0004
# define OTG_DEV_CONFIG_SELFPOWERED 0x0008
# define OTG_DEV_CONFIG_SYNCFRAME 0x0010
# define OTG_DEV_SFR_PROG_SUPPORTED 0x0020
# define OTG_DEV_SFR_PROG_DONE 0x0040
# define OTG_DEV_SET_DESC_SUPPORTED 0x0080
# define OTG_DEV_DEVICE_MODE 0x0100
//* apOTG_TLI_DEV_G->devStatus
//* apOTG_TLI_DEV_G->devIntr & devIntrMask
# define OTG_DEV_SETCFG_INTR 0x0001
# define OTG_DEV_SETINTF_INTR 0x0002
# define OTG_DEV_BUSRESET_INTR 0x0008
# define OTG_DEV_SUSPEND_INTR 0x0010
# define OTG_DEV_SOF_INTR 0x0020
# define OTG_DEV_SETUP_INTR 0x0040
# define OTG_DEV_RX_FIFO_INTR 0x0080
# define OTG_DEV_PORT_STATUS_INTR 0x0100
# define OTG_DEV_OTG_STATUS_INTR 0x0200
# define OTG_DEV_I2C_INTR 0x0400
//* apOTG_TLI_DEV_G->rxStatus
# define OTG_DEV_RX_GOOD_STATUS 0x0001
# define OTG_DEV_RX_STATUS_INTR 0x0002
# define OTG_DEV_RX_THRESH_INTR 0x0004
# define OTG_DEV_RX_OVERRUN 0x0010
# define OTG_DEV_RX_ENDP_SHIFT 16
# define OTG_DEV_RX_ENDP_MASK 0x001f
# define OTG_DEV_RX_COUNT_SHIFT 22
# define OTG_DEV_RX_COUNT_MASK 0x03ff
//* apOTG_TLI_DEV_G->setupStatus
# define OTG_DEV_SETUP_GOOD_STATUS 0x0001
# define OTG_DEV_SETUP_STATUS_INTR 0x0002
# define OTG_DEV_SETUP_AFTER_OUT 0x8000
# define OTG_DEV_SETUP_ENDP_SHIFT 16
# define OTG_DEV_SETUP_ENDP_MASK 0x000f
/* otg MAC SFRs(USB Device Mode) */
typedef struct apOTG_MAC_DEV_REG
{
struct
{
uint32 info;
}
EP[5];
}
apOTG_MAC_DEV_REG;
#define apOTG_MAC_DEV ((volatile apOTG_MAC_DEV_REG*)(0x41944404))
//* apOTG_MAC_DEV->EP[n].info
# define OTG_DEV_EP0_PKT_SIZE (OTG_CONTROL_PKT_SIZE<<19)
# define OTG_DEV_EP1_PKT_SIZE (OTG_BULK_PKT_SIZE<<19)
# define OTG_DEV_EP3_PKT_SIZE (OTG_BULK_PKT_SIZE<<19)
# define OTG_DEV_EP_CONTROL (OTG_EP_ATTR_CONTROL<<5)
# define OTG_DEV_EP_ISOCHRONOUS (OTG_EP_ATTR_ISOCHRONOUS<<5)
# define OTG_DEV_EP_BULK (OTG_EP_ATTR_BULK<<5)
# define OTG_DEV_EP_INTERRUPT (OTG_EP_ATTR_INTERRUPT<<5)
# define OTG_DEV_EP_DIR_IN (1<<4)
# define OTG_DEV_EP_DIR_OUT (0<<4)
//
//===================================
//===================================
/* otg DIU SFRs(USB Device Mode) */
# define OTG_DEV_DIU_IN_EP0_DMA ((volatile uint32*)(0x41945000))
# define OTG_DEV_DIU_IN_EP1_DMA ((volatile uint32*)(0x41945004))
# define OTG_DEV_DIU_IN_EP2_DMA ((volatile uint32*)(0x41945008))
# define OTG_DEV_DIU_IN_EP3_DMA ((volatile uint32*)(0x4194500C))
# define OTG_DEV_DIU_OUT_EP0_DMA ((volatile uint32*)(0x41945040))
# define OTG_DEV_DIU_OUT_EP1_DMA ((volatile uint32*)(0x41945044))
# define OTG_DEV_DIU_OUT_EP2_DMA ((volatile uint32*)(0x41945048))
# define OTG_DEV_DIU_OUT_EP3_DMA ((volatile uint32*)(0x4194504C))
# define rOTG_DEV_DIU_IN_EP0_DMA *((volatile uint32*)(0x41945000))
# define rOTG_DEV_DIU_IN_EP1_DMA *((volatile uint32*)(0x41945004))
# define rOTG_DEV_DIU_IN_EP2_DMA *((volatile uint32*)(0x41945008))
# define rOTG_DEV_DIU_IN_EP3_DMA *((volatile uint32*)(0x4194500C))
# define rOTG_DEV_DIU_OUT_EP0_DMA *((volatile uint32*)(0x41945040))
# define rOTG_DEV_DIU_OUT_EP1_DMA *((volatile uint32*)(0x41945044))
# define rOTG_DEV_DIU_OUT_EP2_DMA *((volatile uint32*)(0x41945048))
# define rOTG_DEV_DIU_OUT_EP3_DMA *((volatile uint32*)(0x4194504C))
//
//===================================
//===================================
// OTG HOST SIDE
//
/* otg SFRs(USB Host Mode) */
//.........
//
//===================================
//===================================
// USB OTG TYPE DECLARATION
//
#define OTG_DEV_NUM_ENDPTS 5
#define OTG_DEV_ENDPT_MASK 0x1f
#define OTG_DEV_CTRL_ENDP 0
#define OTG_DEV_BULKIN_ENDP 1
#define OTG_DEV_BULKOUT_ENDP 3
#define OTG_CONTROL_PKT_SIZE 8
#define OTG_BULK_PKT_SIZE 64//128//64
#define OTG_EP1_PKT_SIZE OTG_BULK_PKT_SIZE
#define OTG_EP3_PKT_SIZE OTG_BULK_PKT_SIZE
#define OTG_EP_ATTR_CONTROL (0x0)
#define OTG_EP_ATTR_ISOCHRONOUS (0x1)
#define OTG_EP_ATTR_BULK (0x2)
#define OTG_EP_ATTR_INTERRUPT (0x3)
#define OTG_TX_FIFO_SIZE 128//64 //128
#define OTG_RX_FIFO_SIZE 128//64 //128
//*==================================================
//* OTG Subsystem supports almost standard commands?
#define OTG_SUPPORT_CMD_PROCESS
#ifdef OTG_SUPPORT_CMD_PROCESS
#define CLEAR_FEATURE_CMD_BYOTG 1
#define GET_CONFIG_CMD_BYOTG 1
#define GET_DESCRIPTOR_CMD_BYOTG 0
#define GET_INTERFACE_CMD_BYOTG 1
#define GET_STATUS_CMD_BYOTG 1
#define SET_ADDRESS_CMD_BYOTG 1
#define SET_CONFIG_CMD_BYOTG 1
#define SET_FEATURE_CMD_BYOTG 0
#define SET_INTERFACE_CMD_BYOTG 1
#define SET_DESCRIPTOR_CMD_BYOTG 0
#define SYNC_FRAME_CMD_BYOTG 0
#define VENDOR_CLASS_CMD_BYOTG 0
#endif
//*==================================================
//************************
// Endpoint 0
//************************
// Standard bmRequestTyje (Direction)
#define HOST_TO_DEVICE (0x00)
#define DEVICE_TO_HOST (0x80)
// Standard bmRequestType (Type)
#define STANDARD_TYPE (0x00)
#define CLASS_TYPE (0x20)
#define VENDOR_TYPE (0x40)
#define RESERVED_TYPE (0x60)
// Standard bmRequestType (Recipient)
#define DEVICE_RECIPIENT (0)
#define INTERFACE_RECIPIENT (1)
#define ENDPOINT_RECIPIENT (2)
#define OTHER_RECIPIENT (3)
// Feature Selectors
#define DEVICE_REMOTE_WAKEUP (1)
#define EP_STALL (0)
// Standard Request Codes
#define GET_STATUS (0)
#define CLEAR_FEATURE (1)
#define SET_FEATURE (3)
#define SET_ADDRESS (5)
#define GET_DESCRIPTOR (6)
#define SET_DESCRIPTOR (7)
#define GET_CONFIGURATION (8)
#define SET_CONFIGURATION (9)
#define GET_INTERFACE (10)
#define SET_INTERFACE (11)
#define SYNCH_FRAME (12)
// Class-specific Request Codes
#define GET_DEVICE_ID (0)
#define GET_PORT_STATUS (1)
#define SOFT_RESET (2)
// Descriptor Types
#define DEVICE_TYPE (1)
#define CONFIGURATION_TYPE (2)
#define STRING_TYPE (3)
#define INTERFACE_TYPE (4)
#define ENDPOINT_TYPE (5)
//configuration descriptor: bmAttributes
#define CONF_ATTR_DEFAULT (0x80) //Spec 1.0 it was BUSPOWERED bit.
#define CONF_ATTR_REMOTE_WAKEUP (0x20)
#define CONF_ATTR_SELFPOWERED (0x40)
//endpoint descriptor
#define EP_ADDR_IN (0x80)
#define EP_ADDR_OUT (0x00)
//string descriptor
#define LANGID_US_L (0x09)
#define LANGID_US_H (0x04)
typedef struct USB_SETUP_DATA{
uint8 bmRequestType;
uint8 bRequest;
uint8 bValueL;
uint8 bValueH;
uint8 bIndexL;
uint8 bIndexH;
uint8 bLengthL;
uint8 bLengthH;
}USB_SETUP_DATA;
typedef struct USB_DEVICE_DESCRIPTOR{
uint8 bLength;
uint8 bDescriptorType;
uint8 bcdUSBL;
uint8 bcdUSBH;
uint8 bDeviceClass;
uint8 bDeviceSubClass;
uint8 bDeviceProtocol;
uint8 bMaxPacketSize0;
uint8 idVendorL;
uint8 idVendorH;
uint8 idProductL;
uint8 idProductH;
uint8 bcdDeviceL;
uint8 bcdDeviceH;
uint8 iManufacturer;
uint8 iProduct;
uint8 iSerialNumber;
uint8 bNumConfigurations;
}USB_DEVICE_DESCRIPTOR;
typedef struct USB_CONFIGURATION_DESCRIPTOR{
uint8 bLength;
uint8 bDescriptorType;
uint8 wTotalLengthL;
uint8 wTotalLengthH;
uint8 bNumInterfaces;
uint8 bConfigurationValue;
uint8 iConfiguration;
uint8 bmAttributes;
uint8 maxPower;
}USB_CONFIGURATION_DESCRIPTOR;
typedef struct USB_INTERFACE_DESCRIPTOR{
uint8 bLength;
uint8 bDescriptorType;
uint8 bInterfaceNumber;
uint8 bAlternateSetting;
uint8 bNumEndpoints;
uint8 bInterfaceClass;
uint8 bInterfaceSubClass;
uint8 bInterfaceProtocol;
uint8 iInterface;
}USB_INTERFACE_DESCRIPTOR;
typedef struct USB_ENDPOINT_DESCRIPTOR{
uint8 bLength;
uint8 bDescriptorType;
uint8 bEndpointAddress;
uint8 bmAttributes;
uint8 wMaxPacketSizeL;
uint8 wMaxPacketSizeH;
uint8 bInterval;
}USB_ENDPOINT_DESCRIPTOR;
typedef struct USB_CONFIGURATION_SET{
uint8 ConfigurationValue;
}USB_CONFIGURATION_SET;
typedef struct USB_GET_STATUS{
uint8 Device;
uint8 Interface;
uint8 Endpoint0;
uint8 Endpoint1;
uint8 Endpoint3;
}USB_GET_STATUS;
typedef struct USB_INTERFACE_GET{
uint8 AlternateSetting;
}USB_INTERFACE_GET;
/* function prototype declaration */
extern void ISP1301_IIC_Write(uint32 slvAddr,uint32 addr,uint8 data);
extern uint8 ISP1301_IIC_Read(uint8 slvAddr, uint8 regAddr);
extern void ISP1301_Init_DeviceMode(void);
extern void ISP1301_IIC_FullRead(void);
//...
extern void USBOTG_Port_Init(void);
extern void USBOTG_Port_Return(void);
extern void USBOTG_Clock_Init(void);
extern void GPK_Set(void);
//...
extern uint8 *ptrTxFifo0, *ptrTxFifo1;
extern uint32 *ptrRxFifo;
#ifdef __cplusplus
}
#endif
#endif //__USBOTG_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -