Hide navigation sidebar
Hide table of contents sidebar
Skip to content
Back to top
Toggle table of contents sidebar

# S/PDIF transmit

`lib_xua` supports the development of devices with S/PDIF transmit functionality through the use of lib_spdif. The XMOS S/PDIF transmitter runs on a single thread and supports rates up to 192 kHz.

The S/PDIF transmitter thread takes PCM audio samples via a channel and outputs them in S/PDIF format to a port. Samples are provided to the S/PDIF transmitter task from the `XUA_AudioHub()` task.

The channel should be declared as normal:

    chan c_spdif_tx

In order to use the S/PDIF transmitter with `lib_xua` a 1-bit port must be declared e.g:

    buffered out port:32 p_spdif_tx = PORT_SPDIF_OUT;     /* SPDIF transmit port */

This port should be clocked from the master-clock, `lib_spdif` provides a helper function for setting up the port:

    spdif_tx_port_config(p_spdif_tx, clk_audio_mclk, p_mclk_in, delay);

Note

If sharing the master-clock port and clockblock with `XUA_AudioHub()` (or any other task) then this setup should be done before running the tasks in a `par` statement.

Finally the S/PDIF transmitter task must be run - passing in the port and channel for communication with `XUA_AudioHub`. For example:

    par
    {
        while(1)
        {
            /* Run the S/PDIF transmitter task */
            spdif_tx(p_spdif_tx, c_spdif_tx);
        }

        /* AudioHub/IO thread does most of the audio IO i.e. I2S (also serves as
         * a hub for all audio).
         * Note, since we are not using I2S we pass in null for LR and Bit
         * clock ports and the I2S dataline ports */
        XUA_AudioHub(c_aud, clk_audio_mclk, null, p_mclk_in, null, null,
            null, null, c_spdif_tx);
    }

For further details please see the documentation, application notes and examples provided for `lib_spdif`.