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

188 lines
3.7 KiB
C++

/*
* AD5421.h
*
* Created on: 7 àâã. 2019 ã.
* Author: user
*/
#ifndef SOURCE_DRIVER_CHIPSET_AD5421_H_
#define SOURCE_DRIVER_CHIPSET_AD5421_H_
#include "PackagerAD5421.hh"
#include "../SerialPortAdapter.hpp"
#include "../../systemic/RegisterEncoder.hpp"
namespace driver { namespace chipset { namespace AD5421 {
typedef PackagerAD5421 Packager;
typedef uint16_t Latency;
typedef SerialPortAdapter<Packager::Frame, Latency, true> SerialPortRegister;
//Àäðåñà ðåãèñòðîâ è êîìàíäû.
struct ControlRegistersPairedAcronims {
enum Acronims {
DAC = 0x01, //Ðåãèñòð DAC.
CONTROL = 0x02, //Óïðàâëÿþùèé ðåãèñòð.
OFFSET_ADJ = 0x03, //Ðåãèñòð óïðàâëåíèÿ ñìåùåíèåì.
GAIN_ADJ = 0x04, //Ðåãèñòð óïðàâëåíèÿ êîýôôèöèåíòà óñèëåíèÿ.
LOAD_DAC = 0x05, //Êîìàíäà óñòàíîâèòü òîê íà âûõîäå â ñîîòâåòñòâèè ñ ñîäåðæèìûì ðåãèñòðà DAC.
ALARM = 0x06, //Êîìàíäà óñòàíîâèòü çíà÷åíèå òîêà ALARM VALUE.
RESET = 0x07, //Êîìàíäà ñáðîñà ìèêðîñõåìû.
ADC_START = 0x08, //Êîìàíäà çàïóñòèòü èçìåðåíèå Vloop/òåìïåðàòóðû.
READ_FAULT = 0x05 //Ðåãèñòðà FAULT, òîëüêî äëÿ ÷òåíèÿ. ×òåíèå ðåãèñòðà ñáðàñûâàåò îòêàç ïî SPI.
};
};
//Âîçìîæíûå ïåðèîäû ñðàáàòûâàíèÿ ñòîðîæåâîãî òàéìåðà.
enum WdTimeouts {
wd_50_ms,
wd_100_ms,
wd_500_ms,
wd_1_sec,
wd_2_sec,
wd_3_sec,
wd_4_sec,
wd_5_sec
};
enum WdControl {
wd_enable = 0,
wd_disable
};
enum FaultReadback {
readback_enable = 0,
readback_disable,
};
enum AlarmOnSpi {
spi_alarm_enable = 0,
spi_alarm_disable,
};
enum LoopCurrent {
loop_normal = 0,
loop_minimal,
};
enum AdcInput {
adc_vloop = 0,
adc_temp,
};
enum AdcPower {
adc_disable = 0,
adc_enable,
};
enum RefPower {
ref_power_on = 0,
ref_power_off,
};
enum VloopFault {
vloop_fault_disable = 0,
vloop_fault_enable,
};
union ControlReg {
uint16_t all;
struct {
uint16_t : 5;
VloopFault vloop_fault : 1;
RefPower ref_power : 1;
AdcPower adc_power : 1;
AdcInput adc_input : 1;
LoopCurrent loop_current : 1;
AlarmOnSpi alarm_on_spi : 1;
FaultReadback fault_readback : 1;
WdControl wd_control : 1;
WdTimeouts wd_timeout : 3;
} bit;
ControlReg() : all(0) {}
};
enum Vloop12 {
vloop12_ok = 0,
vloop12_error
};
enum Vloop6 {
vloop6_ok = 0,
vloop6_error
};
enum Temp100 {
temp100_ok = 0,
temp100_error
};
enum Temp140 {
temp140_ok = 0,
temp140_error
};
enum IloopUnder {
i_loop_under_ok = 0,
i_loop_under_error
};
enum IloopOver {
i_loop_over_ok = 0,
i_loop_over_error
};
enum Pec {
pec_ok = 0,
pec_error
};
enum SpiConnection {
connection_ok = 0,
connection_loss
};
union FaultReg {
uint16_t all;
struct {
uint16_t adc_value : 8;
Vloop12 vloop12 : 1;
Vloop6 vloop6 : 1;
Temp100 temp100 : 1;
Temp140 temp140 : 1;
IloopUnder i_loop_under : 1;
IloopOver i_loop_over : 1;
Pec pec : 1;
SpiConnection spi_connection : 1;
} bit;
};
//! Ñòðóêòóðà íàñòðàåâàåìûõ ïàðàìåòðîâ ìèêðîñõåìû AD5421
struct Parameters {
typedef uint16_t OptionRegister;
static const unsigned int allowed_options = 3;
enum AllowedRegisters {
CONTROL_REGISTER,
OFFSET_ADJ_REGISTER,
GAIN_ADJ_REGISTER,
};
OptionRegister option[allowed_options];
};
} }}
#endif /* SOURCE_DRIVER_CHIPSET_AD5421_H_ */