188 lines
3.7 KiB
C++
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_ */
|