<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE featureDefinitions SYSTEM "../featureDefinitions.dtd" >
<featureDefinitions name="SPI" iconName="SPI" helpIndex="">
	<userControlGroup name="none" caption="none">
		<userControlSubGroup name="none" caption="none">
			<userControl name="applyButton">
				<dialogConfig type="applyButton" caption="none"></dialogConfig>
				<userAction name="apply">
					<claimResource type="register" registerField="OWN_SPI%instance%" value="0"></claimResource>
					<claimResource type="pin" pin="SDI%instance%" polarity="Inp"></claimResource>
				</userAction>
			</userControl>
		</userControlSubGroup>
	</userControlGroup>
	<userControlGroup name="communicationSettings" caption="Communication Settings">
		<userControlSubGroup name="none" caption="none">
			<userControl name="enable">
				<dialogConfig type="CK" caption="Enable on Startup"></dialogConfig>
				<userAction name="enable">
					<claimResource type="register" instance="%instance%" registerField="SPIEN" value="1"></claimResource>
				</userAction>
				<userAction name="disable">
					<claimResource type="register" instance="%instance%" registerField="SPIEN" value="0"></claimResource>
				</userAction>
			</userControl>
			<userControl name="enableSDOx">
				<dialogConfig type="CK" caption="Enable Data Out on SDO pin"></dialogConfig>
				<userAction name="disable">
					<claimResource type="register" instance="%instance%" registerField="DISSDO" value="1"></claimResource>
				</userAction>
				<userAction name="enable">
					<claimResource type="register" instance="%instance%" registerField="DISSDO" value="0"></claimResource>
					<claimResource type="pin" pin="SDO%instance%" polarity="Out"></claimResource>
				</userAction>
			</userControl>
			
			<userControl name="interruptEnable" enableForInt="SPI%instance%">
				<dialogConfig type="CK" caption="Enable Interrupt on Startup"></dialogConfig>
				<userAction name="enable">
					<claimResource type="register" registerField="SPI%instance%IE" value="1"></claimResource>
				</userAction>
				<userAction name="disable">
					<claimResource type="register" registerField="SPI%instance%IE" value="0"></claimResource>
				</userAction>
			</userControl>

			<userControl name="interruptPriority" priorityForInt="SPI%instance%">
				<dialogConfig type="CB" range="7" caption="Interrupt Priority">
					<selection name="rxPriorityLevelTo%index%" value="%index%"></selection>
				</dialogConfig>
				<userAction>

					<!-- 	method to compute txPriority in bit mode should reference -->
					<!-- 	register info table read from XML -->

					<claimResource type="register" registerField="SPI%instance%IP" method="rxPriorityLevel3Bit"></claimResource>
				</userAction>
			</userControl>
			
			<userControl name="faultInterruptEnable" enableForInt="SPI%instance%E">
				<dialogConfig type="CK" caption="Enable Fault Interrupt on Startup"></dialogConfig>
				<userAction name="enable">
					<claimResource type="register" registerField="SPI%instance%EIE" value="1"></claimResource>
				</userAction>
				<userAction name="disable">
					<claimResource type="register" registerField="SPI%instance%EIE" value="0"></claimResource>
				</userAction>
			</userControl>

			<userControl name="faultInterruptPriority" priorityForInt="SPI%instance%E">
				<dialogConfig type="CB" range="7" caption="Fault Priority">
					<selection name="rxPriorityLevelTo%index%" value="%index%"></selection>
				</dialogConfig>
				<userAction>

					<!-- 	method to compute txPriority in bit mode should reference -->
					<!-- 	register info table read from XML -->

					<claimResource type="register" registerField="SPI%instance%EIP" method="rxPriorityLevel3Bit"></claimResource>
				</userAction>
			</userControl>
						
			
			<userControl name="idleClockState">
				<dialogConfig type="CB" caption="Idle Clock Polarity">
					<selection name="low" value="IDLE state is low"></selection>
					<selection name="high" value="IDLE state is high"></selection>
				</dialogConfig>
				<userAction name="high">
					<claimResource type="register" instance="%instance%" registerField="CKP" value="1"></claimResource>
				</userAction>
				<userAction name="low">
					<claimResource type="register" instance="%instance%" registerField="CKP" value="0"></claimResource>
				</userAction>
			</userControl>
			<userControl name="transmitClockEdge">
				<dialogConfig type="CB" caption="Transmit Clock Edge">
					<selection name="low" value="Idle clock to Active"></selection>
					<selection name="high" value="Active clock to Idle"></selection>
				</dialogConfig>
				<userAction name="high">
					<claimResource type="register" instance="%instance%" registerField="CKE" value="1"></claimResource>
				</userAction>
				<userAction name="low">
					<claimResource type="register" instance="%instance%" registerField="CKE" value="0"></claimResource>
				</userAction>
			</userControl>
			<userControl name="SPIMode">
				<dialogConfig type="CB" caption="SPI Mode">
					<selection name="MasterFrmSyncDis" value="Master/FrameSyncDisabled"></selection>
					<selection name="SlaveFrmSyncDis" value="Slave/FrameSyncDisabled/SlaveSelectDisabled"></selection>
					<selection name="SlaveFrmSyncDisSlaveSelEnb" value="Slave/FrameSyncDisabled/SlaveSelectEnabled"></selection>
					<selection name="MasterFrmSyncEnbFrameMasterMode" value="Master/FrameSyncEnabled/FrameMasterMode"></selection>
					<selection name="MasterFrmSyncEnbFrameSlaveMode" value="Master/FrameSyncEnabled/FrameSlaveMode"></selection>
					<selection name="SlaveFrmSyncEnbFrameMasterMode" value="Slave/FrameSyncEnabled/FrameMasterMode"></selection>
					<selection name="SlaveFrmSyncEnbFrameSlaveMode" value="Slave/FrameSyncEnabled/FrameSlaveMode"></selection>
				</dialogConfig>

				<userAction name="SlaveFrmSyncEnbFrameSlaveMode">
					<claimResource type="register" instance="%instance%" registerField="SSEN" value="0"></claimResource>
					<claimResource type="register" instance="%instance%" registerField="MSTEN" value="0"></claimResource>
					<claimResource type="register" instance="%instance%" registerField="FRMEN" value="1"></claimResource>					
					<claimResource type="register" instance="%instance%" registerField="SPIFSD" value="1"></claimResource>					
					<claimResource type="pin" pin="SS%instance%-L" polarity="Inp"></claimResource>
				</userAction>				
				<userAction name="SlaveFrmSyncEnbFrameMasterMode">
					<claimResource type="register" instance="%instance%" registerField="SSEN" value="0"></claimResource>
					<claimResource type="register" instance="%instance%" registerField="MSTEN" value="0"></claimResource>
					<claimResource type="register" instance="%instance%" registerField="FRMEN" value="1"></claimResource>
					<claimResource type="register" instance="%instance%" registerField="SPIFSD" value="0"></claimResource>					
					<claimResource type="pin" pin="SS%instance%-L" polarity="Out"></claimResource>
				</userAction>				
				<userAction name="MasterFrmSyncEnbFrameSlaveMode">
					<claimResource type="register" instance="%instance%" registerField="SSEN" value="0"></claimResource>
					<claimResource type="register" instance="%instance%" registerField="MSTEN" value="1"></claimResource>
					<claimResource type="register" instance="%instance%" registerField="FRMEN" value="1"></claimResource>
					<claimResource type="register" instance="%instance%" registerField="SPIFSD" value="1"></claimResource>					
					<claimResource type="pin" pin="SS%instance%-L" polarity="Inp"></claimResource>
				</userAction>				
				<userAction name="MasterFrmSyncEnbFrameMasterMode">
					<claimResource type="register" instance="%instance%" registerField="SSEN" value="0"></claimResource>
					<claimResource type="register" instance="%instance%" registerField="MSTEN" value="1"></claimResource>
					<claimResource type="register" instance="%instance%" registerField="FRMEN" value="1"></claimResource>
					<claimResource type="register" instance="%instance%" registerField="SPIFSD" value="0"></claimResource>					
					<claimResource type="pin" pin="SS%instance%-L" polarity="Out"></claimResource>
				</userAction>	
				<userAction name="SlaveFrmSyncDisSlaveSelEnb">
					<claimResource type="register" instance="%instance%" registerField="SSEN" value="1"></claimResource>
					<claimResource type="register" instance="%instance%" registerField="MSTEN" value="0"></claimResource>
					<claimResource type="register" instance="%instance%" registerField="FRMEN" value="0"></claimResource>
					<claimResource type="register" instance="%instance%" registerField="SPIFSD" value="1"></claimResource>					
					<claimResource type="pin" pin="SS%instance%-L" polarity="Inp"></claimResource>
				</userAction>					
				<userAction name="SlaveFrmSyncDis">
					<claimResource type="register" instance="%instance%" registerField="SSEN" value="0"></claimResource>
					<claimResource type="register" instance="%instance%" registerField="MSTEN" value="0"></claimResource>
					<claimResource type="register" instance="%instance%" registerField="FRMEN" value="0"></claimResource>
					<claimResource type="register" instance="%instance%" registerField="SPIFSD" value="1"></claimResource>
					
				</userAction>				
				<userAction name="MasterFrmSyncDis">
					<claimResource type="register" instance="%instance%" registerField="SSEN" value="0"></claimResource>
					<claimResource type="register" instance="%instance%" registerField="MSTEN" value="1"></claimResource>
					<claimResource type="register" instance="%instance%" registerField="FRMEN" value="0"></claimResource>
					<claimResource type="register" instance="%instance%" registerField="SPIFSD" value="0"></claimResource>					
					<claimResource type="pin" pin="SS%instance%-L" polarity="Out"></claimResource>
				</userAction>
			</userControl>
			
			<!-- 
			    This user control is to designed to implement the option specific use of SCK pin.
			    The SCK pin can be configured in 3 ways.
			       1. Input in Slavemode
			       2. Output in Mastermode
			       3. And unclaimed when InternalSPIclock is disabled.
			       
			    So, the claim for this pin need to be handled based on the user input in two of the
			    <userControl>s which is a special situation.			    
			-->
			<userControl name="SCKusage">
				<dialogConfig type="CB" caption="SCK Usage">
					<selection name="SCKUnclaimed" value="SCK Unclaimed"></selection>
					<selection name="SCKInput" value="SCK Inputmode"></selection>
					<selection name="SCKOutput" value="SCK Outputmode"></selection>
				</dialogConfig>
				<userAction name="SCKOutput">
					<claimResource type="pin" pin="SCK%instance%" polarity="Out"></claimResource>
				</userAction>
				<userAction name="SCKInput">
					<claimResource type="pin" pin="SCK%instance%" polarity="Inp"></claimResource>
				</userAction>			
				<userAction name="SCKUnclaimed">
					<!-- Don't claim SCK -->
				</userAction>
			</userControl>
			
			
			<userControl name="operateDuringIdle">
				<dialogConfig type="CB" caption="CPU Idle Operation">
					<selection name="continueOnIdle" value="Continue"></selection>
					<selection name="stopOnIdle" value="Stop"></selection>
				</dialogConfig>
				<userAction name="stopOnIdle">
					<claimResource type="register" instance="%instance%" registerField="SPISIDL" value="1"></claimResource>
				</userAction>
				<userAction name="continueOnIdle">
					<claimResource type="register" instance="%instance%" registerField="SPISIDL" value="0"></claimResource>
				</userAction>
			</userControl>
			<userControl name="dataFormat">
				<dialogConfig type="CB" caption="Data Format">
					<selection name="byteWide" value="Data is byte wide (8bit)"></selection>
					<selection name="wordWide" value="Data is word wide (16bit)"></selection>
				</dialogConfig>
				<userAction name="wordWide">
					<claimResource type="register" instance="%instance%" registerField="MODE16" value="1"></claimResource>
				</userAction>
				<userAction name="byteWide">
					<claimResource type="register" instance="%instance%" registerField="MODE16" value="0"></claimResource>
				</userAction>
			</userControl>
			<userControl name="FrameSyncPulsePolarity">
				<dialogConfig type="CB" caption="Frame Sync Pulse Polarity">
					<selection name="activeLow" value="Active Low"></selection>
					<selection name="activeHigh" value="Active High"></selection>					
				</dialogConfig>
				<userAction name="activeHigh">
					<claimResource type="register" instance="%instance%" registerField="FRMPOL" value="1"></claimResource>
				</userAction>
				<userAction name="activeLow">
					<claimResource type="register" instance="%instance%" registerField="FRMPOL" value="0"></claimResource>
				</userAction>
			</userControl>
			<userControl name="FrameSyncPulseEdge">
				<dialogConfig type="CB" caption="Frame Sync Pulse Edge Select">					
					<selection name="precedes" value="Precedes first bit clock"></selection>
					<selection name="coincides" value="Coincides with first bit clock"></selection>
				</dialogConfig>
				<userAction name="coincides">
					<claimResource type="register" instance="%instance%" registerField="FRMDLY" value="1"></claimResource>
				</userAction>
				<userAction name="precedes">
					<claimResource type="register" instance="%instance%" registerField="FRMDLY" value="0"></claimResource>
				</userAction>
			</userControl>
		</userControlSubGroup>
		<userControlSubGroup name="masterSettings" caption="Master Settings">
			<userControl name="dataInputPhase">
				<dialogConfig type="CB" caption="Data Input Sample Instant">
					<selection name="middle" value="Middle of data output time"></selection>
					<selection name="end" value="End of data output time"></selection>
				</dialogConfig>
				<userAction name="end">
					<claimResource type="register" instance="%instance%" registerField="SMP" value="1"></claimResource>
				</userAction>
				<userAction name="middle">
					<claimResource type="register" instance="%instance%" registerField="SMP" value="0"></claimResource>
				</userAction>
			</userControl>
			<userControl type="readOnly" name="baudRate">
				<dialogConfig type="general" caption="Baud Rate"></dialogConfig>
				<userAction></userAction>
			</userControl>
			<userControl name="prescaleA">
				<dialogConfig type="CB" caption="Primary Prescaler">
					<selection name="setTo64" value="64:1"></selection>
					<selection name="setTo16" value="16:1"></selection>
					<selection name="setTo4" value="4:1"></selection>
					<selection name="setTo1" value="1:1"></selection>
				</dialogConfig>
				<userAction name="setTo1">
					<claimResource type="register" instance="%instance%" registerField="PPRE" value="11"></claimResource>
				</userAction>
				<userAction name="setTo4">
					<claimResource type="register" instance="%instance%" registerField="PPRE" value="10"></claimResource>
				</userAction>
				<userAction name="setTo16">
					<claimResource type="register" instance="%instance%" registerField="PPRE" value="01"></claimResource>
				</userAction>
				<userAction name="setTo64">
					<claimResource type="register" instance="%instance%" registerField="PPRE" value="00"></claimResource>
				</userAction>
			</userControl>
			<userControl name="prescaleB">
				<dialogConfig type="CB" caption="Secondary Prescaler">			
					<selection name="setTo8" value="8:1"></selection>
					<selection name="setTo7" value="7:1"></selection>
					<selection name="setTo6" value="6:1"></selection>
					<selection name="setTo5" value="5:1"></selection>
					<selection name="setTo4" value="4:1"></selection>					
					<selection name="setTo3" value="3:1"></selection>
					<selection name="setTo2" value="2:1"></selection>
					<selection name="setTo1" value="1:1"></selection>
				</dialogConfig>
				<userAction name="setTo1">
					<claimResource type="register" instance="%instance%" registerField="SPRE" value="111"></claimResource>
				</userAction>
				<userAction name="setTo2">
					<claimResource type="register" instance="%instance%" registerField="SPRE" value="110"></claimResource>
				</userAction>				
				<userAction name="setTo3">
					<claimResource type="register" instance="%instance%" registerField="SPRE" value="101"></claimResource>
				</userAction>				
				<userAction name="setTo4">
					<claimResource type="register" instance="%instance%" registerField="SPRE" value="100"></claimResource>
				</userAction>
				<userAction name="setTo5">
					<claimResource type="register" instance="%instance%" registerField="SPRE" value="011"></claimResource>
				</userAction>
				<userAction name="setTo6">
					<claimResource type="register" instance="%instance%" registerField="SPRE" value="010"></claimResource>
				</userAction>				
				<userAction name="setTo7">
					<claimResource type="register" instance="%instance%" registerField="SPRE" value="001"></claimResource>
				</userAction>					
				<userAction name="setTo8">
					<claimResource type="register" instance="%instance%" registerField="SPRE" value="000"></claimResource>
				</userAction>
			</userControl>
			<userControl name="enableInternalSPIclock">
				<dialogConfig type="CK" caption="Enable Internal SPI Clock">
				</dialogConfig>
				<userAction name="enable">
					<claimResource type="register" instance="%instance%" registerField="DISSCK" value="0"></claimResource>
				</userAction>
				<userAction name="disable">
					<claimResource type="register" instance="%instance%" registerField="DISSCK" value="1"></claimResource>
				</userAction>
			</userControl>
		</userControlSubGroup>
	</userControlGroup>
</featureDefinitions>
