USB_LPC18xx.h 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333
  1. /* --------------------------------------------------------------------------
  2. * Copyright (c) 2013-2016 ARM Limited. All rights reserved.
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Licensed under the Apache License, Version 2.0 (the License); you may
  7. * not use this file except in compliance with the License.
  8. * You may obtain a copy of the License at
  9. *
  10. * www.apache.org/licenses/LICENSE-2.0
  11. *
  12. * Unless required by applicable law or agreed to in writing, software
  13. * distributed under the License is distributed on an AS IS BASIS, WITHOUT
  14. * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15. * See the License for the specific language governing permissions and
  16. * limitations under the License.
  17. *
  18. * $Date: 02. March 2016
  19. * $Revision: V2.1
  20. *
  21. * Project: USB Driver Definitions for NXP LPC18xx
  22. * -------------------------------------------------------------------------- */
  23. #ifndef __USB_LPC18XX_H
  24. #define __USB_LPC18XX_H
  25. #include <stdint.h>
  26. #ifndef USB_ENDPT_MSK
  27. #define USB_ENDPT_MSK (0x3FU)
  28. #endif
  29. // USB Device Command Register
  30. #define USB_USBCMD_D_RS (1U )
  31. #define USB_USBCMD_D_RST (1U << 1U)
  32. #define USB_USBCMD_D_SUTW (1U << 13U)
  33. #define USB_USBCMD_D_ATDTW (1U << 14U)
  34. #define USB_USBCMD_D_ITC_POS ( 16U)
  35. #define USB_USBCMD_D_ITC_MSK (0xFFU << USB_USBCMD_D_ITC_POS)
  36. #define USB_USBCMD_D_ITC(n) (((n) << USB_USBCMD_D_ITC_POS) & USB_USBCMD_D_ITC_MSK)
  37. // USB Host Command Register
  38. #define USB_USBCMD_H_RS (1U )
  39. #define USB_USBCMD_H_RST (1U << 1U)
  40. #define USB_USBCMD_H_FS0 (1U << 2U)
  41. #define USB_USBCMD_H_FS1 (1U << 3U)
  42. #define USB_USBCMD_H_PSE (1U << 4U)
  43. #define USB_USBCMD_H_ASE (1U << 5U)
  44. #define USB_USBCMD_H_IAA (1U << 6U)
  45. #define USB_USBCMD_H_ASP1_0_POS ( 8U)
  46. #define USB_USBCMD_H_ASP1_0_MSK (3U << USB_USBCMD_H_ASP1_0_POS)
  47. #define USB_USBCMD_H_ASPE (1U << 11U)
  48. #define USB_USBCMD_H_FS2 (1U << 15U)
  49. #define USB_USBCMD_H_ITC_POS ( 16U)
  50. #define USB_USBCMD_H_ITC_MSK (0xFFU << USB_USBCMD_H_ITC_POS)
  51. #define USB_USBCMD_H_ITC(n) (((n) << USB_USBCMD_H_ITC_POS) & USB_USBCMD_H_ITC_MSK)
  52. // USB Device Status Register
  53. #define USB_USBDSTS_D_UI (1U )
  54. #define USB_USBDSTS_D_UEI (1U << 1U)
  55. #define USB_USBDSTS_D_PCI (1U << 2U)
  56. #define USB_USBDSTS_D_URI (1U << 6U)
  57. #define USB_USBDSTS_D_SRI (1U << 7U)
  58. #define USB_USBDSTS_D_SLI (1U << 8U)
  59. #define USB_USBDSTS_D_NAKI (1U << 16U)
  60. // USB Host Status Register
  61. #define USB_USBDSTS_H_UI (1U )
  62. #define USB_USBDSTS_H_UEI (1U << 1U)
  63. #define USB_USBDSTS_H_PCI (1U << 2U)
  64. #define USB_USBDSTS_H_FRI (1U << 3U)
  65. #define USB_USBDSTS_H_AAI (1U << 5U)
  66. #define USB_USBDSTS_H_SRI (1U << 7U)
  67. #define USB_USBDSTS_H_HCH (1U << 12U)
  68. #define USB_USBDSTS_H_RCL (1U << 13U)
  69. #define USB_USBDSTS_H_PS (1U << 14U)
  70. #define USB_USBDSTS_H_AS (1U << 15U)
  71. #define USB_USBDSTS_H_UAI (1U << 18U)
  72. #define USB_USBDSTS_H_UPI (1U << 19U)
  73. // USB Device Interrupt Register
  74. #define USB_USBINTR_D_UE (1U )
  75. #define USB_USBINTR_D_UEE (1U << 1U)
  76. #define USB_USBINTR_D_PCE (1U << 2U)
  77. #define USB_USBINTR_D_URE (1U << 6U)
  78. #define USB_USBINTR_D_SRE (1U << 7U)
  79. #define USB_USBINTR_D_SLE (1U << 8U)
  80. #define USB_USBINTR_D_NAKE (1U << 16U)
  81. // USB Host Interrupt Register
  82. #define USB_USBINTR_H_UE (1U )
  83. #define USB_USBINTR_H_UEE (1U << 1U)
  84. #define USB_USBINTR_H_PCE (1U << 2U)
  85. #define USB_USBINTR_H_FRE (1U << 3U)
  86. #define USB_USBINTR_H_AAE (1U << 5U)
  87. #define USB_USBINTR_H_SRE (1U << 7U)
  88. #define USB_USBINTR_H_UAIE (1U << 18U)
  89. #define USB_USBINTR_H_UPIA (1U << 19U)
  90. // USB Device Frame Index Register
  91. #define USB_FRINDEX_D_FRINDEX2_0_POS ( 0U)
  92. #define USB_FRINDEX_D_FRINDEX2_0_MSK (7U )
  93. #define USB_FRINDEX_D_FRINDEX13_3_POS ( 3U)
  94. #define USB_FRINDEX_D_FRINDEX13_3_MSK (0x7FFU << USB_FRINDEX_D_FRINDEX13_3_POS)
  95. // USB Host Frame Index Register
  96. #define USB_FRINDEX_H_FRINDEX2_0_POS ( 0U)
  97. #define USB_FRINDEX_H_FRINDEX2_0_MSK (7U )
  98. #define USB_FRINDEX_H_FRINDEX12_3_POS ( 3U)
  99. #define USB_FRINDEX_H_FRINDEX12_3_MSK (0x3FFU << USB_FRINDEX_H_FRINDEX12_3_POS)
  100. // USB Device Address Register
  101. #define USB_DEVICEADDR_USBADRA (1U << 24U)
  102. #define USB_DEVICEADDR_USBADR_POS ( 25U)
  103. #define USB_DEVICEADDR_USBADR_MSK (0x7FUL << USB_DEVICEADDR_USBADR_POS)
  104. // USB Endpoint List Address Register
  105. #define USB_ENDPOINTLISTADDR_EPBASE31_11_POS ( 11U)
  106. #define USB_ENDPOINTLISTADDR_EPBASE31_11_MSK (0x1FFFFFUL << USB_ENDPOINTLISTADDR_EPBASE31_11_POS)
  107. // USB Burst Size Register
  108. #define USB_BURSTSIZE_RXPBURST_POS ( 0U)
  109. #define USB_BURSTSIZE_RXPBURST_MSK (0xFFU )
  110. #define USB_BURSTSIZE_TXPBURST_POS ( 8U)
  111. #define USB_BURSTSIZE_TXPBURST_MSK (0xFFU << USB_BURSTSIZE_TXPBURST_POS)
  112. // USB ULPI Viewport register (USB1 only)
  113. #define USB_ULPIVIEWPORT_ULPIDATWR_POS ( 0U)
  114. #define USB_ULPIVIEWPORT_ULPIDATRW_MSK (0xFFU )
  115. #define USB_ULPIVIEWPORT_ULPIDATRD_POS ( 8U)
  116. #define USB_ULPIVIEWPORT_ULPIDATRD_MSK (0xFFU << USB_ULPIVIEWPORT_ULPIDATRD_POS)
  117. #define USB_ULPIVIEWPORT_ULPIADDR_POS ( 16U)
  118. #define USB_ULPIVIEWPORT_ULPIADDR_MSK (0xFFU << USB_ULPIVIEWPORT_ULPIADDR_POS)
  119. #define USB_ULPIVIEWPORT_ULPIPORT_POS ( 24U)
  120. #define USB_ULPIVIEWPORT_ULPIPORT_MSK (7U << USB_ULPIVIEWPORT_ULPIPORT_POS)
  121. #define USB_ULPIVIEWPORT_ULPISS (1U << 27U)
  122. #define USB_ULPIVIEWPORT_ULPIRW (1U << 29U)
  123. #define USB_ULPIVIEWPORT_ULPIRUN (1U << 30U)
  124. #define USB_ULPIVIEWPORT_ULPIWU (1UL << 31U)
  125. // USB BInterval Register
  126. #define USB_BINTERVAL_BINT_POS ( 0U)
  127. #define USB_BINTERVAL_BINT_MSK (0x0FU << USB_BINTERVAL_BINT_POS)
  128. // USB Endpoint NAK Register
  129. #define USB_ENDPTNAK_EPRN_POS ( 0U)
  130. #define USB_ENDPTNAK_EPRN_MSK (USB_ENDPT_MSK)
  131. #define USB_ENDPTNAK_EPTN_POS ( 16U)
  132. #define USB_ENDPTNAK_EPTN_MSK (USB_ENDPT_MSK << USB_ENDPTNAK_EPTN_POS)
  133. // USB Endpoint NAK Enable Register
  134. #define USB_ENDPTNAKEN_EPRNE_POS ( 0U)
  135. #define USB_ENDPTNAKEN_EPRNE_MSK (USB_ENDPT_MSK)
  136. #define USB_ENDPTNAKEN_EPTNE_POS ( 16U)
  137. #define USB_ENDPTNAKEN_EPTNE_MSK (USB_ENDPT_MSK << USB_ENDPTNAKEN_EPTNE_POS)
  138. // USB Device Port Status and Control Register
  139. #define USB_PORTSC1_D_CCS (1U )
  140. #define USB_PORTSC1_D_PE (1U << 2U)
  141. #define USB_PORTSC1_D_PEC (1U << 3U)
  142. #define USB_PORTSC1_D_FPR (1U << 6U)
  143. #define USB_PORTSC1_D_SUSP (1U << 7U)
  144. #define USB_PORTSC1_D_PR (1U << 8U)
  145. #define USB_PORTSC1_D_HSP (1U << 9U)
  146. #define USB_PORTSC1_D_PIC1_0_POS ( 14U)
  147. #define USB_PORTSC1_D_PIC1_0_MSK (3U << USB_PORTSC1_D_PIC1_0_POS)
  148. #define USB_PORTSC1_D_PIC1_0(n) (((n) << USB_PORTSC1_D_PIC1_0_POS) & USB_PORTSC1_D_PIC1_0_MSK)
  149. #define USB_PORTSC1_D_PTC3_0_POS ( 16U)
  150. #define USB_PORTSC1_D_PTC3_0_MSK (0x0FU << USB_PORTSC1_D_PTC3_0_POS)
  151. #define USB_PORTSC1_D_PHCD (1U << 23U)
  152. #define USB_PORTSC1_D_PFSC (1U << 24U)
  153. #define USB_PORTSC1_D_PSPD_POS ( 26U)
  154. #define USB_PORTSC1_D_PSPD_MSK (3U << USB_PORTSC1_D_PSPD_POS)
  155. #define USB_PORTSC1_D_PTS_POS ( 30U)
  156. #define USB_PORTSC1_D_PTS_MSK (3UL << USB_PORTSC1_D_PTS_POS)
  157. #define USB_PORTSC1_D_PTS(n) (((n) << USB_PORTSC1_D_PTS_POS) & USB_PORTSC1_D_PTS_MSK)
  158. // USB Host Port Status and Control Register
  159. #define USB_PORTSC1_H_CCS (1U )
  160. #define USB_PORTSC1_H_CSC (1U << 1U)
  161. #define USB_PORTSC1_H_PE (1U << 2U)
  162. #define USB_PORTSC1_H_PEC (1U << 3U)
  163. #define USB_PORTSC1_H_OCA (1U << 4U)
  164. #define USB_PORTSC1_H_OCC (1U << 5U)
  165. #define USB_PORTSC1_H_FPR (1U << 6U)
  166. #define USB_PORTSC1_H_SUSP (1U << 7U)
  167. #define USB_PORTSC1_H_PR (1U << 8U)
  168. #define USB_PORTSC1_H_HSP (1U << 9U)
  169. #define USB_PORTSC1_H_LS_POS ( 10U)
  170. #define USB_PORTSC1_H_LS_MSK (3U << USB_PORTSC1_H_LS_POS)
  171. #define USB_PORTSC1_H_PP (1U << 12U)
  172. #define USB_PORTSC1_H_PIC1_0_POS ( 14U)
  173. #define USB_PORTSC1_H_PIC1_0_MSK (3U << USB_PORTSC1_H_PIC1_0_POS)
  174. #define USB_PORTSC1_H_PIC1_0(n) (((n) << USB_PORTSC1_H_PIC1_0_POS) & USB_PORTSC1_H_PIC1_0_MSK)
  175. #define USB_PORTSC1_H_PTC3_0_POS ( 16U)
  176. #define USB_PORTSC1_H_PTC3_0_MSK (0x0FU << USB_PORTSC1_H_PTC3_0_POS)
  177. #define USB_PORTSC1_H_WKCN (1U << 20U)
  178. #define USB_PORTSC1_H_WKDC (1U << 21U)
  179. #define USB_PORTSC1_H_WKOC (1U << 22U)
  180. #define USB_PORTSC1_H_PHCD (1U << 23U)
  181. #define USB_PORTSC1_H_PFSC (1U << 24U)
  182. #define USB_PORTSC1_H_PSPD_POS ( 26U)
  183. #define USB_PORTSC1_H_PSPD_MSK (3U << USB_PORTSC1_H_PSPD_POS)
  184. #define USB_PORTSC1_H_PTS_POS ( 30U)
  185. #define USB_PORTSC1_H_PTS_MSK (3UL << USB_PORTSC1_H_PTS_POS)
  186. #define USB_PORTSC1_H_PTS(n) (((n) << USB_PORTSC1_H_PTS_POS) & USB_PORTSC1_H_PTS_MSK)
  187. // OTG Status and Control Register (USB0 only)
  188. #define USB_OTGSC_VD (1U )
  189. #define USB_OTGSC_VC (1U << 1U)
  190. #define USB_OTGSC_HAAR (1U << 2U)
  191. #define USB_OTGSC_OT (1U << 3U)
  192. #define USB_OTGSC_DP (1U << 4U)
  193. #define USB_OTGSC_IDPU (1U << 5U)
  194. #define USB_OTGSC_HADP (1U << 6U)
  195. #define USB_OTGSC_HABA (1U << 7U)
  196. #define USB_OTGSC_ID (1U << 8U)
  197. #define USB_OTGSC_AVV (1U << 9U)
  198. #define USB_OTGSC_ASV (1U << 10U)
  199. #define USB_OTGSC_BSV (1U << 11U)
  200. #define USB_OTGSC_BSE (1U << 12U)
  201. #define USB_OTGSC_MS1T (1U << 13U)
  202. #define USB_OTGSC_DPS (1U << 14U)
  203. #define USB_OTGSC_IDIS (1U << 16U)
  204. #define USB_OTGSC_AVVIS (1U << 17U)
  205. #define USB_OTGSC_ASVIS (1U << 18U)
  206. #define USB_OTGSC_BSVIS (1U << 19U)
  207. #define USB_OTGSC_BSEIS (1U << 20U)
  208. #define USB_OTGSC_MS1S (1U << 21U)
  209. #define USB_OTGSC_DPIS (1U << 22U)
  210. #define USB_OTGSC_IDIE (1U << 24U)
  211. #define USB_OTGSC_AVVIE (1U << 25U)
  212. #define USB_OTGSC_ASVIE (1U << 26U)
  213. #define USB_OTGSC_BSVIE (1U << 27U)
  214. #define USB_OTGSC_BSEIE (1U << 28U)
  215. #define USB_OTGSC_MS1E (1U << 29U)
  216. #define USB_OTGSC_DPIE (1U << 30U)
  217. // USB Device Mode Register
  218. #define USB_USBMODE_D_CM1_0_POS ( 0U)
  219. #define USB_USBMODE_D_CM1_0_MSK (3U )
  220. #define USB_USBMODE_D_CM1_0(n) ((n) & USB_USBMODE_D_CM1_0_MSK)
  221. #define USB_USBMODE_D_ES (1U << 2U)
  222. #define USB_USBMODE_D_SLOM (1U << 3U)
  223. #define USB_USBMODE_D_SDIS (1U << 4U)
  224. // USB Device Mode Register
  225. #define USB_USBMODE_H_CM1_0_POS ( 0U)
  226. #define USB_USBMODE_H_CM1_0_MSK (3U )
  227. #define USB_USBMODE_H_CM1_0(n) ((n) & USB_USBMODE_H_CM1_0_MSK)
  228. #define USB_USBMODE_H_ES (1U << 2U)
  229. #define USB_USBMODE_H_SDIS (1U << 4U)
  230. #define USB_USBMODE_H_VBPS (1U << 5U)
  231. // USB Endpoint Setup Status Register
  232. #define USB_ENDPTSETUPSTAT_POS ( 0U)
  233. #define USB_ENDPTSETUPSTAT_MSK (USB_ENDPT_MSK << USB_ENDPTSETUPSTAT_POS)
  234. // USB Endpoint Prime Register
  235. #define USB_ENDPTRPRIME_PERB_POS ( 0U)
  236. #define USB_ENDPTRPRIME_PERB_MSK (USB_ENDPT_MSK)
  237. #define USB_ENDPTRPRIME_PETB_POS ( 16U)
  238. #define USB_ENDPTRPRIME_PETB_MSK (USB_ENDPT_MSK << USB_ENDPTRPRIME_PETB_POS)
  239. // USB Endpoint Flush Register
  240. #define USB_ENDPTFLUSH_FERB_POS ( 0U)
  241. #define USB_ENDPTFLUSH_FERB_MSK (USB_ENDPT_MSK)
  242. #define USB_ENDPTFLUSH_FETB_POS ( 16U)
  243. #define USB_ENDPTFLUSH_FETB_MSK (USB_ENDPT_MSK << USB_ENDPTFLUSH_FETB_POS)
  244. // USB Endpoint Status Register
  245. #define USB_ENDPTSTAT_ERBR_POS ( 0U)
  246. #define USB_ENDPTSTAT_ERBR_MSK (USB_ENDPT_MSK)
  247. #define USB_ENDPTSTAT_ETBR_POS ( 16U)
  248. #define USB_ENDPTSTAT_ETBR_MSK (USB_ENDPT_MSK << USB_ENDPTSTAT_ETBR_POS)
  249. // USB Endpoint Complete Register
  250. #define USB_ENDPTCOMPLETE_ERCE_POS ( 0U)
  251. #define USB_ENDPTCOMPLETE_ERCE_MSK (USB_ENDPT_MSK)
  252. #define USB_ENDPTCOMPLETE_ETCE_POS ( 16U)
  253. #define USB_ENDPTCOMPLETE_ETCE_MSK (USB_ENDPT_MSK << USB_ENDPTCOMPLETE_ETCE_POS)
  254. // USB Endpoint Control Register
  255. #define USB_ENDPTCTRL_RXS (1U )
  256. #define USB_ENDPTCTRL_RXT_POS ( 2U)
  257. #define USB_ENDPTCTRL_RXT_MSK (3U << USB_ENDPTCTRL_RXT_POS)
  258. #define USB_ENDPTCTRL_RXT(n) (((n) << USB_ENDPTCTRL_RXT_POS) & USB_ENDPTCTRL_RXT_MSK)
  259. #define USB_ENDPTCTRL_RXI (1U << 5U)
  260. #define USB_ENDPTCTRL_RXR (1U << 6U)
  261. #define USB_ENDPTCTRL_RXE (1U << 7U)
  262. #define USB_ENDPTCTRL_TXS (1U << 16U)
  263. #define USB_ENDPTCTRL_TXT_POS ( 18U)
  264. #define USB_ENDPTCTRL_TXT_MSK (3U << USB_ENDPTCTRL_TXT_POS)
  265. #define USB_ENDPTCTRL_TXT(n) (((n) << USB_ENDPTCTRL_TXT_POS) & USB_ENDPTCTRL_TXT_MSK)
  266. #define USB_ENDPTCTRL_TXI (1U << 21U)
  267. #define USB_ENDPTCTRL_TXR (1U << 22U)
  268. #define USB_ENDPTCTRL_TXE (1U << 23U)
  269. // Endpoint Queue Head Capabilities and Characteristics
  270. #define USB_EPQH_CAP_IOS (1U << 15U)
  271. #define USB_EPQH_CAP_MAX_PACKET_LEN_POS ( 16U)
  272. #define USB_EPQH_CAP_MAX_PACKET_LEN_MSK (0x7FFU << USB_EPQH_CAP_MAX_PACKET_LEN_POS)
  273. #define USB_EPQH_CAP_MAX_PACKET_LEN(n) (((n) << USB_EPQH_CAP_MAX_PACKET_LEN_POS) & USB_EPQH_CAP_MAX_PACKET_LEN_MSK)
  274. #define USB_EPQH_CAP_ZLT (1U << 29U)
  275. #define USB_EPQH_CAP_MULT_POS ( 30U)
  276. #define USB_EPQH_CAP_MULT_MSK (3UL << USB_EPQH_CAP_MULT_POS)
  277. // Transfer Descriptor Token
  278. #define USB_bTD_TOKEN_STATUS_POS ( 0U)
  279. #define USB_bTD_TOKEN_STATUS_MSK (0xFFU )
  280. #define USB_bTD_TOKEN_STATUS(n) (n & USB_bTD_TOKEN_STATUS_MSK)
  281. #define USB_bTD_TOKEN_STATUS_TRAN_ERROR (0x08U & USB_bTD_TOKEN_STATUS_MSK)
  282. #define USB_bTD_TOKEN_STATUS_BUFFER_ERROR (0x20U & USB_bTD_TOKEN_STATUS_MSK)
  283. #define USB_bTD_TOKEN_STATUS_HALTED (0x40U & USB_bTD_TOKEN_STATUS_MSK)
  284. #define USB_bTD_TOKEN_STATUS_ACTIVE (0x80U & USB_bTD_TOKEN_STATUS_MSK)
  285. #define USB_bTD_TOKEN_MULTO_POS ( 10U)
  286. #define USB_bTD_TOKEN_MULTO_MSK (3U << USB_bTD_TOKEN_MULTO_POS)
  287. #define USB_bTD_TOKEN_MULTO(n) (((n) << USB_bTD_TOKEN_MULTO_POS) & USB_bTD_TOKEN_MULTO_MSK)
  288. #define USB_bTD_TOKEN_IOC (1U << 15U)
  289. #define USB_bTD_TOKEN_TOTAL_BYTES_POS ( 16U)
  290. #define USB_bTD_TOKEN_TOTAL_BYTES_MSK (0x7FFFU<< USB_bTD_TOKEN_TOTAL_BYTES_POS)
  291. #define USB_bTD_TOKEN_TOTAL_BYTES(n) (((n) << USB_bTD_TOKEN_TOTAL_BYTES_POS) & USB_bTD_TOKEN_TOTAL_BYTES_MSK)
  292. // USB Driver State Flags
  293. // Device State Flags
  294. #define USBD_DRIVER_INITIALIZED (1U )
  295. #define USBD_DRIVER_POWERED (1U << 1U)
  296. // Host State Flags
  297. #define USBH_DRIVER_INITIALIZED (1U << 4U)
  298. #define USBH_DRIVER_POWERED (1U << 5U)
  299. #endif /* __USB_LPC18XX_H */