MotorControlModuleSDFM_TMS3.../Projects/EFC_Application/UMLibrary/driver/chipset/PackagerADS1259.hh

164 lines
4.5 KiB
C++
Raw Normal View History

/*
* PackagerADS1259.h
*
* Created on: 7 <EFBFBD><EFBFBD><EFBFBD>. 2019 <EFBFBD>.
* Author: user
*/
#ifndef SOURCE_DRIVER_CHIPSET_PACKAGERADS1259_H_
#define SOURCE_DRIVER_CHIPSET_PACKAGERADS1259_H_
#include <cstddef>
#include <stdint.h>
namespace driver { namespace chipset {
struct PackagerADS1259 {
typedef uint16_t Data; //!<<3C><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
typedef uint32_t Frame; //!<<3C><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>.
static const std::size_t FrameSize; //!<<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>.
typedef uint16_t RegAddress; //!<<3C><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
static Frame encode( RegAddress rg_address, Data data, bool write_nread );
static Frame encode( RegAddress control_reg );
static Data decode( Frame frame );
struct Packager {
typedef PackagerADS1259::Frame Frame;
typedef PackagerADS1259::Data Data;
RegAddress rg_address;
bool write_nread;
Frame pack( Data ) const;
Data unpack( Frame ) const;
};
struct CommandPackager {
typedef PackagerADS1259::Frame Frame;
typedef PackagerADS1259::Data Data;
Frame pack( Data ) const;
Data unpack( Frame ) const;
};
struct AdcResultPackager {
static const uint32_t read_adc_command = 0x12 << 8;
typedef uint32_t Frame;
typedef uint32_t Data;
Frame pack( Data ) const;
Data unpack( Frame ) const;
};
struct AdcContModePackager {
typedef uint32_t Frame;
typedef uint32_t Data;
static Frame encode() { return 0xFFFFFFFFul; }
static Data decode(Frame frame) { return (frame >> 16ul) | (frame << 16ul); }
struct RdataCrc {
uint32_t adc_result : 24;
uint32_t crc : 8;
static RdataCrc createRdataCrc(uint32_t data) { return { .adc_result = data >> 8, .crc = data & 0xFF }; }
static uint16_t calcCrc(uint32_t data) { return ( (data >> 8) + (data >> 16) + data + 0x9B ) & 0xFF; }
static bool checkCrc(const RdataCrc & rdata) { return rdata.crc == calcCrc(rdata.adc_result); }
};
};
private:
static const uint16_t READ_OP_CODE = 0x02;
static const uint16_t WRITE_OP_CODE = 0x04;
//!<21><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
struct AddressingRegisterForm {
uint16_t NUM_REG_TO_READ : 8;
uint16_t REGISTER_ADDRESS : 4;
uint16_t READ_WRITE_OP : 4;
AddressingRegisterForm(uint16_t reg_addr, bool write_nread) :
REGISTER_ADDRESS(reg_addr),
READ_WRITE_OP(write_nread ? WRITE_OP_CODE : READ_OP_CODE),
NUM_REG_TO_READ(0) {}
};
//!<21><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
struct RegisterAddressAndData {
AddressingRegisterForm address;
Data data;
RegisterAddressAndData(uint16_t reg_addr, bool write_nread, Data data) :
address(reg_addr, write_nread),
data(data << 8) {}
};
struct CommandRegisterForm {
uint16_t c1 : 8;
uint16_t command : 8;
uint16_t c2 : 16;
CommandRegisterForm(uint16_t command) : command(command), c1(0), c2(0) {}
};
};
} /* namespace chipset */
} /* namespace driver */
inline driver::chipset::PackagerADS1259::Packager::Frame driver::chipset::PackagerADS1259::Packager::pack(
Data data ) const {
return encode( rg_address, data, write_nread );
}
inline driver::chipset::PackagerADS1259::Packager::Data driver::chipset::PackagerADS1259::Packager::unpack(
Frame frame ) const {
return decode( frame );
}
inline driver::chipset::PackagerADS1259::CommandPackager::Frame driver::chipset::PackagerADS1259::CommandPackager::pack(
Data data) const {
return encode( data );
}
inline driver::chipset::PackagerADS1259::CommandPackager::Data driver::chipset::PackagerADS1259::CommandPackager::unpack(
Frame frame) const {
return 0;
}
inline driver::chipset::PackagerADS1259::AdcResultPackager::Frame driver::chipset::PackagerADS1259::AdcResultPackager::pack(
Data data) const {
return read_adc_command;
}
inline driver::chipset::PackagerADS1259::AdcResultPackager::Data driver::chipset::PackagerADS1259::AdcResultPackager::unpack(
Frame frame) const {
return ((frame >> 16ul) | (frame << 16ul)) & 0xFFFFFFul;
}
#endif /* SOURCE_DRIVER_CHIPSET_PACKAGERADS1259_H_ */