Claes Ekengren / Mbed 2 deprecated Measurement_system

Dependencies:   mbed

Committer:
CE
Date:
Thu Jan 06 19:01:44 2011 +0000
Revision:
0:0732b16d9a92
R1A

Who changed what in which revision?

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