1 // THIS HEADER FILE IS AUTOMATICALLY GENERATED -- DO NOT EDIT 2 3 /* 4 * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. 5 * 6 * SPDX-License-Identifier: BSD-3-Clause 7 */ 8 9 #ifndef _HARDWARE_STRUCTS_SIO_H 10 #define _HARDWARE_STRUCTS_SIO_H 11 12 #include "hardware/address_mapped.h" 13 #include "hardware/regs/sio.h" 14 #include "hardware/structs/interp.h" 15 16 // Reference to datasheet: https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf#tab-registerlist_sio 17 // 18 // The _REG_ macro is intended to help make the register navigable in your IDE (for example, using the "Go to Definition" feature) 19 // _REG_(x) will link to the corresponding register in hardware/regs/sio.h. 20 // 21 // Bit-field descriptions are of the form: 22 // BITMASK [BITRANGE]: FIELDNAME (RESETVALUE): DESCRIPTION 23 24 typedef struct { 25 _REG_(SIO_CPUID_OFFSET) // SIO_CPUID 26 // Processor core identifier 27 io_ro_32 cpuid; 28 29 _REG_(SIO_GPIO_IN_OFFSET) // SIO_GPIO_IN 30 // Input value for GPIO pins 31 // 0x3fffffff [29:0] : GPIO_IN (0): Input value for GPIO0 32 io_ro_32 gpio_in; 33 34 _REG_(SIO_GPIO_HI_IN_OFFSET) // SIO_GPIO_HI_IN 35 // Input value for QSPI pins 36 // 0x0000003f [5:0] : GPIO_HI_IN (0): Input value on QSPI IO in order 0 37 io_ro_32 gpio_hi_in; 38 39 uint32_t _pad0; 40 41 _REG_(SIO_GPIO_OUT_OFFSET) // SIO_GPIO_OUT 42 // GPIO output value 43 // 0x3fffffff [29:0] : GPIO_OUT (0): Set output level (1/0 -> high/low) for GPIO0 44 io_rw_32 gpio_out; 45 46 _REG_(SIO_GPIO_OUT_SET_OFFSET) // SIO_GPIO_OUT_SET 47 // GPIO output value set 48 // 0x3fffffff [29:0] : GPIO_OUT_SET (0): Perform an atomic bit-set on GPIO_OUT, i 49 io_wo_32 gpio_set; 50 51 _REG_(SIO_GPIO_OUT_CLR_OFFSET) // SIO_GPIO_OUT_CLR 52 // GPIO output value clear 53 // 0x3fffffff [29:0] : GPIO_OUT_CLR (0): Perform an atomic bit-clear on GPIO_OUT, i 54 io_wo_32 gpio_clr; 55 56 _REG_(SIO_GPIO_OUT_XOR_OFFSET) // SIO_GPIO_OUT_XOR 57 // GPIO output value XOR 58 // 0x3fffffff [29:0] : GPIO_OUT_XOR (0): Perform an atomic bitwise XOR on GPIO_OUT, i 59 io_wo_32 gpio_togl; 60 61 _REG_(SIO_GPIO_OE_OFFSET) // SIO_GPIO_OE 62 // GPIO output enable 63 // 0x3fffffff [29:0] : GPIO_OE (0): Set output enable (1/0 -> output/input) for GPIO0 64 io_rw_32 gpio_oe; 65 66 _REG_(SIO_GPIO_OE_SET_OFFSET) // SIO_GPIO_OE_SET 67 // GPIO output enable set 68 // 0x3fffffff [29:0] : GPIO_OE_SET (0): Perform an atomic bit-set on GPIO_OE, i 69 io_wo_32 gpio_oe_set; 70 71 _REG_(SIO_GPIO_OE_CLR_OFFSET) // SIO_GPIO_OE_CLR 72 // GPIO output enable clear 73 // 0x3fffffff [29:0] : GPIO_OE_CLR (0): Perform an atomic bit-clear on GPIO_OE, i 74 io_wo_32 gpio_oe_clr; 75 76 _REG_(SIO_GPIO_OE_XOR_OFFSET) // SIO_GPIO_OE_XOR 77 // GPIO output enable XOR 78 // 0x3fffffff [29:0] : GPIO_OE_XOR (0): Perform an atomic bitwise XOR on GPIO_OE, i 79 io_wo_32 gpio_oe_togl; 80 81 _REG_(SIO_GPIO_HI_OUT_OFFSET) // SIO_GPIO_HI_OUT 82 // QSPI output value 83 // 0x0000003f [5:0] : GPIO_HI_OUT (0): Set output level (1/0 -> high/low) for QSPI IO0 84 io_rw_32 gpio_hi_out; 85 86 _REG_(SIO_GPIO_HI_OUT_SET_OFFSET) // SIO_GPIO_HI_OUT_SET 87 // QSPI output value set 88 // 0x0000003f [5:0] : GPIO_HI_OUT_SET (0): Perform an atomic bit-set on GPIO_HI_OUT, i 89 io_wo_32 gpio_hi_set; 90 91 _REG_(SIO_GPIO_HI_OUT_CLR_OFFSET) // SIO_GPIO_HI_OUT_CLR 92 // QSPI output value clear 93 // 0x0000003f [5:0] : GPIO_HI_OUT_CLR (0): Perform an atomic bit-clear on GPIO_HI_OUT, i 94 io_wo_32 gpio_hi_clr; 95 96 _REG_(SIO_GPIO_HI_OUT_XOR_OFFSET) // SIO_GPIO_HI_OUT_XOR 97 // QSPI output value XOR 98 // 0x0000003f [5:0] : GPIO_HI_OUT_XOR (0): Perform an atomic bitwise XOR on GPIO_HI_OUT, i 99 io_wo_32 gpio_hi_togl; 100 101 _REG_(SIO_GPIO_HI_OE_OFFSET) // SIO_GPIO_HI_OE 102 // QSPI output enable 103 // 0x0000003f [5:0] : GPIO_HI_OE (0): Set output enable (1/0 -> output/input) for QSPI IO0 104 io_rw_32 gpio_hi_oe; 105 106 _REG_(SIO_GPIO_HI_OE_SET_OFFSET) // SIO_GPIO_HI_OE_SET 107 // QSPI output enable set 108 // 0x0000003f [5:0] : GPIO_HI_OE_SET (0): Perform an atomic bit-set on GPIO_HI_OE, i 109 io_wo_32 gpio_hi_oe_set; 110 111 _REG_(SIO_GPIO_HI_OE_CLR_OFFSET) // SIO_GPIO_HI_OE_CLR 112 // QSPI output enable clear 113 // 0x0000003f [5:0] : GPIO_HI_OE_CLR (0): Perform an atomic bit-clear on GPIO_HI_OE, i 114 io_wo_32 gpio_hi_oe_clr; 115 116 _REG_(SIO_GPIO_HI_OE_XOR_OFFSET) // SIO_GPIO_HI_OE_XOR 117 // QSPI output enable XOR 118 // 0x0000003f [5:0] : GPIO_HI_OE_XOR (0): Perform an atomic bitwise XOR on GPIO_HI_OE, i 119 io_wo_32 gpio_hi_oe_togl; 120 121 _REG_(SIO_FIFO_ST_OFFSET) // SIO_FIFO_ST 122 // Status register for inter-core FIFOs (mailboxes) 123 // 0x00000008 [3] : ROE (0): Sticky flag indicating the RX FIFO was read when empty 124 // 0x00000004 [2] : WOF (0): Sticky flag indicating the TX FIFO was written when full 125 // 0x00000002 [1] : RDY (1): Value is 1 if this core's TX FIFO is not full (i 126 // 0x00000001 [0] : VLD (0): Value is 1 if this core's RX FIFO is not empty (i 127 io_rw_32 fifo_st; 128 129 _REG_(SIO_FIFO_WR_OFFSET) // SIO_FIFO_WR 130 // Write access to this core's TX FIFO 131 io_wo_32 fifo_wr; 132 133 _REG_(SIO_FIFO_RD_OFFSET) // SIO_FIFO_RD 134 // Read access to this core's RX FIFO 135 io_ro_32 fifo_rd; 136 137 _REG_(SIO_SPINLOCK_ST_OFFSET) // SIO_SPINLOCK_ST 138 // Spinlock state 139 io_ro_32 spinlock_st; 140 141 _REG_(SIO_DIV_UDIVIDEND_OFFSET) // SIO_DIV_UDIVIDEND 142 // Divider unsigned dividend 143 io_rw_32 div_udividend; 144 145 _REG_(SIO_DIV_UDIVISOR_OFFSET) // SIO_DIV_UDIVISOR 146 // Divider unsigned divisor 147 io_rw_32 div_udivisor; 148 149 _REG_(SIO_DIV_SDIVIDEND_OFFSET) // SIO_DIV_SDIVIDEND 150 // Divider signed dividend 151 io_rw_32 div_sdividend; 152 153 _REG_(SIO_DIV_SDIVISOR_OFFSET) // SIO_DIV_SDIVISOR 154 // Divider signed divisor 155 io_rw_32 div_sdivisor; 156 157 _REG_(SIO_DIV_QUOTIENT_OFFSET) // SIO_DIV_QUOTIENT 158 // Divider result quotient 159 io_rw_32 div_quotient; 160 161 _REG_(SIO_DIV_REMAINDER_OFFSET) // SIO_DIV_REMAINDER 162 // Divider result remainder 163 io_rw_32 div_remainder; 164 165 _REG_(SIO_DIV_CSR_OFFSET) // SIO_DIV_CSR 166 // Control and status register for divider 167 // 0x00000002 [1] : DIRTY (0): Changes to 1 when any register is written, and back to 0 when QUOTIENT is read 168 // 0x00000001 [0] : READY (1): Reads as 0 when a calculation is in progress, 1 otherwise 169 io_ro_32 div_csr; 170 uint32_t _pad1; 171 interp_hw_t interp[2]; 172 } sio_hw_t; 173 174 #define sio_hw ((sio_hw_t *)SIO_BASE) 175 176 #endif 177