65 #ifndef __ENDPOINT_LPC18XX_H__
66 #define __ENDPOINT_LPC18XX_H__
68 #include "../EndpointCommon.h"
71 #if defined(__cplusplus)
76 #if !defined(__INCLUDE_FROM_USB_DRIVER)
77 #error Do not include this file directly. Include lpcroot/libraries/LPCUSBlib/Drivers/USB/USB.h instead.
81 #if !defined(__DOXYGEN__)
83 #define ENDPOINT_DETAILS_MAXEP0 6
84 #define ENDPOINT_DETAILS_MAXEP1 4
86 #if defined(USB_DEVICE_ROM_DRIVER)
98 const unsigned p_spifi;
99 const unsigned p_usbd;
104 #define ROM_FUNCTION_TABLE_PTR_ADDR (0x10400104UL)
105 #define ROM_USBD_PTR (((ROM_FUNCTION_TABLE *) (ROM_FUNCTION_TABLE_PTR_ADDR))->p_usbd)
107 #define ROMDRIVER_USB0_BASE LPC_USB0_BASE
108 #define ROMDRIVER_USB1_BASE LPC_USB1_BASE
109 #define ROMDRIVER_MEM_SIZE 0x1000
110 extern uint8_t usb_RomDriver_buffer[ROMDRIVER_MEM_SIZE];
112 #define ROMDRIVER_MSC_MEM_SIZE 0x1000
113 extern uint8_t usb_RomDriver_MSC_buffer[ROMDRIVER_MSC_MEM_SIZE];
115 #define ROMDRIVER_CDC_MEM_SIZE 0x800
116 extern uint8_t usb_RomDriver_CDC_buffer[ROMDRIVER_CDC_MEM_SIZE];
117 #define ROMDRIVER_CDC_DATA_BUFFER_SIZE 640
118 #if (USB_FORCED_FULLSPEED)
119 #define CDC_MAX_BULK_EP_SIZE 64
121 #define CDC_MAX_BULK_EP_SIZE 512
123 extern uint8_t UsbdCdc_EPIN_buffer[CDC_MAX_BULK_EP_SIZE];
124 extern uint8_t UsbdCdc_EPOUT_buffer[CDC_MAX_BULK_EP_SIZE];
126 #define ROMDRIVER_HID_MEM_SIZE 0x800
127 extern uint8_t usb_RomDriver_HID_buffer[ROMDRIVER_HID_MEM_SIZE];
135 #define USBCMD_D_RunStop (1 << 0)
136 #define USBCMD_D_Reset (1 << 1)
137 #define USBCMD_D_SetupTripWire (1 << 13)
138 #define USBCMD_D_AddTDTripWire (1 << 14)
139 #define USBCMD_D_IntThreshold (0xff << 16)
142 #define USBSTS_D_UsbInt 0x00000001UL
143 #define USBSTS_D_UsbErrorInt 0x00000002UL
144 #define USBSTS_D_PortChangeDetect 0x00000004UL
145 #define USBSTS_D_ResetReceived (1 << 6)
146 #define USBSTS_D_SofReceived (1 << 7)
147 #define USBSTS_D_SuspendInt (1 << 8)
148 #define USBSTS_D_NAK (1 << 16)
151 #define USBINTR_D_UsbIntEnable (1 << 0)
152 #define USBINTR_D_UsbErrorIntEnable (1 << 1)
153 #define USBINTR_D_PortChangeIntEnable (1 << 2)
154 #define USBINTR_D_UsbResetEnable (1 << 6)
155 #define USBINTR_D_SofReceivedEnable (1 << 7)
156 #define USBINTR_D_SuspendEnable (1 << 8)
157 #define USBINTR_D_NAKEnable (1 << 16)
160 #define DEVICEADDR_AddressAdvance (1 << 24)
161 #define DEVICEADDR_DeviceAddr (0xff << 25)
164 #define ENDPTNAK_RX (0x3f)
165 #define ENDPTNAK_TX (0x3f << 16)
168 #define ENDPTNAKEN_RX (0x3f)
169 #define ENDPTNAKEN_TX (0x3f << 16)
172 #define PORTSC_D_CurrentConnectStatus 0x00000001UL
173 #define PORTSC_D_ForcePortResume 0x00000040UL
174 #define PORTSC_D_PortSuspend 0x00000080UL
175 #define PORTSC_D_PortReset 0x00000100UL
176 #define PORTSC_D_HighSpeedStatus 0x00000200UL
177 #define PORTSC_D_PortIndicatorControl 0x0000C000UL
178 #define PORTSC_D_PortTestControl 0x000F0000UL
179 #define PORTSC_D_PhyClockDisable 0x00800000UL
180 #define PORTSC_D_PortForceFullspeedConnect 0x01000000UL
181 #define PORTSC_D_PortSpeed 0x0C000000UL
187 #define ENDPTPRIME_RX (0x3f)
188 #define ENDPTPRIME_TX (0x3f << 16)
191 #define ENDPTFLUSH_RX (0x3f)
192 #define ENDPTFLUSH_TX (0x3f << 16)
195 #define ENDPTSTAT_RX (0x3f)
196 #define ENDPTSTAT_TX (0x3f << 16)
199 #define ENDPTCOMPLETE_RX (0x3f)
200 #define ENDPTCOMPLETE_TX (0x3f << 16)
203 #define ENDPTCTRL_RxStall (1)
204 #define ENDPTCTRL_RxType (3 << 2)
205 #define ENDPTCTRL_RxToggleInhibit (1 << 5)
206 #define ENDPTCTRL_RxToggleReset (1 << 6)
207 #define ENDPTCTRL_RxEnable (1 << 7)
209 #define ENDPTCTRL_TxStall (1 << 16)
210 #define ENDPTCTRL_TxType (3 << 18)
211 #define ENDPTCTRL_TxToggleInhibit (1 << 21)
212 #define ENDPTCTRL_TxToggleReset (1 << 22)
213 #define ENDPTCTRL_TxEnable (1 << 23)
214 #define ENDPTCTRL_REG(corenum, LogicalAddr) ( ((__IO uint32_t *) &(USB_REG(corenum)->ENDPTCTRL[0]))[ \
216 #define EP_Physical2Logical(n) ((n) / 2)
218 #define USED_PHYSICAL_ENDPOINTS0 ENDPOINT_DETAILS_MAXEP0 * 2
219 #define USED_PHYSICAL_ENDPOINTS1 ENDPOINT_DETAILS_MAXEP1 * 2
220 #define USED_PHYSICAL_ENDPOINTS(corenum) ((corenum) ? USED_PHYSICAL_ENDPOINTS1 : USED_PHYSICAL_ENDPOINTS0)
221 #define EP_Physical2BitPosition(n) ( EP_Physical2Logical(n) + ((n) % 2 ? 16 : 0 ) )
247 } DeviceTransferDescriptor, *PDeviceTransferDescriptor;
256 __IO
uint32_t ZeroLengthTermination : 1;
264 __IO DeviceTransferDescriptor overlay;
267 __IO uint8_t SetupPackage[8];
269 uint16_t TransferCount;
270 __IO uint16_t IsOutReceived;
272 } DeviceQueueHead, *PDeviceQueueHead;
274 extern volatile DeviceQueueHead *
const dQueueHead[];
275 extern DeviceTransferDescriptor *
const dTransferDescriptor[];
280 uint16_t totalpackets, uint16_t dummypackets);
287 bool Endpoint_ConfigureEndpoint_Prv(uint8_t corenum,
288 const uint8_t Number,
289 const uint8_t UECFG0XData,
290 const uint8_t UECFG1XData);
316 const uint8_t Number,
320 const uint8_t Banks) ;
483 return (dQueueHead[corenum][PhyEP].overlay.NextTD &
LINK_TERMINATE) &&
484 (dQueueHead[corenum][PhyEP].overlay.Active == 0);
516 return USB_REG(corenum)->ENDPTSETUPSTAT ?
true :
false;
635 (ENDPTCTRL_RxStall | ENDPTCTRL_TxStall);
644 ENDPTCTRL_TxToggleReset;
663 #if (!defined(FIXED_CONTROL_ENDPOINT_SIZE) || defined(__DOXYGEN__))
666 #define USB_Device_ControlEndpointSize FIXED_CONTROL_ENDPOINT_SIZE
692 #if defined(__cplusplus)