Configuration defines

An application using the USB audio framework needs to have defines set for configuration. Defaults for these defines are found in xua_conf_default.h.

These defines should be overridden in an optional header file xua_conf.h file or in the application’s CMakeLists.txt for the relevant build configuration.

This section fully documents all of the settable defines and their default values (where appropriate).

Code location (tile)

XUA_AUDIO_IO_TILE_NUM

Location (tile) of audio I/O.

The tile number to run the AudioHub() task. The location if automatically detected from ports in the XN file.

XUA_XUD_TILE_NUM

Location (tile) of audio I/O.

The tile number to run lib_xud tasks on.

XUA_MIDI_TILE_NUM

Location (tile) of MIDI I/O.

The tile number to run MIDI tasks on. The location if automatically detected from ports in the XN file.

XUA_SPDIF_TX_TILE_NUM

Location (tile) of SPDIF Tx.

The tile number to run the S/PDIF tx task on. The location if automatically detected from ports in the XN file.

XUA_MIC_PDM_TILE_NUM

Location (tile) of PDM Rx.

The tile number to run the PDM Mics tasks on. The location if automatically detected from ports in the XN file.

XUA_PLL_REF_TILE_NUM

Location (tile) of reference signal to CS2100.

The tile number to run the PLL reference clock task on. The location if automatically detected from ports in the XN file.

Channel counts

NUM_USB_CHAN_OUT

Number of output channels (host to device). Default: NONE (Must be defined by app)

NUM_USB_CHAN_IN

Number of input channels (device to host). Default: NONE (Must be defined by app)

I2S_CHANS_DAC

Number of I2S channels to DAC/CODEC. Must be a multiple of 2.

Default: NONE (Must be defined by app)

I2S_CHANS_ADC

Number of I2S channels from ADC/CODEC. Must be a multiple of 2.

Default: NONE (Must be defined by app)

Frequencies and clocks

MAX_FREQ

Max supported sample frequency for device (Hz).

Default: 192000Hz

MIN_FREQ

Min supported sample frequency for device (Hz).

Default: 44100Hz

DEFAULT_FREQ

Default device sample frequency. A safe default should be used.

Default: MIN_FREQ

MCLK_441

Master clock defines for 44100 rates (in Hz).

Default: NONE (Must be defined by app)

MCLK_48

Master clock defines for 48000 rates (in Hz).

Default: NONE (Must be defined by app)

XUA_USE_SW_PLL

Enable/disable the use of the secondary/application PLL for generating and recovering master-clocks. Only available on xcore.ai devices.

Default: Enabled (for xcore.ai devices)

Audio Class

AUDIO_CLASS

Legacy USB Audio Class version.

Default: 2 (Audio Class version 2.0)

Note: XUA_USB_AUDIO_CLASS_HS and XUA_USB_AUDIO_CLASS_FS are derived from this value. Setting these defines directly will override this value.

XUA_AUDIO_CLASS_HS

Audio class version to run at HS.

Default: AUDIO_CLASS

Note: Set to 0 for no operation at HS.

XUA_AUDIO_CLASS_FS

Audio class version to run at FS.

Default: AUDIO_CLASS

Note: Set to 0 for no operation at FS.

Feature configuration

I²S/TDM

CODEC_MASTER

Defines whether XMOS device runs as master (i.e. drives LR and Bit clocks)

0: XMOS is I2S master. 1: CODEC is I2s master.

Default: 0 (XMOS is master)

XUA_I2S_N_BITS

Number of bits per channel for I2S/TDM. Supported values: 16/32-bit.

Default: 32 bits

XUA_PCM_FORMAT

Format of PCM audio interface. Should be set to XUA_PCM_FORMAT_I2S or XUA_PCM_FORMAT_TDM.

Default: XUA_PCM_FORMAT_I2S

MIDI

MIDI

Enable MIDI functionality including buffering, descriptors etc. Default: DISABLED.

MIDI_RX_PORT_WIDTH

MIDI Rx port width (1 or 4bit). Default: 1.

S/PDIF

XUA_SPDIF_TX_EN

Enables SPDIF Tx. Default: 0 (Disabled)

SPDIF_TX_INDEX

Defines which output channels (stereo) should be output on S/PDIF. Note, Output channels indexed from 0.

Default: 0 (i.e. channels 0 & 1)

XUA_SPDIF_RX_EN

Enables SPDIF Rx. Default: 0 (Disabled)

SPDIF_RX_INDEX

S/PDIF Rx first channel index, defines which channels S/PDIF will be input on. Note, indexed from 0.

Default: NONE (Must be defined by app when SPDIF_RX enabled)

ADAT

XUA_ADAT_RX_EN

Enables ADAT Rx. Default: 0 (Disabled)

ADAT_RX_INDEX

ADAT Rx first channel index. defines which channels ADAT will be input on. Note, indexed from 0.

Default: NONE (Must be defined by app when XUA_ADAT_RX_EN is true)

PDM microphones

XUA_NUM_PDM_MICS

Number of PDM microphone outputs in the design.

Default: 0

XUA_PDM_MIC_USE_PDM_ISR

Merge the PDM receive task into the decimation task using an ISR. Note: this works well with lower PDM mic counts but 8 and above may require separation into dedicated tasks.

DEFAULT: 1, Enable PDM RX ISR mode

XUA_PDM_MIC_USE_DDR

Indicates whether two microphones share a single data line (DDR mode).

When set to 1, the system uses Double Data Rate (DDR) signaling to read two microphones from a single data line. When set to 0, each microphone is read on a separate data line.

Default: 1

XUA_PDM_MIC_INDEX

Disable USB functionalty just leaving AudioHub.

Default: Enabled

PDM Microphone first channel index, defines which channels microphones will be input on. Note, indexed from 0.

Default: 0 (i.e. channels [0:XUA_NUM_PDM_MICS-1])

DFU

XUA_DFU_EN

Enable DFU functionality.

Default: 1 (Enabled)

HID

HID_CONTROLS

Enable HID playback controls functionality.

1 for enabled, 0 for disabled.

Default 0 (Disabled)

USB device configuration

VENDOR_STR

Vendor String used by the device. This is also pre-pended to various strings used by the design.

Default: “XMOS”

VENDOR_ID

USB Vendor ID (or VID) as assigned by the USB-IF.

Default: 0x20B1 (XMOS)

PRODUCT_STR

USB Product String for the device. If defined will be used for both PRODUCT_STR_A2 and PRODUCT_STR_A1.

Default: Undefined

PRODUCT_STR_A2

Product string for Audio Class 2.0 mode.

Default: “XMOS xCORE (UAC2.0)”

PRODUCT_STR_A1

Product string for Audio Class 1.0 mode.

Default: “XMOS xCORE (UAC1.0)”

PID_AUDIO_1

USB Product ID (PID) for Audio Class 1.0 mode. Only required if XUA_AUDIO_CLASS_FS == 1.

Default: 0x0003

PID_AUDIO_2

USB Product ID (PID) for Audio Class 2.0 mode.

Default: 0x0002

BCD_DEVICE

Device firmware version number in Binary Coded Decimal format: 0xJJMN where JJ: major, M: minor, N: sub-minor version number.

NOTE: User code should not modify this but should modify BCD_DEVICE_J, BCD_DEVICE_M, BCD_DEVICE_N instead

Default: XMOS USB Audio Release version (e.g. 0x0651 for 6.5.1).

Stream Formats

Output/playback

OUTPUT_FORMAT_COUNT

Number of supported output stream formats.

Values 1,2,3 supported

Default: 2

STREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS

Sample resolution (bits) of output stream Alternate 1.

Default: 24 if Alternate 1 is PCM, else 32 if DSD/RAW

Note, 24 on the lowests alt in case of OUTPUT_FORMAT_COUNT = 1 leaving 24bit as the designs default resolution.

STREAM_FORMAT_OUTPUT_2_RESOLUTION_BITS

Sample resolution (bits) of output stream Alternate 2.

Default: 16 if Alternate 2 is PCM, else 32 if DSD/RAW

STREAM_FORMAT_OUTPUT_3_RESOLUTION_BITS

Sample resolution (bits) of output stream Alternate 3.

Default: 32 if Alternate 2 is PCM, else 32 if DSD/RAW

HS_STREAM_FORMAT_OUTPUT_1_SUBSLOT_BYTES

Sample sub-slot size (bytes) of output stream Alternate 1 when running in high-speed.

Default: 4 if resolution for Alternate 1 is 24bits, else resolution / 8

Note, the default catchs the 24bit special case where 4-byte subslot is nicer for our 32-bit machine. Typically do not care about this extra bus overhead at High-speed

HS_STREAM_FORMAT_OUTPUT_2_SUBSLOT_BYTES

Sample sub-slot size (bytes) of output stream Alternate 2 when running in high-speed.

Default: 4 if resolution for Alternate 2 is 24bits, else resolution / 8

Note, the default catchs the 24bit special case where 4-byte subslot is nicer for our 32-bit machine. Typically do not care about this extra bus overhead at High-speed

HS_STREAM_FORMAT_OUTPUT_3_SUBSLOT_BYTES

Sample sub-slot size (bytes) of output stream Alternate 3 when running in high-speed.

Default: 4 if resolution for Alternate 3 is 24bits, else resolution / 8

Note, the default catchs the 24bit special case where 4-byte subslot is nicer for our 32-bit machine. Typically do not care about this extra bus overhead at High-speed

FS_STREAM_FORMAT_OUTPUT_1_SUBSLOT_BYTES

Sample sub-slot size (bytes) of output stream Alternate 1 when running in full-speed.

Note, in full-speed mode bus bandwidth is at a premium, therefore pack samples into smallest possible sub-slot.

Default: STREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS / 8

FS_STREAM_FORMAT_OUTPUT_2_SUBSLOT_BYTES

Sample sub-slot size (bytes) of output stream Alternate 2 when running in full-speed.

Note, in full-speed mode bus bandwidth is at a premium, therefore pack samples into smallest possible sub-slot.

Default: STREAM_FORMAT_OUTPUT_2_RESOLUTION_BITS / 8

FS_STREAM_FORMAT_OUTPUT_3_SUBSLOT_BYTES

Sample sub-slot size (bytes) of output stream Alternate 3 when running in full-speed.

Note, in full-speed mode bus bandwidth is at a premium, therefore pack samples into smallest possible sub-slot.

Default: STREAM_FORMAT_OUTPUT_3_RESOLUTION_BITS / 8

STREAM_FORMAT_OUTPUT_1_DATAFORMAT

Sample audio data-format if output stream Alternate 1.

Default: UAC_FORMAT_TYPEI_RAW_DATA when Alternate 1 is RAW/DSD else UAC_FORMAT_TYPEI_PCM

STREAM_FORMAT_OUTPUT_2_DATAFORMAT

Sample audio data-format if output stream Alternate 2.

Default: UAC_FORMAT_TYPEI_RAW_DATA when Alternate 2 is RAW/DSD else UAC_FORMAT_TYPEI_PCM

STREAM_FORMAT_OUTPUT_3_DATAFORMAT

Sample audio data-format if output stream Alternate 3.

Default: UAC_FORMAT_TYPEI_RAW_DATA when Alternate 3 is RAW/DSD else UAC_FORMAT_TYPEI_PCM

Input/recording

INPUT_FORMAT_COUNT

Number of supported input stream formats. Default: 1.

STREAM_FORMAT_INPUT_1_RESOLUTION_BITS

Sample resolution (bits) of input stream Alternate 1.

Default: 24

HS_STREAM_FORMAT_INPUT_1_SUBSLOT_BYTES

Sample sub-slot size (bytes) of input stream Alternate 1 when running in high-speed.

Default: 4 if resolution for Alternate 1 is 24bits, else resolution / 8

Note, the default catchs the 24bit special case where 4-byte subslot is nicer for our 32-bit machine. Typically do not care about this extra bus overhead at High-speed

FS_STREAM_FORMAT_INPUT_1_SUBSLOT_BYTES

Sample sub-slot size (bytes) of input stream Alternate 1 when running in full-speed.

Note, in full-speed mode bus bandwidth is at a premium, therefore pack samples into smallest possible sub-slot.

Default: STREAM_FORMAT_INPUT_1_RESOLUTION_BITS / 8

STREAM_FORMAT_INPUT_1_DATAFORMAT

Sample audio data-format for input stream Alternate 1.

Default: UAC_FORMAT_TYPEI_PCM

Volume control

OUTPUT_VOLUME_CONTROL

Enable/disable output volume control including all processing and descriptor support.

Default: 1 (Enabled)

INPUT_VOLUME_CONTROL

Enable/disable input volume control including all processing and descriptor support.

Default: 1 (Enabled)

MIN_VOLUME

The minimum volume setting above -inf. This is a signed 8.8 fixed point number that must be strictly greater than -128 (0x8000)

Default: 0x8100 (-127db)

MAX_VOLUME

The maximum volume setting. This is a signed 8.8 fixed point number.

Default: 0x0000 (0db)

VOLUME_RES

The resolution of the volume control in db as a 8.8 fixed point number.

Default: 0x100 (1db)

Mixing

MIXER

Enable “mixer” core.

Default: 0 (Disabled)

MAX_MIX_COUNT

Number of seperate mixes to perform.

Default: 8 if MIXER enabled, else 0

MIX_INPUTS

Number of channels input into the mixer.

Note, total number of mixer nodes is MIX_INPUTS * MAX_MIX_COUNT

Default: 18

MIN_MIXER_VOLUME

The minimum volume setting for the mixer unit above -inf. This is a signed 8.8 fixed point number that must be strictly greater than -128 (0x8000)

Default: 0x8100 (-127db)

MAX_MIXER_VOLUME

The maximum volume setting for the mixer. This is a signed 8.8 fixed point number.

Default: 0x0000 (0db)

VOLUME_RES_MIXER

The resolution of the volume control in db as a 8.8 fixed point number.

Default: 0x100 (1db)

Power

XUA_POWERMODE

Report as self or bus powered device. This affects descriptors and XUD usage and is important for USB compliance.

Default: XUA_POWERMODE_BUS

XUA_CHAN_BUFF_CTRL

Enable power saving feature in XUA_Buffer_Decouple()

If set to 1 then a channel is instantiated between the XUA_Buffer_Ep() and XUA_Buffer_Decouple() tasks (which together form the buffer between XUD and Audio) that limits shared memory polling in XUA_Buffer_Ep() to occur only when a change has been made by XUA_Buffer_Decouple(). This significantly reduces core power at the cost of two channel ends on the USB_TILE.