Compact Flash I/O test

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers usbhost_lpc17xx.h Source File

usbhost_lpc17xx.h

00001 /*
00002 **************************************************************************************************************
00003 *                                                 NXP USB Host Stack
00004 *
00005 *                                     (c) Copyright 2008, NXP SemiConductors
00006 *                                     (c) Copyright 2008, OnChip  Technologies LLC
00007 *                                                 All Rights Reserved
00008 *
00009 *                                                  www.nxp.com
00010 *                                               www.onchiptech.com
00011 *
00012 * File           : usbhost_lpc17xx.h
00013 * Programmer(s)  : Ravikanth.P
00014 * Version        :
00015 *
00016 **************************************************************************************************************
00017 */
00018 
00019 #include "Terminal.h"
00020 
00021 #ifndef USBHOST_LPC17xx_H
00022 #define USBHOST_LPC17xx_H
00023 
00024 /*
00025 **************************************************************************************************************
00026 *                                       INCLUDE HEADER FILES
00027 **************************************************************************************************************
00028 */
00029 
00030 #include    "usbhost_inc.h"
00031 
00032 /*
00033 **************************************************************************************************************
00034 *                                        PRINT CONFIGURATION
00035 **************************************************************************************************************
00036 */
00037 
00038 #define  PRINT_ENABLE         1
00039 
00040 #if PRINT_ENABLE
00041 #define  PRINT_Log(...)       pc.printf(__VA_ARGS__);pc.printf("\r\n")
00042 #define  PRINT_Err(rc)        pc.printf("ERROR: In %s at Line %u - rc = %d\r\n", __FUNCTION__, __LINE__, rc)
00043 
00044 #else 
00045 #define  PRINT_Log(...)       do {} while(0)
00046 #define  PRINT_Err(rc)        do {} while(0)
00047 
00048 #endif
00049 
00050 /*
00051 **************************************************************************************************************
00052 *                                        GENERAL DEFINITIONS
00053 **************************************************************************************************************
00054 */
00055 
00056 #define  DESC_LENGTH(x)  x[0]
00057 #define  DESC_TYPE(x)    x[1]
00058 
00059 
00060 #define  HOST_GET_DESCRIPTOR(descType, descIndex, data, length)                      \
00061          Host_CtrlRecv(USB_DEVICE_TO_HOST | USB_RECIPIENT_DEVICE, GET_DESCRIPTOR,    \
00062          (descType << 8)|(descIndex), 0, length, data)
00063 
00064 #define  HOST_SET_ADDRESS(new_addr)                                                  \
00065          Host_CtrlSend(USB_HOST_TO_DEVICE | USB_RECIPIENT_DEVICE, SET_ADDRESS,       \
00066          new_addr, 0, 0, NULL)
00067 
00068 #define  USBH_SET_CONFIGURATION(configNum)                                           \
00069          Host_CtrlSend(USB_HOST_TO_DEVICE | USB_RECIPIENT_DEVICE, SET_CONFIGURATION, \
00070          configNum, 0, 0, NULL)
00071 
00072 #define  USBH_SET_INTERFACE(ifNum, altNum)                                           \
00073          Host_CtrlSend(USB_HOST_TO_DEVICE | USB_RECIPIENT_INTERFACE, SET_INTERFACE,  \
00074          altNum, ifNum, 0, NULL)
00075 
00076 /*
00077 **************************************************************************************************************
00078 *                                  OHCI OPERATIONAL REGISTER FIELD DEFINITIONS
00079 **************************************************************************************************************
00080 */
00081 
00082                                             /* ------------------ HcControl Register ---------------------  */
00083 #define  OR_CONTROL_CLE                 0x00000010
00084 #define  OR_CONTROL_BLE                 0x00000020
00085 #define  OR_CONTROL_HCFS                0x000000C0
00086 #define  OR_CONTROL_HC_OPER             0x00000080
00087                                             /* ----------------- HcCommandStatus Register ----------------- */
00088 #define  OR_CMD_STATUS_HCR              0x00000001
00089 #define  OR_CMD_STATUS_CLF              0x00000002
00090 #define  OR_CMD_STATUS_BLF              0x00000004
00091                                             /* --------------- HcInterruptStatus Register ----------------- */
00092 #define  OR_INTR_STATUS_WDH             0x00000002
00093 #define  OR_INTR_STATUS_RHSC            0x00000040
00094                                             /* --------------- HcInterruptEnable Register ----------------- */
00095 #define  OR_INTR_ENABLE_WDH             0x00000002
00096 #define  OR_INTR_ENABLE_RHSC            0x00000040
00097 #define  OR_INTR_ENABLE_MIE             0x80000000
00098                                             /* ---------------- HcRhDescriptorA Register ------------------ */
00099 #define  OR_RH_STATUS_LPSC              0x00010000
00100 #define  OR_RH_STATUS_DRWE              0x00008000
00101                                             /* -------------- HcRhPortStatus[1:NDP] Register -------------- */
00102 #define  OR_RH_PORT_CCS                 0x00000001
00103 #define  OR_RH_PORT_PRS                 0x00000010
00104 #define  OR_RH_PORT_CSC                 0x00010000
00105 #define  OR_RH_PORT_PRSC                0x00100000
00106 
00107 
00108 /*
00109 **************************************************************************************************************
00110 *                                               FRAME INTERVAL
00111 **************************************************************************************************************
00112 */
00113 
00114 #define  FI                     0x2EDF           /* 12000 bits per frame (-1)                               */
00115 #define  DEFAULT_FMINTERVAL     ((((6 * (FI - 210)) / 7) << 16) | FI)
00116 
00117 /*
00118 **************************************************************************************************************
00119 *                                       TRANSFER DESCRIPTOR CONTROL FIELDS
00120 **************************************************************************************************************
00121 */
00122 
00123 #define  TD_ROUNDING        (USB_INT32U) (0x00040000)        /* Buffer Rounding                             */
00124 #define  TD_SETUP           (USB_INT32U)(0)                  /* Direction of Setup Packet                   */
00125 #define  TD_IN              (USB_INT32U)(0x00100000)         /* Direction In                                */
00126 #define  TD_OUT             (USB_INT32U)(0x00080000)         /* Direction Out                               */
00127 #define  TD_DELAY_INT(x)    (USB_INT32U)((x) << 21)          /* Delay Interrupt                             */
00128 #define  TD_TOGGLE_0        (USB_INT32U)(0x02000000)         /* Toggle 0                                    */
00129 #define  TD_TOGGLE_1        (USB_INT32U)(0x03000000)         /* Toggle 1                                    */
00130 #define  TD_CC              (USB_INT32U)(0xF0000000)         /* Completion Code                             */
00131 
00132 /*
00133 **************************************************************************************************************
00134 *                                       USB STANDARD REQUEST DEFINITIONS
00135 **************************************************************************************************************
00136 */
00137 
00138 #define  USB_DESCRIPTOR_TYPE_DEVICE                     1
00139 #define  USB_DESCRIPTOR_TYPE_CONFIGURATION              2
00140 #define  USB_DESCRIPTOR_TYPE_INTERFACE                  4
00141 #define  USB_DESCRIPTOR_TYPE_ENDPOINT                   5
00142                                                     /*  ----------- Control RequestType Fields  ----------- */
00143 #define  USB_DEVICE_TO_HOST         0x80
00144 #define  USB_HOST_TO_DEVICE         0x00
00145 #define  USB_REQUEST_TYPE_CLASS     0x20
00146 #define  USB_RECIPIENT_DEVICE       0x00
00147 #define  USB_RECIPIENT_INTERFACE    0x01
00148                                                     /* -------------- USB Standard Requests  -------------- */
00149 #define  SET_ADDRESS                 5
00150 #define  GET_DESCRIPTOR              6
00151 #define  SET_CONFIGURATION           9
00152 #define  SET_INTERFACE              11
00153 
00154 /*
00155 **************************************************************************************************************
00156 *                                       TYPE DEFINITIONS
00157 **************************************************************************************************************
00158 */
00159 
00160 typedef struct hcEd {                       /* ----------- HostController EndPoint Descriptor ------------- */
00161     volatile  USB_INT32U  Control;              /* Endpoint descriptor control                              */
00162     volatile  USB_INT32U  TailTd;               /* Physical address of tail in Transfer descriptor list     */
00163     volatile  USB_INT32U  HeadTd;               /* Physcial address of head in Transfer descriptor list     */
00164     volatile  USB_INT32U  Next;                 /* Physical address of next Endpoint descriptor             */
00165 } HCED;
00166 
00167 typedef struct hcTd {                       /* ------------ HostController Transfer Descriptor ------------ */
00168     volatile  USB_INT32U  Control;              /* Transfer descriptor control                              */
00169     volatile  USB_INT32U  CurrBufPtr;           /* Physical address of current buffer pointer               */
00170     volatile  USB_INT32U  Next;                 /* Physical pointer to next Transfer Descriptor             */
00171     volatile  USB_INT32U  BufEnd;               /* Physical address of end of buffer                        */
00172 } HCTD;
00173 
00174 typedef struct hcca {                       /* ----------- Host Controller Communication Area ------------  */
00175     volatile  USB_INT32U  IntTable[32];         /* Interrupt Table                                          */
00176     volatile  USB_INT32U  FrameNumber;          /* Frame Number                                             */
00177     volatile  USB_INT32U  DoneHead;             /* Done Head                                                */
00178     volatile  USB_INT08U  Reserved[116];        /* Reserved for future use                                  */
00179     volatile  USB_INT08U  Unknown[4];           /* Unused                                                   */
00180 } HCCA;
00181 
00182 /*
00183 **************************************************************************************************************
00184 *                                     EXTERN DECLARATIONS
00185 **************************************************************************************************************
00186 */
00187 
00188 extern  volatile  HCED        *EDBulkIn;        /* BulkIn endpoint descriptor  structure                    */
00189 extern  volatile  HCED        *EDBulkOut;       /* BulkOut endpoint descriptor structure                    */
00190 extern  volatile  HCTD        *TDHead;          /* Head transfer descriptor structure                       */
00191 extern  volatile  HCTD        *TDTail;          /* Tail transfer descriptor structure                       */
00192 extern  volatile  USB_INT08U  *TDBuffer;        /* Current Buffer Pointer of transfer descriptor            */
00193 extern volatile  USB_INT32U   HOST_RhscIntr;
00194 
00195 extern volatile int gUSBConnected;
00196 
00197 /*
00198 **************************************************************************************************************
00199 *                                       FUNCTION PROTOTYPES
00200 **************************************************************************************************************
00201 */
00202 
00203 void        Host_Init     (void);
00204 
00205 extern "C" void USB_IRQHandler(void)  __irq;
00206 
00207 USB_INT32S  Host_EnumDev  (void);
00208 
00209 USB_INT32S  Host_ProcessTD(volatile  HCED       *ed,
00210                            volatile  USB_INT32U  token,
00211                            volatile  USB_INT08U *buffer,
00212                                      USB_INT32U  buffer_len);
00213 
00214 void        Host_DelayUS  (          USB_INT32U    delay);
00215 void        Host_DelayMS  (          USB_INT32U    delay);
00216 
00217 
00218 void        Host_TDInit   (volatile  HCTD *td);
00219 void        Host_EDInit   (volatile  HCED *ed);
00220 void        Host_HCCAInit (volatile  HCCA  *hcca);
00221 
00222 USB_INT32S  Host_CtrlRecv (          USB_INT08U   bm_request_type,
00223                                      USB_INT08U   b_request,
00224                                      USB_INT16U   w_value,
00225                                      USB_INT16U   w_index,
00226                                      USB_INT16U   w_length,
00227                            volatile  USB_INT08U  *buffer);
00228 
00229 USB_INT32S  Host_CtrlSend (          USB_INT08U   bm_request_type,
00230                                      USB_INT08U   b_request,
00231                                      USB_INT16U   w_value,
00232                                      USB_INT16U   w_index,
00233                                      USB_INT16U   w_length,
00234                            volatile  USB_INT08U  *buffer);
00235 
00236 void        Host_FillSetup(          USB_INT08U   bm_request_type,
00237                                      USB_INT08U   b_request,
00238                                      USB_INT16U   w_value,
00239                                      USB_INT16U   w_index,
00240                                      USB_INT16U   w_length);
00241 
00242 
00243 void        Host_WDHWait  (void);
00244 
00245 
00246 USB_INT32U  ReadLE32U     (volatile  USB_INT08U  *pmem);
00247 void        WriteLE32U    (volatile  USB_INT08U  *pmem,
00248                                      USB_INT32U   val);
00249 USB_INT16U  ReadLE16U     (volatile  USB_INT08U  *pmem);
00250 void        WriteLE16U    (volatile  USB_INT08U  *pmem,
00251                                      USB_INT16U   val);
00252 USB_INT32U  ReadBE32U     (volatile  USB_INT08U  *pmem);
00253 void        WriteBE32U    (volatile  USB_INT08U  *pmem,
00254                                      USB_INT32U   val);
00255 USB_INT16U  ReadBE16U     (volatile  USB_INT08U  *pmem);
00256 void        WriteBE16U    (volatile  USB_INT08U  *pmem,
00257                                      USB_INT16U   val);
00258 
00259 #endif