|  |  |  | @ -3,16 +3,17 @@ | 
		
	
		
			
				|  |  |  |  | #include "Protocol/CAN.h" | 
		
	
		
			
				|  |  |  |  | #include "Protocol/CAN_data.h" | 
		
	
		
			
				|  |  |  |  | #include "Protocol/DigitalIO.h" | 
		
	
		
			
				|  |  |  |  | #include "Protocol/MemoryMap.h" | 
		
	
		
			
				|  |  |  |  | #include "Periphery.h" | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | Periphery::Periphery():  | 
		
	
		
			
				|  |  |  |  |     _canb(canSpace::CANB), | 
		
	
		
			
				|  |  |  |  | Periphery::Periphery() :  | 
		
	
		
			
				|  |  |  |  |     _canb(canSpace::CANA), | 
		
	
		
			
				|  |  |  |  |     _digitalIO(), | 
		
	
		
			
				|  |  |  |  |     _zone0_ptr(reinterpret_cast<Uint16*>(0x4000)), | 
		
	
		
			
				|  |  |  |  |     _zone6_ptr(reinterpret_cast<Uint16*>(0x100000)), | 
		
	
		
			
				|  |  |  |  |     _modbusSettingsMsg(), | 
		
	
		
			
				|  |  |  |  |     _modbusInit(false) | 
		
	
		
			
				|  |  |  |  | { | 
		
	
		
			
				|  |  |  |  |     _softVersion.DSP = 101; | 
		
	
		
			
				|  |  |  |  |     _softVersion.DSP = 202; | 
		
	
		
			
				|  |  |  |  |     _softVersion.CPLD = 0; | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
	
		
			
				
					|  |  |  | @ -43,43 +44,39 @@ void Periphery::config(){ | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     //---------------------------------------Init DIO interface----------------------------------------------------------
 | 
		
	
		
			
				|  |  |  |  |     _digitalIO.setup(_zone0_ptr); | 
		
	
		
			
				|  |  |  |  |     _digitalIO.setMemoryOffset(1); | 
		
	
		
			
				|  |  |  |  |     _digitalIO.setup(_zone6_ptr); | 
		
	
		
			
				|  |  |  |  |     _digitalIO.setMemoryOffset(interface::DISCRETE_DATA_OFFSET); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | Uint16 Periphery::getVersionFPGA(){ | 
		
	
		
			
				|  |  |  |  |     Uint16 data; | 
		
	
		
			
				|  |  |  |  |     data = *_zone0_ptr; | 
		
	
		
			
				|  |  |  |  |     data = *_zone6_ptr + interface::SOFT_VERSION_OFFSET; | 
		
	
		
			
				|  |  |  |  |     return data; | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | void Periphery::updateVersionFPGA(){ | 
		
	
		
			
				|  |  |  |  |     _softVersion.CPLD = getVersionFPGA() & 0x3FF;   // no more than 1023 (9.9.9) should be limit
 | 
		
	
		
			
				|  |  |  |  |     canSpace::CANMessage data; | 
		
	
		
			
				|  |  |  |  |     data.mdl.word.LOW_WORD = _softVersion.DSP; | 
		
	
		
			
				|  |  |  |  |     data.mdl.word.HI_WORD = _softVersion.CPLD; | 
		
	
		
			
				|  |  |  |  |     _canb.updateTXMessage(canSpace::COMM_VERSION_MBOX, data); | 
		
	
		
			
				|  |  |  |  |     _message.mdl.word.LOW_WORD = _softVersion.DSP; | 
		
	
		
			
				|  |  |  |  |     _message.mdl.word.HI_WORD = _softVersion.CPLD; | 
		
	
		
			
				|  |  |  |  |     _canb.updateTXMessage(canSpace::COMM_VERSION_MBOX, _message); | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | void Periphery::processDigitalInput(){ | 
		
	
		
			
				|  |  |  |  |     Uint16 data = 0; | 
		
	
		
			
				|  |  |  |  |     // _digitalIO.readDigitalIO(data);
 | 
		
	
		
			
				|  |  |  |  |     data = 0x1234; | 
		
	
		
			
				|  |  |  |  |     _canb.transmitMsg(canSpace::DIGITAL_INPUT_MBOX, (data & 0x3FF)); // TODO check! может быть лишнее затирание битов?
 | 
		
	
		
			
				|  |  |  |  |     _digitalIO.readDigitalIO(data); | 
		
	
		
			
				|  |  |  |  |     _canb.transmitMsg(canSpace::DIGITAL_INPUT_MBOX, (data)); | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | void Periphery::processDigitalOutput(){ | 
		
	
		
			
				|  |  |  |  |     if(_canb.isNewMessage(canSpace::DIGITAL_OUTPUT_MBOX)){ | 
		
	
		
			
				|  |  |  |  |         canSpace::CANMessage data; | 
		
	
		
			
				|  |  |  |  |         _canb.receiveMsg(canSpace::DIGITAL_OUTPUT_MBOX, data); | 
		
	
		
			
				|  |  |  |  |         Uint16 temp; | 
		
	
		
			
				|  |  |  |  |         temp = data.mdl.all; | 
		
	
		
			
				|  |  |  |  |         // _digitalIO.writeDigitalIO(temp);
 | 
		
	
		
			
				|  |  |  |  |         _canb.receiveMsg(canSpace::DIGITAL_OUTPUT_MBOX, _message); | 
		
	
		
			
				|  |  |  |  |         Uint16 data = _message.mdl.word.LOW_WORD; | 
		
	
		
			
				|  |  |  |  |         _digitalIO.writeDigitalIO(data); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
	
		
			
				
					|  |  |  | @ -87,6 +84,6 @@ void Periphery::processDigitalOutput(){ | 
		
	
		
			
				|  |  |  |  | void Periphery::initExternalModbus(){ | 
		
	
		
			
				|  |  |  |  |     if (!_modbusInit && (_canb.isNewMessage(canSpace::MODBUS_SETTINGS_MBOX))) { | 
		
	
		
			
				|  |  |  |  |         _canb.receiveMsg(canSpace::MODBUS_SETTINGS_MBOX, _modbusSettingsMsg); | 
		
	
		
			
				|  |  |  |  |         _modbusInit = true; | 
		
	
		
			
				|  |  |  |  |         _modbusInit = true; // TODO modbus init function must be here
 | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  | } | 
		
	
	
		
			
				
					|  |  |  | 
 |