blob: dbf6b3a06d999274937c0db38461cfa0d45a7a89 [file] [log] [blame]
/******************************************************************************
* Filename: hw_i2s_h
* Revised: 2016-03-14 09:20:59 +0100 (Mon, 14 Mar 2016)
* Revision: 45924
*
* Copyright (c) 2015 - 2016, Texas Instruments Incorporated
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1) Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2) Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3) Neither the name of the ORGANIZATION nor the names of its contributors may
* be used to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
******************************************************************************/
#ifndef __HW_I2S_H__
#define __HW_I2S_H__
//*****************************************************************************
//
// This section defines the register offsets of
// I2S component
//
//*****************************************************************************
// WCLK Source Selection
#define I2S_O_AIFWCLKSRC 0x00000000
// DMA Buffer Size Configuration
#define I2S_O_AIFDMACFG 0x00000004
// Pin Direction
#define I2S_O_AIFDIRCFG 0x00000008
// Serial Interface Format Configuration
#define I2S_O_AIFFMTCFG 0x0000000C
// Word Selection Bit Mask for Pin 0
#define I2S_O_AIFWMASK0 0x00000010
// Word Selection Bit Mask for Pin 1
#define I2S_O_AIFWMASK1 0x00000014
// Word Selection Bit Mask for Pin 2
#define I2S_O_AIFWMASK2 0x00000018
// Audio Interface PWM Debug Value
#define I2S_O_AIFPWMVALUE 0x0000001C
// DMA Input Buffer Next Pointer
#define I2S_O_AIFINPTRNEXT 0x00000020
// DMA Input Buffer Current Pointer
#define I2S_O_AIFINPTR 0x00000024
// DMA Output Buffer Next Pointer
#define I2S_O_AIFOUTPTRNEXT 0x00000028
// DMA Output Buffer Current Pointer
#define I2S_O_AIFOUTPTR 0x0000002C
// SampleStaMP Generator Control Register
#define I2S_O_STMPCTL 0x00000034
// Captured XOSC Counter Value, Capture Channel 0
#define I2S_O_STMPXCNTCAPT0 0x00000038
// XOSC Period Value
#define I2S_O_STMPXPER 0x0000003C
// Captured WCLK Counter Value, Capture Channel 0
#define I2S_O_STMPWCNTCAPT0 0x00000040
// WCLK Counter Period Value
#define I2S_O_STMPWPER 0x00000044
// WCLK Counter Trigger Value for Input Pins
#define I2S_O_STMPINTRIG 0x00000048
// WCLK Counter Trigger Value for Output Pins
#define I2S_O_STMPOUTTRIG 0x0000004C
// WCLK Counter Set Operation
#define I2S_O_STMPWSET 0x00000050
// WCLK Counter Add Operation
#define I2S_O_STMPWADD 0x00000054
// XOSC Minimum Period Value
#define I2S_O_STMPXPERMIN 0x00000058
// Current Value of WCNT
#define I2S_O_STMPWCNT 0x0000005C
// Current Value of XCNT
#define I2S_O_STMPXCNT 0x00000060
// Captured XOSC Counter Value, Capture Channel 1
#define I2S_O_STMPXCNTCAPT1 0x00000064
// Captured WCLK Counter Value, Capture Channel 1
#define I2S_O_STMPWCNTCAPT1 0x00000068
// Masked Interrupt Status Register
#define I2S_O_IRQMASK 0x00000070
// Raw Interrupt Status Register
#define I2S_O_IRQFLAGS 0x00000074
// Interrupt Set Register
#define I2S_O_IRQSET 0x00000078
// Interrupt Clear Register
#define I2S_O_IRQCLR 0x0000007C
//*****************************************************************************
//
// Register: I2S_O_AIFWCLKSRC
//
//*****************************************************************************
// Field: [2] WCLK_INV
//
// Inverts WCLK source (pad or internal) when set.
//
// 0: Not inverted
// 1: Inverted
#define I2S_AIFWCLKSRC_WCLK_INV 0x00000004
#define I2S_AIFWCLKSRC_WCLK_INV_BITN 2
#define I2S_AIFWCLKSRC_WCLK_INV_M 0x00000004
#define I2S_AIFWCLKSRC_WCLK_INV_S 2
// Field: [1:0] WCLK_SRC
//
// Selects WCLK source for AIF (should be the same as the BCLK source). The
// BCLK source is defined in the PRCM:I2SBCLKSEL.SRC
// ENUMs:
// RESERVED Not supported. Will give same WCLK as 'NONE'
// ('00')
// INT Internal WCLK generator, from module PRCM/ClkCtrl
// EXT External WCLK generator, from pad
// NONE None ('0')
#define I2S_AIFWCLKSRC_WCLK_SRC_W 2
#define I2S_AIFWCLKSRC_WCLK_SRC_M 0x00000003
#define I2S_AIFWCLKSRC_WCLK_SRC_S 0
#define I2S_AIFWCLKSRC_WCLK_SRC_RESERVED 0x00000003
#define I2S_AIFWCLKSRC_WCLK_SRC_INT 0x00000002
#define I2S_AIFWCLKSRC_WCLK_SRC_EXT 0x00000001
#define I2S_AIFWCLKSRC_WCLK_SRC_NONE 0x00000000
//*****************************************************************************
//
// Register: I2S_O_AIFDMACFG
//
//*****************************************************************************
// Field: [7:0] END_FRAME_IDX
//
// Defines the length of the Writing a non-zero value to this registerfield
// enables and initializes AIF. Note that before doing so, all other
// configuration must have been done, and AIFINPTR/AIFOUTPTR must have been
// loaded.
#define I2S_AIFDMACFG_END_FRAME_IDX_W 8
#define I2S_AIFDMACFG_END_FRAME_IDX_M 0x000000FF
#define I2S_AIFDMACFG_END_FRAME_IDX_S 0
//*****************************************************************************
//
// Register: I2S_O_AIFDIRCFG
//
//*****************************************************************************
// Field: [9:8] AD2
//
// Configures the AD2 audio data pin usage
//
// 0x3: Reserved
// ENUMs:
// OUT Output mode
// IN Input mode
// DIS Not in use (disabled)
#define I2S_AIFDIRCFG_AD2_W 2
#define I2S_AIFDIRCFG_AD2_M 0x00000300
#define I2S_AIFDIRCFG_AD2_S 8
#define I2S_AIFDIRCFG_AD2_OUT 0x00000200
#define I2S_AIFDIRCFG_AD2_IN 0x00000100
#define I2S_AIFDIRCFG_AD2_DIS 0x00000000
// Field: [5:4] AD1
//
// Configures the AD1 audio data pin usage:
//
// 0x3: Reserved
// ENUMs:
// OUT Output mode
// IN Input mode
// DIS Not in use (disabled)
#define I2S_AIFDIRCFG_AD1_W 2
#define I2S_AIFDIRCFG_AD1_M 0x00000030
#define I2S_AIFDIRCFG_AD1_S 4
#define I2S_AIFDIRCFG_AD1_OUT 0x00000020
#define I2S_AIFDIRCFG_AD1_IN 0x00000010
#define I2S_AIFDIRCFG_AD1_DIS 0x00000000
// Field: [1:0] AD0
//
// Configures the AD0 audio data pin usage:
//
// 0x3: Reserved
// ENUMs:
// OUT Output mode
// IN Input mode
// DIS Not in use (disabled)
#define I2S_AIFDIRCFG_AD0_W 2
#define I2S_AIFDIRCFG_AD0_M 0x00000003
#define I2S_AIFDIRCFG_AD0_S 0
#define I2S_AIFDIRCFG_AD0_OUT 0x00000002
#define I2S_AIFDIRCFG_AD0_IN 0x00000001
#define I2S_AIFDIRCFG_AD0_DIS 0x00000000
//*****************************************************************************
//
// Register: I2S_O_AIFFMTCFG
//
//*****************************************************************************
// Field: [15:8] DATA_DELAY
//
// The number of BCLK periods between a WCLK edge and MSB of the first word in
// a phase:
//
// 0x00: LJF format
// 0x01: I2S and DSP format
// 0x02: RJF format
// ...
// 0xFF: RJF format
//
// Note: When 0, MSB of the next word will be output in the idle period between
// LSB of the previous word and the start of the next word. Otherwise logical 0
// will be output until the data delay has expired.
#define I2S_AIFFMTCFG_DATA_DELAY_W 8
#define I2S_AIFFMTCFG_DATA_DELAY_M 0x0000FF00
#define I2S_AIFFMTCFG_DATA_DELAY_S 8
// Field: [7] MEM_LEN_24
//
// The size of each word stored to or loaded from memory:
// ENUMs:
// 24BIT 24-bit (one 8 bit and one 16 bit locked access per
// sample)
// 16BIT 16-bit (one 16 bit access per sample)
#define I2S_AIFFMTCFG_MEM_LEN_24 0x00000080
#define I2S_AIFFMTCFG_MEM_LEN_24_BITN 7
#define I2S_AIFFMTCFG_MEM_LEN_24_M 0x00000080
#define I2S_AIFFMTCFG_MEM_LEN_24_S 7
#define I2S_AIFFMTCFG_MEM_LEN_24_24BIT 0x00000080
#define I2S_AIFFMTCFG_MEM_LEN_24_16BIT 0x00000000
// Field: [6] SMPL_EDGE
//
// On the serial audio interface, data (and wclk) is sampled and clocked out on
// opposite edges of BCLK.
// ENUMs:
// POS Data is sampled on the positive edge and clocked
// out on the negative edge.
// NEG Data is sampled on the negative edge and clocked
// out on the positive edge.
#define I2S_AIFFMTCFG_SMPL_EDGE 0x00000040
#define I2S_AIFFMTCFG_SMPL_EDGE_BITN 6
#define I2S_AIFFMTCFG_SMPL_EDGE_M 0x00000040
#define I2S_AIFFMTCFG_SMPL_EDGE_S 6
#define I2S_AIFFMTCFG_SMPL_EDGE_POS 0x00000040
#define I2S_AIFFMTCFG_SMPL_EDGE_NEG 0x00000000
// Field: [5] DUAL_PHASE
//
// Selects dual- or single-phase format.
//
// 0: Single-phase
// 1: Dual-phase
#define I2S_AIFFMTCFG_DUAL_PHASE 0x00000020
#define I2S_AIFFMTCFG_DUAL_PHASE_BITN 5
#define I2S_AIFFMTCFG_DUAL_PHASE_M 0x00000020
#define I2S_AIFFMTCFG_DUAL_PHASE_S 5
// Field: [4:0] WORD_LEN
//
// Number of bits per word (8-24):
// In single-phase format, this is the exact number of bits per word.
// In dual-phase format, this is the maximum number of bits per word.
//
// Values below 8 and above 24 give undefined behavior. Data written to memory
// is always aligned to 16 or 24 bits as defined by MEM_LEN_24. Bit widths that
// differ from this alignment will either be truncated or zero padded.
#define I2S_AIFFMTCFG_WORD_LEN_W 5
#define I2S_AIFFMTCFG_WORD_LEN_M 0x0000001F
#define I2S_AIFFMTCFG_WORD_LEN_S 0
//*****************************************************************************
//
// Register: I2S_O_AIFWMASK0
//
//*****************************************************************************
// Field: [7:0] MASK
//
// Bit-mask indicating valid channels in a frame on AD0.
//
// In single-phase mode, each bit represents one channel, starting with LSB for
// the first word in the frame. A frame can contain up to 8 channels. Channels
// that are not included in the mask will not be sampled and stored in memory,
// and clocked out as '0'.
//
// In dual-phase mode, only the two LSBs are considered. For a stereo
// configuration, set both bits. For a mono configuration, set bit 0 only. In
// mono mode, only channel 0 will be sampled and stored to memory, and channel
// 0 will be repeated when clocked out.
//
// In mono mode, only channel 0 will be sampled and stored to memory, and
// channel 0 will be repeated in the second phase when clocked out.
//
// If all bits are zero, no input words will be stored to memory, and the
// output data lines will be constant '0'. This can be utilized when PWM debug
// output is desired without any actively used output pins.
#define I2S_AIFWMASK0_MASK_W 8
#define I2S_AIFWMASK0_MASK_M 0x000000FF
#define I2S_AIFWMASK0_MASK_S 0
//*****************************************************************************
//
// Register: I2S_O_AIFWMASK1
//
//*****************************************************************************
// Field: [7:0] MASK
//
// Bit-mask indicating valid channels in a frame on AD1.
//
// In single-phase mode, each bit represents one channel, starting with LSB for
// the first word in the frame. A frame can contain up to 8 channels. Channels
// that are not included in the mask will not be sampled and stored in memory,
// and clocked out as '0'.
//
// In dual-phase mode, only the two LSBs are considered. For a stereo
// configuration, set both bits. For a mono configuration, set bit 0 only. In
// mono mode, only channel 0 will be sampled and stored to memory, and channel
// 0 will be repeated when clocked out.
//
// In mono mode, only channel 0 will be sampled and stored to memory, and
// channel 0 will be repeated in the second phase when clocked out.
//
// If all bits are zero, no input words will be stored to memory, and the
// output data lines will be constant '0'. This can be utilized when PWM debug
// output is desired without any actively used output pins.
#define I2S_AIFWMASK1_MASK_W 8
#define I2S_AIFWMASK1_MASK_M 0x000000FF
#define I2S_AIFWMASK1_MASK_S 0
//*****************************************************************************
//
// Register: I2S_O_AIFWMASK2
//
//*****************************************************************************
// Field: [7:0] MASK
//
// Bit-mask indicating valid channels in a frame on AD2
//
// In single-phase mode, each bit represents one channel, starting with LSB for
// the first word in the frame. A frame can contain up to 8 channels. Channels
// that are not included in the mask will not be sampled and stored in memory,
// and clocked out as '0'.
//
// In dual-phase mode, only the two LSBs are considered. For a stereo
// configuration, set both bits. For a mono configuration, set bit 0 only. In
// mono mode, only channel 0 will be sampled and stored to memory, and channel
// 0 will be repeated when clocked out.
//
// In mono mode, only channel 0 will be sampled and stored to memory, and
// channel 0 will be repeated in the second phase when clocked out.
//
// If all bits are zero, no input words will be stored to memory, and the
// output data lines will be constant '0'. This can be utilized when PWM debug
// output is desired without any actively used output pins.
#define I2S_AIFWMASK2_MASK_W 8
#define I2S_AIFWMASK2_MASK_M 0x000000FF
#define I2S_AIFWMASK2_MASK_S 0
//*****************************************************************************
//
// Register: I2S_O_AIFPWMVALUE
//
//*****************************************************************************
// Field: [15:0] PULSE_WIDTH
//
// The value written to this register determines the width of the active high
// PWM pulse (pwm_debug), which starts together with MSB of the first output
// word in a DMA buffer:
//
// 0x0000: Constant low
// 0x0001: Width of the pulse (number of BCLK cycles, here 1).
// ...
// 0xFFFE: Width of the pulse (number of BCLK cycles, here 65534).
// 0xFFFF: Constant high
#define I2S_AIFPWMVALUE_PULSE_WIDTH_W 16
#define I2S_AIFPWMVALUE_PULSE_WIDTH_M 0x0000FFFF
#define I2S_AIFPWMVALUE_PULSE_WIDTH_S 0
//*****************************************************************************
//
// Register: I2S_O_AIFINPTRNEXT
//
//*****************************************************************************
// Field: [31:0] PTR
//
// Pointer to the first byte in the next DMA input buffer.
//
// The read value equals the last written value until the currently used DMA
// input buffer is completed, and then becomes null when the last written value
// is transferred to the DMA controller to start on the next buffer. This event
// is signalized by aif_dma_in_irq.
//
// At startup, the value must be written once before and once after configuring
// the DMA buffer size in AIFDMACFG.
//
// The next pointer must be written to this register while the DMA function
// uses the previously written pointer. If not written in time,
// IRQFLAGS.PTR_ERR will be raised and all input pins will be disabled.
//
// Note the following limitations:
// - Address space wrapping is not supported. That means address(last sample)
// must be higher than address(first sample.
// - A DMA block cannot be aligned with the end of the address space, that
// means a block cannot contain the address 0xFFFF.
#define I2S_AIFINPTRNEXT_PTR_W 32
#define I2S_AIFINPTRNEXT_PTR_M 0xFFFFFFFF
#define I2S_AIFINPTRNEXT_PTR_S 0
//*****************************************************************************
//
// Register: I2S_O_AIFINPTR
//
//*****************************************************************************
// Field: [31:0] PTR
//
// Value of the DMA input buffer pointer currently used by the DMA controller.
// Incremented by 1 (byte) or 2 (word) for each AHB access.
#define I2S_AIFINPTR_PTR_W 32
#define I2S_AIFINPTR_PTR_M 0xFFFFFFFF
#define I2S_AIFINPTR_PTR_S 0
//*****************************************************************************
//
// Register: I2S_O_AIFOUTPTRNEXT
//
//*****************************************************************************
// Field: [31:0] PTR
//
// Pointer to the first byte in the next DMA output buffer.
//
// The read value equals the last written value until the currently used DMA
// output buffer is completed, and then becomes null when the last written
// value is transferred to the DMA controller to start on the next buffer. This
// event is signalized by aif_dma_out_irq.
//
// At startup, the value must be written once before and once after configuring
// the DMA buffer size in AIFDMACFG. At this time, the first two samples will
// be fetched from memory.
//
// The next pointer must be written to this register while the DMA function
// uses the previously written pointer. If not written in time,
// IRQFLAGS.PTR_ERR will be raised and all output pins will be disabled.
//
// Note the following limitations:
// - Address space wrapping is not supported. That means address(last sample)
// must be higher than address(first sample.
// - A DMA block cannot be aligned with the end of the address space, that
// means a block cannot contain the address 0xFFFF.
#define I2S_AIFOUTPTRNEXT_PTR_W 32
#define I2S_AIFOUTPTRNEXT_PTR_M 0xFFFFFFFF
#define I2S_AIFOUTPTRNEXT_PTR_S 0
//*****************************************************************************
//
// Register: I2S_O_AIFOUTPTR
//
//*****************************************************************************
// Field: [31:0] PTR
//
// Value of the DMA output buffer pointer currently used by the DMA controller
// Incremented by 1 (byte) or 2 (word) for each AHB access.
#define I2S_AIFOUTPTR_PTR_W 32
#define I2S_AIFOUTPTR_PTR_M 0xFFFFFFFF
#define I2S_AIFOUTPTR_PTR_S 0
//*****************************************************************************
//
// Register: I2S_O_STMPCTL
//
//*****************************************************************************
// Field: [2] OUT_RDY
//
// Low until the output pins are ready to be started by the samplestamp
// generator. When started (that is STMPOUTTRIG equals the WCLK counter) the
// bit goes back low.
#define I2S_STMPCTL_OUT_RDY 0x00000004
#define I2S_STMPCTL_OUT_RDY_BITN 2
#define I2S_STMPCTL_OUT_RDY_M 0x00000004
#define I2S_STMPCTL_OUT_RDY_S 2
// Field: [1] IN_RDY
//
// Low until the input pins are ready to be started by the samplestamp
// generator. When started (that is STMPINTRIG equals the WCLK counter) the bit
// goes back low.
#define I2S_STMPCTL_IN_RDY 0x00000002
#define I2S_STMPCTL_IN_RDY_BITN 1
#define I2S_STMPCTL_IN_RDY_M 0x00000002
#define I2S_STMPCTL_IN_RDY_S 1
// Field: [0] STMP_EN
//
// Enables the samplestamp generator. The samplestamp generator must only be
// enabled after it has been properly configured.
// When cleared, all samplestamp generator counters and capture values are
// cleared.
#define I2S_STMPCTL_STMP_EN 0x00000001
#define I2S_STMPCTL_STMP_EN_BITN 0
#define I2S_STMPCTL_STMP_EN_M 0x00000001
#define I2S_STMPCTL_STMP_EN_S 0
//*****************************************************************************
//
// Register: I2S_O_STMPXCNTCAPT0
//
//*****************************************************************************
// Field: [15:0] CAPT_VALUE
//
// The value of the samplestamp XOSC counter (STMPXCNT.CURR_VALUE) last time an
// event was pulsed (event source selected in [EVENT.I2SSTMPSEL0.EV] for
// channel 0). This number corresponds to the number of 24 MHz clock cycles
// since the last positive edge of the selected WCLK.
// The value is cleared when STMPCTL.STMP_EN = 0.
// Note: Due to buffering and synchronization, WCLK is delayed by a small
// number of BCLK periods and clk periods.
// Note: When calculating the fractional part of the sample stamp, STMPXPER may
// be less than this bit field.
#define I2S_STMPXCNTCAPT0_CAPT_VALUE_W 16
#define I2S_STMPXCNTCAPT0_CAPT_VALUE_M 0x0000FFFF
#define I2S_STMPXCNTCAPT0_CAPT_VALUE_S 0
//*****************************************************************************
//
// Register: I2S_O_STMPXPER
//
//*****************************************************************************
// Field: [15:0] VALUE
//
// The number of 24 MHz clock cycles in the previous WCLK period (that is -
// the next value of the XOSC counter at the positive WCLK edge, had it not
// been reset to 0).
// The value is cleared when STMPCTL.STMP_EN = 0.
#define I2S_STMPXPER_VALUE_W 16
#define I2S_STMPXPER_VALUE_M 0x0000FFFF
#define I2S_STMPXPER_VALUE_S 0
//*****************************************************************************
//
// Register: I2S_O_STMPWCNTCAPT0
//
//*****************************************************************************
// Field: [15:0] CAPT_VALUE
//
// The value of the samplestamp WCLK counter (STMPWCNT.CURR_VALUE) last time an
// event was pulsed (event source selected in EVENT:I2SSTMPSEL0.EV for channel
// 0). This number corresponds to the number of positive WCLK edges since the
// samplestamp generator was enabled (not taking modification through
// STMPWADD/STMPWSET into account).
// The value is cleared when STMPCTL.STMP_EN = 0.
#define I2S_STMPWCNTCAPT0_CAPT_VALUE_W 16
#define I2S_STMPWCNTCAPT0_CAPT_VALUE_M 0x0000FFFF
#define I2S_STMPWCNTCAPT0_CAPT_VALUE_S 0
//*****************************************************************************
//
// Register: I2S_O_STMPWPER
//
//*****************************************************************************
// Field: [15:0] VALUE
//
// Used to define when STMPWCNT is to be reset so number of WCLK edges are
// found for the size of the sample buffer. This is thus a modulo value for the
// WCLK counter. This number must correspond to the size of the sample buffer
// used by the system (that is the index of the last sample plus 1).
#define I2S_STMPWPER_VALUE_W 16
#define I2S_STMPWPER_VALUE_M 0x0000FFFF
#define I2S_STMPWPER_VALUE_S 0
//*****************************************************************************
//
// Register: I2S_O_STMPINTRIG
//
//*****************************************************************************
// Field: [15:0] IN_START_WCNT
//
// Compare value used to start the incoming audio streams.
// This bit field shall equal the WCLK counter value during the WCLK period in
// which the first input word(s) are sampled and stored to memory (that is the
// sample at the start of the very first DMA input buffer).
//
// The value of this register takes effect when the following conditions are
// met:
// - One or more pins are configured as inputs in AIFDIRCFG.
// - AIFDMACFG has been configured for the correct buffer size, and at least 32
// BCLK cycle ticks have happened.
//
// Note: To avoid false triggers, this bit field should be set higher than
// STMPWPER.VALUE.
#define I2S_STMPINTRIG_IN_START_WCNT_W 16
#define I2S_STMPINTRIG_IN_START_WCNT_M 0x0000FFFF
#define I2S_STMPINTRIG_IN_START_WCNT_S 0
//*****************************************************************************
//
// Register: I2S_O_STMPOUTTRIG
//
//*****************************************************************************
// Field: [15:0] OUT_START_WCNT
//
// Compare value used to start the outgoing audio streams.
//
// This bit field must equal the WCLK counter value during the WCLK period in
// which the first output word(s) read from memory are clocked out (that is the
// sample at the start of the very first DMA output buffer).
//
// The value of this register takes effect when the following conditions are
// met:
// - One or more pins are configured as outputs in AIFDIRCFG.
// - AIFDMACFG has been configured for the correct buffer size, and 32 BCLK
// cycle ticks have happened.
// - 2 samples have been preloaded from memory (examine the AIFOUTPTR register
// if necessary).
// Note: The memory read access is only performed when required, that is
// channels 0/1 must be selected in AIFWMASK0/AIFWMASK1.
//
// Note: To avoid false triggers, this bit field should be set higher than
// STMPWPER.VALUE.
#define I2S_STMPOUTTRIG_OUT_START_WCNT_W 16
#define I2S_STMPOUTTRIG_OUT_START_WCNT_M 0x0000FFFF
#define I2S_STMPOUTTRIG_OUT_START_WCNT_S 0
//*****************************************************************************
//
// Register: I2S_O_STMPWSET
//
//*****************************************************************************
// Field: [15:0] VALUE
//
// WCLK counter modification: Sets the running WCLK counter equal to the
// written value.
#define I2S_STMPWSET_VALUE_W 16
#define I2S_STMPWSET_VALUE_M 0x0000FFFF
#define I2S_STMPWSET_VALUE_S 0
//*****************************************************************************
//
// Register: I2S_O_STMPWADD
//
//*****************************************************************************
// Field: [15:0] VALUE_INC
//
// WCLK counter modification: Adds the written value to the running WCLK
// counter. If a positive edge of WCLK occurs at the same time as the
// operation, this will be taken into account.
// To add a negative value, write "STMPWPER.VALUE - value".
//
#define I2S_STMPWADD_VALUE_INC_W 16
#define I2S_STMPWADD_VALUE_INC_M 0x0000FFFF
#define I2S_STMPWADD_VALUE_INC_S 0
//*****************************************************************************
//
// Register: I2S_O_STMPXPERMIN
//
//*****************************************************************************
// Field: [15:0] VALUE
//
// Each time STMPXPER is updated, the value is also loaded into this register,
// provided that the value is smaller than the current value in this register.
// When written, the register is reset to 0xFFFF (65535), regardless of the
// value written.
// The minimum value can be used to detect extra WCLK pulses (this registers
// value will be significantly smaller than STMPXPER.VALUE).
#define I2S_STMPXPERMIN_VALUE_W 16
#define I2S_STMPXPERMIN_VALUE_M 0x0000FFFF
#define I2S_STMPXPERMIN_VALUE_S 0
//*****************************************************************************
//
// Register: I2S_O_STMPWCNT
//
//*****************************************************************************
// Field: [15:0] CURR_VALUE
//
// Current value of the WCLK counter
#define I2S_STMPWCNT_CURR_VALUE_W 16
#define I2S_STMPWCNT_CURR_VALUE_M 0x0000FFFF
#define I2S_STMPWCNT_CURR_VALUE_S 0
//*****************************************************************************
//
// Register: I2S_O_STMPXCNT
//
//*****************************************************************************
// Field: [15:0] CURR_VALUE
//
// Current value of the XOSC counter, latched when reading STMPWCNT.
#define I2S_STMPXCNT_CURR_VALUE_W 16
#define I2S_STMPXCNT_CURR_VALUE_M 0x0000FFFF
#define I2S_STMPXCNT_CURR_VALUE_S 0
//*****************************************************************************
//
// Register: I2S_O_STMPXCNTCAPT1
//
//*****************************************************************************
// Field: [15:0] CAPT_VALUE
//
// Channel 1 is idle and can not be sampled from an external pulse as with
// Channel 0 STMPXCNTCAPT0
#define I2S_STMPXCNTCAPT1_CAPT_VALUE_W 16
#define I2S_STMPXCNTCAPT1_CAPT_VALUE_M 0x0000FFFF
#define I2S_STMPXCNTCAPT1_CAPT_VALUE_S 0
//*****************************************************************************
//
// Register: I2S_O_STMPWCNTCAPT1
//
//*****************************************************************************
// Field: [15:0] CAPT_VALUE
//
// Channel 1 is idle and can not be sampled from an external event as with
// Channel 0 STMPWCNTCAPT0
#define I2S_STMPWCNTCAPT1_CAPT_VALUE_W 16
#define I2S_STMPWCNTCAPT1_CAPT_VALUE_M 0x0000FFFF
#define I2S_STMPWCNTCAPT1_CAPT_VALUE_S 0
//*****************************************************************************
//
// Register: I2S_O_IRQMASK
//
//*****************************************************************************
// Field: [5] AIF_DMA_IN
//
// Defines the masks state for the interrupt of IRQFLAGS.AIF_DMA_IN
//
// 0: Disable
// 1: Enable
#define I2S_IRQMASK_AIF_DMA_IN 0x00000020
#define I2S_IRQMASK_AIF_DMA_IN_BITN 5
#define I2S_IRQMASK_AIF_DMA_IN_M 0x00000020
#define I2S_IRQMASK_AIF_DMA_IN_S 5
// Field: [4] AIF_DMA_OUT
//
// Defines the masks state for the interrupt of IRQFLAGS.AIF_DMA_OUT
//
// 0: Disable
// 1: Enable
#define I2S_IRQMASK_AIF_DMA_OUT 0x00000010
#define I2S_IRQMASK_AIF_DMA_OUT_BITN 4
#define I2S_IRQMASK_AIF_DMA_OUT_M 0x00000010
#define I2S_IRQMASK_AIF_DMA_OUT_S 4
// Field: [3] WCLK_TIMEOUT
//
// Defines the masks state for the interrupt of IRQFLAGS.WCLK_TIMEOUT
//
// 0: Disable
// 1: Enable
#define I2S_IRQMASK_WCLK_TIMEOUT 0x00000008
#define I2S_IRQMASK_WCLK_TIMEOUT_BITN 3
#define I2S_IRQMASK_WCLK_TIMEOUT_M 0x00000008
#define I2S_IRQMASK_WCLK_TIMEOUT_S 3
// Field: [2] BUS_ERR
//
// Defines the masks state for the interrupt of IRQFLAGS.BUS_ERR
//
// 0: Disable
// 1: Enable
#define I2S_IRQMASK_BUS_ERR 0x00000004
#define I2S_IRQMASK_BUS_ERR_BITN 2
#define I2S_IRQMASK_BUS_ERR_M 0x00000004
#define I2S_IRQMASK_BUS_ERR_S 2
// Field: [1] WCLK_ERR
//
// Defines the masks state for the interrupt of IRQFLAGS.WCLK_ERR
//
// 0: Disable
// 1: Enable
#define I2S_IRQMASK_WCLK_ERR 0x00000002
#define I2S_IRQMASK_WCLK_ERR_BITN 1
#define I2S_IRQMASK_WCLK_ERR_M 0x00000002
#define I2S_IRQMASK_WCLK_ERR_S 1
// Field: [0] PTR_ERR
//
// Defines the masks state for the interrupt of IRQFLAGS.PTR_ERR
//
// 0: Disable
// 1: Enable
#define I2S_IRQMASK_PTR_ERR 0x00000001
#define I2S_IRQMASK_PTR_ERR_BITN 0
#define I2S_IRQMASK_PTR_ERR_M 0x00000001
#define I2S_IRQMASK_PTR_ERR_S 0
//*****************************************************************************
//
// Register: I2S_O_IRQFLAGS
//
//*****************************************************************************
// Field: [5] AIF_DMA_IN
//
// Set when condition for this bit field event occurs (auto cleared when input
// pointer is updated - AIFINPTR), see description of AIFINPTR register
#define I2S_IRQFLAGS_AIF_DMA_IN 0x00000020
#define I2S_IRQFLAGS_AIF_DMA_IN_BITN 5
#define I2S_IRQFLAGS_AIF_DMA_IN_M 0x00000020
#define I2S_IRQFLAGS_AIF_DMA_IN_S 5
// Field: [4] AIF_DMA_OUT
//
// Set when condition for this bit field event occurs (auto cleared when output
// pointer is updated - AIFOUTPTR), see description of AIFOUTPTR register for
// details
#define I2S_IRQFLAGS_AIF_DMA_OUT 0x00000010
#define I2S_IRQFLAGS_AIF_DMA_OUT_BITN 4
#define I2S_IRQFLAGS_AIF_DMA_OUT_M 0x00000010
#define I2S_IRQFLAGS_AIF_DMA_OUT_S 4
// Field: [3] WCLK_TIMEOUT
//
// Set when the sample stamp generator does not detect a positive WCLK edge for
// 65535 clk periods. This signalizes that the internal or external BCLK and
// WCLK generator source has been disabled.
//
// The bit is sticky and may only be cleared by software (by writing '1' to
// IRQCLR.WCLK_TIMEOUT).
#define I2S_IRQFLAGS_WCLK_TIMEOUT 0x00000008
#define I2S_IRQFLAGS_WCLK_TIMEOUT_BITN 3
#define I2S_IRQFLAGS_WCLK_TIMEOUT_M 0x00000008
#define I2S_IRQFLAGS_WCLK_TIMEOUT_S 3
// Field: [2] BUS_ERR
//
// Set when a DMA operation is not completed in time (that is audio output
// buffer underflow, or audio input buffer overflow).
// This error requires a complete restart since word synchronization has been
// lost. The bit is sticky and may only be cleared by software (by writing '1'
// to IRQCLR.BUS_ERR).
//
// Note that DMA initiated transactions to illegal addresses will not trigger
// an interrupt. The response to such transactions is undefined.
#define I2S_IRQFLAGS_BUS_ERR 0x00000004
#define I2S_IRQFLAGS_BUS_ERR_BITN 2
#define I2S_IRQFLAGS_BUS_ERR_M 0x00000004
#define I2S_IRQFLAGS_BUS_ERR_S 2
// Field: [1] WCLK_ERR
//
// Set when:
// - An unexpected WCLK edge occurs during the data delay period of a phase.
// Note unexpected WCLK edges during the word and idle periods of the phase are
// not detected.
// - In dual-phase mode, when two WCLK edges are less than 4 BCLK cycles
// apart.
// - In single-phase mode, when a WCLK pulse occurs before the last channel.
// This error requires a complete restart since word synchronization has been
// lost. The bit is sticky and may only be cleared by software (by writing '1'
// to IRQCLR.WCLK_ERR).
#define I2S_IRQFLAGS_WCLK_ERR 0x00000002
#define I2S_IRQFLAGS_WCLK_ERR_BITN 1
#define I2S_IRQFLAGS_WCLK_ERR_M 0x00000002
#define I2S_IRQFLAGS_WCLK_ERR_S 1
// Field: [0] PTR_ERR
//
// Set when AIFINPTRNEXT or AIFOUTPTRNEXT has not been loaded with the next
// block address in time.
// This error requires a complete restart since word synchronization has been
// lost. The bit is sticky and may only be cleared by software (by writing '1'
// to IRQCLR.PTR_ERR).
#define I2S_IRQFLAGS_PTR_ERR 0x00000001
#define I2S_IRQFLAGS_PTR_ERR_BITN 0
#define I2S_IRQFLAGS_PTR_ERR_M 0x00000001
#define I2S_IRQFLAGS_PTR_ERR_S 0
//*****************************************************************************
//
// Register: I2S_O_IRQSET
//
//*****************************************************************************
// Field: [5] AIF_DMA_IN
//
// 1: Sets the interrupt of IRQFLAGS.AIF_DMA_IN (unless a auto clear criteria
// was given at the same time, in which the set will be ignored)
#define I2S_IRQSET_AIF_DMA_IN 0x00000020
#define I2S_IRQSET_AIF_DMA_IN_BITN 5
#define I2S_IRQSET_AIF_DMA_IN_M 0x00000020
#define I2S_IRQSET_AIF_DMA_IN_S 5
// Field: [4] AIF_DMA_OUT
//
// 1: Sets the interrupt of IRQFLAGS.AIF_DMA_OUT (unless a auto clear criteria
// was given at the same time, in which the set will be ignored)
#define I2S_IRQSET_AIF_DMA_OUT 0x00000010
#define I2S_IRQSET_AIF_DMA_OUT_BITN 4
#define I2S_IRQSET_AIF_DMA_OUT_M 0x00000010
#define I2S_IRQSET_AIF_DMA_OUT_S 4
// Field: [3] WCLK_TIMEOUT
//
// 1: Sets the interrupt of IRQFLAGS.WCLK_TIMEOUT
#define I2S_IRQSET_WCLK_TIMEOUT 0x00000008
#define I2S_IRQSET_WCLK_TIMEOUT_BITN 3
#define I2S_IRQSET_WCLK_TIMEOUT_M 0x00000008
#define I2S_IRQSET_WCLK_TIMEOUT_S 3
// Field: [2] BUS_ERR
//
// 1: Sets the interrupt of IRQFLAGS.BUS_ERR
#define I2S_IRQSET_BUS_ERR 0x00000004
#define I2S_IRQSET_BUS_ERR_BITN 2
#define I2S_IRQSET_BUS_ERR_M 0x00000004
#define I2S_IRQSET_BUS_ERR_S 2
// Field: [1] WCLK_ERR
//
// 1: Sets the interrupt of IRQFLAGS.WCLK_ERR
#define I2S_IRQSET_WCLK_ERR 0x00000002
#define I2S_IRQSET_WCLK_ERR_BITN 1
#define I2S_IRQSET_WCLK_ERR_M 0x00000002
#define I2S_IRQSET_WCLK_ERR_S 1
// Field: [0] PTR_ERR
//
// 1: Sets the interrupt of IRQFLAGS.PTR_ERR
#define I2S_IRQSET_PTR_ERR 0x00000001
#define I2S_IRQSET_PTR_ERR_BITN 0
#define I2S_IRQSET_PTR_ERR_M 0x00000001
#define I2S_IRQSET_PTR_ERR_S 0
//*****************************************************************************
//
// Register: I2S_O_IRQCLR
//
//*****************************************************************************
// Field: [5] AIF_DMA_IN
//
// 1: Clears the interrupt of IRQFLAGS.AIF_DMA_IN (unless a set criteria was
// given at the same time in which the clear will be ignored)
#define I2S_IRQCLR_AIF_DMA_IN 0x00000020
#define I2S_IRQCLR_AIF_DMA_IN_BITN 5
#define I2S_IRQCLR_AIF_DMA_IN_M 0x00000020
#define I2S_IRQCLR_AIF_DMA_IN_S 5
// Field: [4] AIF_DMA_OUT
//
// 1: Clears the interrupt of IRQFLAGS.AIF_DMA_OUT (unless a set criteria was
// given at the same time in which the clear will be ignored)
#define I2S_IRQCLR_AIF_DMA_OUT 0x00000010
#define I2S_IRQCLR_AIF_DMA_OUT_BITN 4
#define I2S_IRQCLR_AIF_DMA_OUT_M 0x00000010
#define I2S_IRQCLR_AIF_DMA_OUT_S 4
// Field: [3] WCLK_TIMEOUT
//
// 1: Clears the interrupt of IRQFLAGS.WCLK_TIMEOUT (unless a set criteria was
// given at the same time in which the clear will be ignored)
#define I2S_IRQCLR_WCLK_TIMEOUT 0x00000008
#define I2S_IRQCLR_WCLK_TIMEOUT_BITN 3
#define I2S_IRQCLR_WCLK_TIMEOUT_M 0x00000008
#define I2S_IRQCLR_WCLK_TIMEOUT_S 3
// Field: [2] BUS_ERR
//
// 1: Clears the interrupt of IRQFLAGS.BUS_ERR (unless a set criteria was given
// at the same time in which the clear will be ignored)
#define I2S_IRQCLR_BUS_ERR 0x00000004
#define I2S_IRQCLR_BUS_ERR_BITN 2
#define I2S_IRQCLR_BUS_ERR_M 0x00000004
#define I2S_IRQCLR_BUS_ERR_S 2
// Field: [1] WCLK_ERR
//
// 1: Clears the interrupt of IRQFLAGS.WCLK_ERR (unless a set criteria was
// given at the same time in which the clear will be ignored)
#define I2S_IRQCLR_WCLK_ERR 0x00000002
#define I2S_IRQCLR_WCLK_ERR_BITN 1
#define I2S_IRQCLR_WCLK_ERR_M 0x00000002
#define I2S_IRQCLR_WCLK_ERR_S 1
// Field: [0] PTR_ERR
//
// 1: Clears the interrupt of IRQFLAGS.PTR_ERR (unless a set criteria was given
// at the same time in which the clear will be ignored)
#define I2S_IRQCLR_PTR_ERR 0x00000001
#define I2S_IRQCLR_PTR_ERR_BITN 0
#define I2S_IRQCLR_PTR_ERR_M 0x00000001
#define I2S_IRQCLR_PTR_ERR_S 0
#endif // __I2S__