From 0d2ff901a0e30b0ad498fc28b51bd29d41f3d0a5 Mon Sep 17 00:00:00 2001 From: Oleg Date: Thu, 10 Apr 2025 10:40:50 +0300 Subject: [PATCH] Invert digitalIO data. Rename base data types for consistency --- Periphery.cpp | 11 ++-- Periphery.h | 8 +-- Protocol/CAN.cpp | 36 +++++------ Protocol/CAN.h | 131 +++++++---------------------------------- Protocol/CANConfig.cpp | 24 ++++---- Protocol/CAN_data.h | 96 ++++++++++++++++++++++++++++++ Protocol/DigitalIO.cpp | 8 +-- Protocol/DigitalIO.h | 45 +++++++------- Protocol/MemoryMap.h | 6 +- 9 files changed, 186 insertions(+), 179 deletions(-) diff --git a/Periphery.cpp b/Periphery.cpp index 75f2a0e..37d0998 100644 --- a/Periphery.cpp +++ b/Periphery.cpp @@ -4,7 +4,7 @@ Periphery::Periphery() : _cana(can_space::CANA), _digitalIO(), - _zone6_ptr(reinterpret_cast(0x100000)), + _zone6_ptr(reinterpret_cast(0x100000)), _scib(ScibRegs), _modbusRegCounter(0), modbusRTU(CpuTimer2, _scib), @@ -67,8 +67,8 @@ void Periphery::config(){ } -Uint16 Periphery::getVersionFPGA(){ - Uint16 data; +uint16_t Periphery::getVersionFPGA(){ + uint16_t data; data = *_zone6_ptr + interface::SOFT_VERSION_OFFSET; return data & 0x3FF; // no more than 1023. (9.9.9) should be limit } @@ -141,8 +141,9 @@ void Periphery::getModbusConfiguration(){ #pragma CODE_SECTION("ramfuncs"); void Periphery::processDigitalInput(){ - Uint16 data = 0; + uint16_t data = 0; _digitalIO.readDigitalIO(data); + data = ~data; _cana.transmitMsg(can_space::DIGITAL_INPUT_MBOX, data); } @@ -151,7 +152,7 @@ void Periphery::processDigitalInput(){ void Periphery::processDigitalOutput(){ if(_cana.isNewMessage(can_space::DIGITAL_OUTPUT_MBOX)){ _cana.receiveMsg(can_space::DIGITAL_OUTPUT_MBOX, _message); - Uint16 data = _message.mdl.word.LOW_WORD; + uint16_t data = ~_message.mdl.word.LOW_WORD; _digitalIO.writeDigitalIO(data); } } diff --git a/Periphery.h b/Periphery.h index 8827fdc..2ba5453 100644 --- a/Periphery.h +++ b/Periphery.h @@ -16,15 +16,15 @@ struct SoftwareVersion{ - Uint16 DSP; - Uint16 CPLD; + uint16_t DSP; + uint16_t CPLD; }; class Periphery{ public: Periphery(); void config(); - Uint16 getVersionFPGA(); + uint16_t getVersionFPGA(); void updateVersionFPGA(); void receiveModbusParameters(); @@ -41,7 +41,7 @@ public: private: can_space::CAN _cana; interface::DigitalIO _digitalIO; - Uint16* _zone6_ptr; + uint16_t* _zone6_ptr; DSP28335::SCIB _scib; diff --git a/Protocol/CAN.cpp b/Protocol/CAN.cpp index b69f6e9..07a6479 100644 --- a/Protocol/CAN.cpp +++ b/Protocol/CAN.cpp @@ -3,10 +3,10 @@ namespace can_space { #pragma CODE_SECTION("ramfuncs"); -void CAN::transmitMsg(Uint16 boxNumber, const CANMessage& message, bool writeDataLength){ +void CAN::transmitMsg(uint16_t boxNumber, const CANMessage& message, bool writeDataLength){ if (boxNumber > 31) return; - Uint32 mboxControl(0); + uint32_t mboxControl(0); mboxControl = 1ul << boxNumber; volatile MBOX* p_MailBox(0); @@ -36,10 +36,10 @@ void CAN::transmitMsg(Uint16 boxNumber, const CANMessage& message, bool writeDat #pragma CODE_SECTION("ramfuncs"); -void CAN::transmitMsg(Uint16 boxNumber, const Uint64& message, const Uint16 dlc){ +void CAN::transmitMsg(uint16_t boxNumber, const uint64_t& message, const uint16_t dlc){ if (boxNumber > 31) return; - Uint32 mboxControl(0); + uint32_t mboxControl(0); mboxControl = 1ul << boxNumber; volatile MBOX* p_MailBox(0); @@ -69,10 +69,10 @@ void CAN::transmitMsg(Uint16 boxNumber, const Uint64& message, const Uint16 dlc) #pragma CODE_SECTION("ramfuncs"); -void CAN::transmitMsg(Uint16 boxNumber, const Uint64& message){ +void CAN::transmitMsg(uint16_t boxNumber, const uint64_t& message){ if (boxNumber > 31) return; - Uint32 mboxControl(0); + uint32_t mboxControl(0); mboxControl = 1ul << boxNumber; volatile MBOX* p_MailBox(0); @@ -100,7 +100,7 @@ void CAN::transmitMsg(Uint16 boxNumber, const Uint64& message){ } -void CAN::updateTXMessage(Uint16 boxNumber, const CANMessage& message){ // TODO check trs bit and set it at the end if it was here. Once the TRS bit is set for a mailbox and then data is changed in the mailbox using the CDR +void CAN::updateTXMessage(uint16_t boxNumber, const CANMessage& message){ // TODO check trs bit and set it at the end if it was here. Once the TRS bit is set for a mailbox and then data is changed in the mailbox using the CDR // bit, the CAN module fails to transmit the new data and transmits the old data instead. To avoid this, // reset transmission in that mailbox using the TRRn bit and set the TRSn bit again. The new data is // then transmitted. @@ -123,13 +123,13 @@ void CAN::updateTXMessage(Uint16 boxNumber, const CANMessage& message){ // TODO #pragma CODE_SECTION("ramfuncs"); -void CAN::sendRemoteRequest(Uint16 boxNumber){ +void CAN::sendRemoteRequest(uint16_t boxNumber){ if (boxNumber > 31) return; volatile MBOX* p_MailBox(0); p_MailBox = &(_p_CanMBoxes->MBOX0) + boxNumber; - Uint32 mboxControl(0); + uint32_t mboxControl(0); mboxControl = 1ul << boxNumber; // Mailbox disable @@ -152,10 +152,10 @@ void CAN::sendRemoteRequest(Uint16 boxNumber){ #pragma CODE_SECTION("ramfuncs"); -int16 CAN::receiveMsg(Uint16 boxNumber, CANMessage& rxMessage){ +int16_t CAN::receiveMsg(uint16_t boxNumber, CANMessage& rxMessage){ if (boxNumber > 31) { return -1; } - Uint32 mboxControl(0); + uint32_t mboxControl(0); mboxControl = 1ul << boxNumber; volatile MBOX* p_MailBox(0); @@ -191,10 +191,10 @@ bool CAN::isNewMessage(){ #pragma CODE_SECTION("ramfuncs"); -bool CAN::isNewMessage(Uint16 boxNumber){ +bool CAN::isNewMessage(uint16_t boxNumber){ if (boxNumber > 31) { return 0; } - Uint32 mboxControl(0); + uint32_t mboxControl(0); mboxControl = 1ul << boxNumber; bool isNewMessageInBox = _p_CanRegs->CANRMP.all & mboxControl; @@ -209,10 +209,10 @@ void CAN::resetTimeStampCounter(){ } -void CAN::setTimeOutValue(Uint16 boxNumber, Uint32 canBitsNumber){ +void CAN::setTimeOutValue(uint16_t boxNumber, uint32_t canBitsNumber){ if (boxNumber > 31) { return; } - volatile Uint32* p_MailBox(0); + volatile uint32_t* p_MailBox(0); p_MailBox = &(_p_CanMotoRegs->MOTO0) + boxNumber; *p_MailBox = canBitsNumber; @@ -220,15 +220,15 @@ void CAN::setTimeOutValue(Uint16 boxNumber, Uint32 canBitsNumber){ #pragma CODE_SECTION("ramfuncs"); -bool CAN::isTimeOut(Uint16 boxNumber){ +bool CAN::isTimeOut(uint16_t boxNumber){ bool mBOXTimeOut = false; mBOXTimeOut = _p_CanRegs->CANTOS.all & (1ul << boxNumber); return mBOXTimeOut; } -void CAN::clearTimeOutFlag(Uint16 boxNumber){ - Uint32 clearFlag = 0; +void CAN::clearTimeOutFlag(uint16_t boxNumber){ + uint32_t clearFlag = 0; clearFlag = 1ul << boxNumber; _p_CanRegs->CANTOS.all = clearFlag; } diff --git a/Protocol/CAN.h b/Protocol/CAN.h index 540aae3..6c288f0 100644 --- a/Protocol/CAN.h +++ b/Protocol/CAN.h @@ -1,131 +1,40 @@ #pragma once +#include #include "F28335/DSP28x_Project.h" #include "F28335/DSP2833x_Device.h" -namespace can_space { - -enum CAN_VARIANT{ - CANA, - CANB -}; - -enum configFlags{ - NONE = 0, - MSB_ENABLE = 1u << 0, - STM_ENABLE = 1u << 1 -}; - - -enum configSystemIsrFlags{ - I0EN_ENABLE = 1ul, - I1EN_ENABLE = 1ul << 1, - GIL_ENABLE = 1ul << 2, - WLIM_ENABLE = 1ul << 8, - EPIM_ENABLE = 1ul << 9, - BOIM_ENABLE = 1ul << 10, - RMLIM_ENABLE = 1ul << 11, - WUIM_ENABLE = 1ul << 12, - WDIM_ENABLE = 1ul << 13, - AAIM_ENABLE = 1ul << 14, - TCOM_ENABLE = 1ul << 16, - MTOM_ENABLE = 1ul << 17 -}; - - -// eCAN Message Control Register (MSGCTRL) bit definitions -struct MsgCtrlBits { // bits description - Uint16 DLC:4; // 0:3 - Uint16 RTR:1; // 4 - Uint16 OPC:1; // 1 - Uint16 rsvd1:2; // 7:6 reserved - Uint16 TPL:5; // 12:8 - Uint16 rsvd2:3; // 15:13 reserved -}; - - -union MsgCtrlReg { - Uint16 all; - struct MsgCtrlBits bit; - - MsgCtrlReg(Uint16 configData = 0){ - all = configData; - } -}; - - -struct MsgID_Bits { // bits description - Uint16 EXTMSGID_L:16; // 0:15 - Uint16 EXTMSGID_H:2; // 16:17 - Uint16 STDMSGID:11; // 18:28 - Uint16 AAM:1; // 29 - Uint16 AME:1; // 30 - Uint16 IDE:1; // 31 -}; - -// Allow access to the bit fields or entire register -union MsgID { - Uint32 all; - struct MsgID_Bits bit; - - MsgID(Uint32 boxID = 0xAAA, bool isExtendedID = false, bool isAAM = false, bool isAME = false) { - if(!isExtendedID){ - bit.STDMSGID = boxID; - bit.EXTMSGID_H = 0; - bit.EXTMSGID_L = 0; - } - else{ all = boxID; } - - bit.IDE = isExtendedID; - bit.AAM = isAAM; - bit.AME = isAME; - } - - MsgID(const MsgID& init) { - all = init.all; - } -}; - - -struct CANMessage { - Uint16 dataLength; - union CANMDL_REG mdl; - union CANMDH_REG mdh; - - CANMessage(){ - mdl.all = 0; - mdh.all = 0; - } -}; +#include "CAN_data.h" +namespace can_space { class CAN{ public: CAN(CAN_VARIANT canVariant); void initGpio(); - void config(Uint16 baudrate = 1000, Uint16 flags = 0); - void configTxMBox(Uint16 boxNumber, const MsgID& configID, const MsgCtrlReg& configCtrlReg); - void configRxMBox(Uint16 boxNumber, const MsgID& configID, const MsgCtrlReg& configCtrlReg); - void configSystemIsr(Uint32 flags); - void configMBoxIsr(Uint16 boxNumber); + void config(uint16_t baudrate = 1000, uint16_t flags = 0); + void configTxMBox(uint16_t boxNumber, const MsgID& configID, const MsgCtrlReg& configCtrlReg); + void configRxMBox(uint16_t boxNumber, const MsgID& configID, const MsgCtrlReg& configCtrlReg); + void configSystemIsr(uint32_t flags); + void configMBoxIsr(uint16_t boxNumber); bool isNewMessage(); - bool isNewMessage(Uint16 boxNumber); + bool isNewMessage(uint16_t boxNumber); - void transmitMsg(Uint16 boxNumber, const CANMessage& message, bool writeDataLength = false); - void transmitMsg(Uint16 boxNumber, const Uint64& message, const Uint16 dlc); - void transmitMsg(Uint16 boxNumber, const Uint64& message); - void updateTXMessage(Uint16 boxNumber, const CANMessage& message); - void sendRemoteRequest(Uint16 boxNumber); - int16 receiveMsg(Uint16 boxNumber, CANMessage& rxMessage); + void transmitMsg(uint16_t boxNumber, const CANMessage& message, bool writeDataLength = false); + void transmitMsg(uint16_t boxNumber, const uint64_t& message, const uint16_t dlc); + void transmitMsg(uint16_t boxNumber, const uint64_t& message); + void updateTXMessage(uint16_t boxNumber, const CANMessage& message); + void sendRemoteRequest(uint16_t boxNumber); + int16_t receiveMsg(uint16_t boxNumber, CANMessage& rxMessage); - void enableTimeOutControl(Uint16 boxNumber); - void disableTimeOutControl(Uint16 boxNumber); + void enableTimeOutControl(uint16_t boxNumber); + void disableTimeOutControl(uint16_t boxNumber); void resetTimeStampCounter(); - void setTimeOutValue(Uint16 boxNumber, Uint32 canBitsNumber); - bool isTimeOut(Uint16 boxNumber); - void clearTimeOutFlag(Uint16 boxNumber); + void setTimeOutValue(uint16_t boxNumber, uint32_t canBitsNumber); + bool isTimeOut(uint16_t boxNumber); + void clearTimeOutFlag(uint16_t boxNumber); void busErrorInterruptFlagsReset(); diff --git a/Protocol/CANConfig.cpp b/Protocol/CANConfig.cpp index de7e2e1..c07abaf 100644 --- a/Protocol/CANConfig.cpp +++ b/Protocol/CANConfig.cpp @@ -17,7 +17,7 @@ void CAN::initGpio(){ else if (_canPort == CANB) InitECanbGpio(); } -void CAN::config(Uint16 baudrate, Uint16 flags){ +void CAN::config(uint16_t baudrate, uint16_t flags){ if (_canPort == CANA){ EALLOW; SysCtrlRegs.PCLKCR0.bit.ECANAENCLK = 1; @@ -193,13 +193,13 @@ void CAN::config(Uint16 baudrate, Uint16 flags){ } -void CAN::configTxMBox(Uint16 boxNumber, const MsgID& configID, const MsgCtrlReg& configCtrlReg){ +void CAN::configTxMBox(uint16_t boxNumber, const MsgID& configID, const MsgCtrlReg& configCtrlReg){ if (boxNumber > 31) return; volatile MBOX* p_MailBox(0); p_MailBox = &(_p_CanMBoxes->MBOX0) + boxNumber; - Uint32 mboxControl(0); + uint32_t mboxControl(0); mboxControl = 1ul << boxNumber; // Reset transmittion @@ -235,13 +235,13 @@ void CAN::configTxMBox(Uint16 boxNumber, const MsgID& configID, const MsgCtrlReg } -void CAN::configRxMBox(Uint16 boxNumber, const MsgID& configID, const MsgCtrlReg& configCtrlReg){ +void CAN::configRxMBox(uint16_t boxNumber, const MsgID& configID, const MsgCtrlReg& configCtrlReg){ if (boxNumber > 31) return; volatile MBOX* p_MailBox(0); p_MailBox = &(_p_CanMBoxes->MBOX0) + boxNumber; - Uint32 mboxControl(0); + uint32_t mboxControl(0); mboxControl = 1ul << boxNumber; // Mailbox disable @@ -277,17 +277,17 @@ void CAN::configRxMBox(Uint16 boxNumber, const MsgID& configID, const MsgCtrlReg } -void CAN::configSystemIsr(Uint32 flags){ +void CAN::configSystemIsr(uint32_t flags){ EALLOW; _p_CanRegs->CANGIM.all = flags; EDIS; } -void CAN::configMBoxIsr(Uint16 boxNumber){ +void CAN::configMBoxIsr(uint16_t boxNumber){ if (boxNumber > 31) return; - Uint32 mboxControl(0); + uint32_t mboxControl(0); mboxControl = 1ul << boxNumber; EALLOW; @@ -297,10 +297,10 @@ void CAN::configMBoxIsr(Uint16 boxNumber){ } -void CAN::enableTimeOutControl(Uint16 boxNumber){ +void CAN::enableTimeOutControl(uint16_t boxNumber){ if (boxNumber > 31) return; - Uint32 mboxControl(0); + uint32_t mboxControl(0); mboxControl = _p_CanRegs->CANTOC.all; mboxControl |= 1ul << boxNumber; @@ -308,10 +308,10 @@ void CAN::enableTimeOutControl(Uint16 boxNumber){ } -void CAN::disableTimeOutControl(Uint16 boxNumber){ +void CAN::disableTimeOutControl(uint16_t boxNumber){ if (boxNumber > 31) return; - Uint32 mboxControl(0); + uint32_t mboxControl(0); mboxControl = _p_CanRegs->CANTOC.all; mboxControl &= ~(1ul << boxNumber); diff --git a/Protocol/CAN_data.h b/Protocol/CAN_data.h index f021a10..c2f5d08 100644 --- a/Protocol/CAN_data.h +++ b/Protocol/CAN_data.h @@ -1,5 +1,7 @@ #pragma once +#include + namespace can_space { enum MBOX_NUMBERS { @@ -14,4 +16,98 @@ enum MBOX_NUMBERS { }; +enum CAN_VARIANT{ + CANA, + CANB +}; + +enum configFlags{ + NONE = 0, + MSB_ENABLE = 1u << 0, + STM_ENABLE = 1u << 1 +}; + + +enum configSystemIsrFlags{ + I0EN_ENABLE = 1ul, + I1EN_ENABLE = 1ul << 1, + GIL_ENABLE = 1ul << 2, + WLIM_ENABLE = 1ul << 8, + EPIM_ENABLE = 1ul << 9, + BOIM_ENABLE = 1ul << 10, + RMLIM_ENABLE = 1ul << 11, + WUIM_ENABLE = 1ul << 12, + WDIM_ENABLE = 1ul << 13, + AAIM_ENABLE = 1ul << 14, + TCOM_ENABLE = 1ul << 16, + MTOM_ENABLE = 1ul << 17 +}; + + +// eCAN Message Control Register (MSGCTRL) bit definitions +struct MsgCtrlBits { // bits description + uint16_t DLC:4; // 0:3 + uint16_t RTR:1; // 4 + uint16_t OPC:1; // 1 + uint16_t rsvd1:2; // 7:6 reserved + uint16_t TPL:5; // 12:8 + uint16_t rsvd2:3; // 15:13 reserved +}; + + +union MsgCtrlReg { + uint16_t all; + struct MsgCtrlBits bit; + + MsgCtrlReg(uint16_t configData = 0){ + all = configData; + } +}; + + +struct MsgID_Bits { // bits description + uint16_t EXTMSGID_L:16; // 0:15 + uint16_t EXTMSGID_H:2; // 16:17 + uint16_t STDMSGID:11; // 18:28 + uint16_t AAM:1; // 29 + uint16_t AME:1; // 30 + uint16_t IDE:1; // 31 +}; + +// Allow access to the bit fields or entire register +union MsgID { + uint32_t all; + struct MsgID_Bits bit; + + MsgID(uint32_t boxID = 0xAAA, bool isExtendedID = false, bool isAAM = false, bool isAME = false) { + if(!isExtendedID){ + bit.STDMSGID = boxID; + bit.EXTMSGID_H = 0; + bit.EXTMSGID_L = 0; + } + else{ all = boxID; } + + bit.IDE = isExtendedID; + bit.AAM = isAAM; + bit.AME = isAME; + } + + MsgID(const MsgID& init) { + all = init.all; + } +}; + + +struct CANMessage { + uint16_t dataLength; + union CANMDL_REG mdl; + union CANMDH_REG mdh; + + CANMessage(){ + mdl.all = 0; + mdh.all = 0; + } +}; + + } diff --git a/Protocol/DigitalIO.cpp b/Protocol/DigitalIO.cpp index 37e3a63..8b13aba 100644 --- a/Protocol/DigitalIO.cpp +++ b/Protocol/DigitalIO.cpp @@ -7,17 +7,17 @@ DigitalIO::DigitalIO(): {} -void DigitalIO::setup(Uint16 *memzone){ +void DigitalIO::setup(uint16_t *memzone){ m_pointer = memzone;// + OFFSET_DATA_DISCRETE_IO; } -void DigitalIO::setMemoryOffset(Uint16 offset){ +void DigitalIO::setMemoryOffset(uint16_t offset){ m_pointer += offset; } -void DigitalIO::readDigitalIO(Uint16& data){ +void DigitalIO::readDigitalIO(uint16_t& data){ asm(" NOP"); // TODO Add normal NOP asm(" NOP"); asm(" NOP"); @@ -28,7 +28,7 @@ void DigitalIO::readDigitalIO(Uint16& data){ } -void DigitalIO::writeDigitalIO(Uint16& data) const{ +void DigitalIO::writeDigitalIO(uint16_t& data) const{ asm(" NOP"); asm(" NOP"); asm(" NOP"); diff --git a/Protocol/DigitalIO.h b/Protocol/DigitalIO.h index 93c13b7..51a39f3 100644 --- a/Protocol/DigitalIO.h +++ b/Protocol/DigitalIO.h @@ -1,5 +1,6 @@ #pragma once +#include #include "DSP28x_Project.h" namespace interface @@ -7,28 +8,28 @@ namespace interface struct DigitalIODataBitField { - Uint16 b00: 1; - Uint16 b01: 1; - Uint16 b02: 1; - Uint16 b03: 1; - Uint16 b04: 1; - Uint16 b05: 1; - Uint16 b06: 1; - Uint16 b07: 1; - Uint16 b08: 1; - Uint16 b09: 1; - Uint16 b10: 1; - Uint16 b11: 1; - Uint16 b12: 1; - Uint16 b13: 1; - Uint16 b14: 1; - Uint16 b15: 1; + uint16_t b00: 1; + uint16_t b01: 1; + uint16_t b02: 1; + uint16_t b03: 1; + uint16_t b04: 1; + uint16_t b05: 1; + uint16_t b06: 1; + uint16_t b07: 1; + uint16_t b08: 1; + uint16_t b09: 1; + uint16_t b10: 1; + uint16_t b11: 1; + uint16_t b12: 1; + uint16_t b13: 1; + uint16_t b14: 1; + uint16_t b15: 1; }; union DigitalIODataRegister { - Uint16 all; + uint16_t all; DigitalIODataBitField bit; DigitalIODataRegister(): all(0) @@ -50,14 +51,14 @@ struct DigitalIOData class DigitalIO { public: DigitalIO(); - void setup(Uint16 *memzone); - void setMemoryOffset(Uint16 offset); + void setup(uint16_t *memzone); + void setMemoryOffset(uint16_t offset); - void readDigitalIO(Uint16& data); - void writeDigitalIO(Uint16& data) const; + void readDigitalIO(uint16_t& data); + void writeDigitalIO(uint16_t& data) const; private: - Uint16 *m_pointer; + uint16_t *m_pointer; }; } // interface diff --git a/Protocol/MemoryMap.h b/Protocol/MemoryMap.h index 5262e88..4cbe4a9 100644 --- a/Protocol/MemoryMap.h +++ b/Protocol/MemoryMap.h @@ -3,9 +3,9 @@ namespace interface { enum MemoryOffset { - SOFT_VERSION_OFFSET = static_cast(0x0), - DISCRETE_DATA_OFFSET = static_cast(0xA), - PROFIBUS_OFFSET = static_cast(0x14) + SOFT_VERSION_OFFSET = static_cast(0x0), + DISCRETE_DATA_OFFSET = static_cast(0xA), + PROFIBUS_OFFSET = static_cast(0x14) }; }