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