Add memory map for XINTF. Change zone0 to zone6

feature/CAN_timeOut
Oleg 1 month ago
parent a450de810f
commit 61b34218ff

@ -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:

@ -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
}
}

@ -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;
};

@ -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

@ -0,0 +1,11 @@
#pragma once
namespace interface {
enum MemoryOffset {
SOFT_VERSION_OFFSET = static_cast<Uint16>(0x0),
DISCRETE_DATA_OFFSET = static_cast<Uint16>(0xA),
PROFIBUS_OFFSET = static_cast<Uint16>(0x14)
};
}

@ -36,7 +36,6 @@ volatile bool sendRemote = false;
Uint16 modbusInit = 0;
int32 testVar = 0;
void main()
{
ServiceDog();

Loading…
Cancel
Save