ch585_usbhs_reg.h 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450
  1. #pragma once
  2. /**********************************/
  3. /*********USB high speed**********/
  4. /**********************************/
  5. typedef volatile unsigned short *PUINT16V;
  6. typedef volatile unsigned long *PUINT32V;
  7. typedef volatile unsigned char *PUINT8V;
  8. /* USB high speed device register */
  9. #define R8_USB2_CTRL (*((PUINT8V)0x40009000)) // RW, USB_high_speed control register
  10. #define USBHS_UD_LPM_EN 0x80 // RW, enable LPM
  11. #define USBHS_UD_DEV_EN 0x20 // RW, enable USB equipment
  12. #define USBHS_UD_DMA_EN 0x10 // RW, enable DMA transmit
  13. #define USBHS_UD_PHY_SUSPENDM 0x08 // RW, suspeng USB PHY
  14. #define USBHS_UD_CLR_ALL 0x04 // RW, clear all interupt flag
  15. #define USBHS_UD_RST_SIE 0x02 // RW, reset USB protocol processor,including end point register
  16. #define USBHS_UD_RST_LINK 0x01 // RW, enable LNK layer reset
  17. #define R8_USB2_BASE_MODE (*((PUINT8V)0x40009001)) // RW, USB_high_speed mode control register
  18. #define USBHS_UD_SPEED_FULL 0x00
  19. #define USBHS_UD_SPEED_HIGH 0x01
  20. #define USBHS_UD_SPEED_LOW 0x02
  21. #define USBHS_UD_SPEED_TYPE 0x03 // RW, speed mode excpeted by the equipment,00:full speed, 01:high speed, 10:low speed
  22. #define R8_USB2_INT_EN (*((PUINT8V)0x40009002)) // RW, USB_high_speed intreurpt enable register
  23. #define USBHS_UDIE_FIFO_OVER 0x80 // RW, enable fifo overflow interupt
  24. #define USBHS_UDIE_LINK_RDY 0x40 // RW, enable USB conect interupt
  25. #define USBHS_UDIE_SOF_ACT 0x20 // RW, enable SOF package received interupt
  26. #define USBHS_UDIE_TRANSFER 0x10 // RW, enable USB transmit end interupt
  27. #define USBHS_UDIE_LPM_ACT 0x08 // RW, enable lpm transmit end interupt
  28. #define USBHS_UDIE_BUS_SLEEP 0x04 // RW, enable usb bus sleep interupt
  29. #define USBHS_UDIE_SUSPEND 0x02 // RW, enable usb bus suspend interupt
  30. #define USBHS_UDIE_BUS_RST 0x01 // RW, enable usb bus reset interupt
  31. #define R8_USB2_DEV_AD (*((PUINT8V)0x40009003)) // RW, USB_high_speed device adress register
  32. #define USBHS_UD_DEV_ADDR 0x7F // RW, adress of usb equipment
  33. #define R8_USB2_WAKE_CTRL (*((PUINT8V)0x40009004)) // RW, USB_high_speed wake up remotely register
  34. #define USBHS_UD_UD_REMOTE_WKUP 0x01 // RW1, wake up remotely and auto reset hardware
  35. #define R8_USB2_TEST_MODE (*((PUINT8V)0x40009005)) // RW, USB_high_speed test mode register
  36. #define USBHS_UD_TEST_EN 0x80 // RW, enable test mode
  37. #define USBHS_UD_TEST_SE0NAK 0x08 // RW, output SE0 when in test mode
  38. #define USBHS_UD_TEST_PKT 0x04 // RW, output one package(including DATA0,data and length of end pont4) when in test mode,not work on virtual equipment
  39. #define USBHS_UD_TEST_K 0x02 // RW, output K when in test mode
  40. #define USBHS_UD_TEST_J 0x01 // RW, output J when in test mode
  41. #define R16_USB2_LPM_DATA (*((PUINT16V)0x40009006)) // RW, USB_high_speed power control register
  42. #define USBHS_UD_LPM_BUSY 0x8000 // RW, power control busy
  43. #define USBHS_UD_LPM_DATA 0x07FF // RO, power control data
  44. #define R8_USB2_INT_FG (*((PUINT8V)0x40009008)) // RW, USB_high_speed interupt flag register
  45. #define USBHS_UDIF_FIFO_OV 0x80 // RW1, clear fifo overflow interupt flag
  46. #define USBHS_UDIF_LINK_RDY 0x40 // RW1, clear USB conect interupt flag
  47. #define USBHS_UDIF_RX_SOF 0x20 // RW1, clear SOF package received interupt flag
  48. #define USBHS_UDIF_TRANSFER 0x10 // RO, USB transmit end interupt flag,cleared by USBHS_UDMS_HS_MOD
  49. #define USBHS_UDIF_LPM_ACT 0x08 // RW1, clear lpm transmit end interupt flag
  50. #define USBHS_UDIF_BUS_SLEEP 0x04 // RW1, clear usb bus sleep interupt flag
  51. #define USBHS_UDIF_SUSPEND 0x02 // RW1, clear usb bus suspend interupt flag
  52. #define USBHS_UDIF_BUS_RST 0x01 // RW1, clear usb bus reset interupt flag
  53. #define R8_USB2_INT_ST (*((PUINT8V)0x40009009)) // RW, USB_high_speed interupt status register
  54. #define USBHS_UDIS_EP_DIR 0x10 // RO, end point tranfer diector of data
  55. #define USBHS_UDIS_EP_ID_MASK 0x07 // RO, number of end point which data transmission occured
  56. #define R8_USB2_MIS_ST (*((PUINT8V)0x4000900A)) // RW, USB_high_speed miscellaneous register
  57. #define USBHS_UDMS_HS_MOD 0x80 // RO, host with high speed
  58. #define USBHS_UDMS_SUSP_REQ 0x10 // RO, requirment of suspending USB
  59. #define USBHS_UDMS_SIE_FREE 0x08 // RO, USB free state
  60. #define USBHS_UDMS_SLEEP 0x04 // RO, USB sleep state
  61. #define USBHS_UDMS_SUSPEND 0x02 // RO, USB in suspend state
  62. #define USBHS_UDMS_READY 0x01 // RO, USB in connected state
  63. #define R16_USB2_FRAME_NO (*((PUINT16V)0x4000900C)) // RW, USB_high_speed frame number register
  64. #define USBHS_UD_MFRAME_NO 0xE000
  65. #define USBHS_UD_FRAME_NO 0x07FF
  66. #define R16_USB2_BUS (*((PUINT16V)0x4000900E)) // RW, USB_high_speed bus status register
  67. #define USBHS_USB_DM_ST 0x08
  68. #define USBHS_USB_DP_ST 0x04
  69. #define USB_WAKEUP 0x01
  70. #define R16_U2EP_TX_EN (*((PUINT16V)0x40009010)) // RW, USB_high_speed end point transmit enable register
  71. /* Bit definition for R16_U2EP_TX_EN & R16_U2EP_RX_EN register */
  72. #define RB_EP0_EN 0x0001
  73. #define RB_EP1_EN 0x0002
  74. #define RB_EP2_EN 0x0004
  75. #define RB_EP3_EN 0x0008
  76. #define RB_EP4_EN 0x0010
  77. #define RB_EP5_EN 0x0020
  78. #define RB_EP6_EN 0x0040
  79. #define RB_EP7_EN 0x0080
  80. #define RB_EP8_EN 0x0100
  81. #define RB_EP9_EN 0x0200
  82. #define RB_EP10_EN 0x0400
  83. #define RB_EP11_EN 0x0800
  84. #define RB_EP12_EN 0x1000
  85. #define RB_EP13_EN 0x2000
  86. #define RB_EP14_EN 0x4000
  87. #define RB_EP15_EN 0x8000
  88. #define R16_U2EP_RX_EN (*((PUINT16V)0x40009012)) // RW, USB_high_speed end point receive enableregister
  89. #define USBHS_UEP_RX_EN 0xFFFF
  90. #define R16_U2EP_T_TOG_AUTO (*((PUINT16V)0x40009014)) // RW, USB_high_speed end point transmit auto toggle enable register
  91. #define USBHS_UEP_T_TOG_AUTO 0xFF
  92. #define R16_U2EP_R_TOG_AUTO (*((PUINT16V)0x40009016)) // RW, USB_high_speed end point receive auto toggle enable register
  93. #define USBHS_UEP_R_TOG_AUTO 0xFF
  94. #define R8_U2EP_T_BURST (*((PUINT8V)0x40009018)) // RW, USB_high_speed end point transmit burst register
  95. #define USBHS_UEP_T_BURST_EN 0xFF
  96. #define R8_U2EP_T_BURST_MODE (*((PUINT8V)0x40009019)) // RW, USB_high_speed end point transmit burst mode register
  97. #define USBHS_UEP_T_BURST_MODE 0xFF
  98. #define R8_U2EP_R_BURST (*((PUINT8V)0x4000901A)) // RW, USB_high_speed end point receive burst register
  99. #define USBHS_UEP_R_BURST_EN 0xFF
  100. #define R8_U2EP_R_RES_MODE (*((PUINT8V)0x4000901B)) // RW, USB_high_speed end point transmit reply mode register
  101. #define USBHS_UEP_R_RES_MODE 0xFF
  102. #define R32_U2EP_AF_MODE (*((PUINT32V)0x4000901C)) // RW, USB_high_speed end point multiplexing register
  103. #define USBHS_UEP_T_AF 0xFE
  104. #define R32_U2EP0_DMA (*((PUINT32V)0x40009020)) // RW, USB_high_speed end point0 begin adress of DMA buffer register
  105. #define UEPn_DMA 0x01FFFF
  106. #define R32_U2EP1_RX_DMA (*((PUINT32V)0x40009024)) // RW, USB_high_speed end point1 begin adress of DMA receive buffer register
  107. #define R32_U2EP2_RX_DMA (*((PUINT32V)0x40009028)) // RW, USB_high_speed end point2 begin adress of DMA receive buffer register
  108. #define R32_U2EP3_RX_DMA (*((PUINT32V)0x4000902C)) // RW, USB_high_speed end point3 begin adress of DMA receive buffer register
  109. #define R32_U2EP4_RX_DMA (*((PUINT32V)0x40009030)) // RW, USB_high_speed end point4 begin adress of DMA receive buffer register
  110. #define R32_U2EP5_RX_DMA (*((PUINT32V)0x40009034)) // RW, USB_high_speed end point5 begin adress of DMA receive buffer register
  111. #define R32_U2EP6_RX_DMA (*((PUINT32V)0x40009038)) // RW, USB_high_speed end point6 begin adress of DMA receive buffer register
  112. #define R32_U2EP7_RX_DMA (*((PUINT32V)0x4000903C)) // RW, USB_high_speed end point7 begin adress of DMA receive buffer register
  113. #define UEPn_RX_DMA 0x01FFFF
  114. #define R32_U2EP1_TX_DMA (*((PUINT32V)0x40009040)) // RW, USB_high_speed end point1 begin adress of DMA transmit buffer register
  115. #define R32_U2EP2_TX_DMA (*((PUINT32V)0x40009044)) // RW, USB_high_speed end point2 begin adress of DMA transmit buffer register
  116. #define R32_U2EP3_TX_DMA (*((PUINT32V)0x40009048)) // RW, USB_high_speed end point3 begin adress of DMA transmit buffer register
  117. #define R32_U2EP4_TX_DMA (*((PUINT32V)0x4000904C)) // RW, USB_high_speed end point4 begin adress of DMA transmit buffer register
  118. #define R32_U2EP5_TX_DMA (*((PUINT32V)0x40009050)) // RW, USB_high_speed end point5 begin adress of DMA transmit buffer register
  119. #define R32_U2EP6_TX_DMA (*((PUINT32V)0x40009054)) // RW, USB_high_speed end point6 begin adress of DMA transmit buffer register
  120. #define R32_U2EP7_TX_DMA (*((PUINT32V)0x40009058)) // RW, USB_high_speed end point7 begin adress of DMA transmit buffer register
  121. #define UEPn_TX_DMA 0x01FFFF
  122. #define R32_U2EP0_MAX_LEN (*((PUINT32V)0x4000905C)) // RW, USB_high_speed end point0 max length package register
  123. #define R32_U2EP1_MAX_LEN (*((PUINT32V)0x40009060)) // RW, USB_high_speed end point1 max length package register
  124. #define R32_U2EP2_MAX_LEN (*((PUINT32V)0x40009064)) // RW, USB_high_speed end point2 max length package register
  125. #define R32_U2EP3_MAX_LEN (*((PUINT32V)0x40009068)) // RW, USB_high_speed end point3 max length package register
  126. #define R32_U2EP4_MAX_LEN (*((PUINT32V)0x4000906C)) // RW, USB_high_speed end point4 max length package register
  127. #define R32_U2EP5_MAX_LEN (*((PUINT32V)0x40009070)) // RW, USB_high_speed end point5 max length package register
  128. #define R32_U2EP6_MAX_LEN (*((PUINT32V)0x40009074)) // RW, USB_high_speed end point6 max length package register
  129. #define R32_U2EP7_MAX_LEN (*((PUINT32V)0x40009078)) // RW, USB_high_speed end point7 max length package register
  130. #define UEPn_MAX_LEN 0x007F
  131. #define R16_U2EP0_RX_LEN (*((PUINT16V)0x4000907C)) // RW, USB_high_speed end point0 length of receive register
  132. #define UEP0_RX_LEN 0x007F
  133. #define R16_U2EP1_RX_LEN (*((PUINT16V)0x40009080)) // RW, USB_high_speed end point1 single received length register
  134. #define R16_U2EP1_R_SIZE (*((PUINT16V)0x40009082)) // RW, USB_high_speed end point1 total received length register
  135. #define R16_U2EP2_RX_LEN (*((PUINT16V)0x40009084)) // RW, USB_high_speed end point2 single received length register
  136. #define R16_U2EP2_R_SIZE (*((PUINT16V)0x40009086)) // RW, USB_high_speed end point2 total received length register
  137. #define R16_U2EP3_RX_LEN (*((PUINT16V)0x40009088)) // RW, USB_high_speed end point3 single received length register
  138. #define R16_U2EP3_R_SIZE (*((PUINT16V)0x4000908A)) // RW, USB_high_speed end point3 total received length register
  139. #define R16_U2EP4_RX_LEN (*((PUINT16V)0x4000908C)) // RW, USB_high_speed end point4 single received length register
  140. #define R16_U2EP4_R_SIZE (*((PUINT16V)0x4000908E)) // RW, USB_high_speed end point4 total received length register
  141. #define R16_U2EP5_RX_LEN (*((PUINT16V)0x40009090)) // RW, USB_high_speed end point5 single received length register
  142. #define R16_U2EP5_R_SIZE (*((PUINT16V)0x40009092)) // RW, USB_high_speed end point5 total received length register
  143. #define R16_U2EP6_RX_LEN (*((PUINT16V)0x40009094)) // RW, USB_high_speed end point6 single received length register
  144. #define R16_U2EP6_R_SIZE (*((PUINT16V)0x40009096)) // RW, USB_high_speed end point6 total received length register
  145. #define R16_U2EP7_RX_LEN (*((PUINT16V)0x40009098)) // RW, USB_high_speed end point7 single received length register
  146. #define R16_U2EP7_R_SIZE (*((PUINT16V)0x4000909A)) // RW, USB_high_speed end point7 total received length register
  147. #define UEPn_RX_LEN 0xFFFF
  148. #define UEPn_R_SIZE 0xFFFF
  149. #define R16_U2EP0_T_LEN (*((PUINT16V)0x4000909C)) // RW, USB_high_speed end point0 length of transmission register
  150. #define UEP0_T_LEN 0x7F
  151. #define R8_U2EP0_TX_CTRL (*((PUINT8V)0x4000909E)) // RW, USB_high_speed end point0 transmit control register
  152. #define R8_U2EP0_RX_CTRL (*((PUINT8V)0x4000909F)) // RW, USB_high_speed end point0 receive control register
  153. #define R16_U2EP1_T_LEN (*((PUINT16V)0x400090A0)) // RW, USB_high_speed end point1 length of transmission register
  154. #define R8_U2EP1_TX_CTRL (*((PUINT8V)0x400090A2)) // RW, USB_high_speed end point1 transmit control register
  155. #define R8_U2EP1_RX_CTRL (*((PUINT8V)0x400090A3)) // RW, USB_high_speed end point1 receive control register
  156. #define R16_U2EP2_T_LEN (*((PUINT16V)0x400090A4)) // RW, USB_high_speed end point2 length of transmission register
  157. #define R8_U2EP2_TX_CTRL (*((PUINT8V)0x400090A6)) // RW, USB_high_speed end point2 transmit control register
  158. #define R8_U2EP2_RX_CTRL (*((PUINT8V)0x400090A7)) // RW, USB_high_speed end point2 receive control register
  159. #define R16_U2EP3_T_LEN (*((PUINT16V)0x400090A8)) // RW, USB_high_speed end point3 length of transmission register
  160. #define R8_U2EP3_TX_CTRL (*((PUINT8V)0x400090AA)) // RW, USB_high_speed end point3 transmit control register
  161. #define R8_U2EP3_RX_CTRL (*((PUINT8V)0x400090AB)) // RW, USB_high_speed end point3 receive control register
  162. #define R16_U2EP4_T_LEN (*((PUINT16V)0x400090AC)) // RW, USB_high_speed end point4 length of transmission register
  163. #define R8_U2EP4_TX_CTRL (*((PUINT8V)0x400090AE)) // RW, USB_high_speed end point4 transmit control register
  164. #define R8_U2EP4_RX_CTRL (*((PUINT8V)0x400090AF)) // RW, USB_high_speed end point4 receive control register
  165. #define R16_U2EP5_T_LEN (*((PUINT16V)0x400090B0)) // RW, USB_high_speed end point5 length of transmission register
  166. #define R8_U2EP5_TX_CTRL (*((PUINT8V)0x400090B2)) // RW, USB_high_speed end point5 transmit control register
  167. #define R8_U2EP5_RX_CTRL (*((PUINT8V)0x400090B3)) // RW, USB_high_speed end point5 receive control register
  168. #define R16_U2EP6_T_LEN (*((PUINT16V)0x400090B4)) // RW, USB_high_speed end point6 length of transmission register
  169. #define R8_U2EP6_TX_CTRL (*((PUINT8V)0x400090B6)) // RW, USB_high_speed end point6 transmit control register
  170. #define R8_U2EP6_RX_CTRL (*((PUINT8V)0x400090B7)) // RW, USB_high_speed end point6 receive control register
  171. #define R16_U2EP7_T_LEN (*((PUINT16V)0x400090B8)) // RW, USB_high_speed end point7 length of transmission register
  172. #define R8_U2EP7_TX_CTRL (*((PUINT8V)0x400090BA)) // RW, USB_high_speed end point7 transmit control register
  173. #define R8_U2EP7_RX_CTRL (*((PUINT8V)0x400090BB)) // RW, USB_high_speed end point7 receive control register
  174. /**R16_UEPn_T_LEN**/
  175. #define UEPn_T_LEN 0xFFFF
  176. /**R8_UEPn_TX_CTRL**/
  177. #define USBHS_UEP_T_DONE 0x80
  178. #define USBHS_UEP_T_NAK_ACT 0x40
  179. #define USBHS_UEP_T_TOG_MASK 0x0C
  180. #define USBHS_UEP_T_TOG_MDATA 0x0C
  181. #define USBHS_UEP_T_TOG_DATA2 0x08
  182. #define USBHS_UEP_T_TOG_DATA1 0x04
  183. #define USBHS_UEP_T_TOG_DATA0 0x00
  184. #define USBHS_UEP_T_RES_MASK 0x03
  185. #define USBHS_UEP_T_RES_ACK 0x02
  186. #define USBHS_UEP_T_RES_STALL 0x01
  187. #define USBHS_UEP_T_RES_NAK 0x00
  188. /**R8_UEPn_RX_CTRL**/
  189. #define USBHS_UEP_R_DONE 0x80
  190. #define USBHS_UEP_R_NAK_ACT 0x40
  191. #define USBHS_UEP_R_NAK_TOG 0x20
  192. #define USBHS_UEP_R_TOG_MATCH 0x10
  193. #define USBHS_UEP_R_SETUP_IS 0x08
  194. #define USBHS_UEP_R_TOG_MASK 0x0C
  195. #define USBHS_UEP_R_TOG_MDATA 0x0C
  196. #define USBHS_UEP_R_TOG_DATA2 0x08
  197. #define USBHS_UEP_R_TOG_DATA1 0x04
  198. #define USBHS_UEP_R_TOG_DATA0 0x00
  199. #define USBHS_UEP_R_RES_MASK 0x03
  200. #define USBHS_UEP_R_RES_ACK 0x02
  201. #define USBHS_UEP_R_RES_STALL 0x01
  202. #define USBHS_UEP_R_RES_NAK 0x00
  203. #define R16_U2EP_T_ISO (*((PUINT16V)0x400090BC)) // RW, USB_high_speed end point transmit sync mode register
  204. #define USBHS_UEP1_T_ISO_EN 0x02
  205. #define USBHS_UEP2_T_ISO_EN 0x04
  206. #define USBHS_UEP3_T_ISO_EN 0x08
  207. #define USBHS_UEP4_T_ISO_EN 0x10
  208. #define USBHS_UEP5_T_ISO_EN 0x20
  209. #define USBHS_UEP6_T_ISO_EN 0x40
  210. #define USBHS_UEP7_T_ISO_EN 0x80
  211. #define R16_U2EP_R_ISO (*((PUINT16V)0x400090BE)) // RW, USB_high_speed end point receive sync mode register
  212. #define USBHS_UEP1_R_ISO_EN 0x02
  213. #define USBHS_UEP2_R_ISO_EN 0x04
  214. #define USBHS_UEP3_R_ISO_EN 0x08
  215. #define USBHS_UEP4_R_ISO_EN 0x10
  216. #define USBHS_UEP5_R_ISO_EN 0x20
  217. #define USBHS_UEP6_R_ISO_EN 0x40
  218. #define USBHS_UEP7_R_ISO_EN 0x80
  219. /* USB high speed host register */
  220. #define R8_U2H_CFG (*((PUINT8V)0x40009100)) // RW, USB_high_speed register
  221. #define USBHS_UH_LPM_EN 0x80
  222. #define USBHS_UH_FORCE_FS 0x40
  223. #define USBHS_UH_SOF_EN 0x20
  224. #define USBHS_UH_DMA_EN 0x10
  225. #define USBHS_UH_PHY_SUSPENDM 0x08
  226. #define USBHS_UH_CLR_ALL 0x04
  227. #define USBHS_RST_SIE 0x02
  228. #define USBHS_RST_LINK 0x01
  229. #define R8_U2H_INT_EN (*((PUINT8V)0x40009102)) // RW, USB_high_speed register
  230. #define USBHS_UHIE_FIFO_OVER 0x80
  231. #define USBHS_UHIE_TX_HALT 0x40
  232. #define USBHS_UHIE_SOF_ACT 0x20
  233. #define USBHS_UHIE_TRANSFER 0x10
  234. #define USBHS_UHIE_RESUME_ACT 0x08
  235. #define USBHS_UHIE_WKUP_ACT 0x04
  236. #define R8_U2H_DEV_AD (*((PUINT8V)0x40009103)) // RW, USB_high_speed register
  237. #define USBHS_UH_DEV_ADDR 0xFF
  238. #define R32_U2H_CONTROL (*((PUINT32V)0x40009104)) // RW, USB_high_speed register
  239. #define USBHS_UH_RX_NO_RES 0x800000
  240. #define USBHS_UH_TX_NO_RES 0x400000
  241. #define USBHS_UH_RX_NO_DATA 0x200000
  242. #define USBHS_UH_TX_NO_DATA 0x100000
  243. #define USBHS_UH_PRE_PID_EN 0x080000
  244. #define USBHS_UH_SPLIT_VALID 0x040000
  245. #define USBHS_UH_LPM_VALID 0x020000
  246. #define USBHS_UH_HOST_ACTION 0x010000
  247. #define USBHS_UH_BUF_MODE 0x0400
  248. #define USBHS_UH_T_TOG_MASK 0x0300
  249. #define USBHS_UH_T_TOG_MDATA 0x0300
  250. #define USBHS_UH_T_TOG_DATA2 0x0200
  251. #define USBHS_UH_T_TOG_DATA1 0x0100
  252. #define USBHS_UH_T_TOG_DATA0 0x0000
  253. #define USBHS_UH_T_ENDP_MASK 0xF0
  254. #define USBHS_UH_T_TOKEN_MASK 0x0F
  255. #define R8_U2H_INT_FLAG (*((PUINT8V)0x40009108)) // RW, USB_high_speed register
  256. #define USBHS_UHIF_FIFO_OVER 0x80
  257. #define USBHS_UHIF_TX_HALT 0x40
  258. #define USBHS_UHIF_SOF_ACT 0x20
  259. #define USBHS_UHIF_TRANSFER 0x10
  260. #define USBHS_UHIF_RESUME_ACT 0x08
  261. #define USBHS_UHIF_WKUP_ACT 0x04
  262. #define R8_U2H_INT_ST (*((PUINT8V)0x40009109)) // RW, USB_high_speed register
  263. #define USBHS_UHIF_PORT_RX_RESUME 0x10
  264. #define USBHS_UH_R_TOKEN_MASK 0x0F
  265. #define R8_U2H_MIS_ST (*((PUINT8V)0x4000910A)) // RW, USB_high_speed register
  266. #define USBHS_UHMS_BUS_SE0 0x80
  267. #define USBHS_UHMS_BUS_J 0x40
  268. #define USBHS_UHMS_LINESTATE 0x30
  269. #define USBHS_UHMS_USB_WAKEUP 0x08
  270. #define USBHS_UHMS_SOF_ACT 0x04
  271. #define USBHS_UHMS_SOF_PRE 0x02
  272. #define USBHS_UHMS_SOF_FREE 0x01
  273. #define R32_U2H_LPM_DATA (*((PUINT32V)0x4000910C)) // RW, USB_high_speed register
  274. #define USBHS_UH_LPM_DATA 0x07FF
  275. #define R32_U2H_SPLIT_DATA (*((PUINT32V)0x40009110)) // RW, USB_high_speed register
  276. #define USBHS_UH_SPLIT_DATA 0x07FFFF
  277. #define R32_U2H_FRAME (*((PUINT32V)0x40009114)) // RW, USB_high_speed register
  278. #define USBHS_UH_SOF_CNT_CLR 0x02000000
  279. #define USBHS_UH_SOF_CNT_EN 0x01000000
  280. #define USBHS_UH_MFRAME_NO 0x070000
  281. #define USBHS_UH_FRAME_NO 0x07FF
  282. #define R32_U2H_TX_LEN (*((PUINT32V)0x40009118)) // RW, USB_high_speed register
  283. #define USBHS_UH_TX_LEN 0x07FF
  284. #define R32_U2H_RX_LEN (*((PUINT32V)0x4000911C)) // RW, USB_high_speed register
  285. #define USBHS_UH_RX_LEN 0x07FF
  286. #define R32_U2H_RX_MAX_LEN (*((PUINT32V)0x40009120)) // RW, USB_high_speed register
  287. #define USBHS_UH_RX_MAX_LEN 0x07FF
  288. #define R32_U2H_RX_DMA (*((PUINT32V)0x40009124)) // RW, USB_high_speed register
  289. #define USBHS_R32_UH_RX_DMA 0x01FFFF
  290. #define R32_U2H_TX_DMA (*((PUINT32V)0x40009128)) // RW, USB_high_speed register
  291. #define USBHS_R32_UH_TX_DMA 0x01FFFF
  292. #define R32_U2H_PORT_CTRL (*((PUINT32V)0x4000912C)) // RW, USB_high_speed register
  293. #define USBHS_UH_BUS_RST_LONG 0x010000
  294. #define USBHS_UH_PORT_SLEEP_BESL 0xF000
  295. #define USBHS_UH_CLR_PORT_SLEEP 0x0100
  296. #define USBHS_UH_CLR_PORT_CONNECT 0x20
  297. #define USBHS_UH_CLR_PORT_EN 0x10
  298. #define USBHS_UH_SET_PORT_SLEEP 0x08
  299. #define USBHS_UH_CLR_PORT_SUSP 0x04
  300. #define USBHS_UH_SET_PORT_SUSP 0x02
  301. #define USBHS_UH_SET_PORT_RESET 0x01
  302. #define R8_U2H_PORT_CFG (*((PUINT8V)0x40009130)) // RW, USB_high_speed register
  303. #define USBHS_UH_PD_EN 0x80
  304. #define USBHS_UH_HOST_EN 0x01
  305. #define R8_U2H_PORT_INT_EN (*((PUINT8V)0x40009132)) // RW, USB_high_speed register
  306. #define USBHS_UHIE_PORT_SLP 0x20
  307. #define USBHS_UHIE_PORT_RESET 0x10
  308. #define USBHS_UHIE_PORT_SUSP 0x04
  309. #define USBHS_UHIE_PORT_EN 0x02
  310. #define USBHS_UHIE_PORT_CONNECT 0x01
  311. #define R8_U2H_PORT_TEST_CT (*((PUINT8V)0x40009133)) // RW, USB_high_speed register
  312. #define USBHS_UH_TEST_FORCE_EN 0x04
  313. #define USBHS_UH_TEST_K 0x02
  314. #define USBHS_UH_TEST_J 0x01
  315. #define R16_U2H_PORT_ST (*((PUINT16V)0x40009134)) // RW, USB_high_speed register
  316. #define USBHS_UHIS_PORT_TEST 0x0800
  317. #define USBHS_UHIS_PORT_SPEED_MASK 0x0600
  318. #define USBHS_UHIS_PORT_HS 0x0400
  319. #define USBHS_UHIS_PORT_LS 0x0200
  320. #define USBHS_UHIS_PORT_FS 0x0000
  321. #define USBHS_UHIS_PORT_SLP 0x20
  322. #define USBHS_UHIS_PORT_RST 0x10
  323. #define USBHS_UHIS_PORT_SUSP 0x04
  324. #define USBHS_UHIS_PORT_EN 0x02
  325. #define USBHS_UHIS_PORT_CONNECT 0x01
  326. #define R8_U2H_PORT_CHG (*((PUINT8V)0x40009136))
  327. #define USBHS_UHIF_PORT_SLP 0x20
  328. #define USBHS_UHIF_PORT_RESET 0x10
  329. #define USBHS_UHIF_PORT_SUSP 0x04
  330. #define USBHS_UHIF_PORT_EN 0x02
  331. #define USBHS_UHIF_PORT_CONNECT 0x01
  332. #define R32_U2H_BC_CTRL (*((PUINT32V)0x4000913C))
  333. #define UDM_VSRC_ACT 0x0400
  334. #define UDM_BC_VSRC 0x0200
  335. #define UDP_BC_VSRC 0x0100
  336. #define BC_AUTO_MODE 0x40
  337. #define UDM_BC_CMPE 0x20
  338. #define UDP_BC_CMPE 0x10
  339. #define UDM_BC_CMPO 0x02
  340. #define UDP_BC_CMPO 0x01
  341. #define R8_USBHS_PLL_CTRL (*((PUINT8V)0x40009200))
  342. #define USBHS_PLL_EN 0x04
  343. #define USBHS_PLL_LOWPOW 0x02
  344. #define USBHS_PLL_CKSEL 0x01
  345. #define __IO volatile /* defines 'read / write' permissions */
  346. typedef struct
  347. {
  348. __IO uint8_t CONTROL; /* 0x40009000 */
  349. __IO uint8_t BASE_MODE; /* 0x40009001 */
  350. __IO uint8_t INT_EN; /* 0x40009002 */
  351. __IO uint8_t DEV_AD; /* 0x40009003 */
  352. __IO uint8_t WAKE_CTRL; /* 0x40009004 远程唤醒寄存器 */
  353. __IO uint8_t TEST_MODE; /* 0x40009005 测试模式寄存器 */
  354. __IO uint16_t LPM_DATA; /* 0x40009006 */
  355. __IO uint8_t INT_FG; /* 0x40009008 */
  356. __IO uint8_t INT_ST; /* 0x40009009 */
  357. __IO uint8_t MIS_ST; /* 0x4000900a */
  358. __IO uint8_t RESERVE0; /* 0x4000900b */
  359. __IO uint16_t FRAME_NO; /* 0x4000900c */
  360. __IO uint16_t USB_BUS; /* 0x4000900e */
  361. __IO uint16_t UEP_TX_EN; /* 0x40009010 */
  362. __IO uint16_t UEP_RX_EN; /* 0x40009012 */
  363. __IO uint16_t UEP_T_TOG_AUTO; /* 0x40009014 */
  364. __IO uint16_t UEP_R_TOG_AUTO; /* 0x40009016 */
  365. __IO uint8_t UEP_T_BURST; /* 0x40009018 */
  366. __IO uint8_t UEP_T_BURST_MODE; /* 0x40009019 */
  367. __IO uint8_t UEP_R_BURST; /* 0x4000901a */
  368. __IO uint8_t UEP_R_RES_MODE; /* 0x4000901b */
  369. __IO uint32_t UEP_AF_MODE; /* 0x4000901c */
  370. __IO uint32_t UEP0_DMA; /* 0x40009020 */
  371. __IO uint32_t UEP1_RX_DMA; /* 0x40009024 */
  372. __IO uint32_t UEP2_RX_DMA; /* 0x40009028 */
  373. __IO uint32_t UEP3_RX_DMA; /* 0x4000902c */
  374. __IO uint32_t UEP4_RX_DMA; /* 0x40009030 */
  375. __IO uint32_t UEP5_RX_DMA; /* 0x40009034 */
  376. __IO uint32_t UEP6_RX_DMA; /* 0x40009038 */
  377. __IO uint32_t UEP7_RX_DMA; /* 0x4000903c */
  378. __IO uint32_t UEP1_TX_DMA; /* 0x40009040 */
  379. __IO uint32_t UEP2_TX_DMA; /* 0x40009044 */
  380. __IO uint32_t UEP3_TX_DMA; /* 0x40009048 */
  381. __IO uint32_t UEP4_TX_DMA; /* 0x4000904c */
  382. __IO uint32_t UEP5_TX_DMA; /* 0x40009050 */
  383. __IO uint32_t UEP6_TX_DMA; /* 0x40009054 */
  384. __IO uint32_t UEP7_TX_DMA; /* 0x40009058 */
  385. __IO uint32_t UEP0_MAX_LEN; /* 0x4000905c */
  386. __IO uint32_t UEP1_MAX_LEN; /* 0x40009060 */
  387. __IO uint32_t UEP2_MAX_LEN; /* 0x40009064 */
  388. __IO uint32_t UEP3_MAX_LEN; /* 0x40009068 */
  389. __IO uint32_t UEP4_MAX_LEN; /* 0x4000906c */
  390. __IO uint32_t UEP5_MAX_LEN; /* 0x40009070 */
  391. __IO uint32_t UEP6_MAX_LEN; /* 0x40009074 */
  392. __IO uint32_t UEP7_MAX_LEN; /* 0x40009078 */
  393. __IO uint16_t USB_EP0_RX_LEN; /* 0x4000907c */
  394. __IO uint16_t RESERVE1; /* 0x4000907e */
  395. __IO uint16_t UEP1_RX_LEN; /* 0x40009080 */
  396. __IO uint16_t UEP1_R_SIZE; /* 0x40009082 */
  397. __IO uint16_t UEP2_RX_LEN; /* 0x40009084 */
  398. __IO uint16_t UEP2_R_SIZE; /* 0x40009086 */
  399. __IO uint16_t UEP3_RX_LEN; /* 0x40009088 */
  400. __IO uint16_t UEP3_R_SIZE; /* 0x4000908a */
  401. __IO uint16_t UEP4_RX_LEN; /* 0x4000908c */
  402. __IO uint16_t UEP4_R_SIZE; /* 0x4000908e */
  403. __IO uint16_t UEP5_RX_LEN; /* 0x40009090 */
  404. __IO uint16_t UEP5_R_SIZE; /* 0x40009092 */
  405. __IO uint16_t UEP6_RX_LEN; /* 0x40009094 */
  406. __IO uint16_t UEP6_R_SIZE; /* 0x40009096 */
  407. __IO uint16_t UEP7_RX_LEN; /* 0x40009098 */
  408. __IO uint16_t UEP7_R_SIZE; /* 0x4000909a */
  409. __IO uint16_t UEP0_TX_LEN; /* 0x4000909c */
  410. __IO uint8_t UEP0_TX_CTRL; /* 0x4000909e */
  411. __IO uint8_t UEP0_RX_CTRL; /* 0x4000909f */
  412. __IO uint16_t UEP1_TX_LEN; /* 0x400090a0 */
  413. __IO uint8_t UEP1_TX_CTRL; /* 0x400090a2 */
  414. __IO uint8_t UEP1_RX_CTRL; /* 0x400090a3 */
  415. __IO uint16_t UEP2_TX_LEN; /* 0x400090a4 */
  416. __IO uint8_t UEP2_TX_CTRL; /* 0x400090a6 */
  417. __IO uint8_t UEP2_RX_CTRL; /* 0x400090a7 */
  418. __IO uint16_t UEP3_TX_LEN; /* 0x400090a8 */
  419. __IO uint8_t UEP3_TX_CTRL; /* 0x400090aa */
  420. __IO uint8_t UEP3_RX_CTRL; /* 0x400090ab */
  421. __IO uint16_t UEP4_TX_LEN; /* 0x400090ac */
  422. __IO uint8_t UEP4_TX_CTRL; /* 0x400090ae */
  423. __IO uint8_t UEP4_RX_CTRL; /* 0x400090af */
  424. __IO uint16_t UEP5_TX_LEN; /* 0x400090b0 */
  425. __IO uint8_t UEP5_TX_CTRL; /* 0x400090b2 */
  426. __IO uint8_t UEP5_RX_CTRL; /* 0x400090b3 */
  427. __IO uint16_t UEP6_TX_LEN; /* 0x400090b4 */
  428. __IO uint8_t UEP6_TX_CTRL; /* 0x400090b6 */
  429. __IO uint8_t UEP6_RX_CTRL; /* 0x400090b7 */
  430. __IO uint16_t UEP7_TX_LEN; /* 0x400090b8 */
  431. __IO uint8_t UEP7_TX_CTRL; /* 0x400090ba */
  432. __IO uint8_t UEP7_RX_CTRL; /* 0x400090bb */
  433. __IO uint16_t UEP_TX_ISO; /* 0x400090bc */
  434. __IO uint16_t UEP_RX_ISO; /* 0x400090be */
  435. } USBHSD_TypeDef;