<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<IP DBVersion="V4.0" IPType="peripheral" IpGroup="Multimedia" Name="I2S" Version="spi2s1_v2_1_Cube"
	xmlns:ns0="http://www.w3.org/2001/XMLSchema-instance"
	ns0:schemaLocation="http://mcd.rou.st.com/modules.php?name=mcu ../../../../../../../doc/V4/Development/Specifications/db/IP_Modes.xsd"
	xmlns="http://mcd.rou.st.com/modules.php?name=mcu">
	
	<!-- Description of IP. -->
	<About>I2S: Inter Integrated Sound</About>
	
	<!-- Generic RefParameters for I2S. Instance is SPI because I2S is same IP that SPI. --> 
	<RefParameter Comment="Instance" Name="Instance" DefaultValue="SPI$Index" Type="" Visible="false"/>
		
	<RefParameter Comment="Mode" DefaultValue="I2S_MODE_MASTER" Name="VirtualMode" Type="list" Group="Generic Parameters" Visible="false">
		<PossibleValue Comment="Master" Value="I2S_MODE_MASTER"/>
		<PossibleValue Comment="Slave" Value="I2S_MODE_SLAVE"/>
	</RefParameter>
		
	<RefParameter Comment="Transmission Mode" DefaultValue="I2S_MODE_MASTER_TX" Name="Mode" Type="list" Group="Generic Parameters">
		<Condition Expression="$IpInstance_Master" Diagnostic=""/>
		<PossibleValue Comment="Mode Master Transmit" Value="I2S_MODE_MASTER_TX" Semaphore="$IpInstance_TX"/>
		<PossibleValue Comment="Mode Master Receive" Value="I2S_MODE_MASTER_RX" Semaphore="$IpInstance_RX"/>
	</RefParameter>
	<RefParameter Comment="Transmission Mode" DefaultValue="I2S_MODE_SLAVE_TX" Name="Mode" Type="list" Group="Generic Parameters">
		<Condition Expression="$IpInstance_Slave" Diagnostic=""/>
		<PossibleValue Comment="Mode Slave Transmit" Value="I2S_MODE_SLAVE_TX" Semaphore="$IpInstance_TX"/>
		<PossibleValue Comment="Mode Slave Receive" Value="I2S_MODE_SLAVE_RX" Semaphore="$IpInstance_RX"/>
	</RefParameter>
	<RefParameter Comment="Mode" DefaultValue="I2S_MODE_SLAVE_TX" Name="Mode" Type="string" Group="Generic Parameters" Visible="false"/>

	
	<RefParameter Comment="Communication Standard" DefaultValue="I2S_STANDARD_PHILIPS" Name="Standard" Type="list" Group="Generic Parameters">
		<PossibleValue Comment="I2S Philips" Value="I2S_STANDARD_PHILIPS"/>
		<PossibleValue Comment="MSB First (Left Justified)" Value="I2S_STANDARD_MSB"/>
		<PossibleValue Comment="LSB First (Right Justified)" Value="I2S_STANDARD_LSB"/>
		<PossibleValue Comment="PCM with Short Synchro Frame" Value="I2S_STANDARD_PCM_SHORT"/>
		<PossibleValue Comment="PCM with Long Synchro Frame" Value="I2S_STANDARD_PCM_LONG"/>
	</RefParameter>
	
	<RefParameter Comment="Data and Frame Format" DefaultValue="I2S_DATAFORMAT_16B" Name="DataFormat" Type="list" Group="Generic Parameters">
		<PossibleValue Comment="16 Bits Data on 16 Bits Frame" Value="I2S_DATAFORMAT_16B"/>
		<PossibleValue Comment="16 Bits Data on 32 Bits Frame" Value="I2S_DATAFORMAT_16B_EXTENDED"/>
		<PossibleValue Comment="24 Bits Data on 32 Bits Frame" Value="I2S_DATAFORMAT_24B"/>
		<PossibleValue Comment="32 Bits Data on 32 Bits Frame" Value="I2S_DATAFORMAT_32B"/>
	</RefParameter>
	
	<RefParameter Comment="Selected Audio Frequency" DefaultValue="I2S_AUDIOFREQ_8K" Name="AudioFreq" Type="list" Group="Generic Parameters">
		<PossibleValue Comment="Custom Freq" Value="AudioFreqCustomValue" Semaphore="SEM_I2S_AUDIOFREQ_CUSTOM_$IpInstance"/>
                <PossibleValue Comment="192 KHz" Value="I2S_AUDIOFREQ_192K"/>
		<PossibleValue Comment="96 KHz" Value="I2S_AUDIOFREQ_96K"/>
		<PossibleValue Comment="48 KHz" Value="I2S_AUDIOFREQ_48K"/>
		<PossibleValue Comment="44 KHz" Value="I2S_AUDIOFREQ_44K"/>
		<PossibleValue Comment="32 KHz" Value="I2S_AUDIOFREQ_32K"/>
		<PossibleValue Comment="22 KHz" Value="I2S_AUDIOFREQ_22K"/>
		<PossibleValue Comment="16 KHz" Value="I2S_AUDIOFREQ_16K"/>
		<PossibleValue Comment="11 KHz" Value="I2S_AUDIOFREQ_11K"/>
		<PossibleValue Comment="8 KHz" Value="I2S_AUDIOFREQ_8K"/>
		<!-- <PossibleValue Comment="Default" Value="I2S_AUDIOFREQ_DEFAULT"/> -->
	</RefParameter>
	
    <!-- Customize the I2S frequency -->
    <RefParameter Name="AudioFreqCustom" Comment="Custom I2S Frequency (Hz)" DefaultValue="68000" Max="192000" Min="8000" Type="integer" Unit="Hz" Visible="true" Group="Generic Parameters">
        <Condition Diagnostic="" Expression="SEM_I2S_AUDIOFREQ_CUSTOM_$IpInstance"/>
        <Description>Value must be enterred as a 1000 multiple</Description>
    </RefParameter>
    <RefParameter Name="AudioFreqCustom" Comment="Custom I2S Frequency (Hz)" DefaultValue="=AudioFreq" Type="list" Visible="false">
        <Description>Value must be enterred as a 1000 multiple</Description>
    </RefParameter>

	<!-- Calculated Value for Audio Frequency -->
	<RefParameter Comment="Real Audio Frequency" DefaultValue="0" Name="RealAudioFreq" Type="string" Group="Generic Parameters"/>
	<RefParameter Comment="Error between Selected and Real" DefaultValue="0" Name="ErrorAudioFreq" Type="string" Group="Generic Parameters"/>
	
	<!-- Clock RefParamater for I2S -->
	<RefParameter Comment="Master Clock Output" DefaultValue="I2S_MCLKOUTPUT_ENABLE" Name="MCLKOutput" Type="list" Group="Clock Parameters" Visible="false">
		<Condition Expression="$IpInstance_MCLK" Diagnostic="Master CLK Mode enabled"/>
		<PossibleValue Comment="Enable" Value="I2S_MCLKOUTPUT_ENABLE"/>		
	</RefParameter>
	<RefParameter Comment="Master Clock Output" DefaultValue="I2S_MCLKOUTPUT_DISABLE" Name="MCLKOutput" Type="list" Group="Clock Parameters">
		<PossibleValue Comment="Enable" Value="I2S_MCLKOUTPUT_ENABLE"/>
		<PossibleValue Comment="Disable" Value="I2S_MCLKOUTPUT_DISABLE"/>
	</RefParameter>
	
	<RefParameter Comment="Clock Source" DefaultValue="I2S_CLOCK_PLL" Name="ClockSource" Type="list" Group="Clock Parameters" >
		<PossibleValue Comment="I2S PLL Clock" Value="I2S_CLOCK_PLL"/>
		<PossibleValue Comment="External Audio Clock" Value="I2S_CLOCK_EXTERNAL"/>
	</RefParameter>
	<RefParameter Comment="Clock Polarity" DefaultValue="I2S_CPOL_LOW" Name="CPOL" Type="list" Group="Clock Parameters">
		<PossibleValue Comment="Low" Value="I2S_CPOL_LOW"/>
		<PossibleValue Comment="High" Value="I2S_CPOL_HIGH"/>
	</RefParameter>
	
	
	<!-- RefModes for 'Half-Duplex Master' I2S -->
	<RefMode Name="Half_Duplex_Master">
		<ConfigForMode>I2S_Init</ConfigForMode>
		<!-- Selected Mode Fixed Parameters -->
		<Parameter Name="Instance">
			<PossibleValue>SPI$Index</PossibleValue>
		</Parameter>
		<Parameter Name="VirtualMode">
			<PossibleValue>I2S_MODE_MASTER</PossibleValue>
		</Parameter>
		<Parameter Name="Mode"/>
		<!-- Selected Mode User Generic Parameters -->
		<Parameter Name="Standard"/>
		<Parameter Name="DataFormat"/>
		<Parameter Name="AudioFreq"/>
                <Parameter Name="AudioFreqCustom"/>
		<Parameter Name="RealAudioFreq"/>
		<Parameter Name="ErrorAudioFreq"/>
		<!-- Selected Mode User Clock Parameters -->
		<Parameter Name="ClockSource"/>
		<Parameter Name="CPOL" />
	</RefMode>
	
	
	<!-- RefModes for 'Half-Duplex Slave' I2S -->
	<RefMode Name="Half_Duplex_Slave">
		<ConfigForMode>I2S_Init</ConfigForMode>
		<!-- Selected Mode Fixed Parameters -->
		<Parameter Name="Instance">
			<PossibleValue>SPI$Index</PossibleValue>
		</Parameter>
		<Parameter Name="VirtualMode">
			<PossibleValue>I2S_MODE_SLAVE</PossibleValue>
		</Parameter>
		<Parameter Name="Mode"/>
		<!-- Selected Mode User Generic Parameters -->
		<Parameter Name="Standard"/>
		<Parameter Name="DataFormat"/>
		<Parameter Name="AudioFreq"/>
                <Parameter Name="AudioFreqCustom"/>
		<Parameter Name="RealAudioFreq"/>
		<Parameter Name="ErrorAudioFreq"/>
		<!-- Selected Mode User Clock Parameters -->
		<Parameter Name="ClockSource"/>
		<Parameter Name="CPOL" />
	</RefMode>
	
	
	<!-- RefModes for I2S Master Clock -->
	<RefMode Name="Master_Clock_Activated">
	<!-- Selected Mode Fixed Parameters -->
		<Parameter Name="MCLKOutput"/>
	</RefMode>
	
	<!-- ModeLogicOperator for I2S -->
	<ModeLogicOperator Name="OR">
		<Mode Name="Mode">
			<ModeLogicOperator Name="XOR">
				<Mode Name="Half_Duplex_Master" UserName="Half-Duplex Master">
					<SignalLogicalOp Name="AND">
						<Signal Name="SCK"/>
						<Signal Name="SD"/>
						<Signal Name="WS"/>
					</SignalLogicalOp>
					<Semaphore>$IpInstance_Master</Semaphore>
				</Mode>
				<Mode Name="Half_Duplex_Slave" UserName="Half-Duplex Slave">
					<SignalLogicalOp Name="AND">
						<Signal Name="SCK"/>
						<Signal Name="SD"/>
						<Signal Name="WS"/>
					</SignalLogicalOp>
					<Semaphore>$IpInstance_Slave</Semaphore>
				</Mode>
			</ModeLogicOperator>
			<Semaphore>$IpInstance</Semaphore>
			<Condition Expression="!SPI$IpNumber" Diagnostic="SPI$IpNumber must be disabled"/>
		</Mode>
		
		<Mode Name="Master_Clock" UserName="Master Clock Output">
			<ModeLogicOperator Name="OR">
				<Mode Name="Master_Clock_Activated" UserName="Activated">
					<SignalLogicalOp Name="AND">
						<Signal Name="MCK"/>
					</SignalLogicalOp>
					<Semaphore>$IpInstance_MCLK</Semaphore>
				</Mode>
			</ModeLogicOperator>
			<Condition Expression="$IpInstance_Master" Diagnostic="$IpInstance in Master Mode must be selected"/>
		</Mode>
	</ModeLogicOperator>
	
	<!-- RefSignal for I2S -->
	<RefSignal IOMode="AlternateFunctionPushPull" Name="SCK"/>
	<RefSignal IOMode="AlternateFunctionPushPull" Name="MCK"/>
	<RefSignal IOMode="AlternateFunctionPushPull" Name="SD"/>
	<RefSignal IOMode="AlternateFunctionPushPull" Name="WS"/>
	
	<!-- Clock Semaphore for this IP. -->
	<Semaphore>I2SUsed_ForRCC</Semaphore>
</IP>
