2 * @brief USB Device definitions for the LPC11Uxx microcontrollers
\r
5 * Copyright(C) NXP Semiconductors, 2012
\r
6 * All rights reserved.
\r
9 * Software that is described herein is for illustrative purposes only
\r
10 * which provides customers with programming information regarding the
\r
11 * LPC products. This software is supplied "AS IS" without any warranties of
\r
12 * any kind, and NXP Semiconductors and its licensor disclaim any and
\r
13 * all warranties, express or implied, including all implied warranties of
\r
14 * merchantability, fitness for a particular purpose and non-infringement of
\r
15 * intellectual property rights. NXP Semiconductors assumes no responsibility
\r
16 * or liability for the use of the software, conveys no license or rights under any
\r
17 * patent, copyright, mask work right, or any other intellectual property rights in
\r
18 * or to any products. NXP Semiconductors reserves the right to make changes
\r
19 * in the software without notification. NXP Semiconductors also makes no
\r
20 * representation or warranty that such application will be suitable for the
\r
21 * specified use without further testing or modification.
\r
24 * Permission to use, copy, modify, and distribute this software and its
\r
25 * documentation is hereby granted, under NXP Semiconductors' and its
\r
26 * licensor's relevant copyrights in the software, without fee, provided that it
\r
27 * is used in conjunction with NXP Semiconductors microcontrollers. This
\r
28 * copyright, permission, and disclaimer notice must appear in all copies of
\r
32 /** @ingroup Group_Device
\r
33 * @defgroup Group_Device_LPC11Uxx Device Management (LPC11Uxx, LPC1347)
\r
34 * @brief USB Device definitions for the LPC1347 and LPC11Uxx microcontrollers.
\r
36 * Architecture specific USB Device definitions for the LPC microcontrollers.
\r
41 #ifndef __USBDEVICE_LPC11UXX_H__
\r
42 #define __USBDEVICE_LPC11UXX_H__
\r
44 #include "../../../../../Common/Common.h"
\r
45 #include "../../USBController.h"
\r
46 #include "../../StdDescriptors.h"
\r
47 #include "../../USBInterrupt.h"
\r
48 #include "../../Endpoint.h"
\r
49 #include "../../HAL/HAL.h"
\r
51 #if defined(USB_DEVICE_ROM_DRIVER)
\r
52 #include "../USBRom/usbd_rom_api.h"
\r
55 #if defined(__cplusplus)
\r
59 #if !defined(__INCLUDE_FROM_USB_DRIVER)
\r
60 #error Do not include this file directly. Include lpcroot/libraries/LPCUSBlib/Drivers/USB/USB.h instead.
\r
63 #if (defined(USE_RAM_DESCRIPTORS) && defined(USE_EEPROM_DESCRIPTORS))
\r
64 #error USE_RAM_DESCRIPTORS and USE_EEPROM_DESCRIPTORS are mutually exclusive.
\r
67 #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) || \
\r
68 defined(__DOXYGEN__)
\r
70 #define USB_DEVICE_OPT_LOWSPEED (1 << 0)
\r
73 #define USB_DEVICE_OPT_FULLSPEED (0 << 0)
\r
75 #if (!defined(NO_INTERNAL_SERIAL) && \
\r
76 (defined(USB_SERIES_7_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_4_AVR) || \
\r
77 (defined(USB_SERIES_2_AVR) && (!defined(__AVR_AT90USB82__) || defined(__AVR_AT90USB162__))) || \
\r
78 defined(__DOXYGEN__)))
\r
80 #define USE_INTERNAL_SERIAL 0xDC
\r
82 #define INTERNAL_SERIAL_LENGTH_BITS 80
\r
84 #define INTERNAL_SERIAL_START_ADDRESS 0x0E
\r
86 #define USE_INTERNAL_SERIAL NO_DESCRIPTOR
\r
88 #define INTERNAL_SERIAL_LENGTH_BITS 0
\r
89 #define INTERNAL_SERIAL_START_ADDRESS 0
\r
92 void USB_Device_SendRemoteWakeup(void);
\r
94 PRAGMA_ALWAYS_INLINE
\r
95 static inline uint16_t USB_Device_GetFrameNumber(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT;
\r
97 static inline uint16_t USB_Device_GetFrameNumber(void)
\r
102 #if !defined(NO_SOF_EVENTS)
\r
104 PRAGMA_ALWAYS_INLINE
\r
105 static inline void USB_Device_EnableSOFEvents(void) ATTR_ALWAYS_INLINE;
\r
107 static inline void USB_Device_EnableSOFEvents(void)
\r
110 PRAGMA_ALWAYS_INLINE
\r
111 static inline void USB_Device_DisableSOFEvents(void) ATTR_ALWAYS_INLINE;
\r
113 static inline void USB_Device_DisableSOFEvents(void)
\r
118 #if !defined(__DOXYGEN__)
\r
119 #if defined(USB_DEVICE_OPT_LOWSPEED)
\r
120 PRAGMA_ALWAYS_INLINE
\r
121 static inline void USB_Device_SetLowSpeed(void) ATTR_ALWAYS_INLINE;
\r
123 static inline void USB_Device_SetLowSpeed(void)
\r
125 // UDCON |= (1 << LSM);
\r
128 PRAGMA_ALWAYS_INLINE
\r
129 static inline void USB_Device_SetFullSpeed(void) ATTR_ALWAYS_INLINE;
\r
131 static inline void USB_Device_SetFullSpeed(void)
\r
133 // UDCON &= ~(1 << LSM);
\r
138 PRAGMA_ALWAYS_INLINE
\r
139 static inline void USB_Device_SetDeviceAddress(uint8_t corenum, const uint8_t Address) ATTR_ALWAYS_INLINE;
\r
141 static inline void USB_Device_SetDeviceAddress(uint8_t corenum, const uint8_t Address)
\r
143 HAL_SetDeviceAddress(Address);
\r
146 PRAGMA_ALWAYS_INLINE
\r
147 static inline bool USB_Device_IsAddressSet(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT;
\r
149 static inline bool USB_Device_IsAddressSet(void)
\r
151 return true; /* temporarily */
\r
154 #if (USE_INTERNAL_SERIAL != NO_DESCRIPTOR)
\r
155 static inline void USB_Device_GetSerialString(uint16_t *const UnicodeString) ATTR_NON_NULL_PTR_ARG(1);
\r
157 static inline void USB_Device_GetSerialString(uint16_t *const UnicodeString)
\r
159 uint_reg_t CurrentGlobalInt = GetGlobalInterruptMask();
\r
160 GlobalInterruptDisable();
\r
162 uint8_t SigReadAddress = INTERNAL_SERIAL_START_ADDRESS;
\r
164 for (uint8_t SerialCharNum = 0; SerialCharNum < (INTERNAL_SERIAL_LENGTH_BITS / 4); SerialCharNum++) {
\r
165 uint8_t SerialByte = boot_signature_byte_get(SigReadAddress);
\r
167 if (SerialCharNum & 0x01) {
\r
172 SerialByte &= 0x0F;
\r
174 UnicodeString[SerialCharNum] = cpu_to_le16((SerialByte >= 10) ?
\r
175 (('A' - 10) + SerialByte) : ('0' + SerialByte));
\r
178 SetGlobalInterruptMask(CurrentGlobalInt);
\r
185 #if defined(__cplusplus)
\r