Clean project. Modbus still working
							parent
							
								
									9feba6b8c9
								
							
						
					
					
						commit
						5db1783db5
					
				@ -1,187 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * ADC.cpp
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "DSP28335/ADC.h"
 | 
			
		||||
 | 
			
		||||
namespace DSP28335
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
//CONSTRUCTOR
 | 
			
		||||
ADC::ADC():
 | 
			
		||||
        DSP28335::CPUBase(),
 | 
			
		||||
        m_status(false)
 | 
			
		||||
//
 | 
			
		||||
{}//end CONSTRUCTOR
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
void DSP28335::ADC::setup()
 | 
			
		||||
{
 | 
			
		||||
    if(m_mode == DSP28335::ADC::UNDEFINED)
 | 
			
		||||
    {
 | 
			
		||||
        //--- Configure the other ADC registers
 | 
			
		||||
        AdcRegs.ADCREFSEL.bit.REF_SEL = 0;  // ADC reference, 0=internal, 1=external
 | 
			
		||||
 | 
			
		||||
        //--- Power-up the ADC
 | 
			
		||||
        //AdcRegs.ADCTRL3.all = 0x00EC;     // Power-up reference and main ADC
 | 
			
		||||
        //AdcRegs.ADCTRL3.all = 0x00F4;     // Power-up reference and main ADC /20
 | 
			
		||||
        //AdcRegs.ADCTRL3.all = 0x00EE;     // Power-up reference and main ADC /14
 | 
			
		||||
        //AdcRegs.ADCTRL3.all = 0x00EA;     // Power-up reference and main ADC /10
 | 
			
		||||
        //AdcRegs.ADCTRL3.all = 0x00E8;     // Power-up reference and main ADC /8
 | 
			
		||||
        //AdcRegs.ADCTRL3.all = 0x00E4;     // Power-up reference and main ADC /4
 | 
			
		||||
        // bit 15-8      0's:    reserved
 | 
			
		||||
        // bit 7-6       11:     ADCBGRFDN, reference power, 00=off, 11=on
 | 
			
		||||
        // bit 5         1:      ADCPWDN, main ADC power, 0=off, 1=on
 | 
			
		||||
        // bit 4-1       0110:   ADCCLKPS, clock prescaler, FCLK=HSPCLK/(2*ADCCLKPS)
 | 
			
		||||
        // bit 0         0:      SMODE_SEL, 0=sequential sampling, 1=simultaneous sampling
 | 
			
		||||
 | 
			
		||||
        AdcRegs.ADCTRL3.bit.ADCCLKPS = 0x0008;      // bit 4-1       0110:   ADCCLKPS, clock prescaler, FCLK=HSPCLK/(2*ADCCLKPS)
 | 
			
		||||
        AdcRegs.ADCTRL3.bit.SMODE_SEL = 0x0000;     // bit 0         0:      SMODE_SEL, 0=sequential sampling, 1=simultaneous sampling
 | 
			
		||||
        AdcRegs.ADCTRL3.bit.ADCBGRFDN = 0x0003;     // bit 7-6       11:     ADCBGRFDN, reference power, 00=off, 11=on
 | 
			
		||||
        AdcRegs.ADCTRL3.bit.ADCPWDN = 0x0001;       // bit 5         1:      ADCPWDN, main ADC power, 0=off, 1=on
 | 
			
		||||
 | 
			
		||||
        DELAY_US(5000);                      // Wait 5 ms before using the ADC
 | 
			
		||||
 | 
			
		||||
        //AdcRegs.ADCTRL1.all = 0x0710;
 | 
			
		||||
        // bit 15        0:      reserved
 | 
			
		||||
        // bit 14        0:      RESET, 0=no action, 1=reset ADC
 | 
			
		||||
        // bit 13-12     00:     SUSMOD, 00=ignore emulation suspend
 | 
			
		||||
        // bit 11-8      0111:   ACQ_PS (Acquisition), 0111 = 8 x ADCCLK
 | 
			
		||||
        // bit 7         0:      CPS (Core clock), 0: ADCCLK=FCLK/1, 1: ADCCLK=FCLK/2
 | 
			
		||||
        // bit 6         0:      CONT_RUN, 0=start/stop mode, 1=continuous run
 | 
			
		||||
        // bit 5         0:      SEQ_OVRD, 0=disabled, 1=enabled
 | 
			
		||||
        // bit 4         1:      SEQ_CASC, 0=dual sequencer, 1=cascaded sequencer
 | 
			
		||||
        // bit 3-0       0000:   reserved
 | 
			
		||||
        AdcRegs.ADCTRL1.bit.SEQ_CASC = 0x1; // Cascaded mode
 | 
			
		||||
        AdcRegs.ADCTRL1.bit.SEQ_OVRD = 0x0; // Disable Sequencer override
 | 
			
		||||
        AdcRegs.ADCTRL1.bit.CONT_RUN = 0x0; // Start-stop mode
 | 
			
		||||
        AdcRegs.ADCTRL1.bit.CPS = 0x0;      // Core Clock Prescaler = 1 (ADCCLK=Fclk/1)
 | 
			
		||||
        AdcRegs.ADCTRL1.bit.ACQ_PS = 0x2;   // Acqusition window size
 | 
			
		||||
        AdcRegs.ADCTRL1.bit.SUSMOD = 0x0;   // Emulation-suspend mode
 | 
			
		||||
 | 
			
		||||
        //AdcRegs.ADCTRL2.all = 0x0900;
 | 
			
		||||
        // bit 15        0:      ePWM_SOCB_SEQ, 0=no action
 | 
			
		||||
        // bit 14        0:      RST_SEQ1, 0=no action
 | 
			
		||||
        // bit 13        0:      SOC_SEQ1, 0=clear any pending SOCs
 | 
			
		||||
        // bit 12        0:      reserved
 | 
			
		||||
        // bit 11        1:      INT_ENA_SEQ1, 1=enable interrupt
 | 
			
		||||
        // bit 10        0:      INT_MOD_SEQ1, 0=int on every SEQ1 conv
 | 
			
		||||
        // bit 9         0:      reserved
 | 
			
		||||
        // bit 8         1:      ePWM_SOCA_SEQ1, 1=SEQ1 start from ePWM_SOCA trigger
 | 
			
		||||
        // bit 7         0:      EXT_SOC_SEQ1, 1=SEQ1 start from ADCSOC pin
 | 
			
		||||
        // bit 6         0:      RST_SEQ2, 0=no action
 | 
			
		||||
        // bit 5         0:      SOC_SEQ2, no effect in cascaded mode
 | 
			
		||||
        // bit 4         0:      reserved
 | 
			
		||||
        // bit 3         0:      INT_ENA_SEQ2, 0=int disabled
 | 
			
		||||
        // bit 2         0:      INT_MOD_SEQ2, 0=int on every other SEQ2 conv
 | 
			
		||||
        // bit 1         0:      reserved
 | 
			
		||||
        // bit 0         0:      ePWM_SOCB_SEQ2, 0=no action
 | 
			
		||||
        AdcRegs.ADCTRL2.bit.EPWM_SOCB_SEQ2 = 0x0;   // ePWM SOCB enable bit for SEQ2
 | 
			
		||||
        AdcRegs.ADCTRL2.bit.INT_MOD_SEQ2 = 0x0;     // SEQ2 interrupt mode
 | 
			
		||||
        AdcRegs.ADCTRL2.bit.INT_ENA_SEQ2 = 0x0;     // SEQ2 interrupt enable
 | 
			
		||||
        AdcRegs.ADCTRL2.bit.SOC_SEQ2 = 0x0;         // SOC SEQ2
 | 
			
		||||
        AdcRegs.ADCTRL2.bit.RST_SEQ2 = 0x0;         // Reset SEQ2
 | 
			
		||||
 | 
			
		||||
        AdcRegs.ADCTRL2.bit.EXT_SOC_SEQ1 = 0x0;     // external SOC SEQ1
 | 
			
		||||
        AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1 = 0x0;   // ePWM SOCB enable bit for SEQ1
 | 
			
		||||
        AdcRegs.ADCTRL2.bit.INT_MOD_SEQ1 = 0x0;     // SEQ1 interrupt mode
 | 
			
		||||
        AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 0x1;     // SEQ1 interrupt enable
 | 
			
		||||
        AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 0x0;         // SOC SEQ1
 | 
			
		||||
        AdcRegs.ADCTRL2.bit.RST_SEQ1 = 0x1;         // Reset SEQ1
 | 
			
		||||
        AdcRegs.ADCTRL2.bit.EPWM_SOCB_SEQ = 0x0;        // ePWM SOCB enable for cascaded sequencer
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        AdcRegs.ADCMAXCONV.all = 15;
 | 
			
		||||
        // bit 15-7      0's:    reserved
 | 
			
		||||
        // bit 6-4       000:    MAX_CONV2 value
 | 
			
		||||
        // bit 3-0       0000:   MAX_CONV1 value (0 means 1 conversion)
 | 
			
		||||
 | 
			
		||||
        // Since we are only doing 1 conversion in the sequence, we only need to
 | 
			
		||||
        // configure the ADCCHSELSEQ1 register, and only the CONV00 field.  All
 | 
			
		||||
        // other channel selection fields are don't cares in this example.
 | 
			
		||||
        //AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0;  // Convert Channel 0
 | 
			
		||||
        AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; // Setup ADCINA3 as 1st SEQ conv.
 | 
			
		||||
        AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1; // Setup ADCINA2 as 2nd SEQ conv.
 | 
			
		||||
        AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x2; // Setup ADCINA2 as 3nd SEQ conv.
 | 
			
		||||
        AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x3; // Setup ADCINA2 as 4nd SEQ conv.
 | 
			
		||||
 | 
			
		||||
        AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0x4; // Setup ADCINA3 as 5st SEQ conv.
 | 
			
		||||
        AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0x5; // Setup ADCINA2 as 6nd SEQ conv.
 | 
			
		||||
        AdcRegs.ADCCHSELSEQ2.bit.CONV06 = 0x6; // Setup ADCINA2 as 7nd SEQ conv.
 | 
			
		||||
        AdcRegs.ADCCHSELSEQ2.bit.CONV07 = 0x7; // Setup ADCINA2 as 8nd SEQ conv.
 | 
			
		||||
 | 
			
		||||
        AdcRegs.ADCCHSELSEQ3.bit.CONV08 = 0x8; // Setup ADCINA3 as 9st SEQ conv.
 | 
			
		||||
        AdcRegs.ADCCHSELSEQ3.bit.CONV09 = 0x9; // Setup ADCINA2 as 10nd SEQ conv.
 | 
			
		||||
        AdcRegs.ADCCHSELSEQ3.bit.CONV10 = 0xA; // Setup ADCINA2 as 11nd SEQ conv.
 | 
			
		||||
        AdcRegs.ADCCHSELSEQ3.bit.CONV11 = 0xB; // Setup ADCINA2 as 12nd SEQ conv.
 | 
			
		||||
 | 
			
		||||
        AdcRegs.ADCCHSELSEQ4.bit.CONV12 = 0xC; // Setup ADCINA3 as 13st SEQ conv.
 | 
			
		||||
        AdcRegs.ADCCHSELSEQ4.bit.CONV13 = 0xD; // Setup ADCINA2 as 14nd SEQ conv.
 | 
			
		||||
        AdcRegs.ADCCHSELSEQ4.bit.CONV14 = 0xE; // Setup ADCINA2 as 15nd SEQ conv.
 | 
			
		||||
        AdcRegs.ADCCHSELSEQ4.bit.CONV15 = 0xF; // Setup ADCINA2 as 16nd SEQ conv.
 | 
			
		||||
        //
 | 
			
		||||
        //
 | 
			
		||||
        //
 | 
			
		||||
        m_mode = DSP28335::ADC::OPERATIONAL;
 | 
			
		||||
    //
 | 
			
		||||
    }//end if
 | 
			
		||||
    //
 | 
			
		||||
}//end
 | 
			
		||||
//.TI.ramfunc
 | 
			
		||||
// #pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
bool DSP28335::ADC::is_ready()
 | 
			
		||||
{
 | 
			
		||||
    return m_status;
 | 
			
		||||
    //
 | 
			
		||||
}//end
 | 
			
		||||
//
 | 
			
		||||
// #pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void DSP28335::ADC::clear_status()
 | 
			
		||||
{
 | 
			
		||||
    m_status = false;
 | 
			
		||||
    //
 | 
			
		||||
}//end
 | 
			
		||||
 | 
			
		||||
// #pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void DSP28335::ADC::sw_soc_seq1()
 | 
			
		||||
{
 | 
			
		||||
    if(m_mode == DSP28335::ADC::OPERATIONAL)
 | 
			
		||||
    {
 | 
			
		||||
        AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1;
 | 
			
		||||
        //
 | 
			
		||||
    }//if
 | 
			
		||||
    //
 | 
			
		||||
}//end
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
// #pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void DSP28335::ADC::sw_soc_seq2()
 | 
			
		||||
{
 | 
			
		||||
    if(m_mode == DSP28335::ADC::OPERATIONAL)
 | 
			
		||||
    {
 | 
			
		||||
        AdcRegs.ADCTRL2.bit.SOC_SEQ2 = 1;
 | 
			
		||||
        //
 | 
			
		||||
    }//if
 | 
			
		||||
    //
 | 
			
		||||
}//end
 | 
			
		||||
 | 
			
		||||
// #pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void DSP28335::ADC::interrupt_ack()
 | 
			
		||||
{
 | 
			
		||||
    m_status = true;
 | 
			
		||||
 | 
			
		||||
    //AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;
 | 
			
		||||
    //PieCtrlRegs.PIEACK.all |= PIEACK_GROUP1;
 | 
			
		||||
 | 
			
		||||
    // Reinitialize for next ADC sequence
 | 
			
		||||
    AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1;         // Reset SEQ1
 | 
			
		||||
    AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;       // Clear INT SEQ1 bit
 | 
			
		||||
    PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;   // Acknowledge interrupt to PIE
 | 
			
		||||
    //
 | 
			
		||||
}//end
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
} /* namespace DSP28335 */
 | 
			
		||||
@ -1,39 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * ADC.h
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "F28335/DSP28x_Project.h"
 | 
			
		||||
 | 
			
		||||
#include "DSP28335/CPUBase.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef DSP28335_ADC_H_
 | 
			
		||||
#define DSP28335_ADC_H_
 | 
			
		||||
 | 
			
		||||
namespace DSP28335
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
class ADC: public DSP28335::CPUBase
 | 
			
		||||
{
 | 
			
		||||
private:
 | 
			
		||||
    bool m_status;
 | 
			
		||||
public:
 | 
			
		||||
    ADC();
 | 
			
		||||
    void setup();
 | 
			
		||||
public:
 | 
			
		||||
    bool is_ready();
 | 
			
		||||
    void clear_status();
 | 
			
		||||
public:
 | 
			
		||||
    void sw_soc_seq1();
 | 
			
		||||
    void sw_soc_seq2();
 | 
			
		||||
public:
 | 
			
		||||
    void interrupt_ack();
 | 
			
		||||
    //
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
} /* namespace DSP28335 */
 | 
			
		||||
 | 
			
		||||
#endif /* DSP28335_ADC_H_ */
 | 
			
		||||
@ -1,117 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * CPUCore.cpp
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "DSP28335/CPU.h"
 | 
			
		||||
 | 
			
		||||
namespace DSP28335
 | 
			
		||||
{
 | 
			
		||||
//CONSTRUCTOR
 | 
			
		||||
CPU::CPU():
 | 
			
		||||
        DSP28335::CPUBase(),
 | 
			
		||||
        scib(ScibRegs),
 | 
			
		||||
        // scic(ScicRegs),
 | 
			
		||||
        // cpu_timers(CpuTimer0),
 | 
			
		||||
        // epwm(),
 | 
			
		||||
        // ecana(),
 | 
			
		||||
        // ecanb(),
 | 
			
		||||
        // eqep1(),
 | 
			
		||||
        // period_measure(DSP28335::MeasureTimePeriod(CpuTimer2)),
 | 
			
		||||
        interval_measure(DSP28335::MeasureTimeInterval(CpuTimer1)),
 | 
			
		||||
        // xintf(),
 | 
			
		||||
        // dout(),
 | 
			
		||||
        // m_counter_startup(0),
 | 
			
		||||
        // m_counter_sync(0),
 | 
			
		||||
        _execute(&CPU::_execute_undef)
 | 
			
		||||
//
 | 
			
		||||
{}//end CONSTRUCTOR
 | 
			
		||||
 | 
			
		||||
void CPU::setup(DSP28335::CPUSetup& setup)
 | 
			
		||||
{
 | 
			
		||||
    // adc.setup();
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    //
 | 
			
		||||
    scib.setup(setup.scib);
 | 
			
		||||
    //
 | 
			
		||||
    // scic.setup(setup.scic);
 | 
			
		||||
    InitCpuTimers();
 | 
			
		||||
    // cpu_timers.setup(setup.timers);
 | 
			
		||||
    
 | 
			
		||||
    // epwm.setup(setup.epwm);
 | 
			
		||||
    
 | 
			
		||||
    // xintf.setup(setup.xintf);
 | 
			
		||||
    
 | 
			
		||||
    // period_measure.set_magic((Uint32)0);
 | 
			
		||||
    // period_measure.reset();
 | 
			
		||||
    //
 | 
			
		||||
    interval_measure.set_magic((Uint32)0);
 | 
			
		||||
    interval_measure.reset();
 | 
			
		||||
    //
 | 
			
		||||
    // ecana.setup(setup.ecana);
 | 
			
		||||
    // //
 | 
			
		||||
    // ecanb.setup(setup.ecanb);
 | 
			
		||||
 | 
			
		||||
    // eqep1.setup(setup.eqep1);
 | 
			
		||||
 | 
			
		||||
    // dout.setup(setup.dout);
 | 
			
		||||
 | 
			
		||||
    // m_counter_startup = setup.startup_period;
 | 
			
		||||
    // m_counter_sync = setup.period_sync;
 | 
			
		||||
 | 
			
		||||
    if(//adc.compare(DSP28335::ADC::OPERATIONAL) &&
 | 
			
		||||
        //scib.compare(DSP28335::SCIB::OPERATIONAL) &&
 | 
			
		||||
        //scic.compare(DSP28335::SCIC::OPERATIONAL) &&
 | 
			
		||||
        // cpu_timers.compare(DSP28335::CPUTimers::OPERATIONAL) // &&
 | 
			
		||||
        // epwm.compare(DSP28335::EPWM::OPERATIONAL) &&
 | 
			
		||||
        // xintf.compare(DSP28335::XINTF::OPERATIONAL) &&
 | 
			
		||||
        // ecana.compare(DSP28335::ECANA::OPERATIONAL) &&
 | 
			
		||||
        // ecanb.compare(DSP28335::ECANB::OPERATIONAL) &&
 | 
			
		||||
        // eqep1.compare(DSP28335::EQEP1::OPERATIONAL) &&
 | 
			
		||||
        // dout.compare(DSP28335::DiscreteOutputs::OPERATIONAL)
 | 
			
		||||
    true)
 | 
			
		||||
    {
 | 
			
		||||
        m_mode = DSP28335::CPUBase::OPERATIONAL;
 | 
			
		||||
        //_execute = &CPUCore::_execute_mode_i;
 | 
			
		||||
        //_execute = &CPUCore::_execute_mode_500HZ;
 | 
			
		||||
        _execute = &CPU::_execute_undef;
 | 
			
		||||
        // epwm.set_actions();
 | 
			
		||||
        //
 | 
			
		||||
    }//if
 | 
			
		||||
    //
 | 
			
		||||
}//end
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// #pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void CPU::execute()
 | 
			
		||||
{
 | 
			
		||||
    (this->*_execute)();
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
void CPU::_execute_undef()
 | 
			
		||||
{}//
 | 
			
		||||
//
 | 
			
		||||
// #pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void CPU::_execute_mode_i()
 | 
			
		||||
{
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
// #pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void CPU::_execute_mode_ii()
 | 
			
		||||
{
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
// #pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void CPU::_execute_mode_iii()
 | 
			
		||||
{}//
 | 
			
		||||
//
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
} /* namespace DSP28335 */
 | 
			
		||||
@ -1,120 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * SYSCore.h
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "F28335/DSP28x_Project.h"
 | 
			
		||||
 | 
			
		||||
#include "DSP28335/ADC.h"
 | 
			
		||||
#include "DSP28335/CPUTimers.h"
 | 
			
		||||
#include "DSP28335/DiscreteOutputs.h"
 | 
			
		||||
#include "DSP28335/ECANA.h"
 | 
			
		||||
#include "DSP28335/ECANB.h"
 | 
			
		||||
#include "DSP28335/EPWM.h"
 | 
			
		||||
#include "DSP28335/EQEP1.h"
 | 
			
		||||
#include "DSP28335/GPIO.h"
 | 
			
		||||
#include "DSP28335/CPUBase.h"
 | 
			
		||||
#include "DSP28335/MeasureTimeInterval.h"
 | 
			
		||||
#include "DSP28335/MeasureTimePeriod.h"
 | 
			
		||||
#include "DSP28335/MemoryZone.h"
 | 
			
		||||
#include "DSP28335/MemoryZone0.h"
 | 
			
		||||
#include "DSP28335/MemoryZone7.h"
 | 
			
		||||
#include "DSP28335/SCIA.h"
 | 
			
		||||
#include "DSP28335/SCIB.h"
 | 
			
		||||
#include "DSP28335/SCIBase.h"
 | 
			
		||||
#include "DSP28335/SCIC.h"
 | 
			
		||||
#include "DSP28335/SPIBase.h"
 | 
			
		||||
#include "DSP28335/SPIA.h"
 | 
			
		||||
#include "DSP28335/XINTF.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef DSP28335_CPUCORE_H_
 | 
			
		||||
#define DSP28335_CPUCORE_H_
 | 
			
		||||
 | 
			
		||||
namespace DSP28335
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct CPUSetup
 | 
			
		||||
{
 | 
			
		||||
    DSP28335::SCISetup               scib;
 | 
			
		||||
    DSP28335::SCISetup               scic;
 | 
			
		||||
    DSP28335::CPUTimersSetup         timers;
 | 
			
		||||
    DSP28335::EPWMSetup              epwm;
 | 
			
		||||
    DSP28335::XINTFSetup             xintf;
 | 
			
		||||
    DSP28335::ECANASetup             ecana;
 | 
			
		||||
    DSP28335::ECANBSetup             ecanb;
 | 
			
		||||
    DSP28335::EQEP1Setup             eqep1;
 | 
			
		||||
    DSP28335::DiscreteOutputsSetup   dout;
 | 
			
		||||
    Uint16                           period_sync;
 | 
			
		||||
    Uint16                           startup_period;
 | 
			
		||||
    CPUSetup():
 | 
			
		||||
        scib(),
 | 
			
		||||
        scic(),
 | 
			
		||||
        timers(),
 | 
			
		||||
        epwm(),
 | 
			
		||||
        xintf(),
 | 
			
		||||
        ecana(),
 | 
			
		||||
        ecanb(),
 | 
			
		||||
        eqep1(),
 | 
			
		||||
        dout(),
 | 
			
		||||
        period_sync(0),
 | 
			
		||||
        startup_period(0)
 | 
			
		||||
    {}
 | 
			
		||||
};//end SYSCoreSetup
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct CPUConfiguration
 | 
			
		||||
{
 | 
			
		||||
    DSP28335::SCIConfiguration      scib;
 | 
			
		||||
    DSP28335::SCIConfiguration      scic;
 | 
			
		||||
    DSP28335::EPWMConfiguration     epwm;
 | 
			
		||||
    CPUConfiguration():
 | 
			
		||||
        scib(),
 | 
			
		||||
        scic(),
 | 
			
		||||
        epwm()
 | 
			
		||||
    {}
 | 
			
		||||
};//CPUConfiguration
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class CPU: public DSP28335::CPUBase
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    // DSP28335::GPIO                   gpio;
 | 
			
		||||
    DSP28335::SCIB                   scib;
 | 
			
		||||
    // DSP28335::SCIC                   scic;
 | 
			
		||||
    // DSP28335::CPUTimers              cpu_timers;
 | 
			
		||||
    // DSP28335::EPWM                   epwm;
 | 
			
		||||
    // DSP28335::MeasureTimePeriod      period_measure;
 | 
			
		||||
    DSP28335::MeasureTimeInterval    interval_measure;
 | 
			
		||||
    // DSP28335::XINTF                  xintf;
 | 
			
		||||
    // DSP28335::ECANA                  ecana;
 | 
			
		||||
    // DSP28335::ECANB                  ecanb;
 | 
			
		||||
    // DSP28335::EQEP1                  eqep1;
 | 
			
		||||
    // DSP28335::DiscreteOutputs        dout;
 | 
			
		||||
private:
 | 
			
		||||
    // Uint16 m_counter_startup;
 | 
			
		||||
    // Uint16 m_counter_sync;
 | 
			
		||||
public:
 | 
			
		||||
    CPU();
 | 
			
		||||
public:
 | 
			
		||||
    void setup(DSP28335::CPUSetup& setup);
 | 
			
		||||
    void get_hard_code_setup(DSP28335::CPUSetup& hsetup);
 | 
			
		||||
public:
 | 
			
		||||
    void execute();
 | 
			
		||||
private:
 | 
			
		||||
    void (CPU::*_execute)();
 | 
			
		||||
    void _execute_undef();
 | 
			
		||||
    void _execute_mode_i();
 | 
			
		||||
    void _execute_mode_ii();
 | 
			
		||||
    void _execute_mode_iii();
 | 
			
		||||
    //
 | 
			
		||||
};// CPU
 | 
			
		||||
 | 
			
		||||
} /* namespace DSP28335 */
 | 
			
		||||
 | 
			
		||||
#endif /* DSP28335_CPUCORE_H_ */
 | 
			
		||||
@ -1,89 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * SYSCoreHardCodeSetup.cpp
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "DSP28335/CPU.h"
 | 
			
		||||
 | 
			
		||||
namespace DSP28335
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
void DSP28335::CPU::get_hard_code_setup(DSP28335::CPUSetup& hsetup)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    // At startup number synchronization pwm's periods
 | 
			
		||||
    hsetup.startup_period = 20;
 | 
			
		||||
 | 
			
		||||
    // synchronization every pwm's cycle
 | 
			
		||||
    hsetup.period_sync = 5;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    //
 | 
			
		||||
    // SCIB - interface with monitor? RS485, MODBUS RTU
 | 
			
		||||
    //
 | 
			
		||||
    hsetup.scib.config.baudrate = SCIB_BAUDRATE_DEFAULT;
 | 
			
		||||
    hsetup.scib.config.parity   = SCIB_PARITY_DEFAULT;
 | 
			
		||||
    hsetup.scib.config.stopbits = SCIB_STOPBITS_DEFAULT;
 | 
			
		||||
    hsetup.scib.config.lenght   = SCIB_LENGHT_DEFAULT;
 | 
			
		||||
    hsetup.scib.gpio_setup      = SCIB_GPIO_SETUP_DEFAULT;
 | 
			
		||||
 | 
			
		||||
    //
 | 
			
		||||
    // SCIC - internal interface
 | 
			
		||||
    //
 | 
			
		||||
    hsetup.scic.config.baudrate = SCIC_BAUDRATE_DEFAULT;
 | 
			
		||||
    hsetup.scic.config.parity   = SCIC_PARITY_DEFAULT;
 | 
			
		||||
    hsetup.scic.config.stopbits = SCIC_STOPBITS_DEFAULT;
 | 
			
		||||
    hsetup.scic.config.lenght   = SCIC_LENGHT_DEFAULT;
 | 
			
		||||
    hsetup.scic.gpio_setup      = SCIC_GPIO_SETUP_DEFAULT;
 | 
			
		||||
 | 
			
		||||
    //
 | 
			
		||||
    // CPU Timers
 | 
			
		||||
    //
 | 
			
		||||
    hsetup.timers.frequency = 150.0;     //150MHz
 | 
			
		||||
    hsetup.timers.period = 1000.0;       //1000us
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    //
 | 
			
		||||
    // EPWM
 | 
			
		||||
    //
 | 
			
		||||
    hsetup.epwm.parameters.fpwm             = 500; //Hz
 | 
			
		||||
    hsetup.epwm.parameters.pulse_sync       = 1.0e-6; //s
 | 
			
		||||
    hsetup.epwm.parameters.pulse_adc_soc    = 32.0e-6; //s
 | 
			
		||||
    hsetup.epwm.parameters.adc_soc_offset   = FP_ZERO; //relative
 | 
			
		||||
    hsetup.epwm.parameters.adc_soc_quantity = 2;
 | 
			
		||||
    hsetup.epwm.gpio_setup = &DSP28335::GPIO::gpio_epwm_setup;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    //
 | 
			
		||||
    // XINTF
 | 
			
		||||
    //
 | 
			
		||||
    hsetup.xintf.gpio_setup = &DSP28335::GPIO::gpio_xintf_16bit_setup;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    //
 | 
			
		||||
    // ECANA
 | 
			
		||||
    //
 | 
			
		||||
    hsetup.ecana.gpio_setup = &DSP28335::GPIO::gpio_cana_setup;
 | 
			
		||||
 | 
			
		||||
    //
 | 
			
		||||
    // ECANB
 | 
			
		||||
    //
 | 
			
		||||
    hsetup.ecanb.gpio_setup = &DSP28335::GPIO::gpio_canb_setup;
 | 
			
		||||
 | 
			
		||||
    //
 | 
			
		||||
    // EQEP
 | 
			
		||||
    //
 | 
			
		||||
    hsetup.eqep1.gpio_setup = &DSP28335::GPIO::gpio_eqep_setup;
 | 
			
		||||
 | 
			
		||||
    //
 | 
			
		||||
    // Discrete Outputs
 | 
			
		||||
    //
 | 
			
		||||
    hsetup.dout.gpio_setup = &DSP28335::GPIO::gpio_dicrete_outputs_setup;
 | 
			
		||||
 | 
			
		||||
    //
 | 
			
		||||
}//end
 | 
			
		||||
 | 
			
		||||
} /* namespace DSP28335 */
 | 
			
		||||
@ -1,40 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * DiscreteOutputs.cpp
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "DSP28335/DiscreteOutputs.h"
 | 
			
		||||
 | 
			
		||||
namespace DSP28335
 | 
			
		||||
{
 | 
			
		||||
//CONSTRUCTOR
 | 
			
		||||
DiscreteOutputs::DiscreteOutputs():
 | 
			
		||||
        DSP28335::CPUBase(),
 | 
			
		||||
        _gpio_setup(&DSP28335::GPIO::gpio_dicrete_outputs_setup)
 | 
			
		||||
{}//CONSTRUCTOR
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void DiscreteOutputs::setup(const DiscreteOutputsSetup& setup)
 | 
			
		||||
{
 | 
			
		||||
    if(m_mode == DSP28335::DiscreteOutputs::UNDEFINED)
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        if(setup.gpio_setup != 0)
 | 
			
		||||
        {
 | 
			
		||||
            _gpio_setup = setup.gpio_setup;
 | 
			
		||||
            (*_gpio_setup)();
 | 
			
		||||
 | 
			
		||||
            m_mode = DSP28335::DiscreteOutputs::OPERATIONAL;
 | 
			
		||||
            //
 | 
			
		||||
        }//if
 | 
			
		||||
        //
 | 
			
		||||
    }//if
 | 
			
		||||
   //
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
 | 
			
		||||
} /* namespace DSP28335 */
 | 
			
		||||
@ -1,39 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * DiscreteOutputs.h
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "F28335/DSP28x_Project.h"
 | 
			
		||||
 | 
			
		||||
#include "DSP28335/CPUBase.h"
 | 
			
		||||
#include "DSP28335/GPIO.h"
 | 
			
		||||
 | 
			
		||||
#ifndef DSP28335_DISCRETEOUTPUTS_H_
 | 
			
		||||
#define DSP28335_DISCRETEOUTPUTS_H_
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace DSP28335
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct DiscreteOutputsSetup: public DSP28335::CPUBaseSetup
 | 
			
		||||
{
 | 
			
		||||
    DiscreteOutputsSetup():
 | 
			
		||||
        DSP28335::CPUBaseSetup()
 | 
			
		||||
    {}
 | 
			
		||||
};//
 | 
			
		||||
 | 
			
		||||
class DiscreteOutputs: public DSP28335::CPUBase
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    DiscreteOutputs();
 | 
			
		||||
    void setup(const DiscreteOutputsSetup& setup);
 | 
			
		||||
private:
 | 
			
		||||
    void (*_gpio_setup)();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
} /* namespace DSP28335 */
 | 
			
		||||
 | 
			
		||||
#endif /* DSP28335_DISCRETEOUTPUTS_H_ */
 | 
			
		||||
@ -1,40 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * ECANA.cpp
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "DSP28335/ECANA.h"
 | 
			
		||||
 | 
			
		||||
namespace DSP28335
 | 
			
		||||
{
 | 
			
		||||
//CONSTRUCTOR
 | 
			
		||||
ECANA::ECANA():
 | 
			
		||||
        CPUBase(),
 | 
			
		||||
        _gpio_setup(&DSP28335::GPIO::gpio_cana_setup)
 | 
			
		||||
{}//CONSTRUCTOR
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void ECANA::setup(const ECANASetup& setup)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    if(m_mode == DSP28335::ECANA::UNDEFINED)
 | 
			
		||||
    {
 | 
			
		||||
        InitECana();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        if(setup.gpio_setup != 0)
 | 
			
		||||
        {
 | 
			
		||||
            _gpio_setup = setup.gpio_setup;
 | 
			
		||||
            (*_gpio_setup)();
 | 
			
		||||
 | 
			
		||||
            m_mode = DSP28335::ECANA::OPERATIONAL;
 | 
			
		||||
            //
 | 
			
		||||
        }//if
 | 
			
		||||
        //
 | 
			
		||||
    }//if
 | 
			
		||||
   //
 | 
			
		||||
}//
 | 
			
		||||
 | 
			
		||||
} /* namespace DSP28335 */
 | 
			
		||||
@ -1,38 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * ECANA.h
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "F28335/DSP28x_Project.h"
 | 
			
		||||
 | 
			
		||||
#include "DSP28335/CPUBase.h"
 | 
			
		||||
#include "DSP28335/GPIO.h"
 | 
			
		||||
 | 
			
		||||
#ifndef DSP28335_ECANA_H_
 | 
			
		||||
#define DSP28335_ECANA_H_
 | 
			
		||||
 | 
			
		||||
namespace DSP28335
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
struct ECANASetup: public DSP28335::CPUBaseSetup
 | 
			
		||||
{
 | 
			
		||||
    ECANASetup():
 | 
			
		||||
        DSP28335::CPUBaseSetup()
 | 
			
		||||
    {}
 | 
			
		||||
};//ECANASetup
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ECANA: public DSP28335::CPUBase
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    ECANA();
 | 
			
		||||
    void setup(const ECANASetup& setup);
 | 
			
		||||
private:
 | 
			
		||||
    void (*_gpio_setup)();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
} /* namespace DSP28335 */
 | 
			
		||||
 | 
			
		||||
#endif /* DSP28335_ECANA_H_ */
 | 
			
		||||
@ -1,39 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * ECANB.cpp
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "DSP28335/ECANB.h"
 | 
			
		||||
 | 
			
		||||
namespace DSP28335
 | 
			
		||||
{
 | 
			
		||||
//CONSTRUCTOR
 | 
			
		||||
ECANB::ECANB():
 | 
			
		||||
        CPUBase(),
 | 
			
		||||
        _gpio_setup(&DSP28335::GPIO::gpio_canb_setup)
 | 
			
		||||
{}//CONSTRUCTOR
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void ECANB::setup(const ECANBSetup& setup)
 | 
			
		||||
{
 | 
			
		||||
    if(m_mode == DSP28335::ECANB::UNDEFINED)
 | 
			
		||||
    {
 | 
			
		||||
        InitECanb();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        if(setup.gpio_setup != 0)
 | 
			
		||||
        {
 | 
			
		||||
            _gpio_setup = setup.gpio_setup;
 | 
			
		||||
            (*_gpio_setup)();
 | 
			
		||||
 | 
			
		||||
            m_mode = DSP28335::ECANB::OPERATIONAL;
 | 
			
		||||
            //
 | 
			
		||||
        }//if
 | 
			
		||||
        //
 | 
			
		||||
    }//if
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
 | 
			
		||||
} /* namespace DSP28335 */
 | 
			
		||||
@ -1,41 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * ECANB.h
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "F28335/DSP28x_Project.h"
 | 
			
		||||
 | 
			
		||||
#include "DSP28335/CPUBase.h"
 | 
			
		||||
#include "DSP28335/GPIO.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef CPU_ECANB_H_
 | 
			
		||||
#define CPU_ECANB_H_
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace DSP28335
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
struct ECANBSetup: public DSP28335::CPUBaseSetup
 | 
			
		||||
{
 | 
			
		||||
    ECANBSetup():
 | 
			
		||||
        DSP28335::CPUBaseSetup()
 | 
			
		||||
    {}
 | 
			
		||||
};//ECANBSetup
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ECANB: public CPUBase
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    ECANB();
 | 
			
		||||
    void setup(const ECANBSetup& setup);
 | 
			
		||||
private:
 | 
			
		||||
    void (*_gpio_setup)();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
} /* namespace DSP28335 */
 | 
			
		||||
 | 
			
		||||
#endif /* CPU_ECANB_H_ */
 | 
			
		||||
@ -1,768 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * EPWM.cpp
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "DSP28335/EPWM.h"
 | 
			
		||||
 | 
			
		||||
namespace DSP28335
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//CONSTRUCTOR
 | 
			
		||||
EPWMConfigModificator::EPWMConfigModificator():
 | 
			
		||||
        m_config(),
 | 
			
		||||
        modify(true)
 | 
			
		||||
{}//CONSTRUCTOR
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// #pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void EPWMConfigModificator::set_config(EPWMConfiguration& refconfig)
 | 
			
		||||
{
 | 
			
		||||
    if(m_config.fpwm != refconfig.fpwm)
 | 
			
		||||
    {
 | 
			
		||||
        m_config.fpwm = refconfig.fpwm;
 | 
			
		||||
        modify = true;
 | 
			
		||||
    }//
 | 
			
		||||
 | 
			
		||||
    if(m_config.pulse_sync != refconfig.pulse_sync)
 | 
			
		||||
    {
 | 
			
		||||
        m_config.pulse_sync = refconfig.pulse_sync;
 | 
			
		||||
        modify = true;
 | 
			
		||||
    }//
 | 
			
		||||
 | 
			
		||||
    if(m_config.pulse_adc_soc != refconfig.pulse_adc_soc)
 | 
			
		||||
    {
 | 
			
		||||
        m_config.pulse_adc_soc = refconfig.pulse_adc_soc;
 | 
			
		||||
        modify = true;
 | 
			
		||||
    }//
 | 
			
		||||
    //
 | 
			
		||||
    if(m_config.adc_soc_offset != refconfig.adc_soc_offset)
 | 
			
		||||
    {
 | 
			
		||||
        m_config.adc_soc_offset = refconfig.adc_soc_offset;
 | 
			
		||||
        modify = true;
 | 
			
		||||
    }//
 | 
			
		||||
    //
 | 
			
		||||
    if(m_config.adc_soc_quantity != refconfig.adc_soc_quantity)
 | 
			
		||||
    {
 | 
			
		||||
        m_config.adc_soc_quantity = refconfig.adc_soc_quantity;
 | 
			
		||||
        modify = true;
 | 
			
		||||
    }//
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
// #pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
EPWMConfiguration EPWMConfigModificator::get_config()
 | 
			
		||||
{
 | 
			
		||||
    return m_config;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
// #pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void EPWMConfigModificator::reset()
 | 
			
		||||
{
 | 
			
		||||
    modify = false;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
// #pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void EPWMConfigModificator::set_pwm_frquency(float fpwm)
 | 
			
		||||
{
 | 
			
		||||
    if(m_config.fpwm != fpwm)
 | 
			
		||||
    {
 | 
			
		||||
        m_config.fpwm = fpwm;
 | 
			
		||||
        modify = true;
 | 
			
		||||
    }//
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
// #pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void EPWMConfigModificator::set_pulse_sync(float pulse_sync)
 | 
			
		||||
{
 | 
			
		||||
    if(m_config.pulse_sync != pulse_sync)
 | 
			
		||||
    {
 | 
			
		||||
        m_config.pulse_sync = pulse_sync;
 | 
			
		||||
        modify = true;
 | 
			
		||||
    }//
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
// #pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void EPWMConfigModificator::set_pulse_adc_soc(float pulse_adc_soc)
 | 
			
		||||
{
 | 
			
		||||
    if(m_config.pulse_adc_soc != pulse_adc_soc)
 | 
			
		||||
    {
 | 
			
		||||
        m_config.pulse_adc_soc = pulse_adc_soc;
 | 
			
		||||
        modify = true;
 | 
			
		||||
    }//
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
// #pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void EPWMConfigModificator::set_adc_soc_offset(float adc_soc_offset)
 | 
			
		||||
{
 | 
			
		||||
    if(m_config.adc_soc_offset != adc_soc_offset)
 | 
			
		||||
    {
 | 
			
		||||
        m_config.adc_soc_offset = adc_soc_offset;
 | 
			
		||||
        modify = true;
 | 
			
		||||
    }//
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
// #pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void EPWMConfigModificator::set_adc_soc_quantity(Uint16 adc_soc_quantity)
 | 
			
		||||
{
 | 
			
		||||
    if(m_config.adc_soc_quantity != adc_soc_quantity)
 | 
			
		||||
    {
 | 
			
		||||
        m_config.adc_soc_quantity = adc_soc_quantity;
 | 
			
		||||
        modify = true;
 | 
			
		||||
    }//
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
// #pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
float EPWMConfigModificator::get_pwm_frquency()
 | 
			
		||||
{
 | 
			
		||||
    return m_config.fpwm;
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
// #pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
float EPWMConfigModificator::get_pulse_sync()
 | 
			
		||||
{
 | 
			
		||||
    return m_config.pulse_sync;
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
// #pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
float EPWMConfigModificator::get_pulse_adc_soc()
 | 
			
		||||
{
 | 
			
		||||
    return m_config.pulse_adc_soc;
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
// #pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
float EPWMConfigModificator::get_adc_soc_offset()
 | 
			
		||||
{
 | 
			
		||||
    return m_config.adc_soc_offset;
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
// #pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
Uint16 EPWMConfigModificator::get_adc_soc_quantity()
 | 
			
		||||
{
 | 
			
		||||
    return m_config.adc_soc_quantity;
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//CONSTRUCTOR
 | 
			
		||||
EPWM::EPWM():
 | 
			
		||||
        DSP28335::CPUBase(),
 | 
			
		||||
        m_configuration_current(),
 | 
			
		||||
        m_configuration_new(),
 | 
			
		||||
        m_fcpu(150.0e6),
 | 
			
		||||
        m_timer_period(FP_ZERO),
 | 
			
		||||
        m_timer_step(FP_ZERO),
 | 
			
		||||
        m_time_sample_adc(FP_ZERO),
 | 
			
		||||
        m_clock_prescale_list(),
 | 
			
		||||
        m_high_speed_clock_prescale(),
 | 
			
		||||
        m_tbprd(FP_ZERO),
 | 
			
		||||
        m_clkdiv(0),
 | 
			
		||||
        m_hspclkdiv(0),
 | 
			
		||||
        m_cmpr_sync(0),
 | 
			
		||||
        m_cmpr_adc_offset(0),
 | 
			
		||||
        m_cmpr_adc_start(0),
 | 
			
		||||
        m_cmpr_adc_stop(0),
 | 
			
		||||
        m_cmpr_adc_width(0),
 | 
			
		||||
        m_cmpr_adc_step(0),
 | 
			
		||||
        m_adc_soc_quantity(0),
 | 
			
		||||
        m_adc_soc_counter(0),
 | 
			
		||||
        _epwm2_adc_drive(0),
 | 
			
		||||
        status(),
 | 
			
		||||
        _gpio_setup(0)
 | 
			
		||||
//
 | 
			
		||||
{
 | 
			
		||||
    m_clock_prescale_list[0] = 1.0;
 | 
			
		||||
    m_clock_prescale_list[1] = 2.0;
 | 
			
		||||
    m_clock_prescale_list[2] = 4.0;
 | 
			
		||||
    m_clock_prescale_list[3] = 8.0;
 | 
			
		||||
    m_clock_prescale_list[4] = 16.0;
 | 
			
		||||
    m_clock_prescale_list[5] = 32.0;
 | 
			
		||||
    m_clock_prescale_list[6] = 64.0;
 | 
			
		||||
    m_clock_prescale_list[7] = 128.0;
 | 
			
		||||
    //
 | 
			
		||||
    m_high_speed_clock_prescale[0] = 1.0;
 | 
			
		||||
    m_high_speed_clock_prescale[1] = 2.0;
 | 
			
		||||
    m_high_speed_clock_prescale[2] = 4.0;
 | 
			
		||||
    m_high_speed_clock_prescale[3] = 6.0;
 | 
			
		||||
    m_high_speed_clock_prescale[4] = 8.0;
 | 
			
		||||
    m_high_speed_clock_prescale[5] = 10.0;
 | 
			
		||||
    m_high_speed_clock_prescale[6] = 12.0;
 | 
			
		||||
    m_high_speed_clock_prescale[7] = 14.0;
 | 
			
		||||
    //
 | 
			
		||||
}//end CONSTRUCTOR
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void EPWM::setup(const EPWMSetup& setup)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    m_status = true;
 | 
			
		||||
    //m_status &= m_mode == DSP28335::EPWM::UNDEFINED ? true : false;
 | 
			
		||||
    m_status &= setup.parameters.fpwm > (float)(5.0) ? true : false;
 | 
			
		||||
    m_status &= setup.parameters.pulse_sync != FP_ZERO ? true : false;
 | 
			
		||||
    m_status &= setup.parameters.pulse_adc_soc != FP_ZERO ? true : false;
 | 
			
		||||
    m_status &= setup.parameters.adc_soc_offset >= FP_ZERO ? true : false;
 | 
			
		||||
    m_status &= setup.parameters.adc_soc_quantity >= 1 ? true : false;
 | 
			
		||||
    m_status &= setup.gpio_setup != 0 ? true : false;
 | 
			
		||||
    //
 | 
			
		||||
    if(m_status)
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        m_configuration_current = setup.parameters;
 | 
			
		||||
 | 
			
		||||
        m_tbprd = 0;
 | 
			
		||||
        m_clkdiv = 0;
 | 
			
		||||
        m_hspclkdiv = 0;
 | 
			
		||||
        m_cmpr_sync = 0;
 | 
			
		||||
        //
 | 
			
		||||
        m_cmpr_adc_start = 0;
 | 
			
		||||
        m_cmpr_adc_stop = 0;
 | 
			
		||||
        m_cmpr_adc_width = 0;
 | 
			
		||||
        m_cmpr_adc_step = 0;
 | 
			
		||||
        //
 | 
			
		||||
        m_adc_soc_quantity = setup.parameters.adc_soc_quantity;
 | 
			
		||||
        m_adc_soc_counter = 0;
 | 
			
		||||
        //
 | 
			
		||||
        m_timer_period = m_fcpu/m_clock_prescale_list[m_clkdiv]/m_high_speed_clock_prescale[m_hspclkdiv]/setup.parameters.fpwm;
 | 
			
		||||
        //
 | 
			
		||||
        while(m_timer_period>(float)(32767.0))
 | 
			
		||||
        {
 | 
			
		||||
            m_clkdiv++;
 | 
			
		||||
            if(m_clkdiv >= 8)
 | 
			
		||||
            {
 | 
			
		||||
                m_clkdiv = 0;
 | 
			
		||||
                m_hspclkdiv++;
 | 
			
		||||
                //
 | 
			
		||||
            }//if
 | 
			
		||||
            //
 | 
			
		||||
            m_timer_period = m_fcpu/m_clock_prescale_list[m_clkdiv]/m_high_speed_clock_prescale[m_hspclkdiv]/setup.parameters.fpwm;
 | 
			
		||||
            //
 | 
			
		||||
        }//while
 | 
			
		||||
        //
 | 
			
		||||
        m_timer_step = (m_clock_prescale_list[m_clkdiv] * m_high_speed_clock_prescale[m_hspclkdiv])/m_fcpu;
 | 
			
		||||
 | 
			
		||||
        m_tbprd = (Uint16)m_timer_period;
 | 
			
		||||
        m_cmpr_sync = m_tbprd - (Uint16)(setup.parameters.pulse_sync/m_timer_step);
 | 
			
		||||
 | 
			
		||||
        m_cmpr_adc_width = (Uint16)((float)(setup.parameters.pulse_adc_soc/m_timer_step));
 | 
			
		||||
        m_cmpr_adc_step = (Uint16)((float)((float)m_timer_period/((float)setup.parameters.adc_soc_quantity)));
 | 
			
		||||
        m_cmpr_adc_offset = (Uint16)((float)(m_timer_period * setup.parameters.adc_soc_offset));
 | 
			
		||||
        m_time_sample_adc = m_timer_step * ((float)m_cmpr_adc_step);
 | 
			
		||||
 | 
			
		||||
        status.all = 0;
 | 
			
		||||
        //
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        EALLOW;
 | 
			
		||||
        SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;
 | 
			
		||||
        EDIS;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        // Setup TBCLK
 | 
			
		||||
        EPwm1Regs.TBPRD = m_tbprd;                   // Set timer period 801 TBCLKs
 | 
			
		||||
        EPwm1Regs.TBPHS.half.TBPHS = 0x0000;           // Phase is 0
 | 
			
		||||
        EPwm1Regs.TBCTR = 0x0000;                      // Clear counter
 | 
			
		||||
 | 
			
		||||
        EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;             //
 | 
			
		||||
        EPwm1Regs.TBCTL.bit.PHSEN = 0x0;       //
 | 
			
		||||
        EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW;        //
 | 
			
		||||
        EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;   // Sync down-stream module
 | 
			
		||||
        //
 | 
			
		||||
        EPwm1Regs.TBCTL.bit.CLKDIV = m_clkdiv;
 | 
			
		||||
        EPwm1Regs.TBCTL.bit.HSPCLKDIV = m_hspclkdiv;
 | 
			
		||||
        //
 | 
			
		||||
        EPwm1Regs.TBCTL.bit.FREE_SOFT = 0;
 | 
			
		||||
 | 
			
		||||
        // Setup shadowing
 | 
			
		||||
        EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
 | 
			
		||||
        EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
 | 
			
		||||
        EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;  // Load on Zero
 | 
			
		||||
        EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
 | 
			
		||||
 | 
			
		||||
        // Set actions
 | 
			
		||||
        EPwm1Regs.AQCTLA.bit.CAU = AQ_SET;             // Set PWM1A on event A, up count
 | 
			
		||||
        EPwm1Regs.AQCTLA.bit.PRD = AQ_CLEAR;
 | 
			
		||||
        EPwm1Regs.AQCTLB.all = 0;
 | 
			
		||||
 | 
			
		||||
        EPwm1Regs.AQSFRC.bit.ACTSFA = 0;
 | 
			
		||||
        EPwm1Regs.AQSFRC.bit.ACTSFB = 0;
 | 
			
		||||
 | 
			
		||||
        EPwm1Regs.AQSFRC.bit.OTSFA = 0;
 | 
			
		||||
        EPwm1Regs.AQSFRC.bit.OTSFB = 0;
 | 
			
		||||
 | 
			
		||||
        EPwm1Regs.AQCSFRC.bit.CSFA = 0; // Forces a continuous low on output A
 | 
			
		||||
        EPwm1Regs.AQCSFRC.bit.CSFB = 0; // Forces a continuous low on output B
 | 
			
		||||
 | 
			
		||||
        // Dead-band
 | 
			
		||||
        EPwm1Regs.DBCTL.bit.OUT_MODE = 0;  // Enable module
 | 
			
		||||
        EPwm1Regs.DBCTL.bit.POLSEL = 0;       // Active High complementary
 | 
			
		||||
        EPwm1Regs.DBCTL.bit.IN_MODE = 0;      //
 | 
			
		||||
        EPwm1Regs.DBFED = 0;
 | 
			
		||||
        EPwm1Regs.DBRED = 0;
 | 
			
		||||
 | 
			
		||||
        // Set Compare values
 | 
			
		||||
        EPwm1Regs.CMPA.half.CMPA = m_cmpr_sync;          // Set compare A value
 | 
			
		||||
        EPwm1Regs.CMPB = 0;                // Set Compare B value
 | 
			
		||||
 | 
			
		||||
        // Interrupt where we will change the Compare Values
 | 
			
		||||
        //EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO;    // Select INT on Zero event
 | 
			
		||||
        EPwm1Regs.ETSEL.bit.INTSEL = ET_CTRU_CMPA;    // Select INT on equal to CMPA
 | 
			
		||||
        EPwm1Regs.ETSEL.bit.INTEN = 1;               // Enable INT
 | 
			
		||||
        //EPwm1Regs.ETSEL.bit.SOCASEL = ET_CTR_ZERO;     // SOCA equal to zero:  1-zero; 2-period
 | 
			
		||||
        //EPwm1Regs.ETSEL.bit.SOCAEN = 1;            // Disable INT EPWMxSOCA
 | 
			
		||||
        //EPwm1Regs.ETSEL.bit.SOCBSEL = 2              // SOCB equal to period
 | 
			
		||||
        //EPwm1Regs.ETSEL.bit.SOCBEN = 0;              // Disable INT EPWMxSOCB
 | 
			
		||||
 | 
			
		||||
        EPwm1Regs.ETPS.bit.INTPRD = ET_1ST;            //
 | 
			
		||||
        EPwm1Regs.ETPS.bit.INTCNT = 0;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        // PWM-Chopper
 | 
			
		||||
        EPwm1Regs.PCCTL.all = 0;     // PWM-Chopper Control Register
 | 
			
		||||
 | 
			
		||||
        // Trip-Zone Submodule
 | 
			
		||||
        EPwm1Regs.TZSEL.all = 0;     // Trip-Zone Select Register
 | 
			
		||||
        EPwm1Regs.TZCTL.all = 0;     // Trip-Zone Control Register
 | 
			
		||||
        EPwm1Regs.TZEINT.all = 0;        // Trip-Zone Enable Interrupt Register
 | 
			
		||||
        //EPwm1Regs.TZFLG.all = 0;       // Trip-Zone Flag Register
 | 
			
		||||
        //EPwm1Regs.TZCLR.all = 0;       // Trip-Zone Clear Register
 | 
			
		||||
        //EPwm1Regs.TZFRC.all = 0;       // Trip-Zone Force Register
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        // Setup TBCLK
 | 
			
		||||
        EPwm2Regs.TBPRD = m_tbprd;                   // Set timer period 801 TBCLKs
 | 
			
		||||
        EPwm2Regs.TBPHS.half.TBPHS = 0x0000;           // Phase is 0
 | 
			
		||||
        EPwm2Regs.TBCTR = 0x0000;                      // Clear counter
 | 
			
		||||
 | 
			
		||||
        EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;             //
 | 
			
		||||
        EPwm2Regs.TBCTL.bit.PHSEN = 0x0;       //
 | 
			
		||||
        EPwm2Regs.TBCTL.bit.PRDLD = TB_SHADOW;        //
 | 
			
		||||
        EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;   // Sync down-stream module
 | 
			
		||||
        //
 | 
			
		||||
        EPwm2Regs.TBCTL.bit.CLKDIV = m_clkdiv;;
 | 
			
		||||
        EPwm2Regs.TBCTL.bit.HSPCLKDIV = m_hspclkdiv;
 | 
			
		||||
        //
 | 
			
		||||
        EPwm2Regs.TBCTL.bit.FREE_SOFT = 0;
 | 
			
		||||
 | 
			
		||||
        // Setup shadowing
 | 
			
		||||
        EPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_IMMEDIATE;
 | 
			
		||||
        EPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
 | 
			
		||||
        EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;  // Load on Zero
 | 
			
		||||
        EPwm2Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        // Set actions
 | 
			
		||||
        EPwm2Regs.AQCTLA.bit.CAU = AQ_SET;             // Set PWM1A on event A, up count
 | 
			
		||||
        EPwm2Regs.AQCTLA.bit.PRD = AQ_CLEAR;
 | 
			
		||||
        EPwm2Regs.AQCTLB.all = 0;
 | 
			
		||||
 | 
			
		||||
        EPwm2Regs.AQSFRC.bit.ACTSFA = 0;
 | 
			
		||||
        EPwm2Regs.AQSFRC.bit.ACTSFB = 0;
 | 
			
		||||
 | 
			
		||||
        EPwm2Regs.AQSFRC.bit.OTSFA = 0;
 | 
			
		||||
        EPwm2Regs.AQSFRC.bit.OTSFB = 0;
 | 
			
		||||
 | 
			
		||||
        EPwm2Regs.AQCSFRC.bit.CSFA = 0; // Forces a continuous low on output A
 | 
			
		||||
        EPwm2Regs.AQCSFRC.bit.CSFB = 0; // Forces a continuous low on output B
 | 
			
		||||
 | 
			
		||||
        // Dead-band
 | 
			
		||||
        EPwm2Regs.DBCTL.bit.OUT_MODE = 0;  // Enable module
 | 
			
		||||
        EPwm2Regs.DBCTL.bit.POLSEL = 0;       // Active High complementary
 | 
			
		||||
        EPwm2Regs.DBCTL.bit.IN_MODE = 0;      //
 | 
			
		||||
        EPwm2Regs.DBFED = 0;
 | 
			
		||||
        EPwm2Regs.DBRED = 0;
 | 
			
		||||
 | 
			
		||||
        // Set Compare values
 | 
			
		||||
        EPwm2Regs.CMPA.half.CMPA = m_cmpr_adc_offset;          // Set compare A value
 | 
			
		||||
        EPwm2Regs.CMPB = 0;                // Set Compare B value
 | 
			
		||||
 | 
			
		||||
        // Interrupt where we will change the Compare Values
 | 
			
		||||
        EPwm2Regs.ETSEL.bit.INTSEL = ET_CTRU_CMPA;    //
 | 
			
		||||
        EPwm2Regs.ETSEL.bit.INTEN = 1;               // Enable INT
 | 
			
		||||
        //EPwm2Regs.ETSEL.bit.SOCASEL = ET_CTR_ZERO;     // SOCA equal to zero:  1-zero; 2-period
 | 
			
		||||
        //EPwm2Regs.ETSEL.bit.SOCAEN = 1;            // Disable INT EPWMxSOCA
 | 
			
		||||
        //EPwm2Regs.ETSEL.bit.SOCBSEL = 2              // SOCB equal to period
 | 
			
		||||
        //EPwm2Regs.ETSEL.bit.SOCBEN = 0;              // Disable INT EPWMxSOCB
 | 
			
		||||
 | 
			
		||||
        EPwm2Regs.ETPS.bit.INTPRD = ET_1ST;            //
 | 
			
		||||
        EPwm2Regs.ETPS.bit.INTCNT = 0;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        // Setup TBCLK
 | 
			
		||||
        EPwm5Regs.TBPRD = m_tbprd;           // Set timer period 801 TBCLKs
 | 
			
		||||
        EPwm5Regs.TBPHS.half.TBPHS = 0x0000;           // Phase is 0
 | 
			
		||||
        EPwm5Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;// Count up/down
 | 
			
		||||
        EPwm5Regs.TBCTL.bit.PHSEN = 0x0;       // Disable phase loading
 | 
			
		||||
        EPwm5Regs.TBCTL.bit.PRDLD = TB_SHADOW;        //
 | 
			
		||||
        EPwm5Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;   // Sync down-stream module
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        EPwm5Regs.TBCTL.bit.CLKDIV = m_clkdiv;;
 | 
			
		||||
        EPwm5Regs.TBCTL.bit.HSPCLKDIV = m_hspclkdiv;
 | 
			
		||||
        //
 | 
			
		||||
 | 
			
		||||
        EPwm5Regs.TBCTL.bit.FREE_SOFT = 0;
 | 
			
		||||
 | 
			
		||||
        // Setup shadowing
 | 
			
		||||
        EPwm5Regs.CMPCTL.bit.SHDWAMODE = 0;
 | 
			
		||||
        EPwm5Regs.CMPCTL.bit.SHDWBMODE = 0;
 | 
			
		||||
        EPwm5Regs.CMPCTL.bit.LOADAMODE = 0;  // Load on Zero
 | 
			
		||||
        EPwm5Regs.CMPCTL.bit.LOADBMODE = 0;
 | 
			
		||||
 | 
			
		||||
        // Set actions
 | 
			
		||||
        EPwm5Regs.AQCTLA.all = 0;
 | 
			
		||||
        EPwm5Regs.AQCTLB.bit.CAU = AQ_SET;           // Set PWM2B on event B, up count
 | 
			
		||||
        EPwm5Regs.AQCTLB.bit.PRD = AQ_CLEAR;
 | 
			
		||||
 | 
			
		||||
        EPwm5Regs.AQSFRC.bit.ACTSFA = 0;
 | 
			
		||||
        EPwm5Regs.AQSFRC.bit.ACTSFB = 0;
 | 
			
		||||
 | 
			
		||||
        EPwm5Regs.AQSFRC.bit.OTSFA = 0;
 | 
			
		||||
        EPwm5Regs.AQSFRC.bit.OTSFB = 0;
 | 
			
		||||
 | 
			
		||||
        EPwm5Regs.AQCSFRC.bit.CSFA = 0; // Forces a continuous low on output A
 | 
			
		||||
        EPwm5Regs.AQCSFRC.bit.CSFB = 0; // Forces a continuous low on output B
 | 
			
		||||
 | 
			
		||||
        // Dead-band
 | 
			
		||||
        EPwm5Regs.DBCTL.bit.OUT_MODE = 0;  // Enable module
 | 
			
		||||
        EPwm5Regs.DBCTL.bit.POLSEL = 0;       // Active Hi complementary
 | 
			
		||||
        EPwm5Regs.DBCTL.bit.IN_MODE = 0;      //
 | 
			
		||||
        EPwm5Regs.DBFED = 0;
 | 
			
		||||
        EPwm5Regs.DBRED = 0;
 | 
			
		||||
 | 
			
		||||
        // Set Compare values
 | 
			
		||||
        EPwm5Regs.CMPA.half.CMPA = m_cmpr_sync;             // Set compare A value
 | 
			
		||||
        EPwm5Regs.CMPB = 0;           // Set Compare B value
 | 
			
		||||
 | 
			
		||||
        // Interrupt where we will change the Compare Values
 | 
			
		||||
        EPwm5Regs.ETSEL.all = 0;
 | 
			
		||||
 | 
			
		||||
        EPwm5Regs.ETPS.all = 0;
 | 
			
		||||
 | 
			
		||||
        // PWM-Chopper
 | 
			
		||||
        EPwm5Regs.PCCTL.all = 0;        // PWM-Chopper Control Register
 | 
			
		||||
 | 
			
		||||
        // Trip-Zone Submodule
 | 
			
		||||
        EPwm5Regs.TZSEL.all = 0;        // Trip-Zone Select Register
 | 
			
		||||
        EPwm5Regs.TZCTL.all = 0;        // Trip-Zone Control Register
 | 
			
		||||
        EPwm5Regs.TZEINT.all = 0;       // Trip-Zone Enable Interrupt Register
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        // Setup TBCLK
 | 
			
		||||
        EPwm6Regs.TBPRD = m_tbprd;           // Set timer period 801 TBCLKs
 | 
			
		||||
        EPwm6Regs.TBPHS.half.TBPHS = 0x0000;           // Phase is 0
 | 
			
		||||
        EPwm6Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;// Count up/down
 | 
			
		||||
        EPwm6Regs.TBCTL.bit.PHSEN = 0x0;       // Disable phase loading
 | 
			
		||||
        EPwm6Regs.TBCTL.bit.PRDLD = TB_SHADOW;        //
 | 
			
		||||
        EPwm6Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;   // Sync down-stream module
 | 
			
		||||
        //
 | 
			
		||||
        EPwm6Regs.TBCTL.bit.CLKDIV = m_clkdiv;;
 | 
			
		||||
        EPwm6Regs.TBCTL.bit.HSPCLKDIV = m_hspclkdiv;
 | 
			
		||||
        //
 | 
			
		||||
        EPwm6Regs.TBCTL.bit.FREE_SOFT = 0;
 | 
			
		||||
 | 
			
		||||
        // Setup shadowing
 | 
			
		||||
        EPwm6Regs.CMPCTL.bit.SHDWAMODE = 0;
 | 
			
		||||
        EPwm6Regs.CMPCTL.bit.SHDWBMODE = 0;
 | 
			
		||||
        EPwm6Regs.CMPCTL.bit.LOADAMODE = 0;  // Load on Zero
 | 
			
		||||
        EPwm6Regs.CMPCTL.bit.LOADBMODE = 0;
 | 
			
		||||
 | 
			
		||||
        // Set actions
 | 
			
		||||
        EPwm6Regs.AQCTLA.bit.CAU = AQ_SET;             // Set PWM2A on event A, up count
 | 
			
		||||
        EPwm6Regs.AQCTLA.bit.PRD = AQ_CLEAR;
 | 
			
		||||
        EPwm6Regs.AQCTLB.bit.CAU = AQ_SET;           // Set PWM2B on event B, up count
 | 
			
		||||
        EPwm6Regs.AQCTLB.bit.PRD = AQ_CLEAR;
 | 
			
		||||
 | 
			
		||||
        EPwm6Regs.AQSFRC.bit.ACTSFA = 0;
 | 
			
		||||
        EPwm6Regs.AQSFRC.bit.ACTSFB = 0;
 | 
			
		||||
 | 
			
		||||
        EPwm6Regs.AQSFRC.bit.OTSFA = 0;
 | 
			
		||||
        EPwm6Regs.AQSFRC.bit.OTSFB = 0;
 | 
			
		||||
 | 
			
		||||
        EPwm6Regs.AQCSFRC.bit.CSFA = 0; // Forces a continuous low on output A
 | 
			
		||||
        EPwm6Regs.AQCSFRC.bit.CSFB = 0; // Forces a continuous low on output B
 | 
			
		||||
 | 
			
		||||
        // Dead-band
 | 
			
		||||
        EPwm6Regs.DBCTL.bit.OUT_MODE = 0;  // Enable module
 | 
			
		||||
        EPwm6Regs.DBCTL.bit.POLSEL = 0;       // Active Hi complementary
 | 
			
		||||
        EPwm6Regs.DBCTL.bit.IN_MODE = 0;      //
 | 
			
		||||
        EPwm6Regs.DBFED = 0;
 | 
			
		||||
        EPwm6Regs.DBRED = 0;
 | 
			
		||||
 | 
			
		||||
        // Set Compare values
 | 
			
		||||
        EPwm6Regs.CMPA.half.CMPA = m_cmpr_sync;             // Set compare A value
 | 
			
		||||
        EPwm6Regs.CMPB = 0;           // Set Compare B value
 | 
			
		||||
 | 
			
		||||
        // Interrupt where we will change the Compare Values
 | 
			
		||||
        EPwm6Regs.ETSEL.all = 0;
 | 
			
		||||
 | 
			
		||||
        //EPwm6Regs.ETPS.bit.INTPRD = 0;                //
 | 
			
		||||
        EPwm6Regs.ETPS.all = 0;
 | 
			
		||||
 | 
			
		||||
        // PWM-Chopper
 | 
			
		||||
        EPwm6Regs.PCCTL.all = 0;        // PWM-Chopper Control Register
 | 
			
		||||
 | 
			
		||||
        // Trip-Zone Submodule
 | 
			
		||||
        EPwm6Regs.TZSEL.all = 0;        // Trip-Zone Select Register
 | 
			
		||||
        EPwm6Regs.TZCTL.all = 0;        // Trip-Zone Control Register
 | 
			
		||||
        EPwm6Regs.TZEINT.all = 0;       // Trip-Zone Enable Interrupt Register
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        EALLOW;
 | 
			
		||||
        SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;
 | 
			
		||||
        EDIS;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        _epwm2_adc_drive = &DSP28335::EPWM::_epwm2_adc_drive_mode_start;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        _gpio_setup = setup.gpio_setup;
 | 
			
		||||
        (*_gpio_setup)();
 | 
			
		||||
 | 
			
		||||
        m_mode = DSP28335::EPWM::OPERATIONAL;
 | 
			
		||||
        //
 | 
			
		||||
    }
 | 
			
		||||
    //
 | 
			
		||||
}//end
 | 
			
		||||
//
 | 
			
		||||
// #pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void EPWM::configure(const EPWMConfiguration& config)
 | 
			
		||||
{
 | 
			
		||||
    m_status = true;
 | 
			
		||||
    m_status &= config.fpwm > (float)(5.0) ? true : false;
 | 
			
		||||
    m_status &= config.pulse_sync != FP_ZERO ? true : false;
 | 
			
		||||
    m_status &= config.pulse_adc_soc != FP_ZERO ? true : false;
 | 
			
		||||
    m_status &= config.adc_soc_offset >= FP_ZERO ? true : false;
 | 
			
		||||
    m_status &= config.adc_soc_quantity >= 1 ? true : false;
 | 
			
		||||
    //
 | 
			
		||||
    if(m_status)
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        m_configuration_current = config;
 | 
			
		||||
 | 
			
		||||
        m_tbprd = 0;
 | 
			
		||||
        m_clkdiv = 0;
 | 
			
		||||
        m_hspclkdiv = 0;
 | 
			
		||||
        m_cmpr_sync = 0;
 | 
			
		||||
        //
 | 
			
		||||
        m_cmpr_adc_start = 0;
 | 
			
		||||
        m_cmpr_adc_stop = 0;
 | 
			
		||||
        m_cmpr_adc_width = 0;
 | 
			
		||||
        m_cmpr_adc_step = 0;
 | 
			
		||||
        //
 | 
			
		||||
        m_adc_soc_quantity = config.adc_soc_quantity;
 | 
			
		||||
        m_adc_soc_counter = 0;
 | 
			
		||||
        //
 | 
			
		||||
        m_timer_period = m_fcpu/m_clock_prescale_list[m_clkdiv]/m_high_speed_clock_prescale[m_hspclkdiv]/config.fpwm;
 | 
			
		||||
        //
 | 
			
		||||
        while(m_timer_period>(float)(32767.0))
 | 
			
		||||
        {
 | 
			
		||||
            m_clkdiv++;
 | 
			
		||||
            if(m_clkdiv >= 8)
 | 
			
		||||
            {
 | 
			
		||||
                m_clkdiv = 0;
 | 
			
		||||
                m_hspclkdiv++;
 | 
			
		||||
                //
 | 
			
		||||
            }//if
 | 
			
		||||
            //
 | 
			
		||||
            m_timer_period = m_fcpu/m_clock_prescale_list[m_clkdiv]/m_high_speed_clock_prescale[m_hspclkdiv]/config.fpwm;
 | 
			
		||||
            //
 | 
			
		||||
        }//while
 | 
			
		||||
        //
 | 
			
		||||
        m_timer_step = (m_clock_prescale_list[m_clkdiv] * m_high_speed_clock_prescale[m_hspclkdiv])/m_fcpu;
 | 
			
		||||
 | 
			
		||||
        m_tbprd = (Uint16)m_timer_period;
 | 
			
		||||
        m_cmpr_sync = m_tbprd - (Uint16)(config.pulse_sync/m_timer_step);
 | 
			
		||||
 | 
			
		||||
        m_cmpr_adc_width = (Uint16)((float)(config.pulse_adc_soc/m_timer_step));
 | 
			
		||||
        //m_cmpr_adc_step = (Uint16)(m_tbprd/config.adc_soc_quantity);
 | 
			
		||||
        m_cmpr_adc_step = (Uint16)((float)((float)m_timer_period/((float)config.adc_soc_quantity)));
 | 
			
		||||
        m_cmpr_adc_offset = (Uint16)((float)(m_timer_period * config.adc_soc_offset));
 | 
			
		||||
        m_time_sample_adc = m_timer_step * ((float)m_cmpr_adc_step);
 | 
			
		||||
        status.all = 0x0001;
 | 
			
		||||
        //
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        EPwm1Regs.TBPRD = m_tbprd;                   // Set timer period 801 TBCLKs
 | 
			
		||||
        EPwm1Regs.TBCTL.bit.CLKDIV = m_clkdiv;
 | 
			
		||||
        EPwm1Regs.TBCTL.bit.HSPCLKDIV = m_hspclkdiv;
 | 
			
		||||
        EPwm1Regs.CMPA.half.CMPA = m_cmpr_sync;          // Set compare A value
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        EPwm2Regs.TBPRD = m_tbprd;
 | 
			
		||||
        EPwm2Regs.TBCTL.bit.CLKDIV = m_clkdiv;;
 | 
			
		||||
        EPwm2Regs.TBCTL.bit.HSPCLKDIV = m_hspclkdiv;
 | 
			
		||||
        //
 | 
			
		||||
//        EPwm2Regs.CMPA.half.CMPA = m_cmpr_adc_offset;          // Set compare A value
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        EPwm5Regs.TBPRD = m_tbprd;           // Set timer period 801 TBCLKs
 | 
			
		||||
        EPwm5Regs.TBCTL.bit.CLKDIV = m_clkdiv;;
 | 
			
		||||
        EPwm5Regs.TBCTL.bit.HSPCLKDIV = m_hspclkdiv;
 | 
			
		||||
        EPwm5Regs.CMPA.half.CMPA = m_cmpr_sync;             // Set compare A value
 | 
			
		||||
 | 
			
		||||
        // Setup TBCLK
 | 
			
		||||
        EPwm6Regs.TBPRD = m_tbprd;           // Set timer period 801 TBCLKs
 | 
			
		||||
        EPwm6Regs.TBCTL.bit.CLKDIV = m_clkdiv;;
 | 
			
		||||
        EPwm6Regs.TBCTL.bit.HSPCLKDIV = m_hspclkdiv;
 | 
			
		||||
        EPwm6Regs.CMPA.half.CMPA = m_cmpr_sync;             // Set compare A value
 | 
			
		||||
        //
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
// #pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void EPWM::set_actions()
 | 
			
		||||
{
 | 
			
		||||
    // Set EPWM1 actions
 | 
			
		||||
    EPwm1Regs.AQCTLA.bit.CAU = AQ_SET;             // Set PWM1A on event A, up count
 | 
			
		||||
    EPwm1Regs.AQCTLA.bit.PRD = AQ_CLEAR;
 | 
			
		||||
    //EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;             // Set PWM1A on event A, up count
 | 
			
		||||
    //EPwm1Regs.AQCTLA.bit.PRD = AQ_SET;
 | 
			
		||||
    //
 | 
			
		||||
    // Set EPWM5 actions
 | 
			
		||||
    EPwm5Regs.AQCTLB.bit.CAU = AQ_SET;           // Set PWM2B on event B, up count
 | 
			
		||||
    EPwm5Regs.AQCTLB.bit.PRD = AQ_CLEAR;
 | 
			
		||||
    //EPwm5Regs.AQCTLB.bit.CAU = AQ_CLEAR;           // Set PWM2B on event B, up count
 | 
			
		||||
    //EPwm5Regs.AQCTLB.bit.PRD = AQ_SET;
 | 
			
		||||
    //
 | 
			
		||||
    // Set EPWM6 actions
 | 
			
		||||
    EPwm6Regs.AQCTLA.bit.CAU = AQ_SET;             // Set PWM2A on event A, up count
 | 
			
		||||
    EPwm6Regs.AQCTLA.bit.PRD = AQ_CLEAR;
 | 
			
		||||
    EPwm6Regs.AQCTLB.bit.CAU = AQ_SET;           // Set PWM2B on event B, up count
 | 
			
		||||
    EPwm6Regs.AQCTLB.bit.PRD = AQ_CLEAR;
 | 
			
		||||
    //EPwm6Regs.AQCTLA.bit.CAU = AQ_CLEAR;             // Set PWM2A on event A, up count
 | 
			
		||||
    //EPwm6Regs.AQCTLA.bit.PRD = AQ_SET;
 | 
			
		||||
    //EPwm6Regs.AQCTLB.bit.CAU = AQ_CLEAR;           // Set PWM2B on event B, up count
 | 
			
		||||
    //EPwm6Regs.AQCTLB.bit.PRD = AQ_SET;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
// #pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void EPWM::clear_actions()
 | 
			
		||||
{
 | 
			
		||||
    // Clear actions
 | 
			
		||||
    EPwm1Regs.AQCTLA.bit.CAU = AQ_NO_ACTION;
 | 
			
		||||
    EPwm1Regs.AQCTLA.bit.PRD = AQ_NO_ACTION;
 | 
			
		||||
    //
 | 
			
		||||
    // Set EPWM5 actions
 | 
			
		||||
    EPwm5Regs.AQCTLB.bit.CAU = AQ_NO_ACTION;
 | 
			
		||||
    EPwm5Regs.AQCTLB.bit.PRD = AQ_NO_ACTION;
 | 
			
		||||
    //
 | 
			
		||||
    // Set EPWM6 actions
 | 
			
		||||
    EPwm6Regs.AQCTLA.bit.CAU = AQ_NO_ACTION;
 | 
			
		||||
    EPwm6Regs.AQCTLA.bit.PRD = AQ_NO_ACTION;
 | 
			
		||||
    EPwm6Regs.AQCTLB.bit.CAU = AQ_NO_ACTION;
 | 
			
		||||
    EPwm6Regs.AQCTLB.bit.PRD = AQ_NO_ACTION;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
// #pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
float EPWM::get_time_sample_adc()
 | 
			
		||||
{
 | 
			
		||||
    return m_time_sample_adc;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
// #pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void EPWM::epwm1_adc_drive()
 | 
			
		||||
{
 | 
			
		||||
    m_adc_soc_counter = 0;
 | 
			
		||||
    m_cmpr_adc_start = m_cmpr_adc_offset;
 | 
			
		||||
    m_cmpr_adc_stop = m_cmpr_adc_offset + m_cmpr_adc_width;
 | 
			
		||||
    //
 | 
			
		||||
    //new_cycle = 1;
 | 
			
		||||
    //adc_soc = 0;
 | 
			
		||||
    //adc_ready = 0;
 | 
			
		||||
    status.all = 0x001;
 | 
			
		||||
 | 
			
		||||
    // Set Compare values
 | 
			
		||||
    EPwm2Regs.CMPA.half.CMPA = m_cmpr_adc_start;          // Set compare A value
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    _epwm2_adc_drive = &DSP28335::EPWM::_epwm2_adc_drive_mode_start;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
// #pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void EPWM::epwm2_adc_drive()
 | 
			
		||||
{
 | 
			
		||||
    (this->*_epwm2_adc_drive)();
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
 | 
			
		||||
// #pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void EPWM::_epwm2_adc_drive_mode_start()
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    //new_cycle = 0;
 | 
			
		||||
    //adc_soc = 1;
 | 
			
		||||
    //adc_ready = 0;
 | 
			
		||||
    status.all = 0x002;
 | 
			
		||||
 | 
			
		||||
    // Set Compare values
 | 
			
		||||
    EPwm2Regs.CMPA.half.CMPA = m_cmpr_adc_stop;          // Set compare A value
 | 
			
		||||
 | 
			
		||||
    _epwm2_adc_drive = &DSP28335::EPWM::_epwm2_adc_drive_mode_stop;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
// #pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void EPWM::_epwm2_adc_drive_mode_stop()
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    m_adc_soc_counter++;
 | 
			
		||||
    m_cmpr_adc_start += m_cmpr_adc_step;
 | 
			
		||||
    m_cmpr_adc_stop += m_cmpr_adc_step;
 | 
			
		||||
 | 
			
		||||
    //new_cycle = 0;
 | 
			
		||||
    //adc_soc = 0;
 | 
			
		||||
    //adc_ready = 1;
 | 
			
		||||
    status.all = 0x004;
 | 
			
		||||
 | 
			
		||||
    // Set Compare values
 | 
			
		||||
    EPwm2Regs.CMPA.half.CMPA = m_cmpr_adc_start;          // Set compare A value
 | 
			
		||||
 | 
			
		||||
    _epwm2_adc_drive = &DSP28335::EPWM::_epwm2_adc_drive_mode_start;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
// #pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void EPWM::epwm1_interrupt_ack()
 | 
			
		||||
{
 | 
			
		||||
    EPwm1Regs.ETCLR.bit.INT = 1;
 | 
			
		||||
    PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
// #pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void EPWM::epwm2_interrupt_ack()
 | 
			
		||||
{
 | 
			
		||||
    EPwm2Regs.ETCLR.bit.INT = 1;
 | 
			
		||||
    PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
} /* namespace DSP28335 */
 | 
			
		||||
@ -1,150 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * EPWM.h
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "F28335/DSP28x_Project.h"
 | 
			
		||||
 | 
			
		||||
#include "DSP28335/CPUBase.h"
 | 
			
		||||
 | 
			
		||||
#ifndef DSP28335_EPWM_H_
 | 
			
		||||
#define DSP28335_EPWM_H_
 | 
			
		||||
 | 
			
		||||
namespace DSP28335
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
enum CLOCKPRESCALE {DIV01, DIV02, DIV04, DIV08, DIV16, DIV32, DIV64, DIV128};
 | 
			
		||||
enum HIGHSPEEDCLOCKPRESCALE {HSDIV01, HSDIV02, HSDIV04, HSDIV06, HSDIV08, HSDIV10, HSDIV12, HSDIV14};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct EPWMStatusBitField
 | 
			
		||||
{
 | 
			
		||||
    Uint16 new_cycle:1;
 | 
			
		||||
    Uint16 adc_soc:1;
 | 
			
		||||
    Uint16 adc_ready:1;
 | 
			
		||||
};//EPWMStatusBitField
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
union EPWMStatusRegister
 | 
			
		||||
{
 | 
			
		||||
    Uint16 all;
 | 
			
		||||
    EPWMStatusBitField bit;
 | 
			
		||||
    EPWMStatusRegister():
 | 
			
		||||
        all(0)
 | 
			
		||||
    {}
 | 
			
		||||
};//EPWMStatusRegister
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct EPWMConfiguration
 | 
			
		||||
{
 | 
			
		||||
    float fpwm;
 | 
			
		||||
    float pulse_sync;
 | 
			
		||||
    float pulse_adc_soc;
 | 
			
		||||
    float adc_soc_offset;
 | 
			
		||||
    Uint16 adc_soc_quantity;
 | 
			
		||||
    EPWMConfiguration():
 | 
			
		||||
        fpwm(500.0),
 | 
			
		||||
        pulse_sync(1.0e-6),
 | 
			
		||||
        pulse_adc_soc(10.0e-6),
 | 
			
		||||
        adc_soc_offset(FP_ZERO),
 | 
			
		||||
        adc_soc_quantity(1)
 | 
			
		||||
    {}
 | 
			
		||||
};//EPWMConfiguration
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class EPWMConfigModificator
 | 
			
		||||
{
 | 
			
		||||
private:
 | 
			
		||||
    EPWMConfiguration m_config;
 | 
			
		||||
public:
 | 
			
		||||
    bool modify;
 | 
			
		||||
public:
 | 
			
		||||
    EPWMConfigModificator();
 | 
			
		||||
    void set_config(EPWMConfiguration& refconfig);
 | 
			
		||||
    EPWMConfiguration get_config();
 | 
			
		||||
public:
 | 
			
		||||
    void reset();
 | 
			
		||||
public:
 | 
			
		||||
    void set_pwm_frquency(float fpwm);
 | 
			
		||||
    void set_pulse_sync(float pulse_sync);
 | 
			
		||||
    void set_pulse_adc_soc(float pulse_adc_soc);
 | 
			
		||||
    void set_adc_soc_offset(float adc_soc_offset);
 | 
			
		||||
    void set_adc_soc_quantity(Uint16 adc_soc_quantity);
 | 
			
		||||
public:
 | 
			
		||||
    float get_pwm_frquency();
 | 
			
		||||
    float get_pulse_sync();
 | 
			
		||||
    float get_pulse_adc_soc();
 | 
			
		||||
    float get_adc_soc_offset();
 | 
			
		||||
    Uint16 get_adc_soc_quantity();
 | 
			
		||||
    //
 | 
			
		||||
};//EPWMConfigModificator
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct EPWMSetup: public DSP28335::CPUBaseSetup
 | 
			
		||||
{
 | 
			
		||||
    EPWMConfiguration parameters;
 | 
			
		||||
    EPWMSetup():
 | 
			
		||||
        DSP28335::CPUBaseSetup(),
 | 
			
		||||
        parameters()
 | 
			
		||||
    {}
 | 
			
		||||
};//EPWMSetup
 | 
			
		||||
 | 
			
		||||
class EPWM: public DSP28335::CPUBase
 | 
			
		||||
{
 | 
			
		||||
private:
 | 
			
		||||
    EPWMConfiguration m_configuration_current;
 | 
			
		||||
    EPWMConfiguration m_configuration_new;
 | 
			
		||||
private:
 | 
			
		||||
    float m_fcpu;
 | 
			
		||||
    float m_timer_period;
 | 
			
		||||
    float m_timer_step;
 | 
			
		||||
    float m_time_sample_adc;
 | 
			
		||||
    float m_clock_prescale_list[8];
 | 
			
		||||
    float m_high_speed_clock_prescale[8];
 | 
			
		||||
    Uint16 m_tbprd;         //TBPRD
 | 
			
		||||
    Uint16 m_clkdiv;
 | 
			
		||||
    Uint16 m_hspclkdiv;
 | 
			
		||||
    Uint16 m_cmpr_sync;
 | 
			
		||||
    Uint16 m_cmpr_adc_offset;
 | 
			
		||||
    Uint16 m_cmpr_adc_start;
 | 
			
		||||
    Uint16 m_cmpr_adc_stop;
 | 
			
		||||
    Uint16 m_cmpr_adc_width;
 | 
			
		||||
    Uint16 m_cmpr_adc_step;
 | 
			
		||||
    Uint16 m_adc_soc_quantity;
 | 
			
		||||
    Uint16 m_adc_soc_counter;
 | 
			
		||||
public:
 | 
			
		||||
    EPWMStatusRegister status;
 | 
			
		||||
public:
 | 
			
		||||
    EPWM();
 | 
			
		||||
    void setup(const EPWMSetup& setup);
 | 
			
		||||
    void configure(const EPWMConfiguration& config);
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
    void set_actions();
 | 
			
		||||
    void clear_actions();
 | 
			
		||||
public:
 | 
			
		||||
    float get_time_sample_adc();
 | 
			
		||||
public:
 | 
			
		||||
    void epwm1_adc_drive();
 | 
			
		||||
public:
 | 
			
		||||
    void epwm2_adc_drive();
 | 
			
		||||
private:
 | 
			
		||||
    void (EPWM::*_epwm2_adc_drive)();
 | 
			
		||||
    void _epwm2_adc_drive_mode_start();
 | 
			
		||||
    void _epwm2_adc_drive_mode_stop();
 | 
			
		||||
public:
 | 
			
		||||
    void epwm1_interrupt_ack();
 | 
			
		||||
    void epwm2_interrupt_ack();
 | 
			
		||||
private:
 | 
			
		||||
    void (*_gpio_setup)();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
} /* namespace DSP28335 */
 | 
			
		||||
 | 
			
		||||
#endif /* DSP28335_EPWM_H_ */
 | 
			
		||||
@ -1,45 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * EQEP1.cpp
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "DSP28335/EQEP1.h"
 | 
			
		||||
 | 
			
		||||
namespace DSP28335
 | 
			
		||||
{
 | 
			
		||||
//CONSTRUCTOR
 | 
			
		||||
EQEP1::EQEP1():
 | 
			
		||||
        DSP28335::CPUBase(),
 | 
			
		||||
        _gpio_setup(&DSP28335::GPIO::gpio_eqep_setup)
 | 
			
		||||
//
 | 
			
		||||
{}//CONSTRUCTOR
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void EQEP1::setup(const EQEP1Setup& setup)
 | 
			
		||||
{
 | 
			
		||||
    m_status = m_mode == DSP28335::EQEP1::UNDEFINED ? true : false;
 | 
			
		||||
    m_status &= setup.gpio_setup != 0 ? true : false;
 | 
			
		||||
 | 
			
		||||
    if(m_status)
 | 
			
		||||
    {
 | 
			
		||||
        //
 | 
			
		||||
        EQep1Regs.QDECCTL.bit.QSRC = 00;
 | 
			
		||||
        EQep1Regs.QDECCTL.bit.XCR = 0;
 | 
			
		||||
        EQep1Regs.QEPCTL.bit.FREE_SOFT = 2;
 | 
			
		||||
        EQep1Regs.QPOSMAX = 0xffffffff;
 | 
			
		||||
        EQep1Regs.QEPCTL.bit.QPEN = 1;
 | 
			
		||||
        EQep1Regs.QPOSCNT = 0x00000000;
 | 
			
		||||
        //
 | 
			
		||||
        _gpio_setup = setup.gpio_setup;
 | 
			
		||||
        (*_gpio_setup)();
 | 
			
		||||
        //
 | 
			
		||||
        m_mode = DSP28335::EQEP1::OPERATIONAL;
 | 
			
		||||
        //
 | 
			
		||||
    }//if
 | 
			
		||||
   //
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
} /* namespace DSP28335 */
 | 
			
		||||
@ -1,37 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * EQEP1.h
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "F28335/DSP28x_Project.h"
 | 
			
		||||
 | 
			
		||||
#include "DSP28335/CPUBase.h"
 | 
			
		||||
#include "DSP28335/GPIO.h"
 | 
			
		||||
 | 
			
		||||
#ifndef DSP28335_EQEP1_H_
 | 
			
		||||
#define DSP28335_EQEP1_H_
 | 
			
		||||
 | 
			
		||||
namespace DSP28335
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
struct EQEP1Setup: public DSP28335::CPUBaseSetup
 | 
			
		||||
{
 | 
			
		||||
    EQEP1Setup():
 | 
			
		||||
        DSP28335::CPUBaseSetup()
 | 
			
		||||
    {}
 | 
			
		||||
};//
 | 
			
		||||
 | 
			
		||||
class EQEP1: public DSP28335::CPUBase
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    EQEP1();
 | 
			
		||||
    void setup(const EQEP1Setup& setup);
 | 
			
		||||
private:
 | 
			
		||||
    void (*_gpio_setup)();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
} /* namespace DSP28335 */
 | 
			
		||||
 | 
			
		||||
#endif /* DSP28335_EQEP1_H_ */
 | 
			
		||||
@ -1,142 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Flash.cpp
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "DSP28335/FLASH.h"
 | 
			
		||||
 | 
			
		||||
namespace DSP28335
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
//CONSTRUCTOR
 | 
			
		||||
FLASH::FLASH():
 | 
			
		||||
        DSP28335::CPUBase(),
 | 
			
		||||
        m_mask_sector(0),
 | 
			
		||||
        //
 | 
			
		||||
        m_operation_status_erase(0),
 | 
			
		||||
        m_operation_status_program(0),
 | 
			
		||||
        m_operation_status_verify(0),
 | 
			
		||||
        //
 | 
			
		||||
        m_version_hex_default(API_VERSION_DEFAULT),
 | 
			
		||||
        m_version_hex(0)
 | 
			
		||||
{
 | 
			
		||||
    m_sector.StartAddr = 0;
 | 
			
		||||
    m_sector.EndAddr = 0;
 | 
			
		||||
    //
 | 
			
		||||
    m_status_erase.FirstFailAddr = 0;
 | 
			
		||||
    m_status_erase.ExpectedData = 0;
 | 
			
		||||
    m_status_erase.ActualData = 0;
 | 
			
		||||
    //
 | 
			
		||||
    m_status_program.FirstFailAddr = 0;
 | 
			
		||||
    m_status_program.ExpectedData = 0;
 | 
			
		||||
    m_status_program.ActualData = 0;
 | 
			
		||||
    //
 | 
			
		||||
    m_status_verify.FirstFailAddr = 0;
 | 
			
		||||
    m_status_verify.ExpectedData = 0;
 | 
			
		||||
    m_status_verify.ActualData = 0;
 | 
			
		||||
    //
 | 
			
		||||
}//end CONSTRUCTOR
 | 
			
		||||
 | 
			
		||||
void FLASH::setup(Uint16 mask_sector, Uint16 *StartAddr, Uint16 *EndAddr)
 | 
			
		||||
{
 | 
			
		||||
    m_mask_sector = mask_sector;
 | 
			
		||||
    m_sector.StartAddr = StartAddr;
 | 
			
		||||
    m_sector.EndAddr = EndAddr;
 | 
			
		||||
 | 
			
		||||
    //SCALE_FACTOR is defined in Flash2833x_API_Config.h
 | 
			
		||||
    //EALLOW;
 | 
			
		||||
    Flash_CPUScaleFactor = SCALE_FACTOR;
 | 
			
		||||
    //EDIS;
 | 
			
		||||
    //
 | 
			
		||||
    m_mode = DSP28335::FLASH::OPERATIONAL;
 | 
			
		||||
    //
 | 
			
		||||
}//end
 | 
			
		||||
 | 
			
		||||
Uint16 FLASH::erase()
 | 
			
		||||
{
 | 
			
		||||
    //Uint16 status = 0;
 | 
			
		||||
    //Flash_Erase(Uint16 SectorMask, FLASH_ST *FEraseStat);
 | 
			
		||||
    //status = Flash_Erase(m_mask_sector, &m_status_erase);
 | 
			
		||||
    //return status;
 | 
			
		||||
    return Flash_Erase(m_mask_sector, &m_status_erase);
 | 
			
		||||
    //
 | 
			
		||||
}//end
 | 
			
		||||
 | 
			
		||||
Uint16 FLASH::read(Uint16 *Dest, Uint32 Length)
 | 
			
		||||
{
 | 
			
		||||
    Uint16 *Source = m_sector.StartAddr;
 | 
			
		||||
    Uint16 status = 0;
 | 
			
		||||
    if(Length <= 0x4000)
 | 
			
		||||
    {
 | 
			
		||||
        for(Uint32 i=0; i<Length; i++)
 | 
			
		||||
        {
 | 
			
		||||
            (*Dest++) = (*Source++);
 | 
			
		||||
            //
 | 
			
		||||
        }//end for
 | 
			
		||||
        status = 1;
 | 
			
		||||
        //
 | 
			
		||||
    }//end if
 | 
			
		||||
    //
 | 
			
		||||
    return status;
 | 
			
		||||
    //
 | 
			
		||||
}//end
 | 
			
		||||
 | 
			
		||||
Uint16 FLASH::program(Uint16 *BufAddr, Uint32 Length)
 | 
			
		||||
{
 | 
			
		||||
    Uint16 status = STATUS_SUCCESS;
 | 
			
		||||
 | 
			
		||||
    m_status_erase.FirstFailAddr = 0;
 | 
			
		||||
    m_status_erase.ExpectedData = 0;
 | 
			
		||||
    m_status_erase.ActualData = 0;
 | 
			
		||||
 | 
			
		||||
    m_status_program.FirstFailAddr = 0;
 | 
			
		||||
    m_status_program.ExpectedData = 0;
 | 
			
		||||
    m_status_program.ActualData = 0;
 | 
			
		||||
 | 
			
		||||
    m_status_verify.FirstFailAddr = 0;
 | 
			
		||||
    m_status_verify.ExpectedData = 0;
 | 
			
		||||
    m_status_verify.ActualData = 0;
 | 
			
		||||
 | 
			
		||||
    status = Flash_Erase(m_mask_sector, &m_status_erase);
 | 
			
		||||
 | 
			
		||||
    if(status != STATUS_SUCCESS) return status;
 | 
			
		||||
 | 
			
		||||
    //Flash_Program(Uint16 *FlashAddr, Uint16 *BufAddr, Uint32 Length, FLASH_ST *FProgStatus);
 | 
			
		||||
    status = Flash_Program(m_sector.StartAddr, BufAddr, Length, &m_status_program);
 | 
			
		||||
 | 
			
		||||
    if(status != STATUS_SUCCESS) return status;
 | 
			
		||||
 | 
			
		||||
    //Flash_Verify(Uint16 *StartAddr, Uint16 *BufAddr, Uint32 Length, FLASH_ST *FVerifyStat);
 | 
			
		||||
    status = Flash_Verify(m_sector.StartAddr, BufAddr, Length, &m_status_verify);
 | 
			
		||||
 | 
			
		||||
    return status;
 | 
			
		||||
    //
 | 
			
		||||
}//end
 | 
			
		||||
 | 
			
		||||
Uint16 FLASH::verify(Uint16 *BufAddr, Uint32 Length)
 | 
			
		||||
{
 | 
			
		||||
    Uint16 status = STATUS_SUCCESS;
 | 
			
		||||
 | 
			
		||||
    m_status_verify.FirstFailAddr = 0;
 | 
			
		||||
    m_status_verify.ExpectedData = 0;
 | 
			
		||||
    m_status_verify.ActualData = 0;
 | 
			
		||||
 | 
			
		||||
    //Flash_Verify(Uint16 *StartAddr, Uint16 *BufAddr, Uint32 Length, FLASH_ST *FVerifyStat);
 | 
			
		||||
    status = Flash_Verify(m_sector.StartAddr, BufAddr, Length, &m_status_verify);
 | 
			
		||||
 | 
			
		||||
    return status;
 | 
			
		||||
    //
 | 
			
		||||
}//end
 | 
			
		||||
 | 
			
		||||
Uint16 FLASH::APIVersionHex()
 | 
			
		||||
{
 | 
			
		||||
    Uint16 version = 0;
 | 
			
		||||
    version = Flash_APIVersionHex();
 | 
			
		||||
 | 
			
		||||
    return version;
 | 
			
		||||
    //
 | 
			
		||||
}//end
 | 
			
		||||
 | 
			
		||||
} /* namespace DSP28335 */
 | 
			
		||||
@ -1,60 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Flash.h
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "F28335/DSP28x_Project.h"
 | 
			
		||||
#include "F28335/Flash2833x_API_Config.h"
 | 
			
		||||
#include "F28335/Flash2833x_API_Library.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "DSP28335/CPUBase.h"
 | 
			
		||||
 | 
			
		||||
#ifndef DSP28335_FLASH_H_
 | 
			
		||||
#define DSP28335_FLASH_H_
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define API_VERSION_DEFAULT 0x0100
 | 
			
		||||
 | 
			
		||||
namespace DSP28335
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
    Uint16 *StartAddr;
 | 
			
		||||
    Uint16 *EndAddr;
 | 
			
		||||
}SECTOR;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class FLASH: public DSP28335::CPUBase
 | 
			
		||||
{
 | 
			
		||||
private:
 | 
			
		||||
    Uint16 m_mask_sector;
 | 
			
		||||
    SECTOR m_sector;
 | 
			
		||||
    //
 | 
			
		||||
    FLASH_ST m_status_erase;
 | 
			
		||||
    FLASH_ST m_status_program;
 | 
			
		||||
    FLASH_ST m_status_verify;
 | 
			
		||||
    Uint16 m_operation_status_erase;
 | 
			
		||||
    Uint16 m_operation_status_program;
 | 
			
		||||
    Uint16 m_operation_status_verify;
 | 
			
		||||
    //
 | 
			
		||||
    Uint16 m_version_hex_default;
 | 
			
		||||
    Uint16 m_version_hex;
 | 
			
		||||
    //
 | 
			
		||||
public:
 | 
			
		||||
    FLASH();
 | 
			
		||||
    void setup(Uint16 mask_sector, Uint16 *StartAddr, Uint16 *EndAddr);
 | 
			
		||||
    Uint16 erase();
 | 
			
		||||
    Uint16 read(Uint16 *Dest, Uint32 Length);
 | 
			
		||||
    Uint16 program(Uint16 *BufAddr, Uint32 Length);
 | 
			
		||||
    Uint16 verify(Uint16 *BufAddr, Uint32 Length);
 | 
			
		||||
    Uint16 APIVersionHex();
 | 
			
		||||
    //
 | 
			
		||||
};//end class FLASH
 | 
			
		||||
 | 
			
		||||
} /* namespace DSP28335 */
 | 
			
		||||
 | 
			
		||||
#endif /* DSP28335_FLASH_H_ */
 | 
			
		||||
@ -1,86 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * MeasureTimePeriod.cpp
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "DSP28335/MeasureTimePeriod.h"
 | 
			
		||||
 | 
			
		||||
namespace DSP28335
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
//Constructor
 | 
			
		||||
MeasureTimePeriod::MeasureTimePeriod(CPUTIMER_VARS& CPUTimer):
 | 
			
		||||
        m_CPUTimer(CPUTimer),
 | 
			
		||||
        m_timer_result((Uint32)0),
 | 
			
		||||
        m_timer_result_previous((Uint32)0),
 | 
			
		||||
        m_magic_number((Uint32)0),
 | 
			
		||||
        _execute(&DSP28335::MeasureTimePeriod::_execute_start)
 | 
			
		||||
//
 | 
			
		||||
{}//end Constructor
 | 
			
		||||
 | 
			
		||||
// #pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void MeasureTimePeriod::execute(void)
 | 
			
		||||
{
 | 
			
		||||
    (this->*_execute)();
 | 
			
		||||
    //
 | 
			
		||||
}//end
 | 
			
		||||
//
 | 
			
		||||
// #pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void MeasureTimePeriod::reset(void)
 | 
			
		||||
{
 | 
			
		||||
    m_CPUTimer.RegsAddr->TCR.bit.TSS = 1; // Stop CPU Timer
 | 
			
		||||
    m_CPUTimer.RegsAddr->PRD.all = 0xFFFFFFFF;
 | 
			
		||||
    m_CPUTimer.RegsAddr->TCR.bit.TRB = 1; // Reload CPU Timer
 | 
			
		||||
    //
 | 
			
		||||
    _execute = &DSP28335::MeasureTimePeriod::_execute_start;
 | 
			
		||||
    //
 | 
			
		||||
}//end
 | 
			
		||||
//
 | 
			
		||||
// #pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void MeasureTimePeriod::inc_counter()
 | 
			
		||||
{
 | 
			
		||||
    m_CPUTimer.InterruptCount++;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
// #pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void MeasureTimePeriod::reset_counter()
 | 
			
		||||
{
 | 
			
		||||
    m_CPUTimer.InterruptCount = (Uint32)0;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
void MeasureTimePeriod::set_magic(const Uint32 magic)
 | 
			
		||||
{
 | 
			
		||||
    m_magic_number = (Uint32)magic;
 | 
			
		||||
    //
 | 
			
		||||
}//end
 | 
			
		||||
//
 | 
			
		||||
// #pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void MeasureTimePeriod::_execute_start(void)
 | 
			
		||||
{
 | 
			
		||||
    _execute = &DSP28335::MeasureTimePeriod::_execute_scan;
 | 
			
		||||
    //
 | 
			
		||||
    m_CPUTimer.RegsAddr->TCR.bit.TSS = 1; // Stop CPU Timer
 | 
			
		||||
    m_CPUTimer.RegsAddr->TCR.bit.TRB = 1; // Reload CPU Timer
 | 
			
		||||
    m_CPUTimer.RegsAddr->TCR.bit.TSS = 0; // Start CPU Timer
 | 
			
		||||
    //
 | 
			
		||||
}//end
 | 
			
		||||
//
 | 
			
		||||
// #pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void MeasureTimePeriod::_execute_scan(void)
 | 
			
		||||
{
 | 
			
		||||
    m_CPUTimer.RegsAddr->TCR.bit.TSS = 1; // Stop CPU Timer
 | 
			
		||||
    //
 | 
			
		||||
    m_timer_result_previous = m_timer_result;
 | 
			
		||||
    m_timer_result = m_CPUTimer.RegsAddr->PRD.all - m_CPUTimer.RegsAddr->TIM.all - m_magic_number;
 | 
			
		||||
    //
 | 
			
		||||
    m_CPUTimer.RegsAddr->TCR.bit.TRB = 1; // Reload CPU Timer
 | 
			
		||||
    m_CPUTimer.RegsAddr->TCR.bit.TSS = 0; // Start CPU Timer
 | 
			
		||||
    //
 | 
			
		||||
}//end
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
} /* namespace DSP28335 */
 | 
			
		||||
@ -1,39 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * MeasureTimePeriod.h
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "F28335/DSP28x_Project.h"
 | 
			
		||||
 | 
			
		||||
#ifndef DSP28335_MEASURETIMEPERIOD_H_
 | 
			
		||||
#define DSP28335_MEASURETIMEPERIOD_H_
 | 
			
		||||
 | 
			
		||||
namespace DSP28335
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
class MeasureTimePeriod
 | 
			
		||||
{
 | 
			
		||||
private:
 | 
			
		||||
    CPUTIMER_VARS& m_CPUTimer;
 | 
			
		||||
    Uint32 m_timer_result;
 | 
			
		||||
    Uint32 m_timer_result_previous;
 | 
			
		||||
    Uint32 m_magic_number;
 | 
			
		||||
public:
 | 
			
		||||
    MeasureTimePeriod(CPUTIMER_VARS& pCPUTimer);
 | 
			
		||||
    void execute(void);
 | 
			
		||||
    void reset(void);
 | 
			
		||||
    void inc_counter();
 | 
			
		||||
    void reset_counter();
 | 
			
		||||
    void set_magic(const Uint32 magic);
 | 
			
		||||
private:
 | 
			
		||||
    void (MeasureTimePeriod::*_execute)(void);
 | 
			
		||||
    void _execute_start(void);
 | 
			
		||||
    void _execute_scan(void);
 | 
			
		||||
    //
 | 
			
		||||
};//end class MeasureTimePeriod
 | 
			
		||||
 | 
			
		||||
} /* namespace DSP28335 */
 | 
			
		||||
 | 
			
		||||
#endif /* DSP28335_MEASURETIMEPERIOD_H_ */
 | 
			
		||||
@ -1,56 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * MemoryZone.h
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "F28335/DSP28x_Project.h"
 | 
			
		||||
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
#ifndef SYSCTRL_MEMORYZONE_H_
 | 
			
		||||
#define SYSCTRL_MEMORYZONE_H_
 | 
			
		||||
 | 
			
		||||
struct ZONE_REGISTER_16_BIT_FIELD
 | 
			
		||||
{
 | 
			
		||||
    uint16_t b0: 1;
 | 
			
		||||
    uint16_t b1: 1;
 | 
			
		||||
    uint16_t b2: 1;
 | 
			
		||||
    uint16_t b3: 1;
 | 
			
		||||
    uint16_t b4: 1;
 | 
			
		||||
    uint16_t b5: 1;
 | 
			
		||||
    uint16_t b6: 1;
 | 
			
		||||
    uint16_t b7: 1;
 | 
			
		||||
    uint16_t b8: 1;
 | 
			
		||||
    uint16_t b9: 1;
 | 
			
		||||
    uint16_t bA: 1;
 | 
			
		||||
    uint16_t bB: 1;
 | 
			
		||||
    uint16_t bC: 1;
 | 
			
		||||
    uint16_t bD: 1;
 | 
			
		||||
    uint16_t bE: 1;
 | 
			
		||||
    uint16_t bF: 1;
 | 
			
		||||
};//ZONE_REGISTER_16_BIT_FIELD
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct ZONE_REGISTER_16_BYTE_FIELD
 | 
			
		||||
{
 | 
			
		||||
    uint16_t bt0 :8;
 | 
			
		||||
    uint16_t bt1 :8;
 | 
			
		||||
};//ZONE_REGISTER_16_BYTE_FIELD
 | 
			
		||||
 | 
			
		||||
union ZONE_REGISTER_16
 | 
			
		||||
{
 | 
			
		||||
    uint16_t                u16;
 | 
			
		||||
    int16_t                 i16;
 | 
			
		||||
    ZONE_REGISTER_16_BIT_FIELD   bit;
 | 
			
		||||
    ZONE_REGISTER_16_BYTE_FIELD  byte;
 | 
			
		||||
};//REGISTER_16
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* SYSCTRL_MEMORYZONE_H_ */
 | 
			
		||||
@ -1,105 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * MemoryZone0.h
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "DSP28335/MemoryZone.h"
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef SYSCTRL_MEMORYZONE0_H_
 | 
			
		||||
#define SYSCTRL_MEMORYZONE0_H_
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct ZONE0_Bank_H
 | 
			
		||||
{
 | 
			
		||||
    ZONE_REGISTER_16 h0;
 | 
			
		||||
    ZONE_REGISTER_16 h1;
 | 
			
		||||
    ZONE_REGISTER_16 h2;
 | 
			
		||||
    ZONE_REGISTER_16 h3;
 | 
			
		||||
    ZONE_REGISTER_16 h4;
 | 
			
		||||
    ZONE_REGISTER_16 h5;
 | 
			
		||||
    ZONE_REGISTER_16 h6;
 | 
			
		||||
    ZONE_REGISTER_16 h7;
 | 
			
		||||
    ZONE_REGISTER_16 h8;
 | 
			
		||||
    ZONE_REGISTER_16 h9;
 | 
			
		||||
    ZONE_REGISTER_16 hA;
 | 
			
		||||
    ZONE_REGISTER_16 hB;
 | 
			
		||||
    ZONE_REGISTER_16 hC;
 | 
			
		||||
    ZONE_REGISTER_16 hD;
 | 
			
		||||
    ZONE_REGISTER_16 hE;
 | 
			
		||||
    ZONE_REGISTER_16 hF;
 | 
			
		||||
};//
 | 
			
		||||
 | 
			
		||||
struct ZONE0_Bank_HH
 | 
			
		||||
{
 | 
			
		||||
    ZONE0_Bank_H hh0;
 | 
			
		||||
    ZONE0_Bank_H hh1;
 | 
			
		||||
    ZONE0_Bank_H hh2;
 | 
			
		||||
    ZONE0_Bank_H hh3;
 | 
			
		||||
    ZONE0_Bank_H hh4;
 | 
			
		||||
    ZONE0_Bank_H hh5;
 | 
			
		||||
    ZONE0_Bank_H hh6;
 | 
			
		||||
    ZONE0_Bank_H hh7;
 | 
			
		||||
    ZONE0_Bank_H hh8;
 | 
			
		||||
    ZONE0_Bank_H hh9;
 | 
			
		||||
    ZONE0_Bank_H hhA;
 | 
			
		||||
    ZONE0_Bank_H hhB;
 | 
			
		||||
    ZONE0_Bank_H hhC;
 | 
			
		||||
    ZONE0_Bank_H hhD;
 | 
			
		||||
    ZONE0_Bank_H hhE;
 | 
			
		||||
    ZONE0_Bank_H hhF;
 | 
			
		||||
};//
 | 
			
		||||
 | 
			
		||||
struct ZONE0_Bank_HHH
 | 
			
		||||
{
 | 
			
		||||
    ZONE0_Bank_HH hhh0;
 | 
			
		||||
    ZONE0_Bank_HH hhh1;
 | 
			
		||||
    ZONE0_Bank_HH hhh2;
 | 
			
		||||
    ZONE0_Bank_HH hhh3;
 | 
			
		||||
    ZONE0_Bank_HH hhh4;
 | 
			
		||||
    ZONE0_Bank_HH hhh5;
 | 
			
		||||
    ZONE0_Bank_HH hhh6;
 | 
			
		||||
    ZONE0_Bank_HH hhh7;
 | 
			
		||||
    ZONE0_Bank_HH hhh8;
 | 
			
		||||
    ZONE0_Bank_HH hhh9;
 | 
			
		||||
    ZONE0_Bank_HH hhhA;
 | 
			
		||||
    ZONE0_Bank_HH hhhB;
 | 
			
		||||
    ZONE0_Bank_HH hhhC;
 | 
			
		||||
    ZONE0_Bank_HH hhhD;
 | 
			
		||||
    ZONE0_Bank_HH hhhE;
 | 
			
		||||
    ZONE0_Bank_HH hhhF;
 | 
			
		||||
};//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct DATA_ZONE0_STRUCTURE
 | 
			
		||||
{
 | 
			
		||||
    int16_t &cmpr_a;
 | 
			
		||||
    int16_t &cmpr_b;
 | 
			
		||||
    int16_t &cmpr_c;
 | 
			
		||||
    DATA_ZONE0_STRUCTURE(int16_t &cmpa, int16_t &cmpb, int16_t &cmpc):
 | 
			
		||||
        cmpr_a(cmpa),
 | 
			
		||||
        cmpr_b(cmpb),
 | 
			
		||||
        cmpr_c(cmpc)
 | 
			
		||||
    {}
 | 
			
		||||
};//
 | 
			
		||||
 | 
			
		||||
struct ADC_ACCESS_STRUCTURE
 | 
			
		||||
{
 | 
			
		||||
    int16_t *read_channel_a0;
 | 
			
		||||
    int16_t *read_channel_a1;
 | 
			
		||||
    int16_t *read_channel_b0;
 | 
			
		||||
    int16_t *read_channel_b1;
 | 
			
		||||
    int16_t *read_channel_c0;
 | 
			
		||||
    int16_t *read_channel_c1;
 | 
			
		||||
};//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* SYSCTRL_MEMORYZONE0_H_ */
 | 
			
		||||
@ -1,68 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * MemoryZone7.h
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "DSP28335/MemoryZone.h"
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef SYSCTRL_MEMORYZONE7_H_
 | 
			
		||||
#define SYSCTRL_MEMORYZONE7_H_
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct ZONE7_Bank_H
 | 
			
		||||
{
 | 
			
		||||
    ZONE_REGISTER_16 h0;
 | 
			
		||||
    ZONE_REGISTER_16 h1;
 | 
			
		||||
    ZONE_REGISTER_16 h2;
 | 
			
		||||
    ZONE_REGISTER_16 h3;
 | 
			
		||||
    ZONE_REGISTER_16 h4;
 | 
			
		||||
    ZONE_REGISTER_16 h5;
 | 
			
		||||
    ZONE_REGISTER_16 h6;
 | 
			
		||||
    ZONE_REGISTER_16 h7;
 | 
			
		||||
    ZONE_REGISTER_16 h8;
 | 
			
		||||
    ZONE_REGISTER_16 h9;
 | 
			
		||||
    ZONE_REGISTER_16 hA;
 | 
			
		||||
    ZONE_REGISTER_16 hB;
 | 
			
		||||
    ZONE_REGISTER_16 hC;
 | 
			
		||||
    ZONE_REGISTER_16 hD;
 | 
			
		||||
    ZONE_REGISTER_16 hE;
 | 
			
		||||
    ZONE_REGISTER_16 hF;
 | 
			
		||||
};//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct ZONE7_Bank_HH
 | 
			
		||||
{
 | 
			
		||||
    ZONE7_Bank_H hh0;
 | 
			
		||||
    ZONE7_Bank_H hh1;
 | 
			
		||||
    ZONE7_Bank_H hh2;
 | 
			
		||||
    ZONE7_Bank_H hh3;
 | 
			
		||||
    ZONE7_Bank_H hh4;
 | 
			
		||||
    ZONE7_Bank_H hh5;
 | 
			
		||||
    ZONE7_Bank_H hh6;
 | 
			
		||||
    ZONE7_Bank_H hh7;
 | 
			
		||||
    ZONE7_Bank_H hh8;
 | 
			
		||||
    ZONE7_Bank_H hh9;
 | 
			
		||||
    ZONE7_Bank_H hhA;
 | 
			
		||||
    ZONE7_Bank_H hhB;
 | 
			
		||||
    ZONE7_Bank_H hhC;
 | 
			
		||||
    ZONE7_Bank_H hhD;
 | 
			
		||||
    ZONE7_Bank_H hhE;
 | 
			
		||||
    ZONE7_Bank_H hhF;
 | 
			
		||||
};//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct ZONE7_Bank_HHH
 | 
			
		||||
{
 | 
			
		||||
    ZONE7_Bank_HH hhh0;
 | 
			
		||||
    ZONE7_Bank_HH hhh1;
 | 
			
		||||
    ZONE7_Bank_HH hhh2;
 | 
			
		||||
    ZONE7_Bank_HH hhh3;
 | 
			
		||||
};//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* SYSCTRL_MEMORYZONE7_H_ */
 | 
			
		||||
@ -1,243 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * SPIA.cpp
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "DSP28335/SPIA.h"
 | 
			
		||||
 | 
			
		||||
namespace DSP28335
 | 
			
		||||
{
 | 
			
		||||
//CONSTRUCTOR
 | 
			
		||||
SPIA::SPIA():
 | 
			
		||||
        SPIBase(),
 | 
			
		||||
        m_fifo_tx_status(0),
 | 
			
		||||
        m_data_tx_len(0),
 | 
			
		||||
        m_data_tx_counter(0),
 | 
			
		||||
        m_fifo_tx(),
 | 
			
		||||
        m_fifo_rx(),
 | 
			
		||||
        _gpio_setup(SPIA_GPIO_SETUP_DEFAULT)
 | 
			
		||||
{}//CONSTRUCTOR
 | 
			
		||||
 | 
			
		||||
void SPIA::setup()
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    SpiaRegs.SPICCR.bit.SPISWRESET = 0;     // Software Reset SPI
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    SpiaRegs.SPICTL.bit.MASTER_SLAVE = 1;   // Master
 | 
			
		||||
 | 
			
		||||
    // FRAM MODE 0 - CLKPOLARITY = 0, CLK_PHASE = 0
 | 
			
		||||
    //SpiaRegs.SPICTL.bit.CLK_PHASE = 0;      // Normal Clock Phase
 | 
			
		||||
    //SpiaRegs.SPICCR.bit.CLKPOLARITY = 0;    // Shift Clock Polarity
 | 
			
		||||
 | 
			
		||||
    // FRAM MODE 3 - CLKPOLARITY = 1, CLK_PHASE = 0
 | 
			
		||||
    SpiaRegs.SPICTL.bit.CLK_PHASE = 0;      // Normal Clock Phase
 | 
			
		||||
    SpiaRegs.SPICCR.bit.CLKPOLARITY = 1;    // Shift Clock Polarity
 | 
			
		||||
 | 
			
		||||
    SpiaRegs.SPICCR.bit.SPILBK = 0;         // Loopback
 | 
			
		||||
 | 
			
		||||
    SpiaRegs.SPIBRR = 36;                   // Baud Rate = LSPCLK/(36+1) = 37.5MHz/(36+1) = 1MHz
 | 
			
		||||
    SpiaRegs.SPICCR.bit.SPICHAR = 7;        // 8-bit word
 | 
			
		||||
 | 
			
		||||
    SpiaRegs.SPISTS.all = 0;                // Clear OVERRUN_FLAG, INT_FLAG, BUFFULL_FLAG
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    // FIFO SPI
 | 
			
		||||
    SpiaRegs.SPIFFTX.bit.SPIRST = 0;        // Software reset FIFO SPI
 | 
			
		||||
    SpiaRegs.SPIFFTX.bit.SPIFFENA = 1;      // Enable SPI FIFO
 | 
			
		||||
    SpiaRegs.SPIFFTX.bit.TXFIFO = 1;        // Release TX FIFO from Reset
 | 
			
		||||
    SpiaRegs.SPIFFTX.bit.TXFFINTCLR = 1;    // TXFIFO Interrupt Clear
 | 
			
		||||
    SpiaRegs.SPIFFRX.bit.RXFFOVFCLR = 1;    // Receive FIFO Overflow Clear
 | 
			
		||||
    SpiaRegs.SPIFFRX.bit.RXFFINTCLR = 1;    // Receive FIFO Interrupt Clear
 | 
			
		||||
    SpiaRegs.SPIFFTX.bit.TXFFIENA = 1;      // TX FIFO Interrupt Enable
 | 
			
		||||
    //SpiaRegs.SPIFFRX.bit.RXFFIENA = 1;      // RX FIFO Interrupt Enable
 | 
			
		||||
    SpiaRegs.SPIFFTX.bit.SPIRST = 1;        // Release SPI FIFO
 | 
			
		||||
    SpiaRegs.SPIFFRX.bit.RXFIFORESET = 1;   // Re-enable receive FIFO operation
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    SpiaRegs.SPICCR.bit.SPISWRESET = 1; // Release SPI
 | 
			
		||||
 | 
			
		||||
    (*_gpio_setup)();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
void SPIA::setup(DSP28335::SPISetup& setup)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    _gpio_setup = setup.gpio_setup;
 | 
			
		||||
 | 
			
		||||
    (*_gpio_setup)();
 | 
			
		||||
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
void SPIA::get_default_configuration(DSP28335::SPIConfiguration& config)
 | 
			
		||||
{
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
void SPIA::get_configuration(DSP28335::SPIConfiguration& config)
 | 
			
		||||
{
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
void SPIA::set_configuration(DSP28335::SPIConfiguration& config)
 | 
			
		||||
{
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
// #pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void SPIA::clear_tx_interrupt()
 | 
			
		||||
{
 | 
			
		||||
    // Interrupt acknowledge SPITXINTA
 | 
			
		||||
    SpiaRegs.SPIFFTX.bit.TXFFINTCLR = 1;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
// #pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void SPIA::write(Uint16 data, Uint16 addr)
 | 
			
		||||
{
 | 
			
		||||
    m_fifo_tx[0] = FRAM_OPCODE_WREN;
 | 
			
		||||
    m_fifo_tx[1] = FRAM_OPCODE_WRITE;
 | 
			
		||||
    m_fifo_tx[2] = addr & 0xff00;
 | 
			
		||||
    m_fifo_tx[3] = (addr & 0x00ff) << 8;
 | 
			
		||||
    m_fifo_tx[4] = data & 0xff00;
 | 
			
		||||
    m_fifo_tx[5] = (data & 0x00ff) << 8;
 | 
			
		||||
    m_fifo_tx[6] = 0;
 | 
			
		||||
    m_fifo_tx[7] = 0;
 | 
			
		||||
    m_fifo_tx[8] = 0;
 | 
			
		||||
    m_fifo_tx[9] = 0;
 | 
			
		||||
    m_fifo_tx[10] = 0;
 | 
			
		||||
    m_fifo_tx[11] = 0;
 | 
			
		||||
    m_fifo_tx[12] = 0;
 | 
			
		||||
    m_fifo_tx[13] = 0;
 | 
			
		||||
    m_fifo_tx[14] = 0;
 | 
			
		||||
    m_fifo_tx[15] = 0;
 | 
			
		||||
    //
 | 
			
		||||
    m_data_tx_len = 6;
 | 
			
		||||
 | 
			
		||||
    SpiaRegs.SPIFFTX.bit.TXFIFO = 0;
 | 
			
		||||
 | 
			
		||||
    for(m_data_tx_counter = 0; m_data_tx_counter < m_data_tx_len; m_data_tx_counter++)
 | 
			
		||||
    {
 | 
			
		||||
        SpiaRegs.SPITXBUF = m_fifo_tx[m_data_tx_counter];
 | 
			
		||||
        //
 | 
			
		||||
    }//for
 | 
			
		||||
 | 
			
		||||
    SpiaRegs.SPIFFTX.bit.TXFIFO = 1;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
// #pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void SPIA::erase(Uint16 addr)
 | 
			
		||||
{
 | 
			
		||||
    m_fifo_tx[0] = FRAM_OPCODE_WREN;
 | 
			
		||||
    m_fifo_tx[1] = FRAM_OPCODE_WRITE;
 | 
			
		||||
    m_fifo_tx[2] = addr & 0xff00;
 | 
			
		||||
    m_fifo_tx[3] = (addr & 0x00ff) << 8;
 | 
			
		||||
    m_fifo_tx[4] = FRAM_OPCODE_ERASE;
 | 
			
		||||
    m_fifo_tx[5] = FRAM_OPCODE_ERASE;
 | 
			
		||||
    m_fifo_tx[6] = 0;
 | 
			
		||||
    m_fifo_tx[7] = 0;
 | 
			
		||||
    m_fifo_tx[8] = 0;
 | 
			
		||||
    m_fifo_tx[9] = 0;
 | 
			
		||||
    m_fifo_tx[10] = 0;
 | 
			
		||||
    m_fifo_tx[11] = 0;
 | 
			
		||||
    m_fifo_tx[12] = 0;
 | 
			
		||||
    m_fifo_tx[13] = 0;
 | 
			
		||||
    m_fifo_tx[14] = 0;
 | 
			
		||||
    m_fifo_tx[15] = 0;
 | 
			
		||||
    //
 | 
			
		||||
    m_data_tx_len = 6;
 | 
			
		||||
 | 
			
		||||
    SpiaRegs.SPIFFTX.bit.TXFIFO = 0;
 | 
			
		||||
 | 
			
		||||
    for(m_data_tx_counter = 0; m_data_tx_counter < m_data_tx_len; m_data_tx_counter++)
 | 
			
		||||
    {
 | 
			
		||||
        SpiaRegs.SPITXBUF = m_fifo_tx[m_data_tx_counter];
 | 
			
		||||
        //
 | 
			
		||||
    }//for
 | 
			
		||||
 | 
			
		||||
    SpiaRegs.SPIFFTX.bit.TXFIFO = 1;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
// #pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void SPIA::read(Uint16 addr)
 | 
			
		||||
{
 | 
			
		||||
    m_fifo_tx[0] = FRAM_OPCODE_READ;
 | 
			
		||||
    m_fifo_tx[1] = addr & 0xff00;
 | 
			
		||||
    m_fifo_tx[2] = (addr & 0x00ff) << 8;
 | 
			
		||||
    m_fifo_tx[3] = FRAM_OPCODE_DUMMY;
 | 
			
		||||
    m_fifo_tx[4] = FRAM_OPCODE_DUMMY;
 | 
			
		||||
    m_fifo_tx[5] = 0;
 | 
			
		||||
    m_fifo_tx[6] = 0;
 | 
			
		||||
    m_fifo_tx[7] = 0;
 | 
			
		||||
    m_fifo_tx[8] = 0;
 | 
			
		||||
    m_fifo_tx[9] = 0;
 | 
			
		||||
    m_fifo_tx[10] = 0;
 | 
			
		||||
    m_fifo_tx[11] = 0;
 | 
			
		||||
    m_fifo_tx[12] = 0;
 | 
			
		||||
    m_fifo_tx[13] = 0;
 | 
			
		||||
    m_fifo_tx[14] = 0;
 | 
			
		||||
    m_fifo_tx[15] = 0;
 | 
			
		||||
 | 
			
		||||
    m_data_tx_len = 5;
 | 
			
		||||
 | 
			
		||||
    SpiaRegs.SPIFFTX.bit.TXFIFO = 0;
 | 
			
		||||
 | 
			
		||||
    for(m_data_tx_counter = 0; m_data_tx_counter < m_data_tx_len; m_data_tx_counter++)
 | 
			
		||||
    {
 | 
			
		||||
        SpiaRegs.SPITXBUF = m_fifo_tx[m_data_tx_counter];
 | 
			
		||||
        m_fifo_tx[m_data_tx_counter] = 0;
 | 
			
		||||
        //
 | 
			
		||||
    }//for
 | 
			
		||||
 | 
			
		||||
    SpiaRegs.SPIFFTX.bit.TXFIFO = 1;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
// #pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
Uint16 SPIA::get_read_data()
 | 
			
		||||
{
 | 
			
		||||
    m_fifo_rx[0] = SpiaRegs.SPIRXBUF;
 | 
			
		||||
    m_fifo_rx[1] = SpiaRegs.SPIRXBUF;
 | 
			
		||||
    m_fifo_rx[2] = SpiaRegs.SPIRXBUF;
 | 
			
		||||
    m_fifo_rx[3] = SpiaRegs.SPIRXBUF;
 | 
			
		||||
    m_fifo_rx[4] = SpiaRegs.SPIRXBUF;
 | 
			
		||||
    m_fifo_rx[5] = 0;
 | 
			
		||||
    m_fifo_rx[6] = 0;
 | 
			
		||||
    m_fifo_rx[7] = 0;
 | 
			
		||||
    m_fifo_rx[8] = 0;
 | 
			
		||||
    m_fifo_rx[9] = 0;
 | 
			
		||||
    m_fifo_rx[10] = 0;
 | 
			
		||||
    m_fifo_rx[11] = 0;
 | 
			
		||||
    m_fifo_rx[12] = 0;
 | 
			
		||||
    m_fifo_rx[13] = 0;
 | 
			
		||||
    m_fifo_rx[14] = 0;
 | 
			
		||||
    m_fifo_rx[15] = 0;
 | 
			
		||||
    //
 | 
			
		||||
    return (Uint16)((m_fifo_rx[3] << 8) |  (m_fifo_rx[4] & 0x00ff));
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
// #pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
Uint16 SPIA::get_fifo_tx_status()
 | 
			
		||||
{
 | 
			
		||||
    return m_fifo_tx_status = (Uint16)SpiaRegs.SPIFFTX.bit.TXFFST;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
void SPIA::_configure(DSP28335::SPIConfiguration& config)
 | 
			
		||||
{
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} /* namespace DSP28335 */
 | 
			
		||||
@ -1,101 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * SPIA.h
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "DSP28335/SPIBase.h"
 | 
			
		||||
 | 
			
		||||
#ifndef DSP28335_SPIA_H_
 | 
			
		||||
#define DSP28335_SPIA_H_
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef SPIA_GPIO_SETUP_DEFAULT_DEFINES
 | 
			
		||||
#define SPIA_GPIO_SETUP_DEFAULT (&DSP28335::GPIO::gpio_spia_setup)
 | 
			
		||||
#define SPIA_GPIO_SETUP_DEFAULT_DEFINES
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef FRAM_OPCODE_WREN_DEFINES
 | 
			
		||||
#define FRAM_OPCODE_WREN    (uint16_t)0x0600
 | 
			
		||||
#define FRAM_OPCODE_WREN_DEFINES
 | 
			
		||||
#endif
 | 
			
		||||
//
 | 
			
		||||
#ifndef FRAM_OPCODE_WRDI_DEFINES
 | 
			
		||||
#define FRAM_OPCODE_WRDI    (uint16_t)0x0400
 | 
			
		||||
#define FRAM_OPCODE_WRDI_DEFINES
 | 
			
		||||
#endif
 | 
			
		||||
//
 | 
			
		||||
#ifndef FRAM_OPCODE_RDSR_DEFINES
 | 
			
		||||
#define FRAM_OPCODE_RDSR    (uint16_t)0x0500
 | 
			
		||||
#define FRAM_OPCODE_RDSR_DEFINES
 | 
			
		||||
#endif
 | 
			
		||||
//
 | 
			
		||||
#ifndef FRAM_OPCODE_WRSR_DEFINES
 | 
			
		||||
#define FRAM_OPCODE_WRSR    (uint16_t)0x0100
 | 
			
		||||
#define FRAM_OPCODE_WRSR_DEFINES
 | 
			
		||||
#endif
 | 
			
		||||
//
 | 
			
		||||
#ifndef FRAM_OPCODE_READ_DEFINES
 | 
			
		||||
#define FRAM_OPCODE_READ    (uint16_t)0x0300
 | 
			
		||||
#define FRAM_OPCODE_READ_DEFINES
 | 
			
		||||
#endif
 | 
			
		||||
//
 | 
			
		||||
#ifndef FRAM_OPCODE_WRITE_DEFINES
 | 
			
		||||
#define FRAM_OPCODE_WRITE   (uint16_t)0x0200
 | 
			
		||||
#define FRAM_OPCODE_WRITE_DEFINES
 | 
			
		||||
#endif
 | 
			
		||||
//
 | 
			
		||||
#ifndef FRAM_OPCODE_DUMMY_DEFINES
 | 
			
		||||
#define FRAM_OPCODE_DUMMY   (uint16_t)0x5500
 | 
			
		||||
#define FRAM_OPCODE_DUMMY_DEFINES
 | 
			
		||||
#endif
 | 
			
		||||
//
 | 
			
		||||
#ifndef FRAM_OPCODE_ERASE_DEFINES
 | 
			
		||||
#define FRAM_OPCODE_ERASE   (uint16_t)0xFF00
 | 
			
		||||
#define FRAM_OPCODE_ERASE_DEFINES
 | 
			
		||||
#endif
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace DSP28335
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class SPIA: public SPIBase
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    enum mode_t {UNDEFINED=0, CONFIGURATE=1, OPERATIONAL=2};
 | 
			
		||||
private:
 | 
			
		||||
    Uint16 m_fifo_tx_status;
 | 
			
		||||
    Uint16 m_data_tx_len;
 | 
			
		||||
    Uint16 m_data_tx_counter;
 | 
			
		||||
private:
 | 
			
		||||
    Uint16 m_fifo_tx[16];
 | 
			
		||||
    Uint16 m_fifo_rx[16];
 | 
			
		||||
public:
 | 
			
		||||
    SPIA();
 | 
			
		||||
public:
 | 
			
		||||
    void clear_tx_interrupt();
 | 
			
		||||
public:
 | 
			
		||||
    void setup();
 | 
			
		||||
    void setup(DSP28335::SPISetup& setup);
 | 
			
		||||
    void get_default_configuration(DSP28335::SPIConfiguration& config);
 | 
			
		||||
    void get_configuration(DSP28335::SPIConfiguration& config);
 | 
			
		||||
    void set_configuration(DSP28335::SPIConfiguration& config);
 | 
			
		||||
public:
 | 
			
		||||
    void write(Uint16 data, Uint16 addr);
 | 
			
		||||
    void erase(Uint16 addr);
 | 
			
		||||
    void read(Uint16 addr);
 | 
			
		||||
    Uint16 get_read_data();
 | 
			
		||||
    Uint16 get_fifo_tx_status();
 | 
			
		||||
private:
 | 
			
		||||
    void _configure(DSP28335::SPIConfiguration& config);
 | 
			
		||||
    void (*_gpio_setup)();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
} /* namespace DSP28335 */
 | 
			
		||||
 | 
			
		||||
#endif /* DSP28335_SPIA_H_ */
 | 
			
		||||
@ -1,16 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * SPIBase.cpp
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "DSP28335/SPIBase.h"
 | 
			
		||||
 | 
			
		||||
namespace DSP28335
 | 
			
		||||
{
 | 
			
		||||
//CONSTRUCTOR
 | 
			
		||||
SPIBase::SPIBase()
 | 
			
		||||
{}//CONSTRUCTOR
 | 
			
		||||
 | 
			
		||||
} /* namespace DSP28335 */
 | 
			
		||||
@ -1,53 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * SPIBase.h
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
#include "F28335/DSP28x_Project.h"
 | 
			
		||||
 | 
			
		||||
#include "DSP28335/GPIO.h"
 | 
			
		||||
#include "RUDRIVEFRAMEWORK/DataType.h"
 | 
			
		||||
#include "RUDRIVEFRAMEWORK/SystemDefinitions.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef DSP28335_SPIBASE_H_
 | 
			
		||||
#define DSP28335_SPIBASE_H_
 | 
			
		||||
 | 
			
		||||
namespace DSP28335
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct SPIConfiguration
 | 
			
		||||
{
 | 
			
		||||
    SPIConfiguration(){}
 | 
			
		||||
};//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct SPISetup
 | 
			
		||||
{
 | 
			
		||||
    pGPIO_FUNCTION gpio_setup;
 | 
			
		||||
    SPISetup():
 | 
			
		||||
        gpio_setup(&DSP28335::GPIO::gpio_spia_setup)
 | 
			
		||||
    {}
 | 
			
		||||
};//SPISetup
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class SPIBase
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    SPIBase();
 | 
			
		||||
public:
 | 
			
		||||
    virtual void setup() = 0;
 | 
			
		||||
    virtual void setup(DSP28335::SPISetup& setup) = 0;
 | 
			
		||||
    virtual void get_default_configuration(DSP28335::SPIConfiguration& config) = 0;
 | 
			
		||||
    virtual void get_configuration(DSP28335::SPIConfiguration& config) = 0;
 | 
			
		||||
    virtual void set_configuration(DSP28335::SPIConfiguration& config) = 0;
 | 
			
		||||
protected:
 | 
			
		||||
    virtual void _configure(DSP28335::SPIConfiguration& config) = 0;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
} /* namespace DSP28335 */
 | 
			
		||||
 | 
			
		||||
#endif /* DSP28335_SPIBASE_H_ */
 | 
			
		||||
@ -1,232 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * XINTF.cpp
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "DSP28335/XINTF.h"
 | 
			
		||||
 | 
			
		||||
namespace DSP28335
 | 
			
		||||
{
 | 
			
		||||
//CONSTRUCTOR
 | 
			
		||||
XINTF::XINTF():
 | 
			
		||||
        CPUBase(),
 | 
			
		||||
        _gpio_setup(&DSP28335::GPIO::gpio_xintf_16bit_setup)
 | 
			
		||||
{}//CONSTRUCTOR
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void XINTF::setup(DSP28335::XINTFSetup& setup)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    if(m_mode == DSP28335::XINTF::UNDEFINED)
 | 
			
		||||
    {
 | 
			
		||||
        //
 | 
			
		||||
        // This shows how to write to the XINTF registers.  The
 | 
			
		||||
        // values used here are the default state after reset.
 | 
			
		||||
        // Different hardware will require a different configuration.
 | 
			
		||||
        //
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        // Any changes to XINTF timing should only be made by code
 | 
			
		||||
        // running outside of the XINTF.
 | 
			
		||||
        //
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        //                       All Zones
 | 
			
		||||
        // Timing for all zones based on XTIMCLK = 1/2 SYSCLKOUT
 | 
			
		||||
        //
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        //struct XINTCNF2_BITS {     // bits  description
 | 
			
		||||
        //    Uint16 WRBUFF:2;       // 1:0   Write buffer depth
 | 
			
		||||
        //    Uint16 CLKMODE:1;      // 2     Ratio for XCLKOUT with respect to XTIMCLK
 | 
			
		||||
        //    Uint16 CLKOFF:1;       // 3     Disable XCLKOUT
 | 
			
		||||
        //    Uint16 rsvd1:2;        // 5:4   reserved
 | 
			
		||||
        //    Uint16 WLEVEL:2;       // 7:6   Current level of the write buffer
 | 
			
		||||
        //    Uint16 rsvd2:1;        // 8     reserved
 | 
			
		||||
        //    Uint16 HOLD:1;         // 9     Hold enable/disable
 | 
			
		||||
        //    Uint16 HOLDS:1;        // 10    Current state of HOLDn input
 | 
			
		||||
        //    Uint16 HOLDAS:1;       // 11    Current state of HOLDAn output
 | 
			
		||||
        //    Uint16 rsvd3:4;        // 15:12 reserved
 | 
			
		||||
        //    Uint16 XTIMCLK:3;      // 18:16 Ratio for XTIMCLK
 | 
			
		||||
        //    Uint16 rsvd4:13;       // 31:19 reserved
 | 
			
		||||
        //};
 | 
			
		||||
 | 
			
		||||
        EALLOW;
 | 
			
		||||
        XintfRegs.XINTCNF2.bit.XTIMCLK = 1;
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        // No write buffering
 | 
			
		||||
        //
 | 
			
		||||
        XintfRegs.XINTCNF2.bit.WRBUFF = 0;
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        // XCLKOUT is enabled
 | 
			
		||||
        //
 | 
			
		||||
        XintfRegs.XINTCNF2.bit.CLKOFF = 0;
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        // XCLKOUT = XTIMCLK/2
 | 
			
		||||
        //
 | 
			
		||||
        XintfRegs.XINTCNF2.bit.CLKMODE = 1;
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        // WLEVEL
 | 
			
		||||
        //
 | 
			
		||||
        XintfRegs.XINTCNF2.bit.WLEVEL = 0;
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        // HOLD
 | 
			
		||||
        //
 | 
			
		||||
        XintfRegs.XINTCNF2.bit.HOLD = 0;
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        // HOLDS
 | 
			
		||||
        //
 | 
			
		||||
        XintfRegs.XINTCNF2.bit.HOLDS = 1;
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        // HOLDAS
 | 
			
		||||
        //
 | 
			
		||||
        XintfRegs.XINTCNF2.bit.HOLDAS = 1;
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        //                       Zone 0
 | 
			
		||||
        // When using ready, ACTIVE must be 1 or greater
 | 
			
		||||
        // Lead must always be 1 or greater
 | 
			
		||||
        // Zone write timing
 | 
			
		||||
        //
 | 
			
		||||
        XintfRegs.XTIMING0.bit.XWRLEAD = 3;
 | 
			
		||||
        XintfRegs.XTIMING0.bit.XWRACTIVE = 5; // default 7;
 | 
			
		||||
        XintfRegs.XTIMING0.bit.XWRTRAIL = 1;  // default 3;
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        // Zone read timing
 | 
			
		||||
        //
 | 
			
		||||
        XintfRegs.XTIMING0.bit.XRDLEAD = 3;
 | 
			
		||||
        XintfRegs.XTIMING0.bit.XRDACTIVE = 5; // default 7;
 | 
			
		||||
        XintfRegs.XTIMING0.bit.XRDTRAIL = 1;  // default 3;
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        // double all Zone read/write lead/active/trail timing
 | 
			
		||||
        //
 | 
			
		||||
        XintfRegs.XTIMING0.bit.X2TIMING = 1;
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        // Zone will sample XREADY signal
 | 
			
		||||
        //
 | 
			
		||||
        XintfRegs.XTIMING0.bit.USEREADY = 1;
 | 
			
		||||
        XintfRegs.XTIMING0.bit.READYMODE = 1;  // sample asynchronous
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        // Size must be either:
 | 
			
		||||
        // 0,1 = x32 or
 | 
			
		||||
        // 1,1 = x16 other values are reserved
 | 
			
		||||
        //
 | 
			
		||||
        XintfRegs.XTIMING0.bit.XSIZE = 3;
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        //                  Zone 6
 | 
			
		||||
        // When using ready, ACTIVE must be 1 or greater
 | 
			
		||||
        // Lead must always be 1 or greater
 | 
			
		||||
        // Zone write timing
 | 
			
		||||
        //
 | 
			
		||||
        XintfRegs.XTIMING6.bit.XWRLEAD = 3;
 | 
			
		||||
        XintfRegs.XTIMING6.bit.XWRACTIVE = 7;
 | 
			
		||||
        XintfRegs.XTIMING6.bit.XWRTRAIL = 3;
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        // Zone read timing
 | 
			
		||||
        //
 | 
			
		||||
        XintfRegs.XTIMING6.bit.XRDLEAD = 3;
 | 
			
		||||
        XintfRegs.XTIMING6.bit.XRDACTIVE = 7;
 | 
			
		||||
        XintfRegs.XTIMING6.bit.XRDTRAIL = 3;
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        // double all Zone read/write lead/active/trail timing
 | 
			
		||||
        //
 | 
			
		||||
        XintfRegs.XTIMING6.bit.X2TIMING = 1;
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        // Zone will sample XREADY signal
 | 
			
		||||
        //
 | 
			
		||||
        XintfRegs.XTIMING6.bit.USEREADY = 1;
 | 
			
		||||
        XintfRegs.XTIMING6.bit.READYMODE = 1;  // sample asynchronous
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        // Size must be either:
 | 
			
		||||
        // 0,1 = x32 or
 | 
			
		||||
        // 1,1 = x16 other values are reserved
 | 
			
		||||
        //
 | 
			
		||||
        XintfRegs.XTIMING6.bit.XSIZE = 3;
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        //                 Zone 7
 | 
			
		||||
        // When using ready, ACTIVE must be 1 or greater
 | 
			
		||||
        // Lead must always be 1 or greater
 | 
			
		||||
        // Zone write timing
 | 
			
		||||
        //
 | 
			
		||||
        XintfRegs.XTIMING7.bit.XWRLEAD = 3;
 | 
			
		||||
        XintfRegs.XTIMING7.bit.XWRACTIVE = 7;
 | 
			
		||||
        XintfRegs.XTIMING7.bit.XWRTRAIL = 3;
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        // Zone read timing
 | 
			
		||||
        //
 | 
			
		||||
        XintfRegs.XTIMING7.bit.XRDLEAD = 3;
 | 
			
		||||
        XintfRegs.XTIMING7.bit.XRDACTIVE = 7;
 | 
			
		||||
        XintfRegs.XTIMING7.bit.XRDTRAIL = 3;
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        // double all Zone read/write lead/active/trail timing
 | 
			
		||||
        //
 | 
			
		||||
        XintfRegs.XTIMING7.bit.X2TIMING = 1;
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        // Zone will sample XREADY signal
 | 
			
		||||
        //
 | 
			
		||||
        XintfRegs.XTIMING7.bit.USEREADY = 1;
 | 
			
		||||
        XintfRegs.XTIMING7.bit.READYMODE = 1;  // sample asynchronous
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        // Size must be either:
 | 
			
		||||
        // 0,1 = x32 or
 | 
			
		||||
        // 1,1 = x16 other values are reserved
 | 
			
		||||
        //
 | 
			
		||||
        XintfRegs.XTIMING7.bit.XSIZE = 3;
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        // Bank switching
 | 
			
		||||
        // Assume Zone 7 is slow, so add additional BCYC cycles
 | 
			
		||||
        // when ever switching from Zone 7 to another Zone.
 | 
			
		||||
        // This will help avoid bus contention.
 | 
			
		||||
        //
 | 
			
		||||
        XintfRegs.XBANK.bit.BANK = 7;
 | 
			
		||||
        XintfRegs.XBANK.bit.BCYC = 7;
 | 
			
		||||
        EDIS;
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        // Force a pipeline flush to ensure that the write to the last register
 | 
			
		||||
        // configured occurs before returning.
 | 
			
		||||
        //
 | 
			
		||||
        asm(" RPT #7 || NOP");
 | 
			
		||||
 | 
			
		||||
        if(setup.gpio_setup != 0)
 | 
			
		||||
        {
 | 
			
		||||
            _gpio_setup = setup.gpio_setup;
 | 
			
		||||
            //
 | 
			
		||||
            (*_gpio_setup)();
 | 
			
		||||
            //
 | 
			
		||||
            m_mode = DSP28335::XINTF::OPERATIONAL;
 | 
			
		||||
            m_status = true;
 | 
			
		||||
            //
 | 
			
		||||
        }//if
 | 
			
		||||
        //
 | 
			
		||||
    }//if
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
} /* namespace DSP28335 */
 | 
			
		||||
@ -1,41 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * XINTF.h
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "F28335/DSP28x_Project.h"
 | 
			
		||||
 | 
			
		||||
#include "DSP28335/GPIO.h"
 | 
			
		||||
#include "DSP28335/CPUBase.h"
 | 
			
		||||
 | 
			
		||||
#ifndef DSP28335_XINTF_H_
 | 
			
		||||
#define DSP28335_XINTF_H_
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace DSP28335
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
struct XINTFSetup
 | 
			
		||||
{
 | 
			
		||||
    pGPIO_FUNCTION gpio_setup;
 | 
			
		||||
    XINTFSetup():
 | 
			
		||||
        gpio_setup(&DSP28335::GPIO::gpio_xintf_16bit_setup)
 | 
			
		||||
    {}
 | 
			
		||||
};//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class XINTF: public CPUBase
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    XINTF();
 | 
			
		||||
    void setup(DSP28335::XINTFSetup& setup);
 | 
			
		||||
private:
 | 
			
		||||
    void (*_gpio_setup)();
 | 
			
		||||
};//
 | 
			
		||||
 | 
			
		||||
} /* namespace DSP28335 */
 | 
			
		||||
 | 
			
		||||
#endif /* DSP28335_XINTF_H_ */
 | 
			
		||||
@ -1,43 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * AnalogFault.cpp
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "PERIPHERY/AnalogFault.h"
 | 
			
		||||
 | 
			
		||||
namespace PERIPHERY
 | 
			
		||||
{
 | 
			
		||||
//CONSTRUCTOR
 | 
			
		||||
AnalogFault::AnalogFault():
 | 
			
		||||
        m_fault(0),
 | 
			
		||||
        _gpio_analog_fault_setup(&DSP28335::GPIO::gpio_analog_fault_setup),
 | 
			
		||||
        _analog_fault_read(&DSP28335::GPIO::gpio_analog_fault_read)
 | 
			
		||||
{}//CONSTRUCTOR
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void AnalogFault::setup(const AnaloFaultSetup& setup)
 | 
			
		||||
{
 | 
			
		||||
    _gpio_analog_fault_setup = setup.p_gpio_analog_fault_setup;
 | 
			
		||||
    _analog_fault_read = setup.p_analog_fault_read;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
void AnalogFault::get_hard_code_setup(AnaloFaultSetup& hsetup)
 | 
			
		||||
{
 | 
			
		||||
    hsetup.set_default();
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
void AnalogFault::get_fault(uint16_t& analog_fault)
 | 
			
		||||
{
 | 
			
		||||
    (*_analog_fault_read)(m_fault);
 | 
			
		||||
    analog_fault = m_fault;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} /* namespace PERIPHERY */
 | 
			
		||||
@ -1,59 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * AnalogFault.h
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <math.h>
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
#include "DSP28335/GPIO.h"
 | 
			
		||||
#include "PERIPHERY/PeripheryMap.h"
 | 
			
		||||
#include "RUDRIVEFRAMEWORK/DataType.h"
 | 
			
		||||
#include "RUDRIVEFRAMEWORK/SystemDefinitions.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef PERIPHERY_ANALOGFAULT_H_
 | 
			
		||||
#define PERIPHERY_ANALOGFAULT_H_
 | 
			
		||||
 | 
			
		||||
namespace PERIPHERY
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
struct AnaloFaultSetup
 | 
			
		||||
{
 | 
			
		||||
    pGPIO_FUNCTION      p_gpio_analog_fault_setup;
 | 
			
		||||
    pGPIO_FUNCTION_UINT p_analog_fault_read;
 | 
			
		||||
    void set_default()
 | 
			
		||||
    {
 | 
			
		||||
        p_gpio_analog_fault_setup = &DSP28335::GPIO::gpio_analog_fault_setup;
 | 
			
		||||
        p_analog_fault_read = &DSP28335::GPIO::gpio_analog_fault_read;
 | 
			
		||||
    };
 | 
			
		||||
    AnaloFaultSetup():
 | 
			
		||||
        p_gpio_analog_fault_setup(&DSP28335::GPIO::gpio_analog_fault_setup),
 | 
			
		||||
        p_analog_fault_read(&DSP28335::GPIO::gpio_analog_fault_read)
 | 
			
		||||
    {}
 | 
			
		||||
};//AnaloFaultSetup
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class AnalogFault
 | 
			
		||||
{
 | 
			
		||||
private:
 | 
			
		||||
    uint16_t m_fault;
 | 
			
		||||
public:
 | 
			
		||||
    AnalogFault();
 | 
			
		||||
public:
 | 
			
		||||
    void setup(const AnaloFaultSetup& setup);
 | 
			
		||||
    void get_hard_code_setup(AnaloFaultSetup& hsetup);
 | 
			
		||||
public:
 | 
			
		||||
    void get_fault(uint16_t& analog_fault);
 | 
			
		||||
private:
 | 
			
		||||
    void (*_gpio_analog_fault_setup)();
 | 
			
		||||
    void (*_analog_fault_read)(uint16_t& data);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
} /* namespace PERIPHERY */
 | 
			
		||||
 | 
			
		||||
#endif /* PERIPHERY_ANALOGFAULT_H_ */
 | 
			
		||||
@ -1,50 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * DigitalIO.cpp
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "PERIPHERY/DigitalIO.h"
 | 
			
		||||
 | 
			
		||||
namespace PERIPHERY
 | 
			
		||||
{
 | 
			
		||||
//CONSRUCTOR
 | 
			
		||||
DigitalIO::DigitalIO():
 | 
			
		||||
        m_pointer(0)
 | 
			
		||||
{}//CONSRUCTOR
 | 
			
		||||
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void DigitalIO::setup(uint16_t *memzone)
 | 
			
		||||
{
 | 
			
		||||
    m_pointer = memzone + OFFSET_DATA_DISCRETE_IO;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void DigitalIO::readDigitalIO(uint16_t& data)
 | 
			
		||||
{
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    data = *m_pointer;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void DigitalIO::writeDigitalIO(uint16_t data)
 | 
			
		||||
{
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    *m_pointer = data;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
} /* namespace PERIPHERY */
 | 
			
		||||
@ -1,79 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * DigitalIO.h
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <math.h>
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
#include "PERIPHERY/PeripheryMap.h"
 | 
			
		||||
#include "RUDRIVEFRAMEWORK/DataType.h"
 | 
			
		||||
#include "RUDRIVEFRAMEWORK/SystemDefinitions.h"
 | 
			
		||||
 | 
			
		||||
#ifndef PERIPHERY_DIGITALIO_H_
 | 
			
		||||
#define PERIPHERY_DIGITALIO_H_
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace PERIPHERY
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct DigitalIODataBitField
 | 
			
		||||
{
 | 
			
		||||
    uint16_t b00: 1;
 | 
			
		||||
    uint16_t b01: 1;
 | 
			
		||||
    uint16_t b02: 1;
 | 
			
		||||
    uint16_t b03: 1;
 | 
			
		||||
    uint16_t b04: 1;
 | 
			
		||||
    uint16_t b05: 1;
 | 
			
		||||
    uint16_t b06: 1;
 | 
			
		||||
    uint16_t b07: 1;
 | 
			
		||||
    uint16_t b08: 1;
 | 
			
		||||
    uint16_t b09: 1;
 | 
			
		||||
    uint16_t b10: 1;
 | 
			
		||||
    uint16_t b11: 1;
 | 
			
		||||
    uint16_t b12: 1;
 | 
			
		||||
    uint16_t b13: 1;
 | 
			
		||||
    uint16_t b14: 1;
 | 
			
		||||
    uint16_t b15: 1;
 | 
			
		||||
};//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
union DigitalIODataRegister
 | 
			
		||||
{
 | 
			
		||||
    uint16_t all;
 | 
			
		||||
    DigitalIODataBitField bit;
 | 
			
		||||
    DigitalIODataRegister():
 | 
			
		||||
        all(0)
 | 
			
		||||
    {}
 | 
			
		||||
};//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct DigitalIOData
 | 
			
		||||
{
 | 
			
		||||
    DigitalIODataRegister input;
 | 
			
		||||
    DigitalIODataRegister output;
 | 
			
		||||
    DigitalIOData():
 | 
			
		||||
        input(),
 | 
			
		||||
        output()
 | 
			
		||||
    {}
 | 
			
		||||
};//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class DigitalIO
 | 
			
		||||
{
 | 
			
		||||
private:
 | 
			
		||||
    uint16_t *m_pointer;
 | 
			
		||||
public:
 | 
			
		||||
    DigitalIO();
 | 
			
		||||
    void setup(uint16_t *memzone);
 | 
			
		||||
public:
 | 
			
		||||
    void readDigitalIO(uint16_t& data);
 | 
			
		||||
    void writeDigitalIO(uint16_t data);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
} /* namespace PERIPHERY */
 | 
			
		||||
 | 
			
		||||
#endif /* PERIPHERY_DIGITALIO_H_ */
 | 
			
		||||
@ -1,172 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * ExtADC.cpp
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "PERIPHERY/ExtADC.h"
 | 
			
		||||
 | 
			
		||||
namespace PERIPHERY
 | 
			
		||||
{
 | 
			
		||||
//CONSTRUCTOR
 | 
			
		||||
ExtADC::ExtADC():
 | 
			
		||||
        p_channel_00(0),
 | 
			
		||||
        p_channel_01(0),
 | 
			
		||||
        p_channel_02(0),
 | 
			
		||||
        p_channel_03(0),
 | 
			
		||||
        p_channel_04(0),
 | 
			
		||||
        p_channel_05(0),
 | 
			
		||||
        p_channel_06(0),
 | 
			
		||||
        p_channel_07(0),
 | 
			
		||||
        p_channel_08(0),
 | 
			
		||||
        p_channel_09(0),
 | 
			
		||||
        p_channel_10(0),
 | 
			
		||||
        p_channel_11(0),
 | 
			
		||||
        p_channel_12(0),
 | 
			
		||||
        p_channel_13(0),
 | 
			
		||||
        p_channel_14(0),
 | 
			
		||||
        p_channel_15(0),
 | 
			
		||||
        p_channel_16(0),
 | 
			
		||||
        p_channel_17(0),
 | 
			
		||||
        _gpio_setup(&DSP28335::GPIO::ext_adc_start_convertion_setup),
 | 
			
		||||
        _start_convertion(&DSP28335::GPIO::set_ext_adc_start_convertion),
 | 
			
		||||
        _stop_convertion(&DSP28335::GPIO::clear_ext_adc_start_convertion)
 | 
			
		||||
        //
 | 
			
		||||
{}//CONSTRUCTOR
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void ExtADC::setup(uint16_t *memzone)
 | 
			
		||||
{
 | 
			
		||||
    p_channel_00 = memzone + OFFSET_ADC_0_CHANNEL_0;
 | 
			
		||||
    p_channel_01 = memzone + OFFSET_ADC_0_CHANNEL_1;
 | 
			
		||||
    p_channel_02 = memzone + OFFSET_ADC_0_CHANNEL_2;
 | 
			
		||||
    p_channel_03 = memzone + OFFSET_ADC_0_CHANNEL_3;
 | 
			
		||||
    p_channel_04 = memzone + OFFSET_ADC_0_CHANNEL_4;
 | 
			
		||||
    p_channel_05 = memzone + OFFSET_ADC_0_CHANNEL_5;
 | 
			
		||||
 | 
			
		||||
    p_channel_06 = memzone + OFFSET_ADC_1_CHANNEL_0;
 | 
			
		||||
    p_channel_07 = memzone + OFFSET_ADC_1_CHANNEL_1;;
 | 
			
		||||
    p_channel_08 = memzone + OFFSET_ADC_1_CHANNEL_2;
 | 
			
		||||
    p_channel_09 = memzone + OFFSET_ADC_1_CHANNEL_3;
 | 
			
		||||
    p_channel_10 = memzone + OFFSET_ADC_1_CHANNEL_4;
 | 
			
		||||
    p_channel_11 = memzone + OFFSET_ADC_1_CHANNEL_5;
 | 
			
		||||
 | 
			
		||||
    p_channel_12 = memzone + OFFSET_ADC_2_CHANNEL_0;
 | 
			
		||||
    p_channel_13 = memzone + OFFSET_ADC_2_CHANNEL_1;
 | 
			
		||||
    p_channel_14 = memzone + OFFSET_ADC_2_CHANNEL_2;
 | 
			
		||||
    p_channel_15 = memzone + OFFSET_ADC_2_CHANNEL_3;
 | 
			
		||||
    p_channel_16 = memzone + OFFSET_ADC_2_CHANNEL_4;
 | 
			
		||||
    p_channel_17 = memzone + OFFSET_ADC_2_CHANNEL_5;
 | 
			
		||||
 | 
			
		||||
    (*_gpio_setup)();
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
void ExtADC::setup(uint16_t *memzone, const ExtADCSetup& setup)
 | 
			
		||||
{
 | 
			
		||||
    p_channel_00 = memzone + OFFSET_ADC_0_CHANNEL_0;
 | 
			
		||||
    p_channel_01 = memzone + OFFSET_ADC_0_CHANNEL_1;
 | 
			
		||||
    p_channel_02 = memzone + OFFSET_ADC_0_CHANNEL_2;
 | 
			
		||||
    p_channel_03 = memzone + OFFSET_ADC_0_CHANNEL_3;
 | 
			
		||||
    p_channel_04 = memzone + OFFSET_ADC_0_CHANNEL_4;
 | 
			
		||||
    p_channel_05 = memzone + OFFSET_ADC_0_CHANNEL_5;
 | 
			
		||||
 | 
			
		||||
    p_channel_06 = memzone + OFFSET_ADC_1_CHANNEL_0;
 | 
			
		||||
    p_channel_07 = memzone + OFFSET_ADC_1_CHANNEL_1;;
 | 
			
		||||
    p_channel_08 = memzone + OFFSET_ADC_1_CHANNEL_2;
 | 
			
		||||
    p_channel_09 = memzone + OFFSET_ADC_1_CHANNEL_3;
 | 
			
		||||
    p_channel_10 = memzone + OFFSET_ADC_1_CHANNEL_4;
 | 
			
		||||
    p_channel_11 = memzone + OFFSET_ADC_1_CHANNEL_5;
 | 
			
		||||
 | 
			
		||||
    p_channel_12 = memzone + OFFSET_ADC_2_CHANNEL_0;
 | 
			
		||||
    p_channel_13 = memzone + OFFSET_ADC_2_CHANNEL_1;
 | 
			
		||||
    p_channel_14 = memzone + OFFSET_ADC_2_CHANNEL_2;
 | 
			
		||||
    p_channel_15 = memzone + OFFSET_ADC_2_CHANNEL_3;
 | 
			
		||||
    p_channel_16 = memzone + OFFSET_ADC_2_CHANNEL_4;
 | 
			
		||||
    p_channel_17 = memzone + OFFSET_ADC_2_CHANNEL_5;
 | 
			
		||||
 | 
			
		||||
    _gpio_setup = setup.p_gpio_setup;
 | 
			
		||||
    _start_convertion = setup.p_start_convertion;
 | 
			
		||||
    _stop_convertion = setup.p_stop_convertion;
 | 
			
		||||
 | 
			
		||||
    (*_gpio_setup)();
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void ExtADC::read_adc(ADC_RESULT& adc_result)
 | 
			
		||||
{
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    adc_result.channel_00 = *p_channel_00;
 | 
			
		||||
    adc_result.channel_01 = *p_channel_01;
 | 
			
		||||
    adc_result.channel_02 = *p_channel_02;
 | 
			
		||||
    adc_result.channel_03 = *p_channel_03;
 | 
			
		||||
    adc_result.channel_04 = *p_channel_04;
 | 
			
		||||
    adc_result.channel_05 = *p_channel_05;
 | 
			
		||||
    adc_result.channel_06 = *p_channel_06;
 | 
			
		||||
    adc_result.channel_07 = *p_channel_07;
 | 
			
		||||
    adc_result.channel_08 = *p_channel_08;
 | 
			
		||||
    adc_result.channel_09 = *p_channel_09;
 | 
			
		||||
    adc_result.channel_10 = *p_channel_10;
 | 
			
		||||
    adc_result.channel_11 = *p_channel_11;
 | 
			
		||||
    adc_result.channel_12 = *p_channel_12;
 | 
			
		||||
    adc_result.channel_13 = *p_channel_13;
 | 
			
		||||
    adc_result.channel_14 = *p_channel_14;
 | 
			
		||||
    adc_result.channel_15 = *p_channel_15;
 | 
			
		||||
    adc_result.channel_16 = *p_channel_16;
 | 
			
		||||
    adc_result.channel_17 = *p_channel_17;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void ExtADC::read_adc(uint16_t adc_result[18])
 | 
			
		||||
{
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    adc_result[0] = *p_channel_00;
 | 
			
		||||
    adc_result[1] = *p_channel_01;
 | 
			
		||||
    adc_result[2] = *p_channel_02;
 | 
			
		||||
    adc_result[3] = *p_channel_03;
 | 
			
		||||
    adc_result[4] = *p_channel_04;
 | 
			
		||||
    adc_result[5] = *p_channel_05;
 | 
			
		||||
    adc_result[6] = *p_channel_06;
 | 
			
		||||
    adc_result[7] = *p_channel_07;
 | 
			
		||||
    adc_result[8] = *p_channel_08;
 | 
			
		||||
    adc_result[9] = *p_channel_09;
 | 
			
		||||
    adc_result[10] = *p_channel_10;
 | 
			
		||||
    adc_result[11] = *p_channel_11;
 | 
			
		||||
    adc_result[12] = *p_channel_12;
 | 
			
		||||
    adc_result[13] = *p_channel_13;
 | 
			
		||||
    adc_result[14] = *p_channel_14;
 | 
			
		||||
    adc_result[15] = *p_channel_15;
 | 
			
		||||
    adc_result[16] = *p_channel_16;
 | 
			
		||||
    adc_result[17] = *p_channel_17;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void ExtADC::start_convertion()
 | 
			
		||||
{
 | 
			
		||||
    (*_start_convertion)();
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void ExtADC::stop_convertion()
 | 
			
		||||
{
 | 
			
		||||
    (*_stop_convertion)();
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} /* namespace PERIPHERY */
 | 
			
		||||
@ -1,150 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * ExtADC.h
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "DSP28335/GPIO.h"
 | 
			
		||||
#include "PERIPHERY/PeripheryMap.h"
 | 
			
		||||
 | 
			
		||||
#include "RUDRIVEFRAMEWORK/DataType.h"
 | 
			
		||||
#include "RUDRIVEFRAMEWORK/SystemDefinitions.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef PERIPHERY_EXTADC_H_
 | 
			
		||||
#define PERIPHERY_EXTADC_H_
 | 
			
		||||
 | 
			
		||||
namespace PERIPHERY
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
struct ExtADCSetup
 | 
			
		||||
{
 | 
			
		||||
    pGPIO_FUNCTION p_gpio_setup;
 | 
			
		||||
    pGPIO_FUNCTION p_start_convertion;
 | 
			
		||||
    pGPIO_FUNCTION p_stop_convertion;
 | 
			
		||||
    void set_default()
 | 
			
		||||
    {
 | 
			
		||||
        p_gpio_setup = &DSP28335::GPIO::ext_adc_start_convertion_setup;
 | 
			
		||||
        p_start_convertion = &DSP28335::GPIO::set_ext_adc_start_convertion;
 | 
			
		||||
        p_stop_convertion = &DSP28335::GPIO::clear_ext_adc_start_convertion;
 | 
			
		||||
    };
 | 
			
		||||
    ExtADCSetup():
 | 
			
		||||
        p_gpio_setup(&DSP28335::GPIO::ext_adc_start_convertion_setup),
 | 
			
		||||
        p_start_convertion(&DSP28335::GPIO::set_ext_adc_start_convertion),
 | 
			
		||||
        p_stop_convertion(&DSP28335::GPIO::clear_ext_adc_start_convertion)
 | 
			
		||||
    {}
 | 
			
		||||
    //
 | 
			
		||||
};//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct ExtADCStatusBitField
 | 
			
		||||
{
 | 
			
		||||
    uint16_t busy: 1;
 | 
			
		||||
    uint16_t read: 1;
 | 
			
		||||
    uint16_t ready: 1;
 | 
			
		||||
};//ExtADCStatus
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
union ExtADCStatusRegister
 | 
			
		||||
{
 | 
			
		||||
    uint16_t all;
 | 
			
		||||
    ExtADCStatusBitField bit;
 | 
			
		||||
    ExtADCStatusRegister():
 | 
			
		||||
        all(0)
 | 
			
		||||
    {}
 | 
			
		||||
};//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
union ADC_RESULT_TYPE
 | 
			
		||||
{
 | 
			
		||||
    uint16_t u16;
 | 
			
		||||
    int16_t  i16;
 | 
			
		||||
    ADC_RESULT_TYPE():
 | 
			
		||||
        u16(0)
 | 
			
		||||
    {}
 | 
			
		||||
};//ADC_RESULT_TYPE
 | 
			
		||||
 | 
			
		||||
struct ADC_RESULT
 | 
			
		||||
{
 | 
			
		||||
    int16_t channel_00;
 | 
			
		||||
    int16_t channel_01;
 | 
			
		||||
    int16_t channel_02;
 | 
			
		||||
    int16_t channel_03;
 | 
			
		||||
    int16_t channel_04;
 | 
			
		||||
    int16_t channel_05;
 | 
			
		||||
    int16_t channel_06;
 | 
			
		||||
    int16_t channel_07;
 | 
			
		||||
    int16_t channel_08;
 | 
			
		||||
    int16_t channel_09;
 | 
			
		||||
    int16_t channel_10;
 | 
			
		||||
    int16_t channel_11;
 | 
			
		||||
    int16_t channel_12;
 | 
			
		||||
    int16_t channel_13;
 | 
			
		||||
    int16_t channel_14;
 | 
			
		||||
    int16_t channel_15;
 | 
			
		||||
    int16_t channel_16;
 | 
			
		||||
    int16_t channel_17;
 | 
			
		||||
    ADC_RESULT():
 | 
			
		||||
        channel_00(0),
 | 
			
		||||
        channel_01(0),
 | 
			
		||||
        channel_02(0),
 | 
			
		||||
        channel_03(0),
 | 
			
		||||
        channel_04(0),
 | 
			
		||||
        channel_05(0),
 | 
			
		||||
        channel_06(0),
 | 
			
		||||
        channel_07(0),
 | 
			
		||||
        channel_08(0),
 | 
			
		||||
        channel_09(0),
 | 
			
		||||
        channel_10(0),
 | 
			
		||||
        channel_11(0),
 | 
			
		||||
        channel_12(0),
 | 
			
		||||
        channel_13(0),
 | 
			
		||||
        channel_14(0),
 | 
			
		||||
        channel_15(0),
 | 
			
		||||
        channel_16(0),
 | 
			
		||||
        channel_17(0)
 | 
			
		||||
    {}
 | 
			
		||||
};//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ExtADC
 | 
			
		||||
{
 | 
			
		||||
private:
 | 
			
		||||
    uint16_t *p_channel_00;
 | 
			
		||||
    uint16_t *p_channel_01;
 | 
			
		||||
    uint16_t *p_channel_02;
 | 
			
		||||
    uint16_t *p_channel_03;
 | 
			
		||||
    uint16_t *p_channel_04;
 | 
			
		||||
    uint16_t *p_channel_05;
 | 
			
		||||
    uint16_t *p_channel_06;
 | 
			
		||||
    uint16_t *p_channel_07;
 | 
			
		||||
    uint16_t *p_channel_08;
 | 
			
		||||
    uint16_t *p_channel_09;
 | 
			
		||||
    uint16_t *p_channel_10;
 | 
			
		||||
    uint16_t *p_channel_11;
 | 
			
		||||
    uint16_t *p_channel_12;
 | 
			
		||||
    uint16_t *p_channel_13;
 | 
			
		||||
    uint16_t *p_channel_14;
 | 
			
		||||
    uint16_t *p_channel_15;
 | 
			
		||||
    uint16_t *p_channel_16;
 | 
			
		||||
    uint16_t *p_channel_17;
 | 
			
		||||
public:
 | 
			
		||||
    ExtADC();
 | 
			
		||||
    void setup(uint16_t *memzone);
 | 
			
		||||
    void setup(uint16_t *memzone, const ExtADCSetup& setup);
 | 
			
		||||
public:
 | 
			
		||||
    void read_adc(ADC_RESULT& adc_result);
 | 
			
		||||
    void read_adc(uint16_t adc_result[18]);
 | 
			
		||||
    void start_convertion();
 | 
			
		||||
    void stop_convertion();
 | 
			
		||||
private:
 | 
			
		||||
    void (*_gpio_setup)();
 | 
			
		||||
    void (*_start_convertion)();
 | 
			
		||||
    void (*_stop_convertion)();
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
} /* namespace PERIPHERY */
 | 
			
		||||
 | 
			
		||||
#endif /* PERIPHERY_EXTADC_H_ */
 | 
			
		||||
@ -1,46 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * ExtDAC.cpp
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "PERIPHERY/ExtDAC.h"
 | 
			
		||||
 | 
			
		||||
namespace PERIPHERY
 | 
			
		||||
{
 | 
			
		||||
//CONSTRUCTOR
 | 
			
		||||
ExtDAC::ExtDAC():
 | 
			
		||||
        p_channel_a(0),
 | 
			
		||||
        p_channel_b(0),
 | 
			
		||||
        p_channel_c(0),
 | 
			
		||||
        p_channel_d(0)
 | 
			
		||||
{}//CONSTRUCTOR
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
void ExtDAC::setup(uint16_t *memzone)
 | 
			
		||||
{
 | 
			
		||||
    p_channel_a = memzone + OFFSET_DAC_CHANNEL_A;
 | 
			
		||||
    p_channel_b = memzone + OFFSET_DAC_CHANNEL_B;
 | 
			
		||||
    p_channel_c = memzone + OFFSET_DAC_CHANNEL_C;
 | 
			
		||||
    p_channel_d = memzone + OFFSET_DAC_CHANNEL_D;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void ExtDAC::write_data(int16_t data_a, int16_t data_b, int16_t data_c, int16_t data_d)
 | 
			
		||||
{
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    *p_channel_a = data_a;
 | 
			
		||||
    *p_channel_b = data_b;
 | 
			
		||||
    *p_channel_c = data_c;
 | 
			
		||||
    *p_channel_d = data_d;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
} /* namespace PERIPHERAL */
 | 
			
		||||
@ -1,63 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * ExtDAC.h
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "PERIPHERY/PeripheryMap.h"
 | 
			
		||||
 | 
			
		||||
#include "RUDRIVEFRAMEWORK/DataType.h"
 | 
			
		||||
#include "RUDRIVEFRAMEWORK/SystemDefinitions.h"
 | 
			
		||||
 | 
			
		||||
#ifndef PERIPHERY_EXTDAC_H_
 | 
			
		||||
#define PERIPHERY_EXTDAC_H_
 | 
			
		||||
 | 
			
		||||
namespace PERIPHERY
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct DataDACCreator
 | 
			
		||||
{
 | 
			
		||||
    int16_t offset_a;
 | 
			
		||||
    int16_t offset_b;
 | 
			
		||||
    int16_t offset_c;
 | 
			
		||||
    int16_t offset_d;
 | 
			
		||||
    int16_t channel_a;
 | 
			
		||||
    int16_t channel_b;
 | 
			
		||||
    int16_t channel_c;
 | 
			
		||||
    int16_t channel_d;
 | 
			
		||||
    DataDACCreator():
 | 
			
		||||
        offset_a((int16_t)2048),
 | 
			
		||||
        offset_b((int16_t)2048),
 | 
			
		||||
        offset_c((int16_t)2048),
 | 
			
		||||
        offset_d((int16_t)2048),
 | 
			
		||||
        channel_a((int16_t)0),
 | 
			
		||||
        channel_b((int16_t)0),
 | 
			
		||||
        channel_c((int16_t)0),
 | 
			
		||||
        channel_d((int16_t)0)
 | 
			
		||||
    {}
 | 
			
		||||
};//DataDACCreator
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ExtDAC
 | 
			
		||||
{
 | 
			
		||||
private:
 | 
			
		||||
    uint16_t *p_channel_a;
 | 
			
		||||
    uint16_t *p_channel_b;
 | 
			
		||||
    uint16_t *p_channel_c;
 | 
			
		||||
    uint16_t *p_channel_d;
 | 
			
		||||
public:
 | 
			
		||||
    ExtDAC();
 | 
			
		||||
    void setup(uint16_t *memzone);
 | 
			
		||||
public:
 | 
			
		||||
    void write_data(int16_t data_a, int16_t data_b, int16_t data_c, int16_t data_d);
 | 
			
		||||
public:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
} /* namespace PERIPHERY */
 | 
			
		||||
 | 
			
		||||
#endif /* PERIPHERY_EXTDAC_H_ */
 | 
			
		||||
											
												
													File diff suppressed because it is too large
													Load Diff
												
											
										
									
								@ -1,268 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * FRAMInterface.h
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "F28335/DSP28x_Project.h"
 | 
			
		||||
 | 
			
		||||
#include "DSP28335/GPIO.h"
 | 
			
		||||
#include "RUDRIVEFRAMEWORK/DataType.h"
 | 
			
		||||
#include "RUDRIVEFRAMEWORK/SystemDefinitions.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef PERIPHERY_FRAM_H_
 | 
			
		||||
#define PERIPHERY_FRAM_H_
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef SPIA_GPIO_SETUP_DEFAULT_DEFINES
 | 
			
		||||
#define SPIA_GPIO_SETUP_DEFAULT (&DSP28335::GPIO::gpio_spia_setup)
 | 
			
		||||
#define SPIA_GPIO_SETUP_DEFAULT_DEFINES
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef SPIA_GPIO_WRITE_PROTECT_SET_DEFINES
 | 
			
		||||
#define SPIA_GPIO_WRITE_PROTECT_SET (&DSP28335::GPIO::gpio_spia_write_protect_set)
 | 
			
		||||
#define SPIA_GPIO_WRITE_PROTECT_SET_DEFINES
 | 
			
		||||
#endif
 | 
			
		||||
//
 | 
			
		||||
#ifndef SPIA_GPIO_WRITE_PROTECT_CLEAR_DEFINES
 | 
			
		||||
#define SPIA_GPIO_WRITE_PROTECT_CLEAR (&DSP28335::GPIO::gpio_spia_write_protect_clear)
 | 
			
		||||
#define SPIA_GPIO_WRITE_PROTECT_CLEAR_DEFINES
 | 
			
		||||
#endif
 | 
			
		||||
//
 | 
			
		||||
#ifndef FRAM_OPCODE_WREN_DEFINES
 | 
			
		||||
#define FRAM_OPCODE_WREN    (uint16_t)0x0600
 | 
			
		||||
#define FRAM_OPCODE_WREN_DEFINES
 | 
			
		||||
#endif
 | 
			
		||||
//
 | 
			
		||||
#ifndef FRAM_OPCODE_WRDI_DEFINES
 | 
			
		||||
#define FRAM_OPCODE_WRDI    (uint16_t)0x0400
 | 
			
		||||
#define FRAM_OPCODE_WRDI_DEFINES
 | 
			
		||||
#endif
 | 
			
		||||
//
 | 
			
		||||
#ifndef FRAM_OPCODE_RDSR_DEFINES
 | 
			
		||||
#define FRAM_OPCODE_RDSR    (uint16_t)0x0500
 | 
			
		||||
#define FRAM_OPCODE_RDSR_DEFINES
 | 
			
		||||
#endif
 | 
			
		||||
//
 | 
			
		||||
#ifndef FRAM_OPCODE_WRSR_DEFINES
 | 
			
		||||
#define FRAM_OPCODE_WRSR    (uint16_t)0x0100
 | 
			
		||||
#define FRAM_OPCODE_WRSR_DEFINES
 | 
			
		||||
#endif
 | 
			
		||||
//
 | 
			
		||||
#ifndef FRAM_OPCODE_READ_DEFINES
 | 
			
		||||
#define FRAM_OPCODE_READ    (uint16_t)0x0300
 | 
			
		||||
#define FRAM_OPCODE_READ_DEFINES
 | 
			
		||||
#endif
 | 
			
		||||
//
 | 
			
		||||
#ifndef FRAM_OPCODE_WRITE_DEFINES
 | 
			
		||||
#define FRAM_OPCODE_WRITE   (uint16_t)0x0200
 | 
			
		||||
#define FRAM_OPCODE_WRITE_DEFINES
 | 
			
		||||
#endif
 | 
			
		||||
//
 | 
			
		||||
#ifndef FRAM_OPCODE_DUMMY_DEFINES
 | 
			
		||||
#define FRAM_OPCODE_DUMMY   (uint16_t)0x5500
 | 
			
		||||
#define FRAM_OPCODE_DUMMY_DEFINES
 | 
			
		||||
#endif
 | 
			
		||||
//
 | 
			
		||||
#ifndef FRAM_OPCODE_ERASE_DEFINES
 | 
			
		||||
#define FRAM_OPCODE_ERASE   (uint16_t)0xFF00
 | 
			
		||||
#define FRAM_OPCODE_ERASE_DEFINES
 | 
			
		||||
#endif
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace PERIPHERY
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct FRAMSetup
 | 
			
		||||
{
 | 
			
		||||
    pGPIO_FUNCTION gpio_setup;
 | 
			
		||||
    pGPIO_FUNCTION write_protect_set;
 | 
			
		||||
    pGPIO_FUNCTION write_protect_clear;
 | 
			
		||||
    FRAMSetup():
 | 
			
		||||
        gpio_setup(SPIA_GPIO_SETUP_DEFAULT),
 | 
			
		||||
        write_protect_set(SPIA_GPIO_WRITE_PROTECT_SET),
 | 
			
		||||
        write_protect_clear(SPIA_GPIO_WRITE_PROTECT_CLEAR)
 | 
			
		||||
    {}
 | 
			
		||||
};//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct FRAMDATAWordField
 | 
			
		||||
{
 | 
			
		||||
    uint16_t low :8;
 | 
			
		||||
    uint16_t high :8;
 | 
			
		||||
};//
 | 
			
		||||
 | 
			
		||||
union FRAMDATAWord
 | 
			
		||||
{
 | 
			
		||||
    uint16_t all;
 | 
			
		||||
    FRAMDATAWordField byte;
 | 
			
		||||
};//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct FRAMDATALongWord
 | 
			
		||||
{
 | 
			
		||||
    FRAMDATAWord wL;
 | 
			
		||||
    FRAMDATAWord wH;
 | 
			
		||||
};//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
union FRAMDataVariant
 | 
			
		||||
{
 | 
			
		||||
    int16_t    i16;
 | 
			
		||||
    uint16_t   u16;
 | 
			
		||||
    int32_t    i32;
 | 
			
		||||
    uint32_t   u32;
 | 
			
		||||
    float      f;
 | 
			
		||||
    bool       b;
 | 
			
		||||
    FRAMDATALongWord lw;
 | 
			
		||||
    FRAMDataVariant():
 | 
			
		||||
        u32((uint32_t)0)
 | 
			
		||||
    {}
 | 
			
		||||
};//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class FRAMInterface
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    enum mode_t {WAIT, READ, WRITE, ERASE, VERIFY, READY, RESTORE};
 | 
			
		||||
protected:
 | 
			
		||||
    mode_t  m_mode;
 | 
			
		||||
private:
 | 
			
		||||
    //Uint16 m_fifo_tx_status;
 | 
			
		||||
    //Uint16 m_fifo_rx_status;
 | 
			
		||||
private:
 | 
			
		||||
    Uint16 m_fifo_tx[16];
 | 
			
		||||
    Uint16 m_fifo_rx[16];
 | 
			
		||||
private:
 | 
			
		||||
    uint16_t *m_buffer_pointer;
 | 
			
		||||
    uint16_t m_buffer_size;
 | 
			
		||||
    uint16_t m_buffer_index;
 | 
			
		||||
    uint16_t m_fram_start_addr;
 | 
			
		||||
    uint16_t m_fram_addr;
 | 
			
		||||
    uint16_t m_data_fram;
 | 
			
		||||
    uint16_t m_data_buffer;
 | 
			
		||||
    FRAMDataVariant m_data_variant;
 | 
			
		||||
    bool m_verify_status;
 | 
			
		||||
    bool *m_p_verify_status;
 | 
			
		||||
    uint16_t m_delay;
 | 
			
		||||
    void *m_destination;
 | 
			
		||||
public:
 | 
			
		||||
    FRAMInterface();
 | 
			
		||||
    void setup();
 | 
			
		||||
public:
 | 
			
		||||
    FRAMInterface::mode_t get_mode();
 | 
			
		||||
    bool compare_mode(FRAMInterface::mode_t mode);
 | 
			
		||||
public:
 | 
			
		||||
    void break_fram();
 | 
			
		||||
    void write_buffer (uint16_t addr, uint16_t *buffer_pointer, uint16_t buffer_size);
 | 
			
		||||
    void read_buffer  (uint16_t addr, uint16_t *buffer_pointer, uint16_t buffer_size);
 | 
			
		||||
    void erase_buffer (uint16_t addr, uint16_t *buffer_pointer, uint16_t buffer_size);
 | 
			
		||||
    void verify_buffer(uint16_t addr, uint16_t *buffer_pointer, uint16_t buffer_size, bool *verify_status);
 | 
			
		||||
public:
 | 
			
		||||
    void write_slow_buffer (uint16_t addr, uint16_t *buffer_pointer, uint16_t buffer_size);
 | 
			
		||||
    void read_slow_buffer  (uint16_t addr, uint16_t *buffer_pointer, uint16_t buffer_size);
 | 
			
		||||
    void erase_slow_buffer (uint16_t addr, uint16_t *buffer_pointer, uint16_t buffer_size);
 | 
			
		||||
public:
 | 
			
		||||
    void write_int16 (uint16_t addr, int16_t  data);
 | 
			
		||||
    void write_uint16(uint16_t addr, uint16_t data);
 | 
			
		||||
    void write_int32 (uint16_t addr, int32_t  data);
 | 
			
		||||
    void write_uint32(uint16_t addr, uint32_t data);
 | 
			
		||||
    void write_float (uint16_t addr, float    data);
 | 
			
		||||
    void write_bool  (uint16_t addr, bool     data);
 | 
			
		||||
public:
 | 
			
		||||
    void read_int16 (uint16_t addr, int16_t  *destination);
 | 
			
		||||
    void read_uint16(uint16_t addr, uint16_t *destination);
 | 
			
		||||
    void read_int32 (uint16_t addr, int32_t  *destination);
 | 
			
		||||
    void read_uint32(uint16_t addr, uint32_t *destination);
 | 
			
		||||
    void read_float (uint16_t addr, float    *destination);
 | 
			
		||||
    void read_bool  (uint16_t addr, bool     *destination);
 | 
			
		||||
private:
 | 
			
		||||
    void (*_gpio_setup)();
 | 
			
		||||
public:
 | 
			
		||||
    void set_wp();
 | 
			
		||||
    void clear_wp();
 | 
			
		||||
private:
 | 
			
		||||
    void (*_set_wp)();
 | 
			
		||||
    void (*_clear_wp)();
 | 
			
		||||
public:
 | 
			
		||||
    void execute();
 | 
			
		||||
private:
 | 
			
		||||
    void (FRAMInterface::*_execute)();
 | 
			
		||||
    void _execute_free();
 | 
			
		||||
    void _execute_ready();
 | 
			
		||||
    void _execute_read_buffer_get_data();
 | 
			
		||||
    void _execute_read_status_register();
 | 
			
		||||
    void _write_buffer();
 | 
			
		||||
    void _read_buffer_send_opcode();
 | 
			
		||||
    void _erase_buffer();
 | 
			
		||||
    void _verify_buffer_send_opcode();
 | 
			
		||||
    void _execute_verify_buffer_data();
 | 
			
		||||
    inline void _break_fram();
 | 
			
		||||
private:
 | 
			
		||||
    void _execute_ready_wren_write_buffer();
 | 
			
		||||
    void _execute_ready_wren_erase_buffer();
 | 
			
		||||
    void _execute_ready_write_buffer();
 | 
			
		||||
    void _execute_ready_erase_buffer();
 | 
			
		||||
private:
 | 
			
		||||
    void _execute_ready_wren_write_int16();
 | 
			
		||||
    void _execute_ready_wren_write_uint16();
 | 
			
		||||
    void _execute_ready_wren_write_int32();
 | 
			
		||||
    void _execute_ready_wren_write_uint32();
 | 
			
		||||
    void _execute_ready_wren_write_float();
 | 
			
		||||
    void _execute_ready_wren_write_bool();
 | 
			
		||||
private:
 | 
			
		||||
    void _execute_ready_write_int16();
 | 
			
		||||
    void _execute_ready_write_uint16();
 | 
			
		||||
    void _execute_ready_write_int32();
 | 
			
		||||
    void _execute_ready_write_uint32();
 | 
			
		||||
    void _execute_ready_write_float();
 | 
			
		||||
    void _execute_ready_write_bool();
 | 
			
		||||
private:
 | 
			
		||||
    void _execute_ready_read_buffer();
 | 
			
		||||
    void _execute_ready_read_int16();
 | 
			
		||||
    void _execute_ready_read_uint16();
 | 
			
		||||
    void _execute_ready_read_int32();
 | 
			
		||||
    void _execute_ready_read_uint32();
 | 
			
		||||
    void _execute_ready_read_float();
 | 
			
		||||
    void _execute_ready_read_bool();
 | 
			
		||||
private:
 | 
			
		||||
    void _execute_write_register();
 | 
			
		||||
    void _execute_write_16();
 | 
			
		||||
    void _execute_ready_opcode_wren();
 | 
			
		||||
    void _execute_ready_opcode_wrsr();
 | 
			
		||||
private:
 | 
			
		||||
    inline void _prepare_execute(uint16_t addr, uint16_t *buffer_pointer, uint16_t buffer_size);
 | 
			
		||||
    //
 | 
			
		||||
    inline void _spi_opcode_wren();
 | 
			
		||||
    inline void _spi_opcode_wrsr();
 | 
			
		||||
    //
 | 
			
		||||
    inline void _spi_write_16();
 | 
			
		||||
    inline void _spi_erase_16();
 | 
			
		||||
    inline void _spi_read_16();
 | 
			
		||||
    //
 | 
			
		||||
    inline void _spi_write_32();
 | 
			
		||||
    inline void _spi_erase_32();
 | 
			
		||||
    inline void _spi_read_32();
 | 
			
		||||
    //
 | 
			
		||||
    inline void _spi_get_read_data_16();
 | 
			
		||||
    inline void _spi_get_read_data_32();
 | 
			
		||||
    inline void _spi_get_status_register();
 | 
			
		||||
    inline uint16_t _spi_get_fifo_tx_status();
 | 
			
		||||
    //
 | 
			
		||||
};//
 | 
			
		||||
 | 
			
		||||
} /* namespace PERIPHERY */
 | 
			
		||||
 | 
			
		||||
#endif /* PERIPHERY_FRAM_H_ */
 | 
			
		||||
@ -1,57 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * IIIPeriphery.cpp
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "PERIPHERY/IIIPeriphery.h"
 | 
			
		||||
 | 
			
		||||
namespace PERIPHERY
 | 
			
		||||
{
 | 
			
		||||
//CONSTRUCTOR
 | 
			
		||||
IIIPeriphery::IIIPeriphery():
 | 
			
		||||
        Periphery(),
 | 
			
		||||
        pwm_brd()
 | 
			
		||||
{}//CONSTRUCTOR
 | 
			
		||||
//
 | 
			
		||||
void IIIPeriphery::setup(uint16_t *memzone)
 | 
			
		||||
{
 | 
			
		||||
    p_memzone = memzone;
 | 
			
		||||
    dio.setup(p_memzone);
 | 
			
		||||
    adc.setup(p_memzone);
 | 
			
		||||
    dac.setup(p_memzone);
 | 
			
		||||
    fram.setup();
 | 
			
		||||
    pwm_brd.setup(p_memzone);
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
void IIIPeriphery::setup(uint16_t *memzone, const IIIPeripherySetup& setup)
 | 
			
		||||
{
 | 
			
		||||
    p_memzone = memzone;
 | 
			
		||||
    dio.setup(p_memzone);
 | 
			
		||||
    adc.setup(p_memzone, setup.extadc);
 | 
			
		||||
    dac.setup(p_memzone);
 | 
			
		||||
    fram.setup();
 | 
			
		||||
    analog_faults.setup(setup.analog_faults);
 | 
			
		||||
    pwm_brd.setup(p_memzone, setup.pwm_brd);
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
//void IIIPeriphery::configure(IIIPeripheryConfiguration& config)
 | 
			
		||||
//{
 | 
			
		||||
    //pwm_brd.configure(config.pwm_brd);
 | 
			
		||||
    //
 | 
			
		||||
//}//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void IIIPeriphery::get_hard_code_setup(IIIPeripherySetup& hsetup)
 | 
			
		||||
{
 | 
			
		||||
    hsetup.pwm_brd.set_default();
 | 
			
		||||
    hsetup.extadc.set_default();
 | 
			
		||||
    hsetup.analog_faults.set_default();
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
} /* namespace PERIPHERY */
 | 
			
		||||
@ -1,51 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * IIIPeriphery.h
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "PERIPHERY/Periphery.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef PERIPHERY_IIIPERIPHERY_H_
 | 
			
		||||
#define PERIPHERY_IIIPERIPHERY_H_
 | 
			
		||||
 | 
			
		||||
namespace PERIPHERY
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct IIIPeripherySetup: public PeripherySetup
 | 
			
		||||
{
 | 
			
		||||
    PWMStructureSetup pwm_brd;
 | 
			
		||||
    IIIPeripherySetup():
 | 
			
		||||
        PeripherySetup(),
 | 
			
		||||
        pwm_brd()
 | 
			
		||||
    {}
 | 
			
		||||
};//
 | 
			
		||||
 | 
			
		||||
//struct IIIPeripheryConfiguration
 | 
			
		||||
//{
 | 
			
		||||
 | 
			
		||||
    //PWMABCInterfaceConfiguration pwm_brd;
 | 
			
		||||
//    IIIPeripheryConfiguration()
 | 
			
		||||
//        pwm_brd()
 | 
			
		||||
//    {}
 | 
			
		||||
//};//PeripheryConfiguration
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class IIIPeriphery: public Periphery
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    PERIPHERY::PWMABCInterace   pwm_brd;
 | 
			
		||||
public:
 | 
			
		||||
    IIIPeriphery();
 | 
			
		||||
    void setup(uint16_t *memzone);
 | 
			
		||||
    void setup(uint16_t *memzone, const IIIPeripherySetup& setup);
 | 
			
		||||
    //void configure(IIIPeripheryConfiguration& config);
 | 
			
		||||
    void get_hard_code_setup(IIIPeripherySetup& hsetup);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
} /* namespace PERIPHERY */
 | 
			
		||||
 | 
			
		||||
#endif /* PERIPHERY_IIIPERIPHERY_H_ */
 | 
			
		||||
@ -1,54 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * IPeriphery.cpp
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "PERIPHERY/IPeriphery.h"
 | 
			
		||||
 | 
			
		||||
namespace PERIPHERY
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
//CONSTRUCTOR
 | 
			
		||||
IPeriphery::IPeriphery():
 | 
			
		||||
        Periphery()
 | 
			
		||||
        // pwm_brd()
 | 
			
		||||
{}//CONSTRUCTOR
 | 
			
		||||
//
 | 
			
		||||
void IPeriphery::setup(uint16_t *memzone)
 | 
			
		||||
{
 | 
			
		||||
    // p_memzone = memzone;
 | 
			
		||||
    // dio.setup(p_memzone);
 | 
			
		||||
    // adc.setup(p_memzone);
 | 
			
		||||
    // dac.setup(p_memzone);
 | 
			
		||||
    // fram.setup();
 | 
			
		||||
    // pwm_brd.setup(p_memzone);
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
void IPeriphery::setup(uint16_t *memzone, const IPeripherySetup& setup)
 | 
			
		||||
{
 | 
			
		||||
    // p_memzone = memzone;
 | 
			
		||||
    // dio.setup(p_memzone);
 | 
			
		||||
    // adc.setup(p_memzone, setup.extadc);
 | 
			
		||||
    // dac.setup(p_memzone);
 | 
			
		||||
    // fram.setup();
 | 
			
		||||
    // analog_faults.setup(setup.analog_faults);
 | 
			
		||||
    // pwm_brd.setup(p_memzone, setup.pwm_brd);
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
//void IPeriphery::configure(IPeripheryConfiguration& config)
 | 
			
		||||
//{
 | 
			
		||||
//    pwm_brd.configure(config.pwm_brd);
 | 
			
		||||
    //
 | 
			
		||||
//}//
 | 
			
		||||
//
 | 
			
		||||
void IPeriphery::get_hard_code_setup(IPeripherySetup& hsetup)
 | 
			
		||||
{
 | 
			
		||||
    // hsetup.pwm_brd.set_default();
 | 
			
		||||
    // hsetup.extadc.set_default();
 | 
			
		||||
    // hsetup.analog_faults.set_default();
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
} /* namespace PERIPHERY */
 | 
			
		||||
@ -1,51 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * IPeriphery.h
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
#include "PERIPHERY/Periphery.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef PERIPHERY_IPERIFHERY_H_
 | 
			
		||||
#define PERIPHERY_IPERIFHERY_H_
 | 
			
		||||
 | 
			
		||||
namespace PERIPHERY
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct IPeripherySetup: public PeripherySetup
 | 
			
		||||
{
 | 
			
		||||
    PWMStructureSetup pwm_brd;
 | 
			
		||||
    IPeripherySetup():
 | 
			
		||||
        PeripherySetup(),
 | 
			
		||||
        pwm_brd()
 | 
			
		||||
    {}
 | 
			
		||||
};//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct IPeripheryConfiguration
 | 
			
		||||
{
 | 
			
		||||
    PWMSInterfaceConfiguration pwm_brd;
 | 
			
		||||
    IPeripheryConfiguration():
 | 
			
		||||
        pwm_brd()
 | 
			
		||||
    {}
 | 
			
		||||
};//PeripheryConfiguration
 | 
			
		||||
 | 
			
		||||
class IPeriphery: public Periphery
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    // PERIPHERY::PWMSInterace   pwm_brd;
 | 
			
		||||
public:
 | 
			
		||||
    IPeriphery();
 | 
			
		||||
    void setup(uint16_t *memzone);
 | 
			
		||||
    void setup(uint16_t *memzone, const IPeripherySetup& setup);
 | 
			
		||||
//    void configure(IPeripheryConfiguration& config);
 | 
			
		||||
    void get_hard_code_setup(IPeripherySetup& hsetup);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
} /* namespace PERIPHERY */
 | 
			
		||||
 | 
			
		||||
#endif /* PERIPHERY_IPERIFHERY_H_ */
 | 
			
		||||
@ -1,492 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * PWMInterace.cpp
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "PERIPHERY/PWMABCInterace.h"
 | 
			
		||||
 | 
			
		||||
namespace PERIPHERY
 | 
			
		||||
{
 | 
			
		||||
//CONSTRUCTOR
 | 
			
		||||
PWMABCInterace::PWMABCInterace():
 | 
			
		||||
        PWMInterface(),
 | 
			
		||||
        m_counter_phase(0),
 | 
			
		||||
        m_telemetry_phase_counter(0),
 | 
			
		||||
        m_telemetry_phase_quantity(3),
 | 
			
		||||
        m_phase(),
 | 
			
		||||
        _telemetry_execute(&PWMABCInterace::_telemetry_sequence_one)
 | 
			
		||||
        //
 | 
			
		||||
{}//CONSTRUCTOR
 | 
			
		||||
//
 | 
			
		||||
void PWMABCInterace::setup(uint16_t *memzone)
 | 
			
		||||
{
 | 
			
		||||
    _setup_phase(m_phase[0], memzone + OFFSET_PWM_PHASE_A);
 | 
			
		||||
    _setup_phase(m_phase[1], memzone + OFFSET_PWM_PHASE_B);
 | 
			
		||||
    _setup_phase(m_phase[2], memzone + OFFSET_PWM_PHASE_C);
 | 
			
		||||
    m_broadcast.p_order                     = memzone + OFFSET_BROADCAST_ORDER;
 | 
			
		||||
    m_broadcast.p_cell_quantity_in_phase    = memzone + OFFSET_BROADCAST_CELLNUMBER;
 | 
			
		||||
    m_broadcast.p_freq                      = memzone + OFFSET_BROADCAST_FREQ;
 | 
			
		||||
    //
 | 
			
		||||
    _gpio_hard_fault_setup = &DSP28335::GPIO::gpio_hard_fault_setup;
 | 
			
		||||
    _hard_fault_read = &DSP28335::GPIO::gpio_hard_fault_read;
 | 
			
		||||
    (*_gpio_hard_fault_setup)();
 | 
			
		||||
    set_telemetry_sequence_one();
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
void PWMABCInterace::setup(const PWMStructureSetup& setup)
 | 
			
		||||
{
 | 
			
		||||
    _gpio_hard_fault_setup = setup.p_gpio_hard_fault_setup;
 | 
			
		||||
    _hard_fault_read = setup.p_hard_fault_read;
 | 
			
		||||
    (*_gpio_hard_fault_setup)();
 | 
			
		||||
    set_telemetry_sequence_one();
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
void PWMABCInterace::setup(uint16_t *memzone, const PWMStructureSetup& setup)
 | 
			
		||||
{
 | 
			
		||||
    _setup_phase(m_phase[0], memzone + OFFSET_PWM_PHASE_A);
 | 
			
		||||
    _setup_phase(m_phase[1], memzone + OFFSET_PWM_PHASE_B);
 | 
			
		||||
    _setup_phase(m_phase[2], memzone + OFFSET_PWM_PHASE_C);
 | 
			
		||||
    m_broadcast.p_order                     = memzone + OFFSET_BROADCAST_ORDER;
 | 
			
		||||
    m_broadcast.p_cell_quantity_in_phase    = memzone + OFFSET_BROADCAST_CELLNUMBER;
 | 
			
		||||
    m_broadcast.p_freq                      = memzone + OFFSET_BROADCAST_FREQ;
 | 
			
		||||
    //
 | 
			
		||||
    _gpio_hard_fault_setup = setup.p_gpio_hard_fault_setup;
 | 
			
		||||
    _hard_fault_read = setup.p_hard_fault_read;
 | 
			
		||||
    (*_gpio_hard_fault_setup)();
 | 
			
		||||
    set_telemetry_sequence_one();
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void PWMABCInterace::initialization(PWMABCInterfaceConfiguration& config)
 | 
			
		||||
{
 | 
			
		||||
    //set_frequency((uint16_t)config.pwm_frequency);
 | 
			
		||||
 | 
			
		||||
    set_cell_quantity_phase(config.cell_quantity[0], config.cell_quantity[1], config.cell_quantity[2]);
 | 
			
		||||
    set_cmp(0, 0, 0);
 | 
			
		||||
    set_order(0);
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void PWMABCInterace::_setup_phase(PWMPhaseStructure& phase, uint16_t *base)
 | 
			
		||||
{
 | 
			
		||||
    phase.p_pwm_frequency                   = base + OFFSET_FREQ_PWM;
 | 
			
		||||
    phase.p_cell_quantity_in_phase          = base + OFFSET_CQ_IN_PHASE;
 | 
			
		||||
    phase.p_compare                         = base + OFFSET_CMP;
 | 
			
		||||
    phase.p_order                           = base + OFFSET_ORDER;
 | 
			
		||||
    phase.p_pwm_state                       = base + OFFSET_PWM_STATE;
 | 
			
		||||
    phase.p_pwm_version                     = base + OFFSET_PWM_VERSION;
 | 
			
		||||
    phase.a_cell_quantity_in_cascade[0]     = base + OFFSET_CQ_IN_CASC_00;
 | 
			
		||||
    phase.a_cell_quantity_in_cascade[1]     = base + OFFSET_CQ_IN_CASC_01;
 | 
			
		||||
    phase.a_cell_quantity_in_cascade[2]     = base + OFFSET_CQ_IN_CASC_02;
 | 
			
		||||
    phase.a_cell_quantity_in_cascade[3]     = base + OFFSET_CQ_IN_CASC_03;
 | 
			
		||||
    phase.a_cell_quantity_in_cascade[4]     = base + OFFSET_CQ_IN_CASC_04;
 | 
			
		||||
    phase.a_cell_quantity_in_cascade[5]     = base + OFFSET_CQ_IN_CASC_05;
 | 
			
		||||
    phase.a_cell_quantity_in_cascade[6]     = base + OFFSET_CQ_IN_CASC_06;
 | 
			
		||||
    phase.a_cell_quantity_in_cascade[7]     = base + OFFSET_CQ_IN_CASC_07;
 | 
			
		||||
    phase.a_cell_quantity_in_cascade[8]     = base + OFFSET_CQ_IN_CASC_08;
 | 
			
		||||
    phase.a_cell_quantity_in_cascade[9]     = base + OFFSET_CQ_IN_CASC_09;
 | 
			
		||||
    phase.a_cell_quantity_in_cascade[10]    = base + OFFSET_CQ_IN_CASC_10;
 | 
			
		||||
    phase.a_cell_quantity_in_cascade[11]    = base + OFFSET_CQ_IN_CASC_11;
 | 
			
		||||
    phase.a_cell_quantity_in_cascade[12]    = base + OFFSET_CQ_IN_CASC_12;
 | 
			
		||||
    phase.a_cell_quantity_in_cascade[13]    = base + OFFSET_CQ_IN_CASC_13;
 | 
			
		||||
    phase.a_cell_quantity_in_cascade[14]    = base + OFFSET_CQ_IN_CASC_14;
 | 
			
		||||
    phase.a_cell_quantity_in_cascade[15]    = base + OFFSET_CQ_IN_CASC_15;
 | 
			
		||||
    phase.a_cell_quantity_in_cascade[16]    = base + OFFSET_CQ_IN_CASC_16;
 | 
			
		||||
    phase.a_cell_quantity_in_cascade[17]    = base + OFFSET_CQ_IN_CASC_17;
 | 
			
		||||
    phase.p_telemetry_box                   = base + OFFSET_TELEMETRY;
 | 
			
		||||
    phase.p_breakdown_cell_state            = base + OFFSET_CELL_BREAKDOWN;
 | 
			
		||||
    phase.p_breakdown_cell_address          = base + OFFSET_CELL_BREAKDOWN_ADR;
 | 
			
		||||
    phase.a_cascade_pointers[0]                     = base + OFFSET_CASCADE_00;
 | 
			
		||||
    phase.a_cascade_pointers[1]                     = base + OFFSET_CASCADE_01;
 | 
			
		||||
    phase.a_cascade_pointers[2]                     = base + OFFSET_CASCADE_02;
 | 
			
		||||
    phase.a_cascade_pointers[3]                     = base + OFFSET_CASCADE_03;
 | 
			
		||||
    phase.a_cascade_pointers[4]                     = base + OFFSET_CASCADE_04;
 | 
			
		||||
    phase.a_cascade_pointers[5]                     = base + OFFSET_CASCADE_05;
 | 
			
		||||
    phase.a_cascade_pointers[6]                     = base + OFFSET_CASCADE_06;
 | 
			
		||||
    phase.a_cascade_pointers[7]                     = base + OFFSET_CASCADE_07;
 | 
			
		||||
    phase.a_cascade_pointers[8]                     = base + OFFSET_CASCADE_08;
 | 
			
		||||
    phase.a_cascade_pointers[9]                     = base + OFFSET_CASCADE_09;
 | 
			
		||||
    phase.a_cascade_pointers[10]                    = base + OFFSET_CASCADE_10;
 | 
			
		||||
    phase.a_cascade_pointers[11]                    = base + OFFSET_CASCADE_11;
 | 
			
		||||
    phase.a_cascade_pointers[12]                    = base + OFFSET_CASCADE_12;
 | 
			
		||||
    phase.a_cascade_pointers[13]                    = base + OFFSET_CASCADE_13;
 | 
			
		||||
    phase.a_cascade_pointers[14]                    = base + OFFSET_CASCADE_14;
 | 
			
		||||
    phase.a_cascade_pointers[15]                    = base + OFFSET_CASCADE_15;
 | 
			
		||||
    phase.a_cascade_pointers[16]                    = base + OFFSET_CASCADE_16;
 | 
			
		||||
    phase.a_cascade_pointers[17]                    = base + OFFSET_CASCADE_17;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void PWMABCInterace::set_frequency(uint16_t freq)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    *m_phase[0].p_pwm_frequency = freq;
 | 
			
		||||
    *m_phase[1].p_pwm_frequency = freq;
 | 
			
		||||
    *m_phase[2].p_pwm_frequency = freq;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void PWMABCInterace::set_cascade_quantity()
 | 
			
		||||
{
 | 
			
		||||
    //m_config.cascade_quantity[0] = quant_a;
 | 
			
		||||
    //m_config.cascade_quantity[1] = quant_b;
 | 
			
		||||
    //m_config.cascade_quantity[2] = quant_c;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void PWMABCInterace::set_cell_quantity_phase(uint16_t quant_a, uint16_t quant_b, uint16_t quant_c)
 | 
			
		||||
{
 | 
			
		||||
//    m_config.cell_quantity[0]= quant_a;
 | 
			
		||||
//    m_config.cell_quantity[1]= quant_b;
 | 
			
		||||
//    m_config.cell_quantity[2]= quant_c;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    *m_phase[0].p_cell_quantity_in_phase = quant_a;
 | 
			
		||||
    *m_phase[1].p_cell_quantity_in_phase = quant_b;
 | 
			
		||||
    *m_phase[2].p_cell_quantity_in_phase = quant_c;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void PWMABCInterace::set_cmp(uint16_t cmpra, uint16_t cmprb, uint16_t cmprc)
 | 
			
		||||
{
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    *m_phase[0].p_compare = cmpra;
 | 
			
		||||
    *m_phase[1].p_compare = cmprb;
 | 
			
		||||
    *m_phase[2].p_compare = cmprc;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void PWMABCInterace::set_order(uint16_t order)
 | 
			
		||||
{
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    *m_phase[0].p_order = order;
 | 
			
		||||
    *m_phase[1].p_order = order;
 | 
			
		||||
    *m_phase[2].p_order = order;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void PWMABCInterace::get_board_state(uint16_t& state_pwm_a, uint16_t& state_pwm_b, uint16_t& state_pwm_c)
 | 
			
		||||
{
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    state_pwm_a = *m_phase[0].p_pwm_state;
 | 
			
		||||
    state_pwm_b = *m_phase[1].p_pwm_state;
 | 
			
		||||
    state_pwm_c = *m_phase[2].p_pwm_state;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void PWMABCInterace::get_sw_version(uint16_t& version_pwm_a, uint16_t& version_pwm_b, uint16_t& version_pwm_c)
 | 
			
		||||
{
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    version_pwm_a = *m_phase[0].p_pwm_version;
 | 
			
		||||
    version_pwm_b = *m_phase[1].p_pwm_version;
 | 
			
		||||
    version_pwm_c = *m_phase[2].p_pwm_version;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void PWMABCInterace::get_breakdown_cell_state(uint16_t& cellstate_pwm_a, uint16_t& cellstate_pwm_b, uint16_t& cellstate_pwm_c)
 | 
			
		||||
{
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    cellstate_pwm_a = *m_phase[0].p_breakdown_cell_state;
 | 
			
		||||
    cellstate_pwm_b = *m_phase[1].p_breakdown_cell_state;
 | 
			
		||||
    cellstate_pwm_c = *m_phase[2].p_breakdown_cell_state;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void PWMABCInterace::get_breakdown_cell_index(uint16_t& cellindex_pwm_a, uint16_t& cellindex_pwm_b, uint16_t& cellindex_pwm_c)
 | 
			
		||||
{
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    cellindex_pwm_a = *m_phase[0].p_breakdown_cell_address;
 | 
			
		||||
    cellindex_pwm_b = *m_phase[1].p_breakdown_cell_address;
 | 
			
		||||
    cellindex_pwm_c = *m_phase[2].p_breakdown_cell_address;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void PWMABCInterace::set_cell_quantity_cascade(uint16_t phase_index, uint16_t cascadenum, uint16_t quant)
 | 
			
		||||
{
 | 
			
		||||
//    m_config.cell_quantity_in_cascade[phase_index][cascadenum] = quant;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    *m_phase[phase_index].a_cell_quantity_in_cascade[cascadenum] = quant;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void PWMABCInterace::broadcast_order(uint16_t order)
 | 
			
		||||
{
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    *m_broadcast.p_order = order;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void PWMABCInterace::broadcast_cell_quantity_phase(uint16_t quant)
 | 
			
		||||
{
 | 
			
		||||
//    m_config.cell_quantity[0]= quant;
 | 
			
		||||
//    m_config.cell_quantity[1]= quant;
 | 
			
		||||
//    m_config.cell_quantity[2]= quant;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    *m_broadcast.p_cell_quantity_in_phase = quant;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void PWMABCInterace::broadcast_freq(uint16_t freq)
 | 
			
		||||
{
 | 
			
		||||
//    m_config.pwm_frequency = freq;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    *m_broadcast.p_freq = freq;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void PWMABCInterace::get_hard_fault(uint16_t& hard_fault)
 | 
			
		||||
{
 | 
			
		||||
    (*_hard_fault_read)(m_hard_fault.all);
 | 
			
		||||
    hard_fault = m_hard_fault.all;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void PWMABCInterace::get_indirect_access(uint16_t phase, uint16_t cascade, uint16_t cell, uint16_t offset, uint16_t& telemetry)
 | 
			
		||||
{
 | 
			
		||||
    m_aux_pointer = m_phase[phase].a_cascade_pointers[cascade] + m_offset_cells.cell_offset[cell];
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    *m_phase[phase].p_telemetry_box = offset;
 | 
			
		||||
    telemetry = *m_aux_pointer;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void PWMABCInterace::telemetry_execute(PWMABCInterfaceConfiguration& config, PWMPhaseTelemetryValue telemetry_phase[3])
 | 
			
		||||
{
 | 
			
		||||
    (this->*_telemetry_execute)(config, telemetry_phase);
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void PWMABCInterace::reset_telemetry()
 | 
			
		||||
{
 | 
			
		||||
    m_telemetry_phase_counter       = 0;
 | 
			
		||||
    m_telemetry_function_counter    = 0;
 | 
			
		||||
    m_telemetry_cascade_counter     = 0;
 | 
			
		||||
    m_telemetry_cell_counter        = 0;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void PWMABCInterace::set_telemetry_sequence_one()
 | 
			
		||||
{
 | 
			
		||||
    m_telemetry_phase_counter       = 0;
 | 
			
		||||
    m_telemetry_function_counter    = 0;
 | 
			
		||||
    m_telemetry_cascade_counter     = 0;
 | 
			
		||||
    m_telemetry_cell_counter        = 0;
 | 
			
		||||
    //
 | 
			
		||||
    _telemetry_execute = &PWMABCInterace::_telemetry_sequence_one;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void PWMABCInterace::set_telemetry_sequence_two()
 | 
			
		||||
{
 | 
			
		||||
    m_telemetry_phase_counter       = 0;
 | 
			
		||||
    m_telemetry_function_counter    = 0;
 | 
			
		||||
    m_telemetry_cascade_counter     = 0;
 | 
			
		||||
    m_telemetry_cell_counter        = 0;
 | 
			
		||||
    //
 | 
			
		||||
    _telemetry_execute = &PWMABCInterace::_telemetry_sequence_two;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void PWMABCInterace::_telemetry_sequence_one(PWMABCInterfaceConfiguration& config, PWMPhaseTelemetryValue telemetry_phase[3])
 | 
			
		||||
{
 | 
			
		||||
    //
 | 
			
		||||
    m_telemetry_function_quantity   = 11;
 | 
			
		||||
    m_telemetry_cascade_quantity    = config.cascade_quantity[m_telemetry_phase_counter];
 | 
			
		||||
    m_telemetry_cell_quantity       = config.cell_quantity_in_cascade[m_telemetry_phase_counter][m_telemetry_cascade_counter];
 | 
			
		||||
    //
 | 
			
		||||
 | 
			
		||||
    switch(m_telemetry_function_counter)
 | 
			
		||||
    {
 | 
			
		||||
    case 0:
 | 
			
		||||
        {
 | 
			
		||||
            get_indirect_access( m_telemetry_phase_counter, m_telemetry_cascade_counter, m_telemetry_cell_counter, m_telemetry_fields_offset.state, telemetry_phase[m_telemetry_phase_counter].cascade[m_telemetry_cascade_counter].cell[m_telemetry_cell_counter].state);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    case 1:
 | 
			
		||||
        {
 | 
			
		||||
            get_indirect_access( m_telemetry_phase_counter, m_telemetry_cascade_counter, m_telemetry_cell_counter, m_telemetry_fields_offset.saw_init_val, telemetry_phase[m_telemetry_phase_counter].cascade[m_telemetry_cascade_counter].cell[m_telemetry_cell_counter].saw_init_val);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    case 2:
 | 
			
		||||
        {
 | 
			
		||||
            get_indirect_access( m_telemetry_phase_counter, m_telemetry_cascade_counter, m_telemetry_cell_counter, m_telemetry_fields_offset.version, telemetry_phase[m_telemetry_phase_counter].cascade[m_telemetry_cascade_counter].cell[m_telemetry_cell_counter].version);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    case 3:
 | 
			
		||||
        {
 | 
			
		||||
            get_indirect_access( m_telemetry_phase_counter, m_telemetry_cascade_counter, m_telemetry_cell_counter, m_telemetry_fields_offset.t_pcb, telemetry_phase[m_telemetry_phase_counter].cascade[m_telemetry_cascade_counter].cell[m_telemetry_cell_counter].t_pcb);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    case 4:
 | 
			
		||||
        {
 | 
			
		||||
            get_indirect_access( m_telemetry_phase_counter, m_telemetry_cascade_counter, m_telemetry_cell_counter, m_telemetry_fields_offset.ctrl_faults, telemetry_phase[m_telemetry_phase_counter].cascade[m_telemetry_cascade_counter].cell[m_telemetry_cell_counter].ctrl_faults);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    case 5:
 | 
			
		||||
        {
 | 
			
		||||
            get_indirect_access( m_telemetry_phase_counter, m_telemetry_cascade_counter, m_telemetry_cell_counter, m_telemetry_fields_offset.int_bd_l, telemetry_phase[m_telemetry_phase_counter].cascade[m_telemetry_cascade_counter].cell[m_telemetry_cell_counter].int_bd_l);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    case 6:
 | 
			
		||||
        {
 | 
			
		||||
            get_indirect_access( m_telemetry_phase_counter, m_telemetry_cascade_counter, m_telemetry_cell_counter, m_telemetry_fields_offset.voltage, telemetry_phase[m_telemetry_phase_counter].cascade[m_telemetry_cascade_counter].cell[m_telemetry_cell_counter].voltage);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    case 7:
 | 
			
		||||
        {
 | 
			
		||||
            get_indirect_access( m_telemetry_phase_counter, m_telemetry_cascade_counter, m_telemetry_cell_counter, m_telemetry_fields_offset.freq_pwm, telemetry_phase[m_telemetry_phase_counter].cascade[m_telemetry_cascade_counter].cell[m_telemetry_cell_counter].freq_pwm);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    case 8:
 | 
			
		||||
        {
 | 
			
		||||
            get_indirect_access( m_telemetry_phase_counter, m_telemetry_cascade_counter, m_telemetry_cell_counter, m_telemetry_fields_offset.time_cntr, telemetry_phase[m_telemetry_phase_counter].cascade[m_telemetry_cascade_counter].cell[m_telemetry_cell_counter].time_cntr);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    case 9:
 | 
			
		||||
        {
 | 
			
		||||
            get_indirect_access( m_telemetry_phase_counter, m_telemetry_cascade_counter, m_telemetry_cell_counter, m_telemetry_fields_offset.t_rad, telemetry_phase[m_telemetry_phase_counter].cascade[m_telemetry_cascade_counter].cell[m_telemetry_cell_counter].t_rad);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    case 10:
 | 
			
		||||
        {
 | 
			
		||||
            get_indirect_access( m_telemetry_phase_counter, m_telemetry_cascade_counter, m_telemetry_cell_counter, m_telemetry_fields_offset.sync_faults, telemetry_phase[m_telemetry_phase_counter].cascade[m_telemetry_cascade_counter].cell[m_telemetry_cell_counter].sync_faults);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    case 11:
 | 
			
		||||
        {
 | 
			
		||||
            get_indirect_access( m_telemetry_phase_counter, m_telemetry_cascade_counter, m_telemetry_cell_counter, m_telemetry_fields_offset.int_bd_h, telemetry_phase[m_telemetry_phase_counter].cascade[m_telemetry_cascade_counter].cell[m_telemetry_cell_counter].int_bd_h);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    default:{}
 | 
			
		||||
    }//switch
 | 
			
		||||
 | 
			
		||||
    m_telemetry_cell_counter++;
 | 
			
		||||
    if(m_telemetry_cell_counter >= m_telemetry_cell_quantity)
 | 
			
		||||
    {
 | 
			
		||||
        m_telemetry_cell_counter = 0;
 | 
			
		||||
        m_telemetry_cascade_counter++;
 | 
			
		||||
        if(m_telemetry_cascade_counter >= m_telemetry_cascade_quantity)
 | 
			
		||||
        {
 | 
			
		||||
            m_telemetry_cascade_counter = 0;
 | 
			
		||||
            m_telemetry_function_counter++;
 | 
			
		||||
            if(m_telemetry_function_counter > m_telemetry_function_quantity)
 | 
			
		||||
            {
 | 
			
		||||
                m_telemetry_function_counter = 0;
 | 
			
		||||
                m_telemetry_phase_counter++;
 | 
			
		||||
                if(m_telemetry_phase_counter >= m_telemetry_phase_quantity)
 | 
			
		||||
                {
 | 
			
		||||
                    m_telemetry_phase_counter = 0;
 | 
			
		||||
                    //
 | 
			
		||||
                }//if
 | 
			
		||||
            }//if
 | 
			
		||||
            //
 | 
			
		||||
        }//if
 | 
			
		||||
        //
 | 
			
		||||
    }//if
 | 
			
		||||
    //
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void PWMABCInterace::_telemetry_sequence_two(PWMABCInterfaceConfiguration& config, PWMPhaseTelemetryValue telemetry_phase[3])
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
} /* namespace PERIPHERAL */
 | 
			
		||||
@ -1,133 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * PWMABCInterace.h
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "PERIPHERY/PWMInterface.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef PERIPHERY_PWMABCINTERACE_H_
 | 
			
		||||
#define PERIPHERY_PWMABCINTERACE_H_
 | 
			
		||||
 | 
			
		||||
namespace PERIPHERY
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
struct PWMABCInterfaceConfiguration: public PWMInterfaceConfiguration
 | 
			
		||||
{
 | 
			
		||||
    uint16_t cascade_quantity[3];
 | 
			
		||||
    uint16_t cell_quantity[3];
 | 
			
		||||
    uint16_t cell_quantity_in_cascade[3][18];
 | 
			
		||||
    PWMABCInterfaceConfiguration():
 | 
			
		||||
        PWMInterfaceConfiguration(),
 | 
			
		||||
        cascade_quantity(),
 | 
			
		||||
        cell_quantity(),
 | 
			
		||||
        cell_quantity_in_cascade()
 | 
			
		||||
    {}
 | 
			
		||||
};//PWMInterfaceConfiguration
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct PWMABCPhaseValueStructure
 | 
			
		||||
{
 | 
			
		||||
    uint16_t pwm_frequency;
 | 
			
		||||
    uint16_t adc_isr_multiplier;
 | 
			
		||||
    uint16_t cascade_quantity[3];
 | 
			
		||||
    uint16_t cell_quantity_in_phase[3];
 | 
			
		||||
    uint16_t cmp[3];
 | 
			
		||||
    uint16_t order;
 | 
			
		||||
    uint16_t pwm_state[3];
 | 
			
		||||
    uint16_t pwm_version[3];
 | 
			
		||||
    uint16_t cell_quantity_in_cascade[3][18];
 | 
			
		||||
    uint16_t breakdown_cell_state[3];
 | 
			
		||||
    PWMBreakdownCellAddressRegister breakdown_cell_address[3];
 | 
			
		||||
    PWMABCPhaseValueStructure():
 | 
			
		||||
        pwm_frequency(0),
 | 
			
		||||
        adc_isr_multiplier(1),
 | 
			
		||||
        cascade_quantity(),
 | 
			
		||||
        cell_quantity_in_phase(),
 | 
			
		||||
        cmp(),
 | 
			
		||||
        order(0),
 | 
			
		||||
        pwm_state(),
 | 
			
		||||
        pwm_version(),
 | 
			
		||||
        cell_quantity_in_cascade(),
 | 
			
		||||
        breakdown_cell_state(),
 | 
			
		||||
        breakdown_cell_address()
 | 
			
		||||
        {}
 | 
			
		||||
};//PWMABCPhaseValueStructure
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct PWMABCStructureReference: public PWMABCPhaseValueStructure
 | 
			
		||||
{
 | 
			
		||||
    uint16_t broadcast_order;
 | 
			
		||||
    uint16_t broadcast_cell_quantity;
 | 
			
		||||
    uint16_t broadcast_freq;
 | 
			
		||||
    PWMHardFaultRegister  hard_fault;
 | 
			
		||||
    PWMABCStructureReference():
 | 
			
		||||
        PWMABCPhaseValueStructure(),
 | 
			
		||||
        broadcast_order(),
 | 
			
		||||
        broadcast_cell_quantity(),
 | 
			
		||||
        broadcast_freq(),
 | 
			
		||||
        hard_fault()
 | 
			
		||||
    {}
 | 
			
		||||
};//PWMABCStructureReference
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class PWMABCInterace: public PWMInterface
 | 
			
		||||
{
 | 
			
		||||
private:
 | 
			
		||||
    uint16_t m_counter_phase;
 | 
			
		||||
private:
 | 
			
		||||
    uint16_t m_telemetry_phase_counter;
 | 
			
		||||
    uint16_t m_telemetry_phase_quantity;
 | 
			
		||||
private:
 | 
			
		||||
    PWMPhaseStructure         m_phase[3];
 | 
			
		||||
public:
 | 
			
		||||
    PWMABCInterace();
 | 
			
		||||
public:
 | 
			
		||||
    void setup(uint16_t *memzone);
 | 
			
		||||
    void setup(const PWMStructureSetup& setup);
 | 
			
		||||
    void setup(uint16_t *memzone, const PWMStructureSetup& setup);
 | 
			
		||||
public:
 | 
			
		||||
    void initialization(PWMABCInterfaceConfiguration& config);
 | 
			
		||||
private:
 | 
			
		||||
    void _setup_phase(PWMPhaseStructure& phase, uint16_t *base);
 | 
			
		||||
    //
 | 
			
		||||
public:
 | 
			
		||||
    void set_frequency(uint16_t freq);
 | 
			
		||||
    void set_cascade_quantity();
 | 
			
		||||
    void set_cell_quantity_phase(uint16_t quant_a, uint16_t quant_b, uint16_t quant_c);
 | 
			
		||||
    void set_cmp(uint16_t cmpra, uint16_t cmprb, uint16_t cmprc);
 | 
			
		||||
    void set_order(uint16_t order);
 | 
			
		||||
    void get_board_state(uint16_t& state_pwm_a, uint16_t& state_pwm_b, uint16_t& state_pwm_c);
 | 
			
		||||
    void get_sw_version(uint16_t& version_pwm_a, uint16_t& version_pwm_b, uint16_t& version_pwm_c);
 | 
			
		||||
    void get_breakdown_cell_state(uint16_t& cellstate_pwm_a, uint16_t& cellstate_pwm_b, uint16_t& cellstate_pwm_c);
 | 
			
		||||
    void get_breakdown_cell_index(uint16_t& cellindex_pwm_a, uint16_t& cellindex_pwm_b, uint16_t& cellindex_pwm_c);
 | 
			
		||||
    void set_cell_quantity_cascade(uint16_t phase_index, uint16_t cascadenum, uint16_t quant);
 | 
			
		||||
    //
 | 
			
		||||
    void broadcast_order(uint16_t order);
 | 
			
		||||
    void broadcast_cell_quantity_phase(uint16_t quant);
 | 
			
		||||
    void broadcast_freq(uint16_t freq);
 | 
			
		||||
    //
 | 
			
		||||
    void get_hard_fault(uint16_t& hard_fault);
 | 
			
		||||
    //
 | 
			
		||||
    void get_indirect_access(uint16_t phase, uint16_t cascade, uint16_t cell, uint16_t offset, uint16_t& telemetry);
 | 
			
		||||
    //
 | 
			
		||||
    void telemetry_execute(PWMABCInterfaceConfiguration& config, PWMPhaseTelemetryValue telemetry_phase[3]);
 | 
			
		||||
    void reset_telemetry();
 | 
			
		||||
    void set_telemetry_sequence_one();
 | 
			
		||||
    void set_telemetry_sequence_two();
 | 
			
		||||
    //
 | 
			
		||||
private:
 | 
			
		||||
    void (PWMABCInterace::*_telemetry_execute)(PWMABCInterfaceConfiguration& config, PWMPhaseTelemetryValue telemetry_phase[3]);
 | 
			
		||||
    void _telemetry_sequence_one(PWMABCInterfaceConfiguration& config, PWMPhaseTelemetryValue telemetry_phase[3]);
 | 
			
		||||
    void _telemetry_sequence_two(PWMABCInterfaceConfiguration& config, PWMPhaseTelemetryValue telemetry_phase[3]);
 | 
			
		||||
    //
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
} /* namespace PERIPHERY */
 | 
			
		||||
 | 
			
		||||
#endif /* PERIPHERY_PWMABCINTERACE_H_ */
 | 
			
		||||
@ -1,37 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * PWMInterface.cpp
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "PERIPHERY/PWMInterface.h"
 | 
			
		||||
 | 
			
		||||
namespace PERIPHERY
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
//CONSTRUCTOR
 | 
			
		||||
PWMInterface::PWMInterface():
 | 
			
		||||
        m_counter_cascade(0),
 | 
			
		||||
        m_counter_cells(0),
 | 
			
		||||
        m_aux_offset(0),
 | 
			
		||||
        m_aux_cell_quantity(0),
 | 
			
		||||
        m_aux_pointer(0),
 | 
			
		||||
        //
 | 
			
		||||
        m_telemetry_function_counter(0),
 | 
			
		||||
        m_telemetry_cascade_counter (0),
 | 
			
		||||
        m_telemetry_cell_counter    (0),
 | 
			
		||||
        //
 | 
			
		||||
        m_telemetry_function_quantity(0),
 | 
			
		||||
        m_telemetry_cascade_quantity (0),
 | 
			
		||||
        m_telemetry_cell_quantity    (0),
 | 
			
		||||
        //
 | 
			
		||||
        m_broadcast(),
 | 
			
		||||
        m_telemetry_fields_offset(0x001, 0x002, 0x003, 0x004, 0x005, 0x006, 0x011, 0x012, 0x013, 0x014, 0x015, 0x016),
 | 
			
		||||
        m_offset_cells(),
 | 
			
		||||
        m_hard_fault(),
 | 
			
		||||
        _gpio_hard_fault_setup(&DSP28335::GPIO::gpio_hard_fault_setup),
 | 
			
		||||
        _hard_fault_read(&DSP28335::GPIO::gpio_hard_fault_read)
 | 
			
		||||
{}//CONSTRUCTOR
 | 
			
		||||
 | 
			
		||||
} /* namespace PERIPHERY */
 | 
			
		||||
@ -1,338 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * PWMInterface.h
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
#include <math.h>
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
#include "DSP28335/GPIO.h"
 | 
			
		||||
#include "RUDRIVEFRAMEWORK/DataType.h"
 | 
			
		||||
#include "RUDRIVEFRAMEWORK/SystemDefinitions.h"
 | 
			
		||||
 | 
			
		||||
#include "PERIPHERY/PeripheryMap.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef PERIPHERY_PWMINTERFACE_H_
 | 
			
		||||
#define PERIPHERY_PWMINTERFACE_H_
 | 
			
		||||
 | 
			
		||||
namespace PERIPHERY
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct PWMStructureSetup
 | 
			
		||||
{
 | 
			
		||||
    pGPIO_FUNCTION p_gpio_hard_fault_setup;
 | 
			
		||||
    pGPIO_FUNCTION_UINT p_hard_fault_read;
 | 
			
		||||
    void set_default()
 | 
			
		||||
    {
 | 
			
		||||
        p_gpio_hard_fault_setup = &DSP28335::GPIO::gpio_hard_fault_setup;
 | 
			
		||||
        p_hard_fault_read = &DSP28335::GPIO::gpio_hard_fault_read;
 | 
			
		||||
    };
 | 
			
		||||
    PWMStructureSetup():
 | 
			
		||||
        p_gpio_hard_fault_setup(&DSP28335::GPIO::gpio_hard_fault_setup),
 | 
			
		||||
        p_hard_fault_read(&DSP28335::GPIO::gpio_hard_fault_read)
 | 
			
		||||
    {}
 | 
			
		||||
};//PWMStructureSetup
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct PWMBreakdownCellAddressFields
 | 
			
		||||
{
 | 
			
		||||
    uint16_t cell:      3;
 | 
			
		||||
    uint16_t cascade:   5;
 | 
			
		||||
    uint16_t reserved:  8;
 | 
			
		||||
};//PWMBreakdownCellAddressFields
 | 
			
		||||
 | 
			
		||||
union PWMBreakdownCellAddressRegister
 | 
			
		||||
{
 | 
			
		||||
    uint16_t all;
 | 
			
		||||
    PWMBreakdownCellAddressFields field;
 | 
			
		||||
    PWMBreakdownCellAddressRegister():
 | 
			
		||||
        all(0)
 | 
			
		||||
    {}
 | 
			
		||||
    //
 | 
			
		||||
};//PWMBreakdownCellAddressRegister
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct PWMHardFaultBitField
 | 
			
		||||
{
 | 
			
		||||
    uint16_t a: 1;
 | 
			
		||||
    uint16_t b: 1;
 | 
			
		||||
    uint16_t c: 1;
 | 
			
		||||
    //
 | 
			
		||||
};//PWMHardFaultBitField
 | 
			
		||||
 | 
			
		||||
union PWMHardFaultRegister
 | 
			
		||||
{
 | 
			
		||||
    uint16_t all;
 | 
			
		||||
    PWMHardFaultBitField bit;
 | 
			
		||||
    PWMHardFaultRegister():
 | 
			
		||||
        all(0)
 | 
			
		||||
    {}
 | 
			
		||||
    //
 | 
			
		||||
};//PWMHardFaultRegister
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct PWMBroadcastRegisters
 | 
			
		||||
{
 | 
			
		||||
    uint16_t *p_order;
 | 
			
		||||
    uint16_t *p_cell_quantity_in_phase;
 | 
			
		||||
    uint16_t *p_freq;
 | 
			
		||||
    PWMBroadcastRegisters():
 | 
			
		||||
        p_order(0),
 | 
			
		||||
        p_cell_quantity_in_phase(0),
 | 
			
		||||
        p_freq(0)
 | 
			
		||||
    {}
 | 
			
		||||
};//PWMBroadCastRegisters
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct PWMOffsetCells
 | 
			
		||||
{
 | 
			
		||||
    uint16_t cell_offset[8];
 | 
			
		||||
    PWMOffsetCells():
 | 
			
		||||
        cell_offset()
 | 
			
		||||
    {
 | 
			
		||||
       cell_offset[0] = 0;
 | 
			
		||||
       cell_offset[1] = 1;
 | 
			
		||||
       cell_offset[2] = 2;
 | 
			
		||||
       cell_offset[3] = 3;
 | 
			
		||||
       cell_offset[4] = 4;
 | 
			
		||||
       cell_offset[5] = 5;
 | 
			
		||||
       cell_offset[6] = 6;
 | 
			
		||||
       cell_offset[7] = 7;
 | 
			
		||||
    }
 | 
			
		||||
};//PWMOffsetCells
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct PWMPhaseStructure
 | 
			
		||||
{
 | 
			
		||||
    uint16_t *p_pwm_frequency;
 | 
			
		||||
    uint16_t *p_cell_quantity_in_phase;
 | 
			
		||||
    uint16_t *p_compare;
 | 
			
		||||
    uint16_t *p_order;
 | 
			
		||||
    uint16_t *p_pwm_state;
 | 
			
		||||
    uint16_t *p_pwm_version;
 | 
			
		||||
    uint16_t *a_cell_quantity_in_cascade[18];
 | 
			
		||||
    uint16_t *a_cascade_pointers[18];
 | 
			
		||||
    uint16_t *p_telemetry_box;
 | 
			
		||||
    uint16_t *p_breakdown_cell_state;
 | 
			
		||||
    uint16_t *p_breakdown_cell_address;
 | 
			
		||||
    PWMPhaseStructure():
 | 
			
		||||
        p_pwm_frequency(),
 | 
			
		||||
        p_cell_quantity_in_phase(),
 | 
			
		||||
        p_compare(),
 | 
			
		||||
        p_order(),
 | 
			
		||||
        p_pwm_state(),
 | 
			
		||||
        p_pwm_version(),
 | 
			
		||||
        a_cell_quantity_in_cascade(),
 | 
			
		||||
        a_cascade_pointers(),
 | 
			
		||||
        p_telemetry_box(),
 | 
			
		||||
        p_breakdown_cell_state(),
 | 
			
		||||
        p_breakdown_cell_address()
 | 
			
		||||
    {}
 | 
			
		||||
};//PWMPhaseStructure
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct PWMPhaseValueStructure
 | 
			
		||||
{
 | 
			
		||||
    uint16_t pwm_frequency;
 | 
			
		||||
    uint16_t cascade_quantity;
 | 
			
		||||
    uint16_t cell_quantity_in_phase;
 | 
			
		||||
    uint16_t cmp;
 | 
			
		||||
    uint16_t order;
 | 
			
		||||
    uint16_t pwm_state;
 | 
			
		||||
    uint16_t pwm_version;
 | 
			
		||||
    uint16_t cell_quantity_in_cascade[18];
 | 
			
		||||
    uint16_t breakdown_cell_state;
 | 
			
		||||
    PWMBreakdownCellAddressRegister breakdown_cell_address;
 | 
			
		||||
    PWMPhaseValueStructure():
 | 
			
		||||
        pwm_frequency(0),
 | 
			
		||||
        cascade_quantity(0),
 | 
			
		||||
        cell_quantity_in_phase(0),
 | 
			
		||||
        cmp(0),
 | 
			
		||||
        order(0),
 | 
			
		||||
        pwm_state(0),
 | 
			
		||||
        pwm_version(0),
 | 
			
		||||
        cell_quantity_in_cascade(),
 | 
			
		||||
        breakdown_cell_state(),
 | 
			
		||||
        breakdown_cell_address()
 | 
			
		||||
        {}
 | 
			
		||||
};//PWMPhaseValueStructure
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct PWMTelemetryFieldsOffset
 | 
			
		||||
{
 | 
			
		||||
    uint16_t state;
 | 
			
		||||
    uint16_t saw_init_val;
 | 
			
		||||
    uint16_t version;
 | 
			
		||||
    uint16_t t_pcb;
 | 
			
		||||
    uint16_t ctrl_faults;
 | 
			
		||||
    uint16_t int_bd_l;
 | 
			
		||||
    uint16_t voltage;
 | 
			
		||||
    uint16_t freq_pwm;
 | 
			
		||||
    uint16_t time_cntr;
 | 
			
		||||
    uint16_t t_rad;
 | 
			
		||||
    uint16_t sync_faults;
 | 
			
		||||
    uint16_t int_bd_h;
 | 
			
		||||
    PWMTelemetryFieldsOffset(
 | 
			
		||||
                                uint16_t state,
 | 
			
		||||
                                uint16_t saw_init_val,
 | 
			
		||||
                                uint16_t version,
 | 
			
		||||
                                uint16_t t_pcb,
 | 
			
		||||
                                uint16_t ctrl_faults,
 | 
			
		||||
                                uint16_t int_bd_l,
 | 
			
		||||
                                uint16_t voltage,
 | 
			
		||||
                                uint16_t freq_pwm,
 | 
			
		||||
                                uint16_t time_cntr,
 | 
			
		||||
                                uint16_t t_rad,
 | 
			
		||||
                                uint16_t sync_faults,
 | 
			
		||||
                                uint16_t int_bd_h
 | 
			
		||||
                                ):
 | 
			
		||||
        state(state),
 | 
			
		||||
        saw_init_val(saw_init_val),
 | 
			
		||||
        version(version),
 | 
			
		||||
        t_pcb(t_pcb),
 | 
			
		||||
        ctrl_faults(ctrl_faults),
 | 
			
		||||
        int_bd_l(int_bd_l),
 | 
			
		||||
        voltage(voltage),
 | 
			
		||||
        freq_pwm(freq_pwm),
 | 
			
		||||
        time_cntr(time_cntr),
 | 
			
		||||
        t_rad(t_rad),
 | 
			
		||||
        sync_faults(sync_faults),
 | 
			
		||||
        int_bd_h(int_bd_h)
 | 
			
		||||
    {}
 | 
			
		||||
};//PWMTelemetryFieldsOffset
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct PWMTelemetryCellFieldsValue
 | 
			
		||||
{
 | 
			
		||||
    uint16_t state;
 | 
			
		||||
    uint16_t saw_init_val;
 | 
			
		||||
    uint16_t version;
 | 
			
		||||
    uint16_t t_pcb;
 | 
			
		||||
    uint16_t ctrl_faults;
 | 
			
		||||
    uint16_t int_bd_l;
 | 
			
		||||
    uint16_t voltage;
 | 
			
		||||
    uint16_t freq_pwm;
 | 
			
		||||
    uint16_t time_cntr;
 | 
			
		||||
    uint16_t t_rad;
 | 
			
		||||
    uint16_t sync_faults;
 | 
			
		||||
    uint16_t int_bd_h;
 | 
			
		||||
    PWMTelemetryCellFieldsValue():
 | 
			
		||||
        state(0),
 | 
			
		||||
        saw_init_val(0),
 | 
			
		||||
        version(0),
 | 
			
		||||
        t_pcb(0),
 | 
			
		||||
        ctrl_faults(0),
 | 
			
		||||
        int_bd_l(0),
 | 
			
		||||
        voltage(0),
 | 
			
		||||
        freq_pwm(0),
 | 
			
		||||
        time_cntr(0),
 | 
			
		||||
        t_rad(0),
 | 
			
		||||
        sync_faults(0),
 | 
			
		||||
        int_bd_h(0)
 | 
			
		||||
    {}
 | 
			
		||||
};//PWMTelemetryCellFieldsValue
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct PWMCascadeTelemetryValue
 | 
			
		||||
{
 | 
			
		||||
    PWMTelemetryCellFieldsValue cell[8];
 | 
			
		||||
    PWMCascadeTelemetryValue():
 | 
			
		||||
        cell()
 | 
			
		||||
    {}
 | 
			
		||||
};//PWMCascadeTelemetryValue
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct PWMPhaseTelemetryValue
 | 
			
		||||
{
 | 
			
		||||
    PWMCascadeTelemetryValue cascade[18];
 | 
			
		||||
    PWMPhaseTelemetryValue():
 | 
			
		||||
        cascade()
 | 
			
		||||
    {}
 | 
			
		||||
};//PWMPhaseTelemetryValue
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct PWMStructureReference: public PWMPhaseValueStructure
 | 
			
		||||
{
 | 
			
		||||
    uint16_t broadcast_order;
 | 
			
		||||
    uint16_t broadcast_cell_quantity;
 | 
			
		||||
    uint16_t broadcast_freq;
 | 
			
		||||
    PWMHardFaultRegister  hard_fault;
 | 
			
		||||
    PWMStructureReference():
 | 
			
		||||
        PWMPhaseValueStructure(),
 | 
			
		||||
        broadcast_order(0),
 | 
			
		||||
        broadcast_cell_quantity(0),
 | 
			
		||||
        broadcast_freq(0),
 | 
			
		||||
        hard_fault()
 | 
			
		||||
    {}
 | 
			
		||||
};//PWMStructureReference
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct PWMInterfaceConfiguration
 | 
			
		||||
{
 | 
			
		||||
    float pwm_frequency;
 | 
			
		||||
    uint16_t adc_isr_quantity;
 | 
			
		||||
    float    adc_isr_offset_relative;
 | 
			
		||||
    PWMInterfaceConfiguration():
 | 
			
		||||
        pwm_frequency(500.0),
 | 
			
		||||
        adc_isr_quantity(1),
 | 
			
		||||
        adc_isr_offset_relative(FP_ZERO)
 | 
			
		||||
    {}
 | 
			
		||||
    //
 | 
			
		||||
};//PWMInterfaceConfiguration
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct PWMControlOrder
 | 
			
		||||
{
 | 
			
		||||
    enum ORDER
 | 
			
		||||
        {
 | 
			
		||||
            START     = 0x1111,   // start the DVR, and cells start working and outputing
 | 
			
		||||
            STOP      = 0x2222,   // stop the DVR, and cells stop working and outputing
 | 
			
		||||
            RESET     = 0x4444,   // reset pwm fault and cells fault
 | 
			
		||||
            SELFCHECK = 0x8888    // make cells to check themselves
 | 
			
		||||
        };//
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class PWMInterface
 | 
			
		||||
{
 | 
			
		||||
protected:
 | 
			
		||||
    uint16_t m_counter_cascade;
 | 
			
		||||
    uint16_t m_counter_cells;
 | 
			
		||||
    uint16_t m_aux_offset;
 | 
			
		||||
    uint16_t m_aux_cell_quantity;
 | 
			
		||||
    uint16_t *m_aux_pointer;
 | 
			
		||||
protected:
 | 
			
		||||
    uint16_t m_telemetry_function_counter;
 | 
			
		||||
    uint16_t m_telemetry_cascade_counter;
 | 
			
		||||
    uint16_t m_telemetry_cell_counter;
 | 
			
		||||
    uint16_t m_telemetry_function_quantity;
 | 
			
		||||
    uint16_t m_telemetry_cascade_quantity;
 | 
			
		||||
    uint16_t m_telemetry_cell_quantity;
 | 
			
		||||
protected:
 | 
			
		||||
    PWMBroadcastRegisters           m_broadcast;
 | 
			
		||||
    PWMTelemetryFieldsOffset        m_telemetry_fields_offset;
 | 
			
		||||
    PWMOffsetCells                  m_offset_cells;
 | 
			
		||||
    PWMHardFaultRegister            m_hard_fault;
 | 
			
		||||
public:
 | 
			
		||||
    PWMInterface();
 | 
			
		||||
protected:
 | 
			
		||||
    void (*_gpio_hard_fault_setup)();
 | 
			
		||||
    void (*_hard_fault_read)(uint16_t& data);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
} /* namespace PERIPHERY */
 | 
			
		||||
 | 
			
		||||
#endif /* PERIPHERY_PWMINTERFACE_H_ */
 | 
			
		||||
@ -1,393 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * PWMSingleInterace.cpp
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "PERIPHERY/PWMSInterace.h"
 | 
			
		||||
 | 
			
		||||
namespace PERIPHERY
 | 
			
		||||
{
 | 
			
		||||
//CONSTRUCTOR
 | 
			
		||||
PWMSInterace::PWMSInterace():
 | 
			
		||||
        PWMInterface(),
 | 
			
		||||
        m_phase(),
 | 
			
		||||
        //
 | 
			
		||||
        _telemetry_execute(&PWMSInterace::_telemetry_sequence_one)
 | 
			
		||||
        //
 | 
			
		||||
{}//CONSTRUCTOR
 | 
			
		||||
//
 | 
			
		||||
void PWMSInterace::setup(uint16_t *memzone)
 | 
			
		||||
{
 | 
			
		||||
    _setup_phase(m_phase, memzone + OFFSET_PWM_PHASE);
 | 
			
		||||
    m_broadcast.p_order                     = memzone + OFFSET_BROADCAST_ORDER;
 | 
			
		||||
    m_broadcast.p_cell_quantity_in_phase    = memzone + OFFSET_BROADCAST_CELLNUMBER;
 | 
			
		||||
    m_broadcast.p_freq                      = memzone + OFFSET_BROADCAST_FREQ;
 | 
			
		||||
    //
 | 
			
		||||
    _gpio_hard_fault_setup = &DSP28335::GPIO::gpio_hard_fault_setup;
 | 
			
		||||
    _hard_fault_read = &DSP28335::GPIO::gpio_hard_fault_read;
 | 
			
		||||
    (*_gpio_hard_fault_setup)();
 | 
			
		||||
    //
 | 
			
		||||
    set_telemetry_sequence_one();
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
//
 | 
			
		||||
void PWMSInterace::setup(const PWMStructureSetup& setup)
 | 
			
		||||
{
 | 
			
		||||
    _gpio_hard_fault_setup = setup.p_gpio_hard_fault_setup;
 | 
			
		||||
    _hard_fault_read = setup.p_hard_fault_read;
 | 
			
		||||
    (*_gpio_hard_fault_setup)();
 | 
			
		||||
    set_telemetry_sequence_one();
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
void PWMSInterace::setup(uint16_t *memzone, const PWMStructureSetup& setup)
 | 
			
		||||
{
 | 
			
		||||
    _setup_phase(m_phase, memzone + OFFSET_PWM_PHASE);
 | 
			
		||||
    m_broadcast.p_order                     = memzone + OFFSET_BROADCAST_ORDER;
 | 
			
		||||
    m_broadcast.p_cell_quantity_in_phase    = memzone + OFFSET_BROADCAST_CELLNUMBER;
 | 
			
		||||
    m_broadcast.p_freq                      = memzone + OFFSET_BROADCAST_FREQ;
 | 
			
		||||
    //
 | 
			
		||||
    _gpio_hard_fault_setup = setup.p_gpio_hard_fault_setup;
 | 
			
		||||
    _hard_fault_read = setup.p_hard_fault_read;
 | 
			
		||||
    (*_gpio_hard_fault_setup)();
 | 
			
		||||
    set_telemetry_sequence_one();
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
void PWMSInterace::_setup_phase(PWMPhaseStructure& phase, uint16_t *base)
 | 
			
		||||
{
 | 
			
		||||
    phase.p_pwm_frequency                   = base + OFFSET_FREQ_PWM;
 | 
			
		||||
    phase.p_cell_quantity_in_phase          = base + OFFSET_CQ_IN_PHASE;
 | 
			
		||||
    phase.p_compare                         = base + OFFSET_CMP;
 | 
			
		||||
    phase.p_order                           = base + OFFSET_ORDER;
 | 
			
		||||
    phase.p_pwm_state                       = base + OFFSET_PWM_STATE;
 | 
			
		||||
    phase.p_pwm_version                     = base + OFFSET_PWM_VERSION;
 | 
			
		||||
    phase.a_cell_quantity_in_cascade[0]     = base + OFFSET_CQ_IN_CASC_00;
 | 
			
		||||
    phase.a_cell_quantity_in_cascade[1]     = base + OFFSET_CQ_IN_CASC_01;
 | 
			
		||||
    phase.a_cell_quantity_in_cascade[2]     = base + OFFSET_CQ_IN_CASC_02;
 | 
			
		||||
    phase.a_cell_quantity_in_cascade[3]     = base + OFFSET_CQ_IN_CASC_03;
 | 
			
		||||
    phase.a_cell_quantity_in_cascade[4]     = base + OFFSET_CQ_IN_CASC_04;
 | 
			
		||||
    phase.a_cell_quantity_in_cascade[5]     = base + OFFSET_CQ_IN_CASC_05;
 | 
			
		||||
    phase.a_cell_quantity_in_cascade[6]     = base + OFFSET_CQ_IN_CASC_06;
 | 
			
		||||
    phase.a_cell_quantity_in_cascade[7]     = base + OFFSET_CQ_IN_CASC_07;
 | 
			
		||||
    phase.a_cell_quantity_in_cascade[8]     = base + OFFSET_CQ_IN_CASC_08;
 | 
			
		||||
    phase.a_cell_quantity_in_cascade[9]     = base + OFFSET_CQ_IN_CASC_09;
 | 
			
		||||
    phase.a_cell_quantity_in_cascade[10]    = base + OFFSET_CQ_IN_CASC_10;
 | 
			
		||||
    phase.a_cell_quantity_in_cascade[11]    = base + OFFSET_CQ_IN_CASC_11;
 | 
			
		||||
    phase.a_cell_quantity_in_cascade[12]    = base + OFFSET_CQ_IN_CASC_12;
 | 
			
		||||
    phase.a_cell_quantity_in_cascade[13]    = base + OFFSET_CQ_IN_CASC_13;
 | 
			
		||||
    phase.a_cell_quantity_in_cascade[14]    = base + OFFSET_CQ_IN_CASC_14;
 | 
			
		||||
    phase.a_cell_quantity_in_cascade[15]    = base + OFFSET_CQ_IN_CASC_15;
 | 
			
		||||
    phase.a_cell_quantity_in_cascade[16]    = base + OFFSET_CQ_IN_CASC_16;
 | 
			
		||||
    phase.a_cell_quantity_in_cascade[17]    = base + OFFSET_CQ_IN_CASC_17;
 | 
			
		||||
    phase.p_telemetry_box                   = base + OFFSET_TELEMETRY;
 | 
			
		||||
    phase.p_breakdown_cell_state            = base + OFFSET_CELL_BREAKDOWN;
 | 
			
		||||
    phase.p_breakdown_cell_address          = base + OFFSET_CELL_BREAKDOWN_ADR;
 | 
			
		||||
    phase.a_cascade_pointers[0]                     = base + OFFSET_CASCADE_00;
 | 
			
		||||
    phase.a_cascade_pointers[1]                     = base + OFFSET_CASCADE_01;
 | 
			
		||||
    phase.a_cascade_pointers[2]                     = base + OFFSET_CASCADE_02;
 | 
			
		||||
    phase.a_cascade_pointers[3]                     = base + OFFSET_CASCADE_03;
 | 
			
		||||
    phase.a_cascade_pointers[4]                     = base + OFFSET_CASCADE_04;
 | 
			
		||||
    phase.a_cascade_pointers[5]                     = base + OFFSET_CASCADE_05;
 | 
			
		||||
    phase.a_cascade_pointers[6]                     = base + OFFSET_CASCADE_06;
 | 
			
		||||
    phase.a_cascade_pointers[7]                     = base + OFFSET_CASCADE_07;
 | 
			
		||||
    phase.a_cascade_pointers[8]                     = base + OFFSET_CASCADE_08;
 | 
			
		||||
    phase.a_cascade_pointers[9]                     = base + OFFSET_CASCADE_09;
 | 
			
		||||
    phase.a_cascade_pointers[10]                    = base + OFFSET_CASCADE_10;
 | 
			
		||||
    phase.a_cascade_pointers[11]                    = base + OFFSET_CASCADE_11;
 | 
			
		||||
    phase.a_cascade_pointers[12]                    = base + OFFSET_CASCADE_12;
 | 
			
		||||
    phase.a_cascade_pointers[13]                    = base + OFFSET_CASCADE_13;
 | 
			
		||||
    phase.a_cascade_pointers[14]                    = base + OFFSET_CASCADE_14;
 | 
			
		||||
    phase.a_cascade_pointers[15]                    = base + OFFSET_CASCADE_15;
 | 
			
		||||
    phase.a_cascade_pointers[16]                    = base + OFFSET_CASCADE_16;
 | 
			
		||||
    phase.a_cascade_pointers[17]                    = base + OFFSET_CASCADE_17;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void PWMSInterace::set_frequency(uint16_t freq)
 | 
			
		||||
{
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    *m_phase.p_pwm_frequency = freq;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
//void PWMSInterace::set_cascade_quantity(uint16_t quant)
 | 
			
		||||
//{
 | 
			
		||||
    //m_config.cascade_quantity = quant;
 | 
			
		||||
    //
 | 
			
		||||
//}//
 | 
			
		||||
//
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void PWMSInterace::set_cell_quantity_phase(uint16_t quant)
 | 
			
		||||
{
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    *m_phase.p_cell_quantity_in_phase = quant;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void PWMSInterace::set_cmp(uint16_t cmpr)
 | 
			
		||||
{
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    *m_phase.p_compare = cmpr;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void PWMSInterace::set_order(uint16_t order)
 | 
			
		||||
{
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    *m_phase.p_order = order;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void PWMSInterace::get_board_state(uint16_t& state)
 | 
			
		||||
{
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    state = *m_phase.p_pwm_state;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void PWMSInterace::get_sw_version(uint16_t& version)
 | 
			
		||||
{
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    version = *m_phase.p_pwm_version;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void PWMSInterace::get_breakdown_cell_state(uint16_t& cellstate)
 | 
			
		||||
{
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    cellstate = *m_phase.p_breakdown_cell_state;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void PWMSInterace::get_breakdown_cell_index(uint16_t& cellindex)
 | 
			
		||||
{
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    cellindex = *m_phase.p_breakdown_cell_address;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void PWMSInterace::set_cell_quantity_cascade(uint16_t cascadenum, uint16_t quant)
 | 
			
		||||
{
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    *m_phase.a_cell_quantity_in_cascade[cascadenum] = quant;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void PWMSInterace::broadcast_order(uint16_t order)
 | 
			
		||||
{
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    *m_broadcast.p_order = order;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void PWMSInterace::broadcast_cell_quantity_phase(uint16_t quant)
 | 
			
		||||
{
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    *m_broadcast.p_cell_quantity_in_phase = quant;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void PWMSInterace::broadcast_freq(uint16_t freq)
 | 
			
		||||
{
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    *m_broadcast.p_freq = freq;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void PWMSInterace::get_hard_fault(uint16_t& hard_fault)
 | 
			
		||||
{
 | 
			
		||||
    (*_hard_fault_read)(m_hard_fault.all);
 | 
			
		||||
    hard_fault = m_hard_fault.all;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void PWMSInterace::get_indirect_access(uint16_t cascade, uint16_t cell, uint16_t offset, uint16_t& telemetry)
 | 
			
		||||
{
 | 
			
		||||
    //
 | 
			
		||||
    m_aux_pointer = m_phase.a_cascade_pointers[cascade] + m_offset_cells.cell_offset[cell];
 | 
			
		||||
    //
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    *m_phase.p_telemetry_box = offset;
 | 
			
		||||
    telemetry = *m_aux_pointer;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    NOP;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
//
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void PWMSInterace::telemetry_execute(PWMSInterfaceConfiguration& config, PWMPhaseTelemetryValue& telemetry_phase)
 | 
			
		||||
{
 | 
			
		||||
    (this->*_telemetry_execute)(config, telemetry_phase);
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void PWMSInterace::reset_telemetry()
 | 
			
		||||
{
 | 
			
		||||
    m_telemetry_function_counter    = 0;
 | 
			
		||||
    m_telemetry_cascade_counter     = 0;
 | 
			
		||||
    m_telemetry_cell_counter        = 0;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void PWMSInterace::set_telemetry_sequence_one()
 | 
			
		||||
{
 | 
			
		||||
    m_telemetry_function_counter    = 0;
 | 
			
		||||
    m_telemetry_cascade_counter     = 0;
 | 
			
		||||
    m_telemetry_cell_counter        = 0;
 | 
			
		||||
    //
 | 
			
		||||
    _telemetry_execute = &PWMSInterace::_telemetry_sequence_one;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void PWMSInterace::set_telemetry_sequence_two()
 | 
			
		||||
{
 | 
			
		||||
    m_telemetry_function_counter    = 0;
 | 
			
		||||
    m_telemetry_cascade_counter     = 0;
 | 
			
		||||
    m_telemetry_cell_counter        = 0;
 | 
			
		||||
    //
 | 
			
		||||
    _telemetry_execute = &PWMSInterace::_telemetry_sequence_two;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void PWMSInterace::_telemetry_sequence_one(PWMSInterfaceConfiguration& config, PWMPhaseTelemetryValue& telemetry_phase)
 | 
			
		||||
{
 | 
			
		||||
    //
 | 
			
		||||
    m_telemetry_function_quantity   = 11;
 | 
			
		||||
    m_telemetry_cascade_quantity    = config.cascade_quantity;
 | 
			
		||||
    m_telemetry_cell_quantity       = config.cell_quantity_in_cascade[m_telemetry_cascade_counter];
 | 
			
		||||
    //
 | 
			
		||||
    switch(m_telemetry_function_counter)
 | 
			
		||||
    {
 | 
			
		||||
    case 0:{    get_indirect_access(m_telemetry_cascade_counter, m_telemetry_cell_counter, m_telemetry_fields_offset.state,         telemetry_phase.cascade[m_telemetry_cascade_counter].cell[m_telemetry_cell_counter].state);         break;}
 | 
			
		||||
    case 1:{    get_indirect_access(m_telemetry_cascade_counter, m_telemetry_cell_counter, m_telemetry_fields_offset.saw_init_val,  telemetry_phase.cascade[m_telemetry_cascade_counter].cell[m_telemetry_cell_counter].saw_init_val);  break;}
 | 
			
		||||
    case 2:{    get_indirect_access(m_telemetry_cascade_counter, m_telemetry_cell_counter, m_telemetry_fields_offset.version,       telemetry_phase.cascade[m_telemetry_cascade_counter].cell[m_telemetry_cell_counter].version);       break;}
 | 
			
		||||
    case 3:{    get_indirect_access(m_telemetry_cascade_counter, m_telemetry_cell_counter, m_telemetry_fields_offset.t_pcb,         telemetry_phase.cascade[m_telemetry_cascade_counter].cell[m_telemetry_cell_counter].t_pcb);         break;}
 | 
			
		||||
    case 4:{    get_indirect_access(m_telemetry_cascade_counter, m_telemetry_cell_counter, m_telemetry_fields_offset.ctrl_faults,   telemetry_phase.cascade[m_telemetry_cascade_counter].cell[m_telemetry_cell_counter].ctrl_faults);   break;}
 | 
			
		||||
    case 5:{    get_indirect_access(m_telemetry_cascade_counter, m_telemetry_cell_counter, m_telemetry_fields_offset.int_bd_l,      telemetry_phase.cascade[m_telemetry_cascade_counter].cell[m_telemetry_cell_counter].int_bd_l);      break;}
 | 
			
		||||
    case 6:{    get_indirect_access(m_telemetry_cascade_counter, m_telemetry_cell_counter, m_telemetry_fields_offset.voltage,       telemetry_phase.cascade[m_telemetry_cascade_counter].cell[m_telemetry_cell_counter].voltage);       break;}
 | 
			
		||||
    case 7:{    get_indirect_access(m_telemetry_cascade_counter, m_telemetry_cell_counter, m_telemetry_fields_offset.freq_pwm,      telemetry_phase.cascade[m_telemetry_cascade_counter].cell[m_telemetry_cell_counter].freq_pwm);      break;}
 | 
			
		||||
    case 8:{    get_indirect_access(m_telemetry_cascade_counter, m_telemetry_cell_counter, m_telemetry_fields_offset.time_cntr,     telemetry_phase.cascade[m_telemetry_cascade_counter].cell[m_telemetry_cell_counter].time_cntr);     break;}
 | 
			
		||||
    case 9:{    get_indirect_access(m_telemetry_cascade_counter, m_telemetry_cell_counter, m_telemetry_fields_offset.t_rad,         telemetry_phase.cascade[m_telemetry_cascade_counter].cell[m_telemetry_cell_counter].t_rad);         break;}
 | 
			
		||||
    case 10:{   get_indirect_access(m_telemetry_cascade_counter, m_telemetry_cell_counter, m_telemetry_fields_offset.sync_faults,   telemetry_phase.cascade[m_telemetry_cascade_counter].cell[m_telemetry_cell_counter].sync_faults);   break;}
 | 
			
		||||
    case 11:{   get_indirect_access(m_telemetry_cascade_counter, m_telemetry_cell_counter, m_telemetry_fields_offset.int_bd_h,      telemetry_phase.cascade[m_telemetry_cascade_counter].cell[m_telemetry_cell_counter].int_bd_h);      break;}
 | 
			
		||||
    default:{}
 | 
			
		||||
    }//switch
 | 
			
		||||
    //
 | 
			
		||||
    m_telemetry_cell_counter++;
 | 
			
		||||
    if(m_telemetry_cell_counter >= m_telemetry_cell_quantity)
 | 
			
		||||
    {
 | 
			
		||||
        m_telemetry_cell_counter = 0;
 | 
			
		||||
        m_telemetry_cascade_counter++;
 | 
			
		||||
        if(m_telemetry_cascade_counter >= m_telemetry_cascade_quantity)
 | 
			
		||||
        {
 | 
			
		||||
            m_telemetry_cascade_counter = 0;
 | 
			
		||||
            m_telemetry_function_counter++;
 | 
			
		||||
            if(m_telemetry_function_counter > m_telemetry_function_quantity)
 | 
			
		||||
            {
 | 
			
		||||
                m_telemetry_function_counter = 0;
 | 
			
		||||
            }//if
 | 
			
		||||
            //
 | 
			
		||||
        }//if
 | 
			
		||||
        //
 | 
			
		||||
    }//if
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
//#pragma CODE_SECTION("ramfuncs");
 | 
			
		||||
void PWMSInterace::_telemetry_sequence_two(PWMSInterfaceConfiguration& config, PWMPhaseTelemetryValue& telemetry_phase)
 | 
			
		||||
{
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
} /* namespace PERIPHERY */
 | 
			
		||||
@ -1,87 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * PWMSingleInterace.h
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "PERIPHERY/PWMInterface.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef CELLQAUNTITYINPHASE
 | 
			
		||||
#define CELLQAUNTITYINPHASE   5
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef PERIPHERY_PWMSINGLEINTERFACE_H_
 | 
			
		||||
#define  PERIPHERY_PWMSINGLEINTERFACE_H_
 | 
			
		||||
 | 
			
		||||
namespace PERIPHERY
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct PWMSInterfaceConfiguration: public PWMInterfaceConfiguration
 | 
			
		||||
{
 | 
			
		||||
    uint16_t cascade_quantity;
 | 
			
		||||
    uint16_t cell_quantity;
 | 
			
		||||
    uint16_t cell_quantity_in_cascade[18];
 | 
			
		||||
    PWMSInterfaceConfiguration():
 | 
			
		||||
        PWMInterfaceConfiguration(),
 | 
			
		||||
        cascade_quantity(),
 | 
			
		||||
        cell_quantity(0),
 | 
			
		||||
        cell_quantity_in_cascade()
 | 
			
		||||
    {}
 | 
			
		||||
};//PWMSingleStructureConfiguration
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class PWMSInterace: public PWMInterface
 | 
			
		||||
{
 | 
			
		||||
private:
 | 
			
		||||
    PWMPhaseStructure         m_phase;
 | 
			
		||||
    PWMHardFaultRegister      m_hard_fault;
 | 
			
		||||
public:
 | 
			
		||||
    PWMSInterace();
 | 
			
		||||
public:
 | 
			
		||||
    void setup(uint16_t *memzone);
 | 
			
		||||
    void setup(const PWMStructureSetup& setup);
 | 
			
		||||
    void setup(uint16_t *memzone, const PWMStructureSetup& setup);
 | 
			
		||||
private:
 | 
			
		||||
    void _setup_phase(PWMPhaseStructure& phase, uint16_t *base);
 | 
			
		||||
public:
 | 
			
		||||
    void set_frequency(uint16_t freq);
 | 
			
		||||
    //void set_cascade_quantity(uint16_t quant);
 | 
			
		||||
    void set_cell_quantity_phase(uint16_t quant);
 | 
			
		||||
    void set_cmp(uint16_t cmpr);
 | 
			
		||||
    void set_order(uint16_t order);
 | 
			
		||||
    void get_board_state(uint16_t& statebard);
 | 
			
		||||
    void get_sw_version(uint16_t& version);
 | 
			
		||||
    void get_breakdown_cell_state(uint16_t& cellstate);
 | 
			
		||||
    void get_breakdown_cell_index(uint16_t& cellindex);
 | 
			
		||||
    void set_cell_quantity_cascade(uint16_t cascadenum, uint16_t quant);
 | 
			
		||||
    //
 | 
			
		||||
    void broadcast_order(uint16_t order);
 | 
			
		||||
    void broadcast_cell_quantity_phase(uint16_t quant);
 | 
			
		||||
    void broadcast_freq(uint16_t freq);
 | 
			
		||||
    //
 | 
			
		||||
    void get_hard_fault(uint16_t& hard_fault);
 | 
			
		||||
    //
 | 
			
		||||
    void get_indirect_access(uint16_t cascade, uint16_t cell, uint16_t offset, uint16_t& telemetry);
 | 
			
		||||
    //
 | 
			
		||||
    void telemetry_execute(PWMSInterfaceConfiguration& config, PWMPhaseTelemetryValue& telemetry_phase);
 | 
			
		||||
    void reset_telemetry();
 | 
			
		||||
    void set_telemetry_sequence_one();
 | 
			
		||||
    void set_telemetry_sequence_two();
 | 
			
		||||
    //
 | 
			
		||||
private:
 | 
			
		||||
    void (PWMSInterace::*_telemetry_execute)(PWMSInterfaceConfiguration& config, PWMPhaseTelemetryValue& telemetry_phase);
 | 
			
		||||
    void _telemetry_sequence_one(PWMSInterfaceConfiguration& config, PWMPhaseTelemetryValue& telemetry_phase);
 | 
			
		||||
    void _telemetry_sequence_two(PWMSInterfaceConfiguration& config, PWMPhaseTelemetryValue& telemetry_phase);
 | 
			
		||||
    //
 | 
			
		||||
};//class
 | 
			
		||||
 | 
			
		||||
} /* namespace PERIPHERY */
 | 
			
		||||
 | 
			
		||||
#endif /*  PERIPHERY_PWMSINGLEINTERFACE_H_ */
 | 
			
		||||
 | 
			
		||||
@ -1,23 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Periphery.cpp
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "PERIPHERY/Periphery.h"
 | 
			
		||||
// #include "PERIPHERY/CAN.h"
 | 
			
		||||
 | 
			
		||||
namespace PERIPHERY
 | 
			
		||||
{
 | 
			
		||||
//CONSTRUCTOR
 | 
			
		||||
Periphery::Periphery():
 | 
			
		||||
        p_memzone(0),
 | 
			
		||||
        dio(),
 | 
			
		||||
        adc(),
 | 
			
		||||
        dac(),
 | 
			
		||||
        fram(),
 | 
			
		||||
        analog_faults()
 | 
			
		||||
{}//CONSTRUCTOR
 | 
			
		||||
 | 
			
		||||
} /* namespace PERIPHERY */
 | 
			
		||||
@ -1,58 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Periphery.h
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
#include <math.h>
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
#include "PERIPHERY/AnalogFault.h"
 | 
			
		||||
// #include "PERIPHERY/CAN.h"
 | 
			
		||||
#include "PERIPHERY/DigitalIO.h"
 | 
			
		||||
#include "PERIPHERY/ExtADC.h"
 | 
			
		||||
#include "PERIPHERY/ExtDAC.h"
 | 
			
		||||
#include "PERIPHERY/FRAMInterface.h"
 | 
			
		||||
#include "PERIPHERY/PeripheryMap.h"
 | 
			
		||||
#include "PERIPHERY/PWMABCInterace.h"
 | 
			
		||||
#include "PERIPHERY/PWMSInterace.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef PERIPHERAL_PERIPHERAL_H_
 | 
			
		||||
#define PERIPHERAL_PERIPHERAL_H_
 | 
			
		||||
 | 
			
		||||
namespace PERIPHERY
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct PeripherySetup
 | 
			
		||||
{
 | 
			
		||||
    PERIPHERY::ExtADCSetup extadc;
 | 
			
		||||
    PERIPHERY::AnaloFaultSetup analog_faults;
 | 
			
		||||
    PeripherySetup():
 | 
			
		||||
        extadc(),
 | 
			
		||||
        analog_faults()
 | 
			
		||||
    {}
 | 
			
		||||
};//PeripheralSetupStructure
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Periphery
 | 
			
		||||
{
 | 
			
		||||
protected:
 | 
			
		||||
    uint16_t *p_memzone;
 | 
			
		||||
public:
 | 
			
		||||
    PERIPHERY::DigitalIO        dio;
 | 
			
		||||
    PERIPHERY::ExtADC           adc;
 | 
			
		||||
    PERIPHERY::ExtDAC           dac;
 | 
			
		||||
    PERIPHERY::FRAMInterface    fram;
 | 
			
		||||
    PERIPHERY::AnalogFault      analog_faults;
 | 
			
		||||
public:
 | 
			
		||||
    Periphery();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
} /* namespace PERIPHERY */
 | 
			
		||||
 | 
			
		||||
#endif /* PERIPHERY_PERIPHERY_H_ */
 | 
			
		||||
@ -1,104 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * PeripheryMap.h
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <math.h>
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
#ifndef PERIPHERY_PERIPHERYMAP_H_
 | 
			
		||||
#define PERIPHERY_PERIPHERYMAP_H_
 | 
			
		||||
 | 
			
		||||
#define OFFSET_PWM_PHASE_A       ((uint16_t)0x0100)
 | 
			
		||||
#define OFFSET_PWM_PHASE_B       ((uint16_t)0x0200)
 | 
			
		||||
#define OFFSET_PWM_PHASE_C       ((uint16_t)0x0300)
 | 
			
		||||
#define OFFSET_PWM_PHASE         OFFSET_PWM_PHASE_C
 | 
			
		||||
 | 
			
		||||
#define OFFSET_BROADCAST_FREQ    ((uint16_t)0x0490)
 | 
			
		||||
#define OFFSET_BROADCAST_CELLNUMBER     ((uint16_t)0x0491)
 | 
			
		||||
#define OFFSET_BROADCAST_ORDER   ((uint16_t)0x0493)
 | 
			
		||||
 | 
			
		||||
#define OFFSET_FREQ_PWM          ((uint16_t)0x0090)
 | 
			
		||||
#define OFFSET_CQ_IN_PHASE       ((uint16_t)0x0091)
 | 
			
		||||
#define OFFSET_CMP               ((uint16_t)0x0092)
 | 
			
		||||
#define OFFSET_ORDER             ((uint16_t)0x0093)
 | 
			
		||||
#define OFFSET_PWM_STATE         ((uint16_t)0x0094)
 | 
			
		||||
#define OFFSET_PWM_VERSION       ((uint16_t)0x0095)
 | 
			
		||||
#define OFFSET_CQ_IN_CASC_00     ((uint16_t)0x0096)
 | 
			
		||||
#define OFFSET_CQ_IN_CASC_01     ((uint16_t)0x0097)
 | 
			
		||||
#define OFFSET_CQ_IN_CASC_02     ((uint16_t)0x0098)
 | 
			
		||||
#define OFFSET_CQ_IN_CASC_03     ((uint16_t)0x0099)
 | 
			
		||||
#define OFFSET_CQ_IN_CASC_04     ((uint16_t)0x009A)
 | 
			
		||||
#define OFFSET_CQ_IN_CASC_05     ((uint16_t)0x009B)
 | 
			
		||||
#define OFFSET_CQ_IN_CASC_06     ((uint16_t)0x009C)
 | 
			
		||||
#define OFFSET_CQ_IN_CASC_07     ((uint16_t)0x009D)
 | 
			
		||||
#define OFFSET_CQ_IN_CASC_08     ((uint16_t)0x009E)
 | 
			
		||||
#define OFFSET_CQ_IN_CASC_09     ((uint16_t)0x009F)
 | 
			
		||||
#define OFFSET_CQ_IN_CASC_10     ((uint16_t)0x00A0)
 | 
			
		||||
#define OFFSET_CQ_IN_CASC_11     ((uint16_t)0x00A1)
 | 
			
		||||
#define OFFSET_CQ_IN_CASC_12     ((uint16_t)0x00A2)
 | 
			
		||||
#define OFFSET_CQ_IN_CASC_13     ((uint16_t)0x00A3)
 | 
			
		||||
#define OFFSET_CQ_IN_CASC_14     ((uint16_t)0x00A4)
 | 
			
		||||
#define OFFSET_CQ_IN_CASC_15     ((uint16_t)0x00A5)
 | 
			
		||||
#define OFFSET_CQ_IN_CASC_16     ((uint16_t)0x00A6)
 | 
			
		||||
#define OFFSET_CQ_IN_CASC_17     ((uint16_t)0x00A7)
 | 
			
		||||
#define OFFSET_CELL_BREAKDOWN    ((uint16_t)0x00A8)
 | 
			
		||||
#define OFFSET_CELL_BREAKDOWN_ADR ((uint16_t)0x00A9)
 | 
			
		||||
 | 
			
		||||
#define OFFSET_TELEMETRY         ((uint16_t)0x00FF)
 | 
			
		||||
 | 
			
		||||
#define OFFSET_CASCADE_00        ((uint16_t)0x0000)
 | 
			
		||||
#define OFFSET_CASCADE_01        ((uint16_t)0x0008)
 | 
			
		||||
#define OFFSET_CASCADE_02        ((uint16_t)0x0010)
 | 
			
		||||
#define OFFSET_CASCADE_03        ((uint16_t)0x0018)
 | 
			
		||||
#define OFFSET_CASCADE_04        ((uint16_t)0x0020)
 | 
			
		||||
#define OFFSET_CASCADE_05        ((uint16_t)0x0028)
 | 
			
		||||
#define OFFSET_CASCADE_06        ((uint16_t)0x0030)
 | 
			
		||||
#define OFFSET_CASCADE_07        ((uint16_t)0x0038)
 | 
			
		||||
#define OFFSET_CASCADE_08        ((uint16_t)0x0040)
 | 
			
		||||
#define OFFSET_CASCADE_09        ((uint16_t)0x0048)
 | 
			
		||||
#define OFFSET_CASCADE_10        ((uint16_t)0x0050)
 | 
			
		||||
#define OFFSET_CASCADE_11        ((uint16_t)0x0058)
 | 
			
		||||
#define OFFSET_CASCADE_12        ((uint16_t)0x0060)
 | 
			
		||||
#define OFFSET_CASCADE_13        ((uint16_t)0x0068)
 | 
			
		||||
#define OFFSET_CASCADE_14        ((uint16_t)0x0070)
 | 
			
		||||
#define OFFSET_CASCADE_15        ((uint16_t)0x0078)
 | 
			
		||||
#define OFFSET_CASCADE_16        ((uint16_t)0x0080)
 | 
			
		||||
#define OFFSET_CASCADE_17        ((uint16_t)0x0088)
 | 
			
		||||
 | 
			
		||||
#define OFFSET_DATA_DISCRETE_IO  ((uint16_t)0x0900)
 | 
			
		||||
 | 
			
		||||
#define OFFSET_DAC_CHANNEL_A    ((uint16_t)0x0800)
 | 
			
		||||
#define OFFSET_DAC_CHANNEL_B    ((uint16_t)0x0801)
 | 
			
		||||
#define OFFSET_DAC_CHANNEL_C    ((uint16_t)0x0802)
 | 
			
		||||
#define OFFSET_DAC_CHANNEL_D    ((uint16_t)0x0803)
 | 
			
		||||
 | 
			
		||||
#define OFFSET_ADC_0_CHANNEL_0  ((uint16_t)0x0D00)
 | 
			
		||||
#define OFFSET_ADC_0_CHANNEL_1  ((uint16_t)0x0D01)
 | 
			
		||||
#define OFFSET_ADC_0_CHANNEL_2  ((uint16_t)0x0D02)
 | 
			
		||||
#define OFFSET_ADC_0_CHANNEL_3  ((uint16_t)0x0D03)
 | 
			
		||||
#define OFFSET_ADC_0_CHANNEL_4  ((uint16_t)0x0D04)
 | 
			
		||||
#define OFFSET_ADC_0_CHANNEL_5  ((uint16_t)0x0D05)
 | 
			
		||||
 | 
			
		||||
#define OFFSET_ADC_1_CHANNEL_0  ((uint16_t)0x0E05)
 | 
			
		||||
#define OFFSET_ADC_1_CHANNEL_1  ((uint16_t)0x0E06)
 | 
			
		||||
#define OFFSET_ADC_1_CHANNEL_2  ((uint16_t)0x0E07)
 | 
			
		||||
#define OFFSET_ADC_1_CHANNEL_3  ((uint16_t)0x0E08)
 | 
			
		||||
#define OFFSET_ADC_1_CHANNEL_4  ((uint16_t)0x0E09)
 | 
			
		||||
#define OFFSET_ADC_1_CHANNEL_5  ((uint16_t)0x0E0A)
 | 
			
		||||
 | 
			
		||||
#define OFFSET_ADC_2_CHANNEL_0  ((uint16_t)0x0F0A)
 | 
			
		||||
#define OFFSET_ADC_2_CHANNEL_1  ((uint16_t)0x0F0B)
 | 
			
		||||
#define OFFSET_ADC_2_CHANNEL_2  ((uint16_t)0x0F0C)
 | 
			
		||||
#define OFFSET_ADC_2_CHANNEL_3  ((uint16_t)0x0F0D)
 | 
			
		||||
#define OFFSET_ADC_2_CHANNEL_4  ((uint16_t)0x0F0E)
 | 
			
		||||
#define OFFSET_ADC_2_CHANNEL_5  ((uint16_t)0x0F0F)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* PERIPHERY_PERIPHERYMAP_H_ */
 | 
			
		||||
@ -1,80 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * HeaderRUDRIVEFRAMEWORK.h
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef RUDRIVEFRAMEWORK_HEADERRUDRIVEFRAMEWORK_H_
 | 
			
		||||
#define RUDRIVEFRAMEWORK_HEADERRUDRIVEFRAMEWORK_H_
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "DSP28335/CPUBase.h"
 | 
			
		||||
#include "DSP28335/ADC.h"
 | 
			
		||||
// #include "DSP28335/CANBUS.h"
 | 
			
		||||
#include "DSP28335/CPU.h"
 | 
			
		||||
#include "DSP28335/CPUBase.h"
 | 
			
		||||
#include "DSP28335/CPUTimers.h"
 | 
			
		||||
#include "DSP28335/DiscreteOutputs.h"
 | 
			
		||||
#include "DSP28335/ECANA.h"
 | 
			
		||||
#include "DSP28335/ECANB.h"
 | 
			
		||||
#include "DSP28335/EPWM.h"
 | 
			
		||||
#include "DSP28335/EQEP1.h"
 | 
			
		||||
#include "DSP28335/FLASH.h"
 | 
			
		||||
#include "DSP28335/GPIO.h"
 | 
			
		||||
#include "DSP28335/MeasureTimeInterval.h"
 | 
			
		||||
#include "DSP28335/MeasureTimePeriod.h"
 | 
			
		||||
#include "DSP28335/MemoryZone.h"
 | 
			
		||||
#include "DSP28335/MemoryZone0.h"
 | 
			
		||||
#include "DSP28335/MemoryZone7.h"
 | 
			
		||||
#include "DSP28335/SCIA.h"
 | 
			
		||||
#include "DSP28335/SCIB.h"
 | 
			
		||||
#include "DSP28335/SCIBase.h"
 | 
			
		||||
#include "DSP28335/SCIC.h"
 | 
			
		||||
#include "DSP28335/SPIBase.h"
 | 
			
		||||
#include "DSP28335/SPIA.h"
 | 
			
		||||
#include "DSP28335/XINTF.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// #include "INTERFACE/CANBUSDataStructures.h"
 | 
			
		||||
// #include "INTERFACE/CANOPENParameters.h"
 | 
			
		||||
// #include "INTERFACE/CANOpenServer.h"
 | 
			
		||||
// #include "INTERFACE/DatabaseConfiguration.h"
 | 
			
		||||
// #include "INTERFACE/SDO.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "MODBUSRTU/ModbusRTUCRC.h"
 | 
			
		||||
#include "MODBUSRTU/ModbusRTUDefines.h"
 | 
			
		||||
#include "MODBUSRTU/ModbusRTUTransceiver.h"
 | 
			
		||||
#include "MODBUSRTU/ModbusRTUVariant.h"
 | 
			
		||||
#include "MODBUSRTU/ModbusRTUTransceiverBase.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "PERIPHERY/DigitalIO.h"
 | 
			
		||||
#include "PERIPHERY/ExtADC.h"
 | 
			
		||||
#include "PERIPHERY/ExtDAC.h"
 | 
			
		||||
#include "PERIPHERY/FRAMInterface.h"
 | 
			
		||||
#include "PERIPHERY/IIIPeriphery.h"
 | 
			
		||||
#include "PERIPHERY/IPeriphery.h"
 | 
			
		||||
#include "PERIPHERY/Periphery.h"
 | 
			
		||||
#include "PERIPHERY/PeripheryMap.h"
 | 
			
		||||
#include "PERIPHERY/PWMABCInterace.h"
 | 
			
		||||
#include "PERIPHERY/PWMInterface.h"
 | 
			
		||||
#include "PERIPHERY/PWMSInterace.h"
 | 
			
		||||
// #include "PERIPHERY/COMMBoard.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "RUDRIVEFRAMEWORK/DataType.h"
 | 
			
		||||
#include "RUDRIVEFRAMEWORK/PhaseBase.h"
 | 
			
		||||
#include "RUDRIVEFRAMEWORK/MultiPhaseDafaults.h"
 | 
			
		||||
#include "RUDRIVEFRAMEWORK/SinglePhaseDefaults.h"
 | 
			
		||||
#include "RUDRIVEFRAMEWORK/SystemDefinitions.h"
 | 
			
		||||
#include "RUDRIVEFRAMEWORK/MultiPhase.h"
 | 
			
		||||
#include "RUDRIVEFRAMEWORK/SinglePhase.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* RUDRIVEFRAMEWORK_HEADERRUDRIVEFRAMEWORK_H_ */
 | 
			
		||||
@ -1,45 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * MultiPhase.cpp
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "RUDRIVEFRAMEWORK/MultiPhase.h"
 | 
			
		||||
 | 
			
		||||
namespace RUDRIVEFRAMEWORK
 | 
			
		||||
{
 | 
			
		||||
//CONSTRUCTOR
 | 
			
		||||
MultiPhase::MultiPhase(uint16_t *memzone):
 | 
			
		||||
        PhaseBase(memzone),
 | 
			
		||||
        periphery(),
 | 
			
		||||
        crc(),
 | 
			
		||||
        modbus_port(cpu.scib, cpu.interval_measure, crc)
 | 
			
		||||
{}//CONSTRUCTOR
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void MultiPhase::setup(MultiPhaseSetup& setup)
 | 
			
		||||
{
 | 
			
		||||
    cpu.setup(setup.cpu);
 | 
			
		||||
    periphery.setup(m_memzone);
 | 
			
		||||
    modbus_port.setup(setup.modbus);
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
void MultiPhase::get_hard_code_setup(MultiPhaseSetup& hsetup)
 | 
			
		||||
{
 | 
			
		||||
    cpu.get_hard_code_setup(hsetup.cpu);
 | 
			
		||||
    // hsetup.cpu.epwm.parameters.fpwm = MULTI_PHASE_PWM_FREQUENCY;
 | 
			
		||||
    // hsetup.cpu.epwm.parameters.adc_soc_quantity = MULTI_PHASE_ADC_ISR_QUANTITY;
 | 
			
		||||
    // hsetup.cpu.epwm.parameters.adc_soc_offset = MULTI_PHASE_ADC_ISR_OFFSET_RELATIVE;
 | 
			
		||||
    //
 | 
			
		||||
    periphery.get_hard_code_setup(hsetup.periphery);
 | 
			
		||||
    //
 | 
			
		||||
    hsetup.modbus.gpio_re_de_setup = &DSP28335::GPIO::gpio_scib_re_de_setup;
 | 
			
		||||
    hsetup.modbus.gpio_driver_enable = &DSP28335::GPIO::gpio_scib_re_de_set;
 | 
			
		||||
    hsetup.modbus.gpio_receiver_enable = &DSP28335::GPIO::gpio_scib_re_de_clear;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
} /* namespace RUDRIVEFRAMEWORK */
 | 
			
		||||
@ -1,70 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * MultiPhase.h
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "RUDRIVEFRAMEWORK/PhaseBase.h"
 | 
			
		||||
//#include "RUDRIVEFRAMEWORK/HeaderRUDRIVEFRAMEWORK.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef RUDRIVEFRAMEWORK_MULTIPHASE_H_
 | 
			
		||||
#define RUDRIVEFRAMEWORK_MULTIPHASE_H_
 | 
			
		||||
 | 
			
		||||
namespace RUDRIVEFRAMEWORK
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
struct MultiPhaseSetup
 | 
			
		||||
{
 | 
			
		||||
    DSP28335::CPUSetup              cpu;
 | 
			
		||||
    PERIPHERY::IIIPeripherySetup  periphery;
 | 
			
		||||
    MODBUSRTU::ModbusRTUTransceiverSetup modbus;
 | 
			
		||||
    MultiPhaseSetup():
 | 
			
		||||
        cpu(),
 | 
			
		||||
        periphery(),
 | 
			
		||||
        modbus()
 | 
			
		||||
    {}
 | 
			
		||||
};//MultiPhaseSetup
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct MultiPhaseConfiguration
 | 
			
		||||
{
 | 
			
		||||
    DSP28335::SCIConfiguration      scib;
 | 
			
		||||
    DSP28335::SCIConfiguration      scic;
 | 
			
		||||
    DSP28335::EPWMConfiguration     epwm;
 | 
			
		||||
    MultiPhaseConfiguration():
 | 
			
		||||
        scib(),
 | 
			
		||||
        scic(),
 | 
			
		||||
        epwm()
 | 
			
		||||
    {}
 | 
			
		||||
};//MultiPhaseConfiguration
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct MultiPhasePWMConfiguration: public PERIPHERY::PWMABCInterfaceConfiguration
 | 
			
		||||
{
 | 
			
		||||
    MultiPhasePWMConfiguration():
 | 
			
		||||
        PWMABCInterfaceConfiguration()
 | 
			
		||||
    {}
 | 
			
		||||
};//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class MultiPhase: public PhaseBase
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    PERIPHERY::IIIPeriphery     periphery;
 | 
			
		||||
    MODBUSRTU::ModbusRTUCRC         crc;
 | 
			
		||||
    MODBUSRTU::ModbusRTUTransceiver modbus_port;
 | 
			
		||||
public:
 | 
			
		||||
    MultiPhase(uint16_t *memzone);
 | 
			
		||||
public:
 | 
			
		||||
    void setup(MultiPhaseSetup& setup);
 | 
			
		||||
public:
 | 
			
		||||
    void get_hard_code_setup(MultiPhaseSetup& hsetup);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
} /* namespace RUDRIVEFRAMEWORK */
 | 
			
		||||
 | 
			
		||||
#endif /* RUDRIVEFRAMEWORK_MULTIPHASE_H_ */
 | 
			
		||||
@ -1,18 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * PhaseBase.cpp
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "RUDRIVEFRAMEWORK/PhaseBase.h"
 | 
			
		||||
 | 
			
		||||
namespace RUDRIVEFRAMEWORK
 | 
			
		||||
{
 | 
			
		||||
//CONSTRUCTOR
 | 
			
		||||
PhaseBase::PhaseBase(uint16_t *memzone):
 | 
			
		||||
        m_memzone(memzone),
 | 
			
		||||
        cpu()
 | 
			
		||||
{}//CONSTRUCTOR
 | 
			
		||||
 | 
			
		||||
} /* namespace RUDRIVEFRAMEWORK */
 | 
			
		||||
@ -1,45 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * PhaseBase.h
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <math.h>
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
#include "F28335/DSP28x_Project.h"
 | 
			
		||||
#include "F28335/DSP2833x_Examples.h"
 | 
			
		||||
 | 
			
		||||
#include "RUDRIVEFRAMEWORK/HeaderRUDRIVEFRAMEWORK.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef RUDRIVEFRAMEWORK_PHASEBASE_H_
 | 
			
		||||
#define RUDRIVEFRAMEWORK_PHASEBASE_H_
 | 
			
		||||
 | 
			
		||||
namespace RUDRIVEFRAMEWORK
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
class PhaseBase
 | 
			
		||||
{
 | 
			
		||||
protected:
 | 
			
		||||
    uint16_t *m_memzone;
 | 
			
		||||
protected:
 | 
			
		||||
    //float       m_time_sample_adc;
 | 
			
		||||
    //float       m_pwm_frequency;
 | 
			
		||||
    //uint16_t    m_adc_isr_quantity;
 | 
			
		||||
    //float       m_adc_isr_offset_relative;
 | 
			
		||||
public:
 | 
			
		||||
    DSP28335::CPU     cpu;
 | 
			
		||||
public:
 | 
			
		||||
    PhaseBase(uint16_t *memzone);
 | 
			
		||||
public:
 | 
			
		||||
    //virtual float       get_time_sample_adc() = 0;
 | 
			
		||||
    //virtual float       get_pwm_frequency() = 0;
 | 
			
		||||
    //virtual uint16_t    get_adc_isr_quantity() = 0;
 | 
			
		||||
    //virtual float       get_adc_isr_offset_relative() = 0;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
} /* namespace RUDRIVEFRAMEWORK */
 | 
			
		||||
 | 
			
		||||
#endif /* RUDRIVEFRAMEWORK_PHASEBASE_H_ */
 | 
			
		||||
@ -1,52 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * SinglePhase.cpp
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "RUDRIVEFRAMEWORK/SinglePhase.h"
 | 
			
		||||
// #include "PERIPHERY/CAN.h"
 | 
			
		||||
// #include "PERIPHERY/COMMBoard.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace RUDRIVEFRAMEWORK
 | 
			
		||||
{
 | 
			
		||||
//CONSTRUCTOR
 | 
			
		||||
SinglePhase::SinglePhase(uint16_t *memzone):
 | 
			
		||||
        PhaseBase(memzone),
 | 
			
		||||
        // periphery(),
 | 
			
		||||
        crc(),
 | 
			
		||||
        modbus_port(cpu.scib, cpu.interval_measure, crc)
 | 
			
		||||
        // comm_board(canSpace::CANB)
 | 
			
		||||
{}//CONSTRUCTOR
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void SinglePhase::setup(SinglePhaseSetup& setup)
 | 
			
		||||
{
 | 
			
		||||
    cpu.setup(setup.cpu);
 | 
			
		||||
    // periphery.setup(m_memzone);
 | 
			
		||||
    modbus_port.setup(setup.modbus);
 | 
			
		||||
    // comm_board.config();
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
void SinglePhase::get_hard_code_setup(SinglePhaseSetup& hsetup)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    cpu.get_hard_code_setup(hsetup.cpu);
 | 
			
		||||
    // hsetup.cpu.epwm.parameters.fpwm = SINGLE_PHASE_PWM_FREQUENCY;
 | 
			
		||||
    // hsetup.cpu.epwm.parameters.adc_soc_quantity = SINGLE_PHASE_ADC_ISR_QUANTITY;
 | 
			
		||||
    // hsetup.cpu.epwm.parameters.adc_soc_offset = SINGLE_PHASE_ADC_ISR_OFFSET_RELATIVE;
 | 
			
		||||
    //
 | 
			
		||||
    // periphery.get_hard_code_setup(hsetup.periphery);
 | 
			
		||||
    //
 | 
			
		||||
    hsetup.modbus.gpio_re_de_setup = &DSP28335::GPIO::gpio_scib_re_de_setup;
 | 
			
		||||
    hsetup.modbus.gpio_driver_enable = &DSP28335::GPIO::gpio_scib_re_de_set;
 | 
			
		||||
    hsetup.modbus.gpio_receiver_enable = &DSP28335::GPIO::gpio_scib_re_de_clear;
 | 
			
		||||
    //
 | 
			
		||||
}//
 | 
			
		||||
//
 | 
			
		||||
} /* namespace RUDRIVEFRAMEWORK */
 | 
			
		||||
@ -1,75 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * SinglePhase.h
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
// #include "PERIPHERY/COMMBoard.h"
 | 
			
		||||
#include "RUDRIVEFRAMEWORK/PhaseBase.h"
 | 
			
		||||
//#include "RUDRIVEFRAMEWORK/HeaderRUDRIVEFRAMEWORK.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef RUDRIVEFRAMEWORK_SINGLEPHASE_H_
 | 
			
		||||
#define RUDRIVEFRAMEWORK_SINGLEPHASE_H_
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void write_fram (uint16_t addr, uint16_t *buffer_pointer, uint16_t buffer_size);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace RUDRIVEFRAMEWORK
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct SinglePhaseSetup
 | 
			
		||||
{
 | 
			
		||||
    DSP28335::CPUSetup              cpu;
 | 
			
		||||
    // PERIPHERY::IPeripherySetup      periphery;
 | 
			
		||||
    MODBUSRTU::ModbusRTUTransceiverSetup modbus;
 | 
			
		||||
    SinglePhaseSetup():
 | 
			
		||||
        cpu(),
 | 
			
		||||
        // periphery(),
 | 
			
		||||
        modbus()
 | 
			
		||||
    {}
 | 
			
		||||
};//SinglePhaseSetup
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct SinglePhaseConfiguration
 | 
			
		||||
{
 | 
			
		||||
    DSP28335::SCIConfiguration      scib;
 | 
			
		||||
    DSP28335::SCIConfiguration      scic;
 | 
			
		||||
    DSP28335::EPWMConfiguration     epwm;
 | 
			
		||||
    SinglePhaseConfiguration():
 | 
			
		||||
        scib(),
 | 
			
		||||
        scic(),
 | 
			
		||||
        epwm()
 | 
			
		||||
    {}
 | 
			
		||||
};//SinglePhaseConfiguration
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct SinglePhasePWMConfiguration: public PERIPHERY::PWMSInterfaceConfiguration
 | 
			
		||||
{
 | 
			
		||||
    SinglePhasePWMConfiguration():
 | 
			
		||||
        PWMSInterfaceConfiguration()
 | 
			
		||||
    {}
 | 
			
		||||
};//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class SinglePhase: public RUDRIVEFRAMEWORK::PhaseBase
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    // PERIPHERY::IPeriphery           periphery;
 | 
			
		||||
    MODBUSRTU::ModbusRTUCRC         crc;
 | 
			
		||||
    MODBUSRTU::ModbusRTUTransceiver modbus_port;
 | 
			
		||||
    // PERIPHERY::COMMBoard            comm_board;
 | 
			
		||||
public:
 | 
			
		||||
    SinglePhase(uint16_t *memzone);
 | 
			
		||||
public:
 | 
			
		||||
    void setup(SinglePhaseSetup& setup);
 | 
			
		||||
public:
 | 
			
		||||
    void get_hard_code_setup(SinglePhaseSetup& hsetup);
 | 
			
		||||
};// SinglePhase
 | 
			
		||||
 | 
			
		||||
} /* namespace RUDRIVEFRAMEWORK */
 | 
			
		||||
 | 
			
		||||
#endif /* RUDRIVEFRAMEWORK_SINGLEPHASE_H_ */
 | 
			
		||||
@ -1,39 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * SinglePhaseDefaults.h
 | 
			
		||||
 *
 | 
			
		||||
 *      Author: Aleksey Gerasimenko
 | 
			
		||||
 *      gerasimenko.aleksey.n@gmail.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef RUDRIVEFRAMEWORK_SINGLEPHASEDEFAULTS_H_
 | 
			
		||||
#define RUDRIVEFRAMEWORK_SINGLEPHASEDEFAULTS_H_
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define SINGLE_PHASE_PWM_FREQUENCY              (float)500
 | 
			
		||||
#define SINGLE_PHASE_ADC_ISR_QUANTITY           (uint16_t)2
 | 
			
		||||
#define SINGLE_PHASE_ADC_ISR_OFFSET_RELATIVE    (float)FP_ZERO
 | 
			
		||||
#define SINGLE_PHASE_CASCADE_QUANTITY           (uint16_t)1
 | 
			
		||||
#define SINGLE_PHASE_CELL_QUANTITY              (uint16_t)1
 | 
			
		||||
#define SINGLE_PHASE_CELL_QANTITY_IN_CASCADE_00 (uint16_t)1
 | 
			
		||||
#define SINGLE_PHASE_CELL_QANTITY_IN_CASCADE_01 (uint16_t)0
 | 
			
		||||
#define SINGLE_PHASE_CELL_QANTITY_IN_CASCADE_02 (uint16_t)0
 | 
			
		||||
#define SINGLE_PHASE_CELL_QANTITY_IN_CASCADE_03 (uint16_t)0
 | 
			
		||||
#define SINGLE_PHASE_CELL_QANTITY_IN_CASCADE_04 (uint16_t)0
 | 
			
		||||
#define SINGLE_PHASE_CELL_QANTITY_IN_CASCADE_05 (uint16_t)0
 | 
			
		||||
#define SINGLE_PHASE_CELL_QANTITY_IN_CASCADE_06 (uint16_t)0
 | 
			
		||||
#define SINGLE_PHASE_CELL_QANTITY_IN_CASCADE_07 (uint16_t)0
 | 
			
		||||
#define SINGLE_PHASE_CELL_QANTITY_IN_CASCADE_08 (uint16_t)0
 | 
			
		||||
#define SINGLE_PHASE_CELL_QANTITY_IN_CASCADE_09 (uint16_t)0
 | 
			
		||||
#define SINGLE_PHASE_CELL_QANTITY_IN_CASCADE_10 (uint16_t)0
 | 
			
		||||
#define SINGLE_PHASE_CELL_QANTITY_IN_CASCADE_11 (uint16_t)0
 | 
			
		||||
#define SINGLE_PHASE_CELL_QANTITY_IN_CASCADE_12 (uint16_t)0
 | 
			
		||||
#define SINGLE_PHASE_CELL_QANTITY_IN_CASCADE_13 (uint16_t)0
 | 
			
		||||
#define SINGLE_PHASE_CELL_QANTITY_IN_CASCADE_14 (uint16_t)0
 | 
			
		||||
#define SINGLE_PHASE_CELL_QANTITY_IN_CASCADE_15 (uint16_t)0
 | 
			
		||||
#define SINGLE_PHASE_CELL_QANTITY_IN_CASCADE_16 (uint16_t)0
 | 
			
		||||
#define SINGLE_PHASE_CELL_QANTITY_IN_CASCADE_17 (uint16_t)0
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* RUDRIVEFRAMEWORK_SINGLEPHASEDEFAULTS_H_ */
 | 
			
		||||
					Loading…
					
					
				
		Reference in New Issue