USB Host Lite downloaded from NXP web site. Untested! Compiled, dropped on MBED, booted up, and get the console message that it is initializing the stack. I however do not have the ability to connect a USB Memory device to test it.

Dependencies:   mbed

Committer:
mshoemaker
Date:
Wed Jan 13 01:29:30 2010 +0000
Revision:
0:0826fcc5d020

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mshoemaker 0:0826fcc5d020 1 /*
mshoemaker 0:0826fcc5d020 2 **************************************************************************************************************
mshoemaker 0:0826fcc5d020 3 * NXP USB Host Stack
mshoemaker 0:0826fcc5d020 4 *
mshoemaker 0:0826fcc5d020 5 * (c) Copyright 2008, NXP SemiConductors
mshoemaker 0:0826fcc5d020 6 * (c) Copyright 2008, OnChip Technologies LLC
mshoemaker 0:0826fcc5d020 7 * All Rights Reserved
mshoemaker 0:0826fcc5d020 8 *
mshoemaker 0:0826fcc5d020 9 * www.nxp.com
mshoemaker 0:0826fcc5d020 10 * www.onchiptech.com
mshoemaker 0:0826fcc5d020 11 *
mshoemaker 0:0826fcc5d020 12 * File : usbhost_lpc17xx.h
mshoemaker 0:0826fcc5d020 13 * Programmer(s) : Ravikanth.P
mshoemaker 0:0826fcc5d020 14 * Version :
mshoemaker 0:0826fcc5d020 15 *
mshoemaker 0:0826fcc5d020 16 **************************************************************************************************************
mshoemaker 0:0826fcc5d020 17 */
mshoemaker 0:0826fcc5d020 18
mshoemaker 0:0826fcc5d020 19 #ifndef USBHOST_LPC17xx_H
mshoemaker 0:0826fcc5d020 20 #define USBHOST_LPC17xx_H
mshoemaker 0:0826fcc5d020 21
mshoemaker 0:0826fcc5d020 22 /*
mshoemaker 0:0826fcc5d020 23 **************************************************************************************************************
mshoemaker 0:0826fcc5d020 24 * INCLUDE HEADER FILES
mshoemaker 0:0826fcc5d020 25 **************************************************************************************************************
mshoemaker 0:0826fcc5d020 26 */
mshoemaker 0:0826fcc5d020 27
mshoemaker 0:0826fcc5d020 28 #include "usbhost_inc.h"
mshoemaker 0:0826fcc5d020 29
mshoemaker 0:0826fcc5d020 30 /*
mshoemaker 0:0826fcc5d020 31 **************************************************************************************************************
mshoemaker 0:0826fcc5d020 32 * PRINT CONFIGURATION
mshoemaker 0:0826fcc5d020 33 **************************************************************************************************************
mshoemaker 0:0826fcc5d020 34 */
mshoemaker 0:0826fcc5d020 35
mshoemaker 0:0826fcc5d020 36 #define PRINT_ENABLE 1
mshoemaker 0:0826fcc5d020 37
mshoemaker 0:0826fcc5d020 38 #if PRINT_ENABLE
mshoemaker 0:0826fcc5d020 39 #define PRINT_Log(...) UART_Printf(__VA_ARGS__)
mshoemaker 0:0826fcc5d020 40 #define PRINT_Err(rc) UART_Printf("ERROR: In %s at Line %u - rc = %d\n", __FUNCTION__, __LINE__, rc)
mshoemaker 0:0826fcc5d020 41
mshoemaker 0:0826fcc5d020 42 #else
mshoemaker 0:0826fcc5d020 43 #define PRINT_Log(...) do {} while(0)
mshoemaker 0:0826fcc5d020 44 #define PRINT_Err(rc) do {} while(0)
mshoemaker 0:0826fcc5d020 45
mshoemaker 0:0826fcc5d020 46 #endif
mshoemaker 0:0826fcc5d020 47
mshoemaker 0:0826fcc5d020 48 /*
mshoemaker 0:0826fcc5d020 49 **************************************************************************************************************
mshoemaker 0:0826fcc5d020 50 * GENERAL DEFINITIONS
mshoemaker 0:0826fcc5d020 51 **************************************************************************************************************
mshoemaker 0:0826fcc5d020 52 */
mshoemaker 0:0826fcc5d020 53
mshoemaker 0:0826fcc5d020 54 #define DESC_LENGTH(x) x[0]
mshoemaker 0:0826fcc5d020 55 #define DESC_TYPE(x) x[1]
mshoemaker 0:0826fcc5d020 56
mshoemaker 0:0826fcc5d020 57
mshoemaker 0:0826fcc5d020 58 #define HOST_GET_DESCRIPTOR(descType, descIndex, data, length) \
mshoemaker 0:0826fcc5d020 59 Host_CtrlRecv(USB_DEVICE_TO_HOST | USB_RECIPIENT_DEVICE, GET_DESCRIPTOR, \
mshoemaker 0:0826fcc5d020 60 (descType << 8)|(descIndex), 0, length, data)
mshoemaker 0:0826fcc5d020 61
mshoemaker 0:0826fcc5d020 62 #define HOST_SET_ADDRESS(new_addr) \
mshoemaker 0:0826fcc5d020 63 Host_CtrlSend(USB_HOST_TO_DEVICE | USB_RECIPIENT_DEVICE, SET_ADDRESS, \
mshoemaker 0:0826fcc5d020 64 new_addr, 0, 0, NULL)
mshoemaker 0:0826fcc5d020 65
mshoemaker 0:0826fcc5d020 66 #define USBH_SET_CONFIGURATION(configNum) \
mshoemaker 0:0826fcc5d020 67 Host_CtrlSend(USB_HOST_TO_DEVICE | USB_RECIPIENT_DEVICE, SET_CONFIGURATION, \
mshoemaker 0:0826fcc5d020 68 configNum, 0, 0, NULL)
mshoemaker 0:0826fcc5d020 69
mshoemaker 0:0826fcc5d020 70 #define USBH_SET_INTERFACE(ifNum, altNum) \
mshoemaker 0:0826fcc5d020 71 Host_CtrlSend(USB_HOST_TO_DEVICE | USB_RECIPIENT_INTERFACE, SET_INTERFACE, \
mshoemaker 0:0826fcc5d020 72 altNum, ifNum, 0, NULL)
mshoemaker 0:0826fcc5d020 73
mshoemaker 0:0826fcc5d020 74 /*
mshoemaker 0:0826fcc5d020 75 **************************************************************************************************************
mshoemaker 0:0826fcc5d020 76 * OHCI OPERATIONAL REGISTER FIELD DEFINITIONS
mshoemaker 0:0826fcc5d020 77 **************************************************************************************************************
mshoemaker 0:0826fcc5d020 78 */
mshoemaker 0:0826fcc5d020 79
mshoemaker 0:0826fcc5d020 80 /* ------------------ HcControl Register --------------------- */
mshoemaker 0:0826fcc5d020 81 #define OR_CONTROL_CLE 0x00000010
mshoemaker 0:0826fcc5d020 82 #define OR_CONTROL_BLE 0x00000020
mshoemaker 0:0826fcc5d020 83 #define OR_CONTROL_HCFS 0x000000C0
mshoemaker 0:0826fcc5d020 84 #define OR_CONTROL_HC_OPER 0x00000080
mshoemaker 0:0826fcc5d020 85 /* ----------------- HcCommandStatus Register ----------------- */
mshoemaker 0:0826fcc5d020 86 #define OR_CMD_STATUS_HCR 0x00000001
mshoemaker 0:0826fcc5d020 87 #define OR_CMD_STATUS_CLF 0x00000002
mshoemaker 0:0826fcc5d020 88 #define OR_CMD_STATUS_BLF 0x00000004
mshoemaker 0:0826fcc5d020 89 /* --------------- HcInterruptStatus Register ----------------- */
mshoemaker 0:0826fcc5d020 90 #define OR_INTR_STATUS_WDH 0x00000002
mshoemaker 0:0826fcc5d020 91 #define OR_INTR_STATUS_RHSC 0x00000040
mshoemaker 0:0826fcc5d020 92 /* --------------- HcInterruptEnable Register ----------------- */
mshoemaker 0:0826fcc5d020 93 #define OR_INTR_ENABLE_WDH 0x00000002
mshoemaker 0:0826fcc5d020 94 #define OR_INTR_ENABLE_RHSC 0x00000040
mshoemaker 0:0826fcc5d020 95 #define OR_INTR_ENABLE_MIE 0x80000000
mshoemaker 0:0826fcc5d020 96 /* ---------------- HcRhDescriptorA Register ------------------ */
mshoemaker 0:0826fcc5d020 97 #define OR_RH_STATUS_LPSC 0x00010000
mshoemaker 0:0826fcc5d020 98 #define OR_RH_STATUS_DRWE 0x00008000
mshoemaker 0:0826fcc5d020 99 /* -------------- HcRhPortStatus[1:NDP] Register -------------- */
mshoemaker 0:0826fcc5d020 100 #define OR_RH_PORT_CCS 0x00000001
mshoemaker 0:0826fcc5d020 101 #define OR_RH_PORT_PRS 0x00000010
mshoemaker 0:0826fcc5d020 102 #define OR_RH_PORT_CSC 0x00010000
mshoemaker 0:0826fcc5d020 103 #define OR_RH_PORT_PRSC 0x00100000
mshoemaker 0:0826fcc5d020 104
mshoemaker 0:0826fcc5d020 105
mshoemaker 0:0826fcc5d020 106 /*
mshoemaker 0:0826fcc5d020 107 **************************************************************************************************************
mshoemaker 0:0826fcc5d020 108 * FRAME INTERVAL
mshoemaker 0:0826fcc5d020 109 **************************************************************************************************************
mshoemaker 0:0826fcc5d020 110 */
mshoemaker 0:0826fcc5d020 111
mshoemaker 0:0826fcc5d020 112 #define FI 0x2EDF /* 12000 bits per frame (-1) */
mshoemaker 0:0826fcc5d020 113 #define DEFAULT_FMINTERVAL ((((6 * (FI - 210)) / 7) << 16) | FI)
mshoemaker 0:0826fcc5d020 114
mshoemaker 0:0826fcc5d020 115 /*
mshoemaker 0:0826fcc5d020 116 **************************************************************************************************************
mshoemaker 0:0826fcc5d020 117 * TRANSFER DESCRIPTOR CONTROL FIELDS
mshoemaker 0:0826fcc5d020 118 **************************************************************************************************************
mshoemaker 0:0826fcc5d020 119 */
mshoemaker 0:0826fcc5d020 120
mshoemaker 0:0826fcc5d020 121 #define TD_ROUNDING (USB_INT32U) (0x00040000) /* Buffer Rounding */
mshoemaker 0:0826fcc5d020 122 #define TD_SETUP (USB_INT32U)(0) /* Direction of Setup Packet */
mshoemaker 0:0826fcc5d020 123 #define TD_IN (USB_INT32U)(0x00100000) /* Direction In */
mshoemaker 0:0826fcc5d020 124 #define TD_OUT (USB_INT32U)(0x00080000) /* Direction Out */
mshoemaker 0:0826fcc5d020 125 #define TD_DELAY_INT(x) (USB_INT32U)((x) << 21) /* Delay Interrupt */
mshoemaker 0:0826fcc5d020 126 #define TD_TOGGLE_0 (USB_INT32U)(0x02000000) /* Toggle 0 */
mshoemaker 0:0826fcc5d020 127 #define TD_TOGGLE_1 (USB_INT32U)(0x03000000) /* Toggle 1 */
mshoemaker 0:0826fcc5d020 128 #define TD_CC (USB_INT32U)(0xF0000000) /* Completion Code */
mshoemaker 0:0826fcc5d020 129
mshoemaker 0:0826fcc5d020 130 /*
mshoemaker 0:0826fcc5d020 131 **************************************************************************************************************
mshoemaker 0:0826fcc5d020 132 * USB STANDARD REQUEST DEFINITIONS
mshoemaker 0:0826fcc5d020 133 **************************************************************************************************************
mshoemaker 0:0826fcc5d020 134 */
mshoemaker 0:0826fcc5d020 135
mshoemaker 0:0826fcc5d020 136 #define USB_DESCRIPTOR_TYPE_DEVICE 1
mshoemaker 0:0826fcc5d020 137 #define USB_DESCRIPTOR_TYPE_CONFIGURATION 2
mshoemaker 0:0826fcc5d020 138 #define USB_DESCRIPTOR_TYPE_INTERFACE 4
mshoemaker 0:0826fcc5d020 139 #define USB_DESCRIPTOR_TYPE_ENDPOINT 5
mshoemaker 0:0826fcc5d020 140 /* ----------- Control RequestType Fields ----------- */
mshoemaker 0:0826fcc5d020 141 #define USB_DEVICE_TO_HOST 0x80
mshoemaker 0:0826fcc5d020 142 #define USB_HOST_TO_DEVICE 0x00
mshoemaker 0:0826fcc5d020 143 #define USB_REQUEST_TYPE_CLASS 0x20
mshoemaker 0:0826fcc5d020 144 #define USB_RECIPIENT_DEVICE 0x00
mshoemaker 0:0826fcc5d020 145 #define USB_RECIPIENT_INTERFACE 0x01
mshoemaker 0:0826fcc5d020 146 /* -------------- USB Standard Requests -------------- */
mshoemaker 0:0826fcc5d020 147 #define SET_ADDRESS 5
mshoemaker 0:0826fcc5d020 148 #define GET_DESCRIPTOR 6
mshoemaker 0:0826fcc5d020 149 #define SET_CONFIGURATION 9
mshoemaker 0:0826fcc5d020 150 #define SET_INTERFACE 11
mshoemaker 0:0826fcc5d020 151
mshoemaker 0:0826fcc5d020 152 /*
mshoemaker 0:0826fcc5d020 153 **************************************************************************************************************
mshoemaker 0:0826fcc5d020 154 * TYPE DEFINITIONS
mshoemaker 0:0826fcc5d020 155 **************************************************************************************************************
mshoemaker 0:0826fcc5d020 156 */
mshoemaker 0:0826fcc5d020 157
mshoemaker 0:0826fcc5d020 158 typedef struct hcEd { /* ----------- HostController EndPoint Descriptor ------------- */
mshoemaker 0:0826fcc5d020 159 volatile USB_INT32U Control; /* Endpoint descriptor control */
mshoemaker 0:0826fcc5d020 160 volatile USB_INT32U TailTd; /* Physical address of tail in Transfer descriptor list */
mshoemaker 0:0826fcc5d020 161 volatile USB_INT32U HeadTd; /* Physcial address of head in Transfer descriptor list */
mshoemaker 0:0826fcc5d020 162 volatile USB_INT32U Next; /* Physical address of next Endpoint descriptor */
mshoemaker 0:0826fcc5d020 163 } HCED;
mshoemaker 0:0826fcc5d020 164
mshoemaker 0:0826fcc5d020 165 typedef struct hcTd { /* ------------ HostController Transfer Descriptor ------------ */
mshoemaker 0:0826fcc5d020 166 volatile USB_INT32U Control; /* Transfer descriptor control */
mshoemaker 0:0826fcc5d020 167 volatile USB_INT32U CurrBufPtr; /* Physical address of current buffer pointer */
mshoemaker 0:0826fcc5d020 168 volatile USB_INT32U Next; /* Physical pointer to next Transfer Descriptor */
mshoemaker 0:0826fcc5d020 169 volatile USB_INT32U BufEnd; /* Physical address of end of buffer */
mshoemaker 0:0826fcc5d020 170 } HCTD;
mshoemaker 0:0826fcc5d020 171
mshoemaker 0:0826fcc5d020 172 typedef struct hcca { /* ----------- Host Controller Communication Area ------------ */
mshoemaker 0:0826fcc5d020 173 volatile USB_INT32U IntTable[32]; /* Interrupt Table */
mshoemaker 0:0826fcc5d020 174 volatile USB_INT32U FrameNumber; /* Frame Number */
mshoemaker 0:0826fcc5d020 175 volatile USB_INT32U DoneHead; /* Done Head */
mshoemaker 0:0826fcc5d020 176 volatile USB_INT08U Reserved[116]; /* Reserved for future use */
mshoemaker 0:0826fcc5d020 177 volatile USB_INT08U Unknown[4]; /* Unused */
mshoemaker 0:0826fcc5d020 178 } HCCA;
mshoemaker 0:0826fcc5d020 179
mshoemaker 0:0826fcc5d020 180 /*
mshoemaker 0:0826fcc5d020 181 **************************************************************************************************************
mshoemaker 0:0826fcc5d020 182 * EXTERN DECLARATIONS
mshoemaker 0:0826fcc5d020 183 **************************************************************************************************************
mshoemaker 0:0826fcc5d020 184 */
mshoemaker 0:0826fcc5d020 185
mshoemaker 0:0826fcc5d020 186 extern volatile HCED *EDBulkIn; /* BulkIn endpoint descriptor structure */
mshoemaker 0:0826fcc5d020 187 extern volatile HCED *EDBulkOut; /* BulkOut endpoint descriptor structure */
mshoemaker 0:0826fcc5d020 188 extern volatile HCTD *TDHead; /* Head transfer descriptor structure */
mshoemaker 0:0826fcc5d020 189 extern volatile HCTD *TDTail; /* Tail transfer descriptor structure */
mshoemaker 0:0826fcc5d020 190 extern volatile USB_INT08U *TDBuffer; /* Current Buffer Pointer of transfer descriptor */
mshoemaker 0:0826fcc5d020 191 extern volatile USB_INT08U *FATBuffer; /* Buffer used by FAT file system */
mshoemaker 0:0826fcc5d020 192 extern volatile USB_INT08U *UserBuffer; /* Buffer used by application */
mshoemaker 0:0826fcc5d020 193
mshoemaker 0:0826fcc5d020 194 /*
mshoemaker 0:0826fcc5d020 195 **************************************************************************************************************
mshoemaker 0:0826fcc5d020 196 * FUNCTION PROTOTYPES
mshoemaker 0:0826fcc5d020 197 **************************************************************************************************************
mshoemaker 0:0826fcc5d020 198 */
mshoemaker 0:0826fcc5d020 199
mshoemaker 0:0826fcc5d020 200 void Host_Init (void);
mshoemaker 0:0826fcc5d020 201
mshoemaker 0:0826fcc5d020 202 void USB_IRQHandler(void);
mshoemaker 0:0826fcc5d020 203
mshoemaker 0:0826fcc5d020 204 USB_INT32S Host_EnumDev (void);
mshoemaker 0:0826fcc5d020 205
mshoemaker 0:0826fcc5d020 206 USB_INT32S Host_ProcessTD(volatile HCED *ed,
mshoemaker 0:0826fcc5d020 207 volatile USB_INT32U token,
mshoemaker 0:0826fcc5d020 208 volatile USB_INT08U *buffer,
mshoemaker 0:0826fcc5d020 209 USB_INT32U buffer_len);
mshoemaker 0:0826fcc5d020 210
mshoemaker 0:0826fcc5d020 211 void Host_DelayUS ( USB_INT32U delay);
mshoemaker 0:0826fcc5d020 212 void Host_DelayMS ( USB_INT32U delay);
mshoemaker 0:0826fcc5d020 213
mshoemaker 0:0826fcc5d020 214
mshoemaker 0:0826fcc5d020 215 void Host_TDInit (volatile HCTD *td);
mshoemaker 0:0826fcc5d020 216 void Host_EDInit (volatile HCED *ed);
mshoemaker 0:0826fcc5d020 217 void Host_HCCAInit (volatile HCCA *hcca);
mshoemaker 0:0826fcc5d020 218
mshoemaker 0:0826fcc5d020 219 USB_INT32S Host_CtrlRecv ( USB_INT08U bm_request_type,
mshoemaker 0:0826fcc5d020 220 USB_INT08U b_request,
mshoemaker 0:0826fcc5d020 221 USB_INT16U w_value,
mshoemaker 0:0826fcc5d020 222 USB_INT16U w_index,
mshoemaker 0:0826fcc5d020 223 USB_INT16U w_length,
mshoemaker 0:0826fcc5d020 224 volatile USB_INT08U *buffer);
mshoemaker 0:0826fcc5d020 225
mshoemaker 0:0826fcc5d020 226 USB_INT32S Host_CtrlSend ( USB_INT08U bm_request_type,
mshoemaker 0:0826fcc5d020 227 USB_INT08U b_request,
mshoemaker 0:0826fcc5d020 228 USB_INT16U w_value,
mshoemaker 0:0826fcc5d020 229 USB_INT16U w_index,
mshoemaker 0:0826fcc5d020 230 USB_INT16U w_length,
mshoemaker 0:0826fcc5d020 231 volatile USB_INT08U *buffer);
mshoemaker 0:0826fcc5d020 232
mshoemaker 0:0826fcc5d020 233 void Host_FillSetup( USB_INT08U bm_request_type,
mshoemaker 0:0826fcc5d020 234 USB_INT08U b_request,
mshoemaker 0:0826fcc5d020 235 USB_INT16U w_value,
mshoemaker 0:0826fcc5d020 236 USB_INT16U w_index,
mshoemaker 0:0826fcc5d020 237 USB_INT16U w_length);
mshoemaker 0:0826fcc5d020 238
mshoemaker 0:0826fcc5d020 239
mshoemaker 0:0826fcc5d020 240 void Host_WDHWait (void);
mshoemaker 0:0826fcc5d020 241
mshoemaker 0:0826fcc5d020 242
mshoemaker 0:0826fcc5d020 243 USB_INT32U ReadLE32U (volatile USB_INT08U *pmem);
mshoemaker 0:0826fcc5d020 244 void WriteLE32U (volatile USB_INT08U *pmem,
mshoemaker 0:0826fcc5d020 245 USB_INT32U val);
mshoemaker 0:0826fcc5d020 246 USB_INT16U ReadLE16U (volatile USB_INT08U *pmem);
mshoemaker 0:0826fcc5d020 247 void WriteLE16U (volatile USB_INT08U *pmem,
mshoemaker 0:0826fcc5d020 248 USB_INT16U val);
mshoemaker 0:0826fcc5d020 249 USB_INT32U ReadBE32U (volatile USB_INT08U *pmem);
mshoemaker 0:0826fcc5d020 250 void WriteBE32U (volatile USB_INT08U *pmem,
mshoemaker 0:0826fcc5d020 251 USB_INT32U val);
mshoemaker 0:0826fcc5d020 252 USB_INT16U ReadBE16U (volatile USB_INT08U *pmem);
mshoemaker 0:0826fcc5d020 253 void WriteBE16U (volatile USB_INT08U *pmem,
mshoemaker 0:0826fcc5d020 254 USB_INT16U val);
mshoemaker 0:0826fcc5d020 255
mshoemaker 0:0826fcc5d020 256 #endif