| /** |
| * Copyright (c) 2021 Raspberry Pi (Trading) Ltd. |
| * |
| * SPDX-License-Identifier: BSD-3-Clause |
| */ |
| // ============================================================================= |
| // Register block : ADC |
| // Version : 2 |
| // Bus type : apb |
| // Description : Control and data interface to SAR ADC |
| // ============================================================================= |
| #ifndef HARDWARE_REGS_ADC_DEFINED |
| #define HARDWARE_REGS_ADC_DEFINED |
| // ============================================================================= |
| // Register : ADC_CS |
| // Description : ADC Control and Status |
| #define ADC_CS_OFFSET 0x00000000 |
| #define ADC_CS_BITS 0x001f770f |
| #define ADC_CS_RESET 0x00000000 |
| // ----------------------------------------------------------------------------- |
| // Field : ADC_CS_RROBIN |
| // Description : Round-robin sampling. 1 bit per channel. Set all bits to 0 to |
| // disable. |
| // Otherwise, the ADC will cycle through each enabled channel in a |
| // round-robin fashion. |
| // The first channel to be sampled will be the one currently |
| // indicated by AINSEL. |
| // AINSEL will be updated after each conversion with the |
| // newly-selected channel. |
| #define ADC_CS_RROBIN_RESET 0x00 |
| #define ADC_CS_RROBIN_BITS 0x001f0000 |
| #define ADC_CS_RROBIN_MSB 20 |
| #define ADC_CS_RROBIN_LSB 16 |
| #define ADC_CS_RROBIN_ACCESS "RW" |
| // ----------------------------------------------------------------------------- |
| // Field : ADC_CS_AINSEL |
| // Description : Select analog mux input. Updated automatically in round-robin |
| // mode. |
| #define ADC_CS_AINSEL_RESET 0x0 |
| #define ADC_CS_AINSEL_BITS 0x00007000 |
| #define ADC_CS_AINSEL_MSB 14 |
| #define ADC_CS_AINSEL_LSB 12 |
| #define ADC_CS_AINSEL_ACCESS "RW" |
| // ----------------------------------------------------------------------------- |
| // Field : ADC_CS_ERR_STICKY |
| // Description : Some past ADC conversion encountered an error. Write 1 to |
| // clear. |
| #define ADC_CS_ERR_STICKY_RESET 0x0 |
| #define ADC_CS_ERR_STICKY_BITS 0x00000400 |
| #define ADC_CS_ERR_STICKY_MSB 10 |
| #define ADC_CS_ERR_STICKY_LSB 10 |
| #define ADC_CS_ERR_STICKY_ACCESS "WC" |
| // ----------------------------------------------------------------------------- |
| // Field : ADC_CS_ERR |
| // Description : The most recent ADC conversion encountered an error; result is |
| // undefined or noisy. |
| #define ADC_CS_ERR_RESET 0x0 |
| #define ADC_CS_ERR_BITS 0x00000200 |
| #define ADC_CS_ERR_MSB 9 |
| #define ADC_CS_ERR_LSB 9 |
| #define ADC_CS_ERR_ACCESS "RO" |
| // ----------------------------------------------------------------------------- |
| // Field : ADC_CS_READY |
| // Description : 1 if the ADC is ready to start a new conversion. Implies any |
| // previous conversion has completed. |
| // 0 whilst conversion in progress. |
| #define ADC_CS_READY_RESET 0x0 |
| #define ADC_CS_READY_BITS 0x00000100 |
| #define ADC_CS_READY_MSB 8 |
| #define ADC_CS_READY_LSB 8 |
| #define ADC_CS_READY_ACCESS "RO" |
| // ----------------------------------------------------------------------------- |
| // Field : ADC_CS_START_MANY |
| // Description : Continuously perform conversions whilst this bit is 1. A new |
| // conversion will start immediately after the previous finishes. |
| #define ADC_CS_START_MANY_RESET 0x0 |
| #define ADC_CS_START_MANY_BITS 0x00000008 |
| #define ADC_CS_START_MANY_MSB 3 |
| #define ADC_CS_START_MANY_LSB 3 |
| #define ADC_CS_START_MANY_ACCESS "RW" |
| // ----------------------------------------------------------------------------- |
| // Field : ADC_CS_START_ONCE |
| // Description : Start a single conversion. Self-clearing. Ignored if start_many |
| // is asserted. |
| #define ADC_CS_START_ONCE_RESET 0x0 |
| #define ADC_CS_START_ONCE_BITS 0x00000004 |
| #define ADC_CS_START_ONCE_MSB 2 |
| #define ADC_CS_START_ONCE_LSB 2 |
| #define ADC_CS_START_ONCE_ACCESS "SC" |
| // ----------------------------------------------------------------------------- |
| // Field : ADC_CS_TS_EN |
| // Description : Power on temperature sensor. 1 - enabled. 0 - disabled. |
| #define ADC_CS_TS_EN_RESET 0x0 |
| #define ADC_CS_TS_EN_BITS 0x00000002 |
| #define ADC_CS_TS_EN_MSB 1 |
| #define ADC_CS_TS_EN_LSB 1 |
| #define ADC_CS_TS_EN_ACCESS "RW" |
| // ----------------------------------------------------------------------------- |
| // Field : ADC_CS_EN |
| // Description : Power on ADC and enable its clock. |
| // 1 - enabled. 0 - disabled. |
| #define ADC_CS_EN_RESET 0x0 |
| #define ADC_CS_EN_BITS 0x00000001 |
| #define ADC_CS_EN_MSB 0 |
| #define ADC_CS_EN_LSB 0 |
| #define ADC_CS_EN_ACCESS "RW" |
| // ============================================================================= |
| // Register : ADC_RESULT |
| // Description : Result of most recent ADC conversion |
| #define ADC_RESULT_OFFSET 0x00000004 |
| #define ADC_RESULT_BITS 0x00000fff |
| #define ADC_RESULT_RESET 0x00000000 |
| #define ADC_RESULT_MSB 11 |
| #define ADC_RESULT_LSB 0 |
| #define ADC_RESULT_ACCESS "RO" |
| // ============================================================================= |
| // Register : ADC_FCS |
| // Description : FIFO control and status |
| #define ADC_FCS_OFFSET 0x00000008 |
| #define ADC_FCS_BITS 0x0f0f0f0f |
| #define ADC_FCS_RESET 0x00000000 |
| // ----------------------------------------------------------------------------- |
| // Field : ADC_FCS_THRESH |
| // Description : DREQ/IRQ asserted when level >= threshold |
| #define ADC_FCS_THRESH_RESET 0x0 |
| #define ADC_FCS_THRESH_BITS 0x0f000000 |
| #define ADC_FCS_THRESH_MSB 27 |
| #define ADC_FCS_THRESH_LSB 24 |
| #define ADC_FCS_THRESH_ACCESS "RW" |
| // ----------------------------------------------------------------------------- |
| // Field : ADC_FCS_LEVEL |
| // Description : The number of conversion results currently waiting in the FIFO |
| #define ADC_FCS_LEVEL_RESET 0x0 |
| #define ADC_FCS_LEVEL_BITS 0x000f0000 |
| #define ADC_FCS_LEVEL_MSB 19 |
| #define ADC_FCS_LEVEL_LSB 16 |
| #define ADC_FCS_LEVEL_ACCESS "RO" |
| // ----------------------------------------------------------------------------- |
| // Field : ADC_FCS_OVER |
| // Description : 1 if the FIFO has been overflowed. Write 1 to clear. |
| #define ADC_FCS_OVER_RESET 0x0 |
| #define ADC_FCS_OVER_BITS 0x00000800 |
| #define ADC_FCS_OVER_MSB 11 |
| #define ADC_FCS_OVER_LSB 11 |
| #define ADC_FCS_OVER_ACCESS "WC" |
| // ----------------------------------------------------------------------------- |
| // Field : ADC_FCS_UNDER |
| // Description : 1 if the FIFO has been underflowed. Write 1 to clear. |
| #define ADC_FCS_UNDER_RESET 0x0 |
| #define ADC_FCS_UNDER_BITS 0x00000400 |
| #define ADC_FCS_UNDER_MSB 10 |
| #define ADC_FCS_UNDER_LSB 10 |
| #define ADC_FCS_UNDER_ACCESS "WC" |
| // ----------------------------------------------------------------------------- |
| // Field : ADC_FCS_FULL |
| // Description : None |
| #define ADC_FCS_FULL_RESET 0x0 |
| #define ADC_FCS_FULL_BITS 0x00000200 |
| #define ADC_FCS_FULL_MSB 9 |
| #define ADC_FCS_FULL_LSB 9 |
| #define ADC_FCS_FULL_ACCESS "RO" |
| // ----------------------------------------------------------------------------- |
| // Field : ADC_FCS_EMPTY |
| // Description : None |
| #define ADC_FCS_EMPTY_RESET 0x0 |
| #define ADC_FCS_EMPTY_BITS 0x00000100 |
| #define ADC_FCS_EMPTY_MSB 8 |
| #define ADC_FCS_EMPTY_LSB 8 |
| #define ADC_FCS_EMPTY_ACCESS "RO" |
| // ----------------------------------------------------------------------------- |
| // Field : ADC_FCS_DREQ_EN |
| // Description : If 1: assert DMA requests when FIFO contains data |
| #define ADC_FCS_DREQ_EN_RESET 0x0 |
| #define ADC_FCS_DREQ_EN_BITS 0x00000008 |
| #define ADC_FCS_DREQ_EN_MSB 3 |
| #define ADC_FCS_DREQ_EN_LSB 3 |
| #define ADC_FCS_DREQ_EN_ACCESS "RW" |
| // ----------------------------------------------------------------------------- |
| // Field : ADC_FCS_ERR |
| // Description : If 1: conversion error bit appears in the FIFO alongside the |
| // result |
| #define ADC_FCS_ERR_RESET 0x0 |
| #define ADC_FCS_ERR_BITS 0x00000004 |
| #define ADC_FCS_ERR_MSB 2 |
| #define ADC_FCS_ERR_LSB 2 |
| #define ADC_FCS_ERR_ACCESS "RW" |
| // ----------------------------------------------------------------------------- |
| // Field : ADC_FCS_SHIFT |
| // Description : If 1: FIFO results are right-shifted to be one byte in size. |
| // Enables DMA to byte buffers. |
| #define ADC_FCS_SHIFT_RESET 0x0 |
| #define ADC_FCS_SHIFT_BITS 0x00000002 |
| #define ADC_FCS_SHIFT_MSB 1 |
| #define ADC_FCS_SHIFT_LSB 1 |
| #define ADC_FCS_SHIFT_ACCESS "RW" |
| // ----------------------------------------------------------------------------- |
| // Field : ADC_FCS_EN |
| // Description : If 1: write result to the FIFO after each conversion. |
| #define ADC_FCS_EN_RESET 0x0 |
| #define ADC_FCS_EN_BITS 0x00000001 |
| #define ADC_FCS_EN_MSB 0 |
| #define ADC_FCS_EN_LSB 0 |
| #define ADC_FCS_EN_ACCESS "RW" |
| // ============================================================================= |
| // Register : ADC_FIFO |
| // Description : Conversion result FIFO |
| #define ADC_FIFO_OFFSET 0x0000000c |
| #define ADC_FIFO_BITS 0x00008fff |
| #define ADC_FIFO_RESET 0x00000000 |
| // ----------------------------------------------------------------------------- |
| // Field : ADC_FIFO_ERR |
| // Description : 1 if this particular sample experienced a conversion error. |
| // Remains in the same location if the sample is shifted. |
| #define ADC_FIFO_ERR_RESET "-" |
| #define ADC_FIFO_ERR_BITS 0x00008000 |
| #define ADC_FIFO_ERR_MSB 15 |
| #define ADC_FIFO_ERR_LSB 15 |
| #define ADC_FIFO_ERR_ACCESS "RF" |
| // ----------------------------------------------------------------------------- |
| // Field : ADC_FIFO_VAL |
| // Description : None |
| #define ADC_FIFO_VAL_RESET "-" |
| #define ADC_FIFO_VAL_BITS 0x00000fff |
| #define ADC_FIFO_VAL_MSB 11 |
| #define ADC_FIFO_VAL_LSB 0 |
| #define ADC_FIFO_VAL_ACCESS "RF" |
| // ============================================================================= |
| // Register : ADC_DIV |
| // Description : Clock divider. If non-zero, CS_START_MANY will start |
| // conversions |
| // at regular intervals rather than back-to-back. |
| // The divider is reset when either of these fields are written. |
| // Total period is 1 + INT + FRAC / 256 |
| #define ADC_DIV_OFFSET 0x00000010 |
| #define ADC_DIV_BITS 0x00ffffff |
| #define ADC_DIV_RESET 0x00000000 |
| // ----------------------------------------------------------------------------- |
| // Field : ADC_DIV_INT |
| // Description : Integer part of clock divisor. |
| #define ADC_DIV_INT_RESET 0x0000 |
| #define ADC_DIV_INT_BITS 0x00ffff00 |
| #define ADC_DIV_INT_MSB 23 |
| #define ADC_DIV_INT_LSB 8 |
| #define ADC_DIV_INT_ACCESS "RW" |
| // ----------------------------------------------------------------------------- |
| // Field : ADC_DIV_FRAC |
| // Description : Fractional part of clock divisor. First-order delta-sigma. |
| #define ADC_DIV_FRAC_RESET 0x00 |
| #define ADC_DIV_FRAC_BITS 0x000000ff |
| #define ADC_DIV_FRAC_MSB 7 |
| #define ADC_DIV_FRAC_LSB 0 |
| #define ADC_DIV_FRAC_ACCESS "RW" |
| // ============================================================================= |
| // Register : ADC_INTR |
| // Description : Raw Interrupts |
| #define ADC_INTR_OFFSET 0x00000014 |
| #define ADC_INTR_BITS 0x00000001 |
| #define ADC_INTR_RESET 0x00000000 |
| // ----------------------------------------------------------------------------- |
| // Field : ADC_INTR_FIFO |
| // Description : Triggered when the sample FIFO reaches a certain level. |
| // This level can be programmed via the FCS_THRESH field. |
| #define ADC_INTR_FIFO_RESET 0x0 |
| #define ADC_INTR_FIFO_BITS 0x00000001 |
| #define ADC_INTR_FIFO_MSB 0 |
| #define ADC_INTR_FIFO_LSB 0 |
| #define ADC_INTR_FIFO_ACCESS "RO" |
| // ============================================================================= |
| // Register : ADC_INTE |
| // Description : Interrupt Enable |
| #define ADC_INTE_OFFSET 0x00000018 |
| #define ADC_INTE_BITS 0x00000001 |
| #define ADC_INTE_RESET 0x00000000 |
| // ----------------------------------------------------------------------------- |
| // Field : ADC_INTE_FIFO |
| // Description : Triggered when the sample FIFO reaches a certain level. |
| // This level can be programmed via the FCS_THRESH field. |
| #define ADC_INTE_FIFO_RESET 0x0 |
| #define ADC_INTE_FIFO_BITS 0x00000001 |
| #define ADC_INTE_FIFO_MSB 0 |
| #define ADC_INTE_FIFO_LSB 0 |
| #define ADC_INTE_FIFO_ACCESS "RW" |
| // ============================================================================= |
| // Register : ADC_INTF |
| // Description : Interrupt Force |
| #define ADC_INTF_OFFSET 0x0000001c |
| #define ADC_INTF_BITS 0x00000001 |
| #define ADC_INTF_RESET 0x00000000 |
| // ----------------------------------------------------------------------------- |
| // Field : ADC_INTF_FIFO |
| // Description : Triggered when the sample FIFO reaches a certain level. |
| // This level can be programmed via the FCS_THRESH field. |
| #define ADC_INTF_FIFO_RESET 0x0 |
| #define ADC_INTF_FIFO_BITS 0x00000001 |
| #define ADC_INTF_FIFO_MSB 0 |
| #define ADC_INTF_FIFO_LSB 0 |
| #define ADC_INTF_FIFO_ACCESS "RW" |
| // ============================================================================= |
| // Register : ADC_INTS |
| // Description : Interrupt status after masking & forcing |
| #define ADC_INTS_OFFSET 0x00000020 |
| #define ADC_INTS_BITS 0x00000001 |
| #define ADC_INTS_RESET 0x00000000 |
| // ----------------------------------------------------------------------------- |
| // Field : ADC_INTS_FIFO |
| // Description : Triggered when the sample FIFO reaches a certain level. |
| // This level can be programmed via the FCS_THRESH field. |
| #define ADC_INTS_FIFO_RESET 0x0 |
| #define ADC_INTS_FIFO_BITS 0x00000001 |
| #define ADC_INTS_FIFO_MSB 0 |
| #define ADC_INTS_FIFO_LSB 0 |
| #define ADC_INTS_FIFO_ACCESS "RO" |
| // ============================================================================= |
| #endif // HARDWARE_REGS_ADC_DEFINED |