PSoC® Creator™ Component Datasheet S/PDIF Transmitter (SPDIF_Tx) 1.0 Features Conforms to IEC-60958, AES/EBU, AES3 standards for Linear PCM Audio Transmission Sample rate support for clock/128 (up to 192 kHz) Configurable audio sample length (8/16/24) Channel status bits generator for consumer applications DMA support Independent left and right channel FIFOs or interleaved stereo FIFOs General Description The SPDIF_Tx component provides a simple way to add digital audio output to any design. It formats incoming audio data and metadata to create the S/PDIF bit stream appropriate for optical or coaxial digital audio. The component supports interleaved and separated audio. The SPDIF_Tx component receives audio data from DMA as well as channel status information. Most of the time, the channel status DMA will be managed by the component; however, you have the option of specifying this data separately to better control your system. When to Use an SPDIF_Tx The SPDIF_Tx component provides a fast solution whenever an S/PDIF transmitter is essential, including applications such as: Digital audio players Computer audio interfaces Audio mastering equipment The use cases for the component can be: When programmed, a PSoC 3 enumerates as a USB Audio HID. The PSoC 3 is the soundcard for the computer and plays through a digital audio connection. Cypress Semiconductor Corporation • 198 Champion Court • San Jose, CA 95134-1709 • 408-943-2600 Document Number: 001-67708 Rev. *A Revised November 1, 2011 S/PDIF Transmitter (SPDIF_Tx) PSoC® Creator™ Component Datasheet The component can be used in conjunction with an I2S component and external ADC to go from analog audio to digital audio. Input/Output Connections This section describes the various input and output connections for the SPDIF_Tx component. An asterisk (*) in the list of I/Os indicates that the I/O may be hidden on the symbol under the conditions listed in the description of that I/O. clock – Input The clock rate provided must be two times the desired data rate for the spdif output. For example to produce 48-kHz audio, the clock frequency would be: 2 × 48 kHz × 64 = 6.144 MHz spdif – Output Serial data output. sck – Output Output serial clock. interrupt – Output Interrupt output. tx_DMA0 – Output DMA request for audio FIFO 0 (Channel 0 or Interleaved). tx_DMA1 – Output DMA request for audio FIFO 1 (Channel 1). Displays if you select Separated under the Audio Mode parameter. cst_DMA0– Output * DMA request for channel status FIFO 0 (Channel 0). Displays if you deselect the checkbox under the Managed DMA parameter. cst_DMA1 – Output * DMA request for channel status FIFO 1 (Channel 1). Displays if you deselect the checkbox under the Managed DMA parameter. Page 2 of 23 Document Number: 001-67708 Rev. *A PSoC® Creator™ Component Datasheet S/PDIF Transmitter (SPDIF_Tx) Schematic Macro Information The default SPDIF Transmitter in the Component Catalog is a schematic macro using a SPDIF component with default settings. It is connected to a digital output Pin component. The generation of APIs for the pin is turned off. Component Parameters Drag an SPDIF_Tx component onto your design and double click it to open the Configure dialog. This dialog has three tabs to guide you through the process of setting up the SPDIF_Tx component. General Tab Document Number: 001-67708 Rev. *A Page 3 of 23 S/PDIF Transmitter (SPDIF_Tx) PSoC® Creator™ Component Datasheet Audio Data Length Determines the number of data bits configured for each sample (hardware compiled). This value can be set to: 8, 16, or 24. The default setting is 24. Audio Mode Allows you to select whether the audio data is Interleaved (default) or Separated (hardware compiled). Managed DMA Allows you to select whether the component will manage the channel status DMA (hardware compiled). If Managed DMA is selected, the Channel 0 Status and Channel 1 Status tabs are enabled. The option is enabled by default. Channel 0 Status Tab Frequency Allows you to select the value of channel status for the specified frequency. This value applies to both channels. The source frequency can be: 22 kHz, 24 kHz, 32 kHz, 44 kHz, 48 kHz, 64 kHz, 88 kHz, 96 kHz, 192 kHz, or Unknown. The default is Unknown. Page 4 of 23 Document Number: 001-67708 Rev. *A PSoC® Creator™ Component Datasheet S/PDIF Transmitter (SPDIF_Tx) Data Type Specifies the data type value for channel status 0. This value can be set to Linear PCM (default) or other data. Copyright Allows you to select whether the Audio is copyrighted (default) or Audio is not copyrighted. Pre-emphasis Determines the PCM pre-emphasis value for channel status 0. This value can be set to: No Pre-emphasis or 50/15 μs. The default setting is No Pre-emphasis. Category Specifies the category type for channel status 0. This value can be set to General (default) or Digital to Digital. Clock Accuracy Allows you to select the clock accuracy for channel status 0. This value can be set to: Level I, Level II, or Level III. The default setting is Level II. Source Number Determines the source number for channel status 0. This value can be set between 0 and 15. The default setting is 0. Channel Number Determines the channel number for channel status 0. This value can be set between 0 and 15. The default setting is 0. Document Number: 001-67708 Rev. *A Page 5 of 23 S/PDIF Transmitter (SPDIF_Tx) PSoC® Creator™ Component Datasheet Channel 1 Status Tab Copy defaults from Channel 0 Allows you to select whether the channel status for channel 1 is the same as for channel 0. If the checkbox is selected, all of the dropdown boxes will be disabled on the Channel 1 Status tab. The setting is checked by default. The remaining parameters for the Channel 1 Status tab are identical to the Channel 0 Status tab. Clock Selection There is no internal clock in this component. You must attach a clock source. The clock rate provided must be two times the desired data rate for the spdif output. Placement The SPDIF_Tx component is placed throughout the UDB array and all placement information is provided to the API through the cyfitter.h file. Page 6 of 23 Document Number: 001-67708 Rev. *A PSoC® Creator™ Component Datasheet S/PDIF Transmitter (SPDIF_Tx) Resources Resources Resource Type Datapath Cells PLDs Status Cells Managed DMA 4 9 1 2 Not Managed DMA 4 9 1 2 API Memory (Bytes) Control/Count7 Drqs Cells Pins (per External I/O) Irqs Flash RAM 2 2 1420 106 0 0 0 290 2 0 Application Programming Interface Application Programming Interface (API) routines allow you to configure the component using software. The following table lists and describes the interface to each function. The subsequent sections cover each function in more detail. By default, PSoC Creator assigns the instance name “SPDIF_Tx_1” to the first instance of a component in a given design. You can rename the instance to any unique value that follows the syntactic rules for identifiers. The instance name becomes the prefix of every global function name, variable, and constant symbol. For readability, the instance name used in the following table is “SPDIF.” Function Description SPDIF_Start() Starts the S/PDIF interface. SPDIF_Stop() Disables the S/PDIF interface. SPDIF_Sleep() Saves configuration and disables the S/PDIF interface. SPDIF_Wakeup() Restores configuration of the S/PDIF interface. SPDIF_EnableTx() Enables the audio data output in the S/PDIF bit stream. SPDIF_DisableTx() Disables the audio output in the S/PDIF bit stream. SPDIF_WriteTxByte() Writes a single byte into the audio FIFO. SPDIF_WriteCstByte() Writes a single byte into the channel status FIFO. SPDIF_SetInterruptMode() Sets the interrupt source for the S/PDIF interrupt. SPDIF_ReadStatus() Returns state in the S/PDIF status register. SPDIF_ClearTxFIFO() Clears out the audio FIFO. SPDIF_ClearCstFIFO() Clears out the channel status FIFOs. SPDIF_SetChannelStatus() Sets the values of the channel status at run time. SPDIF_SetFrequency() Sets the values of the channel status for a specified frequency. SPDIF_Init() Initializes or restores default S/PDIF configuration. Document Number: 001-67708 Rev. *A Page 7 of 23 S/PDIF Transmitter (SPDIF_Tx) PSoC® Creator™ Component Datasheet Function Description SPDIF_Enable() Enables the S/PDIF interface. SPDIF_SaveConfig() Saves configuration of S/PDIF interface. SPDIF_RestoreConfig() Restores configuration of S/PDIF interface. Global Variables Variable Description SPDIF_initVar SPDIF_initVar Indicates whether the S/PDIF component has been initialized. The variable is initialized to 0 and set to 1 the first time SPDIF_Start() is called. This allows the component to restart without reinitialization after the first call to the SPDIF_Start() routine. If reinitialization of the component is required, then the SPDIF_Init() function can be called before the SPDIF_Start() or SPDIF_Enable() function. SPDIF_wrkCstStream0[], SPDIF_wrkCstStream1[] Channel Status arrays for Channel 0 and Channel 1 respectively. These arrays are conditionally compiled and are presented to the component only if the component is managing channel status DMA. The Channel Status streams are stored in two different buffers large enough to store the streams for a complete SPDIF block (2x24 bytes). Note: To set the values of the channel status it is strictly recommended to use the SPDIF_SetChannelStatus() function along with the channel status macros. For example to set the category field of channel 0 status to general use the following function call : SPDIF_SetChannelStatus(SPDIF_CHANNEL_0, SPDIF_CAT_GEN); void SPDIF_Start(void) Description: Starts the S/PDIF interface. Starts the channel status DMA if the component is configured to handle the channel status DMA. Enables Active mode power template bits or clock gating as appropriate. Starts the generation of the S/PDIF output with channel status, but the audio data is set to all 0s. This allows the S/PDIF receiver to lock on to the component’s clock. Parameters: None Return Value: None Side Effects: None Page 8 of 23 Document Number: 001-67708 Rev. *A PSoC® Creator™ Component Datasheet S/PDIF Transmitter (SPDIF_Tx) void SPDIF_Stop(void) Description: Disables the S/PDIF interface. Disables Active mode power template bits or clock gating as appropriate. The S/PDIF output is set to 0. The audio data and channel data FIFOs are cleared. The SPDIF_Stop() function calls SPDIF_DisableTx() and stops the managed channel status DMA. Parameters: None Return Value: None Side Effects: None void SPDIF_Sleep(void) Description: This is the preferred routine to prepare the component for sleep. The SPDIF_Sleep() routine saves the current component state. Then it calls the SPDIF_Stop() function and calls SPDIF_SaveConfig() to save the hardware configuration. Disables Active mode power template bits or clock gating as appropriate. The spdif output is set to 0. Call the SPDIF_Sleep() function before calling the CyPmSleep() or the CyPmHibernate() function. Refer to the PSoC Creator System Reference Guide for more information about power management functions. Parameters: None Return Value: None Side Effects: None void SPDIF_Wakeup(void) Description: Restores SPDIF configuration and nonretention register values. The component is stopped regardless of its state before sleep. The SPDIF_Start() function must be called explicitly to start the component again. Parameters: None Return Value: None Side Effects: Calling the SPDIF_Wakeup() function without first calling the SPDIF_Sleep() or SPDIF_SaveConfig() function may produce unexpected behavior. void SPDIF_EnableTx(void) Description: Enables the audio data output in the S/PDIF bit stream. Transmission will begin at the next X or Z frame. Parameters: None Return Value: None Side Effects: None Document Number: 001-67708 Rev. *A Page 9 of 23 S/PDIF Transmitter (SPDIF_Tx) PSoC® Creator™ Component Datasheet void SPDIF_DisableTx(void) Description: Disables the audio output in the S/PDIF bit stream. Transmission of data will stop at the next rising edge of clock and constant 0 value will be transmitted. Parameters: None Return Value: None Side Effects: None void SPDIF_WriteTxByte(uint8 wrData, uint8 channelSelect) Description: Writes a single byte into the audio data FIFO. The component status should be checked before this call to confirm that the audio data FIFO is not full. Parameters: uint8 wrData: Byte containing the audio data to transmit. uint8 channelSelect: Byte containing the constant for Channel to write. See channel status macros below. In the interleaved mode this parameter is ignored Return Value: None Side Effects: None void SPDIF_WriteCstByte(uint8 wrData, uint8 channelSelect) Description: Writes a single byte into the specified channel status FIFO. The component status should be checked before this call to confirm that the channel status FIFO is not full. Parameters: uint8 wrData: Byte containing the status data to transmit. uint8 channelSelect: Byte containing the constant for Channel to write. See channel status macros below. Return Value: None Side Effects: None Page 10 of 23 Document Number: 001-67708 Rev. *A PSoC® Creator™ Component Datasheet S/PDIF Transmitter (SPDIF_Tx) void SPDIF_SetInterruptMode(uint8 interruptSource) Description: Sets the interrupt source for the S/PDIF interrupt. Multiple sources may be ORed. Parameters: uint8 byte containing the constant for the selected interrupt sources. SPDIF Tx Interrupt Source Value AUDIO_FIFO_UNDERFLOW 0x01 AUDIO_0_FIFO_NOT_FULL 0x02 AUDIO_1_FIFO_NOT_FULL 0x04 CHST_FIFO_UNDERFLOW 0x08 CHST_0_FIFO_NOT_FULL 0x10 CHST_1_FIFO_NOT_FULL 0x20 Return Value: None Side Effects: None uint8 SPDIF_ReadStatus(void) Description: Returns state in the SPDIF status register. Parameters: None Return Value: uint8 state of the SPDIF status register. Side Effects: SPDIF Status Masks Value Type AUDIO_FIFO_UNDERFLOW 0x01 Clear on Read AUDIO_0_FIFO_NOT_FULL 0x02 Transparent AUDIO_1_FIFO_NOT_FULL 0x04 Transparent CHST_FIFO_UNDERFLOW 0x08 Clear on Read CHST_0_FIFO_NOT_FULL 0x10 Transparent CHST_1_FIFO_NOT_FULL 0x20 Transparent Clears the bits of the SPDIF status register that are Clear on Read type. Document Number: 001-67708 Rev. *A Page 11 of 23 S/PDIF Transmitter (SPDIF_Tx) PSoC® Creator™ Component Datasheet void SPDIF_ClearTxFIFO(void) Description: Clears out the audio data FIFO. Any data present in the FIFO will be lost. In the case of separated audio mode, both audio FIFOs will be cleared. Call this function only when transmit is disabled. Parameters: None Return Value: None Side Effects: None void SPDIF_ClearCstFIFO(void) Description: Clears out the channel status FIFOs. Any data present in either FIFO will be lost. Call this function only when the component is stopped. Parameters: None Return Value: None Side Effects: None void SPDIF_SetChannelStatus(uint8 channel, uint8 byte, uint8 mask, uint8 value) Description: Sets the values of the channel status at run time. This API is only valid when the component is managing the DMA. Parameters: uint8 channel: Byte containing the constant to specify the channel to modify. See channel status macros below. uint8 byte: Byte to modify [0..23]. See channel status macros below. uint8 mask: Mask on the byte. See channel status macros below. uint8 value: Value to set. See channel status macros below. Return Value: None Side Effects: None Page 12 of 23 Document Number: 001-67708 Rev. *A PSoC® Creator™ Component Datasheet S/PDIF Transmitter (SPDIF_Tx) uint8 SPDIF_SetFrequency(uint8 frequency) Description: Sets the values of the channel status for a specified frequency and returns 1. This function only works if the component is stopped. If this is called while the component is started, a zero will be returned and the values will not be modified. This API is only valid when the component is managing the DMA. Parameters: uint8: byte containing the constant for the specified frequency. Name Return Value: Description SPDIF_SPS_22KHZ Clock rate is set for 22-kHz audio SPDIF_SPS_44KHZ Clock rate is set for 44-kHz audio SPDIF_SPS_88KHZ Clock rate is set for 88-kHz audio SPDIF_SPS_24KHZ Clock rate is set for 24-kHz audio SPDIF_SPS_48KHZ Clock rate is set for 48-kHz audio SPDIF_SPS_96KHZ Clock rate is set for 96-kHz audio SPDIF_SPS_32KHZ Clock rate is set for 32-kHz audio SPDIF_SPS_64KHZ Clock rate is set for 64-kHz audio SPDIF_SPS_192KHZ Clock rate is set for 192-kHz audio SPDIF_SPS_UNKNOWN Clock rate is not specified uint8: 1 on success 0 on failure Side Effects: None void SPDIF_Init(void) Description: Initializes or restores default S/PDIF configuration provided with customizer that defines interrupt sources for the component and channel status if the component is configured to handle the channel status DMA. Parameters: None Return Value: None Side Effects: Restores only mask registers for interrupt generation and channel status if the component is configured to handle the channel status DMA. It will not clear data from the FIFOs and will not reset component hardware state machines. Document Number: 001-67708 Rev. *A Page 13 of 23 S/PDIF Transmitter (SPDIF_Tx) PSoC® Creator™ Component Datasheet void SPDIF_Enable(void) Description: Activates the hardware and begins component operation. It is not necessary to call SPDIF_Enable() because the SPDIF_Start() routine calls this function, which is the preferred method to begin component operation. Parameters: None Return Value: None Side Effects: None void SPDIF_SaveConfig(void) Description: This function saves the component configuration. This will save nonretention registers. This function will also save the current component parameter values, as defined in the Configure dialog or as modified by appropriate APIs. This function is called by the SPDIF_Sleep() function. Parameters: None Return Value: None Side Effects: None void SPDIF_RestoreConfig(void) Description: This function restores the component configuration. This will restore nonretention registers. This function will also restore the component parameter values to what they were prior to calling the SPDIF_Sleep() function.This routines is called by SPDIF_Wakeup() to restore component when it exits sleep. Parameters: None Return Value: None Side Effects: Must be called only after SPDIF_SaveConfig() routine. Otherwise the component configuration will be overwritten with its initial setting. Channel Status Macros The channel status macros encapsulate the mask and value for a specific channel status setting. These macros along with channel macros are used to set the values of channel status at run time by the SPDIF_SetChannelStatus() API. The recommended best practice is to set both channels at the same time. An example is shown below: SPDIF_SetChannelStatus(SPDIF_CHANNEL_0, SPDIF_DATA_TYPE_LINEAR_PCM); Page 14 of 23 Document Number: 001-67708 Rev. *A PSoC® Creator™ Component Datasheet S/PDIF Transmitter (SPDIF_Tx) Channel Name Constants Name Description SPDIF_CHANNEL_0 Channel 0 SPDIF_CHANNEL_1 Channel 1 Channel Status Constants Name Byte Mask Value SPDIF_DATA_TYPE_LINEAR_PCM 0 0x02 0x00 SPDIF_DATA_TYPE_OTHERDATA 0 0x02 0x02 SPDIF_COPY_HAS_CP_RIGHT 0 0x04 0x00 SPDIF_COPY_NO_CP_RIGHT 0 0x04 0x04 SPDIF_PREEMP_NO_PREEMP 0 0x38 0x00 SPDIF_PREEMP_PREEMP50 0 0x38 0x08 SPDIF_CAT_GEN 1 0xFF 0x00 SPDIF_CAT_D2D 1 0xFF 0x02 SPDIF_SRC_NUM00 2 0x0F 0x00 SPDIF_SRC_NUM01 2 0x0F 0x01 SPDIF_SRC_NUM02 2 0x0F 0x02 SPDIF_SRC_NUM03 2 0x0F 0x03 SPDIF_SRC_NUM04 2 0x0F 0x04 SPDIF_SRC_NUM05 2 0x0F 0x05 SPDIF_SRC_NUM06 2 0x0F 0x06 SPDIF_SRC_NUM07 2 0x0F 0x07 SPDIF_SRC_NUM08 2 0x0F 0x08 SPDIF_SRC_NUM09 2 0x0F 0x09 SPDIF_SRC_NUM10 2 0x0F 0x0A SPDIF_SRC_NUM11 2 0x0F 0x0B SPDIF_SRC_NUM12 2 0x0F 0x0C SPDIF_SRC_NUM13 2 0x0F 0x0D SPDIF_SRC_NUM14 2 0x0F 0x0E SPDIF_SRC_NUM15 2 0x0F 0x0F SPDIF_CH_NUM00 2 0xF0 0x00 Document Number: 001-67708 Rev. *A Page 15 of 23 S/PDIF Transmitter (SPDIF_Tx) PSoC® Creator™ Component Datasheet Name Byte Mask Value SPDIF_CH_NUM01 2 0xF0 0x10 SPDIF_CH_NUM02 2 0xF0 0x20 SPDIF_CH_NUM03 2 0xF0 0x30 SPDIF_CH_NUM04 2 0xF0 0x40 SPDIF_CH_NUM05 2 0xF0 0x50 SPDIF_CH_NUM06 2 0xF0 0x60 SPDIF_CH_NUM07 2 0xF0 0x70 SPDIF_CH_NUM08 2 0xF0 0x80 SPDIF_CH_NUM09 2 0xF0 0x90 SPDIF_CH_NUM10 2 0xF0 0xA0 SPDIF_CH_NUM11 2 0xF0 0xB0 SPDIF_CH_NUM12 2 0xF0 0xC0 SPDIF_CH_NUM13 2 0xF0 0xD0 SPDIF_CH_NUM14 2 0xF0 0xE0 SPDIF_CH_NUM15 2 0xF0 0xF0 SPDIF_CLKLVL_1 3 0x30 0x10 SPDIF_CLKLVL_2 3 0x30 0x00 SPDIF_CLKLVL_3 3 0x30 0x20 SPDIF_STDLEN 4 0x0F 0x00 SPDIF_24BLEN 4 0x0F 0x0B Sample Firmware Source Code PSoC Creator provides numerous example projects that include schematics and example code in the Find Example Project dialog. For component-specific examples, open the dialog from the Component Catalog or an instance of the component in a schematic. For general examples, open the dialog from the Start Page or File menu. As needed, use the Filter Options in the dialog to narrow the list of projects available to select. Refer to the “Find Example Project” topic in the PSoC Creator Help for more information. Page 16 of 23 Document Number: 001-67708 Rev. *A PSoC® Creator™ Component Datasheet S/PDIF Transmitter (SPDIF_Tx) Functional Description This component formats incoming audio data and metadata to create the S/PDIF bit stream. The component receives audio data from DMA as well as channel status information. Most of the time, the channel status DMA is managed by the component; however, you have the option of specifying this data separately to better control your system. Data Stream Format The audio and channel status data are independent byte streams. The byte streams are packed with the least significant byte and bit first. The number of bytes used for each sample is the minimum number of bytes to hold a sample. Any unused bits will be padded with 0 starting at the left-most bit. The audio data stream can be a single byte stream, or it can be two byte streams. In the case of a single byte stream, the left and right channels are interleaved with a sample for the left channel first followed by the right channel. In the two stream case the left and right channel byte streams use separate FIFOs. The status byte stream is always two byte streams. DMA The S/PDIF interface is a continuous interface that requires an uninterrupted stream of data. For most applications, this requires the use of DMA transfers to prevent the underflow of the audio data or channel status FIFOs. Typically, the Channel Status DMA is done completely in the component using two channel status arrays and can be modified using macros; however, you can provide the data using your own DMA or the CPU to allow flexibility. The S/PDIF can drive up to four DMA components depending on the component configuration. The DMA Wizard can be used to configure DMA operation as follows: Name of DMA Source / Destination in the DMA Wizard Direction DMA Request Signal DMA Request Type SPDIF_TX_FIFO_0_PTR Destination tx_dma0 Level Transmit FIFO for Channel 0 or Interleaved audio data SPDIF_TX_FIFO_1_PTR Destination tx_dma1 Level Transmit FIFO for Channel 1 audio data SPDIF_CST_FIFO_0_PTR Destination cst_dma0 Level Transmit FIFO for Channel 0 channel status data SPDIF_CST_FIFO_1_PTR Destination cst_dma1 Level Transmit FIFO for Channel 1 channel status data Description In all cases, a high signal on the DMA request signal indicates that an additional single byte may be transferred. Document Number: 001-67708 Rev. *A Page 17 of 23 S/PDIF Transmitter (SPDIF_Tx) PSoC® Creator™ Component Datasheet Error Handling There are two error conditions for the component that can happen if the audio is emptied and a subsequent read occurs (transmit underflow) or the channel status FIFO is emptied and subsequent read occurs (status underflow). If transmit underflow occurs, the component forces the constant transmission of 0s for audio data and continue correct generation of all framing and status data. Before transmission begins again, transmission must be disabled, the FIFOs should be cleared, data for transmit must be buffered, and then transmission re-enabled. This underflow condition can be monitored by the CPU using the component status bit AUDIO_FIFO_UNDERFLOW. An interrupt can also be configured for this error condition. While the component is started, if the status underflow occurs, the component will send all 0s for channel status with the correct generation of X, Y, Z framing and correct parity. The audio data is continuous, not impacted. To correct channel status data transmission, the component must be stopped and restarted again. This underflow condition can be monitored by the CPU using the status bit CHST_FIFO_UNDERFLOW. An interrupt can also be configured for this error condition. If the component doesn’t manage DMA, the status data must be buffered before restarting the component. Enabling Audio data transmission has dedicated enabling. When the component is started but not enabled, the S/PDIF output with channel status is generated, but the audio data is set to all 0s. This allows the S/PDIF receiver to lock on the component clock. The transition into the enabled state occurs at X or Z frame. Page 18 of 23 Document Number: 001-67708 Rev. *A PSoC® Creator™ Component Datasheet S/PDIF Transmitter (SPDIF_Tx) Block Diagram and Configuration The SPDIF_Tx is implemented as a set of configured UDBs. The implementation is shown in the following block diagram. The incoming audio data is received through the system bus interface and can be provided through CPU or DMA. The data is byte wide with the least significant byte first and is stored in audio buffer (one or two FIFOs, depending on the component configuration). The Channel Status stream has its own dedicated interface. Similarly to the audio data, there are two Channel Status FIFOs. Again, the channel status is byte wide data, least significant byte first. One byte is consumed from these FIFOs every eight samples. Both audio and status data are converted from parallel to serial form. The User Data are not defined in the S/PDIF standard and may be ignored by some receivers, so they are sent as constant zero. The validity bit, when low, indicates the audio sample is fit for conversion to analog. This bit is sent as constant zero. The preamble patterns are generated in the Preamble Generator block and are transmitted in serial form. This is all of the data required to form the SPDIF subframe structure, except the parity bit. The parity bit is calculated in the Frame Assembler block during assembling all the inputs to subframe structure. Document Number: 001-67708 Rev. *A Page 19 of 23 S/PDIF Transmitter (SPDIF_Tx) PSoC® Creator™ Component Datasheet The output of the Frame Assembler block goes to BMC Encoder where the data is encoded in spdif output. The Control Unit block gets the control data from the System Bus interface and returns the status of component operation to the bus. It controls all other blocks during data transmission. Registers SPDIF_Tx_CONTROL_REG Bits 7 6 5 Value 4 3 2 reserved 1 0 enable txenable enable: Enable/disable SPDIF_Tx component. When not enabled the component is in reset state. txenable: Enable/disable audio data output in the S/PDIF bit stream. SPDIF_Tx_STATUS_REG Bits Value 7 6 reserved 5 4 chst1_fifo_ chst0_fifo_ not_full not_full 3 chst_fifo_ underflow 2 1 0 audio1_fifo audio0_fifo audio_fifo_ _not_full _not_full underflow chst1_fifo_not_full: If set channel status FIFO 1 is not full chst1_fifo_not_full: If set channel status FIFO 0 is not full chst_fifo_underflow: If set channel status FIFOs underflow event has occurred audio1_fifo_not_full: If set audio data FIFO 1 is not full audio0_fifo_not_full: If set audio data FIFO 0 is not full audio_fifo_underflow: If set audio data FIFOs underflow event has occurred The register value may be read with the SPDIF_Tx_ReadStatus() API function. Note Bit 3 and bit 0 of the status register are configured in Sticky mode, which is a clear-on-read. In this mode, the input status is sampled each cycle of the status register clock, When the input goes high, the register bit is set and stays set regardless of the subsequent state of the input. The register bit is cleared on a subsequent read by the CPU. Page 20 of 23 Document Number: 001-67708 Rev. *A PSoC® Creator™ Component Datasheet S/PDIF Transmitter (SPDIF_Tx) Characteristics The following values indicate expected performance and are based on initial characterization data. Timing Characteristics “Maximum with Nominal Routing” Parameter Description Min Typ Max Unit fS Sampling frequency − − 192 kHz fCLOCK Component clock frequency − 128 × fS 35 MHz Min Typ Max Unit Timing Characteristics “Maximum with All Routing” Parameter Description 1 fS Sampling frequency − − 96 kHz fCLOCK Component clock frequency − 128 × fS 17 MHz S/PDIF Channel Encoding S/PDIF is a single-wire serial interface. The bit clock is embedded within the S/PDIF data stream. The digital signal is coded using Biphase Mark Code (BMC), which is a kind of phase modulation. The frequency of the clock is twice the bit-rate. Every bit of the original data is represented as two logical states, which, together, form a cell. The logical level at the start of a bit is always inverted to the level at the end of the previous bit. To transmit a ‘1’ in this format, there is a transition in the middle of the data bit boundary. If there is no transition in the middle, the data is considered a ‘0’. 1 Maximum for “All Routing” is calculated by <nominal>/2 rounded to the nearest integer. This value provides a basis for you to not have to worry about meeting timing if the component is running at or below this component frequency. Document Number: 001-67708 Rev. *A Page 21 of 23 S/PDIF Transmitter (SPDIF_Tx) PSoC® Creator™ Component Datasheet S/PDIF Protocol Hierarchy The SPDIF signal format is shown in the figure below. Audio data is transmitted in sequential blocks. The block contains 192 frames. Each frame consists of two subframes that are the basic unit into which digital audio data is organized. A subframe contains: A preamble pattern A single audio sample that may be up to 24 bits wide A validity bit that indicates whether the sample is valid A bit containing user data A bit containing the channel status An even parity bit for this subframe There are three types of preambles: X, Y and Z. Preamble Z indicates the start of a block and the start of subframe channel 0. Preamble X indicates the start of a channel 0 subframe when not at the start of a block. Preamble Y always indicates the start of a channel 1 subframe. Block Frame 191 Frame 0 Subframe Frame 191 Subframe X Channel 0 Y Channel 1 Z Channel 0 Y Channel 1 X Channel 0 Channel 1 X Channel 0 Y Channel 1 Subframe format Preamble Auxiliary LSB Audio sample word MSB V U C P Validity bit User data Channel Status data Parity bit Page 22 of 23 Document Number: 001-67708 Rev. *A PSoC® Creator™ Component Datasheet S/PDIF Transmitter (SPDIF_Tx) How to Use STA Results for Characteristics Data fCLOCK Maximum Component Clock Frequency is provided in the timing results in the clock summary as the named external clock (CLK in this case). An example of the internal clock limitations is shown below: Component Changes Version 1.0 is the first release of the SPDIF_Tx component. © Cypress Semiconductor Corporation, 2011. The information contained herein is subject to change without notice. Cypress Semiconductor Corporation assumes no responsibility for the use of any circuitry other than circuitry embodied in a Cypress product. Nor does it convey or imply any license under patent or other rights. Cypress products are not warranted nor intended to be used for medical, life support, life saving, critical control or safety applications, unless pursuant to an express written agreement with Cypress. Furthermore, Cypress does not authorize its products for use as critical components in life-support systems where a malfunction or failure may reasonably be expected to result in significant injury to the user. The inclusion of Cypress products in lifesupport systems application implies that the manufacturer assumes all risk of such use and in doing so indemnifies Cypress against all charges. PSoC® is a registered trademark, and PSoC Creator™ and Programmable System-on-Chip™ are trademarks and of Cypress Semiconductor Corp. All other trademarks or registered trademarks referenced herein are property of the respective corporations. Any Source Code (software and/or firmware) is owned by Cypress Semiconductor Corporation (Cypress) and is protected by and subject to worldwide patent protection (United States and foreign), United States copyright laws and international treaty provisions. Cypress hereby grants to licensee a personal, non-exclusive, non-transferable license to copy, use, modify, create derivative works of, and compile the Cypress Source Code and derivative works for the sole purpose of creating custom software and or firmware in support of licensee product to be used only in conjunction with a Cypress integrated circuit as specified in the applicable agreement. Any reproduction, modification, translation, compilation, or representation of this Source Code except as specified above is prohibited without the express written permission of Cypress. Disclaimer: CYPRESS MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO THIS MATERIAL, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. Cypress reserves the right to make changes without further notice to the materials described herein. Cypress does not assume any liability arising out of the application or use of any product or circuit described herein. Cypress does not authorize its products for use as critical components in lifesupport systems where a malfunction or failure may reasonably be expected to result in significant injury to the user. The inclusion of Cypress’ product in a life-support systems application implies that the manufacturer assumes all risk of such use and in doing so indemnifies Cypress against all charges. Use may be limited by and subject to the applicable Cypress software license agreement. Document Number: 001-67708 Rev. *A Page 23 of 23