<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<IP DBVersion="V4.0" IPType="peripheral" Name="COMP" Version="fastcomp_v1_0_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>COMP: Fast Comparator</About>
	
	<!-- Pinout Parameters for COMP 2/4/6 (Piccolo). Already selected on Pinout TreeView -->
	<RefParameter Comment="Inverting Input" DefaultValue="COMP_INVERTINGINPUT_IO1" Name="InvertingInput" Type="list" Group="Pinout Parameters" Visible="false">
		<Condition Expression="((PA2_COMP2_INM  &amp; ($IpNumber=2)) | (PB2_COMP4_INM  &amp; ($IpNumber=4)) | (PB15_COMP6_INM  &amp; ($IpNumber=6)))" Diagnostic=""/>
		<PossibleValue Comment="I/O1 (PA2/PB2/PB15)" Value="COMP_INVERTINGINPUT_IO1"/>
	</RefParameter>
	<RefParameter Comment="Inverting Input" DefaultValue="COMP_INVERTINGINPUT_DAC1_CH1" Name="InvertingInput" Type="list" Group="Pinout Parameters" Visible="false">
		<Condition Expression="((PA4_COMP2_INM &amp; ($IpNumber=2)) | (PA4_COMP4_INM &amp; ($IpNumber=4)) | (PA4_COMP6_INM &amp; ($IpNumber=6)))" Diagnostic=""/>
		<PossibleValue Comment="DAC1_OUT (PA4)" Value="COMP_INVERTINGINPUT_DAC1_CH1"/>
	</RefParameter>
	<RefParameter Comment="Inverting Input" DefaultValue="COMP_INVERTINGINPUT_VREFINT" Name="InvertingInput" Type="list" Group="Pinout Parameters" Visible="false">
		<PossibleValue Comment="VREFINT" Value="COMP_INVERTINGINPUT_VREFINT"/>
		<PossibleValue Comment="DAC1_OUT1 (PA4)" Value="COMP_INVERTINGINPUT_DAC1_CH1"/>
		<PossibleValue Comment="DAC1_OUT2" Value="COMP_INVERTINGINPUT_DAC1_CH2"/>
		<PossibleValue Comment="DAC2_OUT1" Value="COMP_INVERTINGINPUT_DAC2_CH1"/>
		<PossibleValue Comment="1/4 VREFINT" Value="COMP_INVERTINGINPUT_1_4VREFINT"/>
		<PossibleValue Comment="1/2 VREFINT" Value="COMP_INVERTINGINPUT_1_2VREFINT"/>
		<PossibleValue Comment="3/4 VREFINT" Value="COMP_INVERTINGINPUT_3_4VREFINT"/>
	</RefParameter>
		
	<RefParameter Comment="Non Inverting Input" DefaultValue="COMP_NONINVERTINGINPUT_IO1" Name="NonInvertingInput" Type="list" Group="Pinout Parameters" Visible="false">
		<Condition Expression="((PA7_COMP2_INP &amp; ($IpNumber=2)) | (PB0_COMP4_INP &amp; ($IpNumber=4)) | (PB11_COMP6_INP &amp; ($IpNumber=6)))" Diagnostic=""/>
		<PossibleValue Comment="I/O1 (PA7/PB0/PB11)" Value="COMP_NONINVERTINGINPUT_IO1"/>
	</RefParameter>
	<RefParameter Comment="Non Inverting Input" DefaultValue="COMP_NONINVERTINGINPUT_IO1" Name="NonInvertingInput" Type="list" Group="Pinout Parameters" Visible="false">
		<PossibleValue Comment="I/O1 (PA7)" Value="COMP_NONINVERTINGINPUT_IO1"/>
	</RefParameter>
	
	<!-- Window Mode not Used on Fugu & Piccolo.
	<RefParameter Comment="Window Mode" DefaultValue="COMP_WINDOWMODE_DISABLED" Name="WindowMode" Type="list" Group="Pinout Parameters" Visible="false">
		<PossibleValue Comment="Disabled" Value="COMP_WINDOWMODE_DISABLED"/>
		<PossibleValue Comment="Enabled" Value="COMP_WINDOWMODE_ENABLED"/>
	</RefParameter>
	-->

	<!-- Basic Parameters -->
	<!-- Speed Mode not Used on Fugu & Piccolo. 
	<RefParameter Comment="Speed Mode" DefaultValue="COMP_MODE_HIGHSPEED" Name="Mode" Type="list" Group="Basic Parameters">
		<PossibleValue Comment="High Speed " Value="COMP_MODE_HIGHSPEED"/>
		<PossibleValue Comment="Medium Speed " Value="COMP_MODE_MEDIUMSPEED"/>
		<PossibleValue Comment="Low Power " Value="COMP_MODE_LOWPOWER"/>
		<PossibleValue Comment="Ultra-Low Power" Value="COMP_MODE_ULTRALOWPOWER"/>
	</RefParameter>
	-->
	
	<RefParameter Comment="Interrupt Trigger Mode" DefaultValue="COMP_TRIGGERMODE_NONE" Name="TriggerMode" Type="list" Group="Basic Parameters">
		<PossibleValue Comment="None" Value="COMP_TRIGGERMODE_NONE"/>
		<PossibleValue Comment="Rising Edge" Value="COMP_TRIGGERMODE_IT_RISING" Semaphore="$IpInstance_EXTI_IT_ENABLED"/>
		<PossibleValue Comment="Falling Edge" Value="COMP_TRIGGERMODE_IT_FALLING" Semaphore="$IpInstance_EXTI_IT_ENABLED"/>
		<PossibleValue Comment="Rising/Falling Edge" Value="COMP_TRIGGERMODE_IT_RISING_FALLING" Semaphore="$IpInstance_EXTI_IT_ENABLED"/>
	</RefParameter>
	
	<!-- Hysteresis Level not Used on Fugu & Piccolo 
	<RefParameter Comment="Hysteresis Level" DefaultValue="COMP_HYSTERESIS_NONE" Name="Hysteresis" Type="list" Group="Basic Parameters">
		<PossibleValue Comment="None" Value="COMP_HYSTERESIS_NONE"/>
		<PossibleValue Comment="Low" Value="COMP_HYSTERESIS_LOW"/>
		<PossibleValue Comment="Medium" Value="COMP_HYSTERESIS_MEDIUM"/>
		<PossibleValue Comment="High" Value="COMP_HYSTERESIS_HIGH"/>
	</RefParameter>
	-->
	
	<!-- Blanking Source. On Piccolo, TIM4 & TIM8 are not present -->
	<RefParameter Comment="Blanking Source" DefaultValue="COMP_BLANKINGSRCE_NONE" Name="BlankingSrce" Type="list" Group="Basic Parameters">
		<Condition Expression="($IpNumber=2)" Diagnostic=""/>
		<PossibleValue Comment="None" Value="COMP_BLANKINGSRCE_NONE"/>
		<PossibleValue Comment="Timer 1 Output Compare 5" Value="COMP_BLANKINGSRCE_TIM1OC5" Condition="!Semaphore_output_Channel5TIM1" Action="Disable"
						Diagnostic="Need to activate Timer 1 Channel 5 in an 'Output Compare' Mode."/>
		<PossibleValue Comment="Timer 2 Output Compare 3" Value="COMP_BLANKINGSRCE_TIM2OC3" Condition="!Semaphore_output_Channel3TIM2" Action="Disable"
						Diagnostic="Need to activate Timer 2 Channel 3 in an 'Output Compare' Mode."/>
		<PossibleValue Comment="Timer 3 Output Compare 3" Value="COMP_BLANKINGSRCE_TIM3OC3" Condition="!Semaphore_output_Channel3TIM3" Action="Disable"
						Diagnostic="Need to activate Timer 3 Channel 3 in an 'Output Compare' Mode."/>
	</RefParameter>
	<RefParameter Comment="Blanking Source" DefaultValue="COMP_BLANKINGSRCE_NONE" Name="BlankingSrce" Type="list" Group="Basic Parameters">
		<Condition Expression="($IpNumber=4)" Diagnostic=""/>
		<PossibleValue Comment="None" Value="COMP_BLANKINGSRCE_NONE"/>
		<PossibleValue Comment="Timer 3 Output Compare 4" Value="COMP_BLANKINGSRCE_TIM3OC4" Condition="!Semaphore_output_Channel4TIM3" Action="Disable"
						Diagnostic="Need to activate Timer 3 Channel 4 in an 'Output Compare' Mode."/>
		<PossibleValue Comment="Timer 15 Output Compare 1" Value="COMP_BLANKINGSRCE_TIM15OC1" Condition="!Semaphore_output_Channel1TIM15" Action="Disable"
						Diagnostic="Need to activate Timer 15 Channel 1 in an 'Output Compare' Mode."/> 
	</RefParameter>
	<RefParameter Comment="Blanking Source" DefaultValue="COMP_BLANKINGSRCE_NONE" Name="BlankingSrce" Type="list" Group="Basic Parameters">
		<Condition Expression="($IpNumber=6)" Diagnostic=""/>
		<PossibleValue Comment="None" Value="COMP_BLANKINGSRCE_NONE"/>
		<PossibleValue Comment="Timer 2 Output Compare 4" Value="COMP_BLANKINGSRCE_TIM2OC4" Condition="!Semaphore_output_Channel4TIM2" Action="Disable"
						Diagnostic="Need to activate Timer 2 Channel 4 in an 'Output Compare' Mode."/>
		<PossibleValue Comment="Timer 15 Output Compare 2" Value="COMP_BLANKINGSRCE_TIM15OC2" Condition="!Semaphore_output_Channel2TIM15" Action="Disable"
						Diagnostic="Need to activate Timer 15 Channel 2 in an 'Output Compare' Mode."/> 
	</RefParameter>
	<RefParameter Comment="Blanking Source" DefaultValue="COMP_BLANKINGSRCE_NONE" Name="BlankingSrce" Type="list" Group="Basic Parameters" Visible="false">
		<PossibleValue Comment="None" Value="COMP_BLANKINGSRCE_NONE"/>
	</RefParameter>
	
	
	<!-- Output Parameters -->
	<RefParameter Comment="Output Polarity" DefaultValue="COMP_OUTPUTPOL_NONINVERTED" Name="OutputPol" Type="list" Group="Output Parameters">
		<PossibleValue Comment="Not Inverted " Value="COMP_OUTPUTPOL_NONINVERTED"/>
		<PossibleValue Comment="Inverted " Value="COMP_OUTPUTPOL_INVERTED"/>
	</RefParameter>
	
	<!-- Internal Output Selection. On Piccolo, TIM3 is used and TIM4 & TIM8 are not present -->
	<RefParameter Comment="Output Internal Selection" DefaultValue="COMP_OUTPUT_NONE" Name="Output" Type="list" Group="Output Parameters">
		<Condition Expression="($IpNumber=2)" Diagnostic=""/>
		<PossibleValue Comment="None" Value="COMP_OUTPUT_NONE"/>
		<PossibleValue Comment="Timer 1 Break Input (BRK_ACTH) " Value="COMP_OUTPUT_TIM1BKIN"/>
		<PossibleValue Comment="Timer 1 Break Input 2 (BRK2) " Value="COMP_OUTPUT_TIM1BKIN2"/>
		<PossibleValue Comment="Timer 1 Input Capture 1 " Value="COMP_OUTPUT_TIM1IC1"/>
		<PossibleValue Comment="Timer 1 Output Compare Reference Clear " Value="COMP_OUTPUT_TIM1OCREFCLR"/>
		<PossibleValue Comment="Timer 2 Input Capture 4 " Value="COMP_OUTPUT_TIM2IC4"/>
		<PossibleValue Comment="Timer 2 Output Compare Reference Clear " Value="COMP_OUTPUT_TIM2OCREFCLR"/>
		<PossibleValue Comment="Timer 3 Input Capture 1 " Value="COMP_OUTPUT_TIM3IC1"/>
		<PossibleValue Comment="Timer 3 Output Compare Reference Clear " Value="COMP_OUTPUT_TIM3OCREFCLR"/>
	</RefParameter>
	<RefParameter Comment="Output Internal Selection" DefaultValue="COMP_OUTPUT_NONE" Name="Output" Type="list" Group="Output Parameters">
		<Condition Expression="($IpNumber=4)" Diagnostic=""/>
		<PossibleValue Comment="None" Value="COMP_OUTPUT_NONE"/>
		<PossibleValue Comment="Timer 1 Break Input (BRK_ACTH) " Value="COMP_OUTPUT_TIM1BKIN"/>
		<PossibleValue Comment="Timer 1 Break Input 2 (BRK2) " Value="COMP_OUTPUT_TIM1BKIN2"/>
		<PossibleValue Comment="Timer 3 Input Capture 3 " Value="COMP_OUTPUT_TIM3IC3"/>
		<PossibleValue Comment="Timer 3 Output Compare Reference Clear " Value="COMP_OUTPUT_TIM3OCREFCLR"/>
		<PossibleValue Comment="Timer 15 Input Capture 2 " Value="COMP_OUTPUT_TIM15IC2"/>
		<PossibleValue Comment="Timer 15 Output Compare Reference Clear " Value="COMP_OUTPUT_TIM15OCREFCLR"/>
	</RefParameter>
	<RefParameter Comment="Output Internal Selection" DefaultValue="COMP_OUTPUT_NONE" Name="Output" Type="list" Group="Output Parameters">
		<Condition Expression="($IpNumber=6)" Diagnostic=""/>
		<PossibleValue Comment="None" Value="COMP_OUTPUT_NONE"/>
		<PossibleValue Comment="Timer 1 Break Input (BRK_ACTH) " Value="COMP_OUTPUT_TIM1BKIN"/>
		<PossibleValue Comment="Timer 1 Break Input 2 (BRK2) " Value="COMP_OUTPUT_TIM1BKIN2"/>
		<PossibleValue Comment="Timer 2 Input Capture 2 " Value="COMP_OUTPUT_TIM2IC2"/>
		<PossibleValue Comment="Timer 2 Output Compare Reference Clear " Value="COMP_OUTPUT_COMP6_TIM2OCREFCLR"/>
		<PossibleValue Comment="Timer 16 Input Capture 1 " Value="COMP_OUTPUT_TIM16IC1"/>
		<PossibleValue Comment="Timer 16 Output Compare Reference Clear " Value="COMP_OUTPUT_TIM16OCREFCLR"/>
	</RefParameter>
	<RefParameter Comment="Output Internal Selection" DefaultValue="COMP_OUTPUT_NONE" Name="Output" Type="list" Group="Output Parameters" Visible="false">
		<PossibleValue Comment="None" Value="COMP_OUTPUT_NONE"/>
	</RefParameter>
		
	
	
	<!-- InputPlus is the default Mode -->
	<RefMode Name="InputPlus_BaseMode" Abstract="true">
		<ConfigForMode>Comp_Init</ConfigForMode>
		<Parameter Name="TriggerMode"/>
		<Parameter Name="BlankingSrce"/>
		<Parameter Name="OutputPol"/>
		<Parameter Name="Output"/>
	</RefMode>
	
	
	<!-- 'Non-Inverting Input' RefModes list -->
	<RefMode Name="INP" BaseMode="InputPlus_BaseMode">
		<Parameter Name="NonInvertingInput"/>
	</RefMode>


	<!-- 'Window Mode' RefMode-->
	<!--
	<RefMode Name="WindowMode" BaseMode="InputPlus_BaseMode">
		<Parameter Name="WindowMode">
			<PossibleValue>COMP_WINDOWMODE_ENABLED</PossibleValue>
		</Parameter>
	</RefMode>
	-->


	<!-- 'Inverting Input' RefModes list -->
	<RefMode Name="INM">
		<Parameter Name="InvertingInput"/>
	</RefMode>
	<RefMode Name="VREFINT">
		<Parameter Name="InvertingInput">
			<PossibleValue>COMP_INVERTINGINPUT_VREFINT</PossibleValue>
		</Parameter>	
	</RefMode>
	<RefMode Name="VREFINT_34">
		<Parameter Name="InvertingInput">
			<PossibleValue>COMP_INVERTINGINPUT_3_4VREFINT</PossibleValue>
		</Parameter>	
	</RefMode>
	<RefMode Name="VREFINT_12">
		<Parameter Name="InvertingInput">
			<PossibleValue>COMP_INVERTINGINPUT_1_2VREFINT</PossibleValue>
		</Parameter>	
	</RefMode>
	<RefMode Name="VREFINT_14">
		<Parameter Name="InvertingInput">
			<PossibleValue>COMP_INVERTINGINPUT_1_4VREFINT</PossibleValue>
		</Parameter>	
	</RefMode>
	<RefMode Name="INM_DAC1OUT1">
		<Parameter Name="InvertingInput">
			<PossibleValue>COMP_INVERTINGINPUT_DAC1_CH1</PossibleValue>
		</Parameter>	
	</RefMode>
	<RefMode Name="INM_DAC1OUT2">
		<Parameter Name="InvertingInput">
			<PossibleValue>COMP_INVERTINGINPUT_DAC1_CH2</PossibleValue>
		</Parameter>	
	</RefMode>
	<RefMode Name="INM_DAC2OUT1">
		<Parameter Name="InvertingInput">
			<PossibleValue>COMP_INVERTINGINPUT_DAC2_CH1</PossibleValue>
		</Parameter>	
	</RefMode>
		
	
	<!-- Modes for COMP. Defined for Piccolo (F303/F333) -->
	<ModeLogicOperator Name="OR">
		<Mode Name="InputPlus" UserName="Input [+]">
			<ModeLogicOperator Name="XOR">
				<Mode Name="INP" UserName="INP" ShrinkName="Input [+] : INP">
					<SignalLogicalOp Name="AND">
						<Signal Name="INP"/>
					</SignalLogicalOp>
					<Semaphore>$IpInstance_ExternalInputPlus</Semaphore>
				</Mode>
				<!-- 
				<Mode Name="WindowMode" UserName="Window Mode" RemoveCondition="($IpNumber=2)" >
					<SignalLogicalOp Name="AND">
						<Signal Name="VS_WindowMode"/>
					</SignalLogicalOp>
					<Condition Expression="(($IpNumber=1) &amp; COMP2_ExternalInputPlus)" 
								Diagnostic="Need to have an INP (External Input [+]) on next Comparator"/>
				</Mode>
				-->
			</ModeLogicOperator>
			<Semaphore>$IpInstance_InputPlus</Semaphore>
		</Mode>
		
		<Mode Name="InputNeg" UserName="Input [-]">
			<ModeLogicOperator Name="XOR">
				<Mode Name="INM" UserName="INM" >
					<SignalLogicalOp Name="AND">
						<Signal Name="INM"/>
					</SignalLogicalOp>
				</Mode>
				<Mode Name="INM_DAC1OUT1" UserName="DAC1 OUT1" RemoveCondition="!(DAC1:$modeexist_DAC_OUT1)">
					<SignalLogicalOp Name="AND">
						<Signal Name="VS_DAC1OUT1"/>
					</SignalLogicalOp>
					<Condition Expression="(DAC1_OUT1_Conf)" Diagnostic="Need to have an 'DAC1 Out 1' activated"/>
				</Mode>
				<Mode Name="INM_DAC1OUT2" UserName="DAC1 OUT2" RemoveCondition="!(DAC1:$modeexist_DAC_OUT2)">
					<SignalLogicalOp Name="AND">
						<Signal Name="VS_DAC1OUT2"/>
					</SignalLogicalOp>
					<Condition Expression="(DAC1_OUT2_Conf)" Diagnostic="Need to have an 'DAC1 Out 2' activated"/>
				</Mode>
				<Mode Name="INM_DAC2OUT1" UserName="DAC2 OUT1" RemoveCondition="!(DAC2:$modeexist_DAC_OUT1)">
					<SignalLogicalOp Name="AND">
						<Signal Name="VS_DAC2OUT1"/>
					</SignalLogicalOp>
					<Condition Expression="(DAC2_OUT1_Conf)" Diagnostic="Need to have an 'DAC2 Out 1' activated"/>
				</Mode>
				<Mode Name="VREFINT" UserName="Internal VRef" >
					<SignalLogicalOp Name="AND">
						<Signal Name="VS_VREFINT"/>
					</SignalLogicalOp>
				</Mode>
				<Mode Name="VREFINT_34" UserName="3/4 Internal VRef">
					<SignalLogicalOp Name="AND">
						<Signal Name="VS_VREFINT34"/>
					</SignalLogicalOp>
				</Mode>
				<Mode Name="VREFINT_12" UserName="1/2 Internal VRef">
					<SignalLogicalOp Name="AND">
						<Signal Name="VS_VREFINT12"/>
					</SignalLogicalOp>
				</Mode>
				<Mode Name="VREFINT_14" UserName="1/4 Internal VRef">
					<SignalLogicalOp Name="AND">
						<Signal Name="VS_VREFINT14"/>
					</SignalLogicalOp>
				</Mode>
			</ModeLogicOperator>
			<Condition Expression="$IpInstance_InputPlus" Diagnostic="Need to have an INP (External Input [+]) activated"/>
		</Mode>
		
		<Mode Name="ExternalOutput" UserName="External Output">
			<ModeLogicOperator Name="OR">
				<Mode Name="ExternalOutput">
					<SignalLogicalOp Name="AND">
						<Signal Name="OUT"/>
					</SignalLogicalOp>
				</Mode>
			</ModeLogicOperator>
			<Condition Expression="$IpInstance_InputPlus" Diagnostic="Need to have an INP (External Input [+]) activated"/>
		</Mode>
	</ModeLogicOperator>
	
	<!-- Signals for COMP. -->
	<RefSignal IOMode="Analog" Name="INP"/>
	<RefSignal IOMode="Analog" Name="INM"/>
	<RefSignal IOMode="AlternateFunctionPushPull" Name="OUT"/>
	
	<!-- <RefSignal Name="VS_WindowMode" Virtual="true"/> -->
	<RefSignal Name="VS_VREFINT" Virtual="true"/>
	<RefSignal Name="VS_VREFINT34" Virtual="true"/>
	<RefSignal Name="VS_VREFINT12" Virtual="true"/>
	<RefSignal Name="VS_VREFINT14" Virtual="true"/>
	<RefSignal Name="VS_DAC1OUT1" Virtual="true"/>
	<RefSignal Name="VS_DAC1OUT2" Virtual="true"/>
	<RefSignal Name="VS_DAC2OUT1" Virtual="true"/>
</IP>
