<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<IP DBVersion="V4.0" IPType="peripheral" Name="QUADSPI" Version="quadspi1_v4_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">
	
	<About>QUADSPI: Quad Serial Peripheral Interface</About>

	<!-- ********************************************** Ref Parameters ****************************************************** -->
	<RefParameter Comment="QUADSPI instance" DefaultValue="QUADSPI" Name="Instance" Type="list" Visible="false"/>

	<RefParameter Comment="Clock Prescaler" DefaultValue="255" Max="255" Min="0" Name="ClockPrescaler" Type="integer" Group="General Parameters" />

	<RefParameter Comment="Fifo Threshold" DefaultValue="1" Max="16" Min="1" Name="FifoThreshold" Type="integer" Group="General Parameters" />
	
	<RefParameter Comment="Sample Shifting" DefaultValue="QSPI_SAMPLE_SHIFTING_NONE" Name="SampleShifting" Type="list" Group="General Parameters">
		<PossibleValue Comment="No Sample Shifting" Value="QSPI_SAMPLE_SHIFTING_NONE" />
		<PossibleValue Comment="Sample Shifting Half Cycle" Value="QSPI_SAMPLE_SHIFTING_HALFCYCLE" />
	</RefParameter>

	<RefParameter Comment="Flash Size" DefaultValue="1" Max="31" Min="0" Name="FlashSize" Type="integer" Group="General Parameters"/>

	<RefParameter Comment="Chip Select High Time" DefaultValue="QSPI_CS_HIGH_TIME_1_CYCLE" Name="ChipSelectHighTime" Type="list" Group="General Parameters">
		<PossibleValue Comment="1 Cycle" Value="QSPI_CS_HIGH_TIME_1_CYCLE" />
		<PossibleValue Comment="2 Cycles" Value="QSPI_CS_HIGH_TIME_2_CYCLE" />
		<PossibleValue Comment="3 Cycles" Value="QSPI_CS_HIGH_TIME_3_CYCLE" />
		<PossibleValue Comment="4 Cycles" Value="QSPI_CS_HIGH_TIME_4_CYCLE" />
		<PossibleValue Comment="5 Cycles" Value="QSPI_CS_HIGH_TIME_5_CYCLE" />
		<PossibleValue Comment="6 Cycles" Value="QSPI_CS_HIGH_TIME_6_CYCLE" />
		<PossibleValue Comment="7 Cycles" Value="QSPI_CS_HIGH_TIME_7_CYCLE" />
		<PossibleValue Comment="8 Cycles" Value="QSPI_CS_HIGH_TIME_8_CYCLE" />
	</RefParameter>

	<RefParameter Comment="Clock Mode" DefaultValue="QSPI_CLOCK_MODE_0" Name="ClockMode" Type="list" Group="General Parameters">
		<PossibleValue Comment="Low" Value="QSPI_CLOCK_MODE_0" />
		<PossibleValue Comment="High" Value="QSPI_CLOCK_MODE_3" />
	</RefParameter>

	<RefParameter Comment="Flash ID" DefaultValue="QSPI_FLASH_ID_1" Name="FlashID" Type="list" Group="General Parameters">
		<Condition Expression="bank_1" Diagnostic="" />
		<PossibleValue Comment="Flash ID 1" Value="QSPI_FLASH_ID_1" />
	</RefParameter>
	
	<RefParameter Comment="Flash ID" DefaultValue="QSPI_FLASH_ID_2" Name="FlashID" Type="list" Group="General Parameters">
		<Condition Expression="bank_2" Diagnostic="" />
		<PossibleValue Comment="Flash ID 2" Value="QSPI_FLASH_ID_2" />
	</RefParameter>

	<RefParameter Comment="Flash ID" DefaultValue="null" Name="FlashID" Type="list" Group="General Parameters" Visible="false" />

	<RefParameter Comment="Dual Flash" DefaultValue="QSPI_DUALFLASH_ENABLE" Name="DualFlash" Type="list" Group="General Parameters">
		<Condition Expression="Dualbank" Diagnostic="" />
		<PossibleValue Comment="Enabled" Value="QSPI_DUALFLASH_ENABLE" />
	</RefParameter>

	<RefParameter Comment="Dual Flash" DefaultValue="QSPI_DUALFLASH_DISABLE" Name="DualFlash" Type="list" Group="General Parameters">
	<Condition Expression="bank_1 | bank_2" Diagnostic="" />
		<PossibleValue Comment="Disabled" Value="QSPI_DUALFLASH_DISABLE" />
	</RefParameter>
	
	<RefParameter Comment="Dual Flash" DefaultValue="null" Name="DualFlash" Type="list" Group="General Parameters" Visible="false" />

	
	<!-- ********************************RefModes************************************* -->
	
	<RefMode Name="Single Bank 1" HalMode="QUADSPI">
		<ConfigForMode>QSPI_Init</ConfigForMode>
		
		<!-- General -->
		<Parameter Name="ClockPrescaler" />
		<Parameter Name="FifoThreshold" />
		<Parameter Name="SampleShifting" />
		<Parameter Name="FlashSize" />
		<Parameter Name="ChipSelectHighTime" />
		<Parameter Name="ClockMode" />
		<Parameter Name="FlashID" />
		<Parameter Name="DualFlash" />
	</RefMode>
        <RefMode Name="Single Bank 1 2IOs" HalMode="QUADSPI">
		<ConfigForMode>QSPI_Init</ConfigForMode>
		
		<!-- General -->
		<Parameter Name="ClockPrescaler" />
		<Parameter Name="FifoThreshold" />
		<Parameter Name="SampleShifting" />
		<Parameter Name="FlashSize" />
		<Parameter Name="ChipSelectHighTime" />
		<Parameter Name="ClockMode" />
		<Parameter Name="FlashID" />
		<Parameter Name="DualFlash" />
	</RefMode>

	<RefMode Name="Single Bank 2" HalMode="QUADSPI">
		<ConfigForMode>QSPI_Init</ConfigForMode>

		<!-- General -->
		<Parameter Name="ClockPrescaler" />
		<Parameter Name="FifoThreshold" />
		<Parameter Name="SampleShifting" />
		<Parameter Name="FlashSize" />
		<Parameter Name="ChipSelectHighTime" />
		<Parameter Name="ClockMode" />
		<Parameter Name="FlashID" />
		<Parameter Name="DualFlash" />
	</RefMode>
        <RefMode Name="Single Bank 2 2IOs" HalMode="QUADSPI">
		<ConfigForMode>QSPI_Init</ConfigForMode>

		<!-- General -->
		<Parameter Name="ClockPrescaler" />
		<Parameter Name="FifoThreshold" />
		<Parameter Name="SampleShifting" />
		<Parameter Name="FlashSize" />
		<Parameter Name="ChipSelectHighTime" />
		<Parameter Name="ClockMode" />
		<Parameter Name="FlashID" />
		<Parameter Name="DualFlash" />
	</RefMode>

	<RefMode Name="Dual Bank" HalMode="QUADSPI">
		<ConfigForMode>QSPI_Init</ConfigForMode>

		<!-- General -->
		<Parameter Name="ClockPrescaler" />
		<Parameter Name="FifoThreshold" />
		<Parameter Name="SampleShifting" />
		<Parameter Name="FlashSize" />
		<Parameter Name="ChipSelectHighTime" />
		<Parameter Name="ClockMode" />
		<Parameter Name="FlashID" />
		<Parameter Name="DualFlash" />
	</RefMode>
        <RefMode Name="Dual Bank 2IOs" HalMode="QUADSPI">
		<ConfigForMode>QSPI_Init</ConfigForMode>

		<!-- General -->
		<Parameter Name="ClockPrescaler" />
		<Parameter Name="FifoThreshold" />
		<Parameter Name="SampleShifting" />
		<Parameter Name="FlashSize" />
		<Parameter Name="ChipSelectHighTime" />
		<Parameter Name="ClockMode" />
		<Parameter Name="FlashID" />
		<Parameter Name="DualFlash" />
	</RefMode>

	<!-- ************************************* Modes ********************************************* -->
        <ModeLogicOperator Name="OR">
            
            <Mode Name="QuadSPI Mode">
                <ModeLogicOperator Name="XOR">
                    <Mode  Name="Single Bank 1 2IOs" UserName="Bank1 with Single/Dual Lines">
                        <SignalLogicalOp Name="AND">
                            <Signal Name="BK1_IO0" />
                            <Signal Name="BK1_IO1" />						
                            <Signal Name="BK1_NCS" />
                            <Signal Name="CLK" />
                        </SignalLogicalOp>
                        <!--Condition Expression="bank_1| (DIE421&amp;LQFP64)" Diagnostic=""/-->
                        <Semaphore>QSPI_Selected</Semaphore>
                        <Semaphore>bank_1</Semaphore>
                    </Mode>
                    <Mode Name="Single Bank 1" UserName="Bank1 with Quad SPI Lines">
                        <SignalLogicalOp Name="AND">
                            <Signal Name="BK1_IO0" />
                            <Signal Name="BK1_IO1" />
                            <Signal Name="BK1_IO2" />
                            <Signal Name="BK1_IO3" />						
                            <Signal Name="BK1_NCS" />
                            <Signal Name="CLK" />
                        </SignalLogicalOp>
                        <Semaphore>QSPI_Selected</Semaphore>
                        <Semaphore>bank_1</Semaphore>
                        <!--Condition Expression="bank_1" Diagnostic=""/-->
                    </Mode>
                    <Mode Name="Single Bank 2 2IOs" UserName="Bank2 with Single/Dual Lines" RemoveCondition="DIE421&amp;LQFP64">
                        <SignalLogicalOp Name="AND">
                            <Signal Name="BK2_IO0" />
                            <Signal Name="BK2_IO1" />						
                            <Signal Name="BK2_NCS" />
                            <Signal Name="CLK" />
                        </SignalLogicalOp>
                        <Semaphore>QSPI_Selected</Semaphore>
                        <Semaphore>bank_2</Semaphore>
                        <!--Condition Expression="bank_2" Diagnostic=""/-->
                    </Mode>
                    <Mode Name="Single Bank 2" UserName="Bank2 with Quad SPI Lines"  RemoveCondition="DIE421&amp;LQFP64">
                        <SignalLogicalOp Name="AND">
                            <Signal Name="BK2_IO0" />
                            <Signal Name="BK2_IO1" />
                            <Signal Name="BK2_IO2" />
                            <Signal Name="BK2_IO3" />						
                            <Signal Name="BK2_NCS" />
                            <Signal Name="CLK" />
                        </SignalLogicalOp>
                        <Semaphore>QSPI_Selected</Semaphore>
                        <Semaphore>bank_2</Semaphore>
                        <!--Condition Expression="bank_2" Diagnostic=""/-->
                    </Mode>
                    <Mode Name="Dual Bank 2IOs" UserName="Dual Bank with Single/Dual Lines"  RemoveCondition="DIE421&amp;LQFP64">
                        <SignalLogicalOp Name="AND">
                            <Signal Name="BK1_IO0" />
                            <Signal Name="BK1_IO1" />						
                            <Signal Name="BK2_IO0" />
                            <Signal Name="BK2_IO1" />						
                            <Signal Name="CLK" />
                        </SignalLogicalOp>
                        <!--Condition Expression="Dualbank" Diagnostic=""/-->
                        <Semaphore>Dualbank</Semaphore>
                    </Mode>
                    <Mode Name="Dual Bank" UserName="Dual Bank with Quad Lines"  RemoveCondition="DIE421&amp;LQFP64">
                        <SignalLogicalOp Name="AND">
                            <Signal Name="BK1_IO0" />
                            <Signal Name="BK1_IO1" />
                            <Signal Name="BK1_IO2" />
                            <Signal Name="BK1_IO3" />						
                            <Signal Name="BK2_IO0" />
                            <Signal Name="BK2_IO1" />
                            <Signal Name="BK2_IO2" />
                            <Signal Name="BK2_IO3" />
                            <Signal Name="CLK" />
                        </SignalLogicalOp>
                        <!--Condition Expression="Dualbank" Diagnostic=""/-->
                        <Semaphore>Dualbank</Semaphore>
                    </Mode>                    
                </ModeLogicOperator>
                <Semaphore>QSPI_Selected</Semaphore>
            </Mode>
            <Mode Name="Chip Select for Dual bank"  RemoveCondition="DIE421&amp;LQFP64">
                <ModeLogicOperator Name="XOR">
                    <Mode Name="Enable Chip Select 1 for both banks">
                        <SignalLogicalOp Name="AND">
                            <Signal Name="BK1_NCS" />
                        </SignalLogicalOp>
                    </Mode>
                    <Mode Name="Enable Chip Select 2 for both banks">
                        <SignalLogicalOp Name="AND">
                            <Signal Name="BK2_NCS" />
                        </SignalLogicalOp>
                    </Mode>
                    <Mode Name="Enable Chip Select for each bank">
                        <SignalLogicalOp Name="AND">
                            <Signal Name="BK1_NCS" />
                            <Signal Name="BK2_NCS" />
                        </SignalLogicalOp>
                    </Mode>
                </ModeLogicOperator>
                <Semaphore>ChipSelect</Semaphore>
                <Condition Expression="Dualbank" Diagnostic="Dual Bank mode must be enabled"/>
            </Mode>
        </ModeLogicOperator>


        <RefSignal IOMode="AlternateFunctionPushPull" Name="BK1_IO0" />
        <RefSignal IOMode="AlternateFunctionPushPull" Name="BK1_IO1" />
        <RefSignal IOMode="AlternateFunctionPushPull" Name="BK1_IO2" />
        <RefSignal IOMode="AlternateFunctionPushPull" Name="BK1_IO3" />
        <RefSignal IOMode="AlternateFunctionPushPull" Name="BK2_IO0" />
        <RefSignal IOMode="AlternateFunctionPushPull" Name="BK2_IO1" />
        <RefSignal IOMode="AlternateFunctionPushPull" Name="BK2_IO2" />
        <RefSignal IOMode="AlternateFunctionPushPull" Name="BK2_IO3" />
        <RefSignal IOMode="AlternateFunctionPushPull" Name="BK1_NCS" />
        <RefSignal IOMode="AlternateFunctionPushPull" Name="BK2_NCS" />
        <RefSignal IOMode="AlternateFunctionPushPull" Name="CLK" />
        <RefSignal Name="VS_BK1" Virtual="true"/>
        <RefSignal Name="VS_BK2" Virtual="true"/>
        <RefSignal Name="VS_dual" Virtual="true"/>
		 <Semaphore>$IpInstanceUsed_ForRCC</Semaphore>
	
</IP>
