<?xml version="1.0" encoding="utf-8" standalone="no"?>
<IP DBVersion="V4.0"
    IPType="peripheral"
    Name="COMP"
    Version="comp_v1_3_d432_Cube"
    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"
    xmlns:ns0="http://www.w3.org/2001/XMLSchema-instance">
  <About>COMP: Comparator</About>
  <!-- Pinout Parameters for COMP 1/2 for Goldfish (F373/378). Already selected on Pinout TreeView -->
  <RefParameter Comment="Inverting Input"
                DefaultValue="COMP_INVERTINGINPUT_IO1"
                Group="Pinout Parameters"
                Name="InvertingInput"
                Type="list"
                Visible="false">
    <Condition Diagnostic=""
               Expression="((PA0_COMP1_INM  &amp; ($IpNumber=1)) | (PA2_COMP2_INM  &amp; ($IpNumber=2)))" />
    <PossibleValue Comment="I/O1 (PA0/PA2)"
                   Value="COMP_INVERTINGINPUT_IO1" />
  </RefParameter>
  <RefParameter Comment="Inverting Input"
                DefaultValue="COMP_INVERTINGINPUT_DAC1_CH1"
                Group="Pinout Parameters"
                Name="InvertingInput"
                Type="list"
                Visible="false">
    <Condition Diagnostic=""
               Expression="((PA4_COMP1_INM  &amp; ($IpNumber=1)) | (PA4_COMP2_INM &amp; ($IpNumber=2)))" />
    <PossibleValue Comment="DAC1_OUT1 (PA4)"
                   Value="COMP_INVERTINGINPUT_DAC1_CH1" />
  </RefParameter>
  <RefParameter Comment="Inverting Input"
                DefaultValue="COMP_INVERTINGINPUT_DAC1_CH2"
                Group="Pinout Parameters"
                Name="InvertingInput"
                Type="list"
                Visible="false">
    <Condition Diagnostic=""
               Expression="((PA5_COMP1_INM  &amp; ($IpNumber=1)) | (PA5_COMP2_INM &amp; ($IpNumber=2)))" />
    <PossibleValue Comment="DAC1_OUT2 (PA5)"
                   Value="COMP_INVERTINGINPUT_DAC1_CH2" />
  </RefParameter>
  <RefParameter Comment="Inverting Input"
                DefaultValue="COMP_INVERTINGINPUT_DAC2_CH1"
                Group="Pinout Parameters"
                Name="InvertingInput"
                Type="list"
                Visible="false">
    <Condition Diagnostic=""
               Expression="((PA6_COMP1_INM  &amp; ($IpNumber=1)) | (PA6_COMP2_INM &amp; ($IpNumber=2)))" />
    <PossibleValue Comment="DAC2_OUT1 (PA5)"
                   Value="COMP_INVERTINGINPUT_DAC2_CH1" />
  </RefParameter>
  <RefParameter Comment="Inverting Input"
                DefaultValue="COMP_INVERTINGINPUT_VREFINT"
                Group="Pinout Parameters"
                Name="InvertingInput"
                Type="list"
                Visible="false">
    <PossibleValue Comment="VREFINT"
                   Value="COMP_INVERTINGINPUT_VREFINT" />
    <PossibleValue Comment="DAC1_OUT1 (PA4)"
                   Value="COMP_INVERTINGINPUT_DAC1_CH1" />
    <PossibleValue Comment="DAC1_OUT2 (PA5)"
                   Value="COMP_INVERTINGINPUT_DAC1_CH2" />
    <PossibleValue Comment="DAC2_OUT1 (PA6)"
                   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_DAC1SWITCHCLOSED"
                Group="Pinout Parameters"
                Name="NonInvertingInput"
                Type="list"
                Visible="false">
    <Condition Diagnostic=""
               Expression="(PA1_COMP1_INP  &amp; ($IpNumber=1) &amp; (COMP1_SwitchDAC | COMP1_SwitchDAC1))" />
    <PossibleValue Comment="Switch DAC - PA1"
                   Value="COMP_NONINVERTINGINPUT_DAC1SWITCHCLOSED" />
  </RefParameter>
  <RefParameter Comment="Non Inverting Input"
                DefaultValue="COMP_NONINVERTINGINPUT_IO1"
                Group="Pinout Parameters"
                Name="NonInvertingInput"
                Type="list"
                Visible="false">
    <Condition Diagnostic=""
               Expression="((PA1_COMP1_INP  &amp; ($IpNumber=1)) | (PA3_COMP2_INP &amp; ($IpNumber=2)))" />
    <PossibleValue Comment="I/O1 (PA1/PA3)"
                   Value="COMP_NONINVERTINGINPUT_IO1" />
  </RefParameter>
  <RefParameter Comment="Non Inverting Input"
                DefaultValue="COMP_NONINVERTINGINPUT_IO1"
                Group="Pinout Parameters"
                Name="NonInvertingInput"
                Type="list"
                Visible="false">
    <PossibleValue Comment="I/O1 (PA1)"
                   Value="COMP_NONINVERTINGINPUT_IO1" />
  </RefParameter>
  <RefParameter Comment="Window Mode"
                DefaultValue="COMP_WINDOWMODE_DISABLE"
                Group="Pinout Parameters"
                Name="WindowMode"
                Type="list"
                Visible="false">
    <Condition Diagnostic=""
               Expression="($IpNumber=1)&amp;! Semaphore_COMP2_WindowmodeEN" />
    <PossibleValue Comment="Disabled"
                   Value="COMP_WINDOWMODE_DISABLE" />
    <PossibleValue Comment="Enabled"
                   Value="COMP_WINDOWMODE_ENABLE" />
  </RefParameter>
  <RefParameter Comment="Window Mode"
                DefaultValue="COMP_WINDOWMODE_ENABLE"
                Group="Pinout Parameters"
                Name="WindowMode"
                Type="list"
                Visible="false">
    <Condition Diagnostic=""
               Expression="($IpNumber=1)&amp; Semaphore_COMP2_WindowmodeEN" />
    <PossibleValue Comment="Disabled"
                   Value="COMP_WINDOWMODE_DISABLE" />
    <PossibleValue Comment="Enabled"
                   Value="COMP_WINDOWMODE_ENABLE" />
  </RefParameter>
  <RefParameter Comment="Window Mode"
                DefaultValue="COMP_WINDOWMODE_DISABLE"
                Group="Pinout Parameters"
                Name="WindowMode"
                Type="list"
                Visible="false">
    <Condition Diagnostic=""
               Expression="($IpNumber=2)" />
    <PossibleValue Comment="Disabled"
                   Value="COMP_WINDOWMODE_DISABLE" />
    <PossibleValue Comment="Enabled"
                   Semaphore="Semaphore_COMP2_WindowmodeEN"
                   Value="COMP_WINDOWMODE_ENABLE" />
  </RefParameter>
  <!-- Basic Parameters -->
  <RefParameter Comment="Speed / Power Mode"
                DefaultValue="COMP_MODE_HIGHSPEED"
                Group="Basic Parameters"
                Name="Mode"
                Type="list">
    <PossibleValue Comment="High Speed / Full Power"
                   Value="COMP_MODE_HIGHSPEED" />
    <PossibleValue Comment="Medium Speed / Medium Power"
                   Value="COMP_MODE_MEDIUMSPEED" />
    <PossibleValue Comment="Low Speed / Low Power"
                   Value="COMP_MODE_LOWPOWER" />
    <PossibleValue Comment="Very-Low Speed / Ultra-Low Power"
                   Value="COMP_MODE_ULTRALOWPOWER" />
  </RefParameter>
  <RefParameter Comment="Interrupt Trigger Mode"
                DefaultValue="COMP_TRIGGERMODE_NONE"
                Group="Basic Parameters"
                Name="TriggerMode"
                Type="list">
    <PossibleValue Comment="None"
                   Value="COMP_TRIGGERMODE_NONE" />
    <PossibleValue Comment="Rising Edge"
                   Semaphore="$IpInstance_EXTI_IT_ENABLED"
                   Value="COMP_TRIGGERMODE_IT_RISING" />
    <PossibleValue Comment="Falling Edge"
                   Semaphore="$IpInstance_EXTI_IT_ENABLED"
                   Value="COMP_TRIGGERMODE_IT_FALLING" />
    <PossibleValue Comment="Rising/Falling Edge"
                   Semaphore="$IpInstance_EXTI_IT_ENABLED"
                   Value="COMP_TRIGGERMODE_IT_RISING_FALLING" />
  </RefParameter>
  <!-- Hysteresis Level -->
  <RefParameter Comment="Hysteresis Level"
                DefaultValue="COMP_HYSTERESIS_NONE"
                Group="Basic Parameters"
                Name="Hysteresis"
                Type="list">
    <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>
  <!-- Output Parameters -->
  <RefParameter Comment="Output Polarity"
                DefaultValue="COMP_OUTPUTPOL_NONINVERTED"
                Group="Output Parameters"
                Name="OutputPol"
                Type="list">
    <PossibleValue Comment="Not Inverted"
                   Value="COMP_OUTPUTPOL_NONINVERTED" />
    <PossibleValue Comment="Inverted"
                   Value="COMP_OUTPUTPOL_INVERTED" />
  </RefParameter>
  <!-- Internal Output Selection. -->
  <RefParameter Comment="Output Internal Selection"
                DefaultValue="COMP_OUTPUT_NONE"
                Group="Output Parameters"
                Name="Output"
                Type="list">
    <Condition Diagnostic=""
               Expression="($IpNumber=1)" />
    <PossibleValue Comment="None"
                   Value="COMP_OUTPUT_NONE" />
    <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_COMP1_TIM3IC1" />
    <PossibleValue Comment="Timer 3 Output Compare Reference Clear"
                   Value="COMP_OUTPUT_COMP1_TIM3OCREFCLR" />
    <PossibleValue Comment="Timer 5 Input Capture 4"
                   Value="COMP_OUTPUT_TIM5IC4" />
    <PossibleValue Comment="Timer 5 Output Compare Reference Clear"
                   Value="COMP_OUTPUT_TIM5OCREFCLR" />
    <PossibleValue Comment="Timer 15 Break Input (BKIN)"
                   Value="COMP_OUTPUT_TIM15BKIN" />
  </RefParameter>
  <RefParameter Comment="Output Internal Selection"
                DefaultValue="COMP_OUTPUT_NONE"
                Group="Output Parameters"
                Name="Output"
                Type="list">
    <Condition Diagnostic=""
               Expression="($IpNumber=2)" />
    <PossibleValue Comment="None"
                   Value="COMP_OUTPUT_NONE" />
    <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_COMP2_TIM3IC1" />
    <PossibleValue Comment="Timer 3 Output Compare Reference Clear"
                   Value="COMP_OUTPUT_COMP2_TIM3OCREFCLR" />
    <PossibleValue Comment="Timer 4 Input Capture 1"
                   Value="COMP_OUTPUT_TIM4IC1" />
    <PossibleValue Comment="Timer 4 Output Compare Reference Clear"
                   Value="COMP_OUTPUT_TIM4OCREFCLR" />
    <PossibleValue Comment="Timer 16 Break Input (BKIN)"
                   Value="COMP_OUTPUT_TIM16BKIN" />
  </RefParameter>
  <RefParameter Comment="Output Internal Selection"
                DefaultValue="COMP_OUTPUT_NONE"
                Group="Output Parameters"
                Name="Output"
                Type="list"
                Visible="false">
    <PossibleValue Comment="None"
                   Value="COMP_OUTPUT_NONE" />
  </RefParameter>
  <!-- InputPlus is the default Mode -->
  <RefMode Abstract="true"
           Name="InputPlus_BaseMode">
    <ConfigForMode>Comp_Init</ConfigForMode>
    <Parameter Name="Mode" />
    <Parameter Name="TriggerMode" />
    <Parameter Name="Hysteresis" />
    <Parameter Name="OutputPol" />
    <Parameter Name="Output" />
  </RefMode>
  <!-- 'Non-Inverting Input' RefModes list -->
  <RefMode BaseMode="InputPlus_BaseMode"
           Name="INP">
    <Parameter Name="NonInvertingInput" />
  </RefMode>
  <!-- 'Switch with DAC' RefMode-->
  <RefMode BaseMode="InputPlus_BaseMode"
           Name="Switch_DAC">
    <Parameter Name="NonInvertingInput" />
  </RefMode>
  <RefMode BaseMode="InputPlus_BaseMode"
           Name="Switch_DAC1">
    <Parameter Name="NonInvertingInput" />
  </RefMode>
  <!-- 'Window Mode' RefMode-->
  <RefMode BaseMode="InputPlus_BaseMode"
           Name="WindowMode">
    <Parameter Name="WindowMode">
      <PossibleValue>COMP_WINDOWMODE_ENABLE</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_DACOUT1">
    <Parameter Name="InvertingInput">
      <PossibleValue>COMP_INVERTINGINPUT_DAC1_CH1</PossibleValue>
    </Parameter>
  </RefMode>
  <RefMode Name="INM_DACOUT2">
    <Parameter Name="InvertingInput">
      <PossibleValue>COMP_INVERTINGINPUT_DAC1_CH2</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 Goldfish (F373/378) -->
  <ModeLogicOperator Name="OR">
    <Mode Name="InputPlus"
          UserName="Input [+]">
      <ModeLogicOperator Name="XOR">
        <Mode Name="INP"
              ShrinkName="Input [+] : INP"
              UserName="INP">
          <SignalLogicalOp Name="AND">
            <Signal Name="INP" />
          </SignalLogicalOp>
          <Semaphore>$IpInstance_ExternalInputPlus</Semaphore>
        </Mode>
        <!-- Used if only one DAC -->
        <Mode Name="Switch_DAC"
              RemoveCondition="!(($IpNumber=1) &amp; (DAC:$modeexist_DAC_OUT1))"
              UserName="Switch with DAC_OUT1">
          <SignalLogicalOp Name="AND">
            <Signal Name="INP" />
            <Signal Name="VS_Switch" />
          </SignalLogicalOp>
          <Semaphore>$IpInstance_SwitchDAC</Semaphore>
          <Condition Diagnostic="Need to have &#39;DAC Out 1&#39; activated"
                     Expression="(DAC_OUT1_Conf)" />
        </Mode>
        <!-- Used if we have two DACs -->
        <Mode Name="Switch_DAC1"
              RemoveCondition="!(($IpNumber=1) &amp; (DAC1:$modeexist_DAC_OUT1))"
              UserName="Switch with DAC1_OUT1">
          <SignalLogicalOp Name="AND">
            <Signal Name="INP" />
            <Signal Name="VS_Switch" />
          </SignalLogicalOp>
          <Semaphore>$IpInstance_SwitchDAC1</Semaphore>
          <Condition Diagnostic="Need to have &#39;DAC1 Out 1&#39; activated"
                     Expression="(DAC1_OUT1_Conf)" />
        </Mode>
        <Mode Name="WindowMode"
              RemoveCondition="($IpNumber=1)"
              UserName="Window Mode">
          <SignalLogicalOp Name="AND">
            <Signal Name="VS_WindowMode" />
          </SignalLogicalOp>
          <Condition Diagnostic="Need to have an INP (External Input [+]) on previous Comparator"
                     Expression="(($IpNumber=2) &amp; COMP1_ExternalInputPlus)" />
        </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>
        <!-- Used if only one DAC -->
        <Mode Name="INM_DACOUT1"
              RemoveCondition="!(DAC:$modeexist_DAC_OUT1)"
              UserName="DAC OUT1">
          <SignalLogicalOp Name="AND">
            <Signal Name="VS_DAC1OUT1" />
          </SignalLogicalOp>
          <Condition Diagnostic="Need to have an &#39;DAC Out 1&#39; activated"
                     Expression="(DAC_OUT1_Conf)" />
        </Mode>
        <Mode Name="INM_DACOUT2"
              RemoveCondition="!(DAC:$modeexist_Enable_DAC_OUT2)"
              UserName="DAC OUT2">
          <SignalLogicalOp Name="AND">
            <Signal Name="VS_DAC1OUT2" />
          </SignalLogicalOp>
          <Condition Diagnostic="Need to have an &#39;DAC Out 2&#39; activated"
                     Expression="(DAC_OUT2_Conf)" />
        </Mode>
        <!-- Used if we have two DACs -->
        <Mode Name="INM_DAC1OUT1"
              RemoveCondition="!(DAC1:$modeexist_DAC_OUT1)"
              UserName="DAC1 OUT1">
          <SignalLogicalOp Name="AND">
            <Signal Name="VS_DAC1OUT1" />
          </SignalLogicalOp>
          <Condition Diagnostic="Need to have an &#39;DAC1 Out 1&#39; activated"
                     Expression="(DAC1_OUT1_Conf)" />
        </Mode>
        <Mode Name="INM_DAC1OUT2"
              RemoveCondition="!(DAC1:$modeexist_Enable_DAC_OUT2)"
              UserName="DAC1 OUT2">
          <SignalLogicalOp Name="AND">
            <Signal Name="VS_DAC1OUT2" />
          </SignalLogicalOp>
          <Condition Diagnostic="Need to have an &#39;DAC1 Out 2&#39; activated"
                     Expression="(DAC1_OUT2_Conf)" />
        </Mode>
        <Mode Name="INM_DAC2OUT1"
              RemoveCondition="!(DAC2:$modeexist_DAC_OUT1)"
              UserName="DAC2 OUT1">
          <SignalLogicalOp Name="AND">
            <Signal Name="VS_DAC2OUT1" />
          </SignalLogicalOp>
          <Condition Diagnostic="Need to have an &#39;DAC2 Out 1&#39; activated"
                     Expression="(DAC2_OUT1_Conf)" />
        </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 Diagnostic="Need to have an INP (External Input [+]) activated"
                 Expression="$IpInstance_InputPlus" />
    </Mode>
    <Mode Name="ExternalOutput"
          UserName="External Output">
      <ModeLogicOperator Name="OR">
        <Mode Name="ExternalOutput">
          <SignalLogicalOp Name="AND">
            <Signal Name="OUT" />
          </SignalLogicalOp>
        </Mode>
      </ModeLogicOperator>
      <Condition Diagnostic="Need to have an INP (External Input [+]) activated"
                 Expression="$IpInstance_InputPlus" />
    </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_Switch"
             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" />
  <!-- Semaphore for COMP -->
  <Semaphore>$IpInstance</Semaphore>
</IP>
