1 /** 2 * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 // ============================================================================= 7 // Register block : ADC 8 // Version : 2 9 // Bus type : apb 10 // Description : Control and data interface to SAR ADC 11 // ============================================================================= 12 #ifndef HARDWARE_REGS_ADC_DEFINED 13 #define HARDWARE_REGS_ADC_DEFINED 14 // ============================================================================= 15 // Register : ADC_CS 16 // Description : ADC Control and Status 17 #define ADC_CS_OFFSET _u(0x00000000) 18 #define ADC_CS_BITS _u(0x001f770f) 19 #define ADC_CS_RESET _u(0x00000000) 20 // ----------------------------------------------------------------------------- 21 // Field : ADC_CS_RROBIN 22 // Description : Round-robin sampling. 1 bit per channel. Set all bits to 0 to 23 // disable. 24 // Otherwise, the ADC will cycle through each enabled channel in a 25 // round-robin fashion. 26 // The first channel to be sampled will be the one currently 27 // indicated by AINSEL. 28 // AINSEL will be updated after each conversion with the 29 // newly-selected channel. 30 #define ADC_CS_RROBIN_RESET _u(0x00) 31 #define ADC_CS_RROBIN_BITS _u(0x001f0000) 32 #define ADC_CS_RROBIN_MSB _u(20) 33 #define ADC_CS_RROBIN_LSB _u(16) 34 #define ADC_CS_RROBIN_ACCESS "RW" 35 // ----------------------------------------------------------------------------- 36 // Field : ADC_CS_AINSEL 37 // Description : Select analog mux input. Updated automatically in round-robin 38 // mode. 39 #define ADC_CS_AINSEL_RESET _u(0x0) 40 #define ADC_CS_AINSEL_BITS _u(0x00007000) 41 #define ADC_CS_AINSEL_MSB _u(14) 42 #define ADC_CS_AINSEL_LSB _u(12) 43 #define ADC_CS_AINSEL_ACCESS "RW" 44 // ----------------------------------------------------------------------------- 45 // Field : ADC_CS_ERR_STICKY 46 // Description : Some past ADC conversion encountered an error. Write 1 to 47 // clear. 48 #define ADC_CS_ERR_STICKY_RESET _u(0x0) 49 #define ADC_CS_ERR_STICKY_BITS _u(0x00000400) 50 #define ADC_CS_ERR_STICKY_MSB _u(10) 51 #define ADC_CS_ERR_STICKY_LSB _u(10) 52 #define ADC_CS_ERR_STICKY_ACCESS "WC" 53 // ----------------------------------------------------------------------------- 54 // Field : ADC_CS_ERR 55 // Description : The most recent ADC conversion encountered an error; result is 56 // undefined or noisy. 57 #define ADC_CS_ERR_RESET _u(0x0) 58 #define ADC_CS_ERR_BITS _u(0x00000200) 59 #define ADC_CS_ERR_MSB _u(9) 60 #define ADC_CS_ERR_LSB _u(9) 61 #define ADC_CS_ERR_ACCESS "RO" 62 // ----------------------------------------------------------------------------- 63 // Field : ADC_CS_READY 64 // Description : 1 if the ADC is ready to start a new conversion. Implies any 65 // previous conversion has completed. 66 // 0 whilst conversion in progress. 67 #define ADC_CS_READY_RESET _u(0x0) 68 #define ADC_CS_READY_BITS _u(0x00000100) 69 #define ADC_CS_READY_MSB _u(8) 70 #define ADC_CS_READY_LSB _u(8) 71 #define ADC_CS_READY_ACCESS "RO" 72 // ----------------------------------------------------------------------------- 73 // Field : ADC_CS_START_MANY 74 // Description : Continuously perform conversions whilst this bit is 1. A new 75 // conversion will start immediately after the previous finishes. 76 #define ADC_CS_START_MANY_RESET _u(0x0) 77 #define ADC_CS_START_MANY_BITS _u(0x00000008) 78 #define ADC_CS_START_MANY_MSB _u(3) 79 #define ADC_CS_START_MANY_LSB _u(3) 80 #define ADC_CS_START_MANY_ACCESS "RW" 81 // ----------------------------------------------------------------------------- 82 // Field : ADC_CS_START_ONCE 83 // Description : Start a single conversion. Self-clearing. Ignored if start_many 84 // is asserted. 85 #define ADC_CS_START_ONCE_RESET _u(0x0) 86 #define ADC_CS_START_ONCE_BITS _u(0x00000004) 87 #define ADC_CS_START_ONCE_MSB _u(2) 88 #define ADC_CS_START_ONCE_LSB _u(2) 89 #define ADC_CS_START_ONCE_ACCESS "SC" 90 // ----------------------------------------------------------------------------- 91 // Field : ADC_CS_TS_EN 92 // Description : Power on temperature sensor. 1 - enabled. 0 - disabled. 93 #define ADC_CS_TS_EN_RESET _u(0x0) 94 #define ADC_CS_TS_EN_BITS _u(0x00000002) 95 #define ADC_CS_TS_EN_MSB _u(1) 96 #define ADC_CS_TS_EN_LSB _u(1) 97 #define ADC_CS_TS_EN_ACCESS "RW" 98 // ----------------------------------------------------------------------------- 99 // Field : ADC_CS_EN 100 // Description : Power on ADC and enable its clock. 101 // 1 - enabled. 0 - disabled. 102 #define ADC_CS_EN_RESET _u(0x0) 103 #define ADC_CS_EN_BITS _u(0x00000001) 104 #define ADC_CS_EN_MSB _u(0) 105 #define ADC_CS_EN_LSB _u(0) 106 #define ADC_CS_EN_ACCESS "RW" 107 // ============================================================================= 108 // Register : ADC_RESULT 109 // Description : Result of most recent ADC conversion 110 #define ADC_RESULT_OFFSET _u(0x00000004) 111 #define ADC_RESULT_BITS _u(0x00000fff) 112 #define ADC_RESULT_RESET _u(0x00000000) 113 #define ADC_RESULT_MSB _u(11) 114 #define ADC_RESULT_LSB _u(0) 115 #define ADC_RESULT_ACCESS "RO" 116 // ============================================================================= 117 // Register : ADC_FCS 118 // Description : FIFO control and status 119 #define ADC_FCS_OFFSET _u(0x00000008) 120 #define ADC_FCS_BITS _u(0x0f0f0f0f) 121 #define ADC_FCS_RESET _u(0x00000000) 122 // ----------------------------------------------------------------------------- 123 // Field : ADC_FCS_THRESH 124 // Description : DREQ/IRQ asserted when level >= threshold 125 #define ADC_FCS_THRESH_RESET _u(0x0) 126 #define ADC_FCS_THRESH_BITS _u(0x0f000000) 127 #define ADC_FCS_THRESH_MSB _u(27) 128 #define ADC_FCS_THRESH_LSB _u(24) 129 #define ADC_FCS_THRESH_ACCESS "RW" 130 // ----------------------------------------------------------------------------- 131 // Field : ADC_FCS_LEVEL 132 // Description : The number of conversion results currently waiting in the FIFO 133 #define ADC_FCS_LEVEL_RESET _u(0x0) 134 #define ADC_FCS_LEVEL_BITS _u(0x000f0000) 135 #define ADC_FCS_LEVEL_MSB _u(19) 136 #define ADC_FCS_LEVEL_LSB _u(16) 137 #define ADC_FCS_LEVEL_ACCESS "RO" 138 // ----------------------------------------------------------------------------- 139 // Field : ADC_FCS_OVER 140 // Description : 1 if the FIFO has been overflowed. Write 1 to clear. 141 #define ADC_FCS_OVER_RESET _u(0x0) 142 #define ADC_FCS_OVER_BITS _u(0x00000800) 143 #define ADC_FCS_OVER_MSB _u(11) 144 #define ADC_FCS_OVER_LSB _u(11) 145 #define ADC_FCS_OVER_ACCESS "WC" 146 // ----------------------------------------------------------------------------- 147 // Field : ADC_FCS_UNDER 148 // Description : 1 if the FIFO has been underflowed. Write 1 to clear. 149 #define ADC_FCS_UNDER_RESET _u(0x0) 150 #define ADC_FCS_UNDER_BITS _u(0x00000400) 151 #define ADC_FCS_UNDER_MSB _u(10) 152 #define ADC_FCS_UNDER_LSB _u(10) 153 #define ADC_FCS_UNDER_ACCESS "WC" 154 // ----------------------------------------------------------------------------- 155 // Field : ADC_FCS_FULL 156 // Description : None 157 #define ADC_FCS_FULL_RESET _u(0x0) 158 #define ADC_FCS_FULL_BITS _u(0x00000200) 159 #define ADC_FCS_FULL_MSB _u(9) 160 #define ADC_FCS_FULL_LSB _u(9) 161 #define ADC_FCS_FULL_ACCESS "RO" 162 // ----------------------------------------------------------------------------- 163 // Field : ADC_FCS_EMPTY 164 // Description : None 165 #define ADC_FCS_EMPTY_RESET _u(0x0) 166 #define ADC_FCS_EMPTY_BITS _u(0x00000100) 167 #define ADC_FCS_EMPTY_MSB _u(8) 168 #define ADC_FCS_EMPTY_LSB _u(8) 169 #define ADC_FCS_EMPTY_ACCESS "RO" 170 // ----------------------------------------------------------------------------- 171 // Field : ADC_FCS_DREQ_EN 172 // Description : If 1: assert DMA requests when FIFO contains data 173 #define ADC_FCS_DREQ_EN_RESET _u(0x0) 174 #define ADC_FCS_DREQ_EN_BITS _u(0x00000008) 175 #define ADC_FCS_DREQ_EN_MSB _u(3) 176 #define ADC_FCS_DREQ_EN_LSB _u(3) 177 #define ADC_FCS_DREQ_EN_ACCESS "RW" 178 // ----------------------------------------------------------------------------- 179 // Field : ADC_FCS_ERR 180 // Description : If 1: conversion error bit appears in the FIFO alongside the 181 // result 182 #define ADC_FCS_ERR_RESET _u(0x0) 183 #define ADC_FCS_ERR_BITS _u(0x00000004) 184 #define ADC_FCS_ERR_MSB _u(2) 185 #define ADC_FCS_ERR_LSB _u(2) 186 #define ADC_FCS_ERR_ACCESS "RW" 187 // ----------------------------------------------------------------------------- 188 // Field : ADC_FCS_SHIFT 189 // Description : If 1: FIFO results are right-shifted to be one byte in size. 190 // Enables DMA to byte buffers. 191 #define ADC_FCS_SHIFT_RESET _u(0x0) 192 #define ADC_FCS_SHIFT_BITS _u(0x00000002) 193 #define ADC_FCS_SHIFT_MSB _u(1) 194 #define ADC_FCS_SHIFT_LSB _u(1) 195 #define ADC_FCS_SHIFT_ACCESS "RW" 196 // ----------------------------------------------------------------------------- 197 // Field : ADC_FCS_EN 198 // Description : If 1: write result to the FIFO after each conversion. 199 #define ADC_FCS_EN_RESET _u(0x0) 200 #define ADC_FCS_EN_BITS _u(0x00000001) 201 #define ADC_FCS_EN_MSB _u(0) 202 #define ADC_FCS_EN_LSB _u(0) 203 #define ADC_FCS_EN_ACCESS "RW" 204 // ============================================================================= 205 // Register : ADC_FIFO 206 // Description : Conversion result FIFO 207 #define ADC_FIFO_OFFSET _u(0x0000000c) 208 #define ADC_FIFO_BITS _u(0x00008fff) 209 #define ADC_FIFO_RESET _u(0x00000000) 210 // ----------------------------------------------------------------------------- 211 // Field : ADC_FIFO_ERR 212 // Description : 1 if this particular sample experienced a conversion error. 213 // Remains in the same location if the sample is shifted. 214 #define ADC_FIFO_ERR_RESET "-" 215 #define ADC_FIFO_ERR_BITS _u(0x00008000) 216 #define ADC_FIFO_ERR_MSB _u(15) 217 #define ADC_FIFO_ERR_LSB _u(15) 218 #define ADC_FIFO_ERR_ACCESS "RF" 219 // ----------------------------------------------------------------------------- 220 // Field : ADC_FIFO_VAL 221 // Description : None 222 #define ADC_FIFO_VAL_RESET "-" 223 #define ADC_FIFO_VAL_BITS _u(0x00000fff) 224 #define ADC_FIFO_VAL_MSB _u(11) 225 #define ADC_FIFO_VAL_LSB _u(0) 226 #define ADC_FIFO_VAL_ACCESS "RF" 227 // ============================================================================= 228 // Register : ADC_DIV 229 // Description : Clock divider. If non-zero, CS_START_MANY will start 230 // conversions 231 // at regular intervals rather than back-to-back. 232 // The divider is reset when either of these fields are written. 233 // Total period is 1 + INT + FRAC / 256 234 #define ADC_DIV_OFFSET _u(0x00000010) 235 #define ADC_DIV_BITS _u(0x00ffffff) 236 #define ADC_DIV_RESET _u(0x00000000) 237 // ----------------------------------------------------------------------------- 238 // Field : ADC_DIV_INT 239 // Description : Integer part of clock divisor. 240 #define ADC_DIV_INT_RESET _u(0x0000) 241 #define ADC_DIV_INT_BITS _u(0x00ffff00) 242 #define ADC_DIV_INT_MSB _u(23) 243 #define ADC_DIV_INT_LSB _u(8) 244 #define ADC_DIV_INT_ACCESS "RW" 245 // ----------------------------------------------------------------------------- 246 // Field : ADC_DIV_FRAC 247 // Description : Fractional part of clock divisor. First-order delta-sigma. 248 #define ADC_DIV_FRAC_RESET _u(0x00) 249 #define ADC_DIV_FRAC_BITS _u(0x000000ff) 250 #define ADC_DIV_FRAC_MSB _u(7) 251 #define ADC_DIV_FRAC_LSB _u(0) 252 #define ADC_DIV_FRAC_ACCESS "RW" 253 // ============================================================================= 254 // Register : ADC_INTR 255 // Description : Raw Interrupts 256 #define ADC_INTR_OFFSET _u(0x00000014) 257 #define ADC_INTR_BITS _u(0x00000001) 258 #define ADC_INTR_RESET _u(0x00000000) 259 // ----------------------------------------------------------------------------- 260 // Field : ADC_INTR_FIFO 261 // Description : Triggered when the sample FIFO reaches a certain level. 262 // This level can be programmed via the FCS_THRESH field. 263 #define ADC_INTR_FIFO_RESET _u(0x0) 264 #define ADC_INTR_FIFO_BITS _u(0x00000001) 265 #define ADC_INTR_FIFO_MSB _u(0) 266 #define ADC_INTR_FIFO_LSB _u(0) 267 #define ADC_INTR_FIFO_ACCESS "RO" 268 // ============================================================================= 269 // Register : ADC_INTE 270 // Description : Interrupt Enable 271 #define ADC_INTE_OFFSET _u(0x00000018) 272 #define ADC_INTE_BITS _u(0x00000001) 273 #define ADC_INTE_RESET _u(0x00000000) 274 // ----------------------------------------------------------------------------- 275 // Field : ADC_INTE_FIFO 276 // Description : Triggered when the sample FIFO reaches a certain level. 277 // This level can be programmed via the FCS_THRESH field. 278 #define ADC_INTE_FIFO_RESET _u(0x0) 279 #define ADC_INTE_FIFO_BITS _u(0x00000001) 280 #define ADC_INTE_FIFO_MSB _u(0) 281 #define ADC_INTE_FIFO_LSB _u(0) 282 #define ADC_INTE_FIFO_ACCESS "RW" 283 // ============================================================================= 284 // Register : ADC_INTF 285 // Description : Interrupt Force 286 #define ADC_INTF_OFFSET _u(0x0000001c) 287 #define ADC_INTF_BITS _u(0x00000001) 288 #define ADC_INTF_RESET _u(0x00000000) 289 // ----------------------------------------------------------------------------- 290 // Field : ADC_INTF_FIFO 291 // Description : Triggered when the sample FIFO reaches a certain level. 292 // This level can be programmed via the FCS_THRESH field. 293 #define ADC_INTF_FIFO_RESET _u(0x0) 294 #define ADC_INTF_FIFO_BITS _u(0x00000001) 295 #define ADC_INTF_FIFO_MSB _u(0) 296 #define ADC_INTF_FIFO_LSB _u(0) 297 #define ADC_INTF_FIFO_ACCESS "RW" 298 // ============================================================================= 299 // Register : ADC_INTS 300 // Description : Interrupt status after masking & forcing 301 #define ADC_INTS_OFFSET _u(0x00000020) 302 #define ADC_INTS_BITS _u(0x00000001) 303 #define ADC_INTS_RESET _u(0x00000000) 304 // ----------------------------------------------------------------------------- 305 // Field : ADC_INTS_FIFO 306 // Description : Triggered when the sample FIFO reaches a certain level. 307 // This level can be programmed via the FCS_THRESH field. 308 #define ADC_INTS_FIFO_RESET _u(0x0) 309 #define ADC_INTS_FIFO_BITS _u(0x00000001) 310 #define ADC_INTS_FIFO_MSB _u(0) 311 #define ADC_INTS_FIFO_LSB _u(0) 312 #define ADC_INTS_FIFO_ACCESS "RO" 313 // ============================================================================= 314 #endif // HARDWARE_REGS_ADC_DEFINED 315