]> git.sur5r.net Git - freertos/blob
093402847e5abe89bd9446cf5eacab892cdd857d
[freertos] /
1 /*\r
2  * @brief USB Device definitions for the LPC11Uxx microcontrollers\r
3  *\r
4  * @note\r
5  * Copyright(C) NXP Semiconductors, 2012\r
6  * All rights reserved.\r
7  *\r
8  * @par\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
22  *\r
23  * @par\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
29  * this code.\r
30  */\r
31 \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
35  *\r
36  *  Architecture specific USB Device definitions for the LPC microcontrollers.\r
37  *\r
38  *  @{\r
39  */\r
40 \r
41 #ifndef __USBDEVICE_LPC11UXX_H__\r
42 #define __USBDEVICE_LPC11UXX_H__\r
43 \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
50 \r
51                 #if defined(USB_DEVICE_ROM_DRIVER)\r
52                         #include "../USBRom/usbd_rom_api.h"\r
53                 #endif\r
54 \r
55                 #if defined(__cplusplus)\r
56 extern "C" {\r
57                 #endif\r
58 \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
61                 #endif\r
62 \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
65                 #endif\r
66 \r
67                         #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) || \\r
68         defined(__DOXYGEN__)\r
69 \r
70                                 #define USB_DEVICE_OPT_LOWSPEED            (1 << 0)\r
71                         #endif\r
72 \r
73                         #define USB_DEVICE_OPT_FULLSPEED               (0 << 0)\r
74 \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
79 \r
80                                 #define USE_INTERNAL_SERIAL            0xDC\r
81 \r
82                                 #define INTERNAL_SERIAL_LENGTH_BITS    80\r
83 \r
84                                 #define INTERNAL_SERIAL_START_ADDRESS  0x0E\r
85                         #else\r
86                                 #define USE_INTERNAL_SERIAL            NO_DESCRIPTOR\r
87 \r
88                                 #define INTERNAL_SERIAL_LENGTH_BITS    0\r
89                                 #define INTERNAL_SERIAL_START_ADDRESS  0\r
90                         #endif\r
91 \r
92 void USB_Device_SendRemoteWakeup(void);\r
93 \r
94 PRAGMA_ALWAYS_INLINE\r
95 static inline uint16_t USB_Device_GetFrameNumber(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT;\r
96 \r
97 static inline uint16_t USB_Device_GetFrameNumber(void)\r
98 {\r
99         return 0;\r
100 }\r
101 \r
102                         #if !defined(NO_SOF_EVENTS)\r
103 \r
104 PRAGMA_ALWAYS_INLINE\r
105 static inline void USB_Device_EnableSOFEvents(void) ATTR_ALWAYS_INLINE;\r
106 \r
107 static inline void USB_Device_EnableSOFEvents(void)\r
108 {}\r
109 \r
110 PRAGMA_ALWAYS_INLINE\r
111 static inline void USB_Device_DisableSOFEvents(void) ATTR_ALWAYS_INLINE;\r
112 \r
113 static inline void USB_Device_DisableSOFEvents(void)\r
114 {}\r
115 \r
116                         #endif\r
117 \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
122 \r
123 static inline void USB_Device_SetLowSpeed(void)\r
124 {\r
125         //              UDCON |=  (1 << LSM);\r
126 }\r
127 \r
128 PRAGMA_ALWAYS_INLINE\r
129 static inline void USB_Device_SetFullSpeed(void) ATTR_ALWAYS_INLINE;\r
130 \r
131 static inline void USB_Device_SetFullSpeed(void)\r
132 {\r
133         //              UDCON &= ~(1 << LSM);\r
134 }\r
135 \r
136                         #endif\r
137 \r
138 PRAGMA_ALWAYS_INLINE\r
139 static inline void USB_Device_SetDeviceAddress(uint8_t corenum, const uint8_t Address) ATTR_ALWAYS_INLINE;\r
140 \r
141 static inline void USB_Device_SetDeviceAddress(uint8_t corenum, const uint8_t Address)\r
142 {\r
143         HAL_SetDeviceAddress(Address);\r
144 }\r
145 \r
146 PRAGMA_ALWAYS_INLINE\r
147 static inline bool USB_Device_IsAddressSet(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT;\r
148 \r
149 static inline bool USB_Device_IsAddressSet(void)\r
150 {\r
151         return true;                    /* temporarily */\r
152 }\r
153 \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
156 \r
157 static inline void USB_Device_GetSerialString(uint16_t *const UnicodeString)\r
158 {\r
159         uint_reg_t CurrentGlobalInt = GetGlobalInterruptMask();\r
160         GlobalInterruptDisable();\r
161 \r
162         uint8_t SigReadAddress = INTERNAL_SERIAL_START_ADDRESS;\r
163 \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
166 \r
167                 if (SerialCharNum & 0x01) {\r
168                         SerialByte >>= 4;\r
169                         SigReadAddress++;\r
170                 }\r
171 \r
172                 SerialByte &= 0x0F;\r
173 \r
174                 UnicodeString[SerialCharNum] = cpu_to_le16((SerialByte >= 10) ?\r
175                                                                                                    (('A' - 10) + SerialByte) : ('0' + SerialByte));\r
176         }\r
177 \r
178         SetGlobalInterruptMask(CurrentGlobalInt);\r
179 }\r
180 \r
181                         #endif\r
182 \r
183         #endif\r
184 \r
185                 #if defined(__cplusplus)\r
186 }\r
187                 #endif\r
188 \r
189 #endif\r
190 \r
191 /** @} */\r
192 \r