<?xml version="1.0" encoding="UTF-8" standalone="no"?><IP xmlns="http://mcd.rou.st.com/modules.php?name=mcu" xmlns:ns0="http://www.w3.org/2001/XMLSchema-instance" DBVersion="V4.0" IPType="peripheral" IpGroup="Multimedia" Name="I2S" Version="spi2s1_v2_4_Cube" ns0:schemaLocation="http://mcd.rou.st.com/modules.php?name=mcu ../../../../../../../doc/V4/Development/Specifications/db/IP_Modes.xsd">
   
	<!-- 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" DefaultValue="SPI$Index" Name="Instance" Type="" Visible="false"/>
				
	<RefParameter Comment="Mode" DefaultValue="I2S_MODE_MASTER" Group="Generic Parameters" Name="VirtualMode" Type="list" 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" Group="Generic Parameters" Name="Mode" Type="list">
		<Condition Diagnostic="" Expression="$IpInstance_Master"/>
		<PossibleValue Comment="Mode Master Transmit" Semaphore="$IpInstance_TX" Value="I2S_MODE_MASTER_TX"/>
		<PossibleValue Comment="Mode Master Receive" Semaphore="$IpInstance_RX" Value="I2S_MODE_MASTER_RX"/>
	</RefParameter>
	<RefParameter Comment="Transmission Mode" DefaultValue="I2S_MODE_SLAVE_TX" Group="Generic Parameters" Name="Mode" Type="list">
		<Condition Diagnostic="" Expression="$IpInstance_Slave"/>
		<PossibleValue Comment="Mode Slave Transmit" Semaphore="$IpInstance_TX" Value="I2S_MODE_SLAVE_TX"/>
		<PossibleValue Comment="Mode Slave Receive" Semaphore="$IpInstance_RX" Value="I2S_MODE_SLAVE_RX"/>
	</RefParameter>
	<RefParameter Comment="Mode" DefaultValue="I2S_MODE_SLAVE_TX" Group="Generic Parameters" Name="Mode" Type="string" Visible="false"/>
	
	<RefParameter Comment="Full-Duplex Mode" DefaultValue="I2S_FULLDUPLEXMODE_DISABLE" Group="Generic Parameters" Name="FullDuplexMode" Type="list" Visible="false">
		<Condition Diagnostic="" Expression="STM32F4"/>
		<PossibleValue Comment="Disable" Value="I2S_FULLDUPLEXMODE_DISABLE"/>
		<PossibleValue Comment="Enable" Value="I2S_FULLDUPLEXMODE_ENABLE"/>
	</RefParameter>
	
	<RefParameter Comment="Full-Duplex Mode" DefaultValue="null" Group="Generic Parameters" Name="FullDuplexMode" Type="list" Visible="false"/>
	
	<RefParameter Comment="Communication Standard" DefaultValue="I2S_STANDARD_PHILIPS" Group="Generic Parameters" Name="Standard" Type="list">
		<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" Group="Generic Parameters" Name="DataFormat" Type="list">
		<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" Group="Generic Parameters" Name="AudioFreq" Type="list">
		<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" Group="Generic Parameters" Name="RealAudioFreq" Type="string"/>
	<RefParameter Comment="Error between Selected and Real" DefaultValue="0" Group="Generic Parameters" Name="ErrorAudioFreq" Type="string"/>
	
	<!-- Clock RefParamater for I2S -->
	<RefParameter Comment="Master Clock Output" DefaultValue="I2S_MCLKOUTPUT_ENABLE" Group="Clock Parameters" Name="MCLKOutput" Type="list" Visible="false">
		<Condition Diagnostic="Master CLK Mode enabled" Expression="$IpInstance_MCLK"/>
		<PossibleValue Comment="Enable" Value="I2S_MCLKOUTPUT_ENABLE"/>		
	</RefParameter>
	<RefParameter Comment="Master Clock Output" DefaultValue="I2S_MCLKOUTPUT_DISABLE" Group="Clock Parameters" Name="MCLKOutput" Type="list">
		<PossibleValue Comment="Enable" Value="I2S_MCLKOUTPUT_ENABLE"/>
		<PossibleValue Comment="Disable" Value="I2S_MCLKOUTPUT_DISABLE"/>
	</RefParameter>
	
	<!-- RefParameter Type="stringRW" Comment="CLockSelection" DefaultValue="=RCC:I2S2CLockSelection" Name="Clockselection" -->
	
	<RefParameter Comment="Clock Source" DefaultValue="I2S_CLOCK_PLLSRC" Group="Clock Parameters" Name="ClockSource" Type="list">
		<Condition Diagnostic="" Expression="I2SSourceIsPllSRC"/>
		<PossibleValue Comment="I2S PLLSRC Clock" Value="I2S_CLOCK_PLLSRC"/>
	</RefParameter>
	
	<RefParameter Comment="Clock Source" DefaultValue="I2S_CLOCK_PLLR" Group="Clock Parameters" Name="ClockSource" Type="list">
		<Condition Diagnostic="" Expression="I2SSourceIsPll"/>
		<PossibleValue Comment="I2S PLLR Clock" Value="I2S_CLOCK_PLLR"/>
	</RefParameter>
	
	<RefParameter Comment="Clock Source" DefaultValue="I2S_CLOCK_EXTERNAL" Group="Clock Parameters" Name="ClockSource" Type="list">
		<PossibleValue Comment="External Audio Clock" Value="I2S_CLOCK_EXTERNAL"/>
	</RefParameter>
	
	<RefParameter Comment="Clock Polarity" DefaultValue="I2S_CPOL_LOW" Group="Clock Parameters" Name="CPOL" Type="list">
		<PossibleValue Comment="Low" Value="I2S_CPOL_LOW"/>
		<PossibleValue Comment="High" Value="I2S_CPOL_HIGH"/>
	</RefParameter>
	

	<!-- RefModes for 'Full-Duplex Master' I2S -->
	<RefMode Name="Full_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="FullDuplexMode">
			<PossibleValue>I2S_FULLDUPLEXMODE_ENABLE</PossibleValue>
		</Parameter>
		<!-- Selected Mode User Generic Parameters -->
		<Parameter Name="Mode"/>
		<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 'Full-Duplex Slave' I2S -->
	<RefMode Name="Full_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="FullDuplexMode">
			<PossibleValue>I2S_FULLDUPLEXMODE_ENABLE</PossibleValue>
		</Parameter>
		<!-- Selected Mode User Generic Parameters -->
		<Parameter Name="Mode"/>
		<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 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="FullDuplexMode">
			<PossibleValue>I2S_FULLDUPLEXMODE_DISABLE</PossibleValue>
		</Parameter>
		<!-- Selected Mode User Generic Parameters -->
		<Parameter Name="Mode"/>
		<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="FullDuplexMode">
			<PossibleValue>I2S_FULLDUPLEXMODE_DISABLE</PossibleValue>
		</Parameter>
		<!-- Selected Mode User Generic Parameters -->
		<Parameter Name="Mode"/>
		<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="Full_Duplex_Master" UserName="Full-Duplex Master">
					<SignalLogicalOp Name="AND">
						<Signal Name="CK"/>
						<Signal Name="SD"/>
						<Signal Name="WS"/>
						<Signal Name="ext_SD"/>
					</SignalLogicalOp>
					<Semaphore>$IpInstance_I2S_FULL_DUPLEX</Semaphore>
					<Semaphore>$IpInstance_Master</Semaphore>
				</Mode>
				<Mode Name="Full_Duplex_Slave" UserName="Full-Duplex Slave">
					<SignalLogicalOp Name="AND">
						<Signal Name="CK"/>
						<Signal Name="SD"/>
						<Signal Name="WS"/>
						<Signal Name="ext_SD"/>
					</SignalLogicalOp>
					<Semaphore>$IpInstance_I2S_FULL_DUPLEX</Semaphore>
					<Semaphore>$IpInstance_Slave</Semaphore>
				</Mode>
            	<Mode Name="Half_Duplex_Master" UserName="Half-Duplex Master">
					<SignalLogicalOp Name="AND">
						<Signal Name="CK"/>
						<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="CK"/>
						<Signal Name="SD"/>
						<Signal Name="WS"/>
					</SignalLogicalOp>
					<Semaphore>$IpInstance_Slave</Semaphore>
				</Mode>
			</ModeLogicOperator>
			<Semaphore>$IpInstance</Semaphore>
			<Condition Diagnostic="SPI$IpNumber must be disabled" Expression="!SPI$IpNumber"/>
			<Semaphore>$IpInstanceUsed_ForRCC</Semaphore>
		</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 Diagnostic="$IpInstance in a Master Mode must be selected" Expression="$IpInstance_Master"/>
		</Mode>
	</ModeLogicOperator>
	
	<!-- RefSignal for I2S -->
	<RefSignal IOMode="AlternateFunctionPushPull" Name="CK"/>
	<RefSignal IOMode="AlternateFunctionPushPull" Name="SD"/>
	<RefSignal IOMode="AlternateFunctionPushPull" Name="WS"/>
	<RefSignal IOMode="AlternateFunctionPushPull" Name="ext_SD"/>
	<RefSignal IOMode="AlternateFunctionPushPull" Name="MCK"/>
	
	<!-- Clock Semaphore for this IP. -->
	<Semaphore>I2SUsed_ForRCC</Semaphore>
</IP>
