kopia lustrzana https://github.com/majbthrd/pico-debug
315 wiersze
13 KiB
C
315 wiersze
13 KiB
C
/**
|
|
* 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
|