1 // THIS HEADER FILE IS AUTOMATICALLY GENERATED -- DO NOT EDIT 2 3 /** 4 * Copyright (c) 2024 Raspberry Pi Ltd. 5 * 6 * SPDX-License-Identifier: BSD-3-Clause 7 */ 8 #ifndef _HARDWARE_STRUCTS_USB_H 9 #define _HARDWARE_STRUCTS_USB_H 10 11 /** 12 * \file rp2040/usb.h 13 */ 14 15 #include "hardware/address_mapped.h" 16 #include "hardware/regs/usb.h" 17 #include "hardware/structs/usb_dpram.h" 18 19 // Reference to datasheet: https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf#tab-registerlist_usb 20 // 21 // The _REG_ macro is intended to help make the register navigable in your IDE (for example, using the "Go to Definition" feature) 22 // _REG_(x) will link to the corresponding register in hardware/regs/usb.h. 23 // 24 // Bit-field descriptions are of the form: 25 // BITMASK [BITRANGE] FIELDNAME (RESETVALUE) DESCRIPTION 26 27 typedef struct { 28 _REG_(USB_ADDR_ENDP_OFFSET) // USB_ADDR_ENDP 29 // Device address and endpoint control 30 // 0x000f0000 [19:16] ENDPOINT (0x0) Device endpoint to send data to 31 // 0x0000007f [6:0] ADDRESS (0x00) In device mode, the address that the device should respond to 32 io_rw_32 dev_addr_ctrl; 33 34 // (Description copied from array index 0 register USB_ADDR_ENDP1 applies similarly to other array indexes) 35 _REG_(USB_ADDR_ENDP1_OFFSET) // USB_ADDR_ENDP1 36 // Interrupt endpoint 1 37 // 0x04000000 [26] INTEP_PREAMBLE (0) Interrupt EP requires preamble (is a low speed device on... 38 // 0x02000000 [25] INTEP_DIR (0) Direction of the interrupt endpoint 39 // 0x000f0000 [19:16] ENDPOINT (0x0) Endpoint number of the interrupt endpoint 40 // 0x0000007f [6:0] ADDRESS (0x00) Device address 41 io_rw_32 int_ep_addr_ctrl[15]; 42 43 _REG_(USB_MAIN_CTRL_OFFSET) // USB_MAIN_CTRL 44 // Main control register 45 // 0x80000000 [31] SIM_TIMING (0) Reduced timings for simulation 46 // 0x00000002 [1] HOST_NDEVICE (0) Device mode = 0, Host mode = 1 47 // 0x00000001 [0] CONTROLLER_EN (0) Enable controller 48 io_rw_32 main_ctrl; 49 50 _REG_(USB_SOF_WR_OFFSET) // USB_SOF_WR 51 // Set the SOF (Start of Frame) frame number in the host controller 52 // 0x000007ff [10:0] COUNT (0x000) 53 io_wo_32 sof_wr; 54 55 _REG_(USB_SOF_RD_OFFSET) // USB_SOF_RD 56 // Read the last SOF (Start of Frame) frame number seen 57 // 0x000007ff [10:0] COUNT (0x000) 58 io_ro_32 sof_rd; 59 60 _REG_(USB_SIE_CTRL_OFFSET) // USB_SIE_CTRL 61 // SIE control register 62 // 0x80000000 [31] EP0_INT_STALL (0) Device: Set bit in EP_STATUS_STALL_NAK when EP0 sends a STALL 63 // 0x40000000 [30] EP0_DOUBLE_BUF (0) Device: EP0 single buffered = 0, double buffered = 1 64 // 0x20000000 [29] EP0_INT_1BUF (0) Device: Set bit in BUFF_STATUS for every buffer completed on EP0 65 // 0x10000000 [28] EP0_INT_2BUF (0) Device: Set bit in BUFF_STATUS for every 2 buffers... 66 // 0x08000000 [27] EP0_INT_NAK (0) Device: Set bit in EP_STATUS_STALL_NAK when EP0 sends a NAK 67 // 0x04000000 [26] DIRECT_EN (0) Direct bus drive enable 68 // 0x02000000 [25] DIRECT_DP (0) Direct control of DP 69 // 0x01000000 [24] DIRECT_DM (0) Direct control of DM 70 // 0x00040000 [18] TRANSCEIVER_PD (0) Power down bus transceiver 71 // 0x00020000 [17] RPU_OPT (0) Device: Pull-up strength (0=1K2, 1=2k3) 72 // 0x00010000 [16] PULLUP_EN (0) Device: Enable pull up resistor 73 // 0x00008000 [15] PULLDOWN_EN (0) Host: Enable pull down resistors 74 // 0x00002000 [13] RESET_BUS (0) Host: Reset bus 75 // 0x00001000 [12] RESUME (0) Device: Remote wakeup 76 // 0x00000800 [11] VBUS_EN (0) Host: Enable VBUS 77 // 0x00000400 [10] KEEP_ALIVE_EN (0) Host: Enable keep alive packet (for low speed bus) 78 // 0x00000200 [9] SOF_EN (0) Host: Enable SOF generation (for full speed bus) 79 // 0x00000100 [8] SOF_SYNC (0) Host: Delay packet(s) until after SOF 80 // 0x00000040 [6] PREAMBLE_EN (0) Host: Preable enable for LS device on FS hub 81 // 0x00000010 [4] STOP_TRANS (0) Host: Stop transaction 82 // 0x00000008 [3] RECEIVE_DATA (0) Host: Receive transaction (IN to host) 83 // 0x00000004 [2] SEND_DATA (0) Host: Send transaction (OUT from host) 84 // 0x00000002 [1] SEND_SETUP (0) Host: Send Setup packet 85 // 0x00000001 [0] START_TRANS (0) Host: Start transaction 86 io_rw_32 sie_ctrl; 87 88 _REG_(USB_SIE_STATUS_OFFSET) // USB_SIE_STATUS 89 // SIE status register 90 // 0x80000000 [31] DATA_SEQ_ERROR (0) Data Sequence Error 91 // 0x40000000 [30] ACK_REC (0) ACK received 92 // 0x20000000 [29] STALL_REC (0) Host: STALL received 93 // 0x10000000 [28] NAK_REC (0) Host: NAK received 94 // 0x08000000 [27] RX_TIMEOUT (0) RX timeout is raised by both the host and device if an... 95 // 0x04000000 [26] RX_OVERFLOW (0) RX overflow is raised by the Serial RX engine if the... 96 // 0x02000000 [25] BIT_STUFF_ERROR (0) Bit Stuff Error 97 // 0x01000000 [24] CRC_ERROR (0) CRC Error 98 // 0x00080000 [19] BUS_RESET (0) Device: bus reset received 99 // 0x00040000 [18] TRANS_COMPLETE (0) Transaction complete 100 // 0x00020000 [17] SETUP_REC (0) Device: Setup packet received 101 // 0x00010000 [16] CONNECTED (0) Device: connected 102 // 0x00000800 [11] RESUME (0) Host: Device has initiated a remote resume 103 // 0x00000400 [10] VBUS_OVER_CURR (0) VBUS over current detected 104 // 0x00000300 [9:8] SPEED (0x0) Host: device speed 105 // 0x00000010 [4] SUSPENDED (0) Bus in suspended state 106 // 0x0000000c [3:2] LINE_STATE (0x0) USB bus line state 107 // 0x00000001 [0] VBUS_DETECTED (0) Device: VBUS Detected 108 io_rw_32 sie_status; 109 110 _REG_(USB_INT_EP_CTRL_OFFSET) // USB_INT_EP_CTRL 111 // interrupt endpoint control register 112 // 0x0000fffe [15:1] INT_EP_ACTIVE (0x0000) Host: Enable interrupt endpoint 1 => 15 113 io_rw_32 int_ep_ctrl; 114 115 _REG_(USB_BUFF_STATUS_OFFSET) // USB_BUFF_STATUS 116 // Buffer status register 117 // 0x80000000 [31] EP15_OUT (0) 118 // 0x40000000 [30] EP15_IN (0) 119 // 0x20000000 [29] EP14_OUT (0) 120 // 0x10000000 [28] EP14_IN (0) 121 // 0x08000000 [27] EP13_OUT (0) 122 // 0x04000000 [26] EP13_IN (0) 123 // 0x02000000 [25] EP12_OUT (0) 124 // 0x01000000 [24] EP12_IN (0) 125 // 0x00800000 [23] EP11_OUT (0) 126 // 0x00400000 [22] EP11_IN (0) 127 // 0x00200000 [21] EP10_OUT (0) 128 // 0x00100000 [20] EP10_IN (0) 129 // 0x00080000 [19] EP9_OUT (0) 130 // 0x00040000 [18] EP9_IN (0) 131 // 0x00020000 [17] EP8_OUT (0) 132 // 0x00010000 [16] EP8_IN (0) 133 // 0x00008000 [15] EP7_OUT (0) 134 // 0x00004000 [14] EP7_IN (0) 135 // 0x00002000 [13] EP6_OUT (0) 136 // 0x00001000 [12] EP6_IN (0) 137 // 0x00000800 [11] EP5_OUT (0) 138 // 0x00000400 [10] EP5_IN (0) 139 // 0x00000200 [9] EP4_OUT (0) 140 // 0x00000100 [8] EP4_IN (0) 141 // 0x00000080 [7] EP3_OUT (0) 142 // 0x00000040 [6] EP3_IN (0) 143 // 0x00000020 [5] EP2_OUT (0) 144 // 0x00000010 [4] EP2_IN (0) 145 // 0x00000008 [3] EP1_OUT (0) 146 // 0x00000004 [2] EP1_IN (0) 147 // 0x00000002 [1] EP0_OUT (0) 148 // 0x00000001 [0] EP0_IN (0) 149 io_rw_32 buf_status; 150 151 _REG_(USB_BUFF_CPU_SHOULD_HANDLE_OFFSET) // USB_BUFF_CPU_SHOULD_HANDLE 152 // Which of the double buffers should be handled 153 // 0x80000000 [31] EP15_OUT (0) 154 // 0x40000000 [30] EP15_IN (0) 155 // 0x20000000 [29] EP14_OUT (0) 156 // 0x10000000 [28] EP14_IN (0) 157 // 0x08000000 [27] EP13_OUT (0) 158 // 0x04000000 [26] EP13_IN (0) 159 // 0x02000000 [25] EP12_OUT (0) 160 // 0x01000000 [24] EP12_IN (0) 161 // 0x00800000 [23] EP11_OUT (0) 162 // 0x00400000 [22] EP11_IN (0) 163 // 0x00200000 [21] EP10_OUT (0) 164 // 0x00100000 [20] EP10_IN (0) 165 // 0x00080000 [19] EP9_OUT (0) 166 // 0x00040000 [18] EP9_IN (0) 167 // 0x00020000 [17] EP8_OUT (0) 168 // 0x00010000 [16] EP8_IN (0) 169 // 0x00008000 [15] EP7_OUT (0) 170 // 0x00004000 [14] EP7_IN (0) 171 // 0x00002000 [13] EP6_OUT (0) 172 // 0x00001000 [12] EP6_IN (0) 173 // 0x00000800 [11] EP5_OUT (0) 174 // 0x00000400 [10] EP5_IN (0) 175 // 0x00000200 [9] EP4_OUT (0) 176 // 0x00000100 [8] EP4_IN (0) 177 // 0x00000080 [7] EP3_OUT (0) 178 // 0x00000040 [6] EP3_IN (0) 179 // 0x00000020 [5] EP2_OUT (0) 180 // 0x00000010 [4] EP2_IN (0) 181 // 0x00000008 [3] EP1_OUT (0) 182 // 0x00000004 [2] EP1_IN (0) 183 // 0x00000002 [1] EP0_OUT (0) 184 // 0x00000001 [0] EP0_IN (0) 185 io_ro_32 buf_cpu_should_handle; 186 187 _REG_(USB_EP_ABORT_OFFSET) // USB_EP_ABORT 188 // Device only: Can be set to ignore the buffer control register for this endpoint in case you... 189 // 0x80000000 [31] EP15_OUT (0) 190 // 0x40000000 [30] EP15_IN (0) 191 // 0x20000000 [29] EP14_OUT (0) 192 // 0x10000000 [28] EP14_IN (0) 193 // 0x08000000 [27] EP13_OUT (0) 194 // 0x04000000 [26] EP13_IN (0) 195 // 0x02000000 [25] EP12_OUT (0) 196 // 0x01000000 [24] EP12_IN (0) 197 // 0x00800000 [23] EP11_OUT (0) 198 // 0x00400000 [22] EP11_IN (0) 199 // 0x00200000 [21] EP10_OUT (0) 200 // 0x00100000 [20] EP10_IN (0) 201 // 0x00080000 [19] EP9_OUT (0) 202 // 0x00040000 [18] EP9_IN (0) 203 // 0x00020000 [17] EP8_OUT (0) 204 // 0x00010000 [16] EP8_IN (0) 205 // 0x00008000 [15] EP7_OUT (0) 206 // 0x00004000 [14] EP7_IN (0) 207 // 0x00002000 [13] EP6_OUT (0) 208 // 0x00001000 [12] EP6_IN (0) 209 // 0x00000800 [11] EP5_OUT (0) 210 // 0x00000400 [10] EP5_IN (0) 211 // 0x00000200 [9] EP4_OUT (0) 212 // 0x00000100 [8] EP4_IN (0) 213 // 0x00000080 [7] EP3_OUT (0) 214 // 0x00000040 [6] EP3_IN (0) 215 // 0x00000020 [5] EP2_OUT (0) 216 // 0x00000010 [4] EP2_IN (0) 217 // 0x00000008 [3] EP1_OUT (0) 218 // 0x00000004 [2] EP1_IN (0) 219 // 0x00000002 [1] EP0_OUT (0) 220 // 0x00000001 [0] EP0_IN (0) 221 io_rw_32 abort; 222 223 _REG_(USB_EP_ABORT_DONE_OFFSET) // USB_EP_ABORT_DONE 224 // Device only: Used in conjunction with `EP_ABORT` 225 // 0x80000000 [31] EP15_OUT (0) 226 // 0x40000000 [30] EP15_IN (0) 227 // 0x20000000 [29] EP14_OUT (0) 228 // 0x10000000 [28] EP14_IN (0) 229 // 0x08000000 [27] EP13_OUT (0) 230 // 0x04000000 [26] EP13_IN (0) 231 // 0x02000000 [25] EP12_OUT (0) 232 // 0x01000000 [24] EP12_IN (0) 233 // 0x00800000 [23] EP11_OUT (0) 234 // 0x00400000 [22] EP11_IN (0) 235 // 0x00200000 [21] EP10_OUT (0) 236 // 0x00100000 [20] EP10_IN (0) 237 // 0x00080000 [19] EP9_OUT (0) 238 // 0x00040000 [18] EP9_IN (0) 239 // 0x00020000 [17] EP8_OUT (0) 240 // 0x00010000 [16] EP8_IN (0) 241 // 0x00008000 [15] EP7_OUT (0) 242 // 0x00004000 [14] EP7_IN (0) 243 // 0x00002000 [13] EP6_OUT (0) 244 // 0x00001000 [12] EP6_IN (0) 245 // 0x00000800 [11] EP5_OUT (0) 246 // 0x00000400 [10] EP5_IN (0) 247 // 0x00000200 [9] EP4_OUT (0) 248 // 0x00000100 [8] EP4_IN (0) 249 // 0x00000080 [7] EP3_OUT (0) 250 // 0x00000040 [6] EP3_IN (0) 251 // 0x00000020 [5] EP2_OUT (0) 252 // 0x00000010 [4] EP2_IN (0) 253 // 0x00000008 [3] EP1_OUT (0) 254 // 0x00000004 [2] EP1_IN (0) 255 // 0x00000002 [1] EP0_OUT (0) 256 // 0x00000001 [0] EP0_IN (0) 257 io_rw_32 abort_done; 258 259 _REG_(USB_EP_STALL_ARM_OFFSET) // USB_EP_STALL_ARM 260 // Device: this bit must be set in conjunction with the `STALL` bit in the buffer control register... 261 // 0x00000002 [1] EP0_OUT (0) 262 // 0x00000001 [0] EP0_IN (0) 263 io_rw_32 ep_stall_arm; 264 265 _REG_(USB_NAK_POLL_OFFSET) // USB_NAK_POLL 266 // Used by the host controller 267 // 0x03ff0000 [25:16] DELAY_FS (0x010) NAK polling interval for a full speed device 268 // 0x000003ff [9:0] DELAY_LS (0x010) NAK polling interval for a low speed device 269 io_rw_32 nak_poll; 270 271 _REG_(USB_EP_STATUS_STALL_NAK_OFFSET) // USB_EP_STATUS_STALL_NAK 272 // Device: bits are set when the `IRQ_ON_NAK` or `IRQ_ON_STALL` bits are set 273 // 0x80000000 [31] EP15_OUT (0) 274 // 0x40000000 [30] EP15_IN (0) 275 // 0x20000000 [29] EP14_OUT (0) 276 // 0x10000000 [28] EP14_IN (0) 277 // 0x08000000 [27] EP13_OUT (0) 278 // 0x04000000 [26] EP13_IN (0) 279 // 0x02000000 [25] EP12_OUT (0) 280 // 0x01000000 [24] EP12_IN (0) 281 // 0x00800000 [23] EP11_OUT (0) 282 // 0x00400000 [22] EP11_IN (0) 283 // 0x00200000 [21] EP10_OUT (0) 284 // 0x00100000 [20] EP10_IN (0) 285 // 0x00080000 [19] EP9_OUT (0) 286 // 0x00040000 [18] EP9_IN (0) 287 // 0x00020000 [17] EP8_OUT (0) 288 // 0x00010000 [16] EP8_IN (0) 289 // 0x00008000 [15] EP7_OUT (0) 290 // 0x00004000 [14] EP7_IN (0) 291 // 0x00002000 [13] EP6_OUT (0) 292 // 0x00001000 [12] EP6_IN (0) 293 // 0x00000800 [11] EP5_OUT (0) 294 // 0x00000400 [10] EP5_IN (0) 295 // 0x00000200 [9] EP4_OUT (0) 296 // 0x00000100 [8] EP4_IN (0) 297 // 0x00000080 [7] EP3_OUT (0) 298 // 0x00000040 [6] EP3_IN (0) 299 // 0x00000020 [5] EP2_OUT (0) 300 // 0x00000010 [4] EP2_IN (0) 301 // 0x00000008 [3] EP1_OUT (0) 302 // 0x00000004 [2] EP1_IN (0) 303 // 0x00000002 [1] EP0_OUT (0) 304 // 0x00000001 [0] EP0_IN (0) 305 io_rw_32 ep_nak_stall_status; 306 307 _REG_(USB_USB_MUXING_OFFSET) // USB_USB_MUXING 308 // Where to connect the USB controller 309 // 0x00000008 [3] SOFTCON (0) 310 // 0x00000004 [2] TO_DIGITAL_PAD (0) 311 // 0x00000002 [1] TO_EXTPHY (0) 312 // 0x00000001 [0] TO_PHY (0) 313 io_rw_32 muxing; 314 315 _REG_(USB_USB_PWR_OFFSET) // USB_USB_PWR 316 // Overrides for the power signals in the event that the VBUS signals are not hooked up to GPIO 317 // 0x00000020 [5] OVERCURR_DETECT_EN (0) 318 // 0x00000010 [4] OVERCURR_DETECT (0) 319 // 0x00000008 [3] VBUS_DETECT_OVERRIDE_EN (0) 320 // 0x00000004 [2] VBUS_DETECT (0) 321 // 0x00000002 [1] VBUS_EN_OVERRIDE_EN (0) 322 // 0x00000001 [0] VBUS_EN (0) 323 io_rw_32 pwr; 324 325 _REG_(USB_USBPHY_DIRECT_OFFSET) // USB_USBPHY_DIRECT 326 // Note that most functions are driven directly from usb_fsls controller 327 // 0x00400000 [22] DM_OVV (0) Status bit from USB PHY 328 // 0x00200000 [21] DP_OVV (0) Status bit from USB PHY 329 // 0x00100000 [20] DM_OVCN (0) Status bit from USB PHY 330 // 0x00080000 [19] DP_OVCN (0) Status bit from USB PHY 331 // 0x00040000 [18] RX_DM (0) Status bit from USB PHY + 332 // 0x00020000 [17] RX_DP (0) Status bit from USB PHY + 333 // 0x00010000 [16] RX_DD (0) Status bit from USB PHY + 334 // 0x00008000 [15] TX_DIFFMODE (0) 335 // 0x00004000 [14] TX_FSSLEW (0) 336 // 0x00002000 [13] TX_PD (0) 337 // 0x00001000 [12] RX_PD (0) 338 // 0x00000800 [11] TX_DM (0) Value to drive to USB PHY when override enable is set... 339 // 0x00000400 [10] TX_DP (0) Value to drive to USB PHY when override enable is set... 340 // 0x00000200 [9] TX_DM_OE (0) Value to drive to USB PHY when override enable is set... 341 // 0x00000100 [8] TX_DP_OE (0) Value to drive to USB PHY when override enable is set... 342 // 0x00000040 [6] DM_PULLDN_EN (0) Value to drive to USB PHY when override enable is set... 343 // 0x00000020 [5] DM_PULLUP_EN (0) Value to drive to USB PHY when override enable is set... 344 // 0x00000010 [4] DM_PULLUP_HISEL (0) when dm_pullup_en is set high, this enables second resistor 345 // 0x00000004 [2] DP_PULLDN_EN (0) Value to drive to USB PHY when override enable is set... 346 // 0x00000002 [1] DP_PULLUP_EN (0) Value to drive to USB PHY when override enable is set... 347 // 0x00000001 [0] DP_PULLUP_HISEL (0) when dp_pullup_en is set high, this enables second resistor 348 io_rw_32 phy_direct; 349 350 _REG_(USB_USBPHY_DIRECT_OVERRIDE_OFFSET) // USB_USBPHY_DIRECT_OVERRIDE 351 // 0x00008000 [15] TX_DIFFMODE_OVERRIDE_EN (0) 352 // 0x00001000 [12] DM_PULLUP_OVERRIDE_EN (0) 353 // 0x00000800 [11] TX_FSSLEW_OVERRIDE_EN (0) 354 // 0x00000400 [10] TX_PD_OVERRIDE_EN (0) 355 // 0x00000200 [9] RX_PD_OVERRIDE_EN (0) 356 // 0x00000100 [8] TX_DM_OVERRIDE_EN (0) Override default value or value driven from USB Controller to PHY 357 // 0x00000080 [7] TX_DP_OVERRIDE_EN (0) Override default value or value driven from USB Controller to PHY 358 // 0x00000040 [6] TX_DM_OE_OVERRIDE_EN (0) Override default value or value driven from USB Controller to PHY 359 // 0x00000020 [5] TX_DP_OE_OVERRIDE_EN (0) Override default value or value driven from USB Controller to PHY 360 // 0x00000010 [4] DM_PULLDN_EN_OVERRIDE_EN (0) Override default value or value driven from USB Controller to PHY 361 // 0x00000008 [3] DP_PULLDN_EN_OVERRIDE_EN (0) Override default value or value driven from USB Controller to PHY 362 // 0x00000004 [2] DP_PULLUP_EN_OVERRIDE_EN (0) Override default value or value driven from USB Controller to PHY 363 // 0x00000002 [1] DM_PULLUP_HISEL_OVERRIDE_EN (0) 364 // 0x00000001 [0] DP_PULLUP_HISEL_OVERRIDE_EN (0) 365 io_rw_32 phy_direct_override; 366 367 _REG_(USB_USBPHY_TRIM_OFFSET) // USB_USBPHY_TRIM 368 // Note that most functions are driven directly from usb_fsls controller 369 // 0x00001f00 [12:8] DM_PULLDN_TRIM (0x1f) Value to drive to USB PHY + 370 // 0x0000001f [4:0] DP_PULLDN_TRIM (0x1f) Value to drive to USB PHY + 371 io_rw_32 phy_trim; 372 373 uint32_t _pad0; 374 375 _REG_(USB_INTR_OFFSET) // USB_INTR 376 // Raw Interrupts 377 // 0x00080000 [19] EP_STALL_NAK (0) Raised when any bit in EP_STATUS_STALL_NAK is set 378 // 0x00040000 [18] ABORT_DONE (0) Raised when any bit in ABORT_DONE is set 379 // 0x00020000 [17] DEV_SOF (0) Set every time the device receives a SOF (Start of Frame) packet 380 // 0x00010000 [16] SETUP_REQ (0) Device 381 // 0x00008000 [15] DEV_RESUME_FROM_HOST (0) Set when the device receives a resume from the host 382 // 0x00004000 [14] DEV_SUSPEND (0) Set when the device suspend state changes 383 // 0x00002000 [13] DEV_CONN_DIS (0) Set when the device connection state changes 384 // 0x00001000 [12] BUS_RESET (0) Source: SIE_STATUS 385 // 0x00000800 [11] VBUS_DETECT (0) Source: SIE_STATUS 386 // 0x00000400 [10] STALL (0) Source: SIE_STATUS 387 // 0x00000200 [9] ERROR_CRC (0) Source: SIE_STATUS 388 // 0x00000100 [8] ERROR_BIT_STUFF (0) Source: SIE_STATUS 389 // 0x00000080 [7] ERROR_RX_OVERFLOW (0) Source: SIE_STATUS 390 // 0x00000040 [6] ERROR_RX_TIMEOUT (0) Source: SIE_STATUS 391 // 0x00000020 [5] ERROR_DATA_SEQ (0) Source: SIE_STATUS 392 // 0x00000010 [4] BUFF_STATUS (0) Raised when any bit in BUFF_STATUS is set 393 // 0x00000008 [3] TRANS_COMPLETE (0) Raised every time SIE_STATUS 394 // 0x00000004 [2] HOST_SOF (0) Host: raised every time the host sends a SOF (Start of Frame) 395 // 0x00000002 [1] HOST_RESUME (0) Host: raised when a device wakes up the host 396 // 0x00000001 [0] HOST_CONN_DIS (0) Host: raised when a device is connected or disconnected (i 397 io_ro_32 intr; 398 399 _REG_(USB_INTE_OFFSET) // USB_INTE 400 // Interrupt Enable 401 // 0x00080000 [19] EP_STALL_NAK (0) Raised when any bit in EP_STATUS_STALL_NAK is set 402 // 0x00040000 [18] ABORT_DONE (0) Raised when any bit in ABORT_DONE is set 403 // 0x00020000 [17] DEV_SOF (0) Set every time the device receives a SOF (Start of Frame) packet 404 // 0x00010000 [16] SETUP_REQ (0) Device 405 // 0x00008000 [15] DEV_RESUME_FROM_HOST (0) Set when the device receives a resume from the host 406 // 0x00004000 [14] DEV_SUSPEND (0) Set when the device suspend state changes 407 // 0x00002000 [13] DEV_CONN_DIS (0) Set when the device connection state changes 408 // 0x00001000 [12] BUS_RESET (0) Source: SIE_STATUS 409 // 0x00000800 [11] VBUS_DETECT (0) Source: SIE_STATUS 410 // 0x00000400 [10] STALL (0) Source: SIE_STATUS 411 // 0x00000200 [9] ERROR_CRC (0) Source: SIE_STATUS 412 // 0x00000100 [8] ERROR_BIT_STUFF (0) Source: SIE_STATUS 413 // 0x00000080 [7] ERROR_RX_OVERFLOW (0) Source: SIE_STATUS 414 // 0x00000040 [6] ERROR_RX_TIMEOUT (0) Source: SIE_STATUS 415 // 0x00000020 [5] ERROR_DATA_SEQ (0) Source: SIE_STATUS 416 // 0x00000010 [4] BUFF_STATUS (0) Raised when any bit in BUFF_STATUS is set 417 // 0x00000008 [3] TRANS_COMPLETE (0) Raised every time SIE_STATUS 418 // 0x00000004 [2] HOST_SOF (0) Host: raised every time the host sends a SOF (Start of Frame) 419 // 0x00000002 [1] HOST_RESUME (0) Host: raised when a device wakes up the host 420 // 0x00000001 [0] HOST_CONN_DIS (0) Host: raised when a device is connected or disconnected (i 421 io_rw_32 inte; 422 423 _REG_(USB_INTF_OFFSET) // USB_INTF 424 // Interrupt Force 425 // 0x00080000 [19] EP_STALL_NAK (0) Raised when any bit in EP_STATUS_STALL_NAK is set 426 // 0x00040000 [18] ABORT_DONE (0) Raised when any bit in ABORT_DONE is set 427 // 0x00020000 [17] DEV_SOF (0) Set every time the device receives a SOF (Start of Frame) packet 428 // 0x00010000 [16] SETUP_REQ (0) Device 429 // 0x00008000 [15] DEV_RESUME_FROM_HOST (0) Set when the device receives a resume from the host 430 // 0x00004000 [14] DEV_SUSPEND (0) Set when the device suspend state changes 431 // 0x00002000 [13] DEV_CONN_DIS (0) Set when the device connection state changes 432 // 0x00001000 [12] BUS_RESET (0) Source: SIE_STATUS 433 // 0x00000800 [11] VBUS_DETECT (0) Source: SIE_STATUS 434 // 0x00000400 [10] STALL (0) Source: SIE_STATUS 435 // 0x00000200 [9] ERROR_CRC (0) Source: SIE_STATUS 436 // 0x00000100 [8] ERROR_BIT_STUFF (0) Source: SIE_STATUS 437 // 0x00000080 [7] ERROR_RX_OVERFLOW (0) Source: SIE_STATUS 438 // 0x00000040 [6] ERROR_RX_TIMEOUT (0) Source: SIE_STATUS 439 // 0x00000020 [5] ERROR_DATA_SEQ (0) Source: SIE_STATUS 440 // 0x00000010 [4] BUFF_STATUS (0) Raised when any bit in BUFF_STATUS is set 441 // 0x00000008 [3] TRANS_COMPLETE (0) Raised every time SIE_STATUS 442 // 0x00000004 [2] HOST_SOF (0) Host: raised every time the host sends a SOF (Start of Frame) 443 // 0x00000002 [1] HOST_RESUME (0) Host: raised when a device wakes up the host 444 // 0x00000001 [0] HOST_CONN_DIS (0) Host: raised when a device is connected or disconnected (i 445 io_rw_32 intf; 446 447 _REG_(USB_INTS_OFFSET) // USB_INTS 448 // Interrupt status after masking & forcing 449 // 0x00080000 [19] EP_STALL_NAK (0) Raised when any bit in EP_STATUS_STALL_NAK is set 450 // 0x00040000 [18] ABORT_DONE (0) Raised when any bit in ABORT_DONE is set 451 // 0x00020000 [17] DEV_SOF (0) Set every time the device receives a SOF (Start of Frame) packet 452 // 0x00010000 [16] SETUP_REQ (0) Device 453 // 0x00008000 [15] DEV_RESUME_FROM_HOST (0) Set when the device receives a resume from the host 454 // 0x00004000 [14] DEV_SUSPEND (0) Set when the device suspend state changes 455 // 0x00002000 [13] DEV_CONN_DIS (0) Set when the device connection state changes 456 // 0x00001000 [12] BUS_RESET (0) Source: SIE_STATUS 457 // 0x00000800 [11] VBUS_DETECT (0) Source: SIE_STATUS 458 // 0x00000400 [10] STALL (0) Source: SIE_STATUS 459 // 0x00000200 [9] ERROR_CRC (0) Source: SIE_STATUS 460 // 0x00000100 [8] ERROR_BIT_STUFF (0) Source: SIE_STATUS 461 // 0x00000080 [7] ERROR_RX_OVERFLOW (0) Source: SIE_STATUS 462 // 0x00000040 [6] ERROR_RX_TIMEOUT (0) Source: SIE_STATUS 463 // 0x00000020 [5] ERROR_DATA_SEQ (0) Source: SIE_STATUS 464 // 0x00000010 [4] BUFF_STATUS (0) Raised when any bit in BUFF_STATUS is set 465 // 0x00000008 [3] TRANS_COMPLETE (0) Raised every time SIE_STATUS 466 // 0x00000004 [2] HOST_SOF (0) Host: raised every time the host sends a SOF (Start of Frame) 467 // 0x00000002 [1] HOST_RESUME (0) Host: raised when a device wakes up the host 468 // 0x00000001 [0] HOST_CONN_DIS (0) Host: raised when a device is connected or disconnected (i 469 io_ro_32 ints; 470 } usb_hw_t; 471 472 #define usb_hw ((usb_hw_t *)USBCTRL_REGS_BASE) 473 static_assert(sizeof (usb_hw_t) == 0x009c, ""); 474 475 #endif // _HARDWARE_STRUCTS_USB_H 476 477