<?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="Connectivity" Name="SPI" Version="spi2s1_v3_0_Cube" ns0:schemaLocation="http://mcd.rou.st.com/modules.php?name=mcu ../../../../../../../doc/V4/Development/Specifications/db/IP_Modes.xsd">
	<About>SPI: Serial Peripheral Interface</About>
	
	<!-- Generic RefParameters for SPI --> 
	<RefParameter Comment="Instance" DefaultValue="SPI$Index" Name="Instance" Type="" Visible="false"/>
	
	<!-- Virtual Mode Parameter, to define RefParameter in function of NSS -->
	<RefParameter Comment="" DefaultValue="VM_NSSSOFT" Group="Basic Parameters" Name="VirtualNSS" Type="list" Visible="false">
		<PossibleValue Comment="" Value="VM_NSSSOFT"/>
		<PossibleValue Comment="" Value="VM_NSSHARD"/>
	</RefParameter>
	
	<!-- Virtual Type Parameter, to define RefParameter in function of Master/Slave -->
	<RefParameter Comment="" DefaultValue="VM_MASTER" Group="Basic Parameters" Name="VirtualType" Type="list" Visible="false">
		<PossibleValue Comment="" Value="VM_MASTER"/>
		<PossibleValue Comment="" Value="VM_SLAVE"/>
	</RefParameter>
	
	<RefParameter Comment="Mode" DefaultValue="SPI_MODE_SLAVE" Group="Basic Parameters" Name="Mode" Type="list" Visible="false">
		<PossibleValue Comment="Slave" Value="SPI_MODE_SLAVE"/>
		<PossibleValue Comment="Master" Value="SPI_MODE_MASTER"/>
	</RefParameter>
	
	<RefParameter Comment="Direction" DefaultValue="SPI_DIRECTION_2LINES" Group="Basic Parameters" Name="Direction" Type="list" Visible="false">
		<PossibleValue Comment="Direction 2 lines" Value="SPI_DIRECTION_2LINES"/>
		<PossibleValue Comment="Direction 2 lines RXONLY" Value="SPI_DIRECTION_2LINES_RXONLY"/>
		<PossibleValue Comment="Direction 1 line" Value="SPI_DIRECTION_1LINE"/>
	</RefParameter>
	
	<RefParameter Comment="Frame Format" DefaultValue="SPI_TIMODE_DISABLE" Group="Basic Parameters" Name="TIMode" Type="list">
		<PossibleValue Comment="Motorola" Value="SPI_TIMODE_DISABLE"/>
		<PossibleValue Comment="TI" Condition="!(VirtualNSS = VM_NSSHARD)" Diagnostic="Hardware NSS signal must be enabled first" Value="SPI_TIMODE_ENABLE"/>
	</RefParameter>
	
	<RefParameter Comment="Data Size" DefaultValue="SPI_DATASIZE_4BIT" Group="Basic Parameters" Name="DataSize" Type="list">
		<PossibleValue Comment="4 Bits" Semaphore="$IpInstance_DATASIZE_BYTE" Value="SPI_DATASIZE_4BIT"/>
		<PossibleValue Comment="5 Bits" Semaphore="$IpInstance_DATASIZE_BYTE" Value="SPI_DATASIZE_5BIT"/>
		<PossibleValue Comment="6 Bits" Semaphore="$IpInstance_DATASIZE_BYTE" Value="SPI_DATASIZE_6BIT"/>
		<PossibleValue Comment="7 Bits" Semaphore="$IpInstance_DATASIZE_BYTE" Value="SPI_DATASIZE_7BIT"/>
		<PossibleValue Comment="8 Bits" Semaphore="$IpInstance_DATASIZE_BYTE" Value="SPI_DATASIZE_8BIT"/>
		<PossibleValue Comment="9 Bits" Semaphore="$IpInstance_DATASIZE_HALFWORD" Value="SPI_DATASIZE_9BIT"/>
		<PossibleValue Comment="10 Bits" Semaphore="$IpInstance_DATASIZE_HALFWORD" Value="SPI_DATASIZE_10BIT"/>
		<PossibleValue Comment="11 Bits" Semaphore="$IpInstance_DATASIZE_HALFWORD" Value="SPI_DATASIZE_11BIT"/>
		<PossibleValue Comment="12 Bits" Semaphore="$IpInstance_DATASIZE_HALFWORD" Value="SPI_DATASIZE_12BIT"/>
		<PossibleValue Comment="13 Bits" Semaphore="$IpInstance_DATASIZE_HALFWORD" Value="SPI_DATASIZE_13BIT"/>
		<PossibleValue Comment="14 Bits" Semaphore="$IpInstance_DATASIZE_HALFWORD" Value="SPI_DATASIZE_14BIT"/>
		<PossibleValue Comment="15 Bits" Semaphore="$IpInstance_DATASIZE_HALFWORD" Value="SPI_DATASIZE_15BIT"/>
		<PossibleValue Comment="16 Bits" Semaphore="$IpInstance_DATASIZE_HALFWORD" Value="SPI_DATASIZE_16BIT"/>
	</RefParameter>
	
	<RefParameter Comment="First Bit" DefaultValue="SPI_FIRSTBIT_MSB" Group="Basic Parameters" Name="FirstBit" Type="list">
		<Condition Diagnostic="" Expression="TIMode = SPI_TIMODE_DISABLE"/>
		<PossibleValue Comment="MSB First" Value="SPI_FIRSTBIT_MSB"/>
		<PossibleValue Comment="LSB First" Value="SPI_FIRSTBIT_LSB"/>
	</RefParameter>
	<RefParameter Comment="First Bit" DefaultValue="null" Group="Basic Parameters" Max="1" Min="0" Name="FirstBit" Type="integer" Visible="false"/>
	
	<!-- Clock RefParameters for SPI --> 
	<RefParameter Comment="Prescaler (for Baud Rate)" DefaultValue="SPI_BAUDRATEPRESCALER_2" Group="Clock Parameters" Name="BaudRatePrescaler" Type="list">
		<Condition Diagnostic="" Expression="($IpInstance_Slave &amp; (TIMode = SPI_TIMODE_ENABLE)) | $IpInstance_Master"/>
		<PossibleValue Comment="2" Value="SPI_BAUDRATEPRESCALER_2"/>
		<PossibleValue Comment="4" Value="SPI_BAUDRATEPRESCALER_4"/>
		<PossibleValue Comment="8" Value="SPI_BAUDRATEPRESCALER_8"/>
		<PossibleValue Comment="16" Value="SPI_BAUDRATEPRESCALER_16"/>
		<PossibleValue Comment="32" Value="SPI_BAUDRATEPRESCALER_32"/>
		<PossibleValue Comment="64" Value="SPI_BAUDRATEPRESCALER_64"/>
		<PossibleValue Comment="128" Value="SPI_BAUDRATEPRESCALER_128"/>
		<PossibleValue Comment="256" Value="SPI_BAUDRATEPRESCALER_256"/>
	</RefParameter>
	<RefParameter Comment="Prescaler (for Baud Rate)" DefaultValue="null" Group="Clock Parameters" Name="BaudRatePrescaler" Type="list" Visible="false"/>
	
	<RefParameter Comment="Baud Rate" DefaultValue="18000000" Group="Clock Parameters" Max="18000000" Min="0" Name="CalculateBaudRate" Type="string">
		<Description>Calculated Baudrate value based on SPI Clock source and Prescaler</Description>
		<Condition Diagnostic="" Expression="(($IpInstance_Slave &amp; (TIMode = SPI_TIMODE_ENABLE)) | $IpInstance_Master) &amp; (STM32F0 | STM32F3)"/>
	</RefParameter>
	
	<RefParameter Comment="Baud Rate" DefaultValue="null" Group="Clock Parameters" Max="18000000" Min="0" Name="CalculateBaudRate" Type="string" Visible="false"/>
		
	<RefParameter Comment="Clock Polarity (CPOL)" DefaultValue="SPI_POLARITY_LOW" Group="Clock Parameters" Name="CLKPolarity" Type="list">
		<Condition Diagnostic="" Expression="TIMode = SPI_TIMODE_DISABLE"/>
		<PossibleValue Comment="Low" Value="SPI_POLARITY_LOW"/>
		<PossibleValue Comment="High" Value="SPI_POLARITY_HIGH"/>
	</RefParameter>
	<RefParameter Comment="Clock Polarity" DefaultValue="null" Group="Clock Parameters" Max="1" Min="0" Name="CLKPolarity" Type="integer" Visible="false"/>
	
	<RefParameter Comment="Clock Phase (CPHA)" DefaultValue="SPI_PHASE_1EDGE" Group="Clock Parameters" Name="CLKPhase" Type="list">
		<Description>1 Edge means the first clock transition is the first data capture edge (value 0) AND 2 Edge means the second clock transition is the first data capture edge (value 1)</Description>
		<Condition Diagnostic="" Expression="TIMode = SPI_TIMODE_DISABLE"/>
		<PossibleValue Comment="1 Edge" Value="SPI_PHASE_1EDGE"/>
		<PossibleValue Comment="2 Edge" Value="SPI_PHASE_2EDGE"/>
	</RefParameter>
	<RefParameter Comment="Clock Phase" DefaultValue="null" Group="Clock Parameters" Max="1" Min="0" Name="CLKPhase" Type="integer" Visible="false"/>
		
	
	<!-- Advanced RefParameters for SPI --> 
	<!--RefParameter Comment="CRC Calculation" DefaultValue="SPI_CRCCALCULATION_DISABLED" Name="CRCCalculation" Type="list" Group="Advanced Parameters">
		<Condition Expression="!(DataSize = SPI_DATASIZE_8BIT) &amp; !(DataSize = SPI_DATASIZE_16BIT)" Diagnostic="DataSize must be either 8-bit or 16-bit"/>
		<PossibleValue Comment="Disabled" Value="SPI_CRCCALCULATION_DISABLED"/>
	</RefParameter-->
	<RefParameter Comment="CRC Calculation" DefaultValue="SPI_CRCCALCULATION_DISABLE" Group="Advanced Parameters" Name="CRCCalculation" Type="list">
		<!--Condition Expression="(DataSize = SPI_DATASIZE_8BIT) | (DataSize = SPI_DATASIZE_16BIT)" Diagnostic="DataSize must be either 8-bit or 16-bit"/-->
		<PossibleValue Comment="Disabled" Value="SPI_CRCCALCULATION_DISABLE"/>
		<PossibleValue Action="Disable" Comment="Enabled" Condition="!(DataSize = SPI_DATASIZE_8BIT) &amp; !(DataSize = SPI_DATASIZE_16BIT)" Diagnostic="this parameter becomes enabled only when DataSize equals 8-bit or 16-bit." Value="SPI_CRCCALCULATION_ENABLE"/>
	</RefParameter>
	<RefParameter Comment="CRC Calculation" DefaultValue="null" Group="Advanced Parameters" Name="CRCCalculation" Type="list" Visible="false"/>
	
	<RefParameter Comment="CRC Length" DefaultValue="SPI_CRC_LENGTH_DATASIZE" Group="Advanced Parameters" Name="CRCLength" Type="list">
		<Condition Diagnostic="" Expression="(CRCCalculation = SPI_CRCCALCULATION_ENABLE) &amp; ((DataSize = SPI_DATASIZE_8BIT) | (DataSize =SPI_DATASIZE_16BIT))"/>
		<PossibleValue Comment="Aligned with the data size" Value="SPI_CRC_LENGTH_DATASIZE"/>
		<PossibleValue Comment="CRC 8 Bits" Value="SPI_CRC_LENGTH_8BIT"/>
		<PossibleValue Comment="CRC 16 Bits" Value="SPI_CRC_LENGTH_16BIT"/>
	</RefParameter>
	<RefParameter Comment="CRC Length" DefaultValue="SPI_CRC_LENGTH_DATASIZE" Name="CRCLength" Type="list" Visible="false">		
            <PossibleValue Comment="Aligned with the data size" Value="SPI_CRC_LENGTH_DATASIZE"/>
        </RefParameter>
	
	<RefParameter Comment="CRC Polynomial" DefaultValue="X0+X1+X2" Group="Advanced Parameters" Max="8" Name="CRCPolynomial" Type="polynomialOdd">
		<Condition Diagnostic="" Expression="(CRCCalculation = SPI_CRCCALCULATION_ENABLE) &amp; (((DataSize = SPI_DATASIZE_8BIT) &amp; (CRCLength = SPI_CRC_LENGTH_DATASIZE)) | (CRCLength = SPI_CRC_LENGTH_8BIT))"/>
	</RefParameter>
	
	<RefParameter Comment="CRC Polynomial" DefaultValue="X0+X1+X2" Group="Advanced Parameters" Max="16" Name="CRCPolynomial" Type="polynomialOdd">
		<Condition Diagnostic="" Expression="(CRCCalculation = SPI_CRCCALCULATION_ENABLE) &amp; (((DataSize = SPI_DATASIZE_16BIT) &amp; (CRCLength = SPI_CRC_LENGTH_DATASIZE)) | (CRCLength = SPI_CRC_LENGTH_16BIT))"/>
	</RefParameter>
	
        <RefParameter Comment="CRC Polynomial" DefaultValue="7" Group="Advanced Parameters" Name="CRCPolynomial" Type="list" Visible="false">
            <PossibleValue Comment="X0+X1+X2" Value="7"/>
        </RefParameter>	
	 <RefParameter Comment="NSSP Mode" DefaultValue="SPI_NSS_PULSE_ENABLE" Group="Advanced Parameters" Name="NSSPMode" Type="list">
	 <Condition Diagnostic="" Expression="$IpInstance_Master &amp; (TIMode = SPI_TIMODE_DISABLE) &amp; (CLKPhase = SPI_PHASE_1EDGE)"/>
	 	<PossibleValue Comment="Enabled" Value="SPI_NSS_PULSE_ENABLE"/>
		<PossibleValue Comment="Disabled" Value="SPI_NSS_PULSE_DISABLE"/>
	 </RefParameter>
	 <RefParameter Comment="NSSP Mode" DefaultValue="SPI_NSS_PULSE_DISABLE" Name="NSSPMode" Type="list" Visible="false">
             <PossibleValue Comment="Disabled" Value="SPI_NSS_PULSE_DISABLE"/>
         </RefParameter>

	<RefParameter Comment="NSS Signal Type" DefaultValue="SPI_NSS_HARD_OUTPUT" Group="Advanced Parameters" Name="NSS" Type="list">
		<Condition Diagnostic="" Expression="$IpInstance_NSSHARD_Output"/>
		<PossibleValue Comment="Output Hardware" Value="SPI_NSS_HARD_OUTPUT"/>
	</RefParameter>
	<RefParameter Comment="NSS Signal Type" DefaultValue="SPI_NSS_HARD_INPUT" Group="Advanced Parameters" Name="NSS" Type="list">
		<Condition Diagnostic="" Expression="$IpInstance_NSSHARD_Input"/>
		<PossibleValue Comment="Input Hardware" Value="SPI_NSS_HARD_INPUT"/>
	</RefParameter>
        <RefParameter Comment="NSS Signal Type" DefaultValue="SPI_NSS_SOFT" Group="Advanced Parameters" Name="NSS" Type="list">
		<PossibleValue Comment="Software" Value="SPI_NSS_SOFT"/>
	</RefParameter>
	<RefParameter Comment="NSS Signal Type" DefaultValue="SPI_NSS_SOFT" Group="Advanced Parameters" Name="NSS" Type="list" Visible="false">
            <PossibleValue Comment="Software" Value="SPI_NSS_SOFT"/>
    </RefParameter>
	
	
	<!-- RefModes for Hardware NSS -->
	<RefMode HalMode="SPI" Name="NSS_Signal_Hard_Input">
		<Parameter Name="VirtualNSS">
			<PossibleValue>VM_NSSHARD</PossibleValue>
		</Parameter>
	</RefMode>
        <RefMode HalMode="SPI" Name="NSS_Signal_Hard_Output">
		<Parameter Name="VirtualNSS">
			<PossibleValue>VM_NSSHARD</PossibleValue>
		</Parameter>
	</RefMode>
	
	
	<!-- RefModes for 'Full-Duplex Master' SPI -->
	<RefMode Name="Full_Duplex_Master">
		<ConfigForMode>Spi_Init</ConfigForMode>
		<!-- Selected Mode Fixed Parameters -->
		<Parameter Name="VirtualType">
			<PossibleValue>VM_MASTER</PossibleValue>
		</Parameter>
		<Parameter Name="Mode">
			<PossibleValue>SPI_MODE_MASTER</PossibleValue>
		</Parameter>
		<!-- Selected Mode User Generic Parameters -->
		<Parameter Name="Direction">
			<PossibleValue>SPI_DIRECTION_2LINES</PossibleValue>
		</Parameter>	
		<Parameter Name="TIMode"/>
		<Parameter Name="DataSize"/>
		<Parameter Name="FirstBit"/>
		<!-- Selected Mode User Clock Parameters -->
		<Parameter Name="BaudRatePrescaler"/>
		<Parameter Name="CalculateBaudRate"/>
		<Parameter Name="CLKPolarity"/>
		<Parameter Name="CLKPhase"/>
		<!-- Selected Mode User Advanced Parameters -->
		<Parameter Name="CRCCalculation"/>
		<Parameter Name="CRCLength"/>
		<Parameter Name="CRCPolynomial"/>
		<Parameter Name="NSSPMode"/>
		<Parameter Name="NSS"/>
	</RefMode>
	
	<!-- RefModes for 'Full-Duplex Slave' SPI -->
	<RefMode Name="Full_Duplex_Slave">
		<ConfigForMode>Spi_Init</ConfigForMode>
		<!-- Selected Mode Fixed Parameters -->
		<Parameter Name="VirtualType">
			<PossibleValue>VM_SLAVE</PossibleValue>
		</Parameter>
		<Parameter Name="Mode">
			<PossibleValue>SPI_MODE_SLAVE</PossibleValue>
		</Parameter>
		<!-- Selected Mode User Generic Parameters -->
		<Parameter Name="Direction">
			<PossibleValue>SPI_DIRECTION_2LINES</PossibleValue>
		</Parameter>	
		<Parameter Name="TIMode"/>
		<Parameter Name="DataSize"/>
		<Parameter Name="FirstBit"/>
		<!-- Selected Mode User Clock Parameters -->
		<Parameter Name="BaudRatePrescaler"/>
		<Parameter Name="CalculateBaudRate"/>
		<Parameter Name="CLKPolarity"/>
		<Parameter Name="CLKPhase"/>
		<!-- Selected Mode User Advanced Parameters -->
		<Parameter Name="CRCCalculation"/>
		<Parameter Name="CRCLength"/>
		<Parameter Name="CRCPolynomial"/>
		<Parameter Name="NSSPMode"/>
		<Parameter Name="NSS"/>
	</RefMode>
	
	<!-- RefModes for 'Half-Duplex Master' SPI -->
	<RefMode Name="Simplex_Bidirectional_Master">
		<ConfigForMode>Spi_Init</ConfigForMode>
		<!-- Selected Mode Fixed Parameters -->
		<Parameter Name="VirtualType">
			<PossibleValue>VM_MASTER</PossibleValue>
		</Parameter>
		<Parameter Name="Mode">
			<PossibleValue>SPI_MODE_MASTER</PossibleValue>
		</Parameter>
		<!-- Selected Mode User Generic Parameters -->
		<Parameter Name="Direction">
			<PossibleValue>SPI_DIRECTION_1LINE</PossibleValue>
		</Parameter>	
		<Parameter Name="TIMode"/>
		<Parameter Name="DataSize"/>
		<Parameter Name="FirstBit"/>
		<!-- Selected Mode User Clock Parameters -->
		<Parameter Name="BaudRatePrescaler"/>
		<Parameter Name="CalculateBaudRate"/>
		<Parameter Name="CLKPolarity"/>
		<Parameter Name="CLKPhase"/>
		<!-- Selected Mode User Advanced Parameters -->
		<Parameter Name="CRCCalculation"/>
		<Parameter Name="CRCLength"/>
		<Parameter Name="CRCPolynomial"/>
		<Parameter Name="NSSPMode"/>
		<Parameter Name="NSS"/>
	</RefMode>
	
	<!-- RefModes for 'Half-Duplex Slave' SPI -->
	<RefMode Name="Simplex_Bidirectional_Slave">
		<ConfigForMode>Spi_Init</ConfigForMode>
		<!-- Selected Mode Fixed Parameters -->
		<Parameter Name="VirtualType">
			<PossibleValue>VM_SLAVE</PossibleValue>
		</Parameter>
		<Parameter Name="Mode">
			<PossibleValue>SPI_MODE_SLAVE</PossibleValue>
		</Parameter>
		<!-- Selected Mode User Generic Parameters -->
		<Parameter Name="Direction">
			<PossibleValue>SPI_DIRECTION_1LINE</PossibleValue>
		</Parameter>
		<Parameter Name="TIMode"/>
		<Parameter Name="DataSize"/>
		<Parameter Name="FirstBit"/>
		<!-- Selected Mode User Clock Parameters -->
		<Parameter Name="BaudRatePrescaler"/>
		<Parameter Name="CalculateBaudRate"/>
		<Parameter Name="CLKPolarity"/>
		<Parameter Name="CLKPhase"/>
		<!-- Selected Mode User Advanced Parameters -->
		<Parameter Name="CRCCalculation"/>
		<Parameter Name="CRCLength"/>
		<Parameter Name="CRCPolynomial"/>
		<Parameter Name="NSSPMode"/>
		<Parameter Name="NSS"/>
	</RefMode>
	
	<!-- RefModes for 'Receive Only Master' SPI -->
	<RefMode Name="RX_Only_Simplex_Unidirect_Master">
		<ConfigForMode>Spi_Init</ConfigForMode>
		<!-- Selected Mode Fixed Parameters -->
		<Parameter Name="VirtualType">
			<PossibleValue>VM_MASTER</PossibleValue>
		</Parameter>
		<Parameter Name="Mode">
			<PossibleValue>SPI_MODE_MASTER</PossibleValue>
		</Parameter>
		<!-- Selected Mode User Generic Parameters -->
		<Parameter Name="Direction">
			<PossibleValue>SPI_DIRECTION_2LINES_RXONLY</PossibleValue>
		</Parameter>
		<Parameter Name="TIMode"/>
		<Parameter Name="DataSize"/>
		<Parameter Name="FirstBit"/>
		<!-- Selected Mode User Clock Parameters -->
		<Parameter Name="BaudRatePrescaler"/>
		<Parameter Name="CalculateBaudRate"/>
		<Parameter Name="CLKPolarity"/>
		<Parameter Name="CLKPhase"/>
		<!-- Selected Mode User Advanced Parameters -->
		<Parameter Name="CRCCalculation"/>
		<Parameter Name="CRCLength"/>
		<Parameter Name="CRCPolynomial"/>
		<Parameter Name="NSSPMode"/>
		<Parameter Name="NSS"/>
	</RefMode>
	
	<!-- RefModes for 'Receive Only Slave' SPI -->
	<RefMode Name="RX_Only_Simplex_Unidirect_Slave">
		<ConfigForMode>Spi_Init</ConfigForMode>
		<!-- Selected Mode Fixed Parameters -->
		<Parameter Name="VirtualType">
			<PossibleValue>VM_SLAVE</PossibleValue>
		</Parameter>
		<Parameter Name="Mode">
			<PossibleValue>SPI_MODE_SLAVE</PossibleValue>
		</Parameter>
		<!-- Selected Mode User Generic Parameters -->
		<Parameter Name="Direction">
			<PossibleValue>SPI_DIRECTION_2LINES_RXONLY</PossibleValue>
		</Parameter>
		<Parameter Name="TIMode"/>
		<Parameter Name="DataSize"/>
		<Parameter Name="FirstBit"/>
		<!-- Selected Mode User Clock Parameters -->
		<Parameter Name="BaudRatePrescaler"/>
		<Parameter Name="CalculateBaudRate"/>
		<Parameter Name="CLKPolarity"/>
		<Parameter Name="CLKPhase"/>
		<!-- Selected Mode User Advanced Parameters -->
		<Parameter Name="CRCCalculation"/>
		<Parameter Name="CRCLength"/>
		<Parameter Name="CRCPolynomial"/>
		<Parameter Name="NSSPMode"/>
		<Parameter Name="NSS"/>
	</RefMode>
	
	<!-- RefModes for 'Transmit Only Master' SPI -->
	<RefMode Name="TX_Only_Simplex_Unidirect_Master">
		<ConfigForMode>Spi_Init</ConfigForMode>
		<!-- Selected Mode Fixed Parameters -->
		<Parameter Name="VirtualType">
			<PossibleValue>VM_MASTER</PossibleValue>
		</Parameter>
		<Parameter Name="Mode">
			<PossibleValue>SPI_MODE_MASTER</PossibleValue>
		</Parameter>
		<!-- Selected Mode User Generic Parameters -->
		<Parameter Name="Direction">
			<PossibleValue>SPI_DIRECTION_2LINES</PossibleValue>
		</Parameter>
		<Parameter Name="TIMode"/>
		<Parameter Name="DataSize"/>
		<Parameter Name="FirstBit"/>
		<!-- Selected Mode User Clock Parameters -->
		<Parameter Name="BaudRatePrescaler"/>
		<Parameter Name="CalculateBaudRate"/>
		<Parameter Name="CLKPolarity"/>
		<Parameter Name="CLKPhase"/>
		<!-- Selected Mode User Advanced Parameters -->
		<Parameter Name="CRCCalculation"/>
		<Parameter Name="CRCLength"/>
		<Parameter Name="CRCPolynomial"/>
		<Parameter Name="NSSPMode"/>
		<Parameter Name="NSS"/>
	</RefMode>
	
	<!-- RefModes for 'Transmit Only Slave' SPI -->
	<RefMode Name="TX_Only_Simplex_Unidirect_Slave">
		<ConfigForMode>Spi_Init</ConfigForMode>
		<!-- Selected Mode Fixed Parameters -->
		<Parameter Name="VirtualType">
			<PossibleValue>VM_SLAVE</PossibleValue>
		</Parameter>
		<Parameter Name="Mode">
			<PossibleValue>SPI_MODE_SLAVE</PossibleValue>
		</Parameter>
		<!-- Selected Mode User Generic Parameters -->
		<Parameter Name="Direction">
			<PossibleValue>SPI_DIRECTION_2LINES</PossibleValue>
		</Parameter>
		<Parameter Name="TIMode"/>
		<Parameter Name="DataSize"/>
		<Parameter Name="FirstBit"/>
		<!-- Selected Mode User Clock Parameters -->
		<Parameter Name="BaudRatePrescaler"/>
		<Parameter Name="CalculateBaudRate"/>
		<Parameter Name="CLKPolarity"/>
		<Parameter Name="CLKPhase"/>
		<!-- Selected Mode User Advanced Parameters -->
		<Parameter Name="CRCCalculation"/>
		<Parameter Name="CRCLength"/>
		<Parameter Name="CRCPolynomial"/>
		<Parameter Name="NSSPMode"/>
		<Parameter Name="NSS"/>
	</RefMode>
	
	
	<!-- ModeLogicOperator for SPI -->
	<ModeLogicOperator Name="OR">
		<Mode Name="Mode">
			<ModeLogicOperator Name="XOR">
				<Mode Name="Full_Duplex_Master" UserName="Full-Duplex Master">
					<SignalLogicalOp Name="AND">
						<Signal Name="MISO"/>
						<Signal Name="MOSI"/>
						<Signal Name="SCK"/>
					</SignalLogicalOp>
					<Semaphore>$IpInstance_DmaTransmit</Semaphore>
					<Semaphore>$IpInstance_DmaReceive</Semaphore>
					<Semaphore>$IpInstance_Master</Semaphore>
				</Mode>
				<Mode Name="Full_Duplex_Slave" UserName="Full-Duplex Slave">
					<SignalLogicalOp Name="AND">
						<Signal Name="MISO"/>
						<Signal Name="MOSI"/>
						<Signal Name="SCK"/>
					</SignalLogicalOp>
					<Semaphore>$IpInstance_DmaTransmit</Semaphore>
					<Semaphore>$IpInstance_DmaReceive</Semaphore>
					<Semaphore>$IpInstance_Slave</Semaphore>
					<Semaphore>$IpInstance_FullDuplex</Semaphore>
				</Mode>
				<Mode Name="Simplex_Bidirectional_Master" UserName="Half-Duplex Master">
					<SignalLogicalOp Name="AND">
						<Signal Name="MOSI"/>
						<Signal Name="SCK"/>
					</SignalLogicalOp>
					<Semaphore>$IpInstance_DmaTransmit</Semaphore>
					<Semaphore>$IpInstance_DmaReceive</Semaphore>
					<Semaphore>$IpInstance_Master</Semaphore>
				</Mode>
				<Mode Name="Simplex_Bidirectional_Slave" UserName="Half-Duplex Slave">
					<SignalLogicalOp Name="AND">
						<Signal Name="MISO"/>
						<Signal Name="SCK"/>
					</SignalLogicalOp>
					<Semaphore>$IpInstance_DmaTransmit</Semaphore>
					<Semaphore>$IpInstance_DmaReceive</Semaphore>
					<Semaphore>$IpInstance_Slave</Semaphore>
				</Mode>
				<Mode Name="RX_Only_Simplex_Unidirect_Master" UserName="Receive Only Master">
					<!-- SPI is in 'Full-Duplex' Mode, but only 'Master In' line is on pinout -->
					<SignalLogicalOp Name="AND">
						<Signal Name="MISO"/> 	 
						<Signal Name="SCK"/>
					</SignalLogicalOp>
					<Semaphore>$IpInstance_DmaReceive</Semaphore>
					<Semaphore>$IpInstance_Master</Semaphore>
				</Mode>
				<Mode Name="RX_Only_Simplex_Unidirect_Slave" UserName="Receive Only Slave">
					<!-- SPI is in 'Full-Duplex' Mode, but only 'Slave In' line is on pinout -->
					<SignalLogicalOp Name="AND">
						<Signal Name="MOSI"/>	
						<Signal Name="SCK"/>
					</SignalLogicalOp>
					<Semaphore>$IpInstance_DmaReceive</Semaphore>
					<Semaphore>$IpInstance_Slave</Semaphore>
				</Mode>
				<Mode Name="TX_Only_Simplex_Unidirect_Master" UserName="Transmit Only Master">
					<!-- SPI is in 'Full-Duplex' Mode, but only 'Master Out' line is on pinout -->
					<SignalLogicalOp Name="AND">
						<Signal Name="MOSI"/>
						<Signal Name="SCK"/>
					</SignalLogicalOp>
					<Semaphore>$IpInstance_DmaTransmit</Semaphore>
					<Semaphore>$IpInstance_Master</Semaphore>
				</Mode>
				<Mode Name="TX_Only_Simplex_Unidirect_Slave" UserName="Transmit Only Slave">
					<!-- SPI is in 'Full-Duplex' Mode, but only 'Slave Out' line is on pinout -->
					<SignalLogicalOp Name="AND">
						<Signal Name="MISO"/>
						<Signal Name="SCK"/>
					</SignalLogicalOp>
					<Semaphore>$IpInstance_DmaTransmit</Semaphore>
					<Semaphore>$IpInstance_Slave</Semaphore>
					<Semaphore>$IpInstance_Transmit</Semaphore>
				</Mode>
			</ModeLogicOperator>
			<Semaphore>$IpInstance</Semaphore>
			<Condition Diagnostic="I2S$IpNumber must be disabled" Expression="!I2S$IpNumber"/>
		</Mode>
		
		<Mode Name="NSS_Signal" UserName="Hardware NSS Signal">
			<ModeLogicOperator Name="XOR">
				<Mode Name="NSS_Signal_Hard_Input" UserName="Hardware NSS Input Signal">
					<SignalLogicalOp Name="AND">
						<Signal Name="NSS"/>
					</SignalLogicalOp>
                    <Semaphore>$IpInstance_NSSHARD_Input</Semaphore>
				</Mode>
			
				<Mode Name="NSS_Signal_Hard_Output" UserName="Hardware NSS Output Signal">
					<SignalLogicalOp Name="AND">
						<Signal Name="NSS"/>
					</SignalLogicalOp>
                    <Semaphore>$IpInstance_NSSHARD_Output</Semaphore>
                    <Condition Diagnostic="$IpInstance must be in Master mode" Expression="$IpInstance_Master"/>
				</Mode>
			</ModeLogicOperator>
			<Condition Diagnostic="$IpInstance must be have a valid Mode" Expression="$IpInstance"/>
		</Mode>
	</ModeLogicOperator>
	
	<!-- RefSignal for SPI -->
	<RefSignal IOMode="AlternateFunctionPushPull" Name="MISO"/>
	<RefSignal IOMode="AlternateFunctionPushPull" Name="MOSI"/>
	<RefSignal IOMode="AlternateFunctionPushPull" Name="NSS"/>
	<RefSignal IOMode="AlternateFunctionPushPull" Name="SCK"/>
</IP>