You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
CCS-COMM_BOARD/SYSCTRL/ADCCTRL.h

184 lines
4.1 KiB
C

/*
* ADCCTRL.h
*
* Author: Aleksey Gerasimenko
* gerasimenko.aleksey.n@gmail.com
*/
#include <cmath>
//#include <math.h>
#include <stdint.h>
#include "F28335/DSP28x_Project.h"
#ifndef SYSCTRL_ADCCTRL_H_
#define SYSCTRL_ADCCTRL_H_
namespace SYSCTRL
{
struct ADCCTRLSetup
{
float time_sample;
ADCCTRLSetup():
time_sample(-1.0)
{}
};//end ADCCTRLSetup
struct ADCCTRLConfiguration
{
int16 offset_00;
int16 offset_01;
int16 offset_02;
int16 offset_03;
int16 offset_04;
int16 offset_05;
int16 offset_06;
int16 offset_07;
int16 offset_08;
int16 offset_09;
int16 offset_10;
int16 offset_11;
int16 offset_12;
int16 offset_13;
int16 offset_14;
int16 offset_15;
float scale_current_net_a;
float scale_current_net_b;
float scale_current_net_c;
float scale_current_load_a;
float scale_current_load_b;
float scale_current_load_c;
float scale_voltage_net_a;
float scale_voltage_net_b;
float scale_voltage_net_c;
float scale_voltage_load_a;
float scale_voltage_load_b;
float scale_voltage_load_c;
float scale_voltage_dc;
ADCCTRLConfiguration():
offset_00(0),
offset_01(0),
offset_02(0),
offset_03(0),
offset_04(0),
offset_05(0),
offset_06(0),
offset_07(0),
offset_08(0),
offset_09(0),
offset_10(0),
offset_11(0),
offset_12(0),
offset_13(0),
offset_14(0),
offset_15(0),
scale_current_net_a(-1.0),
scale_current_net_b(-1.0),
scale_current_net_c(-1.0),
scale_current_load_a(-1.0),
scale_current_load_b(-1.0),
scale_current_load_c(-1.0),
scale_voltage_net_a(-1.0),
scale_voltage_net_b(-1.0),
scale_voltage_net_c(-1.0),
scale_voltage_load_a(-1.0),
scale_voltage_load_b(-1.0),
scale_voltage_load_c(-1.0),
scale_voltage_dc(-1.0)
{}
};//ADCCTRLConfiguration
class ADCCTRL
{
private:
float m_time_sample;
private:
int16 m_result_00;
int16 m_result_01;
int16 m_result_02;
int16 m_result_03;
int16 m_result_04;
int16 m_result_05;
int16 m_result_06;
int16 m_result_07;
int16 m_result_08;
int16 m_result_09;
int16 m_result_10;
int16 m_result_11;
int16 m_result_12;
int16 m_result_13;
int16 m_result_14;
int16 m_result_15;
private:
int16 m_channel_00;
int16 m_channel_01;
int16 m_channel_02;
int16 m_channel_03;
int16 m_channel_04;
int16 m_channel_05;
int16 m_channel_06;
int16 m_channel_07;
int16 m_channel_08;
int16 m_channel_09;
int16 m_channel_10;
int16 m_channel_11;
int16 m_channel_12;
int16 m_channel_13;
int16 m_channel_14;
int16 m_channel_15;
private:
int16 m_offset_00;
int16 m_offset_01;
int16 m_offset_02;
int16 m_offset_03;
int16 m_offset_04;
int16 m_offset_05;
int16 m_offset_06;
int16 m_offset_07;
int16 m_offset_08;
int16 m_offset_09;
int16 m_offset_10;
int16 m_offset_11;
int16 m_offset_12;
int16 m_offset_13;
int16 m_offset_14;
int16 m_offset_15;
private:
float m_scale_channel_00;
float m_scale_channel_01;
float m_scale_channel_02;
float m_scale_channel_03;
float m_scale_channel_04;
float m_scale_channel_05;
float m_scale_channel_06;
float m_scale_channel_07;
float m_scale_channel_08;
float m_scale_channel_09;
float m_scale_channel_10;
float m_scale_channel_11;
float m_scale_channel_12;
public:
ADCCTRL();
void setup(const ADCCTRLSetup& setup);
void configure(const ADCCTRLConfiguration& config);
public:
void read_adc_result();
private:
void (ADCCTRL::*_read_adc_result)();
void _read_adc_result_undef();
void _read_adc_result_operational();
public:
void get_current_net(float&, float&, float&);
void get_current_load(float&, float&, float&);
void get_voltage_net(float&, float&, float&);
void get_voltage_load(float&, float&, float&);
void get_voltage_dc(float&);
};
} /* namespace SYSCTRL */
#endif /* SYSCTRL_ADCCTRL_H_ */