diff --git a/F28335/DSP2833x_Xintf.c b/F28335/DSP2833x_Xintf.c index 3a8bb03..567641d 100644 --- a/F28335/DSP2833x_Xintf.c +++ b/F28335/DSP2833x_Xintf.c @@ -80,14 +80,14 @@ InitXintf(void) // XintfRegs.XTIMING0.bit.XWRLEAD = 3; XintfRegs.XTIMING0.bit.XWRACTIVE = 5; - XintfRegs.XTIMING0.bit.XWRTRAIL = 3; + XintfRegs.XTIMING0.bit.XWRTRAIL = 1; // // Zone read timing // XintfRegs.XTIMING0.bit.XRDLEAD = 3; XintfRegs.XTIMING0.bit.XRDACTIVE = 5; - XintfRegs.XTIMING0.bit.XRDTRAIL = 3; + XintfRegs.XTIMING0.bit.XRDTRAIL = 1; // // double all Zone read/write lead/active/trail timing @@ -97,8 +97,8 @@ InitXintf(void) // // Zone will sample XREADY signal // - XintfRegs.XTIMING0.bit.USEREADY = 0; - XintfRegs.XTIMING0.bit.READYMODE = 0; // sample asynchronous + XintfRegs.XTIMING0.bit.USEREADY = 1; + XintfRegs.XTIMING0.bit.READYMODE = 1; // sample asynchronous // // Size must be either: @@ -114,15 +114,15 @@ InitXintf(void) // Zone write timing // XintfRegs.XTIMING6.bit.XWRLEAD = 3; - XintfRegs.XTIMING6.bit.XWRACTIVE = 7; - XintfRegs.XTIMING6.bit.XWRTRAIL = 3; + XintfRegs.XTIMING6.bit.XWRACTIVE = 5; + XintfRegs.XTIMING6.bit.XWRTRAIL = 1; // // Zone read timing // XintfRegs.XTIMING6.bit.XRDLEAD = 3; - XintfRegs.XTIMING6.bit.XRDACTIVE = 7; - XintfRegs.XTIMING6.bit.XRDTRAIL = 3; + XintfRegs.XTIMING6.bit.XRDACTIVE = 5; + XintfRegs.XTIMING6.bit.XRDTRAIL = 1; // // double all Zone read/write lead/active/trail timing @@ -132,8 +132,8 @@ InitXintf(void) // // Zone will sample XREADY signal // - XintfRegs.XTIMING6.bit.USEREADY = 1; - XintfRegs.XTIMING6.bit.READYMODE = 1; // sample asynchronous + XintfRegs.XTIMING6.bit.USEREADY = 0; + XintfRegs.XTIMING6.bit.READYMODE = 0; // sample asynchronous // // Size must be either: diff --git a/Periphery.cpp b/Periphery.cpp index 8841866..74a9bcb 100644 --- a/Periphery.cpp +++ b/Periphery.cpp @@ -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(0x4000)), + _zone6_ptr(reinterpret_cast(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 } } diff --git a/Periphery.h b/Periphery.h index f5c06fe..e592ea3 100644 --- a/Periphery.h +++ b/Periphery.h @@ -5,6 +5,7 @@ #include "Protocol/CAN.h" #include "Protocol/CAN_data.h" #include "Protocol/DigitalIO.h" +#include "Protocol/MemoryMap.h" struct SoftwareVersion{ @@ -27,9 +28,13 @@ public: private: canSpace::CAN _canb; interface::DigitalIO _digitalIO; - Uint16* _zone0_ptr; + Uint16* _zone6_ptr; SoftwareVersion _softVersion; canSpace::CANMessage _modbusSettingsMsg; + canSpace::CANMessage _message; bool _modbusInit; + + Uint16 tempIn; + Uint16 tempOut; }; diff --git a/Protocol/DigitalIO.cpp b/Protocol/DigitalIO.cpp index 6585507..24d7147 100644 --- a/Protocol/DigitalIO.cpp +++ b/Protocol/DigitalIO.cpp @@ -18,12 +18,24 @@ void DigitalIO::setMemoryOffset(Uint16 offset){ void DigitalIO::readDigitalIO(Uint16& data){ + asm(" NOP"); + asm(" NOP"); + asm(" NOP"); data = *m_pointer; + asm(" NOP"); + asm(" NOP"); + asm(" NOP"); } void DigitalIO::writeDigitalIO(Uint16& data) const{ + asm(" NOP"); + asm(" NOP"); + asm(" NOP"); *m_pointer = data; + asm(" NOP"); + asm(" NOP"); + asm(" NOP"); } } // interface diff --git a/Protocol/MemoryMap.h b/Protocol/MemoryMap.h new file mode 100644 index 0000000..5262e88 --- /dev/null +++ b/Protocol/MemoryMap.h @@ -0,0 +1,11 @@ +#pragma once + +namespace interface { + +enum MemoryOffset { + SOFT_VERSION_OFFSET = static_cast(0x0), + DISCRETE_DATA_OFFSET = static_cast(0xA), + PROFIBUS_OFFSET = static_cast(0x14) +}; + +} diff --git a/main2.cpp b/main2.cpp index e824d7b..24c3a6a 100644 --- a/main2.cpp +++ b/main2.cpp @@ -36,7 +36,6 @@ volatile bool sendRemote = false; Uint16 modbusInit = 0; int32 testVar = 0; - void main() { ServiceDog();