usb_regs.h 43 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630
  1. /*!
  2. \file usb_regs.h
  3. \brief USB FS cell registers definition and handle macros
  4. */
  5. /*
  6. Copyright (C) 2017 GigaDevice
  7. 2017-02-10, V1.0.0, firmware for GD32F30x
  8. */
  9. #ifndef USB_REGS_H
  10. #define USB_REGS_H
  11. #include "usb_conf.h"
  12. #define USBFS USBFS_BASE /*!< base address of USBFS registers */
  13. /* registers location definitions */
  14. #define LOCATE_DIEPTFLEN(x) (0x104U + 4U * ((x) - 1U)) /*!< locate device IN endpoint-x transfer length registers */
  15. #define LOCATE_HCHCTL(x) (0x500U + 0x20U * (x)) /*!< locate host channel-x control registers */
  16. #define LOCATE_HCHSTCTL(x) (0x504U + 0x20U * (x)) /*!< locate host channel-x split transaction control registers */
  17. #define LOCATE_HCHINTF(x) (0x508U + 0x20U * (x)) /*!< locate host channel-x interrupt flag registers */
  18. #define LOCATE_HCHINTEN(x) (0x50CU + 0x20U * (x)) /*!< locate host channel-x interrupt enable registers */
  19. #define LOCATE_HCHLEN(x) (0x510U + 0x20U * (x)) /*!< locate host channel-x transfer length registers */
  20. #define LOCATE_HCHDMAADDR(x) (0x514U + 0x20U * (x)) /*!< locate host channel-x DMA address registers */
  21. #define LOCATE_DIEPCTL(x) (0x900U + 0x20U * (x)) /*!< locate device IN endpoint-x control registers */
  22. #define LOCATE_DOEPCTL(x) (0xB00U + 0x20U * (x)) /*!< locate device OUT endpoint-x control registers */
  23. #define LOCATE_DIEPINTF(x) (0x908U + 0x20U * (x)) /*!< locate device IN endpoint-x interrupt flag registers */
  24. #define LOCATE_DOEPINTF(x) (0xB08U + 0x20U * (x)) /*!< locate device OUT endpoint-x interrupt flag registers */
  25. #define LOCATE_DIEPLEN(x) (0x910U + 0x20U * (x)) /*!< locate device IN endpoint-x transfer length registers */
  26. #define LOCATE_DOEPLEN(x) (0xB10U + 0x20U * (x)) /*!< locate device OUT endpoint-x transfer length registers */
  27. #define LOCATE_DIEPxDMAADDR(x) (0x914U + 0x20U * (x)) /*!< locate device IN endpoint-x DMA address registers */
  28. #define LOCATE_DOEPxDMAADDR(x) (0xB14U + 0x20U * (x)) /*!< locate device OUT endpoint-x DMA address registers */
  29. #define LOCATE_DIEPxTFSTAT(x) (0x918U + 0x20U * (x)) /*!< locate Device IN endpoint-x transmit FIFO status register */
  30. #define LOCATE_FIFO(x) (((x) + 1U) << 12U) /*!< locate FIFO-x memory */
  31. /* registers definitions */
  32. #define USB_GOTGCS REG32(((USBFS) + 0x0000U)) /*!< global OTG control and status register */
  33. #define USB_GOTGINTF REG32(((USBFS) + 0x0004U)) /*!< global OTG interrupt flag register */
  34. #define USB_GAHBCS REG32(((USBFS) + 0x0008U)) /*!< global AHB control and status register */
  35. #define USB_GUSBCS REG32(((USBFS) + 0x000CU)) /*!< global USB control and status register */
  36. #define USB_GRSTCTL REG32(((USBFS) + 0x0010U)) /*!< global reset control register */
  37. #define USB_GINTF REG32(((USBFS) + 0x0014U)) /*!< global interrupt flag register */
  38. #define USB_GINTEN REG32(((USBFS) + 0x0018U)) /*!< global interrupt enable register */
  39. #define USB_GRSTATR REG32(((USBFS) + 0x001CU)) /*!< global receive status read register */
  40. #define USB_GRSTATP REG32(((USBFS) + 0x0020U)) /*!< global receive status read and pop register */
  41. #define USB_GRFLEN REG32(((USBFS) + 0x0024U)) /*!< global receive FIFO length register */
  42. #define USB_HNPTFLEN REG32(((USBFS) + 0x0028U)) /*!< host non-periodic transmit FIFO length register */
  43. #define USB_DIEP0TFLEN REG32(((USBFS) + 0x0028U)) /*!< device IN endpoint 0 transmit FIFO length register */
  44. #define USB_HNPTFQSTAT REG32(((USBFS) + 0x002CU)) /*!< host non-periodic transmint FIFO/queue status register */
  45. #define USB_GCCFG REG32(((USBFS) + 0x0038U)) /*!< global core configuration register */
  46. #define USB_CID REG32(((USBFS) + 0x003CU)) /*!< core id register */
  47. #define USB_HPTFLEN REG32(((USBFS) + 0x0100U)) /*!< host periodic transmit FIFO length register */
  48. #define USB_DIEPxTFLEN(x) REG32(((USBFS) + LOCATE_DIEPTFLEN(x))) /*!< device IN endpoint transmit FIFO length register */
  49. #define USB_HCTL REG32(((USBFS) + 0x0400U)) /*!< host control register */
  50. #define USB_HFT REG32(((USBFS) + 0x0404U)) /*!< host frame interval register */
  51. #define USB_HFINFR REG32(((USBFS) + 0x0408U)) /*!< host frame information remaining register */
  52. #define USB_HPTFQSTAT REG32(((USBFS) + 0x0410U)) /*!< host periodic transmit FIFO/queue status register */
  53. #define USB_HACHINT REG32(((USBFS) + 0x0414U)) /*!< host all channels interrupt register */
  54. #define USB_HACHINTEN REG32(((USBFS) + 0x0418U)) /*!< host all channels interrupt enable register */
  55. #define USB_HPCS REG32(((USBFS) + 0x0440U)) /*!< host port control and status register */
  56. #define USB_HCHxCTL(x) REG32(((USBFS) + LOCATE_HCHCTL(x))) /*!< host channel-x control register */
  57. #define USB_HCHxSTCTL(x) REG32(((USBFS) + LOCATE_HCHSTCTL(x))) /*!< host channel-x split transaction control register */
  58. #define USB_HCHxINTF(x) REG32(((USBFS) + LOCATE_HCHINTF(x))) /*!< host channel-x interrupt flag register */
  59. #define USB_HCHxINTEN(x) REG32(((USBFS) + LOCATE_HCHINTEN(x))) /*!< host channel-x interrupt enable register */
  60. #define USB_HCHxLEN(x) REG32(((USBFS) + LOCATE_HCHLEN(x))) /*!< host channel-x tranfer length register */
  61. #define USB_HCHxDMAADDR(x) REG32(((USBFS) + LOCATE_HCHDMAADDR(x))) /*!< host channel-x DMA address register */
  62. #define USB_DCFG REG32(((USBFS) + 0x0800U)) /*!< device configuration register */
  63. #define USB_DCTL REG32(((USBFS) + 0x0804U)) /*!< device control register */
  64. #define USB_DSTAT REG32(((USBFS) + 0x0808U)) /*!< device status register */
  65. #define USB_DIEPINTEN REG32(((USBFS) + 0x0810U)) /*!< device IN endpoint common interrupt enable register */
  66. #define USB_DOEPINTEN REG32(((USBFS) + 0x0814U)) /*!< device OUT endpoint common interrupt enable register */
  67. #define USB_DAEPINT REG32(((USBFS) + 0x0818U)) /*!< device all endpoints interrupt register */
  68. #define USB_DAEPINTEN REG32(((USBFS) + 0x081CU)) /*!< device all endpoints interrupt enable register */
  69. #define USB_DVBUSDT REG32(((USBFS) + 0x0828U)) /*!< device vbus discharge time register */
  70. #define USB_DVBUSPT REG32(((USBFS) + 0x082CU)) /*!< device vbus pulsing time register */
  71. #define USB_DIEPFEINTEN REG32(((USBFS) + 0x0834U)) /*!< device IN endpoint FIFO empty interrupt enable register */
  72. #define USB_DEP1INT REG32(((USBFS) + 0x0838U)) /*!< device endpoint 1 interrupt register */
  73. #define USB_DEP1INTEN REG32(((USBFS) + 0x083CU)) /*!< device endpoint 1 interrupt enable register */
  74. #define USB_DIEP1INTEN REG32(((USBFS) + 0x0844U)) /*!< device IN endpoint 1 interrupt enable register */
  75. #define USB_DOEP1INTEN REG32(((USBFS) + 0x0884U)) /*!< device OUT endpoint 1 interrupt enable register */
  76. #define USB_DIEP0CTL REG32(((USBFS) + 0x0900U)) /*!< device IN endpoint 0 control register */
  77. #define USB_DIEP0LEN REG32(((USBFS) + 0x0910U)) /*!< device IN endpoint 0 transfer length register */
  78. #define USB_DOEP0CTL REG32(((USBFS) + 0x0B00U)) /*!< device OUT endpoint 0 control register */
  79. #define USB_DOEP0LEN REG32(((USBFS) + 0x0B10U)) /*!< device OUT endpoint 0 transfer length register */
  80. #define USB_DIEPxCTL(x) REG32(((USBFS) + LOCATE_DIEPCTL(x))) /*!< device IN endpoint-x control register */
  81. #define USB_DOEPxCTL(x) REG32(((USBFS) + LOCATE_DOEPCTL(x))) /*!< device OUT endpoint-x control register */
  82. #define USB_DIEPxINTF(x) REG32(((USBFS) + LOCATE_DIEPINTF(x))) /*!< device IN endpoint-x interrupt flag register */
  83. #define USB_DOEPxINTF(x) REG32(((USBFS) + LOCATE_DOEPINTF(x))) /*!< device OUT endpoint-x interrupt flag register */
  84. #define USB_DIEPxLEN(x) REG32(((USBFS) + LOCATE_DIEPLEN(x))) /*!< device IN endpoint-x transfer length register */
  85. #define USB_DOEPxLEN(x) REG32(((USBFS) + LOCATE_DOEPLEN(x))) /*!< device OUT endpoint-x transfer length register */
  86. #define USB_DIEPxDMAADDR(x) REG32(((USBFS) + LOCATE_DIEPxDMAADDR(x)))/*!< device IN endpoint-x DMA address register */
  87. #define USB_DOEPxDMAADDR(x) REG32(((USBFS) + LOCATE_DOEPxDMAADDR(x)))/*!< device OUT endpoint-x DMA address register */
  88. #define USB_DIEPxTFSTAT(x) REG32(((USBFS) + LOCATE_DIEPxTFSTAT(x))) /*!< device IN endpoint-x transmit FIFO status register */
  89. #define USB_PWRCLKCTL REG32(((USBFS) + 0x0E00U)) /*!< power and clock register */
  90. #define USB_FIFO(x) (&REG32(((USBFS) + LOCATE_FIFO(x)))) /*!< FIFO memory */
  91. /* global OTG control and status register bits definitions */
  92. #define GOTGCS_BSV BIT(19) /*!< B-Session Valid */
  93. #define GOTGCS_ASV BIT(18) /*!< A-session valid */
  94. #define GOTGCS_DI BIT(17) /*!< debounce interval */
  95. #define GOTGCS_CIDPS BIT(16) /*!< id pin status */
  96. #define GOTGCS_DHNPEN BIT(11) /*!< device HNP enable */
  97. #define GOTGCS_HHNPEN BIT(10) /*!< host HNP enable */
  98. #define GOTGCS_HNPREQ BIT(9) /*!< HNP request */
  99. #define GOTGCS_HNPS BIT(8) /*!< HNP successes */
  100. #define GOTGCS_SRPREQ BIT(1) /*!< SRP request */
  101. #define GOTGCS_SRPS BIT(0) /*!< SRP successes */
  102. /* global OTG interrupt flag register bits definitions */
  103. #define GOTGINTF_DF BIT(19) /*!< debounce finish */
  104. #define GOTGINTF_ADTO BIT(18) /*!< A-device timeout */
  105. #define GOTGINTF_HNPDET BIT(17) /*!< host negotiation request detected */
  106. #define GOTGINTF_HNPEND BIT(9) /*!< HNP end */
  107. #define GOTGINTF_SRPEND BIT(8) /*!< SRP end */
  108. #define GOTGINTF_SESEND BIT(2) /*!< session end */
  109. /* global AHB control and status register bits definitions */
  110. #define GAHBCS_PTXFTH BIT(8) /*!< periodic Tx FIFO threshold */
  111. #define GAHBCS_TXFTH BIT(7) /*!< tx FIFO threshold */
  112. #define GAHBCS_DMAEN BIT(5) /*!< DMA function Enable */
  113. #define GAHBCS_BURST BITS(1, 4) /*!< the AHB burst type used by DMA */
  114. #define GAHBCS_GINTEN BIT(0) /*!< global interrupt enable */
  115. /* global USB control and status register bits definitions */
  116. #define GUSBCS_FDM BIT(30) /*!< force device mode */
  117. #define GUSBCS_FHM BIT(29) /*!< force host mode */
  118. #define GUSBCS_ULPIEOI BIT(21) /*!< ULPI external over-current indicator */
  119. #define GUSBCS_ULPIEVD BIT(20) /*!< ULPI external VBUS driver */
  120. #define GUSBCS_UTT BITS(10, 13) /*!< USB turnaround time */
  121. #define GUSBCS_HNPCEN BIT(9) /*!< HNP capability enable */
  122. #define GUSBCS_SRPCEN BIT(8) /*!< SRP capability enable */
  123. #define GUSBCS_EMBPHY BIT(6) /*!< embedded PHY selected */
  124. #define GUSBCS_TOC BITS(0, 2) /*!< timeout calibration */
  125. /* global reset control register bits definitions */
  126. #define GRSTCTL_DMAIDL BIT(31) /*!< DMA idle state */
  127. #define GRSTCTL_DMABSY BIT(30) /*!< DMA busy */
  128. #define GRSTCTL_TXFNUM BITS(6, 10) /*!< tx FIFO number */
  129. #define GRSTCTL_TXFF BIT(5) /*!< tx FIFO flush */
  130. #define GRSTCTL_RXFF BIT(4) /*!< rx FIFO flush */
  131. #define GRSTCTL_HFCRST BIT(2) /*!< host frame counter reset */
  132. #define GRSTCTL_HCSRST BIT(1) /*!< HCLK soft reset */
  133. #define GRSTCTL_CSRST BIT(0) /*!< core soft reset */
  134. /* global interrupt flag register bits definitions */
  135. #define GINTF_WKUPIF BIT(31) /*!< wakeup interrupt flag */
  136. #define GINTF_SESIF BIT(30) /*!< session interrupt flag */
  137. #define GINTF_DISCIF BIT(29) /*!< disconnect interrupt flag */
  138. #define GINTF_IDPSC BIT(28) /*!< id pin status change */
  139. #define GINTF_PTXFEIF BIT(26) /*!< periodic tx FIFO empty interrupt flag */
  140. #define GINTF_HCIF BIT(25) /*!< host channels interrupt flag */
  141. #define GINTF_HPIF BIT(24) /*!< host port interrupt flag */
  142. #define GINTF_PXNCIF BIT(21) /*!< periodic transfer not complete interrupt flag */
  143. #define GINTF_ISOONCIF BIT(21) /*!< isochronous OUT transfer not complete interrupt flag */
  144. #define GINTF_ISOINCIF BIT(20) /*!< isochronous IN transfer not complete interrupt flag */
  145. #define GINTF_OEPIF BIT(19) /*!< OUT endpoint interrupt flag */
  146. #define GINTF_IEPIF BIT(18) /*!< IN endpoint interrupt flag */
  147. #define GINTF_EOPFIF BIT(15) /*!< end of periodic frame interrupt flag */
  148. #define GINTF_ISOOPDIF BIT(14) /*!< isochronous OUT packet dropped interrupt flag */
  149. #define GINTF_ENUMFIF BIT(13) /*!< enumeration finished */
  150. #define GINTF_RST BIT(12) /*!< USB reset */
  151. #define GINTF_SP BIT(11) /*!< USB suspend */
  152. #define GINTF_ESP BIT(10) /*!< early suspend */
  153. #define GINTF_GONAK BIT(7) /*!< global OUT NAK effective */
  154. #define GINTF_GNPINAK BIT(6) /*!< global IN non-periodic NAK effective */
  155. #define GINTF_NPTXFEIF BIT(5) /*!< non-periodic tx FIFO empty interrupt flag */
  156. #define GINTF_RXFNEIF BIT(4) /*!< rx FIFO non-empty interrupt flag */
  157. #define GINTF_SOF BIT(3) /*!< start of frame */
  158. #define GINTF_OTGIF BIT(2) /*!< OTG interrupt flag */
  159. #define GINTF_MFIF BIT(1) /*!< mode fault interrupt flag */
  160. #define GINTF_COPM BIT(0) /*!< current operation mode */
  161. /* global interrupt enable register bits definitions */
  162. #define GINTEN_WKUPIE BIT(31) /*!< wakeup interrupt enable */
  163. #define GINTEN_SESIE BIT(30) /*!< session interrupt enable */
  164. #define GINTEN_DISCIE BIT(29) /*!< disconnect interrupt enable */
  165. #define GINTEN_IDPSCIE BIT(28) /*!< id pin status change interrupt enable */
  166. #define GINTEN_PTXFEIE BIT(26) /*!< periodic tx FIFO empty interrupt enable */
  167. #define GINTEN_HCIE BIT(25) /*!< host channels interrupt enable */
  168. #define GINTEN_HPIE BIT(24) /*!< host port interrupt enable */
  169. #define GINTEN_IPXIE BIT(21) /*!< periodic transfer not complete interrupt enable */
  170. #define GINTEN_ISOONCIE BIT(21) /*!< isochronous OUT transfer not complete interrupt enable */
  171. #define GINTEN_ISOINCIE BIT(20) /*!< isochronous IN transfer not complete interrupt enable */
  172. #define GINTEN_OEPIE BIT(19) /*!< OUT endpoints interrupt enable */
  173. #define GINTEN_IEPIE BIT(18) /*!< IN endpoints interrupt enable */
  174. #define GINTEN_EOPFIE BIT(15) /*!< end of periodic frame interrupt enable */
  175. #define GINTEN_ISOOPDIE BIT(14) /*!< isochronous OUT packet dropped interrupt enable */
  176. #define GINTEN_ENUMFIE BIT(13) /*!< enumeration finish enable */
  177. #define GINTEN_RSTIE BIT(12) /*!< USB reset interrupt enable */
  178. #define GINTEN_SPIE BIT(11) /*!< USB suspend interrupt enable */
  179. #define GINTEN_ESPIE BIT(10) /*!< early suspend interrupt enable */
  180. #define GINTEN_GONAKIE BIT(7) /*!< global OUT NAK effective interrupt enable */
  181. #define GINTEN_GNPINAKIE BIT(6) /*!< global non-periodic IN NAK effective interrupt enable */
  182. #define GINTEN_NPTXFEIE BIT(5) /*!< non-periodic Tx FIFO empty interrupt enable */
  183. #define GINTEN_RXFNEIE BIT(4) /*!< receive FIFO non-empty interrupt enable */
  184. #define GINTEN_SOFIE BIT(3) /*!< start of frame interrupt enable */
  185. #define GINTEN_OTGIE BIT(2) /*!< OTG interrupt enable */
  186. #define GINTEN_MFIE BIT(1) /*!< mode fault interrupt enable */
  187. /* global receive status read and pop register bits definitions */
  188. #define GRSTATRP_RPCKST BITS(17, 20) /*!< received packet status */
  189. #define GRSTATRP_DPID BITS(15, 16) /*!< data PID */
  190. #define GRSTATRP_BCOUNT BITS(4, 14) /*!< byte count */
  191. #define GRSTATRP_CNUM BITS(0, 3) /*!< channel number */
  192. #define GRSTATRP_EPNUM BITS(0, 3) /*!< endpoint number */
  193. /* global receive FIFO length register bits definitions */
  194. #define GRFLEN_RXFD BITS(0, 15) /*!< rx FIFO depth */
  195. /* host non-periodic transmit FIFO length register bits definitions */
  196. #define HNPTFLEN_HNPTXFD BITS(16, 31) /*!< non-periodic Tx FIFO depth */
  197. #define HNPTFLEN_HNPTXRSAR BITS(0, 15) /*!< non-periodic Tx RAM start address */
  198. /* IN endpoint 0 transmit FIFO length register bits definitions */
  199. #define DIEP0TFLEN_IEP0TXFD BITS(16, 31) /*!< IN Endpoint 0 Tx FIFO depth */
  200. #define DIEP0TFLEN_IEP0TXRSAR BITS(0, 15) /*!< IN Endpoint 0 TX RAM start address */
  201. /* host non-periodic transmit FIFO/queue status register bits definitions */
  202. #define HNPTFQSTAT_NPTXRQTOP BITS(24, 30) /*!< top entry of the non-periodic Tx request queue */
  203. #define HNPTFQSTAT_NPTXRQS BITS(16, 23) /*!< non-periodic Tx request queue space */
  204. #define HNPTFQSTAT_NPTXFS BITS(0, 15) /*!< non-periodic Tx FIFO space */
  205. #define HNPTFQSTAT_CNUM BITS(27, 30) /*!< channel number*/
  206. #define HNPTFQSTAT_EPNUM BITS(27, 30) /*!< endpoint number */
  207. #define HNPTFQSTAT_TYPE BITS(25, 26) /*!< token type */
  208. #define HNPTFQSTAT_TMF BIT(24) /*!< terminate flag */
  209. /* global core configuration register bits definitions */
  210. #define GCCFG_VBUSIG BIT(21) /*!< vbus ignored */
  211. #define GCCFG_SOFOEN BIT(20) /*!< SOF output enable */
  212. #define GCCFG_VBUSBCEN BIT(19) /*!< the VBUS B-device comparer enable */
  213. #define GCCFG_VBUSACEN BIT(18) /*!< the VBUS A-device comparer enable */
  214. #define GCCFG_PWRON BIT(16) /*!< power on */
  215. /* core ID register bits definitions */
  216. #define CID_CID BITS(0, 31) /*!< core ID */
  217. /* host periodic transmit FIFO length register bits definitions */
  218. #define HPTFLEN_HPTXFD BITS(16, 31) /*!< host periodic Tx FIFO depth */
  219. #define HPTFLEN_HPTXFSAR BITS(0, 15) /*!< host periodic Tx RAM start address */
  220. /* device IN endpoint transmit FIFO length register bits definitions */
  221. #define DIEPTFLEN_IEPTXFD BITS(16, 31) /*!< IN endpoint Tx FIFO x depth */
  222. #define DIEPTFLEN_IEPTXRSAR BITS(0, 15) /*!< IN endpoint FIFOx Tx x RAM start address */
  223. /* host control register bits definitions */
  224. #define HCTL_SPDFSLS BIT(2) /*!< speed limited to FS and LS */
  225. #define HCTL_CLKSEL BITS(0, 1) /*!< clock select for USB clock */
  226. /* host frame interval register bits definitions */
  227. #define HFT_FRI BITS(0, 15) /*!< frame interval */
  228. /* host frame information remaining register bits definitions */
  229. #define HFINFR_FRT BITS(16, 31) /*!< frame remaining time */
  230. #define HFINFR_FRNUM BITS(0, 15) /*!< frame number */
  231. /* host periodic transmit FIFO/queue status register bits definitions */
  232. #define HPTFQSTAT_PTXREQT BITS(24, 31) /*!< top entry of the periodic Tx request queue */
  233. #define HPTFQSTAT_PTXREQS BITS(16, 23) /*!< periodic Tx request queue space */
  234. #define HPTFQSTAT_PTXFS BITS(0, 15) /*!< periodic Tx FIFO space */
  235. #define HPTFQSTAT_OEFRM BIT(31) /*!< odd/eveb frame */
  236. #define HPTFQSTAT_CNUM BITS(27, 30) /*!< channel number */
  237. #define HPTFQSTAT_EPNUM BITS(27, 30) /*!< endpoint number */
  238. #define HPTFQSTAT_TYPE BITS(25, 26) /*!< token type */
  239. #define HPTFQSTAT_TMF BIT(24) /*!< terminate flag */
  240. /* host all channels interrupt register bits definitions */
  241. #define HACHINT_HACHINT BITS(0, 11) /*!< host all channel interrupts */
  242. /* host all channels interrupt enable register bits definitions */
  243. #define HACHINTEN_CINTEN BITS(0, 11) /*!< channel interrupt enable */
  244. /* host port control and status register bits definitions */
  245. #define HPCS_PS BITS(17, 18) /*!< port speed */
  246. #define HPCS_PP BIT(12) /*!< port power */
  247. #define HPCS_PLST BITS(10, 11) /*!< port line status */
  248. #define HPCS_PRST BIT(8) /*!< port reset */
  249. #define HPCS_PSP BIT(7) /*!< port suspend */
  250. #define HPCS_PREM BIT(6) /*!< port resume */
  251. #define HPCS_PEDC BIT(3) /*!< port enable/disable change */
  252. #define HPCS_PE BIT(2) /*!< port enable */
  253. #define HPCS_PCD BIT(1) /*!< port connect detected */
  254. #define HPCS_PCST BIT(0) /*!< port connect status */
  255. /* host channel-x control register bits definitions */
  256. #define HCHCTL_CEN BIT(31) /*!< channel enable */
  257. #define HCHCTL_CDIS BIT(30) /*!< channel disable */
  258. #define HCHCTL_ODDFRM BIT(29) /*!< odd frame */
  259. #define HCHCTL_DAR BITS(22, 28) /*!< device address */
  260. #define HCHCTL_MPC BITS(20, 21) /*!< multiple packet count */
  261. #define HCHCTL_EPTYPE BITS(18, 19) /*!< endpoint type */
  262. #define HCHCTL_LSD BIT(17) /*!< low-speed device */
  263. #define HCHCTL_EPDIR BIT(15) /*!< endpoint direction */
  264. #define HCHCTL_EPNUM BITS(11, 14) /*!< endpoint number */
  265. #define HCHCTL_MPL BITS(0, 10) /*!< maximum packet length */
  266. /* host channel-x split transaction register bits definitions */
  267. #define HCHSTCTL_SPLEN BIT(31) /*!< enable high-speed split transaction */
  268. #define HCHSTCTL_CSPLT BIT(16) /*!< complete-split enable */
  269. #define HCHSTCTL_ISOPCE BITS(14, 15) /*!< isochronous OUT payload continuation encoding */
  270. #define HCHSTCTL_HADDR BITS(7, 13) /*!< HUB address */
  271. #define HCHSTCTL_PADDR BITS(0, 6) /*!< port address */
  272. /* host channel-x interrupt flag register bits definitions */
  273. #define HCHINTF_DTER BIT(10) /*!< data toggle error */
  274. #define HCHINTF_REQOVR BIT(9) /*!< request queue overrun */
  275. #define HCHINTF_BBER BIT(8) /*!< babble error */
  276. #define HCHINTF_USBER BIT(7) /*!< USB bus Error */
  277. #define HCHINTF_NYET BIT(6) /*!< NYET */
  278. #define HCHINTF_ACK BIT(5) /*!< ACK */
  279. #define HCHINTF_NAK BIT(4) /*!< NAK */
  280. #define HCHINTF_STALL BIT(3) /*!< STALL */
  281. #define HCHINTF_DMAER BIT(2) /*!< DMA error */
  282. #define HCHINTF_CH BIT(1) /*!< channel halted */
  283. #define HCHINTF_TF BIT(0) /*!< transfer finished */
  284. /* host channel-x interrupt enable register bits definitions */
  285. #define HCHINTEN_DTERIE BIT(10) /*!< data toggle error interrupt enable */
  286. #define HCHINTEN_REQOVRIE BIT(9) /*!< request queue overrun interrupt enable */
  287. #define HCHINTEN_BBERIE BIT(8) /*!< babble error interrupt enable */
  288. #define HCHINTEN_USBERIE BIT(7) /*!< USB bus error interrupt enable */
  289. #define HCHINTEN_NYETIE BIT(6) /*!< NYET interrupt enable */
  290. #define HCHINTEN_ACKIE BIT(5) /*!< ACK interrupt enable */
  291. #define HCHINTEN_NAKIE BIT(4) /*!< NAK interrupt enable */
  292. #define HCHINTEN_STALLIE BIT(3) /*!< STALL interrupt enable */
  293. #define HCHINTEN_DMAERIE BIT(2) /*!< DMA error interrupt enable */
  294. #define HCHINTEN_CHIE BIT(1) /*!< channel halted interrupt enable */
  295. #define HCHINTEN_TFIE BIT(0) /*!< transfer finished interrupt enable */
  296. /* host channel-x transfer length register bits definitions */
  297. #define HCHLEN_PING BIT(31) /*!< PING token request */
  298. #define HCHLEN_DPID BITS(29, 30) /*!< data PID */
  299. #define HCHLEN_PCNT BITS(19, 28) /*!< packet count */
  300. #define HCHLEN_TLEN BITS(0, 18) /*!< transfer length */
  301. /* host channel-x DMA address register bits definitions */
  302. #define HCHDMAADDR_DMAADDR BITS(0, 31) /*!< DMA address */
  303. /* device control and status registers */
  304. /* device configuration registers bits definitions */
  305. #define DCFG_EOPFT BITS(11, 12) /*!< end of periodic frame time */
  306. #define DCFG_DAR BITS(4, 10) /*!< device address */
  307. #define DCFG_NZLSOH BIT(2) /*!< non-zero-length status OUT handshake */
  308. #define DCFG_DS BITS(0, 1) /*!< device speed */
  309. /* device control registers bits definitions */
  310. #define DCTL_POIF BIT(11) /*!< power-on initialization finished */
  311. #define DCTL_CGONAK BIT(10) /*!< clear global OUT NAK */
  312. #define DCTL_SGONAK BIT(9) /*!< set global OUT NAK */
  313. #define DCTL_CGINAK BIT(8) /*!< clear global IN NAK */
  314. #define DCTL_SGINAK BIT(7) /*!< set global IN NAK */
  315. #define DCTL_GONS BIT(3) /*!< global OUT NAK status */
  316. #define DCTL_GINS BIT(2) /*!< global IN NAK status */
  317. #define DCTL_SD BIT(1) /*!< soft disconnect */
  318. #define DCTL_RWKUP BIT(0) /*!< remote wakeup */
  319. /* device status registers bits definitions */
  320. #define DSTAT_FNRSOF BITS(8, 21) /*!< the frame number of the received SOF. */
  321. #define DSTAT_ES BITS(1, 2) /*!< enumerated speed */
  322. #define DSTAT_SPST BIT(0) /*!< suspend status */
  323. /* device IN endpoint common interrupt enable registers bits definitions */
  324. #define DIEPINTEN_NAKEN BIT(13) /*!< NAK handshake sent by USBHS interrupt enable bit */
  325. #define DIEPINTEN_TXFEEN BIT(7) /*!< transmit FIFO empty interrupt enable bit */
  326. #define DIEPINTEN_IEPNEEN BIT(6) /*!< IN endpoint NAK effective interrupt enable bit */
  327. #define DIEPINTEN_EPTXFUDEN BIT(4) /*!< endpoint Tx FIFO underrun interrupt enable bit */
  328. #define DIEPINTEN_CITOEN BIT(3) /*!< control In Timeout interrupt enable bit */
  329. #define DIEPINTEN_EPDISEN BIT(1) /*!< endpoint disabled interrupt enable bit */
  330. #define DIEPINTEN_TFEN BIT(0) /*!< transfer finished interrupt enable bit */
  331. /* device OUT endpoint common interrupt enable registers bits definitions */
  332. #define DOEPINTEN_NYETEN BIT(14) /*!< NYET handshake is sent interrupt enable bit */
  333. #define DOEPINTEN_BTBSTPEN BIT(6) /*!< back-to-back SETUP packets interrupt enable bit */
  334. #define DOEPINTEN_EPRXFOVREN BIT(4) /*!< endpoint Rx FIFO overrun interrupt enable bit */
  335. #define DOEPINTEN_STPFEN BIT(3) /*!< SETUP phase finished interrupt enable bit */
  336. #define DOEPINTEN_EPDISEN BIT(1) /*!< endpoint disabled interrupt enable bit */
  337. #define DOEPINTEN_TFEN BIT(0) /*!< transfer finished interrupt enable bit */
  338. /* device all endpoints interrupt registers bits definitions */
  339. #define DAEPINT_OEPITB BITS(16, 21) /*!< device all OUT endpoint interrupt bits */
  340. #define DAEPINT_IEPITB BITS(0, 5) /*!< device all IN endpoint interrupt bits */
  341. /* device all endpoints interrupt enable registers bits definitions */
  342. #define DAEPINTEN_OEPIE BITS(16, 21) /*!< OUT endpoint interrupt enable */
  343. #define DAEPINTEN_IEPIE BITS(0, 3) /*!< IN endpoint interrupt enable */
  344. /* device Vbus discharge time registers bits definitions */
  345. #define DVBUSDT_DVBUSDT BITS(0, 15) /*!< device VBUS discharge time */
  346. /* device Vbus pulsing time registers bits definitions */
  347. #define DVBUSPT_DVBUSPT BITS(0, 11) /*!< device VBUS pulsing time */
  348. /* device IN endpoint FIFO empty interrupt enable register bits definitions */
  349. #define DIEPFEINTEN_IEPTXFEIE BITS(0, 5) /*!< IN endpoint Tx FIFO empty interrupt enable bits */
  350. /* device endpoint 1 interrupt register bits definitions */
  351. #define DEP1INT_OEP1INT BIT(17) /*!< OUT Endpoint 1 interrupt */
  352. #define DEP1INT_IEP1INT BIT(1) /*!< IN Endpoint 1 interrupt */
  353. /* device endpoint 1 interrupt register enable bits definitions */
  354. #define DEP1INTEN_OEP1INTEN BIT(17) /*!< OUT Endpoint 1 interrupt enable */
  355. #define DEP1INTEN_IEP1INTEN BIT(1) /*!< IN Endpoint 1 interrupt enable */
  356. /* device IN endpoint 1 interrupt enable register bits definitions */
  357. #define DIEP1INTEN_NAKEN BIT(13) /*!< NAK handshake sent by USBHS interrupt enable bit */
  358. #define DIEP1INTEN_IEPNEEN BIT(6) /*!< IN endpoint NAK effective interrupt enable bit */
  359. #define DIEP1INTEN_EPTXFUDEN BIT(4) /*!< endpoint Tx FIFO underrun interrupt enable bit */
  360. #define DIEP1INTEN_CITOEN BIT(3) /*!< control In Timeout interrupt enable bit */
  361. #define DIEP1INTEN_EPDISEN BIT(1) /*!< endpoint disabled interrupt enable bit */
  362. #define DIEP1INTEN_TFEN BIT(0) /*!< transfer finished interrupt enable bit */
  363. /* device OUT endpoint 1 interrupt enable register bits definitions */
  364. #define DOEP1INTEN_NYETEN BIT(14) /*!< NYET handshake is sent interrupt enable bit */
  365. #define DOEP1INTEN_BTBSTPEN BIT(6) /*!< back-to-back SETUP packets interrupt enable bit */
  366. #define DOEP1INTEN_EPRXOVREN BIT(4) /*!< endpoint Rx FIFO over run interrupt enable bit */
  367. #define DOEP1INTEN_STPFEN BIT(3) /*!< SETUP phase finished interrupt enable bit */
  368. #define DOEP1INTEN_EPDISEN BIT(1) /*!< endpoint disabled interrupt enable bit */
  369. #define DOEP1INTEN_TFEN BIT(0) /*!< back-to-back SETUP packets interrupt enable bit */
  370. /* device endpoint 0 control register bits definitions */
  371. #define DEP0CTL_EPEN BIT(31) /*!< endpoint enable */
  372. #define DEP0CTL_EPD BIT(30) /*!< endpoint disable */
  373. #define DEP0CTL_SNAK BIT(27) /*!< set NAK */
  374. #define DEP0CTL_CNAK BIT(26) /*!< clear NAK */
  375. #define DIEP0CTL_TXFNUM BITS(22, 25) /*!< tx FIFO number */
  376. #define DEP0CTL_STALL BIT(21) /*!< STALL handshake */
  377. #define DOEP0CTL_SNOOP BIT(20) /*!< snoop mode */
  378. #define DEP0CTL_EPTYPE BITS(18, 19) /*!< endpoint type */
  379. #define DEP0CTL_NAKS BIT(17) /*!< NAK status */
  380. #define DEP0CTL_EPACT BIT(15) /*!< endpoint active */
  381. #define DEP0CTL_MPL BITS(0, 1) /*!< maximum packet length */
  382. /* device endpoint x control register bits definitions */
  383. #define DEPCTL_EPEN BIT(31) /*!< endpoint enable */
  384. #define DEPCTL_EPD BIT(30) /*!< endpoint disable */
  385. #define DEPCTL_SODDFRM BIT(29) /*!< set odd frame */
  386. #define DEPCTL_SD1PID BIT(29) /*!< set DATA1 PID */
  387. #define DEPCTL_SEVNFRM BIT(28) /*!< set even frame */
  388. #define DEPCTL_SD0PID BIT(28) /*!< set DATA0 PID */
  389. #define DEPCTL_SNAK BIT(27) /*!< set NAK */
  390. #define DEPCTL_CNAK BIT(26) /*!< clear NAK */
  391. #define DIEPCTL_TXFNUM BITS(22, 25) /*!< tx FIFO number */
  392. #define DEPCTL_STALL BIT(21) /*!< STALL handshake */
  393. #define DOEPCTL_SNOOP BIT(20) /*!< snoop mode */
  394. #define DEPCTL_EPTYPE BITS(18, 19) /*!< endpoint type */
  395. #define DEPCTL_NAKS BIT(17) /*!< NAK status */
  396. #define DEPCTL_EOFRM BIT(16) /*!< even/odd frame */
  397. #define DEPCTL_DPID BIT(16) /*!< endpoint data PID */
  398. #define DEPCTL_EPACT BIT(15) /*!< endpoint active */
  399. #define DEPCTL_MPL BITS(0, 10) /*!< maximum packet length */
  400. /* device IN endpoint-x interrupt flag register bits definitions */
  401. #define DIEPINTF_NAK BIT(13) /*!< NAK handshake sent by USBHS */
  402. #define DIEPINTF_TXFE BIT(7) /*!< transmit FIFO empty */
  403. #define DIEPINTF_IEPNE BIT(6) /*!< IN endpoint NAK effective */
  404. #define DIEPINTF_EPTXFUD BIT(4) /*!< endpoint Tx FIFO underrun */
  405. #define DIEPINTF_CITO BIT(3) /*!< control In Timeout interrupt */
  406. #define DIEPINTF_EPDIS BIT(1) /*!< endpoint disabled */
  407. #define DIEPINTF_TF BIT(0) /*!< transfer finished */
  408. /* device OUT endpoint-x interrupt flag register bits definitions */
  409. #define DOEPINTF_NYET BIT(14) /*!< NYET handshake is sent */
  410. #define DOEPINTF_BTBSTP BIT(6) /*!< back-to-back SETUP packets */
  411. #define DOEPINTF_EPRXFOVR BIT(4) /*!< endpoint Rx FIFO overrun */
  412. #define DOEPINTF_STPF BIT(3) /*!< SETUP phase finished */
  413. #define DOEPINTF_EPDIS BIT(1) /*!< endpoint disabled */
  414. #define DOEPINTF_TF BIT(0) /*!< transfer finished */
  415. /* device IN endpoint 0 transfer length register bits definitions */
  416. #define DIEP0LEN_PCNT BITS(19, 20) /*!< packet count */
  417. #define DIEP0LEN_TLEN BITS(0, 6) /*!< transfer length */
  418. /* device OUT endpoint 0 transfer length register bits definitions */
  419. #define DOEP0LEN_STPCNT BITS(29, 30) /*!< SETUP packet count */
  420. #define DOEP0LEN_PCNT BIT(19) /*!< packet count */
  421. #define DOEP0LEN_TLEN BITS(0, 6) /*!< transfer length */
  422. /* device OUT endpoint-x transfer length register bits definitions */
  423. #define DOEPLEN_RXDPID BITS(29, 30) /*!< received data PID */
  424. #define DOEPLEN_STPCNT BITS(29, 30) /*!< SETUP packet count */
  425. #define DIEPLEN_MCNT BITS(29, 30) /*!< multi count */
  426. #define DEPLEN_PCNT BITS(19, 28) /*!< packet count */
  427. #define DEPLEN_TLEN BITS(0, 18) /*!< transfer length */
  428. /* device IN endpoint-x DMA address register bits definitions */
  429. #define DIEPDMAADDR_DMAADDR BITS(0, 31) /*!< DMA address */
  430. /* device OUT endpoint-x DMA address register bits definitions */
  431. #define DOEPDMAADDR_DMAADDR BITS(0, 31) /*!< DMA address */
  432. /* device IN endpoint-x transmit FIFO status register bits definitions */
  433. #define DIEPTFSTAT_IEPTFS BITS(0, 15) /*!< IN endpoint¡¯s Tx FIFO space remaining */
  434. /* USB power and clock registers bits definition */
  435. #define PWRCLKCTL_SHCLK BIT(1) /*!< stop HCLK */
  436. #define PWRCLKCTL_SUCLK BIT(0) /*!< stop the USB clock */
  437. /* register options defines */
  438. #define DCFG_DEVSPEED(regval) (DCFG_DS & ((regval) << 0U)) /*!< device speed configuration */
  439. #define USB_SPEED_EXP_HIGH DCFG_DEVSPEED(0U) /*!< device external PHY high speed */
  440. #define USB_SPEED_EXP_FULL DCFG_DEVSPEED(1U) /*!< device external PHY full speed */
  441. #define USB_SPEED_INP_FULL DCFG_DEVSPEED(3U) /*!< device internal PHY full speed */
  442. #define GAHBCS_TFEL(regval) (GAHBCS_TXFTH & ((regval) << 7U)) /*!< device speed configuration */
  443. #define TXFIFO_EMPTY_HALF GAHBCS_TFEL(0U) /*!< Tx FIFO half empty */
  444. #define TXFIFO_EMPTY GAHBCS_TFEL(1U) /*!< Tx FIFO completely empty */
  445. #define GAHBCS_DMAINCR(regval) (GAHBCS_BURST & ((regval) << 1U)) /*!< AHB burst type used by DMA*/
  446. #define DMA_INCR0 GAHBCS_DMAINCR(0U) /*!< single burst type used by DMA*/
  447. #define DMA_INCR1 GAHBCS_DMAINCR(1U) /*!< 4-beat incrementing burst type used by DMA*/
  448. #define DMA_INCR4 GAHBCS_DMAINCR(3U) /*!< 8-beat incrementing burst type used by DMA*/
  449. #define DMA_INCR8 GAHBCS_DMAINCR(5U) /*!< 16-beat incrementing burst type used by DMA*/
  450. #define DMA_INCR16 GAHBCS_DMAINCR(7U) /*!< 32-beat incrementing burst type used by DMA*/
  451. #define DCFG_PFRI(regval) (DCFG_EOPFT & ((regval) << 11U)) /*!< end of periodic frame time configuration */
  452. #define FRAME_INTERVAL_80 DCFG_PFRI(0U) /*!< 80% of the frame time */
  453. #define FRAME_INTERVAL_85 DCFG_PFRI(1U) /*!< 85% of the frame time */
  454. #define FRAME_INTERVAL_90 DCFG_PFRI(2U) /*!< 90% of the frame time */
  455. #define FRAME_INTERVAL_95 DCFG_PFRI(3U) /*!< 95% of the frame time */
  456. #define DEP0_MPL(regval) (DEP0CTL_MPL & ((regval) << 0U)) /*!< maximum packet length configuration */
  457. #define EP0MPL_64 DEP0_MPL(0U) /*!< maximum packet length 64 bytes */
  458. #define EP0MPL_32 DEP0_MPL(1U) /*!< maximum packet length 32 bytes */
  459. #define EP0MPL_16 DEP0_MPL(2U) /*!< maximum packet length 16 bytes */
  460. #define EP0MPL_8 DEP0_MPL(3U) /*!< maximum packet length 8 bytes */
  461. /* endpoints address */
  462. /* first bit is direction(0 for Rx and 1 for Tx) */
  463. #define EP0_OUT ((uint8_t)0x00U) /*!< endpoint out 0 */
  464. #define EP0_IN ((uint8_t)0x80U) /*!< endpoint in 0 */
  465. #define EP1_OUT ((uint8_t)0x01U) /*!< endpoint out 1 */
  466. #define EP1_IN ((uint8_t)0x81U) /*!< endpoint in 1 */
  467. #define EP2_OUT ((uint8_t)0x02U) /*!< endpoint out 2 */
  468. #define EP2_IN ((uint8_t)0x82U) /*!< endpoint in 2 */
  469. #define EP3_OUT ((uint8_t)0x03U) /*!< endpoint out 3 */
  470. #define EP3_IN ((uint8_t)0x83U) /*!< endpoint in 3 */
  471. /* enable global interrupt */
  472. #define USB_GLOBAL_INT_ENABLE() (USB_GAHBCS |= GAHBCS_GINTEN)
  473. /* disable global interrupt */
  474. #define USB_GLOBAL_INT_DISABLE() (USB_GAHBCS &= ~GAHBCS_GINTEN)
  475. /* get current operation mode */
  476. #define USB_CURRENT_MODE_GET() (USB_GINTF & GINTF_COPM)
  477. /* read global interrupt flag */
  478. #define USB_CORE_INTR_READ(x) \
  479. do { \
  480. uint32_t global_intf = USB_GINTF; \
  481. (x) = global_intf & USB_GINTEN; \
  482. } while(0)
  483. /* read global interrupt flag */
  484. #define USB_DAOEP_INTR_READ(x) \
  485. do { \
  486. uint32_t dev_all_ep_inten = USB_DAEPINTEN; \
  487. uint32_t dev_all_ep_int = USB_DAEPINT; \
  488. uint32_t out_ep_intb = DAEPINT_OEPITB; \
  489. (x) = (dev_all_ep_inten & dev_all_ep_int & out_ep_intb) >> 16; \
  490. } while(0)
  491. /* read out endpoint-x interrupt flag */
  492. #define USB_DOEP_INTR_READ(x, EpID) \
  493. do { \
  494. uint32_t out_epintf = USB_DOEPxINTF(EpID); \
  495. (x) = out_epintf & USB_DOEPINTEN; \
  496. } while(0)
  497. /* read all in endpoint interrupt flag */
  498. #define USB_DAIEP_INTR_READ(x) \
  499. do { \
  500. uint32_t dev_all_ep_inten = USB_DAEPINTEN; \
  501. uint32_t dev_all_ep_int = USB_DAEPINT; \
  502. uint32_t in_ep_intb = DAEPINT_IEPITB; \
  503. (x) = dev_all_ep_inten & dev_all_ep_int & in_ep_intb; \
  504. } while(0)
  505. /* read in endpoint-x interrupt flag */
  506. #define USB_DIEP_INTR_READ(x, EpID) \
  507. do { \
  508. uint32_t dev_ep_intf = USB_DIEPxINTF(EpID); \
  509. uint32_t dev_ep_fifoempty_intf = (((USB_DIEPFEINTEN >> (EpID)) & 0x1U) << 7U); \
  510. uint32_t dev_inep_inten = USB_DIEPINTEN; \
  511. (x) = dev_ep_intf & (dev_ep_fifoempty_intf | dev_inep_inten); \
  512. } while(0)
  513. /* generate remote wakup signal */
  514. #define USB_REMOTE_WAKEUP_SET() (USB_DCTL |= DCTL_RWKUP)
  515. /* no remote wakup signal generate */
  516. #define USB_REMOTE_WAKEUP_RESET() (USB_DCTL &= ~DCTL_RWKUP)
  517. /* generate soft disconnect */
  518. #define USB_SOFT_DISCONNECT_ENABLE() (USB_DCTL |= DCTL_SD)
  519. /* no soft disconnect generate */
  520. #define USB_SOFT_DISCONNECT_DISABLE() (USB_DCTL &= ~DCTL_SD)
  521. /* set device address */
  522. #define USB_SET_DEVADDR(DevAddr) (USB_DCFG |= (DevAddr) << 4U)
  523. /* check whether frame is even */
  524. #define USB_EVEN_FRAME() (!(USB_HFINFR & 0x01U))
  525. /* read port status */
  526. #define USB_PORT_READ() (USB_HPCS & (~HPCS_PE) & (~HPCS_PCD) & (~HPCS_PEDC))
  527. /* usb clock initialize */
  528. #define USB_FSLSCLOCK_INIT(ClockFreq) (USB_HCTL &= ~HCTL_CLKSEL | (ClockFreq))
  529. /* get usb current speed */
  530. #define USB_CURRENT_SPEED_GET() ((USB_HPCS & HPCS_PS) >> 17)
  531. /* get usb current frame */
  532. #define USB_CURRENT_FRAME_GET() (USB_HFINFR & 0xFFFFU)
  533. #endif /* USB_REGS_H */