/* * 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 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_ */