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

📄 usb_otg.h

📁 三星 S3C2460 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 + -