Modbus still working here
							parent
							
								
									5f28745064
								
							
						
					
					
						commit
						a0fef5214d
					
				| @ -0,0 +1,187 @@ | ||||
| /*
 | ||||
|  * 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 */ | ||||
| @ -0,0 +1,39 @@ | ||||
| /*
 | ||||
|  * 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_ */ | ||||
| @ -0,0 +1,117 @@ | ||||
| /*
 | ||||
|  * 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);
 | ||||
|     //
 | ||||
|     // 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 */ | ||||
| @ -0,0 +1,120 @@ | ||||
| /*
 | ||||
|  * 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_ */ | ||||
| @ -0,0 +1,34 @@ | ||||
| /*
 | ||||
|  * CPUBase.cpp | ||||
|  * | ||||
|  *      Author: Aleksey Gerasimenko | ||||
|  *      gerasimenko.aleksey.n@gmail.com | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| #include "DSP28335/CPUBase.h" | ||||
| 
 | ||||
| namespace DSP28335 | ||||
| { | ||||
| 
 | ||||
| //CONSTRUCTOR
 | ||||
| CPUBase::CPUBase(): | ||||
|         m_mode(DSP28335::CPUBase::UNDEFINED), | ||||
|         m_status(false) | ||||
| //
 | ||||
| {}//end CONSTRUCTOR
 | ||||
| //
 | ||||
| DSP28335::CPUBase::mode_t DSP28335::CPUBase::get_mode() const | ||||
| { | ||||
| 
 | ||||
|     return m_mode; | ||||
|     //
 | ||||
| }//end
 | ||||
| //
 | ||||
| bool DSP28335::CPUBase::compare(DSP28335::CPUBase::mode_t mode) const | ||||
| { | ||||
|     return m_mode == mode; | ||||
|     //
 | ||||
| }//end
 | ||||
| //
 | ||||
| } /* namespace DSP28335 */ | ||||
| @ -0,0 +1,50 @@ | ||||
| /*
 | ||||
|  * CPUBase.h | ||||
|  * | ||||
|  *      Author: Aleksey Gerasimenko | ||||
|  *      gerasimenko.aleksey.n@gmail.com | ||||
|  */ | ||||
| 
 | ||||
| #include <math.h> | ||||
| #include <stdint.h> | ||||
| //
 | ||||
| #include "F28335/DSP28x_Project.h" | ||||
| 
 | ||||
| 
 | ||||
| #include "RUDRIVEFRAMEWORK/DataType.h" | ||||
| #include "RUDRIVEFRAMEWORK/SystemDefinitions.h" | ||||
| 
 | ||||
| 
 | ||||
| #ifndef DSP28335_CPUBase_H_ | ||||
| #define DSP28335_CPUBase_H_ | ||||
| 
 | ||||
| namespace DSP28335 | ||||
| { | ||||
| 
 | ||||
| struct CPUBaseSetup | ||||
| { | ||||
|     pGPIO_FUNCTION gpio_setup; | ||||
|     CPUBaseSetup(): | ||||
|         gpio_setup(0) | ||||
|     {} | ||||
| };//CPUBaseSetup
 | ||||
| 
 | ||||
| 
 | ||||
| class CPUBase | ||||
| { | ||||
| public: | ||||
|     enum mode_t {UNDEFINED=0, OPERATIONAL=1}; | ||||
| protected: | ||||
|     mode_t  m_mode; | ||||
|     bool m_status; | ||||
| public: | ||||
|     CPUBase(); | ||||
| public: | ||||
|     mode_t get_mode() const; | ||||
|     bool compare(mode_t mode) const; | ||||
|     //
 | ||||
| };// class
 | ||||
| 
 | ||||
| } /* namespace DSP28335 */ | ||||
| 
 | ||||
| #endif /* DSP28335_CPUBase_H_ */ | ||||
| @ -0,0 +1,89 @@ | ||||
| /*
 | ||||
|  * 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 */ | ||||
| @ -0,0 +1,48 @@ | ||||
| /*
 | ||||
|  * CPUTimers.cpp | ||||
|  * | ||||
|  *      Author: Aleksey Gerasimenko | ||||
|  *      gerasimenko.aleksey.n@gmail.com | ||||
|  */ | ||||
| 
 | ||||
| #include "DSP28335/CPUTimers.h" | ||||
| 
 | ||||
| namespace DSP28335 | ||||
| { | ||||
| //CONSTRUCTOR
 | ||||
| CPUTimers::CPUTimers(CPUTIMER_VARS& CPUTimer): | ||||
|         DSP28335::CPUBase(), | ||||
|         CPUTimer(CPUTimer) | ||||
| //
 | ||||
| {}//end CONSTRUCTOR
 | ||||
| 
 | ||||
| void CPUTimers::setup(const CPUTimersSetup& setup) | ||||
| { | ||||
|     if(m_mode == DSP28335::CPUBase::UNDEFINED) | ||||
|     { | ||||
|         InitCpuTimers(); | ||||
|         ConfigCpuTimer(&CPUTimer, setup.frequency, setup.period); // 1ms
 | ||||
|         //
 | ||||
|         m_mode = DSP28335::CPUBase::OPERATIONAL; | ||||
|         //
 | ||||
|     }//end if
 | ||||
|     //
 | ||||
| }//end
 | ||||
| //
 | ||||
| // #pragma CODE_SECTION("ramfuncs");
 | ||||
| void CPUTimers::start() | ||||
| { | ||||
|     //
 | ||||
|     CPUTimer.RegsAddr->TCR.bit.TSS = 0; | ||||
|     //
 | ||||
| }//end
 | ||||
| //
 | ||||
| // #pragma CODE_SECTION("ramfuncs");
 | ||||
| void CPUTimers::interrupt_ack() | ||||
| { | ||||
|     // Acknowledge this interrupt to receive more interrupts from group 1
 | ||||
|     PieCtrlRegs.PIEACK.all |= PIEACK_GROUP1; | ||||
|     //
 | ||||
| }//end
 | ||||
| //
 | ||||
| } /* namespace DSP28335 */ | ||||
| @ -0,0 +1,45 @@ | ||||
| /*
 | ||||
|  * CPUTimers.h | ||||
|  * | ||||
|  *      Author: Aleksey Gerasimenko | ||||
|  *      gerasimenko.aleksey.n@gmail.com | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| #include "F28335/DSP28x_Project.h" | ||||
| 
 | ||||
| #include "DSP28335/CPUBase.h" | ||||
| 
 | ||||
| #ifndef DSP28335_CPUTIMERS_H_ | ||||
| #define DSP28335_CPUTIMERS_H_ | ||||
| 
 | ||||
| namespace DSP28335 | ||||
| { | ||||
| 
 | ||||
| struct CPUTimersSetup | ||||
| { | ||||
|     float frequency; | ||||
|     float period; | ||||
|     CPUTimersSetup(): | ||||
|         frequency(150.0), | ||||
|         period(1000.0) | ||||
|     {} | ||||
| };//end CPUTimersSetup
 | ||||
| 
 | ||||
| 
 | ||||
| class CPUTimers: public DSP28335::CPUBase | ||||
| { | ||||
| public: | ||||
|     CPUTIMER_VARS& CPUTimer; | ||||
| public: | ||||
|     CPUTimers(CPUTIMER_VARS& CPUTimer); | ||||
|     void setup(const CPUTimersSetup& setup); | ||||
| public: | ||||
|     void start(); | ||||
|     void interrupt_ack(); | ||||
|     //
 | ||||
| };//end class CPUTimers
 | ||||
| 
 | ||||
| } /* namespace DSP28335 */ | ||||
| 
 | ||||
| #endif /* DSP28335_CPUTIMERS_H_ */ | ||||
| @ -0,0 +1,40 @@ | ||||
| /*
 | ||||
|  * 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 */ | ||||
| @ -0,0 +1,39 @@ | ||||
| /*
 | ||||
|  * 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_ */ | ||||
| @ -0,0 +1,40 @@ | ||||
| /*
 | ||||
|  * 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 */ | ||||
| @ -0,0 +1,38 @@ | ||||
| /*
 | ||||
|  * 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_ */ | ||||
| @ -0,0 +1,39 @@ | ||||
| /*
 | ||||
|  * 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 */ | ||||
| @ -0,0 +1,41 @@ | ||||
| /*
 | ||||
|  * 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_ */ | ||||
| @ -0,0 +1,768 @@ | ||||
| /*
 | ||||
|  * 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 */ | ||||
| @ -0,0 +1,150 @@ | ||||
| /*
 | ||||
|  * 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_ */ | ||||
| @ -0,0 +1,45 @@ | ||||
| /*
 | ||||
|  * 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 */ | ||||
| @ -0,0 +1,37 @@ | ||||
| /*
 | ||||
|  * 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_ */ | ||||
| @ -0,0 +1,142 @@ | ||||
| /*
 | ||||
|  * 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 */ | ||||
| @ -0,0 +1,60 @@ | ||||
| /*
 | ||||
|  * 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_ */ | ||||
| @ -0,0 +1,796 @@ | ||||
| /*
 | ||||
|  * GPIO.cpp | ||||
|  * | ||||
|  *      Author: Aleksey Gerasimenko | ||||
|  *      gerasimenko.aleksey.n@gmail.com | ||||
|  */ | ||||
| 
 | ||||
| #include "DSP28335/GPIO.h" | ||||
| 
 | ||||
| namespace DSP28335 | ||||
| { | ||||
| 
 | ||||
| //CONSTRUCTOR
 | ||||
| GPIO::GPIO(): | ||||
|         DSP28335::CPUBase() | ||||
| //
 | ||||
| {}//end CONSTRUCTOR
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| //EPWM
 | ||||
| // #pragma CODE_SECTION("ramfuncs");
 | ||||
| void GPIO::gpio_epwm_setup() | ||||
| { | ||||
|     EALLOW; | ||||
|     //
 | ||||
|     // General Synchronization Signal GENSYNC - EPWM1A - GPIO0
 | ||||
|     GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1;   // Configure GPIO0 as EPWM1A
 | ||||
|     GpioCtrlRegs.GPAPUD.bit.GPIO0 = 0;    // Enable pull-up on GPIO0 (EPWM1A)
 | ||||
|     GpioDataRegs.GPACLEAR.bit.GPIO0 = 1;  // Clear EPWM1A
 | ||||
|     GpioCtrlRegs.GPADIR.bit.GPIO0 = 0;    // Output - EPWM1A
 | ||||
|     //
 | ||||
|     // Phase A (U) Synchronization Signal - EPWM5B - GPIO9
 | ||||
|     GpioCtrlRegs.GPAMUX1.bit.GPIO9 = 1;   // Configure GPIO9 as EPWM5B
 | ||||
|     GpioCtrlRegs.GPAPUD.bit.GPIO9 = 0;    // Disable pull-up on GPIO9 (EPWM5B)
 | ||||
|     GpioDataRegs.GPACLEAR.bit.GPIO9 = 1;  // Clear EPWM5B
 | ||||
|     GpioCtrlRegs.GPADIR.bit.GPIO9 = 0;    // Output - EPWM5B
 | ||||
|     //
 | ||||
|     // Phase B (V) Synchronization Signal - EPWM6A - GPIO10
 | ||||
|     GpioCtrlRegs.GPAMUX1.bit.GPIO10 = 1;   // Configure GPIO10 as EPWM6A
 | ||||
|     GpioCtrlRegs.GPAPUD.bit.GPIO10 = 0;    // Disable pull-up on GPIO10 (EPWM6A)
 | ||||
|     GpioDataRegs.GPACLEAR.bit.GPIO10 = 1;  // Clear EPWM6A
 | ||||
|     GpioCtrlRegs.GPADIR.bit.GPIO10 = 0;    // Output - EPWM6A
 | ||||
|     //
 | ||||
|     // Phase C (W) Synchronization Signal - EPWM6B - GPIO11
 | ||||
|     GpioCtrlRegs.GPAMUX1.bit.GPIO11 = 1;   // Configure GPIO9 as EPWM6B
 | ||||
|     GpioCtrlRegs.GPAPUD.bit.GPIO11 = 0;    // Disable pull-up on GPIO11 (EPWM6B)
 | ||||
|     GpioDataRegs.GPACLEAR.bit.GPIO11 = 1;  // Clear EPWM6B
 | ||||
|     GpioCtrlRegs.GPADIR.bit.GPIO11 = 0;    // Output - EPWM6B
 | ||||
|     //
 | ||||
|     EDIS; | ||||
|     //
 | ||||
| }//end
 | ||||
| //
 | ||||
| 
 | ||||
| //CAN Inteface
 | ||||
| void GPIO::gpio_cana_setup() | ||||
| { | ||||
|     EALLOW; | ||||
|     //
 | ||||
|     // Enable CANA on GPIO18, CPIO19
 | ||||
|     // CANRXA - GPIO18
 | ||||
|     // CANTXA - GPIO19
 | ||||
|     //
 | ||||
|     GpioCtrlRegs.GPAPUD.bit.GPIO18 = 0;   // Enable pullup on GPIO18
 | ||||
|     GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 3;  // GPIO18 = CANRXA
 | ||||
|     GpioCtrlRegs.GPAQSEL2.bit.GPIO18 = 3; // Asynch input
 | ||||
|     GpioCtrlRegs.GPADIR.bit.GPIO18 = 0;   // GPIO18 = 0/1 - input/output
 | ||||
|     GpioDataRegs.GPASET.bit.GPIO18 = 0;   //
 | ||||
|     GpioDataRegs.GPACLEAR.bit.GPIO18 = 0; // Clear output
 | ||||
|     //
 | ||||
|     GpioCtrlRegs.GPAPUD.bit.GPIO19 = 0;   // Enable pullup on GPIO19
 | ||||
|     GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 3;  // GPIO19 = CANTXA
 | ||||
|     GpioCtrlRegs.GPAQSEL2.bit.GPIO19 = 0; // Asynch input
 | ||||
|     GpioCtrlRegs.GPADIR.bit.GPIO19 = 0;   // GPIO19 = 0/1 - input/output
 | ||||
|     GpioDataRegs.GPASET.bit.GPIO19 = 0;   //
 | ||||
|     GpioDataRegs.GPACLEAR.bit.GPIO19 = 0; // Clear output
 | ||||
|     //
 | ||||
|     EDIS; | ||||
|     //
 | ||||
| }//end
 | ||||
| //
 | ||||
| void GPIO::gpio_canb_setup() | ||||
| { | ||||
|     EALLOW; | ||||
|     //
 | ||||
|     // Enable CANB on GPIO16, CPIO17
 | ||||
|     // CANTXB - GPIO16
 | ||||
|     // CANRXB - GPIO17
 | ||||
|     //
 | ||||
|     GpioCtrlRegs.GPAPUD.bit.GPIO16 = 0;   // Enable pullup on GPIO16
 | ||||
|     GpioCtrlRegs.GPAMUX2.bit.GPIO16 = 2;  // GPIO16 = CANTXA
 | ||||
|     GpioCtrlRegs.GPAQSEL2.bit.GPIO16 = 0; // Asynch input
 | ||||
|     GpioCtrlRegs.GPADIR.bit.GPIO16 = 0;   // GPIO16 = 0/1 - input/output
 | ||||
|     GpioDataRegs.GPASET.bit.GPIO16 = 0;   //
 | ||||
|     GpioDataRegs.GPACLEAR.bit.GPIO16 = 0; // Clear output
 | ||||
|     //
 | ||||
|     GpioCtrlRegs.GPAPUD.bit.GPIO17 = 0;   // Enable pullup on GPIO17
 | ||||
|     GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 2;  // GPIO17 = CANRXA
 | ||||
|     GpioCtrlRegs.GPAQSEL2.bit.GPIO17 = 3; // Asynch input
 | ||||
|     GpioCtrlRegs.GPADIR.bit.GPIO17 = 0;   // GPIO17 = 0/1 - input/output
 | ||||
|     GpioDataRegs.GPASET.bit.GPIO17 = 0;   //
 | ||||
|     GpioDataRegs.GPACLEAR.bit.GPIO17 = 0; // Clear output
 | ||||
|     //
 | ||||
|     EDIS; | ||||
|     //
 | ||||
| }//end
 | ||||
| //
 | ||||
| 
 | ||||
| //SCIA
 | ||||
| void GPIO::gpio_scia_setup() | ||||
| {}//
 | ||||
| 
 | ||||
| //
 | ||||
| //RS485 - SCIB
 | ||||
| void GPIO::gpio_scib_setup() | ||||
| { | ||||
|     EALLOW; | ||||
|     //
 | ||||
|     // Enable SCI-B on GPIO21, GPIO22, GPIO23 - RS485
 | ||||
|     // SCIENBLB - GPIO21
 | ||||
|     // SCITXDB - GPIO22
 | ||||
|     // SCIRXDB - GPIO23
 | ||||
|     //
 | ||||
|     GpioCtrlRegs.GPAMUX2.bit.GPIO22 = 3;  // GPIO22 = SCITXDB
 | ||||
|     GpioCtrlRegs.GPAPUD.bit.GPIO22 = 0;   // Enable pullup on GPIO22
 | ||||
|     GpioCtrlRegs.GPAQSEL2.bit.GPIO22 = 0; // Asynch input
 | ||||
|     GpioCtrlRegs.GPADIR.bit.GPIO22 = 0;   // GPIO22 = 0/1 - input/output
 | ||||
|     //
 | ||||
|     GpioCtrlRegs.GPAMUX2.bit.GPIO23 = 3;  // GPIO23 = SCIRXDB
 | ||||
|     GpioCtrlRegs.GPAPUD.bit.GPIO23 = 0;   // Enable pullup on GPIO23
 | ||||
|     GpioCtrlRegs.GPAQSEL2.bit.GPIO23 = 3; // Asynch input
 | ||||
|     GpioCtrlRegs.GPADIR.bit.GPIO23 = 0;   // GPIO23 = 0/1 - input/output
 | ||||
|     //
 | ||||
|     EDIS; | ||||
|     //
 | ||||
| }//end
 | ||||
| //
 | ||||
| void GPIO::gpio_scib_re_de_setup() | ||||
| { | ||||
|     EALLOW; | ||||
|     //
 | ||||
|     // Enable SCI-B on GPIO21, GPIO22, GPIO23 - RS485
 | ||||
|     // SCIENBLB - GPIO21
 | ||||
|     // SCITXDB - GPIO22
 | ||||
|     // SCIRXDB - GPIO23
 | ||||
|     //
 | ||||
|     GpioCtrlRegs.GPAMUX2.bit.GPIO21 = 0;  // GPIO21 = DE-RS485
 | ||||
|     GpioCtrlRegs.GPAPUD.bit.GPIO21 = 0;   // Enable pullup on GPIO21
 | ||||
|     GpioCtrlRegs.GPADIR.bit.GPIO21 = 1;   // GPIO21 = 0/1 - input/output
 | ||||
|     GpioDataRegs.GPASET.bit.GPIO21 = 0;     //
 | ||||
|     GpioDataRegs.GPACLEAR.bit.GPIO21 = 0;   // Clear output
 | ||||
|     //
 | ||||
|     EDIS; | ||||
|     //
 | ||||
| }//end
 | ||||
| //
 | ||||
| // #pragma CODE_SECTION("ramfuncs");
 | ||||
| void GPIO::gpio_scib_re_de_set() | ||||
| { | ||||
|     //set GPIO21
 | ||||
|     GpioDataRegs.GPASET.bit.GPIO21 = 1; | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| // #pragma CODE_SECTION("ramfuncs");
 | ||||
| void GPIO::gpio_scib_re_de_clear() | ||||
| { | ||||
|     //clear GPIO21
 | ||||
|     GpioDataRegs.GPACLEAR.bit.GPIO21 = 1; | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| //RS485 - SCIC
 | ||||
| void GPIO::gpio_scic_setup() | ||||
| { | ||||
|     EALLOW; | ||||
|     //
 | ||||
|     // Enable SCI-C on GPIO61, GPIO62, GPIO63 - RS485
 | ||||
|     // SCIENBLC - GPIO61
 | ||||
|     // SCIRXDC - GPIO62
 | ||||
|     // SCITXDC - GPIO63
 | ||||
|     //
 | ||||
|     GpioCtrlRegs.GPBMUX2.bit.GPIO61 = 0;  // GPIO61 = DE-RS485
 | ||||
|     GpioCtrlRegs.GPBPUD.bit.GPIO61 = 0;   // Enable pullup on GPIO61
 | ||||
|     GpioCtrlRegs.GPBDIR.bit.GPIO61 = 1;   // GPIO61 = 0/1 - input/output
 | ||||
|     GpioDataRegs.GPBSET.bit.GPIO61 = 0;   //
 | ||||
|     GpioDataRegs.GPBCLEAR.bit.GPIO61 = 0; // Clear output
 | ||||
|     //
 | ||||
|     GpioCtrlRegs.GPBMUX2.bit.GPIO62 = 1;  // GPIO62 = SCIRXDC
 | ||||
|     GpioCtrlRegs.GPBPUD.bit.GPIO62 = 0;   // Enable pullup on GPIO62
 | ||||
|     GpioCtrlRegs.GPBQSEL2.bit.GPIO62 = 3; // Asynch input
 | ||||
|     GpioCtrlRegs.GPBDIR.bit.GPIO62 = 0;   // GPIO62 = 0/1 - input/output
 | ||||
|     //
 | ||||
|     GpioCtrlRegs.GPBMUX2.bit.GPIO63 = 1;  // GPIO63 = SCITXDC
 | ||||
|     GpioCtrlRegs.GPBPUD.bit.GPIO63 = 0;   // Enable pullup on GPIO63
 | ||||
|     GpioCtrlRegs.GPBQSEL2.bit.GPIO63 = 0; // Asynch input
 | ||||
|     GpioCtrlRegs.GPBDIR.bit.GPIO63 = 0;   // GPIO63 = 0/1 - input/output
 | ||||
|     //
 | ||||
|     EDIS; | ||||
|     //
 | ||||
| }//end
 | ||||
| 
 | ||||
| 
 | ||||
| //FRAM - SPIA
 | ||||
| void GPIO::gpio_spia_setup() | ||||
| { | ||||
|     EALLOW; | ||||
|     //
 | ||||
|     //GPIO54 - SPISIMOA
 | ||||
|     //GPIO55 - SPISOMIA
 | ||||
|     //GPIO56 - SPICLKA
 | ||||
|     //GPIO57 - SPISTEA
 | ||||
|     //GPIO58 - SPISWP - Write Protect
 | ||||
|     //
 | ||||
|     GpioCtrlRegs.GPBMUX2.bit.GPIO54 = 1;    // Configure GPIO54 as SPISIMOA
 | ||||
|     GpioCtrlRegs.GPBPUD.bit.GPIO54 = 0;     // Enable pull-up on GPIO54 (SPISIMOA)
 | ||||
|     GpioCtrlRegs.GPBQSEL2.bit.GPIO54 = 3;   // Asynch input GPIO54 (SPISIMOA)
 | ||||
|     GpioCtrlRegs.GPBDIR.bit.GPIO54 = 1;     // GPIO54 = 0/1 - input/output
 | ||||
|     //
 | ||||
|     GpioCtrlRegs.GPBMUX2.bit.GPIO55 = 1;    // Configure GPIO55 as SPISOMIA
 | ||||
|     GpioCtrlRegs.GPBPUD.bit.GPIO55 = 0;     // Enable pull-up on GPIO55 (SPISOMIA)
 | ||||
|     GpioCtrlRegs.GPBQSEL2.bit.GPIO55 = 3;   // Asynch input GPIO55 (SPISOMIA)
 | ||||
|     GpioCtrlRegs.GPBDIR.bit.GPIO55 = 0;     // GPIO55 = 0/1 - input/output
 | ||||
|     //
 | ||||
|     GpioCtrlRegs.GPBMUX2.bit.GPIO56 = 1;    // Configure GPIO56 as SPICLKA
 | ||||
|     GpioCtrlRegs.GPBPUD.bit.GPIO56 = 0;     // Enable pull-up on GPIO56 (SPICLKA)
 | ||||
|     GpioCtrlRegs.GPBQSEL2.bit.GPIO56 = 3;   // Asynch input GPIO56 (SPICLKA)
 | ||||
|     GpioCtrlRegs.GPBDIR.bit.GPIO56 = 1;     // GPIO56 = 0/1 - input/output
 | ||||
|     //
 | ||||
|     GpioCtrlRegs.GPBMUX2.bit.GPIO57 = 1;    // Configure GPIO57 as SPISTEA
 | ||||
|     GpioCtrlRegs.GPBPUD.bit.GPIO57 = 0;     // Enable pull-up on GPIO57 (SPISTEA)
 | ||||
|     GpioCtrlRegs.GPBQSEL2.bit.GPIO57 = 3;   // Asynch input GPIO57 (SPISTEA)
 | ||||
|     GpioCtrlRegs.GPBDIR.bit.GPIO57 = 1;     // GPIO57 = 0/1 - input/output
 | ||||
|     //
 | ||||
|     GpioCtrlRegs.GPBMUX2.bit.GPIO58 = 0;    // Configure GPIO58 as GPIO
 | ||||
|     GpioCtrlRegs.GPBPUD.bit.GPIO58 = 0;     // Enable pull-up on GPIO58
 | ||||
|     GpioCtrlRegs.GPBQSEL2.bit.GPIO58 = 3;   // Asynch input GPIO58
 | ||||
|     GpioCtrlRegs.GPBDIR.bit.GPIO58 = 1;     // GPIO58 = 0/1 - input/output
 | ||||
|     //
 | ||||
|     EDIS; | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| void GPIO::gpio_spia_write_protect_set() | ||||
| { | ||||
|     GpioDataRegs.GPBSET.bit.GPIO58 = 1; // Set output
 | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| void GPIO::gpio_spia_write_protect_clear() | ||||
| { | ||||
|     GpioDataRegs.GPBCLEAR.bit.GPIO58 = 1; // Set output
 | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| //
 | ||||
| void GPIO::gpio_eqep_setup() | ||||
| { | ||||
|     EALLOW; | ||||
|     //
 | ||||
|     // Enable eQEP on GPIO50, CPIO51
 | ||||
|     // EQEP1A - GPIO50
 | ||||
|     // EQEP1B - GPIO51
 | ||||
|     //
 | ||||
|     GpioCtrlRegs.GPBPUD.bit.GPIO50 = 0;   // Enable pullup on GPIO50
 | ||||
|     GpioCtrlRegs.GPBMUX2.bit.GPIO50 = 1;  // GPIO50 = EQEP1A
 | ||||
|     GpioCtrlRegs.GPBQSEL2.bit.GPIO50 = 0; // Asynch input
 | ||||
|     GpioCtrlRegs.GPBDIR.bit.GPIO50 = 0;   // GPIO50 = 0/1 - input/output
 | ||||
|     GpioDataRegs.GPBSET.bit.GPIO50 = 1;   //
 | ||||
|     GpioDataRegs.GPBCLEAR.bit.GPIO50 = 0; // Clear output
 | ||||
|     //
 | ||||
|     GpioCtrlRegs.GPBPUD.bit.GPIO51 = 0;   // Enable pullup on GPIO51
 | ||||
|     GpioCtrlRegs.GPBMUX2.bit.GPIO51 = 1;  // GPIO51 = EQEP1B
 | ||||
|     GpioCtrlRegs.GPBQSEL2.bit.GPIO51 = 0; // Asynch input
 | ||||
|     GpioCtrlRegs.GPBDIR.bit.GPIO51 = 0;   // GPIO51 = 0/1 - input/output
 | ||||
|     GpioDataRegs.GPBSET.bit.GPIO51 = 1;   //
 | ||||
|     GpioDataRegs.GPBCLEAR.bit.GPIO51 = 0; // Clear output
 | ||||
|     //
 | ||||
|     EDIS; | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| 
 | ||||
| void GPIO::gpio_xintf_16bit_setup() | ||||
| { | ||||
|     EALLOW; | ||||
|     //
 | ||||
|     // XINF - external interface
 | ||||
|     //
 | ||||
|     // GPIO34 - XREADY
 | ||||
|     GpioCtrlRegs.GPBPUD.bit.GPIO34 = 0;   // Enable pullup on GPIO34
 | ||||
|     GpioCtrlRegs.GPBDIR.bit.GPIO34 = 0;   // GPIO34 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPBQSEL1.bit.GPIO34 = 0; // Asynch input
 | ||||
|     GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 3;  // GPIO34 = XREADY
 | ||||
|     GpioDataRegs.GPBSET.bit.GPIO34 = 0;   //
 | ||||
|     GpioDataRegs.GPBCLEAR.bit.GPIO34 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO35 - XR/nW
 | ||||
|     GpioCtrlRegs.GPBPUD.bit.GPIO35 = 0;   // Enable pullup on GPIO35
 | ||||
|     GpioCtrlRegs.GPBDIR.bit.GPIO35 = 1;   // GPIO35 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPBQSEL1.bit.GPIO35 = 0; // Asynch input
 | ||||
|     GpioCtrlRegs.GPBMUX1.bit.GPIO35 = 3;  // GPIO35 = XR/nW
 | ||||
|     GpioDataRegs.GPBSET.bit.GPIO35 = 0;   //
 | ||||
|     GpioDataRegs.GPBCLEAR.bit.GPIO35 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO36 - nXZCS0
 | ||||
|     GpioCtrlRegs.GPBPUD.bit.GPIO36 = 0;   // Enable pullup on GPIO36
 | ||||
|     GpioCtrlRegs.GPBDIR.bit.GPIO36 = 1;   // GPIO36 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPBQSEL1.bit.GPIO36 = 0; // Asynch input
 | ||||
|     GpioCtrlRegs.GPBMUX1.bit.GPIO36 = 3;  // GPIO36 = nXZCS0
 | ||||
|     GpioDataRegs.GPBSET.bit.GPIO36 = 0;   //
 | ||||
|     GpioDataRegs.GPBCLEAR.bit.GPIO36 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO28 - nXZCS6
 | ||||
|     GpioCtrlRegs.GPAPUD.bit.GPIO28 = 0;   // Enable pullup on GPIO28
 | ||||
|     GpioCtrlRegs.GPADIR.bit.GPIO28 = 1;   // GPIO28 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPAQSEL2.bit.GPIO28 = 0; // Asynch input
 | ||||
|     GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 3;  // GPIO28 = nXZCS6
 | ||||
|     GpioDataRegs.GPASET.bit.GPIO28 = 0;   //
 | ||||
|     GpioDataRegs.GPACLEAR.bit.GPIO28 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO37 - nXZCS7
 | ||||
|     GpioCtrlRegs.GPBPUD.bit.GPIO37 = 0;   // Enable pullup on GPIO37
 | ||||
|     GpioCtrlRegs.GPBDIR.bit.GPIO37 = 1;   // GPIO37 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPBQSEL1.bit.GPIO37 = 0; // Asynch input
 | ||||
|     GpioCtrlRegs.GPBMUX1.bit.GPIO37 = 3;  // GPIO37 = nXZCS7
 | ||||
|     GpioDataRegs.GPBSET.bit.GPIO37 = 0;   //
 | ||||
|     GpioDataRegs.GPBCLEAR.bit.GPIO37 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO38 - nXWE0
 | ||||
|     GpioCtrlRegs.GPBPUD.bit.GPIO38 = 0;   // Enable pullup on GPIO38
 | ||||
|     GpioCtrlRegs.GPBDIR.bit.GPIO38 = 1;   // GPIO38 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPBQSEL1.bit.GPIO38 = 0; // Asynch input
 | ||||
|     GpioCtrlRegs.GPBMUX1.bit.GPIO38 = 3;  // GPIO38 = nXWE0
 | ||||
|     GpioDataRegs.GPBSET.bit.GPIO38 = 0;   //
 | ||||
|     GpioDataRegs.GPBCLEAR.bit.GPIO38 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO39 - XA16
 | ||||
|     GpioCtrlRegs.GPBPUD.bit.GPIO39 = 0;   // Enable pullup on GPIO39
 | ||||
|     GpioCtrlRegs.GPBDIR.bit.GPIO39 = 0;   // GPIO39 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPBQSEL1.bit.GPIO39 = 0; // Asynch input
 | ||||
|     GpioCtrlRegs.GPBMUX1.bit.GPIO39 = 3;  // GPIO39 = XA16
 | ||||
|     GpioDataRegs.GPBSET.bit.GPIO39 = 0;   //
 | ||||
|     GpioDataRegs.GPBCLEAR.bit.GPIO39 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO40 - XA0
 | ||||
|     GpioCtrlRegs.GPBPUD.bit.GPIO40 = 0;   // Enable pullup on GPIO40
 | ||||
|     GpioCtrlRegs.GPBDIR.bit.GPIO40 = 0;   // GPIO40 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPBQSEL1.bit.GPIO40 = 0; // Asynch input
 | ||||
|     GpioCtrlRegs.GPBMUX1.bit.GPIO40 = 3;  // GPIO40 = XA0
 | ||||
|     GpioDataRegs.GPBSET.bit.GPIO40 = 0;   //
 | ||||
|     GpioDataRegs.GPBCLEAR.bit.GPIO40 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO41 - XA1
 | ||||
|     GpioCtrlRegs.GPBPUD.bit.GPIO41 = 0;   // Enable pullup on GPIO41
 | ||||
|     GpioCtrlRegs.GPBDIR.bit.GPIO41 = 0;   // GPIO41 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPBQSEL1.bit.GPIO41 = 0; // Asynch input
 | ||||
|     GpioCtrlRegs.GPBMUX1.bit.GPIO41 = 3;  // GPIO41 = XA1
 | ||||
|     GpioDataRegs.GPBSET.bit.GPIO41 = 0;   //
 | ||||
|     GpioDataRegs.GPBCLEAR.bit.GPIO41 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO42 - XA2
 | ||||
|     GpioCtrlRegs.GPBPUD.bit.GPIO42 = 0;   // Enable pullup on GPIO42
 | ||||
|     GpioCtrlRegs.GPBDIR.bit.GPIO42 = 0;   // GPIO42 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPBQSEL1.bit.GPIO42 = 0; // Asynch input
 | ||||
|     GpioCtrlRegs.GPBMUX1.bit.GPIO42 = 3;  // GPIO42 = XA2
 | ||||
|     GpioDataRegs.GPBSET.bit.GPIO42 = 0;   //
 | ||||
|     GpioDataRegs.GPBCLEAR.bit.GPIO42 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO43 - XA3
 | ||||
|     GpioCtrlRegs.GPBPUD.bit.GPIO43 = 0;   // Enable pullup on GPIO43
 | ||||
|     GpioCtrlRegs.GPBDIR.bit.GPIO43 = 0;   // GPIO43 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPBQSEL1.bit.GPIO43 = 0; // Asynch input
 | ||||
|     GpioCtrlRegs.GPBMUX1.bit.GPIO43 = 3;  // GPIO43 = XA3
 | ||||
|     GpioDataRegs.GPBSET.bit.GPIO43 = 0;   //
 | ||||
|     GpioDataRegs.GPBCLEAR.bit.GPIO43 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO44 - XA4
 | ||||
|     GpioCtrlRegs.GPBPUD.bit.GPIO44 = 0;   // Enable pullup on GPIO44
 | ||||
|     GpioCtrlRegs.GPBDIR.bit.GPIO44 = 0;   // GPIO44 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPBQSEL1.bit.GPIO44 = 0; // Asynch input
 | ||||
|     GpioCtrlRegs.GPBMUX1.bit.GPIO44 = 3;  // GPIO44 = XA4
 | ||||
|     GpioDataRegs.GPBSET.bit.GPIO44 = 0;   //
 | ||||
|     GpioDataRegs.GPBCLEAR.bit.GPIO44 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO45 - XA5
 | ||||
|     GpioCtrlRegs.GPBPUD.bit.GPIO45 = 0;   // Enable pullup on GPIO45
 | ||||
|     GpioCtrlRegs.GPBDIR.bit.GPIO45 = 0;   // GPIO45 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPBQSEL1.bit.GPIO45 = 0; // Asynch input
 | ||||
|     GpioCtrlRegs.GPBMUX1.bit.GPIO45 = 3;  // GPIO45 = XA5
 | ||||
|     GpioDataRegs.GPBSET.bit.GPIO45 = 0;   //
 | ||||
|     GpioDataRegs.GPBCLEAR.bit.GPIO45 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO46 - XA6
 | ||||
|     GpioCtrlRegs.GPBPUD.bit.GPIO46 = 0;   // Enable pullup on GPIO46
 | ||||
|     GpioCtrlRegs.GPBDIR.bit.GPIO46 = 0;   // GPIO46 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPBQSEL1.bit.GPIO46 = 0; // Asynch input
 | ||||
|     GpioCtrlRegs.GPBMUX1.bit.GPIO46 = 3;  // GPIO46 = XA6
 | ||||
|     GpioDataRegs.GPBSET.bit.GPIO46 = 0;   //
 | ||||
|     GpioDataRegs.GPBCLEAR.bit.GPIO46 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO47 - XA7
 | ||||
|     GpioCtrlRegs.GPBPUD.bit.GPIO47 = 0;   // Enable pullup on GPIO47
 | ||||
|     GpioCtrlRegs.GPBDIR.bit.GPIO47 = 0;   // GPIO47 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPBQSEL1.bit.GPIO47 = 0; // Asynch input
 | ||||
|     GpioCtrlRegs.GPBMUX1.bit.GPIO47 = 3;  // GPIO47 = XA7
 | ||||
|     GpioDataRegs.GPBSET.bit.GPIO47 = 0;   //
 | ||||
|     GpioDataRegs.GPBCLEAR.bit.GPIO47 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO80 - XA8
 | ||||
|     GpioCtrlRegs.GPCPUD.bit.GPIO80 = 0;   // Enable pullup on GPIO80
 | ||||
|     GpioCtrlRegs.GPCDIR.bit.GPIO80 = 0;   // GPIO80 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPCMUX2.bit.GPIO80 = 2;  // GPIO80 = XA8
 | ||||
|     GpioDataRegs.GPCSET.bit.GPIO80 = 0;   //
 | ||||
|     GpioDataRegs.GPCCLEAR.bit.GPIO80 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO81 - XA9
 | ||||
|     GpioCtrlRegs.GPCPUD.bit.GPIO81 = 0;   // Enable pullup on GPIO81
 | ||||
|     GpioCtrlRegs.GPCDIR.bit.GPIO81 = 0;   // GPIO81 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPCMUX2.bit.GPIO81 = 2;  // GPIO81 = XA9
 | ||||
|     GpioDataRegs.GPCSET.bit.GPIO81 = 0;   //
 | ||||
|     GpioDataRegs.GPCCLEAR.bit.GPIO81 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO82 - XA10
 | ||||
|     GpioCtrlRegs.GPCPUD.bit.GPIO82 = 0;   // Enable pullup on GPIO82
 | ||||
|     GpioCtrlRegs.GPCDIR.bit.GPIO82 = 0;   // GPIO82 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPCMUX2.bit.GPIO82 = 2;  // GPIO82 = XA10
 | ||||
|     GpioDataRegs.GPCSET.bit.GPIO82 = 0;   //
 | ||||
|     GpioDataRegs.GPCCLEAR.bit.GPIO82 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO83 - XA11
 | ||||
|     GpioCtrlRegs.GPCPUD.bit.GPIO83 = 0;   // Enable pullup on GPIO83
 | ||||
|     GpioCtrlRegs.GPCDIR.bit.GPIO83 = 0;   // GPIO83 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPCMUX2.bit.GPIO83 = 2;  // GPIO83 = XA11
 | ||||
|     GpioDataRegs.GPCSET.bit.GPIO83 = 0;   //
 | ||||
|     GpioDataRegs.GPCCLEAR.bit.GPIO83 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO84 - XA12
 | ||||
|     GpioCtrlRegs.GPCPUD.bit.GPIO84 = 0;   // Enable pullup on GPIO84
 | ||||
|     GpioCtrlRegs.GPCDIR.bit.GPIO84 = 0;   // GPIO84 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPCMUX2.bit.GPIO84 = 2;  // GPIO84 = XA12
 | ||||
|     GpioDataRegs.GPCSET.bit.GPIO84 = 0;   //
 | ||||
|     GpioDataRegs.GPCCLEAR.bit.GPIO84 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO85 - XA13
 | ||||
|     GpioCtrlRegs.GPCPUD.bit.GPIO85 = 0;   // Enable pullup on GPIO85
 | ||||
|     GpioCtrlRegs.GPCDIR.bit.GPIO85 = 0;   // GPIO85 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPCMUX2.bit.GPIO85 = 2;  // GPIO85 = XA13
 | ||||
|     GpioDataRegs.GPCSET.bit.GPIO85 = 0;   //
 | ||||
|     GpioDataRegs.GPCCLEAR.bit.GPIO85 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO86 - XA14
 | ||||
|     GpioCtrlRegs.GPCPUD.bit.GPIO86 = 0;   // Enable pullup on GPIO86
 | ||||
|     GpioCtrlRegs.GPCDIR.bit.GPIO86 = 0;   // GPIO86 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPCMUX2.bit.GPIO86 = 2;  // GPIO86 = XA14
 | ||||
|     GpioDataRegs.GPCSET.bit.GPIO86 = 0;   //
 | ||||
|     GpioDataRegs.GPCCLEAR.bit.GPIO86 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO87 - XA15
 | ||||
|     GpioCtrlRegs.GPCPUD.bit.GPIO87 = 0;   // Enable pullup on GPIO87
 | ||||
|     GpioCtrlRegs.GPCDIR.bit.GPIO87 = 0;   // GPIO87 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPCMUX2.bit.GPIO87 = 2;  // GPIO87 = XA15
 | ||||
|     GpioDataRegs.GPCSET.bit.GPIO87 = 0;   //
 | ||||
|     GpioDataRegs.GPCCLEAR.bit.GPIO87 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO39 - XA16
 | ||||
|     GpioCtrlRegs.GPBPUD.bit.GPIO39 = 0;   // Enable pullup on GPIO39
 | ||||
|     GpioCtrlRegs.GPBDIR.bit.GPIO39 = 0;   // GPIO39 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPBMUX1.bit.GPIO39 = 3;  // GPIO39 = XA16
 | ||||
|     GpioDataRegs.GPBSET.bit.GPIO39 = 0;   //
 | ||||
|     GpioDataRegs.GPBCLEAR.bit.GPIO39 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO31 - XA17
 | ||||
|     GpioCtrlRegs.GPAPUD.bit.GPIO31 = 0;   // Enable pullup on GPIO31
 | ||||
|     GpioCtrlRegs.GPADIR.bit.GPIO31 = 0;   // GPIO31 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPAMUX2.bit.GPIO31 = 3;  // GPIO31 = XA17
 | ||||
|     GpioDataRegs.GPASET.bit.GPIO31 = 0;   //
 | ||||
|     GpioDataRegs.GPACLEAR.bit.GPIO31 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO30 - XA18
 | ||||
|     GpioCtrlRegs.GPAPUD.bit.GPIO30 = 0;   // Enable pullup on GPIO30
 | ||||
|     GpioCtrlRegs.GPADIR.bit.GPIO30 = 0;   // GPIO30 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPAMUX2.bit.GPIO30 = 3;  // GPIO30 = XA18
 | ||||
|     GpioDataRegs.GPASET.bit.GPIO30 = 0;   //
 | ||||
|     GpioDataRegs.GPACLEAR.bit.GPIO30 = 0; // Clear output
 | ||||
| 
 | ||||
|     // GPIO29 - XA19
 | ||||
|     GpioCtrlRegs.GPAPUD.bit.GPIO29 = 0;   // Enable pullup on GPIO29
 | ||||
|     GpioCtrlRegs.GPADIR.bit.GPIO29 = 0;   // GPIO29 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 3;  // GPIO29 = XA19
 | ||||
|     GpioDataRegs.GPASET.bit.GPIO29 = 0;   //
 | ||||
|     GpioDataRegs.GPACLEAR.bit.GPIO29 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO64 - XD15
 | ||||
|     GpioCtrlRegs.GPCPUD.bit.GPIO64 = 0;   // Enable pullup on GPIO64
 | ||||
|     GpioCtrlRegs.GPCDIR.bit.GPIO64 = 0;   // GPIO64 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPCMUX1.bit.GPIO64 = 2;  // GPIO64 = XD
 | ||||
|     GpioDataRegs.GPCSET.bit.GPIO64 = 0;   //
 | ||||
|     GpioDataRegs.GPCCLEAR.bit.GPIO64 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO65 - XD14
 | ||||
|     GpioCtrlRegs.GPCPUD.bit.GPIO65 = 0;   // Enable pullup on GPIO65
 | ||||
|     GpioCtrlRegs.GPCDIR.bit.GPIO65 = 0;   // GPIO65 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPCMUX1.bit.GPIO65 = 2;  // GPIO65 = XD14
 | ||||
|     GpioDataRegs.GPCSET.bit.GPIO65 = 0;   //
 | ||||
|     GpioDataRegs.GPCCLEAR.bit.GPIO65 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO66 - XD13
 | ||||
|     GpioCtrlRegs.GPCPUD.bit.GPIO66 = 0;   // Enable pullup on GPIO66
 | ||||
|     GpioCtrlRegs.GPCDIR.bit.GPIO66 = 0;   // GPIO66 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPCMUX1.bit.GPIO66 = 2;  // GPIO66 = XD13
 | ||||
|     GpioDataRegs.GPCSET.bit.GPIO66 = 0;   //
 | ||||
|     GpioDataRegs.GPCCLEAR.bit.GPIO66 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO67 - XD12
 | ||||
|     GpioCtrlRegs.GPCPUD.bit.GPIO67 = 0;   // Enable pullup on GPIO67
 | ||||
|     GpioCtrlRegs.GPCDIR.bit.GPIO67 = 0;   // GPIO67 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPCMUX1.bit.GPIO67 = 2;  // GPIO67 = XD12
 | ||||
|     GpioDataRegs.GPCSET.bit.GPIO67 = 0;   //
 | ||||
|     GpioDataRegs.GPCCLEAR.bit.GPIO67 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO68 - XD11
 | ||||
|     GpioCtrlRegs.GPCPUD.bit.GPIO68 = 0;   // Enable pullup on GPIO68
 | ||||
|     GpioCtrlRegs.GPCDIR.bit.GPIO68 = 0;   // GPIO68 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPCMUX1.bit.GPIO68 = 2;  // GPIO68 = XD11
 | ||||
|     GpioDataRegs.GPCSET.bit.GPIO68 = 0;   //
 | ||||
|     GpioDataRegs.GPCCLEAR.bit.GPIO68 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO69 - XD10
 | ||||
|     GpioCtrlRegs.GPCPUD.bit.GPIO69 = 0;   // Enable pullup on GPIO69
 | ||||
|     GpioCtrlRegs.GPCDIR.bit.GPIO69 = 0;   // GPIO69 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPCMUX1.bit.GPIO69 = 2;  // GPIO69 = XD10
 | ||||
|     GpioDataRegs.GPCSET.bit.GPIO69 = 0;   //
 | ||||
|     GpioDataRegs.GPCCLEAR.bit.GPIO69 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO70 - XD9
 | ||||
|     GpioCtrlRegs.GPCPUD.bit.GPIO70 = 0;   // Enable pullup on GPIO70
 | ||||
|     GpioCtrlRegs.GPCDIR.bit.GPIO70 = 0;   // GPIO70 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPCMUX1.bit.GPIO70 = 2;  // GPIO70 = XD9
 | ||||
|     GpioDataRegs.GPCSET.bit.GPIO70 = 0;   //
 | ||||
|     GpioDataRegs.GPCCLEAR.bit.GPIO70 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO71 - XD8
 | ||||
|     GpioCtrlRegs.GPCPUD.bit.GPIO71 = 0;   // Enable pullup on GPIO71
 | ||||
|     GpioCtrlRegs.GPCDIR.bit.GPIO71 = 0;   // GPIO71 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPCMUX1.bit.GPIO71 = 2;  // GPIO71 = XD8
 | ||||
|     GpioDataRegs.GPCSET.bit.GPIO71 = 0;   //
 | ||||
|     GpioDataRegs.GPCCLEAR.bit.GPIO71 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO72 - XD7
 | ||||
|     GpioCtrlRegs.GPCPUD.bit.GPIO72 = 0;   // Enable pullup on GPIO72
 | ||||
|     GpioCtrlRegs.GPCDIR.bit.GPIO72 = 0;   // GPIO72 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPCMUX1.bit.GPIO72 = 2;  // GPIO72 = XD7
 | ||||
|     GpioDataRegs.GPCSET.bit.GPIO72 = 0;   //
 | ||||
|     GpioDataRegs.GPCCLEAR.bit.GPIO72 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO73 - XD6
 | ||||
|     GpioCtrlRegs.GPCPUD.bit.GPIO73 = 0;   // Enable pullup on GPIO73
 | ||||
|     GpioCtrlRegs.GPCDIR.bit.GPIO73 = 0;   // GPIO73 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPCMUX1.bit.GPIO73 = 2;  // GPIO73 = XD6
 | ||||
|     GpioDataRegs.GPCSET.bit.GPIO73 = 0;   //
 | ||||
|     GpioDataRegs.GPCCLEAR.bit.GPIO73 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO74 - XD5
 | ||||
|     GpioCtrlRegs.GPCPUD.bit.GPIO74 = 0;   // Enable pullup on GPIO74
 | ||||
|     GpioCtrlRegs.GPCDIR.bit.GPIO74 = 0;   // GPIO74 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPCMUX1.bit.GPIO74 = 2;  // GPIO74 = XD5
 | ||||
|     GpioDataRegs.GPCSET.bit.GPIO74 = 0;   //
 | ||||
|     GpioDataRegs.GPCCLEAR.bit.GPIO74 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO75 - XD4
 | ||||
|     GpioCtrlRegs.GPCPUD.bit.GPIO75 = 0;   // Enable pullup on GPIO75
 | ||||
|     GpioCtrlRegs.GPCDIR.bit.GPIO75 = 0;   // GPIO75 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPCMUX1.bit.GPIO75 = 2;  // GPIO75 = XD4
 | ||||
|     GpioDataRegs.GPCSET.bit.GPIO75 = 0;   //
 | ||||
|     GpioDataRegs.GPCCLEAR.bit.GPIO75 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO76 - XD3
 | ||||
|     GpioCtrlRegs.GPCPUD.bit.GPIO76 = 0;   // Enable pullup on GPIO76
 | ||||
|     GpioCtrlRegs.GPCDIR.bit.GPIO76 = 0;   // GPIO76 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPCMUX1.bit.GPIO76 = 2;  // GPIO76 = XD3
 | ||||
|     GpioDataRegs.GPCSET.bit.GPIO76 = 0;   //
 | ||||
|     GpioDataRegs.GPCCLEAR.bit.GPIO76 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO77 - XD2
 | ||||
|     GpioCtrlRegs.GPCPUD.bit.GPIO77 = 0;   // Enable pullup on GPIO77
 | ||||
|     GpioCtrlRegs.GPCDIR.bit.GPIO77 = 0;   // GPIO77 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPCMUX1.bit.GPIO77 = 2;  // GPIO77 = XD2
 | ||||
|     GpioDataRegs.GPCSET.bit.GPIO77 = 0;   //
 | ||||
|     GpioDataRegs.GPCCLEAR.bit.GPIO77 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO78 - XD1
 | ||||
|     GpioCtrlRegs.GPCPUD.bit.GPIO78 = 0;   // Enable pullup on GPIO78
 | ||||
|     GpioCtrlRegs.GPCDIR.bit.GPIO78 = 0;   // GPIO78 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPCMUX1.bit.GPIO78 = 2;  // GPIO78 = XD1
 | ||||
|     GpioDataRegs.GPCSET.bit.GPIO78 = 0;   //
 | ||||
|     GpioDataRegs.GPCCLEAR.bit.GPIO78 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO79 - XD0
 | ||||
|     GpioCtrlRegs.GPCPUD.bit.GPIO79 = 0;   // Enable pullup on GPIO79
 | ||||
|     GpioCtrlRegs.GPCDIR.bit.GPIO79 = 0;   // GPIO79 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPCMUX1.bit.GPIO79 = 2;  // GPIO79 = XD0
 | ||||
|     GpioDataRegs.GPCSET.bit.GPIO79 = 0;   //
 | ||||
|     GpioDataRegs.GPCCLEAR.bit.GPIO79 = 0; // Clear output
 | ||||
|     //
 | ||||
|     EDIS; | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| void GPIO::gpio_xintf_32bit_setup() | ||||
| {}//
 | ||||
| //
 | ||||
| 
 | ||||
| 
 | ||||
| void GPIO::gpio_dicrete_outputs_setup() | ||||
| { | ||||
|     EALLOW; | ||||
|     //
 | ||||
|     // GPIO1
 | ||||
|     GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0;  // GPIO1
 | ||||
|     GpioCtrlRegs.GPAPUD.bit.GPIO1 = 1;   // Enable pullup on GPIO1
 | ||||
|     GpioCtrlRegs.GPADIR.bit.GPIO1 = 1;   // GPIO1 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPAQSEL1.bit.GPIO1 = 0; // Asynch input
 | ||||
|     GpioDataRegs.GPASET.bit.GPIO1 = 0;   //
 | ||||
|     GpioDataRegs.GPACLEAR.bit.GPIO1 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO2
 | ||||
|     GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 0;  // GPIO2
 | ||||
|     GpioCtrlRegs.GPAPUD.bit.GPIO2 = 1;   // Enable pullup on GPIO2
 | ||||
|     GpioCtrlRegs.GPADIR.bit.GPIO2 = 1;   // GPIO2 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPAQSEL1.bit.GPIO2 = 0; // Asynch input
 | ||||
|     GpioDataRegs.GPASET.bit.GPIO2 = 0;   //
 | ||||
|     GpioDataRegs.GPACLEAR.bit.GPIO2 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO3
 | ||||
|     GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 0;  // GPIO3
 | ||||
|     GpioCtrlRegs.GPAPUD.bit.GPIO3 = 1;   // Enable pullup on GPIO3
 | ||||
|     GpioCtrlRegs.GPADIR.bit.GPIO3 = 1;   // GPIO3 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPAQSEL1.bit.GPIO3 = 0; // Asynch input
 | ||||
|     GpioDataRegs.GPASET.bit.GPIO3 = 0;   //
 | ||||
|     GpioDataRegs.GPACLEAR.bit.GPIO3 = 0; // Clear output
 | ||||
|     //
 | ||||
|     //
 | ||||
|     // GPIO54
 | ||||
|     GpioCtrlRegs.GPBMUX2.bit.GPIO54 = 0;  // GPIO54
 | ||||
|     GpioCtrlRegs.GPBPUD.bit.GPIO54 = 0;   // Enable pullup on GPIO54
 | ||||
|     GpioCtrlRegs.GPBDIR.bit.GPIO54 = 1;   // GPIO54 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPBQSEL2.bit.GPIO54 = 0; // Asynch input
 | ||||
|     GpioDataRegs.GPBSET.bit.GPIO54 = 0;   //
 | ||||
|     GpioDataRegs.GPBCLEAR.bit.GPIO54 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO56
 | ||||
|     GpioCtrlRegs.GPBMUX2.bit.GPIO56 = 0;  // GPIO56
 | ||||
|     GpioCtrlRegs.GPBPUD.bit.GPIO56 = 0;   // Enable pullup on GPIO56
 | ||||
|     GpioCtrlRegs.GPBDIR.bit.GPIO56 = 1;   // GPIO56 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPBQSEL2.bit.GPIO56 = 0; // Asynch input
 | ||||
|     GpioDataRegs.GPBSET.bit.GPIO56 = 0;   //
 | ||||
|     GpioDataRegs.GPBCLEAR.bit.GPIO56 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO57
 | ||||
|     GpioCtrlRegs.GPBMUX2.bit.GPIO57 = 0;  // GPIO57
 | ||||
|     GpioCtrlRegs.GPBPUD.bit.GPIO57 = 0;   // Enable pullup on GPIO57
 | ||||
|     GpioCtrlRegs.GPBDIR.bit.GPIO57 = 1;   // GPIO57 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPBQSEL2.bit.GPIO57 = 0; // Asynch input
 | ||||
|     GpioDataRegs.GPBSET.bit.GPIO57 = 0;   //
 | ||||
|     GpioDataRegs.GPBCLEAR.bit.GPIO57 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO58
 | ||||
|     GpioCtrlRegs.GPBMUX2.bit.GPIO58 = 0;  // GPIO58
 | ||||
|     GpioCtrlRegs.GPBPUD.bit.GPIO58 = 0;   // Enable pullup on GPIO58
 | ||||
|     GpioCtrlRegs.GPBDIR.bit.GPIO58 = 1;   // GPIO58 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPBQSEL2.bit.GPIO58 = 0; // Asynch input
 | ||||
|     GpioDataRegs.GPBSET.bit.GPIO58 = 0;   //
 | ||||
|     GpioDataRegs.GPBCLEAR.bit.GPIO58 = 0; // Clear output
 | ||||
|     //
 | ||||
|     // GPIO61
 | ||||
|     GpioCtrlRegs.GPBMUX2.bit.GPIO61 = 0;  // GPIO61
 | ||||
|     GpioCtrlRegs.GPBPUD.bit.GPIO61 = 0;   // Enable pullup on GPIO61
 | ||||
|     GpioCtrlRegs.GPBDIR.bit.GPIO61 = 1;   // GPIO61 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPBQSEL2.bit.GPIO61 = 0; // Asynch input
 | ||||
|     GpioDataRegs.GPBSET.bit.GPIO61 = 0;   //
 | ||||
|     GpioDataRegs.GPBCLEAR.bit.GPIO61 = 0; // Clear output
 | ||||
|     //
 | ||||
|     EDIS; | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| 
 | ||||
| void GPIO::ext_adc_start_convertion_setup() | ||||
| { | ||||
|     EALLOW; | ||||
|     // GPIO33
 | ||||
|     GpioCtrlRegs.GPBMUX1.bit.GPIO33 = 0;  // GPIO33
 | ||||
|     GpioCtrlRegs.GPBPUD.bit.GPIO33 = 0;   // Enable pullup on GPIO33
 | ||||
|     GpioCtrlRegs.GPBDIR.bit.GPIO33 = 1;   // GPIO33 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPBQSEL1.bit.GPIO33 = 0; // Asynch input
 | ||||
|     GpioDataRegs.GPBSET.bit.GPIO33 = 0;   //
 | ||||
|     GpioDataRegs.GPBCLEAR.bit.GPIO33 = 0; // Clear output
 | ||||
|     //
 | ||||
|     EDIS; | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| void GPIO::set_ext_adc_start_convertion() | ||||
| { | ||||
|     //set GPIO33
 | ||||
|     GpioDataRegs.GPBSET.bit.GPIO33 = 1; | ||||
|     //
 | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| void GPIO::clear_ext_adc_start_convertion() | ||||
| { | ||||
|     //clear GPIO33
 | ||||
|     GpioDataRegs.GPBCLEAR.bit.GPIO33 = 1; | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| void GPIO::gpio_hard_fault_setup() | ||||
| { | ||||
|     EALLOW; | ||||
|     // GPIO4 - Fault A
 | ||||
|     GpioCtrlRegs.GPAMUX1.bit.GPIO4 = 0;  // GPIO4
 | ||||
|     GpioCtrlRegs.GPAPUD.bit.GPIO4 = 0;   // Enable pullup on GPIO4
 | ||||
|     GpioCtrlRegs.GPADIR.bit.GPIO4 = 0;   // GPIO4 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPAQSEL1.bit.GPIO4 = 0; // Asynch input
 | ||||
|     //
 | ||||
|     // GPIO6 - Fault B
 | ||||
|     GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 0;  // GPIO6
 | ||||
|     GpioCtrlRegs.GPAPUD.bit.GPIO6 = 0;   // Enable pullup on GPIO6
 | ||||
|     GpioCtrlRegs.GPADIR.bit.GPIO6 = 0;   // GPIO6 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPAQSEL1.bit.GPIO6 = 0; // Asynch input
 | ||||
|     //
 | ||||
|     // GPIO8 - Fault C
 | ||||
|     GpioCtrlRegs.GPAMUX1.bit.GPIO8 = 0;  // GPIO8
 | ||||
|     GpioCtrlRegs.GPAPUD.bit.GPIO8 = 0;   // Enable pullup on GPIO8
 | ||||
|     GpioCtrlRegs.GPADIR.bit.GPIO8 = 0;   // GPIO8 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPAQSEL1.bit.GPIO8 = 0; // Asynch input
 | ||||
|     //
 | ||||
|     EDIS; | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| // #pragma CODE_SECTION("ramfuncs");
 | ||||
| void GPIO::gpio_hard_fault_read(uint16_t& data) | ||||
| { | ||||
|     data = (uint16_t)((GpioDataRegs.GPADAT.bit.GPIO8 == 1 ? 0x4 : 0x0) | | ||||
|             (GpioDataRegs.GPADAT.bit.GPIO6 == 1 ? 0x2 : 0x0) | | ||||
|             (GpioDataRegs.GPADAT.bit.GPIO4 == 1 ? 0x1 : 0x0)); | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| 
 | ||||
| //
 | ||||
| // Analog Alarm Current Sensors
 | ||||
| void GPIO::gpio_analog_fault_setup() | ||||
| { | ||||
|     EALLOW; | ||||
|     // GPIO12 - Analog Alarm 21
 | ||||
|     GpioCtrlRegs.GPAMUX1.bit.GPIO12 = 0;  // GPIO12
 | ||||
|     GpioCtrlRegs.GPAPUD.bit.GPIO12 = 0;   // Enable pullup on GPIO12
 | ||||
|     GpioCtrlRegs.GPADIR.bit.GPIO12 = 0;   // GPIO4 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPAQSEL1.bit.GPIO12 = 0; // Asynch input
 | ||||
|     //
 | ||||
|     // GPIO13 - Analog Alarm 22
 | ||||
|     GpioCtrlRegs.GPAMUX1.bit.GPIO13 = 0;  // GPIO13
 | ||||
|     GpioCtrlRegs.GPAPUD.bit.GPIO13 = 0;   // Enable pullup on GPIO13
 | ||||
|     GpioCtrlRegs.GPADIR.bit.GPIO13 = 0;   // GPIO13 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPAQSEL1.bit.GPIO13 = 0; // Asynch input
 | ||||
|     //
 | ||||
|     // GPIO20 - Analog Alarm 20
 | ||||
|     GpioCtrlRegs.GPAMUX2.bit.GPIO20 = 0;  // GPIO20
 | ||||
|     GpioCtrlRegs.GPAPUD.bit.GPIO20 = 0;   // Enable pullup on GPIO20
 | ||||
|     GpioCtrlRegs.GPADIR.bit.GPIO20 = 0;   // GPIO20 = 0/1 - input/output
 | ||||
|     GpioCtrlRegs.GPAQSEL2.bit.GPIO20 = 0; // Asynch input
 | ||||
|     //
 | ||||
|     EDIS; | ||||
|     //
 | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| // #pragma CODE_SECTION("ramfuncs");
 | ||||
| void GPIO::gpio_analog_fault_read(uint16_t& data) | ||||
| { | ||||
|     data = (uint16_t)((GpioDataRegs.GPADAT.bit.GPIO12 == 1 ? 0x4 : 0x0) | | ||||
|             (GpioDataRegs.GPADAT.bit.GPIO13 == 1 ? 0x2 : 0x0) | | ||||
|             (GpioDataRegs.GPADAT.bit.GPIO20 == 1 ? 0x1 : 0x0)); | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| } /* namespace DSP28335 */ | ||||
| @ -0,0 +1,75 @@ | ||||
| /*
 | ||||
|  * GPIO.h | ||||
|  * | ||||
|  *      Author: Aleksey Gerasimenko | ||||
|  *      gerasimenko.aleksey.n@gmail.com | ||||
|  */ | ||||
| 
 | ||||
| #include "F28335/DSP28x_Project.h" | ||||
| 
 | ||||
| #include "DSP28335/CPUBase.h" | ||||
| 
 | ||||
| #ifndef DSP28335_GPIO_H_ | ||||
| #define DSP28335_GPIO_H_ | ||||
| 
 | ||||
| namespace DSP28335 | ||||
| { | ||||
| 
 | ||||
| typedef void (*pGPIO_FUNCTION)(); | ||||
| 
 | ||||
| class GPIO: public DSP28335::CPUBase | ||||
| { | ||||
| public: | ||||
|     GPIO(); | ||||
|     //EPWM
 | ||||
|     static void gpio_epwm_setup(); | ||||
|     //
 | ||||
|     //CAN Inteface
 | ||||
|     static void gpio_cana_setup(); | ||||
|     static void gpio_canb_setup(); | ||||
|     //
 | ||||
|     //SCIA
 | ||||
|     static void gpio_scia_setup(); | ||||
|     //
 | ||||
|     //RS485 - SCIB external - HMI
 | ||||
|     static void gpio_scib_setup(); | ||||
|     static void gpio_scib_re_de_setup(); | ||||
|     static void gpio_scib_re_de_set(); | ||||
|     static void gpio_scib_re_de_clear(); | ||||
|     //
 | ||||
|     //RS485 - SCIC internal
 | ||||
|     static void gpio_scic_setup(); | ||||
|     //
 | ||||
|     //FRAM - SPIA
 | ||||
|     static void gpio_spia_setup(); | ||||
|     static void gpio_spia_write_protect_set(); | ||||
|     static void gpio_spia_write_protect_clear(); | ||||
|     //
 | ||||
|     // EQEP
 | ||||
|     static void gpio_eqep_setup(); | ||||
|     //
 | ||||
|     // XINTF
 | ||||
|     static void gpio_xintf_16bit_setup(); | ||||
|     static void gpio_xintf_32bit_setup(); | ||||
|     //
 | ||||
|     // GPIO
 | ||||
|     static void gpio_dicrete_outputs_setup(); | ||||
|     //
 | ||||
|     // EXTERNAL ADC
 | ||||
|     static void ext_adc_start_convertion_setup(); | ||||
|     static void set_ext_adc_start_convertion(); | ||||
|     static void clear_ext_adc_start_convertion(); | ||||
|     //
 | ||||
|     // Hard Fault
 | ||||
|     static void gpio_hard_fault_setup(); | ||||
|     static void gpio_hard_fault_read(uint16_t& data); | ||||
|     //
 | ||||
|     // Analog Fault Current Sensors
 | ||||
|     static void gpio_analog_fault_setup(); | ||||
|     static void gpio_analog_fault_read(uint16_t& data); | ||||
|     //
 | ||||
| };//class GPIO()
 | ||||
| 
 | ||||
| } /* namespace DSP28335 */ | ||||
| 
 | ||||
| #endif /* DSP28335_GPIO_H_ */ | ||||
| @ -0,0 +1,78 @@ | ||||
| /*
 | ||||
|  * MeasureTimeInterval.cpp | ||||
|  * | ||||
|  *      Author: Aleksey Gerasimenko | ||||
|  *      gerasimenko.aleksey.n@gmail.com | ||||
|  */ | ||||
| 
 | ||||
| #include "DSP28335/MeasureTimeInterval.h" | ||||
| 
 | ||||
| namespace DSP28335 | ||||
| { | ||||
| 
 | ||||
| //Constructor
 | ||||
| MeasureTimeInterval::MeasureTimeInterval(CPUTIMER_VARS& CPUTimer): | ||||
|         m_CPUTimer(CPUTimer), | ||||
|         m_time_interval((Uint32)0), | ||||
|         m_time_interval_previous((Uint32)0), | ||||
|         m_magic_number((Uint32)0) | ||||
| {}//end Constructor
 | ||||
| 
 | ||||
| // #pragma CODE_SECTION("ramfuncs");
 | ||||
| void MeasureTimeInterval::start(void) | ||||
| { | ||||
|     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 MeasureTimeInterval::stop(void) | ||||
| { | ||||
|     m_CPUTimer.RegsAddr->TCR.bit.TSS = 1; // Stop CPU Timer
 | ||||
|     //
 | ||||
|     m_time_interval_previous = m_time_interval; | ||||
|     m_time_interval = m_CPUTimer.RegsAddr->PRD.all - m_CPUTimer.RegsAddr->TIM.all - m_magic_number; | ||||
|     //
 | ||||
| }//end
 | ||||
| 
 | ||||
| // #pragma CODE_SECTION("ramfuncs");
 | ||||
| Uint32  MeasureTimeInterval::interval(void) | ||||
| { | ||||
|     return m_CPUTimer.RegsAddr->PRD.all - m_CPUTimer.RegsAddr->TIM.all - m_magic_number; | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| 
 | ||||
| // #pragma CODE_SECTION("ramfuncs");
 | ||||
| void MeasureTimeInterval::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
 | ||||
|     //
 | ||||
| }//end
 | ||||
| 
 | ||||
| // #pragma CODE_SECTION("ramfuncs");
 | ||||
| void MeasureTimeInterval::inc_counter() | ||||
| { | ||||
|     m_CPUTimer.InterruptCount++; | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| // #pragma CODE_SECTION("ramfuncs");
 | ||||
| void MeasureTimeInterval::reset_counter() | ||||
| { | ||||
|     m_CPUTimer.InterruptCount = (Uint32)0; | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| void MeasureTimeInterval::set_magic(const Uint32 magic) | ||||
| { | ||||
|     m_magic_number = (Uint32)magic; | ||||
|     //
 | ||||
| }//end
 | ||||
| //
 | ||||
| 
 | ||||
| } /* namespace DSP28335 */ | ||||
| @ -0,0 +1,38 @@ | ||||
| /*
 | ||||
|  * MeasureTimeInterval.h | ||||
|  * | ||||
|  *      Author: Aleksey Gerasimenko | ||||
|  *      gerasimenko.aleksey.n@gmail.com | ||||
|  */ | ||||
| 
 | ||||
| #include "F28335/DSP28x_Project.h" | ||||
| 
 | ||||
| #ifndef DSP28335_TIMEINTERVAL_H_ | ||||
| #define DSP28335_TIMEINTERVAL_H_ | ||||
| 
 | ||||
| namespace DSP28335 | ||||
| { | ||||
| 
 | ||||
| class MeasureTimeInterval | ||||
| { | ||||
| private: | ||||
|     CPUTIMER_VARS& m_CPUTimer; | ||||
|     Uint32 m_time_interval; | ||||
|     Uint32 m_time_interval_previous; | ||||
|     Uint32 m_magic_number; | ||||
| public: | ||||
|     MeasureTimeInterval(CPUTIMER_VARS& CPUTimer); | ||||
| public: | ||||
|     void    start(void); | ||||
|     void    stop(void); | ||||
|     Uint32  interval(void); | ||||
|     void    reset(void); | ||||
|     void    inc_counter(); | ||||
|     void    reset_counter(); | ||||
|     void    set_magic(const Uint32 magic); | ||||
|     //
 | ||||
| };//end class MeasureTimeStartStop
 | ||||
| 
 | ||||
| } /* namespace DSP28335 */ | ||||
| 
 | ||||
| #endif /* DSP28335_TIMEINTERVAL_H_ */ | ||||
| @ -0,0 +1,86 @@ | ||||
| /*
 | ||||
|  * 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 */ | ||||
| @ -0,0 +1,39 @@ | ||||
| /*
 | ||||
|  * 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_ */ | ||||
| @ -0,0 +1,56 @@ | ||||
| /*
 | ||||
|  * 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_ */ | ||||
| @ -0,0 +1,105 @@ | ||||
| /*
 | ||||
|  * 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_ */ | ||||
| @ -0,0 +1,68 @@ | ||||
| /*
 | ||||
|  * 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_ */ | ||||
| @ -0,0 +1,144 @@ | ||||
| /*
 | ||||
|  * SCIA.cpp | ||||
|  * | ||||
|  *      Author: Aleksey Gerasimenko | ||||
|  *      gerasimenko.aleksey.n@gmail.com | ||||
|  */ | ||||
| 
 | ||||
| #include "DSP28335/SCIA.h" | ||||
| 
 | ||||
| namespace DSP28335 | ||||
| { | ||||
| //CONSTRUCTOR
 | ||||
| SCIA::SCIA(volatile struct SCI_REGS& SciRegs): | ||||
|         DSP28335::SCIBase(SciRegs) | ||||
| //
 | ||||
| { | ||||
|     // set default
 | ||||
|     settings.config.baudrate =  SCIA_BAUDRATE_DEFAULT; | ||||
|     settings.config.parity =    SCIA_PARITY_DEFAULT; | ||||
|     settings.config.stopbits =  SCIA_STOPBITS_DEFAULT; | ||||
|     settings.config.lenght =    SCIA_LENGHT_DEFAULT; | ||||
|     settings.gpio_setup =       SCIA_GPIO_SETUP_DEFAULT; | ||||
|     //
 | ||||
| }//end CONSTRUCTOR
 | ||||
| 
 | ||||
| 
 | ||||
| void SCIA::setup() | ||||
| { | ||||
|     //
 | ||||
|     get_default_configuration(settings.config); | ||||
|     _configure(settings.config); | ||||
|     //
 | ||||
|     _gpio_setup = settings.gpio_setup; | ||||
|     (*_gpio_setup)(); | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| void SCIA::setup(DSP28335::SCISetup& setup) | ||||
| { | ||||
|     settings = setup; | ||||
|     _configure(settings.config); | ||||
|     //
 | ||||
|     _gpio_setup = settings.gpio_setup; | ||||
|     (*_gpio_setup)(); | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| void SCIA::get_default_configuration(DSP28335::SCIConfiguration& config) | ||||
| { | ||||
|     config.baudrate = SCIA_BAUDRATE_DEFAULT; | ||||
|     config.parity = SCIA_PARITY_DEFAULT; | ||||
|     config.stopbits = SCIA_STOPBITS_DEFAULT; | ||||
|     config.lenght = SCIA_LENGHT_DEFAULT; | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| void SCIA::get_configuration(DSP28335::SCIConfiguration& config) | ||||
| { | ||||
|     config = settings.config; | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| void SCIA::set_configuration(DSP28335::SCIConfiguration& config) | ||||
| { | ||||
|     settings.config = config; | ||||
|     _configure(settings.config); | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| bool SCIA::compare_configuration(DSP28335::SCIConfiguration& config) | ||||
| { | ||||
| 
 | ||||
|     return (settings.config.baudrate == config.baudrate) | ||||
|             & (settings.config.parity == config.parity) | ||||
|             & (settings.config.stopbits == config.stopbits) | ||||
|             & (settings.config.lenght == config.lenght); | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| void SCIA::_configure(DSP28335::SCIConfiguration& config) | ||||
| { | ||||
|     //
 | ||||
|     // SCICTL1.5 - Software reset 0/1-reset/active state
 | ||||
|     SciRegs.SCICTL1.bit.SWRESET = 0x000; | ||||
|     //
 | ||||
|     // Reset FIFO's
 | ||||
|     SciRegs.SCIFFTX.all=0x8000; | ||||
|     //
 | ||||
|     // SCICCR.7 - Number of stop bits
 | ||||
|     if(config.stopbits == DSP28335::ONE){ SciRegs.SCICCR.bit.STOPBITS = 0x00;} | ||||
|     if(config.stopbits == DSP28335::TWO){ SciRegs.SCICCR.bit.STOPBITS = 0x01;} | ||||
|     //
 | ||||
|     // SCICCR.5 - Parity enable
 | ||||
|     // SCICCR.6 - Parity odd/even
 | ||||
|     if(config.parity == DSP28335::NO){   SciRegs.SCICCR.bit.PARITYENA = 0x00; SciRegs.SCICCR.bit.PARITY = 0x00;} | ||||
|     if(config.parity == DSP28335::ODD){  SciRegs.SCICCR.bit.PARITYENA = 0x01; SciRegs.SCICCR.bit.PARITY = 0x00;} | ||||
|     if(config.parity == DSP28335::EVEN){ SciRegs.SCICCR.bit.PARITYENA = 0x01; SciRegs.SCICCR.bit.PARITY = 0x01;} | ||||
|     //
 | ||||
|     // SCICCR.4 - Loop Back test mode enable
 | ||||
|     SciRegs.SCICCR.bit.LOOPBKENA = 0x00; | ||||
|     //
 | ||||
|     // SCICCR.3 - Idle - Address mode protocol
 | ||||
|     SciRegs.SCICCR.bit.ADDRIDLE_MODE = 0x00; | ||||
|     //
 | ||||
|     // SCICCR.2-0 - Character-length
 | ||||
|     if(config.lenght == DSP28335::LEN1){ SciRegs.SCICCR.bit.SCICHAR = 0x00;} | ||||
|     if(config.lenght == DSP28335::LEN2){ SciRegs.SCICCR.bit.SCICHAR = 0x01;} | ||||
|     if(config.lenght == DSP28335::LEN3){ SciRegs.SCICCR.bit.SCICHAR = 0x02;} | ||||
|     if(config.lenght == DSP28335::LEN4){ SciRegs.SCICCR.bit.SCICHAR = 0x03;} | ||||
|     if(config.lenght == DSP28335::LEN5){ SciRegs.SCICCR.bit.SCICHAR = 0x04;} | ||||
|     if(config.lenght == DSP28335::LEN6){ SciRegs.SCICCR.bit.SCICHAR = 0x05;} | ||||
|     if(config.lenght == DSP28335::LEN7){ SciRegs.SCICCR.bit.SCICHAR = 0x06;} | ||||
|     if(config.lenght == DSP28335::LEN8){ SciRegs.SCICCR.bit.SCICHAR = 0x07;} | ||||
|     //
 | ||||
|     // SCICTL1.6 - Receive error interrupt enable
 | ||||
|     SciRegs.SCICTL1.bit.RXERRINTENA =0x000; | ||||
|     //
 | ||||
|     SciRegs.SCICTL1.bit.RXENA =0x001;          // Receiver enable
 | ||||
|     SciRegs.SCICTL1.bit.TXENA =0x001;          // Transmitter enable
 | ||||
|     SciRegs.SCICTL1.bit.SLEEP =0x000;          // Sleep 0/1 - disable/enable
 | ||||
|     SciRegs.SCICTL1.bit.TXWAKE =0x000;         // Transmitter wake-up method select
 | ||||
| 
 | ||||
|     SciRegs.SCICTL2.bit.TXINTENA =0x0001;      // SCITXBUF-register interrupt enable
 | ||||
|     SciRegs.SCICTL2.bit.RXBKINTENA =0x001;         // Receiver-buffer/break interrupt enable
 | ||||
| 
 | ||||
|     // Ideal Baud       BRR             Actual Baud     Error, %
 | ||||
|     //  2400            1952(07A0h)     2400            0
 | ||||
|     //  4800            976(03D0h)      4798            -0,04
 | ||||
|     //  9600            487(01E7h)      9606            0.06
 | ||||
|     //  19200           243(00F3h)      19211           0.06
 | ||||
|     //  38400           121(0079h)      38422           0.006
 | ||||
| 
 | ||||
|     if(config.baudrate == DSP28335::BR2400){ SciRegs.SCIHBAUD = 0x0007; SciRegs.SCILBAUD = 0x00A0;} | ||||
|     if(config.baudrate == DSP28335::BR4800){ SciRegs.SCIHBAUD = 0x0003; SciRegs.SCILBAUD = 0x00D0;} | ||||
|     if(config.baudrate == DSP28335::BR9600){ SciRegs.SCIHBAUD = 0x0001; SciRegs.SCILBAUD = 0x00E7;} | ||||
|     if(config.baudrate == DSP28335::BR19200){ SciRegs.SCIHBAUD = 0x0000; SciRegs.SCILBAUD = 0x00F3;} | ||||
|     if(config.baudrate == DSP28335::BR38400){ SciRegs.SCIHBAUD = 0x0000; SciRegs.SCILBAUD = 0x0079;} | ||||
| 
 | ||||
|     // SCICTL1.5 - Relinquish SCI from Reset
 | ||||
|     SciRegs.SCICTL1.bit.SWRESET =0x001; | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| } /* namespace DSP28335 */ | ||||
| @ -0,0 +1,58 @@ | ||||
| /*
 | ||||
|  * SCIA.h | ||||
|  * | ||||
|  *      Author: Aleksey Gerasimenko | ||||
|  *      gerasimenko.aleksey.n@gmail.com | ||||
|  */ | ||||
| #include "F28335/DSP28x_Project.h" | ||||
| 
 | ||||
| #include "DSP28335/SCIBase.h" | ||||
| 
 | ||||
| #ifndef DSP28335_SCIA_H_ | ||||
| #define DSP28335_SCIA_H_ | ||||
| 
 | ||||
| 
 | ||||
| #ifndef SCIA_BAUDRATE_DEFAULT | ||||
| #define SCIA_BAUDRATE_DEFAULT   (DSP28335::BR9600) | ||||
| #endif | ||||
| 
 | ||||
| #ifndef SCIA_PARITY_DEFAULT | ||||
| #define SCIA_PARITY_DEFAULT     (DSP28335::NO) | ||||
| //#define SCIA_PARITY_DEFAULT     (DSP28335::ODD)
 | ||||
| //#define SCIA_PARITY_DEFAULT     (DSP28335::EVEN)
 | ||||
| #endif | ||||
| 
 | ||||
| #ifndef SCIA_STOPBITS_DEFAULT | ||||
| #define SCIA_STOPBITS_DEFAULT   (DSP28335::ONE) | ||||
| #endif | ||||
| 
 | ||||
| #ifndef SCIA_LENGHT_DEFAULT | ||||
| #define SCIA_LENGHT_DEFAULT     (DSP28335::LEN8) | ||||
| #endif | ||||
| 
 | ||||
| #ifndef SCIA_GPIO_SETUP_DEFAULT | ||||
| #define SCIA_GPIO_SETUP_DEFAULT (&DSP28335::GPIO::gpio_scia_setup) | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| namespace DSP28335 | ||||
| { | ||||
| 
 | ||||
| class SCIA: public DSP28335::SCIBase | ||||
| { | ||||
| public: | ||||
|     SCIA(volatile struct SCI_REGS& SciRegs); | ||||
|     void setup(); | ||||
|     void setup(DSP28335::SCISetup& setup); | ||||
|     void get_default_configuration(DSP28335::SCIConfiguration& config); | ||||
|     void get_configuration(DSP28335::SCIConfiguration& config); | ||||
|     void set_configuration(DSP28335::SCIConfiguration& config); | ||||
|     bool compare_configuration(DSP28335::SCIConfiguration& config); | ||||
| protected: | ||||
|     void _configure(DSP28335::SCIConfiguration& config); | ||||
|     //
 | ||||
| };//end class SCIA
 | ||||
| 
 | ||||
| } /* namespace DSP28335 */ | ||||
| 
 | ||||
| #endif /* DSP28335_SCIA_H_ */ | ||||
| @ -0,0 +1,163 @@ | ||||
| /*
 | ||||
|  * SCIB.cpp | ||||
|  * | ||||
|  *      Author: Aleksey Gerasimenko | ||||
|  *      gerasimenko.aleksey.n@gmail.com | ||||
|  */ | ||||
| 
 | ||||
| #include "DSP28335/SCIB.h" | ||||
| 
 | ||||
| namespace DSP28335 | ||||
| { | ||||
| //CONSTRUCTOR
 | ||||
| SCIB::SCIB(volatile struct SCI_REGS& SciRegs): | ||||
|         DSP28335::SCIBase(SciRegs) | ||||
| { | ||||
|     // set default
 | ||||
|     settings.config.baudrate = SCIB_BAUDRATE_DEFAULT; | ||||
|     settings.config.parity   = SCIB_PARITY_DEFAULT; | ||||
|     settings.config.stopbits = SCIB_STOPBITS_DEFAULT; | ||||
|     settings.config.lenght   = SCIB_LENGHT_DEFAULT; | ||||
|     settings.gpio_setup      = SCIB_GPIO_SETUP_DEFAULT; | ||||
|     //
 | ||||
| }//CONSTRUCTOR
 | ||||
| //
 | ||||
| 
 | ||||
| void SCIB::setup() | ||||
| { | ||||
|     //
 | ||||
|     get_default_configuration(settings.config); | ||||
|     _configure(settings.config); | ||||
|     //
 | ||||
|     _gpio_setup = settings.gpio_setup; | ||||
|     (*_gpio_setup)(); | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| void SCIB::setup(DSP28335::SCISetup& setup) | ||||
| { | ||||
|     settings = setup; | ||||
|     _configure(settings.config); | ||||
|      | ||||
|     _gpio_setup = settings.gpio_setup; | ||||
|     (*_gpio_setup)(); | ||||
|      | ||||
| }//
 | ||||
| //
 | ||||
| void SCIB::get_default_configuration(DSP28335::SCIConfiguration& config) | ||||
| { | ||||
|     config.baudrate = SCIB_BAUDRATE_DEFAULT; | ||||
|     config.parity   = SCIB_PARITY_DEFAULT; | ||||
|     config.stopbits = SCIB_STOPBITS_DEFAULT; | ||||
|     config.lenght   = SCIB_LENGHT_DEFAULT; | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| 
 | ||||
| void SCIB::get_configuration(DSP28335::SCIConfiguration& config) | ||||
| { | ||||
|     config = settings.config; | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| void SCIB::set_configuration(DSP28335::SCIConfiguration& config) | ||||
| { | ||||
|     settings.config = config; | ||||
|     _configure(settings.config); | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| bool SCIB::compare_configuration(DSP28335::SCIConfiguration& config) | ||||
| { | ||||
| 
 | ||||
|     return (settings.config.baudrate == config.baudrate) | ||||
|             & (settings.config.parity == config.parity) | ||||
|             & (settings.config.stopbits == config.stopbits) | ||||
|             & (settings.config.lenght == config.lenght); | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| void SCIB::_configure(DSP28335::SCIConfiguration& config) | ||||
| { | ||||
|     //
 | ||||
|     // SCICTL1.5 - Software reset 0/1-reset/active state
 | ||||
|     //m_sci_regs.SCICTL1.bit.SWRESET = 0x000;
 | ||||
|     SciRegs.SCICTL1.bit.SWRESET = 0x000; | ||||
|     //
 | ||||
|     // Reset FIFO's
 | ||||
|     SciRegs.SCIFFTX.all=0x8000; | ||||
|     //
 | ||||
|     // SCICCR.7 - Number of stop bits
 | ||||
|     switch(config.stopbits) | ||||
|     { | ||||
|     case DSP28335::ONE: { SciRegs.SCICCR.bit.STOPBITS = 0x00; break;} | ||||
|     case DSP28335::TWO: { SciRegs.SCICCR.bit.STOPBITS = 0x01; break;} | ||||
|     default: {break;} | ||||
|     }//switch
 | ||||
|     //
 | ||||
|     // SCICCR.5 - Parity enable
 | ||||
|     // SCICCR.6 - Parity odd/even
 | ||||
|     switch(config.parity) | ||||
|     { | ||||
|     case DSP28335::NO:   {SciRegs.SCICCR.bit.PARITYENA = 0x00; SciRegs.SCICCR.bit.PARITY = 0x00; break;} | ||||
|     case DSP28335::ODD:  {SciRegs.SCICCR.bit.PARITYENA = 0x01; SciRegs.SCICCR.bit.PARITY = 0x00; break;} | ||||
|     case DSP28335::EVEN: {SciRegs.SCICCR.bit.PARITYENA = 0x01; SciRegs.SCICCR.bit.PARITY = 0x01; break;} | ||||
|     default: {break;} | ||||
|     }//switch
 | ||||
|     //
 | ||||
|     // SCICCR.4 - Loop Back test mode enable
 | ||||
|     SciRegs.SCICCR.bit.LOOPBKENA = 0x00; | ||||
|     //
 | ||||
|     // SCICCR.3 - Idle - Address mode protocol
 | ||||
|     SciRegs.SCICCR.bit.ADDRIDLE_MODE = 0x00; | ||||
|     //
 | ||||
|     // SCICCR.2-0 - Character-length
 | ||||
|     switch(config.lenght) | ||||
|     { | ||||
|     case DSP28335::LEN1: {SciRegs.SCICCR.bit.SCICHAR = 0x00; break;} | ||||
|     case DSP28335::LEN2: {SciRegs.SCICCR.bit.SCICHAR = 0x01; break;} | ||||
|     case DSP28335::LEN3: {SciRegs.SCICCR.bit.SCICHAR = 0x02; break;} | ||||
|     case DSP28335::LEN4: {SciRegs.SCICCR.bit.SCICHAR = 0x03; break;} | ||||
|     case DSP28335::LEN5: {SciRegs.SCICCR.bit.SCICHAR = 0x04; break;} | ||||
|     case DSP28335::LEN6: {SciRegs.SCICCR.bit.SCICHAR = 0x05; break;} | ||||
|     case DSP28335::LEN7: {SciRegs.SCICCR.bit.SCICHAR = 0x06; break;} | ||||
|     case DSP28335::LEN8: {SciRegs.SCICCR.bit.SCICHAR = 0x07; break;} | ||||
|     default: {break;} | ||||
|     }//switch
 | ||||
|     //
 | ||||
|     // SCICTL1.6 - Receive error interrupt enable
 | ||||
|     SciRegs.SCICTL1.bit.RXERRINTENA =0x000; | ||||
|     //
 | ||||
|     SciRegs.SCICTL1.bit.RXENA =0x001;          // Receiver enable
 | ||||
|     SciRegs.SCICTL1.bit.TXENA =0x001;          // Transmitter enable
 | ||||
|     SciRegs.SCICTL1.bit.SLEEP =0x000;          // Sleep 0/1 - disable/enable
 | ||||
|     SciRegs.SCICTL1.bit.TXWAKE =0x000;         // Transmitter wake-up method select
 | ||||
| 
 | ||||
|     SciRegs.SCICTL2.bit.TXINTENA =0x000;      // SCITXBUF-register interrupt enable
 | ||||
|     SciRegs.SCICTL2.bit.RXBKINTENA =0x00;         // Receiver-buffer/break interrupt enable
 | ||||
| 
 | ||||
|     // Ideal Baud       BRR             Actual Baud     Error, %
 | ||||
|     //  2400            1952(07A0h)     2400            0
 | ||||
|     //  4800            976(03D0h)      4798            -0,04
 | ||||
|     //  9600            487(01E7h)      9606            0.06
 | ||||
|     //  19200           243(00F3h)      19211           0.06
 | ||||
|     //  38400           121(0079h)      38422           0.006
 | ||||
| 
 | ||||
|     switch(config.baudrate) | ||||
|     { | ||||
|     case DSP28335::BR2400:  {SciRegs.SCIHBAUD = 0x0007; SciRegs.SCILBAUD = 0x00A0; break;} | ||||
|     case DSP28335::BR4800:  {SciRegs.SCIHBAUD = 0x0003; SciRegs.SCILBAUD = 0x00D0; break;} | ||||
|     case DSP28335::BR9600:  {SciRegs.SCIHBAUD = 0x0001; SciRegs.SCILBAUD = 0x00E7; break;} | ||||
|     case DSP28335::BR19200: {SciRegs.SCIHBAUD = 0x0000; SciRegs.SCILBAUD = 0x00F3; break;} | ||||
|     case DSP28335::BR38400: {SciRegs.SCIHBAUD = 0x0000; SciRegs.SCILBAUD = 0x0079; break;} | ||||
|     default: {break;} | ||||
|     }//switch
 | ||||
| 
 | ||||
|     // SCICTL1.5 - Relinquish SCI from Reset
 | ||||
|     SciRegs.SCICTL1.bit.SWRESET =0x001; | ||||
| 
 | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| 
 | ||||
| } /* namespace DSP28335 */ | ||||
| @ -0,0 +1,57 @@ | ||||
| /*
 | ||||
|  * SCIB.h | ||||
|  * | ||||
|  *      Author: Aleksey Gerasimenko | ||||
|  *      gerasimenko.aleksey.n@gmail.com | ||||
|  */ | ||||
| 
 | ||||
| #include "F28335/DSP28x_Project.h" | ||||
| 
 | ||||
| #include "DSP28335/SCIBase.h" | ||||
| 
 | ||||
| #ifndef DSP28335_SCIB_H_ | ||||
| #define DSP28335_SCIB_H_ | ||||
| 
 | ||||
| #ifndef SCIB_BAUDRATE_DEFAULT | ||||
| #define SCIB_BAUDRATE_DEFAULT   (DSP28335::BR9600) | ||||
| #endif | ||||
| 
 | ||||
| #ifndef SCIB_PARITY_DEFAULT | ||||
| #define SCIB_PARITY_DEFAULT     (DSP28335::NO) | ||||
| //#define SCIB_PARITY_DEFAULT     (DSP28335::ODD)
 | ||||
| //#define SCIB_PARITY_DEFAULT     (DSP28335::EVEN)
 | ||||
| #endif | ||||
| 
 | ||||
| #ifndef SCIB_STOPBITS_DEFAULT | ||||
| #define SCIB_STOPBITS_DEFAULT   (DSP28335::ONE) | ||||
| #endif | ||||
| 
 | ||||
| #ifndef SCIB_LENGHT_DEFAULT | ||||
| #define SCIB_LENGHT_DEFAULT     (DSP28335::LEN8) | ||||
| #endif | ||||
| 
 | ||||
| #ifndef SCIB_GPIO_SETUP_DEFAULT | ||||
| #define SCIB_GPIO_SETUP_DEFAULT (&DSP28335::GPIO::gpio_scib_setup) | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| namespace DSP28335 | ||||
| { | ||||
| 
 | ||||
| class SCIB: public SCIBase | ||||
| { | ||||
| public: | ||||
|     SCIB(volatile struct SCI_REGS& SciRegs); | ||||
|     void setup(); | ||||
|     void setup(DSP28335::SCISetup& setup); | ||||
|     void get_default_configuration(DSP28335::SCIConfiguration& config); | ||||
|     void get_configuration(DSP28335::SCIConfiguration& config); | ||||
|     void set_configuration(DSP28335::SCIConfiguration& config); | ||||
|     bool compare_configuration(DSP28335::SCIConfiguration& config); | ||||
| protected: | ||||
|     void _configure(DSP28335::SCIConfiguration& config); | ||||
| };//SCIB
 | ||||
| 
 | ||||
| } /* namespace DSP28335 */ | ||||
| 
 | ||||
| #endif /* DSP28335_SCIB_H_ */ | ||||
| @ -0,0 +1,21 @@ | ||||
| /*
 | ||||
|  * SCIBase.cpp | ||||
|  * | ||||
|  *      Author: Aleksey Gerasimenko | ||||
|  *      gerasimenko.aleksey.n@gmail.com | ||||
|  */ | ||||
| 
 | ||||
| #include "DSP28335/SCIBase.h" | ||||
| 
 | ||||
| namespace DSP28335 | ||||
| { | ||||
| 
 | ||||
| SCIBase::SCIBase(volatile struct SCI_REGS& SciRegs): | ||||
|         SciRegs(SciRegs), | ||||
|         settings(), | ||||
|         _gpio_setup(0) | ||||
| //
 | ||||
| {}//CONSTRUCTOR
 | ||||
| 
 | ||||
| //
 | ||||
| } /* namespace DSP28335 */ | ||||
| @ -0,0 +1,78 @@ | ||||
| /*
 | ||||
|  * SCIBase.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_SCIBASE_H_ | ||||
| #define DSP28335_SCIBASE_H_ | ||||
| 
 | ||||
| 
 | ||||
| namespace DSP28335 | ||||
| { | ||||
| 
 | ||||
| 
 | ||||
| enum SCIBaudRate { BR2400, BR4800, BR9600, BR19200, BR38400}; | ||||
| enum SCIParity {NO, ODD, EVEN}; | ||||
| enum SCIStopBits {ONE, TWO}; | ||||
| enum SCICharLenght { LEN1, LEN2, LEN3, LEN4, LEN5, LEN6, LEN7, LEN8}; | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| struct SCIConfiguration | ||||
| { | ||||
|     DSP28335::SCIBaudRate baudrate; | ||||
|     DSP28335::SCIParity parity; | ||||
|     DSP28335::SCIStopBits stopbits; | ||||
|     DSP28335::SCICharLenght lenght; | ||||
|     SCIConfiguration(): | ||||
|         baudrate(DSP28335::BR9600), | ||||
|         parity(DSP28335::ODD), | ||||
|         stopbits(DSP28335::ONE), | ||||
|         lenght(DSP28335::LEN8) | ||||
|     {} | ||||
| };//
 | ||||
| 
 | ||||
| 
 | ||||
| struct SCISetup | ||||
| { | ||||
|     SCIConfiguration config; | ||||
|     pGPIO_FUNCTION gpio_setup; | ||||
|     SCISetup(): | ||||
|         config(), | ||||
|         gpio_setup(0) | ||||
|     {} | ||||
| };//
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| class SCIBase | ||||
| { | ||||
| public: | ||||
|     volatile struct SCI_REGS& SciRegs; | ||||
| protected: | ||||
|     SCISetup    settings; | ||||
| public: | ||||
|     SCIBase(volatile struct SCI_REGS& SciRegs); | ||||
|     virtual void setup() = 0; | ||||
|     //virtual void setup(DSP28335::SCISetup& setup) = 0;
 | ||||
|     virtual void get_default_configuration(DSP28335::SCIConfiguration& config) = 0; | ||||
|     virtual void get_configuration(DSP28335::SCIConfiguration& config) = 0; | ||||
|     virtual void set_configuration(DSP28335::SCIConfiguration& config) = 0; | ||||
|     virtual bool compare_configuration(DSP28335::SCIConfiguration& config) = 0; | ||||
| protected: | ||||
|     virtual void _configure(DSP28335::SCIConfiguration& config) = 0; | ||||
|     void (*_gpio_setup)(); | ||||
| }; | ||||
| 
 | ||||
| } /* namespace DSP28335 */ | ||||
| 
 | ||||
| #endif /* DSP28335_SCIBASE_H_ */ | ||||
| @ -0,0 +1,143 @@ | ||||
| /*
 | ||||
|  * SCIC.cpp | ||||
|  * | ||||
|  *      Author: Aleksey Gerasimenko | ||||
|  *      gerasimenko.aleksey.n@gmail.com | ||||
|  */ | ||||
| 
 | ||||
| #include "DSP28335/SCIC.h" | ||||
| 
 | ||||
| namespace DSP28335 | ||||
| { | ||||
| //CONSTRUCTOR
 | ||||
| SCIC::SCIC(volatile struct SCI_REGS& SciRegs): | ||||
|         DSP28335::SCIBase(SciRegs) | ||||
| { | ||||
|     // set default
 | ||||
|     settings.config.baudrate = SCIC_BAUDRATE_DEFAULT; | ||||
|     settings.config.parity = SCIC_PARITY_DEFAULT; | ||||
|     settings.config.stopbits = SCIC_STOPBITS_DEFAULT; | ||||
|     settings.config.lenght = SCIC_LENGHT_DEFAULT; | ||||
|     settings.gpio_setup = SCIC_GPIO_SETUP_DEFAULT; | ||||
|     //
 | ||||
| }//CONSTRUCTOR
 | ||||
| 
 | ||||
| 
 | ||||
| void SCIC::setup() | ||||
| { | ||||
|     //
 | ||||
|     get_default_configuration(settings.config); | ||||
|     _configure(settings.config); | ||||
|     //
 | ||||
|     _gpio_setup = settings.gpio_setup; | ||||
|     (*_gpio_setup)(); | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| void SCIC::setup(DSP28335::SCISetup& setup) | ||||
| { | ||||
|     settings = setup; | ||||
|     _configure(settings.config); | ||||
|     //
 | ||||
|     _gpio_setup = settings.gpio_setup; | ||||
|     (*_gpio_setup)(); | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| void SCIC::get_default_configuration(DSP28335::SCIConfiguration& config) | ||||
| { | ||||
|     config.baudrate = SCIC_BAUDRATE_DEFAULT; | ||||
|     config.parity   = SCIC_PARITY_DEFAULT; | ||||
|     config.stopbits = SCIC_STOPBITS_DEFAULT; | ||||
|     config.lenght   = SCIC_LENGHT_DEFAULT; | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| void SCIC::get_configuration(DSP28335::SCIConfiguration& config) | ||||
| { | ||||
|     config = settings.config; | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| void SCIC::set_configuration(DSP28335::SCIConfiguration& config) | ||||
| { | ||||
|     settings.config = config; | ||||
|     _configure(settings.config); | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| bool SCIC::compare_configuration(DSP28335::SCIConfiguration& config) | ||||
| { | ||||
| 
 | ||||
|     return (settings.config.baudrate == config.baudrate) | ||||
|             & (settings.config.parity == config.parity) | ||||
|             & (settings.config.stopbits == config.stopbits) | ||||
|             & (settings.config.lenght == config.lenght); | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| void SCIC::_configure(DSP28335::SCIConfiguration& config) | ||||
| { | ||||
|     //
 | ||||
|     // SCICTL1.5 - Software reset 0/1-reset/active state
 | ||||
|     SciRegs.SCICTL1.bit.SWRESET = 0x000; | ||||
|     //
 | ||||
|     // Reset FIFO's
 | ||||
|     SciRegs.SCIFFTX.all=0x8000; | ||||
|     //
 | ||||
|     // SCICCR.7 - Number of stop bits
 | ||||
|     if(config.stopbits == DSP28335::ONE){ SciRegs.SCICCR.bit.STOPBITS = 0x00;} | ||||
|     if(config.stopbits == DSP28335::TWO){ SciRegs.SCICCR.bit.STOPBITS = 0x01;} | ||||
|     //
 | ||||
|     // SCICCR.5 - Parity enable
 | ||||
|     // SCICCR.6 - Parity odd/even
 | ||||
|     if(config.parity == DSP28335::NO){   SciRegs.SCICCR.bit.PARITYENA = 0x00; SciRegs.SCICCR.bit.PARITY = 0x00;} | ||||
|     if(config.parity == DSP28335::ODD){  SciRegs.SCICCR.bit.PARITYENA = 0x01; SciRegs.SCICCR.bit.PARITY = 0x00;} | ||||
|     if(config.parity == DSP28335::EVEN){ SciRegs.SCICCR.bit.PARITYENA = 0x01; SciRegs.SCICCR.bit.PARITY = 0x01;} | ||||
|     //
 | ||||
|     // SCICCR.4 - Loop Back test mode enable
 | ||||
|     SciRegs.SCICCR.bit.LOOPBKENA = 0x00; | ||||
|     //
 | ||||
|     // SCICCR.3 - Idle - Address mode protocol
 | ||||
|     SciRegs.SCICCR.bit.ADDRIDLE_MODE = 0x00; | ||||
|     //
 | ||||
|     // SCICCR.2-0 - Character-length
 | ||||
|     if(config.lenght == DSP28335::LEN1){ SciRegs.SCICCR.bit.SCICHAR = 0x00;} | ||||
|     if(config.lenght == DSP28335::LEN2){ SciRegs.SCICCR.bit.SCICHAR = 0x01;} | ||||
|     if(config.lenght == DSP28335::LEN3){ SciRegs.SCICCR.bit.SCICHAR = 0x02;} | ||||
|     if(config.lenght == DSP28335::LEN4){ SciRegs.SCICCR.bit.SCICHAR = 0x03;} | ||||
|     if(config.lenght == DSP28335::LEN5){ SciRegs.SCICCR.bit.SCICHAR = 0x04;} | ||||
|     if(config.lenght == DSP28335::LEN6){ SciRegs.SCICCR.bit.SCICHAR = 0x05;} | ||||
|     if(config.lenght == DSP28335::LEN7){ SciRegs.SCICCR.bit.SCICHAR = 0x06;} | ||||
|     if(config.lenght == DSP28335::LEN8){ SciRegs.SCICCR.bit.SCICHAR = 0x07;} | ||||
|     //
 | ||||
|     // SCICTL1.6 - Receive error interrupt enable
 | ||||
|     SciRegs.SCICTL1.bit.RXERRINTENA =0x000; | ||||
|     //
 | ||||
|     SciRegs.SCICTL1.bit.RXENA =0x001;          // Receiver enable
 | ||||
|     SciRegs.SCICTL1.bit.TXENA =0x001;          // Transmitter enable
 | ||||
|     SciRegs.SCICTL1.bit.SLEEP =0x000;          // Sleep 0/1 - disable/enable
 | ||||
|     SciRegs.SCICTL1.bit.TXWAKE =0x000;         // Transmitter wake-up method select
 | ||||
| 
 | ||||
|     SciRegs.SCICTL2.bit.TXINTENA =0x000;      // SCITXBUF-register interrupt enable
 | ||||
|     SciRegs.SCICTL2.bit.RXBKINTENA =0x00;         // Receiver-buffer/break interrupt enable
 | ||||
| 
 | ||||
|     // Ideal Baud       BRR             Actual Baud     Error, %
 | ||||
|     //  2400            1952(07A0h)     2400            0
 | ||||
|     //  4800            976(03D0h)      4798            -0,04
 | ||||
|     //  9600            487(01E7h)      9606            0.06
 | ||||
|     //  19200           243(00F3h)      19211           0.06
 | ||||
|     //  38400           121(0079h)      38422           0.006
 | ||||
| 
 | ||||
|     if(config.baudrate == DSP28335::BR2400){ SciRegs.SCIHBAUD = 0x0007; SciRegs.SCILBAUD = 0x00A0;} | ||||
|     if(config.baudrate == DSP28335::BR4800){ SciRegs.SCIHBAUD = 0x0003; SciRegs.SCILBAUD = 0x00D0;} | ||||
|     if(config.baudrate == DSP28335::BR9600){ SciRegs.SCIHBAUD = 0x0001; SciRegs.SCILBAUD = 0x00E7;} | ||||
|     if(config.baudrate == DSP28335::BR19200){ SciRegs.SCIHBAUD = 0x0000; SciRegs.SCILBAUD = 0x00F3;} | ||||
|     if(config.baudrate == DSP28335::BR38400){ SciRegs.SCIHBAUD = 0x0000; SciRegs.SCILBAUD = 0x0079;} | ||||
| 
 | ||||
|     // SCICTL1.5 - Relinquish SCI from Reset
 | ||||
|     SciRegs.SCICTL1.bit.SWRESET =0x001; | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| } /* namespace DSP28335 */ | ||||
| @ -0,0 +1,57 @@ | ||||
| /*
 | ||||
|  * SCIC.h | ||||
|  * | ||||
|  *      Author: Aleksey Gerasimenko | ||||
|  *      gerasimenko.aleksey.n@gmail.com | ||||
|  */ | ||||
| 
 | ||||
| #include "F28335/DSP28x_Project.h" | ||||
| 
 | ||||
| #include "DSP28335/SCIBase.h" | ||||
| 
 | ||||
| #ifndef DSP28335_SCIC_H_ | ||||
| #define DSP28335_SCIC_H_ | ||||
| 
 | ||||
| #ifndef SCIC_BAUDRATE_DEFAULT | ||||
| #define SCIC_BAUDRATE_DEFAULT   (DSP28335::BR9600) | ||||
| #endif | ||||
| 
 | ||||
| #ifndef SCIC_PARITY_DEFAULT | ||||
| #define SCIC_PARITY_DEFAULT     (DSP28335::NO) | ||||
| //#define SCIC_PARITY_DEFAULT     (DSP28335::ODD)
 | ||||
| //#define SCIC_PARITY_DEFAULT     (DSP28335::EVEN)
 | ||||
| #endif | ||||
| 
 | ||||
| #ifndef SCIC_STOPBITS_DEFAULT | ||||
| #define SCIC_STOPBITS_DEFAULT   (DSP28335::ONE) | ||||
| #endif | ||||
| 
 | ||||
| #ifndef SCIC_LENGHT_DEFAULT | ||||
| #define SCIC_LENGHT_DEFAULT     (DSP28335::LEN8) | ||||
| #endif | ||||
| 
 | ||||
| #ifndef SCIC_GPIO_SETUP_DEFAULT | ||||
| #define SCIC_GPIO_SETUP_DEFAULT (&DSP28335::GPIO::gpio_scic_setup) | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| namespace DSP28335 | ||||
| { | ||||
| 
 | ||||
| class SCIC: public SCIBase | ||||
| { | ||||
| public: | ||||
|     SCIC(volatile struct SCI_REGS& SciRegs); | ||||
|     void setup(); | ||||
|     void setup(DSP28335::SCISetup& setup); | ||||
|     void get_default_configuration(DSP28335::SCIConfiguration& config); | ||||
|     void get_configuration(DSP28335::SCIConfiguration& config); | ||||
|     void set_configuration(DSP28335::SCIConfiguration& config); | ||||
|     bool compare_configuration(DSP28335::SCIConfiguration& config); | ||||
| protected: | ||||
|     void _configure(DSP28335::SCIConfiguration& config); | ||||
| }; | ||||
| 
 | ||||
| } /* namespace DSP28335 */ | ||||
| 
 | ||||
| #endif /* DSP28335_SCIC_H_ */ | ||||
| @ -0,0 +1,243 @@ | ||||
| /*
 | ||||
|  * 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 */ | ||||
| @ -0,0 +1,101 @@ | ||||
| /*
 | ||||
|  * 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_ */ | ||||
| @ -0,0 +1,16 @@ | ||||
| /*
 | ||||
|  * SPIBase.cpp | ||||
|  * | ||||
|  *      Author: Aleksey Gerasimenko | ||||
|  *      gerasimenko.aleksey.n@gmail.com | ||||
|  */ | ||||
| 
 | ||||
| #include "DSP28335/SPIBase.h" | ||||
| 
 | ||||
| namespace DSP28335 | ||||
| { | ||||
| //CONSTRUCTOR
 | ||||
| SPIBase::SPIBase() | ||||
| {}//CONSTRUCTOR
 | ||||
| 
 | ||||
| } /* namespace DSP28335 */ | ||||
| @ -0,0 +1,53 @@ | ||||
| /*
 | ||||
|  * 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_ */ | ||||
| @ -0,0 +1,232 @@ | ||||
| /*
 | ||||
|  * 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 */ | ||||
| @ -0,0 +1,41 @@ | ||||
| /*
 | ||||
|  * 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_ */ | ||||
| @ -0,0 +1,70 @@ | ||||
| //###########################################################################
 | ||||
| //
 | ||||
| // FILE:	DSP2833x_Adc.c
 | ||||
| //
 | ||||
| // TITLE:	DSP2833x ADC Initialization & Support Functions.
 | ||||
| //
 | ||||
| //###########################################################################
 | ||||
| // $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $
 | ||||
| // $Release Date: November  1, 2016 $
 | ||||
| // $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated -
 | ||||
| //             http://www.ti.com/ ALL RIGHTS RESERVED $
 | ||||
| //###########################################################################
 | ||||
| 
 | ||||
| //
 | ||||
| // Included Files
 | ||||
| //
 | ||||
| #include "F28335/DSP2833x_Device.h"     // DSP2833x Headerfile Include File | ||||
| #include "F28335/DSP2833x_Examples.h"   // DSP2833x Examples Include File | ||||
| 
 | ||||
| //
 | ||||
| // Defines
 | ||||
| //
 | ||||
| #define ADC_usDELAY  5000L | ||||
| 
 | ||||
| //
 | ||||
| // InitAdc - This function initializes ADC to a known state.
 | ||||
| //
 | ||||
| void  | ||||
| InitAdc(void) | ||||
| { | ||||
|     //extern void DSP28x_usDelay(Uint32 Count);
 | ||||
|     extern void DelayUs(Uint16); | ||||
| 
 | ||||
|     //
 | ||||
|     //                          *IMPORTANT*
 | ||||
|     // The ADC_cal function, which  copies the ADC calibration values from 
 | ||||
|     // TI reserved OTP into the ADCREFSEL and ADCOFFTRIM registers, occurs 
 | ||||
|     // automatically in the Boot ROM. If the boot ROM code is bypassed during
 | ||||
|     // the debug process, the following function MUST be called for the ADC to
 | ||||
|     // function according to specification. The clocks to the ADC MUST be 
 | ||||
|     // enabled before calling this function. See the device data manual and/or
 | ||||
|     // the ADC Reference Manual for more information.
 | ||||
|     //
 | ||||
|     EALLOW; | ||||
|     SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1; | ||||
|     ADC_cal(); | ||||
|     EDIS; | ||||
| 
 | ||||
|     //
 | ||||
|     // To powerup the ADC the ADCENCLK bit should be set first to enable
 | ||||
|     // clocks, followed by powering up the bandgap, reference circuitry, and 
 | ||||
|     // ADC core. Before the first conversion is performed a 5ms delay must be
 | ||||
|     // observed after power up to give all analog circuits time to power up 
 | ||||
|     // and settle
 | ||||
|     //
 | ||||
| 
 | ||||
|     //
 | ||||
|     // Please note that for the delay function below to operate correctly the
 | ||||
|     // CPU_RATE define statement in the DSP2833x_Examples.h file must
 | ||||
|     // contain the correct CPU clock period in nanoseconds.
 | ||||
|     //
 | ||||
|     AdcRegs.ADCTRL3.all = 0x00E0;  // Power up bandgap/reference/ADC circuits
 | ||||
|     DELAY_US(5000);         // Delay before converting ADC channels
 | ||||
|     //
 | ||||
| } | ||||
| 
 | ||||
| //
 | ||||
| // End of file
 | ||||
| //
 | ||||
| 
 | ||||
| @ -0,0 +1,254 @@ | ||||
| //###########################################################################
 | ||||
| //
 | ||||
| // FILE:   DSP2833x_Adc.h
 | ||||
| //
 | ||||
| // TITLE:  DSP2833x Device ADC Register Definitions.
 | ||||
| //
 | ||||
| //###########################################################################
 | ||||
| // $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $
 | ||||
| // $Release Date: November  1, 2016 $
 | ||||
| // $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated -
 | ||||
| //             http://www.ti.com/ ALL RIGHTS RESERVED $
 | ||||
| //###########################################################################
 | ||||
| 
 | ||||
| #ifndef DSP2833x_ADC_H | ||||
| #define DSP2833x_ADC_H | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
| 
 | ||||
| //
 | ||||
| // ADC Individual Register Bit Definitions:
 | ||||
| //
 | ||||
| struct ADCTRL1_BITS {     // bits  description
 | ||||
|     Uint16  rsvd1:4;      // 3:0   reserved
 | ||||
|     Uint16  SEQ_CASC:1;   // 4     Cascaded sequencer mode
 | ||||
|     Uint16  SEQ_OVRD:1;   // 5     Sequencer override 
 | ||||
|     Uint16  CONT_RUN:1;   // 6     Continuous run
 | ||||
|     Uint16  CPS:1;        // 7     ADC core clock pre-scalar
 | ||||
|     Uint16  ACQ_PS:4;     // 11:8  Acquisition window size
 | ||||
|     Uint16  SUSMOD:2;     // 13:12 Emulation suspend mode
 | ||||
|     Uint16  RESET:1;      // 14    ADC reset
 | ||||
|     Uint16  rsvd2:1;      // 15    reserved
 | ||||
| }; | ||||
| 
 | ||||
| union ADCTRL1_REG { | ||||
|    Uint16                all; | ||||
|    struct ADCTRL1_BITS   bit; | ||||
| }; | ||||
| 
 | ||||
| struct ADCTRL2_BITS {         // bits  description
 | ||||
|     Uint16  EPWM_SOCB_SEQ2:1; // 0     EPWM compare B SOC mask for SEQ2
 | ||||
|     Uint16  rsvd1:1;          // 1     reserved
 | ||||
|     Uint16  INT_MOD_SEQ2:1;   // 2     SEQ2 Interrupt mode
 | ||||
|     Uint16  INT_ENA_SEQ2:1;   // 3     SEQ2 Interrupt enable
 | ||||
|     Uint16  rsvd2:1;          // 4     reserved
 | ||||
|     Uint16  SOC_SEQ2:1;       // 5     Start of conversion for SEQ2
 | ||||
|     Uint16  RST_SEQ2:1;       // 6     Reset SEQ2
 | ||||
|     Uint16  EXT_SOC_SEQ1:1;   // 7     External start of conversion for SEQ1
 | ||||
|     Uint16  EPWM_SOCA_SEQ1:1; // 8     EPWM compare B SOC mask for SEQ1
 | ||||
|     Uint16  rsvd3:1;          // 9     reserved
 | ||||
|     Uint16  INT_MOD_SEQ1:1;   // 10    SEQ1 Interrupt mode
 | ||||
|     Uint16  INT_ENA_SEQ1:1;   // 11    SEQ1 Interrupt enable
 | ||||
|     Uint16  rsvd4:1;          // 12    reserved
 | ||||
|     Uint16  SOC_SEQ1:1;       // 13    Start of conversion trigger for SEQ1
 | ||||
|     Uint16  RST_SEQ1:1;       // 14    Restart sequencer 1   
 | ||||
|     Uint16  EPWM_SOCB_SEQ:1;  // 15    EPWM compare B SOC enable
 | ||||
| }; | ||||
| 
 | ||||
| union ADCTRL2_REG { | ||||
|    Uint16                all; | ||||
|    struct ADCTRL2_BITS   bit; | ||||
| }; | ||||
| 
 | ||||
| struct ADCASEQSR_BITS {       // bits   description
 | ||||
|     Uint16  SEQ1_STATE:4;     // 3:0    SEQ1 state
 | ||||
|     Uint16  SEQ2_STATE:3;     // 6:4    SEQ2 state
 | ||||
|     Uint16  rsvd1:1;          // 7      reserved
 | ||||
|     Uint16  SEQ_CNTR:4;       // 11:8   Sequencing counter status 
 | ||||
|     Uint16  rsvd2:4;          // 15:12  reserved  
 | ||||
| }; | ||||
| 
 | ||||
| union ADCASEQSR_REG { | ||||
|     Uint16                 all; | ||||
|     struct ADCASEQSR_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| struct ADCMAXCONV_BITS {      // bits  description
 | ||||
|     Uint16  MAX_CONV1:4;      // 3:0   Max number of conversions
 | ||||
|     Uint16  MAX_CONV2:3;      // 6:4   Max number of conversions    
 | ||||
|     Uint16  rsvd1:9;          // 15:7  reserved 
 | ||||
| }; | ||||
| 
 | ||||
| union ADCMAXCONV_REG { | ||||
|     Uint16                  all; | ||||
|     struct ADCMAXCONV_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| struct ADCCHSELSEQ1_BITS {    // bits   description
 | ||||
|     Uint16  CONV00:4;         // 3:0    Conversion selection 00
 | ||||
|     Uint16  CONV01:4;         // 7:4    Conversion selection 01
 | ||||
|     Uint16  CONV02:4;         // 11:8   Conversion selection 02
 | ||||
|     Uint16  CONV03:4;         // 15:12  Conversion selection 03
 | ||||
| }; | ||||
| 
 | ||||
| union  ADCCHSELSEQ1_REG{ | ||||
|     Uint16                    all; | ||||
|     struct ADCCHSELSEQ1_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| struct ADCCHSELSEQ2_BITS {    // bits   description
 | ||||
|     Uint16  CONV04:4;         // 3:0    Conversion selection 04
 | ||||
|     Uint16  CONV05:4;         // 7:4    Conversion selection 05
 | ||||
|     Uint16  CONV06:4;         // 11:8   Conversion selection 06
 | ||||
|     Uint16  CONV07:4;         // 15:12  Conversion selection 07
 | ||||
| }; | ||||
| 
 | ||||
| union  ADCCHSELSEQ2_REG{ | ||||
|     Uint16                    all; | ||||
|     struct ADCCHSELSEQ2_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| struct ADCCHSELSEQ3_BITS {    // bits   description
 | ||||
|     Uint16  CONV08:4;         // 3:0    Conversion selection 08
 | ||||
|     Uint16  CONV09:4;         // 7:4    Conversion selection 09
 | ||||
|     Uint16  CONV10:4;         // 11:8   Conversion selection 10
 | ||||
|     Uint16  CONV11:4;         // 15:12  Conversion selection 11
 | ||||
| }; | ||||
| 
 | ||||
| union  ADCCHSELSEQ3_REG{ | ||||
|     Uint16                    all; | ||||
|     struct ADCCHSELSEQ3_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| struct ADCCHSELSEQ4_BITS {    // bits   description
 | ||||
|     Uint16  CONV12:4;         // 3:0    Conversion selection 12
 | ||||
|     Uint16  CONV13:4;         // 7:4    Conversion selection 13
 | ||||
|     Uint16  CONV14:4;         // 11:8   Conversion selection 14
 | ||||
|     Uint16  CONV15:4;         // 15:12  Conversion selection 15
 | ||||
| }; | ||||
| 
 | ||||
| union  ADCCHSELSEQ4_REG { | ||||
|     Uint16                    all; | ||||
|     struct ADCCHSELSEQ4_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| struct ADCTRL3_BITS {         // bits   description
 | ||||
|     Uint16   SMODE_SEL:1;     // 0      Sampling mode select
 | ||||
|     Uint16   ADCCLKPS:4;      // 4:1    ADC core clock divider
 | ||||
|     Uint16   ADCPWDN:1;       // 5      ADC powerdown
 | ||||
|     Uint16   ADCBGRFDN:2;     // 7:6    ADC bandgap/ref power down
 | ||||
|     Uint16   rsvd1:8;         // 15:8   reserved
 | ||||
| };  | ||||
| 
 | ||||
| union  ADCTRL3_REG { | ||||
|     Uint16                all; | ||||
|     struct ADCTRL3_BITS   bit; | ||||
| }; | ||||
| 
 | ||||
| struct ADCST_BITS {           // bits   description
 | ||||
|     Uint16   INT_SEQ1:1;      // 0      SEQ1 Interrupt flag  
 | ||||
|     Uint16   INT_SEQ2:1;      // 1      SEQ2 Interrupt flag
 | ||||
|     Uint16   SEQ1_BSY:1;      // 2      SEQ1 busy status
 | ||||
|     Uint16   SEQ2_BSY:1;      // 3      SEQ2 busy status
 | ||||
|     Uint16   INT_SEQ1_CLR:1;  // 4      SEQ1 Interrupt clear
 | ||||
|     Uint16   INT_SEQ2_CLR:1;  // 5      SEQ2 Interrupt clear
 | ||||
|     Uint16   EOS_BUF1:1;      // 6      End of sequence buffer1
 | ||||
|     Uint16   EOS_BUF2:1;      // 7      End of sequence buffer2
 | ||||
|     Uint16   rsvd1:8;         // 15:8   reserved
 | ||||
| }; | ||||
|                             | ||||
| union  ADCST_REG {             | ||||
|     Uint16             all;     | ||||
|     struct ADCST_BITS  bit;     | ||||
| };                            | ||||
| 
 | ||||
| struct ADCREFSEL_BITS {       // bits   description
 | ||||
| 	Uint16   rsvd1:14;        // 13:0   reserved  
 | ||||
| 	Uint16   REF_SEL:2;       // 15:14  Reference select
 | ||||
| }; | ||||
| union ADCREFSEL_REG { | ||||
| 	Uint16		all; | ||||
| 	struct ADCREFSEL_BITS bit; | ||||
| }; | ||||
| 
 | ||||
| struct ADCOFFTRIM_BITS{       // bits   description
 | ||||
| 	int16	OFFSET_TRIM:9;    // 8:0    Offset Trim  
 | ||||
| 	Uint16	rsvd1:7;          // 15:9   reserved
 | ||||
| }; | ||||
| 
 | ||||
| union ADCOFFTRIM_REG{ | ||||
| 	Uint16		all; | ||||
| 	struct ADCOFFTRIM_BITS bit; | ||||
| }; | ||||
| 
 | ||||
| struct ADC_REGS { | ||||
|     union ADCTRL1_REG      ADCTRL1;       //ADC Control 1
 | ||||
|     union ADCTRL2_REG      ADCTRL2;       //ADC Control 2
 | ||||
|     union ADCMAXCONV_REG   ADCMAXCONV;    //Max conversions
 | ||||
|     union ADCCHSELSEQ1_REG ADCCHSELSEQ1;  //Channel select sequencing control 1
 | ||||
|     union ADCCHSELSEQ2_REG ADCCHSELSEQ2;  //Channel select sequencing control 2
 | ||||
|     union ADCCHSELSEQ3_REG ADCCHSELSEQ3;  //Channel select sequencing control 3
 | ||||
|     union ADCCHSELSEQ4_REG ADCCHSELSEQ4;  //Channel select sequencing control 4
 | ||||
|     union ADCASEQSR_REG    ADCASEQSR;     //Autosequence status register
 | ||||
|     Uint16                 ADCRESULT0;    //Conversion Result Buffer 0
 | ||||
|     Uint16                 ADCRESULT1;    //Conversion Result Buffer 1
 | ||||
|     Uint16                 ADCRESULT2;    //Conversion Result Buffer 2
 | ||||
|     Uint16                 ADCRESULT3;    //Conversion Result Buffer 3
 | ||||
|     Uint16                 ADCRESULT4;    //Conversion Result Buffer 4
 | ||||
|     Uint16                 ADCRESULT5;    //Conversion Result Buffer 5
 | ||||
|     Uint16                 ADCRESULT6;    //Conversion Result Buffer 6
 | ||||
|     Uint16                 ADCRESULT7;    //Conversion Result Buffer 7
 | ||||
|     Uint16                 ADCRESULT8;    //Conversion Result Buffer 8
 | ||||
|     Uint16                 ADCRESULT9;    //Conversion Result Buffer 9
 | ||||
|     Uint16                 ADCRESULT10;   //Conversion Result Buffer 10
 | ||||
|     Uint16                 ADCRESULT11;   //Conversion Result Buffer 11
 | ||||
|     Uint16                 ADCRESULT12;   //Conversion Result Buffer 12
 | ||||
|     Uint16                 ADCRESULT13;   //Conversion Result Buffer 13
 | ||||
|     Uint16                 ADCRESULT14;   //Conversion Result Buffer 14
 | ||||
|     Uint16                 ADCRESULT15;   //Conversion Result Buffer 15
 | ||||
|     union ADCTRL3_REG      ADCTRL3;       //ADC Control 3  
 | ||||
|     union ADCST_REG        ADCST;         //ADC Status Register
 | ||||
|     Uint16				   rsvd1; | ||||
|     Uint16                 rsvd2; | ||||
|     union ADCREFSEL_REG    ADCREFSEL;     //Reference Select Register
 | ||||
|     union ADCOFFTRIM_REG   ADCOFFTRIM;    //Offset Trim Register
 | ||||
| }; | ||||
| 
 | ||||
| struct ADC_RESULT_MIRROR_REGS | ||||
| { | ||||
|     Uint16                 ADCRESULT0;    // Conversion Result Buffer 0
 | ||||
|     Uint16                 ADCRESULT1;    // Conversion Result Buffer 1
 | ||||
|     Uint16                 ADCRESULT2;    // Conversion Result Buffer 2
 | ||||
|     Uint16                 ADCRESULT3;    // Conversion Result Buffer 3
 | ||||
|     Uint16                 ADCRESULT4;    // Conversion Result Buffer 4
 | ||||
|     Uint16                 ADCRESULT5;    // Conversion Result Buffer 5
 | ||||
|     Uint16                 ADCRESULT6;    // Conversion Result Buffer 6
 | ||||
|     Uint16                 ADCRESULT7;    // Conversion Result Buffer 7
 | ||||
|     Uint16                 ADCRESULT8;    // Conversion Result Buffer 8
 | ||||
|     Uint16                 ADCRESULT9;    // Conversion Result Buffer 9
 | ||||
|     Uint16                 ADCRESULT10;   // Conversion Result Buffer 10
 | ||||
|     Uint16                 ADCRESULT11;   // Conversion Result Buffer 11
 | ||||
|     Uint16                 ADCRESULT12;   // Conversion Result Buffer 12
 | ||||
|     Uint16                 ADCRESULT13;   // Conversion Result Buffer 13
 | ||||
|     Uint16                 ADCRESULT14;   // Conversion Result Buffer 14
 | ||||
|     Uint16                 ADCRESULT15;   // Conversion Result Buffer 15
 | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // ADC External References & Function Declarations:
 | ||||
| //
 | ||||
| extern volatile struct ADC_REGS AdcRegs; | ||||
| extern volatile struct ADC_RESULT_MIRROR_REGS AdcMirror; | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif /* extern "C" */ | ||||
| 
 | ||||
| #endif  // end of DSP2833x_ADC_H definition
 | ||||
| 
 | ||||
| //
 | ||||
| // End of file
 | ||||
| //
 | ||||
| 
 | ||||
| @ -0,0 +1,224 @@ | ||||
| //###########################################################################
 | ||||
| //
 | ||||
| // FILE:    DSP2833x_CpuTimers.h
 | ||||
| //
 | ||||
| // TITLE:   DSP2833x CPU 32-bit Timers Register Definitions.
 | ||||
| //
 | ||||
| // NOTES:   CpuTimer1 and CpuTimer2 are reserved for use with DSP BIOS and
 | ||||
| //          other realtime operating systems.
 | ||||
| //
 | ||||
| //          Do not use these two timers in your application if you ever plan
 | ||||
| //          on integrating DSP-BIOS or another realtime OS.
 | ||||
| //
 | ||||
| //          For this reason, comment out the code to manipulate these two 
 | ||||
| //          timers if using DSP-BIOS or another realtime OS.
 | ||||
| //
 | ||||
| //###########################################################################
 | ||||
| // $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $
 | ||||
| // $Release Date: November  1, 2016 $
 | ||||
| // $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated -
 | ||||
| //             http://www.ti.com/ ALL RIGHTS RESERVED $
 | ||||
| //###########################################################################
 | ||||
| 
 | ||||
| #ifndef DSP2833x_CPU_TIMERS_H | ||||
| #define DSP2833x_CPU_TIMERS_H | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
| 
 | ||||
| //
 | ||||
| // CPU Timer Register Bit Definitions
 | ||||
| //
 | ||||
| 
 | ||||
| //
 | ||||
| // TCR: Control register bit definitions
 | ||||
| //
 | ||||
| struct  TCR_BITS {           // bits  description
 | ||||
|     Uint16    rsvd1:4;       // 3:0   reserved
 | ||||
|     Uint16    TSS:1;         // 4     Timer Start/Stop
 | ||||
|     Uint16    TRB:1;         // 5     Timer reload
 | ||||
|     Uint16    rsvd2:4;       // 9:6   reserved
 | ||||
|     Uint16    SOFT:1;        // 10    Emulation modes
 | ||||
|     Uint16    FREE:1;        // 11
 | ||||
|     Uint16    rsvd3:2;       // 12:13 reserved
 | ||||
|     Uint16    TIE:1;         // 14    Output enable
 | ||||
|     Uint16    TIF:1;         // 15    Interrupt flag
 | ||||
| }; | ||||
| 
 | ||||
| union TCR_REG { | ||||
|     Uint16           all; | ||||
|     struct TCR_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // TPR: Pre-scale low bit definitions
 | ||||
| //
 | ||||
| struct  TPR_BITS {         // bits  description
 | ||||
|     Uint16     TDDR:8;     // 7:0   Divide-down low
 | ||||
|     Uint16     PSC:8;      // 15:8  Prescale counter low
 | ||||
| }; | ||||
| 
 | ||||
| union TPR_REG { | ||||
|    Uint16           all; | ||||
|    struct TPR_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // TPRH: Pre-scale high bit definitions
 | ||||
| //
 | ||||
| struct  TPRH_BITS {          // bits  description
 | ||||
|     Uint16     TDDRH:8;      // 7:0   Divide-down high
 | ||||
|     Uint16     PSCH:8;       // 15:8  Prescale counter high
 | ||||
| }; | ||||
| 
 | ||||
| union TPRH_REG { | ||||
|     Uint16           all; | ||||
|     struct TPRH_BITS bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // TIM, TIMH: Timer register definitions
 | ||||
| //
 | ||||
| struct TIM_REG { | ||||
|     Uint16  LSW; | ||||
|     Uint16  MSW; | ||||
| }; | ||||
| 
 | ||||
| union TIM_GROUP { | ||||
|     Uint32          all; | ||||
|     struct TIM_REG  half; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // PRD, PRDH: Period register definitions
 | ||||
| //
 | ||||
| struct PRD_REG { | ||||
|     Uint16  LSW; | ||||
|     Uint16  MSW; | ||||
| }; | ||||
| 
 | ||||
| union PRD_GROUP { | ||||
|     Uint32          all; | ||||
|     struct PRD_REG  half; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // CPU Timer Register File
 | ||||
| //
 | ||||
| struct CPUTIMER_REGS { | ||||
|     union TIM_GROUP TIM;   // Timer counter register
 | ||||
|     union PRD_GROUP PRD;   // Period register
 | ||||
|     union TCR_REG   TCR;   // Timer control register
 | ||||
|     Uint16          rsvd1; // reserved
 | ||||
|     union TPR_REG   TPR;   // Timer pre-scale low
 | ||||
|     union TPRH_REG  TPRH;  // Timer pre-scale high
 | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // CPU Timer Support Variables
 | ||||
| //
 | ||||
| struct CPUTIMER_VARS { | ||||
|     volatile struct  CPUTIMER_REGS  *RegsAddr; | ||||
|     Uint32    InterruptCount; | ||||
|     float   CPUFreqInMHz; | ||||
|     float   PeriodInUSec; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // Function prototypes and external definitions
 | ||||
| //
 | ||||
| void InitCpuTimers(void); | ||||
| void ConfigCpuTimer(struct CPUTIMER_VARS *Timer, float Freq, float Period); | ||||
| 
 | ||||
| extern volatile struct CPUTIMER_REGS CpuTimer0Regs; | ||||
| extern struct CPUTIMER_VARS CpuTimer0; | ||||
| 
 | ||||
| //
 | ||||
| // CpuTimer 1 and CpuTimer2 are reserved for DSP BIOS & other RTOS. 
 | ||||
| // Comment out CpuTimer1 and CpuTimer2 if using DSP BIOS or other RTOS
 | ||||
| //
 | ||||
| extern volatile struct CPUTIMER_REGS CpuTimer1Regs; | ||||
| extern volatile struct CPUTIMER_REGS CpuTimer2Regs; | ||||
| 
 | ||||
| extern struct CPUTIMER_VARS CpuTimer1; | ||||
| extern struct CPUTIMER_VARS CpuTimer2; | ||||
| 
 | ||||
| //
 | ||||
| // Defines for useful Timer Operations:
 | ||||
| //
 | ||||
| 
 | ||||
| //
 | ||||
| // Start Timer
 | ||||
| //
 | ||||
| #define StartCpuTimer0()   CpuTimer0Regs.TCR.bit.TSS = 0 | ||||
| 
 | ||||
| //
 | ||||
| // Stop Timer
 | ||||
| //
 | ||||
| #define StopCpuTimer0()   CpuTimer0Regs.TCR.bit.TSS = 1 | ||||
| 
 | ||||
| //
 | ||||
| // Reload Timer With period Value
 | ||||
| //
 | ||||
| #define ReloadCpuTimer0() CpuTimer0Regs.TCR.bit.TRB = 1 | ||||
| 
 | ||||
| //
 | ||||
| // Read 32-Bit Timer Value
 | ||||
| //
 | ||||
| #define ReadCpuTimer0Counter() CpuTimer0Regs.TIM.all | ||||
| 
 | ||||
| //
 | ||||
| // Read 32-Bit Period Value
 | ||||
| //
 | ||||
| #define ReadCpuTimer0Period() CpuTimer0Regs.PRD.all | ||||
| 
 | ||||
| //
 | ||||
| // CpuTimer 1 and CpuTimer2 are reserved for DSP BIOS & other RTOS
 | ||||
| // Do not use these two timers if you ever plan on integrating
 | ||||
| // DSP-BIOS or another realtime OS.
 | ||||
| //
 | ||||
| // For this reason, comment out the code to manipulate these two timers
 | ||||
| // if using DSP-BIOS or another realtime OS.
 | ||||
| //
 | ||||
| 
 | ||||
| //
 | ||||
| // Start Timer
 | ||||
| //
 | ||||
| #define StartCpuTimer1()   CpuTimer1Regs.TCR.bit.TSS = 0 | ||||
| #define StartCpuTimer2()   CpuTimer2Regs.TCR.bit.TSS = 0 | ||||
| 
 | ||||
| //
 | ||||
| // Stop Timer
 | ||||
| //
 | ||||
| #define StopCpuTimer1()   CpuTimer1Regs.TCR.bit.TSS = 1 | ||||
| #define StopCpuTimer2()   CpuTimer2Regs.TCR.bit.TSS = 1 | ||||
| 
 | ||||
| //
 | ||||
| // Reload Timer With period Value
 | ||||
| //
 | ||||
| #define ReloadCpuTimer1() CpuTimer1Regs.TCR.bit.TRB = 1 | ||||
| #define ReloadCpuTimer2() CpuTimer2Regs.TCR.bit.TRB = 1 | ||||
| 
 | ||||
| //
 | ||||
| // Read 32-Bit Timer Value
 | ||||
| //
 | ||||
| #define ReadCpuTimer1Counter() CpuTimer1Regs.TIM.all | ||||
| #define ReadCpuTimer2Counter() CpuTimer2Regs.TIM.all | ||||
| 
 | ||||
| //
 | ||||
| // Read 32-Bit Period Value
 | ||||
| //
 | ||||
| #define ReadCpuTimer1Period() CpuTimer1Regs.PRD.all | ||||
| #define ReadCpuTimer2Period() CpuTimer2Regs.PRD.all | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif /* extern "C" */ | ||||
| 
 | ||||
| #endif  // end of DSP2833x_CPU_TIMERS_H definition
 | ||||
| 
 | ||||
| //
 | ||||
| // End of file
 | ||||
| //
 | ||||
| 
 | ||||
| @ -0,0 +1,366 @@ | ||||
| //###########################################################################
 | ||||
| //
 | ||||
| // FILE:   DSP2833x_DMA.h
 | ||||
| //
 | ||||
| // TITLE:  DSP2833x DMA Module Register Bit Definitions.
 | ||||
| //
 | ||||
| //###########################################################################
 | ||||
| // $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $
 | ||||
| // $Release Date: November  1, 2016 $
 | ||||
| // $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated -
 | ||||
| //             http://www.ti.com/ ALL RIGHTS RESERVED $
 | ||||
| //###########################################################################
 | ||||
| 
 | ||||
| #ifndef DSP2833x_DMA_H | ||||
| #define DSP2833x_DMA_H | ||||
| 
 | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
| 
 | ||||
| //
 | ||||
| // Channel MODE register bit definitions
 | ||||
| //
 | ||||
| struct MODE_BITS {      // bits   description
 | ||||
|     Uint16 PERINTSEL:5; // 4:0 Peripheral Interrupt and Sync Select Bits (R/W):
 | ||||
|                         //        0     no interrupt
 | ||||
|                         //        1     SEQ1INT & ADCSYNC
 | ||||
|                         //        2     SEQ2INT
 | ||||
|                         //        3     XINT1
 | ||||
|                         //        4     XINT2
 | ||||
|                         //        5     XINT3
 | ||||
|                         //        6     XINT4
 | ||||
|                         //        7     XINT5
 | ||||
|                         //        8     XINT6
 | ||||
|                         //        9     XINT7
 | ||||
|                         //        10    XINT13
 | ||||
|                         //        11    TINT0
 | ||||
|                         //        12    TINT1
 | ||||
|                         //        13    TINT2
 | ||||
|                         //        14    MXEVTA & MXSYNCA
 | ||||
|                         //        15    MREVTA & MRSYNCA
 | ||||
|                         //        16    MXEVTB & MXSYNCB
 | ||||
|                         //        17    MREVTB & MRSYNCB
 | ||||
|                         //        18    ePWM1SOCA
 | ||||
|                         //        19    ePWM1SOCB
 | ||||
|                         //        20    ePWM2SOCA
 | ||||
|                         //        21    ePWM2SOCB
 | ||||
|                         //        22    ePWM3SOCA
 | ||||
|                         //        23    ePWM3SOCB
 | ||||
|                         //        24    ePWM4SOCA
 | ||||
|                         //        25    ePWM4SOCB
 | ||||
|                         //        26    ePWM5SOCA
 | ||||
|                         //        27    ePWM5SOCB
 | ||||
|                         //        28    ePWM6SOCA
 | ||||
|                         //        29    ePWM6SOCB
 | ||||
|                         //        30:31 no interrupt
 | ||||
|     Uint16 rsvd1:2;     // 6:5    (R=0:0)
 | ||||
|     Uint16 OVRINTE:1;   // 7      Overflow Interrupt Enable (R/W):
 | ||||
|                         //        0     overflow interrupt disabled
 | ||||
|                         //        1     overflow interrupt enabled
 | ||||
|     Uint16 PERINTE:1;   // 8      Peripheral Interrupt Enable Bit (R/W):
 | ||||
|                         //        0     peripheral interrupt disabled
 | ||||
|                         //        1     peripheral interrupt enabled
 | ||||
|     Uint16 CHINTMODE:1; // 9      Channel Interrupt Mode Bit (R/W):
 | ||||
|                         //        0     generate interrupt at beginning of new 
 | ||||
|                         //              transfer
 | ||||
|                         //        1     generate interrupt at end of transfer
 | ||||
|     Uint16 ONESHOT:1;   // 10     One Shot Mode Bit (R/W):
 | ||||
|                         //        0     only interrupt event triggers single 
 | ||||
|                         //              burst transfer
 | ||||
|                         //        1     first interrupt triggers burst, 
 | ||||
|                         //              continue until transfer count is zero
 | ||||
|     Uint16 CONTINUOUS:1;// 11     Continous Mode Bit (R/W):
 | ||||
|                         //        0     stop when transfer count is zero
 | ||||
|                         //        1     re-initialize when transfer count is 
 | ||||
|                         //              zero
 | ||||
|     Uint16 SYNCE:1;     // 12     Sync Enable Bit (R/W):
 | ||||
|                         //        0     ignore selected interrupt sync signal
 | ||||
|                         //        1     enable selected interrupt sync signal
 | ||||
|     Uint16 SYNCSEL:1;   // 13     Sync Select Bit (R/W):
 | ||||
|                         //        0     sync signal controls source wrap 
 | ||||
|                         //              counter
 | ||||
|                         //        1     sync signal controls destination wrap 
 | ||||
|                         //              counter
 | ||||
|     Uint16 DATASIZE:1;  // 14     Data Size Mode Bit (R/W):
 | ||||
|                         //        0     16-bit data transfer size
 | ||||
|                         //        1     32-bit data transfer size
 | ||||
|     Uint16 CHINTE:1;    // 15     Channel Interrupt Enable Bit (R/W):
 | ||||
|                         //        0     channel interrupt disabled
 | ||||
|                         //        1     channel interrupt enabled
 | ||||
| }; | ||||
| 
 | ||||
| union MODE_REG { | ||||
|     Uint16                all; | ||||
|     struct MODE_BITS      bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // Channel CONTROL register bit definitions
 | ||||
| //
 | ||||
| struct CONTROL_BITS {       // bits   description
 | ||||
|     Uint16 RUN:1;           // 0      Run Bit (R=0/W=1)
 | ||||
|     Uint16 HALT:1;          // 1      Halt Bit (R=0/W=1)
 | ||||
|     Uint16 SOFTRESET:1;     // 2      Soft Reset Bit (R=0/W=1)
 | ||||
|     Uint16 PERINTFRC:1;     // 3      Interrupt Force Bit (R=0/W=1)
 | ||||
|     Uint16 PERINTCLR:1;     // 4      Interrupt Clear Bit (R=0/W=1)
 | ||||
|     Uint16 SYNCFRC:1;       // 5      Sync Force Bit (R=0/W=1)
 | ||||
|     Uint16 SYNCCLR:1;       // 6      Sync Clear Bit (R=0/W=1)
 | ||||
|     Uint16 ERRCLR:1;        // 7      Error Clear Bit (R=0/W=1)
 | ||||
|     Uint16 PERINTFLG:1;     // 8      Interrupt Flag Bit (R):
 | ||||
|                             //        0     no interrupt pending
 | ||||
|                             //        1     interrupt pending
 | ||||
|     Uint16 SYNCFLG:1;       // 9      Sync Flag Bit (R):
 | ||||
|                             //        0     no sync pending
 | ||||
|                             //        1     sync pending
 | ||||
|     Uint16 SYNCERR:1;       // 10     Sync Error Flag Bit (R):
 | ||||
|                             //        0     no sync error
 | ||||
|                             //        1     sync error detected
 | ||||
|     Uint16 TRANSFERSTS:1;   // 11     Transfer Status Bit (R):
 | ||||
|                             //        0     no transfer in progress or pending
 | ||||
|                             //        1     transfer in progress or pending
 | ||||
|     Uint16 BURSTSTS:1;      // 12     Burst Status Bit (R):
 | ||||
|                             //        0     no burst in progress or pending
 | ||||
|                             //        1     burst in progress or pending
 | ||||
|     Uint16 RUNSTS:1;        // 13     Run Status Bit (R):
 | ||||
|                             //        0     channel not running or halted
 | ||||
|                             //        1     channel running
 | ||||
|     Uint16 OVRFLG:1;        // 14     Overflow Flag Bit(R)
 | ||||
|                             //        0     no overflow event
 | ||||
|                             //        1     overflow event
 | ||||
|     Uint16 rsvd1:1;         // 15     (R=0)
 | ||||
| }; | ||||
| 
 | ||||
| union CONTROL_REG { | ||||
|     Uint16                 all; | ||||
|     struct CONTROL_BITS    bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // DMACTRL register bit definitions
 | ||||
| //
 | ||||
| struct DMACTRL_BITS {         // bits   description
 | ||||
|     Uint16 HARDRESET:1;       // 0      Hard Reset Bit (R=0/W=1)
 | ||||
|     Uint16 PRIORITYRESET:1;   // 1      Priority Reset Bit (R=0/W=1)
 | ||||
|     Uint16 rsvd1:14;          // 15:2   (R=0:0)
 | ||||
| }; | ||||
| 
 | ||||
| union DMACTRL_REG { | ||||
|     Uint16                 all; | ||||
|     struct DMACTRL_BITS    bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // DEBUGCTRL register bit definitions
 | ||||
| //
 | ||||
| struct DEBUGCTRL_BITS {     // bits   description
 | ||||
|     Uint16 rsvd1:15;        // 14:0   (R=0:0)
 | ||||
|     Uint16 FREE:1;          // 15     Debug Mode Bit (R/W):
 | ||||
|                             //    0   halt after current read-write operation
 | ||||
|                             //    1   continue running
 | ||||
| }; | ||||
| 
 | ||||
| union DEBUGCTRL_REG { | ||||
|     Uint16                 all; | ||||
|     struct DEBUGCTRL_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // PRIORITYCTRL1 register bit definitions
 | ||||
| //
 | ||||
| struct PRIORITYCTRL1_BITS { // bits   description
 | ||||
|    Uint16 CH1PRIORITY:1;    //     0      Ch1 Priority Bit (R/W):
 | ||||
|                             //     0     same priority as all other channels
 | ||||
|                             //     1     highest priority channel
 | ||||
|    Uint16 rsvd1:15;         // 15:1   (R=0:0)
 | ||||
| }; | ||||
| 
 | ||||
| union PRIORITYCTRL1_REG { | ||||
|     Uint16                     all; | ||||
|     struct PRIORITYCTRL1_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // PRIORITYSTAT register bit definitions:
 | ||||
| //
 | ||||
| struct PRIORITYSTAT_BITS {     // bits   description
 | ||||
|     Uint16 ACTIVESTS:3;        // 2:0    Active Channel Status Bits (R):
 | ||||
|                                //        0,0,0  no channel active
 | ||||
|                                //        0,0,1  Ch1 channel active
 | ||||
|                                //        0,1,0  Ch2 channel active
 | ||||
|                                //        0,1,1  Ch3 channel active
 | ||||
|                                //        1,0,0  Ch4 channel active
 | ||||
|                                //        1,0,1  Ch5 channel active
 | ||||
|                                //        1,1,0  Ch6 channel active
 | ||||
|     Uint16 rsvd1:1;            // 3      (R=0)
 | ||||
|     Uint16 ACTIVESTS_SHADOW:3; // 6:4   Active Channel Status Shadow Bits (R):
 | ||||
|                                // 0,0,0 no channel active & interrupted by Ch1
 | ||||
|                                // 0,0,1 cannot occur
 | ||||
|                                // 0,1,0 Ch2 was active and interrupted by Ch1
 | ||||
|                                // 0,1,1 Ch3 was active and interrupted by Ch1
 | ||||
|                                // 1,0,0 Ch4 was active and interrupted by Ch1
 | ||||
|                                // 1,0,1 Ch5 was active and interrupted by Ch1
 | ||||
|                                // 1,1,0 Ch6 was active and interrupted by Ch1
 | ||||
|     Uint16 rsvd2:9;            // 15:7   (R=0:0)
 | ||||
| }; | ||||
| 
 | ||||
| union PRIORITYSTAT_REG { | ||||
|     Uint16                     all; | ||||
|     struct PRIORITYSTAT_BITS   bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // Burst Size
 | ||||
| //
 | ||||
| struct BURST_SIZE_BITS {   // bits  description
 | ||||
|     Uint16 BURSTSIZE:5;    // 4:0   Burst transfer size
 | ||||
|     Uint16 rsvd1:11;       // 15:5  reserved
 | ||||
| }; | ||||
| 
 | ||||
| union BURST_SIZE_REG { | ||||
|     Uint16                  all; | ||||
|     struct BURST_SIZE_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // Burst Count
 | ||||
| //
 | ||||
| struct BURST_COUNT_BITS { // bits  description
 | ||||
|     Uint16 BURSTCOUNT:5;   // 4:0   Burst transfer size
 | ||||
|     Uint16 rsvd1:11;       // 15:5  reserved
 | ||||
| }; | ||||
| 
 | ||||
| union BURST_COUNT_REG { | ||||
|     Uint16                   all; | ||||
|     struct BURST_COUNT_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // DMA Channel Registers:
 | ||||
| //
 | ||||
| struct CH_REGS { | ||||
|     union  MODE_REG            MODE;                 // Mode Register
 | ||||
|     union  CONTROL_REG         CONTROL;              // Control Register
 | ||||
| 
 | ||||
|     union  BURST_SIZE_REG      BURST_SIZE;           // Burst Size Register
 | ||||
|     union  BURST_COUNT_REG     BURST_COUNT;          // Burst Count Register
 | ||||
|      | ||||
|     //
 | ||||
|     // Source Burst Step Register
 | ||||
|     //
 | ||||
|     int16                      SRC_BURST_STEP;        | ||||
|      | ||||
|     //
 | ||||
|     // Destination Burst Step Register
 | ||||
|     //
 | ||||
|     int16                      DST_BURST_STEP; | ||||
| 
 | ||||
|     Uint16                     TRANSFER_SIZE;        // Transfer Size Register
 | ||||
|     Uint16                     TRANSFER_COUNT;       // Transfer Count Register
 | ||||
|      | ||||
|     //
 | ||||
|     // Source Transfer Step Register
 | ||||
|     //
 | ||||
|     int16                      SRC_TRANSFER_STEP; | ||||
|      | ||||
|     //
 | ||||
|     // Destination Transfer Step Register
 | ||||
|     //
 | ||||
|     int16                      DST_TRANSFER_STEP; | ||||
| 
 | ||||
|     Uint16                     SRC_WRAP_SIZE;      // Source Wrap Size Register
 | ||||
|     Uint16                     SRC_WRAP_COUNT;     // Source Wrap Count Register
 | ||||
|     int16                      SRC_WRAP_STEP;      // Source Wrap Step Register
 | ||||
| 
 | ||||
|     //
 | ||||
|     // Destination Wrap Size Register
 | ||||
|     //
 | ||||
|     Uint16                     DST_WRAP_SIZE;         | ||||
|      | ||||
|     //
 | ||||
|     // Destination Wrap Count Register
 | ||||
|     //
 | ||||
|     Uint16                     DST_WRAP_COUNT; | ||||
|      | ||||
|     //
 | ||||
|     // Destination Wrap Step Register
 | ||||
|     //
 | ||||
|     int16                      DST_WRAP_STEP; | ||||
| 
 | ||||
|     //
 | ||||
|     // Source Begin Address Shadow Register
 | ||||
|     //
 | ||||
|     Uint32                     SRC_BEG_ADDR_SHADOW; | ||||
|      | ||||
|     //
 | ||||
|     // Source Address Shadow Register
 | ||||
|     //
 | ||||
|     Uint32                     SRC_ADDR_SHADOW; | ||||
|      | ||||
|     //
 | ||||
|     // Source Begin Address Active Register
 | ||||
|     //
 | ||||
|     Uint32                     SRC_BEG_ADDR_ACTIVE; | ||||
|      | ||||
|     //
 | ||||
|     // Source Address Active Register
 | ||||
|     //
 | ||||
|     Uint32                     SRC_ADDR_ACTIVE; | ||||
| 
 | ||||
|     //
 | ||||
|     // Destination Begin Address Shadow Register
 | ||||
|     //
 | ||||
|     Uint32                     DST_BEG_ADDR_SHADOW; | ||||
|      | ||||
|     //
 | ||||
|     // Destination Address Shadow Register
 | ||||
|     //
 | ||||
|     Uint32                     DST_ADDR_SHADOW; | ||||
|      | ||||
|     //
 | ||||
|     // Destination Begin Address Active Register
 | ||||
|     //
 | ||||
|     Uint32                     DST_BEG_ADDR_ACTIVE; | ||||
|      | ||||
|     //
 | ||||
|     // Destination Address Active Register
 | ||||
|     //
 | ||||
|     Uint32                     DST_ADDR_ACTIVE; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // DMA Registers
 | ||||
| //
 | ||||
| struct DMA_REGS { | ||||
|     union  DMACTRL_REG         DMACTRL;          // DMA Control Register
 | ||||
|     union  DEBUGCTRL_REG       DEBUGCTRL;        // Debug Control Register
 | ||||
|     Uint16                     rsvd0;            // reserved
 | ||||
|     Uint16                     rsvd1;            //
 | ||||
|     union  PRIORITYCTRL1_REG   PRIORITYCTRL1;    // Priority Control 1 Register
 | ||||
|     Uint16                     rsvd2;            //
 | ||||
|     union  PRIORITYSTAT_REG    PRIORITYSTAT;     // Priority Status Register
 | ||||
|     Uint16                     rsvd3[25];        //
 | ||||
|     struct CH_REGS             CH1;              // DMA Channel 1 Registers
 | ||||
|     struct CH_REGS             CH2;              // DMA Channel 2 Registers
 | ||||
|     struct CH_REGS             CH3;              // DMA Channel 3 Registers
 | ||||
|     struct CH_REGS             CH4;              // DMA Channel 4 Registers
 | ||||
|     struct CH_REGS             CH5;              // DMA Channel 5 Registers
 | ||||
|     struct CH_REGS             CH6;              // DMA Channel 6 Registers
 | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // External References & Function Declarations
 | ||||
| //
 | ||||
| extern volatile struct DMA_REGS DmaRegs; | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif /* extern "C" */ | ||||
| 
 | ||||
| #endif  // end of DSP2833x_DMA_H definition
 | ||||
| 
 | ||||
| //
 | ||||
| // End of file 
 | ||||
| //
 | ||||
| 
 | ||||
| @ -0,0 +1,175 @@ | ||||
| //###########################################################################
 | ||||
| //
 | ||||
| // FILE:    DSP2833x_DefaultIsr.h
 | ||||
| //
 | ||||
| // TITLE:   DSP2833x Devices Default Interrupt Service Routines Definitions.
 | ||||
| //
 | ||||
| //###########################################################################
 | ||||
| // $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $
 | ||||
| // $Release Date: November  1, 2016 $
 | ||||
| // $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated -
 | ||||
| //             http://www.ti.com/ ALL RIGHTS RESERVED $
 | ||||
| //###########################################################################
 | ||||
| 
 | ||||
| #ifndef DSP2833x_DEFAULT_ISR_H | ||||
| #define DSP2833x_DEFAULT_ISR_H | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
| 
 | ||||
| //
 | ||||
| // Default Interrupt Service Routine Declarations:
 | ||||
| // 
 | ||||
| // The following function prototypes are for the 
 | ||||
| // default ISR routines used with the default PIE vector table.
 | ||||
| // This default vector table is found in the DSP2833x_PieVect.h 
 | ||||
| // file.  
 | ||||
| //
 | ||||
| 
 | ||||
| //
 | ||||
| // Non-Peripheral Interrupts
 | ||||
| //
 | ||||
| interrupt void INT13_ISR(void);     // XINT13 or CPU-Timer 1
 | ||||
| interrupt void INT14_ISR(void);     // CPU-Timer2
 | ||||
| interrupt void DATALOG_ISR(void);   // Datalogging interrupt
 | ||||
| interrupt void RTOSINT_ISR(void);   // RTOS interrupt
 | ||||
| interrupt void EMUINT_ISR(void);    // Emulation interrupt
 | ||||
| interrupt void NMI_ISR(void);       // Non-maskable interrupt
 | ||||
| interrupt void ILLEGAL_ISR(void);   // Illegal operation TRAP
 | ||||
| interrupt void USER1_ISR(void);     // User Defined trap 1
 | ||||
| interrupt void USER2_ISR(void);     // User Defined trap 2
 | ||||
| interrupt void USER3_ISR(void);     // User Defined trap 3
 | ||||
| interrupt void USER4_ISR(void);     // User Defined trap 4
 | ||||
| interrupt void USER5_ISR(void);     // User Defined trap 5
 | ||||
| interrupt void USER6_ISR(void);     // User Defined trap 6
 | ||||
| interrupt void USER7_ISR(void);     // User Defined trap 7
 | ||||
| interrupt void USER8_ISR(void);     // User Defined trap 8
 | ||||
| interrupt void USER9_ISR(void);     // User Defined trap 9
 | ||||
| interrupt void USER10_ISR(void);    // User Defined trap 10
 | ||||
| interrupt void USER11_ISR(void);    // User Defined trap 11
 | ||||
| interrupt void USER12_ISR(void);    // User Defined trap 12
 | ||||
| 
 | ||||
| //
 | ||||
| // Group 1 PIE Interrupt Service Routines
 | ||||
| //
 | ||||
| interrupt void  SEQ1INT_ISR(void);   // ADC Sequencer 1 ISR
 | ||||
| interrupt void  SEQ2INT_ISR(void);   // ADC Sequencer 2 ISR
 | ||||
| interrupt void  XINT1_ISR(void);     // External interrupt 1
 | ||||
| interrupt void  XINT2_ISR(void);     // External interrupt 2
 | ||||
| interrupt void  ADCINT_ISR(void);    // ADC
 | ||||
| interrupt void  TINT0_ISR(void);     // Timer 0
 | ||||
| interrupt void  WAKEINT_ISR(void);   // WD
 | ||||
| 
 | ||||
| //
 | ||||
| // Group 2 PIE Interrupt Service Routines
 | ||||
| //
 | ||||
| interrupt void EPWM1_TZINT_ISR(void);    // EPWM-1
 | ||||
| interrupt void EPWM2_TZINT_ISR(void);    // EPWM-2
 | ||||
| interrupt void EPWM3_TZINT_ISR(void);    // EPWM-3
 | ||||
| interrupt void EPWM4_TZINT_ISR(void);    // EPWM-4
 | ||||
| interrupt void EPWM5_TZINT_ISR(void);    // EPWM-5
 | ||||
| interrupt void EPWM6_TZINT_ISR(void);    // EPWM-6
 | ||||
|    | ||||
| //  
 | ||||
| // Group 3 PIE Interrupt Service Routines
 | ||||
| //
 | ||||
| interrupt void EPWM1_INT_ISR(void);    // EPWM-1
 | ||||
| interrupt void EPWM2_INT_ISR(void);    // EPWM-2
 | ||||
| interrupt void EPWM3_INT_ISR(void);    // EPWM-3
 | ||||
| interrupt void EPWM4_INT_ISR(void);    // EPWM-4
 | ||||
| interrupt void EPWM5_INT_ISR(void);    // EPWM-5
 | ||||
| interrupt void EPWM6_INT_ISR(void);    // EPWM-6
 | ||||
|    | ||||
| //  
 | ||||
| // Group 4 PIE Interrupt Service Routines
 | ||||
| //
 | ||||
| interrupt void ECAP1_INT_ISR(void);    // ECAP-1
 | ||||
| interrupt void ECAP2_INT_ISR(void);    // ECAP-2
 | ||||
| interrupt void ECAP3_INT_ISR(void);    // ECAP-3
 | ||||
| interrupt void ECAP4_INT_ISR(void);    // ECAP-4
 | ||||
| interrupt void ECAP5_INT_ISR(void);    // ECAP-5
 | ||||
| interrupt void ECAP6_INT_ISR(void);    // ECAP-6
 | ||||
|       | ||||
| //
 | ||||
| // Group 5 PIE Interrupt Service Routines
 | ||||
| //
 | ||||
| interrupt void EQEP1_INT_ISR(void);    // EQEP-1
 | ||||
| interrupt void EQEP2_INT_ISR(void);    // EQEP-2
 | ||||
| 
 | ||||
| //
 | ||||
| // Group 6 PIE Interrupt Service Routines
 | ||||
| //
 | ||||
| interrupt void SPIRXINTA_ISR(void);   // SPI-A
 | ||||
| interrupt void SPITXINTA_ISR(void);   // SPI-A
 | ||||
| interrupt void MRINTA_ISR(void);      // McBSP-A
 | ||||
| interrupt void MXINTA_ISR(void);      // McBSP-A
 | ||||
| interrupt void MRINTB_ISR(void);      // McBSP-B
 | ||||
| interrupt void MXINTB_ISR(void);      // McBSP-B
 | ||||
| 
 | ||||
| //
 | ||||
| // Group 7 PIE Interrupt Service Routines
 | ||||
| //
 | ||||
| interrupt void DINTCH1_ISR(void);     // DMA-Channel 1
 | ||||
| interrupt void DINTCH2_ISR(void);     // DMA-Channel 2
 | ||||
| interrupt void DINTCH3_ISR(void);     // DMA-Channel 3
 | ||||
| interrupt void DINTCH4_ISR(void);     // DMA-Channel 4
 | ||||
| interrupt void DINTCH5_ISR(void);     // DMA-Channel 5
 | ||||
| interrupt void DINTCH6_ISR(void);     // DMA-Channel 6
 | ||||
| 
 | ||||
| //
 | ||||
| // Group 8 PIE Interrupt Service Routines
 | ||||
| //
 | ||||
| interrupt void I2CINT1A_ISR(void);     // I2C-A
 | ||||
| interrupt void I2CINT2A_ISR(void);     // I2C-A
 | ||||
| interrupt void SCIRXINTC_ISR(void);    // SCI-C
 | ||||
| interrupt void SCITXINTC_ISR(void);    // SCI-C
 | ||||
|   | ||||
| // 
 | ||||
| // Group 9 PIE Interrupt Service Routines
 | ||||
| //
 | ||||
| interrupt void SCIRXINTA_ISR(void);    // SCI-A
 | ||||
| interrupt void SCITXINTA_ISR(void);    // SCI-A
 | ||||
| interrupt void SCIRXINTB_ISR(void);    // SCI-B
 | ||||
| interrupt void SCITXINTB_ISR(void);    // SCI-B
 | ||||
| interrupt void ECAN0INTA_ISR(void);    // eCAN-A
 | ||||
| interrupt void ECAN1INTA_ISR(void);    // eCAN-A
 | ||||
| interrupt void ECAN0INTB_ISR(void);    // eCAN-B
 | ||||
| interrupt void ECAN1INTB_ISR(void);    // eCAN-B
 | ||||
| 
 | ||||
| //
 | ||||
| // Group 10 PIE Interrupt Service Routines
 | ||||
| //
 | ||||
|   | ||||
| //
 | ||||
| // Group 11 PIE Interrupt Service Routines
 | ||||
| //
 | ||||
| 
 | ||||
| //
 | ||||
| // Group 12 PIE Interrupt Service Routines
 | ||||
| //
 | ||||
| interrupt void  XINT3_ISR(void);     // External interrupt 3
 | ||||
| interrupt void  XINT4_ISR(void);     // External interrupt 4
 | ||||
| interrupt void  XINT5_ISR(void);     // External interrupt 5
 | ||||
| interrupt void  XINT6_ISR(void);     // External interrupt 6
 | ||||
| interrupt void  XINT7_ISR(void);     // External interrupt 7
 | ||||
| interrupt void  LVF_ISR(void);       // Latched overflow flag
 | ||||
| interrupt void  LUF_ISR(void);       // Latched underflow flag
 | ||||
| 
 | ||||
| //
 | ||||
| // Catch-all for Reserved Locations For testing purposes
 | ||||
| //
 | ||||
| interrupt void PIE_RESERVED(void);       // Reserved for test
 | ||||
| interrupt void rsvd_ISR(void);           // for test
 | ||||
| interrupt void INT_NOTUSED_ISR(void);    // for unused interrupts
 | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif /* extern "C" */ | ||||
| 
 | ||||
| #endif    // end of DSP2833x_DEFAULT_ISR_H definition
 | ||||
| 
 | ||||
| //
 | ||||
| // End of file
 | ||||
| //
 | ||||
| 
 | ||||
| @ -0,0 +1,100 @@ | ||||
| //###########################################################################
 | ||||
| //
 | ||||
| // FILE:   DSP2833x_DevEmu.h
 | ||||
| //
 | ||||
| // TITLE:  DSP2833x Device Emulation Register Definitions.
 | ||||
| //
 | ||||
| //###########################################################################
 | ||||
| // $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $
 | ||||
| // $Release Date: November  1, 2016 $
 | ||||
| // $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated -
 | ||||
| //             http://www.ti.com/ ALL RIGHTS RESERVED $
 | ||||
| //###########################################################################
 | ||||
| 
 | ||||
| #ifndef DSP2833x_DEV_EMU_H | ||||
| #define DSP2833x_DEV_EMU_H | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
| 
 | ||||
| //
 | ||||
| // Device Emulation Register Bit Definitions:
 | ||||
| //
 | ||||
| 
 | ||||
| //
 | ||||
| // Device Configuration Register Bit Definitions
 | ||||
| //
 | ||||
| struct DEVICECNF_BITS  {      // bits  description
 | ||||
|     Uint16 rsvd1:3;           // 2:0   reserved
 | ||||
|     Uint16 VMAPS:1;           // 3     VMAP Status
 | ||||
|     Uint16 rsvd2:1;           // 4     reserved
 | ||||
|     Uint16 XRSn:1;            // 5     XRSn Signal Status
 | ||||
|     Uint16 rsvd3:10;          // 15:6
 | ||||
|     Uint16 rsvd4:3;           // 18:16
 | ||||
|     Uint16 ENPROT:1;          // 19    Enable/Disable pipeline protection
 | ||||
|     Uint16 rsvd5:7;           // 26:20 reserved
 | ||||
|     Uint16 TRSTN:1;           // 27    Status of TRSTn signal
 | ||||
|     Uint16 rsvd6:4;           // 31:28 reserved
 | ||||
| }; | ||||
| 
 | ||||
| union DEVICECNF_REG { | ||||
|     Uint32                 all; | ||||
|     struct DEVICECNF_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // CLASSID
 | ||||
| //
 | ||||
| struct CLASSID_BITS   {   // bits  description
 | ||||
|     Uint16 CLASSNO:8;     // 7:0   Class Number
 | ||||
|     Uint16 PARTTYPE:8;    // 15:8  Part Type
 | ||||
| }; | ||||
| 
 | ||||
| union CLASSID_REG { | ||||
|     Uint16               all; | ||||
|     struct CLASSID_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| struct DEV_EMU_REGS { | ||||
|     union DEVICECNF_REG DEVICECNF;  // device configuration
 | ||||
|     union CLASSID_REG   CLASSID;    // Class ID
 | ||||
|     Uint16              REVID;      // Device ID
 | ||||
|     Uint16              PROTSTART;  // Write-Read protection start
 | ||||
|     Uint16              PROTRANGE;  // Write-Read protection range
 | ||||
|     Uint16              rsvd2[202]; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // PARTID
 | ||||
| //
 | ||||
| struct PARTID_BITS   {  // bits  description
 | ||||
|     Uint16 PARTNO:8;     // 7:0   Part Number
 | ||||
|     Uint16 PARTTYPE:8;   // 15:8  Part Type
 | ||||
| }; | ||||
| 
 | ||||
| union PARTID_REG { | ||||
|     Uint16               all; | ||||
|     struct PARTID_BITS   bit; | ||||
| }; | ||||
| 
 | ||||
| struct PARTID_REGS { | ||||
|     union PARTID_REG PARTID; // Part ID
 | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // Device Emulation Register References & Function Declarations
 | ||||
| //
 | ||||
| extern volatile struct DEV_EMU_REGS DevEmuRegs; | ||||
| extern volatile struct PARTID_REGS PartIdRegs; | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif /* extern "C" */ | ||||
| 
 | ||||
| #endif  // end of DSP2833x_DEV_EMU_H definition
 | ||||
| 
 | ||||
| //
 | ||||
| // End of file
 | ||||
| //
 | ||||
| 
 | ||||
| @ -0,0 +1,208 @@ | ||||
| //###########################################################################
 | ||||
| //
 | ||||
| // FILE:   DSP2833x_Device.h
 | ||||
| //
 | ||||
| // TITLE:  DSP2833x Device Definitions.
 | ||||
| //
 | ||||
| //###########################################################################
 | ||||
| // $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $
 | ||||
| // $Release Date: November  1, 2016 $
 | ||||
| // $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated -
 | ||||
| //             http://www.ti.com/ ALL RIGHTS RESERVED $
 | ||||
| //###########################################################################
 | ||||
| 
 | ||||
| #ifndef DSP2833x_DEVICE_H | ||||
| #define DSP2833x_DEVICE_H | ||||
| 
 | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
| 
 | ||||
| //
 | ||||
| // Defines
 | ||||
| //
 | ||||
| #define   TARGET   1 | ||||
| 
 | ||||
| //
 | ||||
| // User To Select Target Device
 | ||||
| //
 | ||||
| #define   DSP28_28335   TARGET    // Selects '28335/'28235
 | ||||
| #define   DSP28_28334   0         // Selects '28334/'28234
 | ||||
| #define   DSP28_28333   0         // Selects '28333/'
 | ||||
| #define   DSP28_28332   0         // Selects '28332/'28232
 | ||||
| 
 | ||||
| //
 | ||||
| // Common CPU Definitions
 | ||||
| //
 | ||||
| extern cregister volatile unsigned int IFR; | ||||
| extern cregister volatile unsigned int IER; | ||||
| 
 | ||||
| #define  EINT   asm(" clrc INTM") | ||||
| #define  DINT   asm(" setc INTM") | ||||
| #define  ERTM   asm(" clrc DBGM") | ||||
| #define  DRTM   asm(" setc DBGM") | ||||
| #define  EALLOW asm(" EALLOW") | ||||
| #define  EDIS   asm(" EDIS") | ||||
| #define  ESTOP0 asm(" ESTOP0") | ||||
| 
 | ||||
| #define M_INT1  0x0001 | ||||
| #define M_INT2  0x0002 | ||||
| #define M_INT3  0x0004 | ||||
| #define M_INT4  0x0008 | ||||
| #define M_INT5  0x0010 | ||||
| #define M_INT6  0x0020 | ||||
| #define M_INT7  0x0040 | ||||
| #define M_INT8  0x0080 | ||||
| #define M_INT9  0x0100 | ||||
| #define M_INT10 0x0200 | ||||
| #define M_INT11 0x0400 | ||||
| #define M_INT12 0x0800 | ||||
| #define M_INT13 0x1000 | ||||
| #define M_INT14 0x2000 | ||||
| #define M_DLOG  0x4000 | ||||
| #define M_RTOS  0x8000 | ||||
| 
 | ||||
| #define BIT0    0x0001 | ||||
| #define BIT1    0x0002 | ||||
| #define BIT2    0x0004 | ||||
| #define BIT3    0x0008 | ||||
| #define BIT4    0x0010 | ||||
| #define BIT5    0x0020 | ||||
| #define BIT6    0x0040 | ||||
| #define BIT7    0x0080 | ||||
| #define BIT8    0x0100 | ||||
| #define BIT9    0x0200 | ||||
| #define BIT10   0x0400 | ||||
| #define BIT11   0x0800 | ||||
| #define BIT12   0x1000 | ||||
| #define BIT13   0x2000 | ||||
| #define BIT14   0x4000 | ||||
| #define BIT15   0x8000 | ||||
| 
 | ||||
| //
 | ||||
| // For Portability, User Is Recommended To Use Following Data Type Size
 | ||||
| // Definitions For 16-bit and 32-Bit Signed/Unsigned Integers:
 | ||||
| //
 | ||||
| #ifndef DSP28_DATA_TYPES | ||||
| #define DSP28_DATA_TYPES | ||||
| typedef int                int16; | ||||
| typedef long               int32; | ||||
| typedef long long          int64; | ||||
| typedef unsigned int       Uint16; | ||||
| typedef unsigned long      Uint32; | ||||
| typedef unsigned long long Uint64; | ||||
| typedef float              float32; | ||||
| typedef long double        float64; | ||||
| #endif | ||||
| 
 | ||||
| //
 | ||||
| // Included Peripheral Header Files
 | ||||
| //
 | ||||
| #include "F28335/DSP2833x_Adc.h"                // ADC Registers | ||||
| #include "F28335/DSP2833x_DevEmu.h"             // Device Emulation Registers | ||||
| #include "F28335/DSP2833x_CpuTimers.h"          // 32-bit CPU Timers | ||||
| #include "F28335/DSP2833x_ECan.h"               // Enhanced eCAN Registers | ||||
| #include "F28335/DSP2833x_ECap.h"               // Enhanced Capture | ||||
| #include "F28335/DSP2833x_DMA.h"                // DMA Registers | ||||
| #include "F28335/DSP2833x_EPwm.h"               // Enhanced PWM | ||||
| #include "F28335/DSP2833x_EQep.h"               // Enhanced QEP | ||||
| #include "F28335/DSP2833x_Gpio.h"               // General Purpose I/O Registers | ||||
| #include "F28335/DSP2833x_I2c.h"                // I2C Registers | ||||
| #include "F28335/DSP2833x_Mcbsp.h"              // McBSP | ||||
| #include "F28335/DSP2833x_PieCtrl.h"            // PIE Control Registers | ||||
| #include "F28335/DSP2833x_PieVect.h"            // PIE Vector Table | ||||
| #include "F28335/DSP2833x_Spi.h"                // SPI Registers | ||||
| #include "F28335/DSP2833x_Sci.h"                // SCI Registers | ||||
| #include "F28335/DSP2833x_SysCtrl.h"            // System Control/Power Modes | ||||
| #include "F28335/DSP2833x_XIntrupt.h"           // External Interrupts | ||||
| #include "F28335/DSP2833x_Xintf.h"              // XINTF External Interface | ||||
| 
 | ||||
| #if DSP28_28335 || DSP28_28333 | ||||
| #define DSP28_EPWM1  1 | ||||
| #define DSP28_EPWM2  1 | ||||
| #define DSP28_EPWM3  1 | ||||
| #define DSP28_EPWM4  1 | ||||
| #define DSP28_EPWM5  1 | ||||
| #define DSP28_EPWM6  1 | ||||
| #define DSP28_ECAP1  1 | ||||
| #define DSP28_ECAP2  1 | ||||
| #define DSP28_ECAP3  1 | ||||
| #define DSP28_ECAP4  1 | ||||
| #define DSP28_ECAP5  1 | ||||
| #define DSP28_ECAP6  1 | ||||
| #define DSP28_EQEP1  1 | ||||
| #define DSP28_EQEP2  1 | ||||
| #define DSP28_ECANA  1 | ||||
| #define DSP28_ECANB  1 | ||||
| #define DSP28_MCBSPA 1 | ||||
| #define DSP28_MCBSPB 1 | ||||
| #define DSP28_SPIA   1 | ||||
| #define DSP28_SCIA   1 | ||||
| #define DSP28_SCIB   1 | ||||
| #define DSP28_SCIC   1 | ||||
| #define DSP28_I2CA   1 | ||||
| #endif  // end DSP28_28335 || DSP28_28333
 | ||||
| 
 | ||||
| #if DSP28_28334 | ||||
| #define DSP28_EPWM1  1 | ||||
| #define DSP28_EPWM2  1 | ||||
| #define DSP28_EPWM3  1 | ||||
| #define DSP28_EPWM4  1 | ||||
| #define DSP28_EPWM5  1 | ||||
| #define DSP28_EPWM6  1 | ||||
| #define DSP28_ECAP1  1 | ||||
| #define DSP28_ECAP2  1 | ||||
| #define DSP28_ECAP3  1 | ||||
| #define DSP28_ECAP4  1 | ||||
| #define DSP28_ECAP5  0 | ||||
| #define DSP28_ECAP6  0 | ||||
| #define DSP28_EQEP1  1 | ||||
| #define DSP28_EQEP2  1 | ||||
| #define DSP28_ECANA  1 | ||||
| #define DSP28_ECANB  1 | ||||
| #define DSP28_MCBSPA 1 | ||||
| #define DSP28_MCBSPB 1 | ||||
| #define DSP28_SPIA   1 | ||||
| #define DSP28_SCIA   1 | ||||
| #define DSP28_SCIB   1 | ||||
| #define DSP28_SCIC   1 | ||||
| #define DSP28_I2CA   1 | ||||
| #endif  // end DSP28_28334
 | ||||
| 
 | ||||
| #if DSP28_28332 | ||||
| #define DSP28_EPWM1  1 | ||||
| #define DSP28_EPWM2  1 | ||||
| #define DSP28_EPWM3  1 | ||||
| #define DSP28_EPWM4  1 | ||||
| #define DSP28_EPWM5  1 | ||||
| #define DSP28_EPWM6  1 | ||||
| #define DSP28_ECAP1  1 | ||||
| #define DSP28_ECAP2  1 | ||||
| #define DSP28_ECAP3  1 | ||||
| #define DSP28_ECAP4  1 | ||||
| #define DSP28_ECAP5  0 | ||||
| #define DSP28_ECAP6  0 | ||||
| #define DSP28_EQEP1  1 | ||||
| #define DSP28_EQEP2  1 | ||||
| #define DSP28_ECANA  1 | ||||
| #define DSP28_ECANB  1 | ||||
| #define DSP28_MCBSPA 1 | ||||
| #define DSP28_MCBSPB 0 | ||||
| #define DSP28_SPIA   1 | ||||
| #define DSP28_SCIA   1 | ||||
| #define DSP28_SCIB   1 | ||||
| #define DSP28_SCIC   0 | ||||
| #define DSP28_I2CA   1 | ||||
| #endif  // end DSP28_28332
 | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif /* extern "C" */ | ||||
| 
 | ||||
| #endif  // end of DSP2833x_DEVICE_H definition
 | ||||
| 
 | ||||
| //
 | ||||
| // End of file
 | ||||
| //
 | ||||
| 
 | ||||
| @ -0,0 +1,108 @@ | ||||
| //###########################################################################
 | ||||
| //
 | ||||
| // FILE:   DSP2833x_Dma_defines.h
 | ||||
| //
 | ||||
| // TITLE:  #defines used in DMA examples
 | ||||
| //
 | ||||
| //###########################################################################
 | ||||
| // $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $
 | ||||
| // $Release Date: November  1, 2016 $
 | ||||
| // $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated -
 | ||||
| //             http://www.ti.com/ ALL RIGHTS RESERVED $
 | ||||
| //###########################################################################
 | ||||
| 
 | ||||
| #ifndef DSP2833x_DMA_DEFINES_H | ||||
| #define DSP2833x_DMA_DEFINES_H | ||||
| 
 | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
| 
 | ||||
| //
 | ||||
| // MODE
 | ||||
| //
 | ||||
| // PERINTSEL bits
 | ||||
| //
 | ||||
| #define DMA_SEQ1INT 1 | ||||
| #define DMA_SEQ2INT 2 | ||||
| #define DMA_XINT1   3 | ||||
| #define DMA_XINT2   4 | ||||
| #define DMA_XINT3   5 | ||||
| #define DMA_XINT4   6 | ||||
| #define DMA_XINT5   7 | ||||
| #define DMA_XINT6   8 | ||||
| #define DMA_XINT7   9 | ||||
| #define DMA_XINT13  10 | ||||
| #define DMA_TINT0   11 | ||||
| #define DMA_TINT1   12 | ||||
| #define DMA_TINT2   13 | ||||
| #define DMA_MXEVTA  14 | ||||
| #define DMA_MREVTA  15 | ||||
| #define DMA_MXREVTB 16 | ||||
| #define DMA_MREVTB  17 | ||||
| 
 | ||||
| //
 | ||||
| // OVERINTE bit
 | ||||
| //
 | ||||
| #define	OVRFLOW_DISABLE	0x0 | ||||
| #define	OVEFLOW_ENABLE	0x1 | ||||
| 
 | ||||
| //
 | ||||
| // PERINTE bit
 | ||||
| //
 | ||||
| #define	PERINT_DISABLE	0x0 | ||||
| #define	PERINT_ENABLE   0x1 | ||||
| 
 | ||||
| //
 | ||||
| // CHINTMODE bits
 | ||||
| //
 | ||||
| #define	CHINT_BEGIN		0x0 | ||||
| #define	CHINT_END     	0x1 | ||||
| 
 | ||||
| //
 | ||||
| // ONESHOT bits
 | ||||
| //
 | ||||
| #define	ONESHOT_DISABLE	0x0 | ||||
| #define	ONESHOT_ENABLE	0x1 | ||||
| 
 | ||||
| //
 | ||||
| // CONTINOUS bit
 | ||||
| //
 | ||||
| #define	CONT_DISABLE	0x0 | ||||
| #define	CONT_ENABLE 	0x1 | ||||
| 
 | ||||
| //
 | ||||
| // SYNCE bit
 | ||||
| //
 | ||||
| #define	SYNC_DISABLE	0x0 | ||||
| #define	SYNC_ENABLE     0x1 | ||||
| 
 | ||||
| //
 | ||||
| // SYNCSEL bit
 | ||||
| //
 | ||||
| #define	SYNC_SRC		0x0 | ||||
| #define	SYNC_DST        0x1 | ||||
| 
 | ||||
| //
 | ||||
| // DATASIZE bit
 | ||||
| //
 | ||||
| #define	SIXTEEN_BIT    	0x0 | ||||
| #define	THIRTYTWO_BIT   0x1 | ||||
| 
 | ||||
| //
 | ||||
| // CHINTE bit
 | ||||
| //
 | ||||
| #define	CHINT_DISABLE	0x0 | ||||
| #define	CHINT_ENABLE   	0x1 | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif /* extern "C" */ | ||||
| 
 | ||||
| #endif   // - end of DSP2833x_EPWM_DEFINES_H
 | ||||
| 
 | ||||
| //
 | ||||
| // End of file
 | ||||
| //
 | ||||
| 
 | ||||
											
												
													File diff suppressed because it is too large
													Load Diff
												
											
										
									
								| @ -0,0 +1,148 @@ | ||||
| //###########################################################################
 | ||||
| //
 | ||||
| // FILE:   DSP2833x_ECap.h
 | ||||
| //
 | ||||
| // TITLE:  DSP2833x Enhanced Capture Module Register Bit Definitions.
 | ||||
| //
 | ||||
| //###########################################################################
 | ||||
| // $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $
 | ||||
| // $Release Date: November  1, 2016 $
 | ||||
| // $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated -
 | ||||
| //             http://www.ti.com/ ALL RIGHTS RESERVED $
 | ||||
| //###########################################################################
 | ||||
| 
 | ||||
| #ifndef DSP2833x_ECAP_H | ||||
| #define DSP2833x_ECAP_H | ||||
| 
 | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
| 
 | ||||
| //
 | ||||
| // Capture control register 1 bit definitions
 | ||||
| //
 | ||||
| struct ECCTL1_BITS {           // bits   description
 | ||||
|     Uint16 CAP1POL:1;          // 0      Capture Event 1 Polarity select
 | ||||
|     Uint16 CTRRST1:1;          // 1      Counter Reset on Capture Event 1
 | ||||
|     Uint16 CAP2POL:1;          // 2      Capture Event 2 Polarity select
 | ||||
|     Uint16 CTRRST2:1;          // 3      Counter Reset on Capture Event 2
 | ||||
|     Uint16 CAP3POL:1;          // 4      Capture Event 3 Polarity select
 | ||||
|     Uint16 CTRRST3:1;          // 5      Counter Reset on Capture Event 3
 | ||||
|     Uint16 CAP4POL:1;          // 6      Capture Event 4 Polarity select
 | ||||
|     Uint16 CTRRST4:1;          // 7      Counter Reset on Capture Event 4
 | ||||
|     Uint16 CAPLDEN:1;          // 8      Enable Loading CAP1-4 regs on a Cap 
 | ||||
|                                //        Event
 | ||||
|     Uint16 PRESCALE:5;         // 13:9   Event Filter prescale select
 | ||||
|     Uint16 FREE_SOFT:2;        // 15:14  Emulation mode
 | ||||
| }; | ||||
| 
 | ||||
| union ECCTL1_REG { | ||||
|     Uint16              all; | ||||
|     struct ECCTL1_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // In V1.1 the STOPVALUE bit field was changed to 
 | ||||
| // STOP_WRAP.  This correlated to a silicon change from
 | ||||
| // F2833x Rev 0 to Rev A. 
 | ||||
| //
 | ||||
| 
 | ||||
| //
 | ||||
| // Capture control register 2 bit definitions
 | ||||
| //
 | ||||
| struct ECCTL2_BITS {          // bits   description
 | ||||
|     Uint16 CONT_ONESHT:1;      // 0      Continuous or one-shot
 | ||||
|     Uint16 STOP_WRAP:2;        // 2:1    Stop value for one-shot, Wrap for continuous
 | ||||
|     Uint16 REARM:1;            // 3      One-shot re-arm
 | ||||
|     Uint16 TSCTRSTOP:1;        // 4      TSCNT counter stop
 | ||||
|     Uint16 SYNCI_EN:1;         // 5      Counter sync-in select
 | ||||
|     Uint16 SYNCO_SEL:2;        // 7:6    Sync-out mode
 | ||||
|     Uint16 SWSYNC:1;           // 8      SW forced counter sync
 | ||||
|     Uint16 CAP_APWM:1;         // 9      CAP/APWM operating mode select
 | ||||
|     Uint16 APWMPOL:1;          // 10     APWM output polarity select
 | ||||
|     Uint16 rsvd1:5;            // 15:11  
 | ||||
| }; | ||||
| 
 | ||||
| union ECCTL2_REG { | ||||
|     Uint16              all; | ||||
|     struct ECCTL2_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // ECAP interrupt enable register bit definitions
 | ||||
| //
 | ||||
| struct ECEINT_BITS {           // bits   description
 | ||||
|     Uint16 rsvd1:1;            // 0      reserved
 | ||||
|     Uint16 CEVT1:1;            // 1      Capture Event 1 Interrupt Enable
 | ||||
|     Uint16 CEVT2:1;            // 2      Capture Event 2 Interrupt Enable
 | ||||
|     Uint16 CEVT3:1;            // 3      Capture Event 3 Interrupt Enable
 | ||||
|     Uint16 CEVT4:1;            // 4      Capture Event 4 Interrupt Enable         
 | ||||
|     Uint16 CTROVF:1;           // 5      Counter Overflow Interrupt Enable
 | ||||
|     Uint16 CTR_EQ_PRD:1;       // 6      Period Equal Interrupt Enable
 | ||||
|     Uint16 CTR_EQ_CMP:1;       // 7      Compare Equal Interrupt Enable
 | ||||
|     Uint16 rsvd2:8;            // 15:8   reserved
 | ||||
| }; | ||||
| 
 | ||||
| union ECEINT_REG { | ||||
|    Uint16              all; | ||||
|    struct ECEINT_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // ECAP interrupt flag register bit definitions
 | ||||
| //
 | ||||
| struct ECFLG_BITS {           // bits   description
 | ||||
|     Uint16 INT:1;              // 0      Global Flag
 | ||||
|     Uint16 CEVT1:1;            // 1      Capture Event 1 Interrupt Flag
 | ||||
|     Uint16 CEVT2:1;            // 2      Capture Event 2 Interrupt Flag
 | ||||
|     Uint16 CEVT3:1;            // 3      Capture Event 3 Interrupt Flag
 | ||||
|     Uint16 CEVT4:1;            // 4      Capture Event 4 Interrupt Flag         
 | ||||
|     Uint16 CTROVF:1;           // 5      Counter Overflow Interrupt Flag
 | ||||
|     Uint16 CTR_EQ_PRD:1;       // 6      Period Equal Interrupt Flag
 | ||||
|     Uint16 CTR_EQ_CMP:1;       // 7      Compare Equal Interrupt Flag
 | ||||
|     Uint16 rsvd2:8;            // 15:8   reserved
 | ||||
| }; | ||||
| 
 | ||||
| union ECFLG_REG { | ||||
|     Uint16              all; | ||||
|     struct ECFLG_BITS   bit; | ||||
| }; | ||||
| 
 | ||||
| struct ECAP_REGS { | ||||
|     Uint32              TSCTR;    // Time stamp counter 
 | ||||
|     Uint32              CTRPHS;   // Counter phase
 | ||||
|     Uint32              CAP1;     // Capture 1 
 | ||||
|     Uint32              CAP2;     // Capture 2    
 | ||||
|     Uint32              CAP3;     // Capture 3 
 | ||||
|     Uint32              CAP4;     // Capture 4   
 | ||||
|     Uint16              rsvd1[8]; // reserved
 | ||||
|     union   ECCTL1_REG  ECCTL1;   // Capture Control Reg 1
 | ||||
|     union   ECCTL2_REG  ECCTL2;   // Capture Control Reg 2
 | ||||
|     union   ECEINT_REG  ECEINT;   // ECAP interrupt enable
 | ||||
|     union   ECFLG_REG   ECFLG;    // ECAP interrupt flags
 | ||||
|     union   ECFLG_REG   ECCLR;    // ECAP interrupt clear
 | ||||
|     union   ECEINT_REG  ECFRC;    // ECAP interrupt force
 | ||||
|     Uint16              rsvd2[6]; // reserved   
 | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // GPI/O External References & Function Declarations
 | ||||
| //
 | ||||
| extern volatile struct ECAP_REGS ECap1Regs; | ||||
| extern volatile struct ECAP_REGS ECap2Regs; | ||||
| extern volatile struct ECAP_REGS ECap3Regs; | ||||
| extern volatile struct ECAP_REGS ECap4Regs; | ||||
| extern volatile struct ECAP_REGS ECap5Regs; | ||||
| extern volatile struct ECAP_REGS ECap6Regs; | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif /* extern "C" */ | ||||
| 
 | ||||
| #endif  // end of DSP2833x_ECAP_H definition
 | ||||
| 
 | ||||
| //
 | ||||
| // End of file
 | ||||
| //
 | ||||
| 
 | ||||
| @ -0,0 +1,434 @@ | ||||
| //###########################################################################
 | ||||
| //
 | ||||
| // FILE:   DSP2833x_EPwm.h
 | ||||
| //
 | ||||
| // TITLE:  DSP2833x Enhanced PWM Module Register Bit Definitions.
 | ||||
| //
 | ||||
| //###########################################################################
 | ||||
| // $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $
 | ||||
| // $Release Date: November  1, 2016 $
 | ||||
| // $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated -
 | ||||
| //             http://www.ti.com/ ALL RIGHTS RESERVED $
 | ||||
| //###########################################################################
 | ||||
| 
 | ||||
| #ifndef DSP2833x_EPWM_H | ||||
| #define DSP2833x_EPWM_H | ||||
| 
 | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
| 
 | ||||
| //
 | ||||
| // Time base control register bit definitions
 | ||||
| //
 | ||||
| struct TBCTL_BITS {           // bits   description
 | ||||
|     Uint16 CTRMODE:2;         // 1:0    Counter Mode
 | ||||
|     Uint16 PHSEN:1;           // 2      Phase load enable
 | ||||
|     Uint16 PRDLD:1;           // 3      Active period load
 | ||||
|     Uint16 SYNCOSEL:2;        // 5:4    Sync output select
 | ||||
|     Uint16 SWFSYNC:1;         // 6      Software force sync pulse
 | ||||
|     Uint16 HSPCLKDIV:3;       // 9:7    High speed time pre-scale
 | ||||
|     Uint16 CLKDIV:3;          // 12:10  Timebase clock pre-scale
 | ||||
|     Uint16 PHSDIR:1;          // 13     Phase Direction
 | ||||
|     Uint16 FREE_SOFT:2;       // 15:14  Emulation mode 
 | ||||
| }; | ||||
| 
 | ||||
| union TBCTL_REG { | ||||
|     Uint16              all; | ||||
|     struct TBCTL_BITS   bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // Time base status register bit definitions
 | ||||
| //
 | ||||
| struct TBSTS_BITS {          // bits   description
 | ||||
|     Uint16 CTRDIR:1;          // 0      Counter direction status
 | ||||
|     Uint16 SYNCI:1;           // 1      External input sync status
 | ||||
|     Uint16 CTRMAX:1;          // 2      Counter max latched status
 | ||||
|     Uint16 rsvd1:13;          // 15:3   reserved
 | ||||
| }; | ||||
| 
 | ||||
| union TBSTS_REG { | ||||
|     Uint16              all; | ||||
|     struct TBSTS_BITS   bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // Compare control register bit definitions
 | ||||
| //
 | ||||
| struct CMPCTL_BITS {           // bits   description
 | ||||
|     Uint16 LOADAMODE:2;        // 0:1    Active compare A
 | ||||
|     Uint16 LOADBMODE:2;        // 3:2    Active compare B
 | ||||
|     Uint16 SHDWAMODE:1;        // 4      Compare A block operating mode
 | ||||
|     Uint16 rsvd1:1;            // 5      reserved
 | ||||
|     Uint16 SHDWBMODE:1;        // 6      Compare B block operating mode
 | ||||
|     Uint16 rsvd2:1;            // 7      reserved
 | ||||
|     Uint16 SHDWAFULL:1;        // 8      Compare A Shadow registers full Status
 | ||||
|     Uint16 SHDWBFULL:1;        // 9      Compare B Shadow registers full Status
 | ||||
|     Uint16 rsvd3:6;            // 15:10  reserved
 | ||||
| }; | ||||
| 
 | ||||
| union CMPCTL_REG { | ||||
|     Uint16                all; | ||||
|     struct CMPCTL_BITS    bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // Action qualifier register bit definitions
 | ||||
| //
 | ||||
| struct AQCTL_BITS {            // bits   description
 | ||||
|     Uint16 ZRO:2;              // 1:0    Action Counter = Zero
 | ||||
|     Uint16 PRD:2;              // 3:2    Action Counter = Period
 | ||||
|     Uint16 CAU:2;              // 5:4    Action Counter = Compare A up
 | ||||
|     Uint16 CAD:2;              // 7:6    Action Counter = Compare A down
 | ||||
|     Uint16 CBU:2;              // 9:8    Action Counter = Compare B up
 | ||||
|     Uint16 CBD:2;              // 11:10  Action Counter = Compare B down
 | ||||
|     Uint16 rsvd:4;             // 15:12  reserved
 | ||||
| }; | ||||
| 
 | ||||
| union AQCTL_REG { | ||||
|     Uint16                all; | ||||
|     struct AQCTL_BITS     bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // Action qualifier SW force register bit definitions
 | ||||
| //
 | ||||
| struct AQSFRC_BITS {            // bits description
 | ||||
|     Uint16 ACTSFA:2;            // 1:0  Action when One-time SW Force A invoked
 | ||||
|     Uint16 OTSFA:1;             // 2    One-time SW Force A output
 | ||||
|     Uint16 ACTSFB:2;            // 4:3  Action when One-time SW Force B invoked
 | ||||
|     Uint16 OTSFB:1;             // 5    One-time SW Force A output
 | ||||
|     Uint16 RLDCSF:2;            // 7:6  Reload from Shadow options
 | ||||
|     Uint16 rsvd1:8;             // 15:8 reserved
 | ||||
| }; | ||||
| 
 | ||||
| union AQSFRC_REG { | ||||
|     Uint16                 all; | ||||
|     struct AQSFRC_BITS     bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // Action qualifier continuous SW force register bit definitions
 | ||||
| //
 | ||||
| struct AQCSFRC_BITS {           // bits   description
 | ||||
|     Uint16 CSFA:2;              // 1:0    Continuous Software Force on output A
 | ||||
|     Uint16 CSFB:2;              // 3:2    Continuous Software Force on output B
 | ||||
|     Uint16 rsvd1:12;            // 15:4   reserved
 | ||||
| }; | ||||
| 
 | ||||
| union AQCSFRC_REG { | ||||
|     Uint16                  all; | ||||
|     struct AQCSFRC_BITS     bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // As of version 1.1
 | ||||
| // Changed the MODE bit-field to OUT_MODE
 | ||||
| // Added the bit-field IN_MODE
 | ||||
| // This corresponds to changes in silicon as of F2833x devices
 | ||||
| // Rev A silicon.
 | ||||
| //
 | ||||
| 
 | ||||
| //
 | ||||
| // Dead-band generator control register bit definitions                                    
 | ||||
| //
 | ||||
| struct DBCTL_BITS {              // bits   description
 | ||||
|     Uint16 OUT_MODE:2;      	 // 1:0    Dead Band Output Mode Control 
 | ||||
|     Uint16 POLSEL:2;             // 3:2    Polarity Select Control 
 | ||||
|     Uint16 IN_MODE:2;            // 5:4    Dead Band Input Select Mode Control
 | ||||
|     Uint16 rsvd1:10;             // 15:4   reserved
 | ||||
| }; | ||||
| 
 | ||||
| union DBCTL_REG { | ||||
|     Uint16                  all; | ||||
|     struct DBCTL_BITS       bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // Trip zone select register bit definitions
 | ||||
| //
 | ||||
| struct TZSEL_BITS {            // bits   description
 | ||||
|     Uint16  CBC1:1;            // 0      TZ1 CBC select
 | ||||
|     Uint16  CBC2:1;            // 1      TZ2 CBC select
 | ||||
|     Uint16  CBC3:1;            // 2      TZ3 CBC select
 | ||||
|     Uint16  CBC4:1;            // 3      TZ4 CBC select
 | ||||
|     Uint16  CBC5:1;            // 4      TZ5 CBC select
 | ||||
|     Uint16  CBC6:1;            // 5      TZ6 CBC select
 | ||||
|     Uint16  rsvd1:2;           // 7:6    reserved
 | ||||
|     Uint16  OSHT1:1;           // 8      One-shot TZ1 select             
 | ||||
|     Uint16  OSHT2:1;           // 9      One-shot TZ2 select             
 | ||||
|     Uint16  OSHT3:1;           // 10     One-shot TZ3 select             
 | ||||
|     Uint16  OSHT4:1;           // 11     One-shot TZ4 select             
 | ||||
|     Uint16  OSHT5:1;           // 12     One-shot TZ5 select             
 | ||||
|     Uint16  OSHT6:1;           // 13     One-shot TZ6 select             
 | ||||
|     Uint16  rsvd2:2;           // 15:14  reserved
 | ||||
| }; | ||||
| 
 | ||||
| union TZSEL_REG { | ||||
|     Uint16                  all; | ||||
|     struct TZSEL_BITS       bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // Trip zone control register bit definitions
 | ||||
| //
 | ||||
| struct TZCTL_BITS {          // bits   description
 | ||||
|     Uint16 TZA:2;            // 1:0    TZ1 to TZ6 Trip Action On EPWMxA
 | ||||
|     Uint16 TZB:2;            // 3:2    TZ1 to TZ6 Trip Action On EPWMxB
 | ||||
|     Uint16 rsvd:12;          // 15:4   reserved
 | ||||
| }; | ||||
| 
 | ||||
| union TZCTL_REG { | ||||
|     Uint16                  all; | ||||
|     struct TZCTL_BITS       bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // Trip zone control register bit definitions
 | ||||
| //
 | ||||
| struct TZEINT_BITS {          // bits   description
 | ||||
|     Uint16  rsvd1:1;          // 0      reserved
 | ||||
|     Uint16  CBC:1;            // 1      Trip Zones Cycle By Cycle Int Enable
 | ||||
|     Uint16  OST:1;            // 2      Trip Zones One Shot Int Enable
 | ||||
|     Uint16  rsvd2:13;         // 15:3   reserved
 | ||||
| };    | ||||
| 
 | ||||
| union TZEINT_REG { | ||||
|     Uint16                  all; | ||||
|     struct TZEINT_BITS      bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // Trip zone flag register bit definitions
 | ||||
| //
 | ||||
| struct TZFLG_BITS {          // bits   description
 | ||||
|     Uint16  INT:1;           // 0      Global status
 | ||||
|     Uint16  CBC:1;           // 1      Trip Zones Cycle By Cycle Int
 | ||||
|     Uint16  OST:1;           // 2      Trip Zones One Shot Int
 | ||||
|     Uint16  rsvd2:13;        // 15:3   reserved
 | ||||
| }; | ||||
| 
 | ||||
| union TZFLG_REG { | ||||
|     Uint16                  all; | ||||
|     struct TZFLG_BITS       bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // Trip zone flag clear register bit definitions
 | ||||
| //
 | ||||
| struct TZCLR_BITS {          // bits   description
 | ||||
|     Uint16  INT:1;           // 0      Global status
 | ||||
|     Uint16  CBC:1;           // 1      Trip Zones Cycle By Cycle Int
 | ||||
|     Uint16  OST:1;           // 2      Trip Zones One Shot Int
 | ||||
|     Uint16  rsvd2:13;        // 15:3   reserved
 | ||||
| }; | ||||
| 
 | ||||
| union TZCLR_REG { | ||||
|     Uint16                  all; | ||||
|     struct TZCLR_BITS       bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // Trip zone flag force register bit definitions
 | ||||
| //
 | ||||
| struct TZFRC_BITS {          // bits   description
 | ||||
|     Uint16  rsvd1:1;         // 0      reserved
 | ||||
|     Uint16  CBC:1;           // 1      Trip Zones Cycle By Cycle Int
 | ||||
|     Uint16  OST:1;           // 2      Trip Zones One Shot Int
 | ||||
|     Uint16  rsvd2:13;        // 15:3   reserved
 | ||||
| }; | ||||
| 
 | ||||
| union TZFRC_REG { | ||||
|     Uint16                  all; | ||||
|     struct TZFRC_BITS       bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // Event trigger select register bit definitions
 | ||||
| //
 | ||||
| struct ETSEL_BITS {          // bits   description
 | ||||
|     Uint16  INTSEL:3;        // 2:0    EPWMxINTn Select
 | ||||
|     Uint16  INTEN:1;         // 3      EPWMxINTn Enable
 | ||||
|     Uint16  rsvd1:4;         // 7:4    reserved
 | ||||
|     Uint16  SOCASEL:3;       // 10:8   Start of conversion A Select
 | ||||
|     Uint16  SOCAEN:1;        // 11     Start of conversion A Enable
 | ||||
|     Uint16  SOCBSEL:3;       // 14:12  Start of conversion B Select
 | ||||
|     Uint16  SOCBEN:1;        // 15     Start of conversion B Enable
 | ||||
| }; | ||||
| 
 | ||||
| union ETSEL_REG { | ||||
|     Uint16                  all; | ||||
|     struct ETSEL_BITS       bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // Event trigger pre-scale register bit definitions
 | ||||
| //
 | ||||
| struct ETPS_BITS {          // bits   description
 | ||||
|     Uint16  INTPRD:2;       // 1:0    EPWMxINTn Period Select
 | ||||
|     Uint16  INTCNT:2;       // 3:2    EPWMxINTn Counter Register
 | ||||
|     Uint16  rsvd1:4;        // 7:4    reserved
 | ||||
|     Uint16  SOCAPRD:2;      // 9:8    EPWMxSOCA Period Select
 | ||||
|     Uint16  SOCACNT:2;      // 11:10  EPWMxSOCA Counter Register
 | ||||
|     Uint16  SOCBPRD:2;      // 13:12  EPWMxSOCB Period Select
 | ||||
|     Uint16  SOCBCNT:2;      // 15:14  EPWMxSOCB Counter Register
 | ||||
| }; | ||||
| 
 | ||||
| union ETPS_REG { | ||||
|     Uint16                  all; | ||||
|     struct ETPS_BITS        bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // Event trigger Flag register bit definitions
 | ||||
| //
 | ||||
| struct ETFLG_BITS {          // bits   description
 | ||||
|     Uint16  INT:1;           // 0	EPWMxINTn Flag
 | ||||
|     Uint16  rsvd1:1;         // 1	reserved
 | ||||
|     Uint16  SOCA:1;          // 2	EPWMxSOCA Flag
 | ||||
|     Uint16  SOCB:1;          // 3	EPWMxSOCB Flag
 | ||||
|     Uint16  rsvd2:12;        // 15:4	reserved
 | ||||
| }; | ||||
| 
 | ||||
| union ETFLG_REG { | ||||
|     Uint16                   all; | ||||
|     struct ETFLG_BITS        bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // Event trigger Clear register bit definitions
 | ||||
| //
 | ||||
| struct ETCLR_BITS {          // bits   description
 | ||||
|     Uint16  INT:1;           // 0	EPWMxINTn Clear
 | ||||
|     Uint16  rsvd1:1;         // 1	reserved
 | ||||
|     Uint16  SOCA:1;          // 2	EPWMxSOCA Clear
 | ||||
|     Uint16  SOCB:1;          // 3	EPWMxSOCB Clear
 | ||||
|     Uint16  rsvd2:12;        // 15:4	reserved
 | ||||
| }; | ||||
| 
 | ||||
| union ETCLR_REG { | ||||
|     Uint16                   all; | ||||
|     struct ETCLR_BITS        bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // Event trigger Force register bit definitions
 | ||||
| //
 | ||||
| struct ETFRC_BITS {          // bits   description
 | ||||
|     Uint16  INT:1;           // 0	EPWMxINTn Force
 | ||||
|     Uint16  rsvd1:1;         // 1	reserved
 | ||||
|     Uint16  SOCA:1;          // 2	EPWMxSOCA Force
 | ||||
|     Uint16  SOCB:1;          // 3	EPWMxSOCB Force
 | ||||
|     Uint16  rsvd2:12;        // 15:4	reserved
 | ||||
| }; | ||||
| 
 | ||||
| union ETFRC_REG { | ||||
|     Uint16                  all; | ||||
|     struct ETFRC_BITS        bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // PWM chopper control register bit definitions
 | ||||
| //
 | ||||
| struct PCCTL_BITS {          // bits   description
 | ||||
|     Uint16  CHPEN:1;         // 0      PWM chopping enable
 | ||||
|     Uint16  OSHTWTH:4;       // 4:1    One-shot pulse width
 | ||||
|     Uint16  CHPFREQ:3;       // 7:5    Chopping clock frequency
 | ||||
|     Uint16  CHPDUTY:3;       // 10:8   Chopping clock Duty cycle
 | ||||
|     Uint16  rsvd1:5;         // 15:11  reserved
 | ||||
| }; | ||||
| 
 | ||||
| union PCCTL_REG { | ||||
|     Uint16                  all; | ||||
|     struct PCCTL_BITS       bit; | ||||
| }; | ||||
| 
 | ||||
| struct HRCNFG_BITS {       	// bits   description
 | ||||
|     Uint16  EDGMODE:2;     	// 1:0    Edge Mode select Bits
 | ||||
|     Uint16  CTLMODE:1;     	// 2      Control mode Select Bit
 | ||||
|     Uint16  HRLOAD:1;      	// 3      Shadow mode Select Bit
 | ||||
|     Uint16  rsvd1:12;      	// 15:4   reserved
 | ||||
| }; | ||||
| 
 | ||||
| union HRCNFG_REG { | ||||
|     Uint16                  	all; | ||||
|     struct HRCNFG_BITS       bit; | ||||
| }; | ||||
| 
 | ||||
| struct TBPHS_HRPWM_REG {   	 //bits  description
 | ||||
|     Uint16  TBPHSHR;     	 //15:0  Extension register for HRPWM Phase(8 bits)
 | ||||
|     Uint16  TBPHS;           //31:16 Phase offset register
 | ||||
| }; | ||||
| 
 | ||||
| union TBPHS_HRPWM_GROUP { | ||||
|     Uint32                  all; | ||||
|     struct TBPHS_HRPWM_REG  half; | ||||
| }; | ||||
| 
 | ||||
| struct CMPA_HRPWM_REG { // bits   description
 | ||||
|     Uint16  CMPAHR;     // 15:0   Extension register for HRPWM compare (8 bits)
 | ||||
|     Uint16  CMPA;       // 31:16  Compare A reg
 | ||||
| }; | ||||
| 
 | ||||
| union CMPA_HRPWM_GROUP { | ||||
|     Uint32                 all; | ||||
|     struct CMPA_HRPWM_REG  half; | ||||
| }; | ||||
| 
 | ||||
| struct EPWM_REGS { | ||||
|     union  TBCTL_REG           TBCTL;   // 
 | ||||
|     union  TBSTS_REG           TBSTS;   // 
 | ||||
|     union  TBPHS_HRPWM_GROUP   TBPHS;   // Union of TBPHS:TBPHSHR
 | ||||
|     Uint16                     TBCTR;   // Counter
 | ||||
|     Uint16                     TBPRD;   // Period register set 
 | ||||
|     Uint16                     rsvd1;   // 
 | ||||
|     union  CMPCTL_REG          CMPCTL;  // Compare control
 | ||||
|     union  CMPA_HRPWM_GROUP    CMPA;    // Union of CMPA:CMPAHR
 | ||||
|     Uint16                     CMPB;    // Compare B reg
 | ||||
|     union  AQCTL_REG           AQCTLA;  // Action qual output A
 | ||||
|     union  AQCTL_REG           AQCTLB;  // Action qual output B
 | ||||
|     union  AQSFRC_REG          AQSFRC;  // Action qual SW force
 | ||||
|     union  AQCSFRC_REG         AQCSFRC; // Action qualifier continuous SW force 
 | ||||
|     union  DBCTL_REG           DBCTL;   // Dead-band control
 | ||||
|     Uint16                     DBRED;   // Dead-band rising edge delay
 | ||||
|     Uint16                     DBFED;   // Dead-band falling edge delay
 | ||||
|     union  TZSEL_REG           TZSEL;   // Trip zone select
 | ||||
|     Uint16                     rsvd2;    | ||||
|     union  TZCTL_REG           TZCTL;   // Trip zone control
 | ||||
|     union  TZEINT_REG          TZEINT;  // Trip zone interrupt enable
 | ||||
|     union  TZFLG_REG           TZFLG;   // Trip zone interrupt flags
 | ||||
|     union  TZCLR_REG           TZCLR;   // Trip zone clear   
 | ||||
|     union  TZFRC_REG    	   TZFRC;   // Trip zone force interrupt
 | ||||
|     union  ETSEL_REG           ETSEL;   // Event trigger selection
 | ||||
|     union  ETPS_REG            ETPS;    // Event trigger pre-scaler
 | ||||
|     union  ETFLG_REG           ETFLG;   // Event trigger flags
 | ||||
|     union  ETCLR_REG           ETCLR;   // Event trigger clear   
 | ||||
|     union  ETFRC_REG           ETFRC;   // Event trigger force
 | ||||
|     union  PCCTL_REG           PCCTL;   // PWM chopper control
 | ||||
|     Uint16                     rsvd3;   // 
 | ||||
|     union  HRCNFG_REG          HRCNFG;  // HRPWM Config Reg
 | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| //
 | ||||
| // External References & Function Declarations
 | ||||
| //
 | ||||
| extern volatile struct EPWM_REGS EPwm1Regs; | ||||
| extern volatile struct EPWM_REGS EPwm2Regs; | ||||
| extern volatile struct EPWM_REGS EPwm3Regs; | ||||
| extern volatile struct EPWM_REGS EPwm4Regs; | ||||
| extern volatile struct EPWM_REGS EPwm5Regs; | ||||
| extern volatile struct EPWM_REGS EPwm6Regs; | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif /* extern "C" */ | ||||
| 
 | ||||
| #endif  // end of DSP2833x_EPWM_H definition
 | ||||
| 
 | ||||
| //
 | ||||
| // End of file
 | ||||
| //
 | ||||
| 
 | ||||
| @ -0,0 +1,212 @@ | ||||
| //###########################################################################
 | ||||
| //
 | ||||
| // FILE:   DSP2833x_EPwm_defines.h
 | ||||
| //
 | ||||
| // TITLE:  #defines used in ePWM examples examples
 | ||||
| // 
 | ||||
| //###########################################################################
 | ||||
| // $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $
 | ||||
| // $Release Date: November  1, 2016 $
 | ||||
| // $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated -
 | ||||
| //             http://www.ti.com/ ALL RIGHTS RESERVED $
 | ||||
| //###########################################################################
 | ||||
| 
 | ||||
| #ifndef DSP2833x_EPWM_DEFINES_H | ||||
| #define DSP2833x_EPWM_DEFINES_H | ||||
| 
 | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
| 
 | ||||
| //
 | ||||
| // TBCTL (Time-Base Control)
 | ||||
| //
 | ||||
| // CTRMODE bits
 | ||||
| //
 | ||||
| #define	TB_COUNT_UP		0x0 | ||||
| #define	TB_COUNT_DOWN	0x1 | ||||
| #define	TB_COUNT_UPDOWN	0x2 | ||||
| #define	TB_FREEZE		0x3 | ||||
| 
 | ||||
| //
 | ||||
| // PHSEN bit
 | ||||
| //
 | ||||
| #define	TB_DISABLE		0x0 | ||||
| #define	TB_ENABLE		0x1 | ||||
| 
 | ||||
| //
 | ||||
| // PRDLD bit
 | ||||
| //
 | ||||
| #define	TB_SHADOW		0x0 | ||||
| #define	TB_IMMEDIATE	0x1 | ||||
| 
 | ||||
| //
 | ||||
| // SYNCOSEL bits
 | ||||
| //
 | ||||
| #define	TB_SYNC_IN		0x0 | ||||
| #define	TB_CTR_ZERO		0x1 | ||||
| #define	TB_CTR_CMPB		0x2 | ||||
| #define	TB_SYNC_DISABLE	0x3 | ||||
| 
 | ||||
| //
 | ||||
| // HSPCLKDIV and CLKDIV bits
 | ||||
| //
 | ||||
| #define	TB_DIV1			0x0 | ||||
| #define	TB_DIV2			0x1 | ||||
| #define	TB_DIV4			0x2 | ||||
| 
 | ||||
| //
 | ||||
| // PHSDIR bit
 | ||||
| //
 | ||||
| #define	TB_DOWN			0x0 | ||||
| #define	TB_UP			0x1 | ||||
| 
 | ||||
| //
 | ||||
| // CMPCTL (Compare Control)
 | ||||
| //
 | ||||
| // LOADAMODE and LOADBMODE bits
 | ||||
| //
 | ||||
| #define	CC_CTR_ZERO		0x0 | ||||
| #define	CC_CTR_PRD		0x1 | ||||
| #define	CC_CTR_ZERO_PRD	0x2 | ||||
| #define	CC_LD_DISABLE	0x3 | ||||
| 
 | ||||
| //
 | ||||
| // SHDWAMODE and SHDWBMODE bits
 | ||||
| //
 | ||||
| #define	CC_SHADOW		0x0 | ||||
| #define	CC_IMMEDIATE	0x1 | ||||
| 
 | ||||
| //
 | ||||
| // AQCTLA and AQCTLB (Action Qualifier Control)
 | ||||
| //
 | ||||
| // ZRO, PRD, CAU, CAD, CBU, CBD bits
 | ||||
| //
 | ||||
| #define	AQ_NO_ACTION	0x0 | ||||
| #define	AQ_CLEAR		0x1 | ||||
| #define	AQ_SET			0x2 | ||||
| #define	AQ_TOGGLE		0x3 | ||||
| 
 | ||||
| //
 | ||||
| // DBCTL (Dead-Band Control)
 | ||||
| //
 | ||||
| // OUT MODE bits
 | ||||
| //
 | ||||
| #define	DB_DISABLE		0x0 | ||||
| #define	DBB_ENABLE		0x1 | ||||
| #define	DBA_ENABLE		0x2 | ||||
| #define	DB_FULL_ENABLE	0x3 | ||||
| 
 | ||||
| //
 | ||||
| // POLSEL bits
 | ||||
| //
 | ||||
| #define	DB_ACTV_HI		0x0 | ||||
| #define	DB_ACTV_LOC		0x1 | ||||
| #define	DB_ACTV_HIC		0x2 | ||||
| #define	DB_ACTV_LO		0x3 | ||||
| 
 | ||||
| //
 | ||||
| // IN MODE
 | ||||
| //
 | ||||
| #define DBA_ALL         0x0 | ||||
| #define DBB_RED_DBA_FED 0x1 | ||||
| #define DBA_RED_DBB_FED 0x2 | ||||
| #define DBB_ALL         0x3 | ||||
| 
 | ||||
| //
 | ||||
| // CHPCTL (chopper control)
 | ||||
| //
 | ||||
| // CHPEN bit
 | ||||
| //
 | ||||
| #define	CHP_DISABLE		0x0 | ||||
| #define	CHP_ENABLE		0x1 | ||||
| 
 | ||||
| //
 | ||||
| // CHPFREQ bits
 | ||||
| //
 | ||||
| #define	CHP_DIV1		0x0 | ||||
| #define	CHP_DIV2		0x1 | ||||
| #define	CHP_DIV3		0x2 | ||||
| #define	CHP_DIV4		0x3 | ||||
| #define	CHP_DIV5		0x4 | ||||
| #define	CHP_DIV6		0x5 | ||||
| #define	CHP_DIV7		0x6 | ||||
| #define	CHP_DIV8		0x7 | ||||
| 
 | ||||
| //
 | ||||
| // CHPDUTY bits
 | ||||
| //
 | ||||
| #define	CHP1_8TH		0x0 | ||||
| #define	CHP2_8TH		0x1 | ||||
| #define	CHP3_8TH		0x2 | ||||
| #define	CHP4_8TH		0x3 | ||||
| #define	CHP5_8TH		0x4 | ||||
| #define	CHP6_8TH		0x5 | ||||
| #define	CHP7_8TH		0x6 | ||||
| 
 | ||||
| //
 | ||||
| // TZSEL (Trip Zone Select)
 | ||||
| //
 | ||||
| // CBCn and OSHTn bits
 | ||||
| //
 | ||||
| #define	TZ_DISABLE		0x0 | ||||
| #define	TZ_ENABLE		0x1 | ||||
| 
 | ||||
| //
 | ||||
| // TZCTL (Trip Zone Control)
 | ||||
| //
 | ||||
| // TZA and TZB bits
 | ||||
| //
 | ||||
| #define	TZ_HIZ			0x0 | ||||
| #define	TZ_FORCE_HI		0x1 | ||||
| #define	TZ_FORCE_LO		0x2 | ||||
| #define	TZ_NO_CHANGE	0x3 | ||||
| 
 | ||||
| //
 | ||||
| // ETSEL (Event Trigger Select)
 | ||||
| //
 | ||||
| #define	ET_CTR_ZERO		0x1 | ||||
| #define	ET_CTR_PRD		0x2 | ||||
| #define	ET_CTRU_CMPA	0x4 | ||||
| #define	ET_CTRD_CMPA	0x5 | ||||
| #define	ET_CTRU_CMPB	0x6 | ||||
| #define	ET_CTRD_CMPB	0x7 | ||||
| 
 | ||||
| //
 | ||||
| // ETPS (Event Trigger Pre-scale)
 | ||||
| //
 | ||||
| // INTPRD, SOCAPRD, SOCBPRD bits
 | ||||
| //
 | ||||
| #define	ET_DISABLE		0x0 | ||||
| #define	ET_1ST			0x1 | ||||
| #define	ET_2ND			0x2 | ||||
| #define	ET_3RD			0x3 | ||||
| 
 | ||||
| //
 | ||||
| // HRPWM (High Resolution PWM)
 | ||||
| //
 | ||||
| // HRCNFG
 | ||||
| //
 | ||||
| #define	HR_Disable		0x0 | ||||
| #define	HR_REP			0x1 | ||||
| #define	HR_FEP			0x2 | ||||
| #define	HR_BEP			0x3 | ||||
| 
 | ||||
| #define	HR_CMP			0x0 | ||||
| #define	HR_PHS			0x1 | ||||
| 
 | ||||
| #define	HR_CTR_ZERO		0x0 | ||||
| #define	HR_CTR_PRD		0x1 | ||||
| 
 | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif /* extern "C" */ | ||||
| 
 | ||||
| #endif   // - end of DSP2833x_EPWM_DEFINES_H
 | ||||
| 
 | ||||
| //
 | ||||
| // End of file
 | ||||
| //
 | ||||
| 
 | ||||
| @ -0,0 +1,239 @@ | ||||
| //###########################################################################
 | ||||
| //
 | ||||
| // FILE:   DSP2833x_EQep.h
 | ||||
| //
 | ||||
| // TITLE:  DSP2833x Enhanced Quadrature Encoder Pulse Module 
 | ||||
| //         Register Bit Definitions.
 | ||||
| //
 | ||||
| //###########################################################################
 | ||||
| // $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $
 | ||||
| // $Release Date: November  1, 2016 $
 | ||||
| // $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated -
 | ||||
| //             http://www.ti.com/ ALL RIGHTS RESERVED $
 | ||||
| //###########################################################################
 | ||||
| 
 | ||||
| #ifndef DSP2833x_EQEP_H | ||||
| #define DSP2833x_EQEP_H | ||||
| 
 | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
| 
 | ||||
| //
 | ||||
| // Capture decoder control register bit definitions
 | ||||
| //
 | ||||
| struct QDECCTL_BITS {       // bits  description
 | ||||
|     Uint16 rsvd1:5;         // 4:0   reserved
 | ||||
|     Uint16 QSP:1;           // 5     QEPS input polarity
 | ||||
|     Uint16 QIP:1;           // 6     QEPI input polarity
 | ||||
|     Uint16 QBP:1;           // 7     QEPB input polarity
 | ||||
|     Uint16 QAP:1;           // 8     QEPA input polarity
 | ||||
|     Uint16 IGATE:1;         // 9     Index pulse gating option
 | ||||
|     Uint16 SWAP:1;          // 10    CLK/DIR signal source for Position Counter
 | ||||
|     Uint16 XCR:1;           // 11    External clock rate
 | ||||
|     Uint16 SPSEL:1;         // 12    Sync output pin select
 | ||||
|     Uint16 SOEN:1;          // 13    Enable position compare sync
 | ||||
|     Uint16 QSRC:2;          // 15:14 Position counter source
 | ||||
| }; | ||||
| 
 | ||||
| union QDECCTL_REG { | ||||
|     Uint16              all; | ||||
|     struct QDECCTL_BITS   bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // QEP control register bit definitions
 | ||||
| //
 | ||||
| struct QEPCTL_BITS {            // bits   description
 | ||||
|     Uint16 WDE:1;               // 0      QEP watchdog enable
 | ||||
|     Uint16 UTE:1;               // 1      QEP unit timer enable
 | ||||
|     Uint16 QCLM:1;              // 2      QEP capture latch mode
 | ||||
|     Uint16 QPEN:1;              // 3      Quadrature position counter enable
 | ||||
|     Uint16 IEL:2;               // 5:4    Index event latch
 | ||||
|     Uint16 SEL:1;               // 6      Strobe event latch
 | ||||
|     Uint16 SWI:1;               // 7      Software init position counter
 | ||||
|     Uint16 IEI:2;               // 9:8    Index event init of position count
 | ||||
|     Uint16 SEI:2;               // 11:10  Strobe event init
 | ||||
|     Uint16 PCRM:2;              // 13:12  Position counter reset
 | ||||
|     Uint16 FREE_SOFT:2;         // 15:14  Emulation mode
 | ||||
| }; | ||||
| 
 | ||||
| union QEPCTL_REG { | ||||
|     Uint16               all; | ||||
|     struct QEPCTL_BITS   bit; | ||||
| };          | ||||
| 
 | ||||
| //
 | ||||
| // Quadrature capture control register bit definitions
 | ||||
| //
 | ||||
| struct QCAPCTL_BITS {          // bits   description
 | ||||
|     Uint16 UPPS:4;              // 3:0    Unit position pre-scale         
 | ||||
|     Uint16 CCPS:3;              // 6:4    QEP capture timer pre-scale
 | ||||
|     Uint16 rsvd1:8;             // 14:7   reserved
 | ||||
|     Uint16 CEN:1;               // 15     Enable QEP capture
 | ||||
| }; | ||||
| 
 | ||||
| union QCAPCTL_REG { | ||||
|     Uint16               all; | ||||
|     struct QCAPCTL_BITS  bit; | ||||
| };  | ||||
| 
 | ||||
| //
 | ||||
| // Position compare control register bit definitions
 | ||||
| //
 | ||||
| struct QPOSCTL_BITS {           // bits   description
 | ||||
|     Uint16 PCSPW:12;            // 11:0   Position compare sync pulse width
 | ||||
|     Uint16 PCE:1;               // 12     Position compare enable/disable
 | ||||
|     Uint16 PCPOL:1;             // 13     Polarity of sync output
 | ||||
|     Uint16 PCLOAD:1;            // 14     Position compare of shadow load
 | ||||
|     Uint16 PCSHDW:1;            // 15     Position compare shadow enable
 | ||||
| }; | ||||
| 
 | ||||
| union QPOSCTL_REG { | ||||
|     Uint16               all; | ||||
|     struct QPOSCTL_BITS  bit; | ||||
| };          | ||||
| 
 | ||||
| //
 | ||||
| // QEP interrupt control register bit definitions
 | ||||
| //
 | ||||
| struct QEINT_BITS {           // bits   description
 | ||||
|     Uint16 rsvd1:1;           // 0      reserved
 | ||||
|     Uint16 PCE:1;             // 1      Position counter error
 | ||||
|     Uint16 QPE:1;             // 2      Quadrature phase error
 | ||||
|     Uint16 QDC:1;             // 3      Quadrature dir change
 | ||||
|     Uint16 WTO:1;             // 4      Watchdog timeout
 | ||||
|     Uint16 PCU:1;             // 5      Position counter underflow
 | ||||
|     Uint16 PCO:1;             // 6      Position counter overflow
 | ||||
|     Uint16 PCR:1;             // 7      Position compare ready
 | ||||
|     Uint16 PCM:1;             // 8      Position compare match
 | ||||
|     Uint16 SEL:1;             // 9      Strobe event latch
 | ||||
|     Uint16 IEL:1;             // 10     Event latch
 | ||||
|     Uint16 UTO:1;             // 11     Unit timeout
 | ||||
|     Uint16 rsvd2:4;           // 15:12  reserved
 | ||||
| }; | ||||
| 
 | ||||
| union QEINT_REG { | ||||
|     Uint16               all; | ||||
|     struct QEINT_BITS    bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // QEP interrupt status register bit definitions
 | ||||
| //
 | ||||
| struct QFLG_BITS {           // bits   description
 | ||||
|     Uint16 INT:1;            // 0      Global interrupt 
 | ||||
|     Uint16 PCE:1;            // 1      Position counter error
 | ||||
|     Uint16 PHE:1;            // 2      Quadrature phase error
 | ||||
|     Uint16 QDC:1;            // 3      Quadrature dir change
 | ||||
|     Uint16 WTO:1;            // 4      Watchdog timeout
 | ||||
|     Uint16 PCU:1;            // 5      Position counter underflow
 | ||||
|     Uint16 PCO:1;            // 6      Position counter overflow
 | ||||
|     Uint16 PCR:1;            // 7      Position compare ready
 | ||||
|     Uint16 PCM:1;            // 8      Position compare match
 | ||||
|     Uint16 SEL:1;            // 9      Strobe event latch
 | ||||
|     Uint16 IEL:1;            // 10     Event latch
 | ||||
|     Uint16 UTO:1;            // 11     Unit timeout
 | ||||
|     Uint16 rsvd2:4;          // 15:12  reserved
 | ||||
| }; | ||||
| 
 | ||||
| union QFLG_REG { | ||||
|     Uint16               all; | ||||
|     struct QFLG_BITS     bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // QEP interrupt force register bit definitions
 | ||||
| //
 | ||||
| struct QFRC_BITS {           // bits   description
 | ||||
|     Uint16 reserved:1;       // 0      Reserved
 | ||||
|     Uint16 PCE:1;            // 1      Position counter error
 | ||||
|     Uint16 PHE:1;            // 2      Quadrature phase error
 | ||||
|     Uint16 QDC:1;            // 3      Quadrature dir change
 | ||||
|     Uint16 WTO:1;            // 4      Watchdog timeout
 | ||||
|     Uint16 PCU:1;            // 5      Position counter underflow
 | ||||
|     Uint16 PCO:1;            // 6      Position counter overflow
 | ||||
|     Uint16 PCR:1;            // 7      Position compare ready
 | ||||
|     Uint16 PCM:1;            // 8      Position compare match
 | ||||
|     Uint16 SEL:1;            // 9      Strobe event latch
 | ||||
|     Uint16 IEL:1;            // 10     Event latch
 | ||||
|     Uint16 UTO:1;            // 11     Unit timeout
 | ||||
|     Uint16 rsvd2:4;          // 15:12  reserved
 | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| union QFRC_REG { | ||||
|     Uint16               all; | ||||
|     struct QFRC_BITS     bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // V1.1 Added UPEVNT (bit 7) This reflects changes 
 | ||||
| // made as of F2833x Rev A devices
 | ||||
| //
 | ||||
| 
 | ||||
| //
 | ||||
| // QEP status register bit definitions
 | ||||
| //
 | ||||
| struct QEPSTS_BITS {           // bits   description
 | ||||
|     Uint16 PCEF:1;             // 0      Position counter error
 | ||||
|     Uint16 FIMF:1;             // 1      First index marker
 | ||||
|     Uint16 CDEF:1;             // 2      Capture direction error
 | ||||
|     Uint16 COEF:1;             // 3      Capture overflow error
 | ||||
|     Uint16 QDLF:1;             // 4      QEP direction latch
 | ||||
|     Uint16 QDF:1;              // 5      Quadrature direction
 | ||||
|     Uint16 FIDF:1;             // 6      Direction on first index marker
 | ||||
|     Uint16 UPEVNT:1;           // 7      Unit position event flag
 | ||||
|     Uint16 rsvd1:8;            // 15:8   reserved
 | ||||
| }; | ||||
| 
 | ||||
| union QEPSTS_REG { | ||||
|     Uint16               all; | ||||
|     struct QEPSTS_BITS   bit; | ||||
| }; | ||||
| 
 | ||||
| struct EQEP_REGS { | ||||
|     Uint32              QPOSCNT;   // Position counter 
 | ||||
|     Uint32              QPOSINIT;  // Position counter init
 | ||||
|     Uint32              QPOSMAX;   // Maximum position count
 | ||||
|     Uint32              QPOSCMP;   // Position compare
 | ||||
|     Uint32              QPOSILAT;  // Index position latch
 | ||||
|     Uint32              QPOSSLAT;  // Strobe position latch
 | ||||
|     Uint32              QPOSLAT;   // Position latch
 | ||||
|     Uint32              QUTMR;     // Unit timer
 | ||||
|     Uint32              QUPRD;     // Unit period
 | ||||
|     Uint16              QWDTMR;    // QEP watchdog timer
 | ||||
|     Uint16              QWDPRD;    // QEP watchdog period
 | ||||
|     union  QDECCTL_REG  QDECCTL;   // Quadrature decoder control
 | ||||
|     union  QEPCTL_REG   QEPCTL;    // QEP control 
 | ||||
|     union  QCAPCTL_REG  QCAPCTL;   // Quadrature capture control     
 | ||||
|     union  QPOSCTL_REG  QPOSCTL;   // Position compare control
 | ||||
|     union  QEINT_REG    QEINT;     // QEP interrupt control        
 | ||||
|     union  QFLG_REG     QFLG;      // QEP interrupt flag
 | ||||
|     union  QFLG_REG     QCLR;      // QEP interrupt clear                   
 | ||||
|     union  QFRC_REG     QFRC;      // QEP interrupt force                   
 | ||||
|     union  QEPSTS_REG   QEPSTS;    // QEP status
 | ||||
|     Uint16              QCTMR;     // QEP capture timer
 | ||||
|     Uint16              QCPRD;     // QEP capture period
 | ||||
|     Uint16              QCTMRLAT;  // QEP capture latch
 | ||||
|     Uint16              QCPRDLAT;  // QEP capture period latch
 | ||||
|     Uint16              rsvd1[30]; // reserved
 | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // GPI/O External References & Function Declarations
 | ||||
| //
 | ||||
| extern volatile struct EQEP_REGS EQep1Regs; | ||||
| extern volatile struct EQEP_REGS EQep2Regs; | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif /* extern "C" */ | ||||
| 
 | ||||
| #endif  // end of DSP2833x_EQEP_H definition
 | ||||
| 
 | ||||
| //
 | ||||
| // End of file
 | ||||
| //
 | ||||
| 
 | ||||
| @ -0,0 +1,139 @@ | ||||
| //###########################################################################
 | ||||
| //
 | ||||
| // FILE:   DSP2833x_Examples.h
 | ||||
| //
 | ||||
| // TITLE:  DSP2833x Device Definitions.
 | ||||
| //
 | ||||
| //###########################################################################
 | ||||
| // $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $
 | ||||
| // $Release Date: November  1, 2016 $
 | ||||
| // $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated -
 | ||||
| //             http://www.ti.com/ ALL RIGHTS RESERVED $
 | ||||
| //###########################################################################
 | ||||
| 
 | ||||
| #ifndef DSP2833x_EXAMPLES_H | ||||
| #define DSP2833x_EXAMPLES_H | ||||
| 
 | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
| 
 | ||||
| //
 | ||||
| // Specify the PLL control register (PLLCR) and divide select (DIVSEL) value.
 | ||||
| //
 | ||||
| //#define DSP28_DIVSEL   0   // Enable /4 for SYSCLKOUT
 | ||||
| //#define DSP28_DIVSEL   1 // Enable /4 for SYSCKOUT
 | ||||
| #define DSP28_DIVSEL     2 // Enable /2 for SYSCLKOUT
 | ||||
| //#define DSP28_DIVSEL     3 // Enable /1 for SYSCLKOUT
 | ||||
| 
 | ||||
| #define DSP28_PLLCR   10 | ||||
| //#define DSP28_PLLCR    9
 | ||||
| //#define DSP28_PLLCR    8
 | ||||
| //#define DSP28_PLLCR    7
 | ||||
| //#define DSP28_PLLCR    6
 | ||||
| //#define DSP28_PLLCR    5
 | ||||
| //#define DSP28_PLLCR    4
 | ||||
| //#define DSP28_PLLCR    3
 | ||||
| //#define DSP28_PLLCR    2
 | ||||
| //#define DSP28_PLLCR    1
 | ||||
| //#define DSP28_PLLCR    0  // PLL is bypassed in this mode
 | ||||
| 
 | ||||
| //
 | ||||
| // Specify the clock rate of the CPU (SYSCLKOUT) in nS.
 | ||||
| //
 | ||||
| //  Take into account the input clock frequency and the PLL multiplier
 | ||||
| //	      selected in step 1.
 | ||||
| //
 | ||||
| //      Use one of the values provided, or define your own.
 | ||||
| //      The trailing L is required tells the compiler to treat
 | ||||
| //      the number as a 64-bit value.
 | ||||
| //
 | ||||
| //      Only one statement should be uncommented.
 | ||||
| //
 | ||||
| //      Example 1:150 MHz devices:
 | ||||
| //                CLKIN is a 30MHz crystal.
 | ||||
| //
 | ||||
| //                In step 1 the user specified PLLCR = 0xA for a
 | ||||
| //                150Mhz CPU clock (SYSCLKOUT = 150MHz).
 | ||||
| //
 | ||||
| //                In this case, the CPU_RATE will be 6.667L
 | ||||
| //                Uncomment the line:  #define CPU_RATE  6.667L
 | ||||
| //
 | ||||
| //      Example 2:  100 MHz devices:
 | ||||
| //                  CLKIN is a 20MHz crystal.
 | ||||
| //
 | ||||
| //	              In step 1 the user specified PLLCR = 0xA for a
 | ||||
| //	              100Mhz CPU clock (SYSCLKOUT = 100MHz).
 | ||||
| //
 | ||||
| //	              In this case, the CPU_RATE will be 10.000L
 | ||||
| //                  Uncomment the line:  #define CPU_RATE  10.000L
 | ||||
| //
 | ||||
| #define CPU_RATE    6.667L   // for a 150MHz CPU clock speed (SYSCLKOUT)
 | ||||
| //#define CPU_RATE    7.143L   // for a 140MHz CPU clock speed (SYSCLKOUT)
 | ||||
| //#define CPU_RATE    8.333L   // for a 120MHz CPU clock speed (SYSCLKOUT)
 | ||||
| //#define CPU_RATE   10.000L   // for a 100MHz CPU clock speed (SYSCLKOUT)
 | ||||
| //#define CPU_RATE   13.330L   // for a 75MHz CPU clock speed (SYSCLKOUT)
 | ||||
| //#define CPU_RATE   20.000L   // for a 50MHz CPU clock speed  (SYSCLKOUT)
 | ||||
| //#define CPU_RATE   33.333L   // for a 30MHz CPU clock speed  (SYSCLKOUT)
 | ||||
| //#define CPU_RATE   41.667L   // for a 24MHz CPU clock speed  (SYSCLKOUT)
 | ||||
| //#define CPU_RATE   50.000L   // for a 20MHz CPU clock speed  (SYSCLKOUT)
 | ||||
| //#define CPU_RATE   66.667L   // for a 15MHz CPU clock speed  (SYSCLKOUT)
 | ||||
| //#define CPU_RATE  100.000L   // for a 10MHz CPU clock speed  (SYSCLKOUT)
 | ||||
| 
 | ||||
| //
 | ||||
| // Target device (in DSP2833x_Device.h) determines CPU frequency
 | ||||
| // (for examples) - either 150 MHz (for 28335 and 28334) or 100 MHz
 | ||||
| // (for 28332 and 28333). User does not have to change anything here.
 | ||||
| //
 | ||||
| #if DSP28_28332 || DSP28_28333  // 28332 and 28333 devices only
 | ||||
|   #define CPU_FRQ_100MHZ  1     // 100 Mhz CPU Freq (20 MHz input freq)
 | ||||
|   #define CPU_FRQ_150MHZ  0 | ||||
| #else | ||||
|   #define CPU_FRQ_100MHZ  0  // DSP28_28335||DSP28_28334
 | ||||
|   #define CPU_FRQ_150MHZ  1  // 150 MHz CPU Freq (30 MHz input freq) by DEFAULT
 | ||||
| #endif | ||||
| 
 | ||||
| //
 | ||||
| // Include Example Header Files
 | ||||
| //
 | ||||
| 
 | ||||
| //
 | ||||
| // Prototypes for global functions within the .c files.
 | ||||
| //
 | ||||
| #include "F28335/DSP2833x_GlobalPrototypes.h"                                               | ||||
| #include "F28335/DSP2833x_EPwm_defines.h"       // Macros used for PWM examples. | ||||
| #include "F28335/DSP2833x_Dma_defines.h"        // Macros used for DMA examples. | ||||
| #include "F28335/DSP2833x_I2c_defines.h"        // Macros used for I2C examples. | ||||
| 
 | ||||
| #define PARTNO_28335  0xEF | ||||
| #define PARTNO_28334  0xEE | ||||
| #define PARTNO_28333  0xEA | ||||
| #define PARTNO_28332  0xED | ||||
| #define PARTNO_28235  0xE8 | ||||
| #define PARTNO_28234  0xE7 | ||||
| #define PARTNO_28232  0xE6 | ||||
| 
 | ||||
| //
 | ||||
| // Include files not used with DSP/BIOS
 | ||||
| //
 | ||||
| #ifndef DSP28_BIOS | ||||
| #include "F28335/DSP2833x_DefaultIsr.h" | ||||
| #endif | ||||
| 
 | ||||
| //
 | ||||
| // DO NOT MODIFY THIS LINE.
 | ||||
| //
 | ||||
| #define DELAY_US(A)  DSP28x_usDelay(((((long double) A * 1000.0L) / \ | ||||
|         (long double)CPU_RATE) - 9.0L) / 5.0L) | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif /* extern "C" */ | ||||
| 
 | ||||
| #endif  // end of DSP2833x_EXAMPLES_H definition
 | ||||
| 
 | ||||
| //
 | ||||
| // End of file
 | ||||
| //
 | ||||
| 
 | ||||
| @ -0,0 +1,260 @@ | ||||
| //###########################################################################
 | ||||
| //
 | ||||
| // FILE:   DSP2833x_GlobalPrototypes.h
 | ||||
| //
 | ||||
| // TITLE:  Global prototypes for DSP2833x Examples
 | ||||
| //
 | ||||
| //###########################################################################
 | ||||
| // $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $
 | ||||
| // $Release Date: November  1, 2016 $
 | ||||
| // $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated -
 | ||||
| //             http://www.ti.com/ ALL RIGHTS RESERVED $
 | ||||
| //###########################################################################
 | ||||
| 
 | ||||
| #ifndef DSP2833x_GLOBALPROTOTYPES_H | ||||
| #define DSP2833x_GLOBALPROTOTYPES_H | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
| 
 | ||||
| //
 | ||||
| // shared global function prototypes
 | ||||
| //
 | ||||
| extern void InitAdc(void); | ||||
| extern void DMAInitialize(void); | ||||
| 
 | ||||
| //
 | ||||
| // DMA Channel 1
 | ||||
| //
 | ||||
| extern void DMACH1AddrConfig(volatile Uint16 *DMA_Dest, | ||||
|                              volatile Uint16 *DMA_Source); | ||||
| extern void DMACH1BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep); | ||||
| extern void DMACH1TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep); | ||||
| extern void DMACH1WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize, | ||||
|                              int16 deswstep); | ||||
| extern void DMACH1ModeConfig(Uint16 persel, Uint16 perinte, Uint16 oneshot,  | ||||
|                              Uint16 cont, Uint16 synce, Uint16 syncsel,  | ||||
|                              Uint16 ovrinte, Uint16 datasize, Uint16 chintmode, | ||||
|                              Uint16 chinte); | ||||
| extern void StartDMACH1(void); | ||||
| 
 | ||||
| //
 | ||||
| // DMA Channel 2
 | ||||
| //
 | ||||
| extern void DMACH2AddrConfig(volatile Uint16 *DMA_Dest, | ||||
|                              volatile Uint16 *DMA_Source); | ||||
| extern void DMACH2BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep); | ||||
| extern void DMACH2TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep); | ||||
| extern void DMACH2WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize,  | ||||
|                              int16 deswstep); | ||||
| extern void DMACH2ModeConfig(Uint16 persel, Uint16 perinte, Uint16 oneshot,  | ||||
|                              Uint16 cont, Uint16 synce, Uint16 syncsel, | ||||
|                              Uint16 ovrinte, Uint16 datasize, Uint16 chintmode, | ||||
|                              Uint16 chinte); | ||||
| extern void StartDMACH2(void); | ||||
| 
 | ||||
| //
 | ||||
| // DMA Channel 3
 | ||||
| //
 | ||||
| extern void DMACH3AddrConfig(volatile Uint16 *DMA_Dest, | ||||
|                              volatile Uint16 *DMA_Source); | ||||
| extern void DMACH3BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep); | ||||
| extern void DMACH3TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep); | ||||
| extern void DMACH3WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize,  | ||||
|                              int16 deswstep); | ||||
| extern void DMACH3ModeConfig(Uint16 persel, Uint16 perinte, Uint16 oneshot,  | ||||
|                              Uint16 cont, Uint16 synce, Uint16 syncsel,  | ||||
|                              Uint16 ovrinte, Uint16 datasize, Uint16 chintmode, | ||||
|                              Uint16 chinte); | ||||
| extern void StartDMACH3(void); | ||||
| 
 | ||||
| //
 | ||||
| // DMA Channel 4
 | ||||
| //
 | ||||
| extern void DMACH4AddrConfig(volatile Uint16 *DMA_Dest, | ||||
|                              volatile Uint16 *DMA_Source); | ||||
| extern void DMACH4BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep); | ||||
| extern void DMACH4TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep); | ||||
| extern void DMACH4WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize,  | ||||
|                              int16 deswstep); | ||||
| extern void DMACH4ModeConfig(Uint16 persel, Uint16 perinte, Uint16 oneshot,  | ||||
|                              Uint16 cont, Uint16 synce, Uint16 syncsel, | ||||
|                              Uint16 ovrinte, Uint16 datasize, Uint16 chintmode, | ||||
|                              Uint16 chinte); | ||||
| extern void StartDMACH4(void); | ||||
| 
 | ||||
| //
 | ||||
| // DMA Channel 5
 | ||||
| //
 | ||||
| extern void DMACH5AddrConfig(volatile Uint16 *DMA_Dest, | ||||
|                              volatile Uint16 *DMA_Source); | ||||
| extern void DMACH5BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep); | ||||
| extern void DMACH5TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep); | ||||
| extern void DMACH5WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize,  | ||||
|                              int16 deswstep); | ||||
| extern void DMACH5ModeConfig(Uint16 persel, Uint16 perinte, Uint16 oneshot,  | ||||
|                              Uint16 cont, Uint16 synce, Uint16 syncsel, | ||||
|                              Uint16 ovrinte, Uint16 datasize, Uint16 chintmode, | ||||
|                              Uint16 chinte); | ||||
| extern void StartDMACH5(void); | ||||
| 
 | ||||
| //
 | ||||
| // DMA Channel 6
 | ||||
| //
 | ||||
| extern void DMACH6AddrConfig(volatile Uint16 *DMA_Dest, | ||||
|                              volatile Uint16 *DMA_Source); | ||||
| extern void DMACH6BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep); | ||||
| extern void DMACH6TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep); | ||||
| extern void DMACH6WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize,  | ||||
|                              int16 deswstep); | ||||
| extern void DMACH6ModeConfig(Uint16 persel, Uint16 perinte, Uint16 oneshot,  | ||||
|                              Uint16 cont, Uint16 synce, Uint16 syncsel, | ||||
|                              Uint16 ovrinte, Uint16 datasize, Uint16 chintmode, | ||||
|                              Uint16 chinte); | ||||
| extern void StartDMACH6(void); | ||||
| 
 | ||||
| extern void InitPeripherals(void); | ||||
| #if DSP28_ECANA | ||||
| extern void InitECan(void); | ||||
| extern void InitECana(void); | ||||
| extern void InitECanGpio(void); | ||||
| extern void InitECanaGpio(void); | ||||
| #endif // endif DSP28_ECANA
 | ||||
| #if DSP28_ECANB | ||||
| extern void InitECanb(void); | ||||
| extern void InitECanbGpio(void); | ||||
| #endif // endif DSP28_ECANB
 | ||||
| extern void InitECap(void); | ||||
| extern void InitECapGpio(void); | ||||
| extern void InitECap1Gpio(void); | ||||
| extern void InitECap2Gpio(void); | ||||
| #if DSP28_ECAP3 | ||||
| extern void InitECap3Gpio(void); | ||||
| #endif // endif DSP28_ECAP3
 | ||||
| #if DSP28_ECAP4 | ||||
| extern void InitECap4Gpio(void); | ||||
| #endif // endif DSP28_ECAP4
 | ||||
| #if DSP28_ECAP5 | ||||
| extern void InitECap5Gpio(void); | ||||
| #endif // endif DSP28_ECAP5
 | ||||
| #if DSP28_ECAP6 | ||||
| extern void InitECap6Gpio(void); | ||||
| #endif // endif DSP28_ECAP6
 | ||||
| extern void InitEPwm(void); | ||||
| extern void InitEPwmGpio(void); | ||||
| extern void InitEPwm1Gpio(void); | ||||
| extern void InitEPwm2Gpio(void); | ||||
| extern void InitEPwm3Gpio(void); | ||||
| #if DSP28_EPWM4 | ||||
| extern void InitEPwm4Gpio(void); | ||||
| #endif // endif DSP28_EPWM4
 | ||||
| #if DSP28_EPWM5 | ||||
| extern void InitEPwm5Gpio(void); | ||||
| #endif // endif DSP28_EPWM5
 | ||||
| #if DSP28_EPWM6 | ||||
| extern void InitEPwm6Gpio(void); | ||||
| #endif // endif DSP28_EPWM6
 | ||||
| #if DSP28_EQEP1 | ||||
| extern void InitEQep(void); | ||||
| extern void InitEQepGpio(void); | ||||
| extern void InitEQep1Gpio(void); | ||||
| #endif // if DSP28_EQEP1
 | ||||
| #if DSP28_EQEP2 | ||||
| extern void InitEQep2Gpio(void); | ||||
| #endif // endif DSP28_EQEP2
 | ||||
| extern void InitGpio(void); | ||||
| extern void InitI2CGpio(void); | ||||
| 
 | ||||
| extern void InitMcbsp(void); | ||||
| extern void InitMcbspa(void); | ||||
| extern void delay_loop(void); | ||||
| extern void InitMcbspaGpio(void); | ||||
| extern void InitMcbspa8bit(void); | ||||
| extern void InitMcbspa12bit(void); | ||||
| extern void InitMcbspa16bit(void); | ||||
| extern void InitMcbspa20bit(void); | ||||
| extern void InitMcbspa24bit(void); | ||||
| extern void InitMcbspa32bit(void); | ||||
| #if DSP28_MCBSPB | ||||
| extern void InitMcbspb(void); | ||||
| extern void InitMcbspbGpio(void); | ||||
| extern void InitMcbspb8bit(void); | ||||
| extern void InitMcbspb12bit(void); | ||||
| extern void InitMcbspb16bit(void); | ||||
| extern void InitMcbspb20bit(void); | ||||
| extern void InitMcbspb24bit(void); | ||||
| extern void InitMcbspb32bit(void); | ||||
| #endif // endif DSP28_MCBSPB
 | ||||
| 
 | ||||
| extern void InitPieCtrl(void); | ||||
| extern void InitPieVectTable(void); | ||||
| 
 | ||||
| extern void InitSci(void); | ||||
| extern void InitSciGpio(void); | ||||
| extern void InitSciaGpio(void); | ||||
| #if DSP28_SCIB | ||||
| extern void InitScibGpio(void); | ||||
| #endif // endif DSP28_SCIB
 | ||||
| #if DSP28_SCIC | ||||
| extern void InitScicGpio(void); | ||||
| #endif | ||||
| extern void InitSpi(void); | ||||
| extern void InitSpiGpio(void); | ||||
| extern void InitSpiaGpio(void); | ||||
| extern void InitSysCtrl(void); | ||||
| extern void InitTzGpio(void); | ||||
| extern void InitXIntrupt(void); | ||||
| extern void XintfInit(void); | ||||
| extern void InitXintf16Gpio(); | ||||
| extern void InitXintf32Gpio(); | ||||
| extern void InitPll(Uint16 pllcr, Uint16 clkindiv); | ||||
| extern void InitPeripheralClocks(void); | ||||
| extern void EnableInterrupts(void); | ||||
| extern void DSP28x_usDelay(Uint32 Count); | ||||
| extern void ADC_cal (void); | ||||
| #define KickDog ServiceDog     // For compatiblity with previous versions
 | ||||
| extern void ServiceDog(void); | ||||
| extern void DisableDog(void); | ||||
| extern Uint16 CsmUnlock(void); | ||||
| 
 | ||||
| //
 | ||||
| // DSP28_DBGIER.asm
 | ||||
| //
 | ||||
| extern void SetDBGIER(Uint16 dbgier); | ||||
| 
 | ||||
| //
 | ||||
| //                 CAUTION
 | ||||
| // This function MUST be executed out of RAM. Executing it
 | ||||
| // out of OTP/Flash will yield unpredictable results
 | ||||
| //
 | ||||
| extern void InitFlash(void); | ||||
| 
 | ||||
| void MemCopy(Uint16 *SourceAddr, Uint16* SourceEndAddr, Uint16* DestAddr); | ||||
| 
 | ||||
| //
 | ||||
| // External symbols created by the linker cmd file
 | ||||
| // DSP28 examples will use these to relocate code from one LOAD location
 | ||||
| // in either Flash or XINTF to a different RUN location in internal
 | ||||
| // RAM
 | ||||
| //
 | ||||
| extern Uint16 RamfuncsLoadStart; | ||||
| extern Uint16 RamfuncsLoadEnd; | ||||
| extern Uint16 RamfuncsRunStart; | ||||
| extern Uint16 RamfuncsLoadSize; | ||||
| 
 | ||||
| extern Uint16 XintffuncsLoadStart; | ||||
| extern Uint16 XintffuncsLoadEnd; | ||||
| extern Uint16 XintffuncsRunStart; | ||||
| extern Uint16 XintffuncsLoadSize; | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif /* extern "C" */ | ||||
| 
 | ||||
| #endif   // - end of DSP2833x_GLOBALPROTOTYPES_H
 | ||||
| 
 | ||||
| //
 | ||||
| // End of file
 | ||||
| //
 | ||||
| 
 | ||||
| @ -0,0 +1,462 @@ | ||||
| //###########################################################################
 | ||||
| //
 | ||||
| // FILE:   DSP2833x_Gpio.h
 | ||||
| //
 | ||||
| // TITLE:  DSP2833x General Purpose I/O Definitions.
 | ||||
| //
 | ||||
| //###########################################################################
 | ||||
| // $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $
 | ||||
| // $Release Date: November  1, 2016 $
 | ||||
| // $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated -
 | ||||
| //             http://www.ti.com/ ALL RIGHTS RESERVED $
 | ||||
| //###########################################################################
 | ||||
| 
 | ||||
| #ifndef DSP2833x_GPIO_H | ||||
| #define DSP2833x_GPIO_H | ||||
| 
 | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
| 
 | ||||
| //
 | ||||
| // GPIO A control register bit definitions
 | ||||
| //
 | ||||
| struct GPACTRL_BITS {         // bits   description
 | ||||
|     Uint16 QUALPRD0:8;        // 7:0    Qual period
 | ||||
|     Uint16 QUALPRD1:8;        // 15:8   Qual period
 | ||||
|     Uint16 QUALPRD2:8;        // 23:16  Qual period
 | ||||
|     Uint16 QUALPRD3:8;        // 31:24  Qual period
 | ||||
| }; | ||||
| 
 | ||||
| union GPACTRL_REG { | ||||
|     Uint32              all; | ||||
|     struct GPACTRL_BITS bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // GPIO B control register bit definitions
 | ||||
| //
 | ||||
| struct GPBCTRL_BITS {        // bits   description
 | ||||
|     Uint16 QUALPRD0:8;        // 7:0    Qual period
 | ||||
|     Uint16 QUALPRD1:8;        // 15:8   Qual period
 | ||||
|     Uint16 QUALPRD2:8;        // 23:16  Qual period
 | ||||
|     Uint16 QUALPRD3:8;        // 31:24
 | ||||
| }; | ||||
| 
 | ||||
| union GPBCTRL_REG { | ||||
|     Uint32              all; | ||||
|     struct GPBCTRL_BITS bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // GPIO A Qual/MUX select register bit definitions
 | ||||
| //
 | ||||
| struct GPA1_BITS {             // bits   description
 | ||||
|     Uint16 GPIO0:2;            // 1:0    GPIO0
 | ||||
|     Uint16 GPIO1:2;            // 3:2    GPIO1
 | ||||
|     Uint16 GPIO2:2;            // 5:4    GPIO2
 | ||||
|     Uint16 GPIO3:2;            // 7:6    GPIO3
 | ||||
|     Uint16 GPIO4:2;            // 9:8    GPIO4
 | ||||
|     Uint16 GPIO5:2;            // 11:10  GPIO5
 | ||||
|     Uint16 GPIO6:2;            // 13:12  GPIO6
 | ||||
|     Uint16 GPIO7:2;            // 15:14  GPIO7
 | ||||
|     Uint16 GPIO8:2;            // 17:16  GPIO8
 | ||||
|     Uint16 GPIO9:2;            // 19:18  GPIO9
 | ||||
|     Uint16 GPIO10:2;           // 21:20  GPIO10
 | ||||
|     Uint16 GPIO11:2;           // 23:22  GPIO11
 | ||||
|     Uint16 GPIO12:2;           // 25:24  GPIO12
 | ||||
|     Uint16 GPIO13:2;           // 27:26  GPIO13
 | ||||
|     Uint16 GPIO14:2;           // 29:28  GPIO14
 | ||||
|     Uint16 GPIO15:2;           // 31:30  GPIO15
 | ||||
| }; | ||||
| 
 | ||||
| struct GPA2_BITS {             // bits   description
 | ||||
|     Uint16 GPIO16:2;           // 1:0    GPIO16
 | ||||
|     Uint16 GPIO17:2;           // 3:2    GPIO17
 | ||||
|     Uint16 GPIO18:2;           // 5:4    GPIO18
 | ||||
|     Uint16 GPIO19:2;           // 7:6    GPIO19
 | ||||
|     Uint16 GPIO20:2;           // 9:8    GPIO20
 | ||||
|     Uint16 GPIO21:2;           // 11:10  GPIO21
 | ||||
|     Uint16 GPIO22:2;           // 13:12  GPIO22
 | ||||
|     Uint16 GPIO23:2;           // 15:14  GPIO23
 | ||||
|     Uint16 GPIO24:2;           // 17:16  GPIO24
 | ||||
|     Uint16 GPIO25:2;           // 19:18  GPIO25
 | ||||
|     Uint16 GPIO26:2;           // 21:20  GPIO26
 | ||||
|     Uint16 GPIO27:2;           // 23:22  GPIO27
 | ||||
|     Uint16 GPIO28:2;           // 25:24  GPIO28
 | ||||
|     Uint16 GPIO29:2;           // 27:26  GPIO29
 | ||||
|     Uint16 GPIO30:2;           // 29:28  GPIO30
 | ||||
|     Uint16 GPIO31:2;           // 31:30  GPIO31
 | ||||
| }; | ||||
| 
 | ||||
| struct GPB1_BITS {             // bits   description
 | ||||
|     Uint16 GPIO32:2;           // 1:0    GPIO32
 | ||||
|     Uint16 GPIO33:2;           // 3:2    GPIO33
 | ||||
|     Uint16 GPIO34:2;           // 5:4    GPIO34
 | ||||
|     Uint16 GPIO35:2;           // 7:6    GPIO35
 | ||||
|     Uint16 GPIO36:2;           // 9:8    GPIO36
 | ||||
|     Uint16 GPIO37:2;           // 11:10  GPIO37
 | ||||
|     Uint16 GPIO38:2;           // 13:12  GPIO38
 | ||||
|     Uint16 GPIO39:2;           // 15:14  GPIO39
 | ||||
|     Uint16 GPIO40:2;           // 17:16  GPIO40
 | ||||
|     Uint16 GPIO41:2;           // 19:16  GPIO41
 | ||||
|     Uint16 GPIO42:2;           // 21:20  GPIO42
 | ||||
|     Uint16 GPIO43:2;           // 23:22  GPIO43
 | ||||
|     Uint16 GPIO44:2;           // 25:24  GPIO44
 | ||||
|     Uint16 GPIO45:2;           // 27:26  GPIO45
 | ||||
|     Uint16 GPIO46:2;           // 29:28  GPIO46
 | ||||
|     Uint16 GPIO47:2;           // 31:30  GPIO47
 | ||||
| }; | ||||
| 
 | ||||
| struct GPB2_BITS  {            // bits   description
 | ||||
|     Uint16 GPIO48:2;           // 1:0    GPIO48
 | ||||
|     Uint16 GPIO49:2;           // 3:2    GPIO49
 | ||||
|     Uint16 GPIO50:2;           // 5:4    GPIO50
 | ||||
|     Uint16 GPIO51:2;           // 7:6    GPIO51
 | ||||
|     Uint16 GPIO52:2;           // 9:8    GPIO52
 | ||||
|     Uint16 GPIO53:2;           // 11:10  GPIO53
 | ||||
|     Uint16 GPIO54:2;           // 13:12  GPIO54
 | ||||
|     Uint16 GPIO55:2;           // 15:14  GPIO55
 | ||||
|     Uint16 GPIO56:2;           // 17:16  GPIO56
 | ||||
|     Uint16 GPIO57:2;           // 19:18  GPIO57
 | ||||
|     Uint16 GPIO58:2;           // 21:20  GPIO58
 | ||||
|     Uint16 GPIO59:2;           // 23:22  GPIO59
 | ||||
|     Uint16 GPIO60:2;           // 25:24  GPIO60
 | ||||
|     Uint16 GPIO61:2;           // 27:26  GPIO61
 | ||||
|     Uint16 GPIO62:2;           // 29:28  GPIO62
 | ||||
|     Uint16 GPIO63:2;           // 31:30  GPIO63
 | ||||
| }; | ||||
| 
 | ||||
| struct GPC1_BITS {             // bits   description
 | ||||
|     Uint16 GPIO64:2;           // 1:0    GPIO64
 | ||||
|     Uint16 GPIO65:2;           // 3:2    GPIO65
 | ||||
|     Uint16 GPIO66:2;           // 5:4    GPIO66
 | ||||
|     Uint16 GPIO67:2;           // 7:6    GPIO67
 | ||||
|     Uint16 GPIO68:2;           // 9:8    GPIO68
 | ||||
|     Uint16 GPIO69:2;           // 11:10  GPIO69
 | ||||
|     Uint16 GPIO70:2;           // 13:12  GPIO70
 | ||||
|     Uint16 GPIO71:2;           // 15:14  GPIO71
 | ||||
|     Uint16 GPIO72:2;           // 17:16  GPIO72
 | ||||
|     Uint16 GPIO73:2;           // 19:18  GPIO73
 | ||||
|     Uint16 GPIO74:2;           // 21:20  GPIO74
 | ||||
|     Uint16 GPIO75:2;           // 23:22  GPIO75
 | ||||
|     Uint16 GPIO76:2;           // 25:24  GPIO76
 | ||||
|     Uint16 GPIO77:2;           // 27:26  GPIO77
 | ||||
|     Uint16 GPIO78:2;           // 29:28  GPIO78
 | ||||
|     Uint16 GPIO79:2;           // 31:30  GPIO79
 | ||||
| }; | ||||
| 
 | ||||
| struct GPC2_BITS {             // bits   description
 | ||||
|     Uint16 GPIO80:2;           // 1:0    GPIO80
 | ||||
|     Uint16 GPIO81:2;           // 3:2    GPIO81
 | ||||
|     Uint16 GPIO82:2;           // 5:4    GPIO82
 | ||||
|     Uint16 GPIO83:2;           // 7:6    GPIO83
 | ||||
|     Uint16 GPIO84:2;           // 9:8    GPIO84
 | ||||
|     Uint16 GPIO85:2;           // 11:10  GPIO85
 | ||||
|     Uint16 GPIO86:2;           // 13:12  GPIO86
 | ||||
|     Uint16 GPIO87:2;           // 15:14  GPIO87
 | ||||
|     Uint16 rsvd:16;            // 31:16  reserved
 | ||||
| }; | ||||
| 
 | ||||
| union GPA1_REG { | ||||
|     Uint32              all; | ||||
|     struct GPA1_BITS    bit; | ||||
| }; | ||||
| 
 | ||||
| union GPA2_REG { | ||||
|     Uint32              all; | ||||
|     struct GPA2_BITS    bit; | ||||
| }; | ||||
| 
 | ||||
| union GPB1_REG { | ||||
|     Uint32              all; | ||||
|     struct GPB1_BITS    bit; | ||||
| }; | ||||
| 
 | ||||
| union GPB2_REG { | ||||
|     Uint32              all; | ||||
|     struct GPB2_BITS    bit; | ||||
| }; | ||||
| 
 | ||||
| union GPC1_REG { | ||||
|     Uint32              all; | ||||
|     struct GPC1_BITS    bit; | ||||
| }; | ||||
| 
 | ||||
| union GPC2_REG { | ||||
|     Uint32              all; | ||||
|     struct GPC2_BITS    bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // GPIO A DIR/TOGGLE/SET/CLEAR register bit definitions
 | ||||
| //
 | ||||
| struct GPADAT_BITS {           // bits   description
 | ||||
|     Uint16 GPIO0:1;            // 0      GPIO0
 | ||||
|     Uint16 GPIO1:1;            // 1      GPIO1
 | ||||
|     Uint16 GPIO2:1;            // 2      GPIO2
 | ||||
|     Uint16 GPIO3:1;            // 3      GPIO3
 | ||||
|     Uint16 GPIO4:1;            // 4      GPIO4
 | ||||
|     Uint16 GPIO5:1;            // 5      GPIO5
 | ||||
|     Uint16 GPIO6:1;            // 6      GPIO6
 | ||||
|     Uint16 GPIO7:1;            // 7      GPIO7
 | ||||
|     Uint16 GPIO8:1;            // 8      GPIO8
 | ||||
|     Uint16 GPIO9:1;            // 9      GPIO9
 | ||||
|     Uint16 GPIO10:1;           // 10     GPIO10
 | ||||
|     Uint16 GPIO11:1;           // 11     GPIO11
 | ||||
|     Uint16 GPIO12:1;           // 12     GPIO12
 | ||||
|     Uint16 GPIO13:1;           // 13     GPIO13
 | ||||
|     Uint16 GPIO14:1;           // 14     GPIO14
 | ||||
|     Uint16 GPIO15:1;           // 15     GPIO15
 | ||||
|     Uint16 GPIO16:1;           // 16     GPIO16
 | ||||
|     Uint16 GPIO17:1;           // 17     GPIO17
 | ||||
|     Uint16 GPIO18:1;           // 18     GPIO18
 | ||||
|     Uint16 GPIO19:1;           // 19     GPIO19
 | ||||
|     Uint16 GPIO20:1;           // 20     GPIO20
 | ||||
|     Uint16 GPIO21:1;           // 21     GPIO21
 | ||||
|     Uint16 GPIO22:1;           // 22     GPIO22
 | ||||
|     Uint16 GPIO23:1;           // 23     GPIO23
 | ||||
|     Uint16 GPIO24:1;           // 24     GPIO24
 | ||||
|     Uint16 GPIO25:1;           // 25     GPIO25
 | ||||
|     Uint16 GPIO26:1;           // 26     GPIO26
 | ||||
|     Uint16 GPIO27:1;           // 27     GPIO27
 | ||||
|     Uint16 GPIO28:1;           // 28     GPIO28
 | ||||
|     Uint16 GPIO29:1;           // 29     GPIO29
 | ||||
|     Uint16 GPIO30:1;           // 30     GPIO30
 | ||||
|     Uint16 GPIO31:1;           // 31     GPIO31
 | ||||
| }; | ||||
| 
 | ||||
| struct GPBDAT_BITS {           // bits   description
 | ||||
|     Uint16 GPIO32:1;           // 0      GPIO32
 | ||||
|     Uint16 GPIO33:1;           // 1      GPIO33
 | ||||
|     Uint16 GPIO34:1;           // 2      GPIO34
 | ||||
|     Uint16 GPIO35:1;           // 3      GPIO35
 | ||||
|     Uint16 GPIO36:1;           // 4      GPIO36
 | ||||
|     Uint16 GPIO37:1;           // 5      GPIO37
 | ||||
|     Uint16 GPIO38:1;           // 6      GPIO38
 | ||||
|     Uint16 GPIO39:1;           // 7      GPIO39
 | ||||
|     Uint16 GPIO40:1;           // 8      GPIO40
 | ||||
|     Uint16 GPIO41:1;           // 9      GPIO41
 | ||||
|     Uint16 GPIO42:1;           // 10     GPIO42
 | ||||
|     Uint16 GPIO43:1;           // 11     GPIO43
 | ||||
|     Uint16 GPIO44:1;           // 12     GPIO44
 | ||||
|     Uint16 GPIO45:1;           // 13     GPIO45
 | ||||
|     Uint16 GPIO46:1;           // 14     GPIO46
 | ||||
|     Uint16 GPIO47:1;           // 15     GPIO47
 | ||||
|     Uint16 GPIO48:1;           // 16     GPIO48
 | ||||
|     Uint16 GPIO49:1;           // 17     GPIO49
 | ||||
|     Uint16 GPIO50:1;           // 18     GPIO50
 | ||||
|     Uint16 GPIO51:1;           // 19     GPIO51
 | ||||
|     Uint16 GPIO52:1;           // 20     GPIO52
 | ||||
|     Uint16 GPIO53:1;           // 21     GPIO53
 | ||||
|     Uint16 GPIO54:1;           // 22     GPIO54
 | ||||
|     Uint16 GPIO55:1;           // 23     GPIO55
 | ||||
|     Uint16 GPIO56:1;           // 24     GPIO56
 | ||||
|     Uint16 GPIO57:1;           // 25     GPIO57
 | ||||
|     Uint16 GPIO58:1;           // 26     GPIO58
 | ||||
|     Uint16 GPIO59:1;           // 27     GPIO59
 | ||||
|     Uint16 GPIO60:1;           // 28     GPIO60
 | ||||
|     Uint16 GPIO61:1;           // 29     GPIO61
 | ||||
|     Uint16 GPIO62:1;           // 30     GPIO62
 | ||||
|     Uint16 GPIO63:1;           // 31     GPIO63
 | ||||
| }; | ||||
| 
 | ||||
| struct GPCDAT_BITS {           // bits   description
 | ||||
|     Uint16 GPIO64:1;           // 0      GPIO64
 | ||||
|     Uint16 GPIO65:1;           // 1      GPIO65
 | ||||
|     Uint16 GPIO66:1;           // 2      GPIO66
 | ||||
|     Uint16 GPIO67:1;           // 3      GPIO67
 | ||||
|     Uint16 GPIO68:1;           // 4      GPIO68
 | ||||
|     Uint16 GPIO69:1;           // 5      GPIO69
 | ||||
|     Uint16 GPIO70:1;           // 6      GPIO70
 | ||||
|     Uint16 GPIO71:1;           // 7      GPIO71
 | ||||
|     Uint16 GPIO72:1;           // 8      GPIO72
 | ||||
|     Uint16 GPIO73:1;           // 9      GPIO73
 | ||||
|     Uint16 GPIO74:1;           // 10     GPIO74
 | ||||
|     Uint16 GPIO75:1;           // 11     GPIO75
 | ||||
|     Uint16 GPIO76:1;           // 12     GPIO76
 | ||||
|     Uint16 GPIO77:1;           // 13     GPIO77
 | ||||
|     Uint16 GPIO78:1;           // 14     GPIO78
 | ||||
|     Uint16 GPIO79:1;           // 15     GPIO79
 | ||||
|     Uint16 GPIO80:1;           // 16     GPIO80
 | ||||
|     Uint16 GPIO81:1;           // 17     GPIO81
 | ||||
|     Uint16 GPIO82:1;           // 18     GPIO82
 | ||||
|     Uint16 GPIO83:1;           // 19     GPIO83
 | ||||
|     Uint16 GPIO84:1;           // 20     GPIO84
 | ||||
|     Uint16 GPIO85:1;           // 21     GPIO85
 | ||||
|     Uint16 GPIO86:1;           // 22     GPIO86
 | ||||
|     Uint16 GPIO87:1;           // 23     GPIO87
 | ||||
|     Uint16 rsvd1:8;            // 31:24  reserved
 | ||||
| }; | ||||
| 
 | ||||
| union GPADAT_REG { | ||||
|     Uint32              all; | ||||
|     struct GPADAT_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| union GPBDAT_REG { | ||||
|     Uint32              all; | ||||
|     struct GPBDAT_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| union GPCDAT_REG { | ||||
|     Uint32              all; | ||||
|     struct GPCDAT_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // GPIO Xint1/XINT2/XNMI select register bit definitions
 | ||||
| //
 | ||||
| struct GPIOXINT_BITS {        // bits   description
 | ||||
|     Uint16 GPIOSEL:5;         // 4:0    Select GPIO interrupt input source
 | ||||
|     Uint16 rsvd1:11;          // 15:5   reserved
 | ||||
| }; | ||||
| 
 | ||||
| union GPIOXINT_REG { | ||||
|     Uint16                all; | ||||
|     struct GPIOXINT_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| struct GPIO_CTRL_REGS { | ||||
|     union  GPACTRL_REG  GPACTRL;   // GPIO A Control Register (GPIO0 to 31)
 | ||||
|      | ||||
|     //
 | ||||
|     // GPIO A Qualifier Select 1 Register (GPIO0 to 15)
 | ||||
|     //
 | ||||
|     union  GPA1_REG     GPAQSEL1; | ||||
|      | ||||
|     //
 | ||||
|     // GPIO A Qualifier Select 2 Register (GPIO16 to 31)
 | ||||
|     //
 | ||||
|     union  GPA2_REG     GPAQSEL2; | ||||
|      | ||||
|     //
 | ||||
|     // GPIO A Mux 1 Register (GPIO0 to 15)
 | ||||
|     //
 | ||||
|     union  GPA1_REG     GPAMUX1; | ||||
|      | ||||
|     //
 | ||||
|     // GPIO A Mux 2 Register (GPIO16 to 31)
 | ||||
|     //
 | ||||
|     union  GPA2_REG     GPAMUX2; | ||||
|      | ||||
|     union  GPADAT_REG   GPADIR;    // GPIO A Direction Register (GPIO0 to 31)
 | ||||
|      | ||||
|     //
 | ||||
|     // GPIO A Pull Up Disable Register (GPIO0 to 31)
 | ||||
|     //
 | ||||
|     union  GPADAT_REG   GPAPUD; | ||||
|      | ||||
|     Uint32              rsvd1; | ||||
|     union  GPBCTRL_REG  GPBCTRL;   // GPIO B Control Register (GPIO32 to 63)
 | ||||
|      | ||||
|     //
 | ||||
|     // GPIO B Qualifier Select 1 Register (GPIO32 to 47)
 | ||||
|     //
 | ||||
|     union  GPB1_REG     GPBQSEL1; | ||||
|      | ||||
|     //
 | ||||
|     // GPIO B Qualifier Select 2 Register (GPIO48 to 63)
 | ||||
|     //
 | ||||
|     union  GPB2_REG     GPBQSEL2;   | ||||
|      | ||||
|     union  GPB1_REG     GPBMUX1;   // GPIO B Mux 1 Register (GPIO32 to 47)
 | ||||
|     union  GPB2_REG     GPBMUX2;   // GPIO B Mux 2 Register (GPIO48 to 63)
 | ||||
|     union  GPBDAT_REG   GPBDIR;    // GPIO B Direction Register (GPIO32 to 63)
 | ||||
|      | ||||
|     //
 | ||||
|     // GPIO B Pull Up Disable Register (GPIO32 to 63)
 | ||||
|     //
 | ||||
|     union  GPBDAT_REG   GPBPUD; | ||||
|      | ||||
|     Uint16              rsvd2[8]; | ||||
|     union  GPC1_REG     GPCMUX1;   // GPIO C Mux 1 Register (GPIO64 to 79)
 | ||||
|     union  GPC2_REG     GPCMUX2;   // GPIO C Mux 2 Register (GPIO80 to 95)
 | ||||
|     union  GPCDAT_REG   GPCDIR;    // GPIO C Direction Register (GPIO64 to 95)
 | ||||
|      | ||||
|     //
 | ||||
|     // GPIO C Pull Up Disable Register (GPIO64 to 95)
 | ||||
|     //
 | ||||
|     union  GPCDAT_REG   GPCPUD; | ||||
| }; | ||||
| 
 | ||||
| struct GPIO_DATA_REGS { | ||||
|     union  GPADAT_REG       GPADAT;       // GPIO Data Register (GPIO0 to 31)
 | ||||
|      | ||||
|     //
 | ||||
|     // GPIO Data Set Register (GPIO0 to 31)
 | ||||
|     //
 | ||||
|     union  GPADAT_REG       GPASET;        | ||||
|      | ||||
|     //
 | ||||
|     // GPIO Data Clear Register (GPIO0 to 31)
 | ||||
|     //
 | ||||
|     union  GPADAT_REG       GPACLEAR;      | ||||
|      | ||||
|     //
 | ||||
|     // GPIO Data Toggle Register (GPIO0 to 31)
 | ||||
|     //
 | ||||
|     union  GPADAT_REG       GPATOGGLE; | ||||
|      | ||||
|     union  GPBDAT_REG       GPBDAT;       // GPIO Data Register (GPIO32 to 63)
 | ||||
|      | ||||
|     //
 | ||||
|     // GPIO Data Set Register (GPIO32 to 63)
 | ||||
|     //
 | ||||
|     union  GPBDAT_REG       GPBSET; | ||||
|      | ||||
|     //
 | ||||
|     // GPIO Data Clear Register (GPIO32 to 63)
 | ||||
|     //
 | ||||
|     union  GPBDAT_REG       GPBCLEAR; | ||||
| 
 | ||||
|     //
 | ||||
|     // GPIO Data Toggle Register (GPIO32 to 63)
 | ||||
|     //
 | ||||
|     union  GPBDAT_REG       GPBTOGGLE; | ||||
|      | ||||
|     union  GPCDAT_REG       GPCDAT;    // GPIO Data Register (GPIO64 to 95)
 | ||||
|     union  GPCDAT_REG       GPCSET;    // GPIO Data Set Register (GPIO64 to 95)
 | ||||
|      | ||||
|     //
 | ||||
|     // GPIO Data Clear Register (GPIO64 to 95)
 | ||||
|     //
 | ||||
|     union  GPCDAT_REG       GPCCLEAR;   | ||||
|      | ||||
|     //
 | ||||
|     // GPIO Data Toggle Register (GPIO64 to 95)
 | ||||
|     //
 | ||||
|     union  GPCDAT_REG       GPCTOGGLE;     | ||||
|     Uint16                  rsvd1[8]; | ||||
| }; | ||||
| 
 | ||||
| struct GPIO_INT_REGS { | ||||
|     union  GPIOXINT_REG     GPIOXINT1SEL; //XINT1 GPIO Input Selection
 | ||||
|     union  GPIOXINT_REG     GPIOXINT2SEL; //XINT2 GPIO Input Selection
 | ||||
|     union  GPIOXINT_REG     GPIOXNMISEL;  //XNMI_Xint13 GPIO Input Selection
 | ||||
|     union  GPIOXINT_REG     GPIOXINT3SEL; //XINT3 GPIO Input Selection
 | ||||
|     union  GPIOXINT_REG     GPIOXINT4SEL; //XINT4 GPIO Input Selection
 | ||||
|     union  GPIOXINT_REG     GPIOXINT5SEL; //XINT5 GPIO Input Selection
 | ||||
|     union  GPIOXINT_REG     GPIOXINT6SEL; //XINT6 GPIO Input Selection
 | ||||
|     union  GPIOXINT_REG     GPIOXINT7SEL; //XINT7 GPIO Input Selection
 | ||||
|     union  GPADAT_REG       GPIOLPMSEL;   //Low power modes GP I/O input select
 | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // GPI/O External References & Function Declarations
 | ||||
| //
 | ||||
| extern volatile struct GPIO_CTRL_REGS GpioCtrlRegs; | ||||
| extern volatile struct GPIO_DATA_REGS GpioDataRegs; | ||||
| extern volatile struct GPIO_INT_REGS GpioIntRegs; | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif /* extern "C" */ | ||||
| 
 | ||||
| #endif  // end of DSP2833x_GPIO_H definition
 | ||||
| 
 | ||||
| //
 | ||||
| // End of file
 | ||||
| //
 | ||||
| 
 | ||||
| @ -0,0 +1,202 @@ | ||||
| //###########################################################################
 | ||||
| //
 | ||||
| // FILE:   DSP2833x_I2c.h
 | ||||
| //
 | ||||
| // TITLE:  DSP2833x Enhanced Quadrature Encoder Pulse Module
 | ||||
| //         Register Bit Definitions.
 | ||||
| //
 | ||||
| //###########################################################################
 | ||||
| // $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $
 | ||||
| // $Release Date: November  1, 2016 $
 | ||||
| // $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated -
 | ||||
| //             http://www.ti.com/ ALL RIGHTS RESERVED $
 | ||||
| //###########################################################################
 | ||||
| 
 | ||||
| #ifndef DSP2833x_I2C_H | ||||
| #define DSP2833x_I2C_H | ||||
| 
 | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
| 
 | ||||
| //
 | ||||
| // I2C interrupt vector register bit definitions
 | ||||
| //
 | ||||
| struct I2CISRC_BITS {          // bits   description
 | ||||
|     Uint16 INTCODE:3;          // 2:0    Interrupt code
 | ||||
|     Uint16 rsvd1:13;           // 15:3   reserved
 | ||||
| }; | ||||
| 
 | ||||
| union I2CISRC_REG { | ||||
|     Uint16                 all; | ||||
|     struct I2CISRC_BITS    bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // I2C interrupt mask register bit definitions
 | ||||
| //
 | ||||
| struct I2CIER_BITS {           // bits   description
 | ||||
|     Uint16 ARBL:1;             // 0      Arbitration lost interrupt
 | ||||
|     Uint16 NACK:1;             // 1      No ack interrupt
 | ||||
|     Uint16 ARDY:1;             // 2      Register access ready interrupt
 | ||||
|     Uint16 RRDY:1;             // 3      Recieve data ready interrupt
 | ||||
|     Uint16 XRDY:1;             // 4      Transmit data ready interrupt
 | ||||
|     Uint16 SCD:1;              // 5      Stop condition detection
 | ||||
|     Uint16 AAS:1;              // 6      Address as slave
 | ||||
|     Uint16 rsvd:9;             // 15:7   reserved
 | ||||
| }; | ||||
| 
 | ||||
| union I2CIER_REG { | ||||
|     Uint16                 all; | ||||
|     struct I2CIER_BITS     bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // I2C status register bit definitions
 | ||||
| //
 | ||||
| struct I2CSTR_BITS {           // bits   description
 | ||||
|     Uint16 ARBL:1;             // 0      Arbitration lost interrupt
 | ||||
|     Uint16 NACK:1;             // 1      No ack interrupt
 | ||||
|     Uint16 ARDY:1;             // 2      Register access ready interrupt
 | ||||
|     Uint16 RRDY:1;             // 3      Recieve data ready interrupt
 | ||||
|     Uint16 XRDY:1;             // 4      Transmit data ready interrupt
 | ||||
|     Uint16 SCD:1;              // 5      Stop condition detection
 | ||||
|     Uint16 rsvd1:2;            // 7:6    reserved
 | ||||
|     Uint16 AD0:1;              // 8      Address Zero
 | ||||
|     Uint16 AAS:1;              // 9      Address as slave
 | ||||
|     Uint16 XSMT:1;             // 10     XMIT shift empty
 | ||||
|     Uint16 RSFULL:1;           // 11     Recieve shift full
 | ||||
|     Uint16 BB:1;               // 12     Bus busy
 | ||||
|     Uint16 NACKSNT:1;          // 13     A no ack sent
 | ||||
|     Uint16 SDIR:1;             // 14     Slave direction
 | ||||
|     Uint16 rsvd2:1;            // 15     reserved
 | ||||
| }; | ||||
| 
 | ||||
| union I2CSTR_REG { | ||||
|     Uint16                 all; | ||||
|     struct I2CSTR_BITS     bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // I2C mode control register bit definitions
 | ||||
| //
 | ||||
| struct I2CMDR_BITS {           // bits   description
 | ||||
|     Uint16 BC:3;               // 2:0    Bit count
 | ||||
|     Uint16 FDF:1;              // 3      Free data format
 | ||||
|     Uint16 STB:1;              // 4      Start byte
 | ||||
|     Uint16 IRS:1;              // 5      I2C Reset not
 | ||||
|     Uint16 DLB:1;              // 6      Digital loopback
 | ||||
|     Uint16 RM:1;               // 7      Repeat mode
 | ||||
|     Uint16 XA:1;               // 8      Expand address
 | ||||
|     Uint16 TRX:1;              // 9      Transmitter/reciever
 | ||||
|     Uint16 MST:1;              // 10     Master/slave
 | ||||
|     Uint16 STP:1;              // 11     Stop condition
 | ||||
|     Uint16 rsvd1:1;            // 12     reserved
 | ||||
|     Uint16 STT:1;              // 13     Start condition
 | ||||
|     Uint16 FREE:1;             // 14     Emulation mode
 | ||||
|     Uint16 NACKMOD:1;          // 15     No Ack mode
 | ||||
| }; | ||||
| 
 | ||||
| union I2CMDR_REG { | ||||
|    Uint16                 all; | ||||
|    struct I2CMDR_BITS     bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // I2C extended mode control register bit definitions
 | ||||
| //
 | ||||
| struct I2CEMDR_BITS {          // bits   description
 | ||||
|     Uint16 BCM:1;              // 0      Backward compatibility mode
 | ||||
|     Uint16 rsvd:15;            // 15     reserved   
 | ||||
| }; | ||||
| 
 | ||||
| union I2CEMDR_REG { | ||||
|     Uint16                 all; | ||||
|     struct I2CEMDR_BITS     bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // I2C pre-scaler register bit definitions
 | ||||
| //
 | ||||
| struct I2CPSC_BITS {          // bits   description
 | ||||
|     Uint16 IPSC:8;            // 7:0    pre-scaler
 | ||||
|     Uint16 rsvd1:8;           // 15:8   reserved
 | ||||
| }; | ||||
| 
 | ||||
| union I2CPSC_REG { | ||||
|     Uint16                 all; | ||||
|     struct I2CPSC_BITS     bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // TX FIFO control register bit definitions
 | ||||
| //
 | ||||
| struct I2CFFTX_BITS {          // bits   description
 | ||||
|     Uint16 TXFFIL:5;           // 4:0    FIFO interrupt level
 | ||||
|     Uint16 TXFFIENA:1;         // 5      FIFO interrupt enable/disable
 | ||||
|     Uint16 TXFFINTCLR:1;       // 6      FIFO clear
 | ||||
|     Uint16 TXFFINT:1;          // 7      FIFO interrupt flag
 | ||||
|     Uint16 TXFFST:5;           // 12:8   FIFO level status
 | ||||
|     Uint16 TXFFRST:1;          // 13     FIFO reset
 | ||||
|     Uint16 I2CFFEN:1;          // 14     enable/disable TX & RX FIFOs
 | ||||
|     Uint16 rsvd1:1;            // 15     reserved
 | ||||
| }; | ||||
| 
 | ||||
| union I2CFFTX_REG { | ||||
|     Uint16                 all; | ||||
|     struct I2CFFTX_BITS    bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // RX FIFO control register bit definitions
 | ||||
| //
 | ||||
| struct I2CFFRX_BITS {          // bits   description
 | ||||
|     Uint16 RXFFIL:5;           // 4:0    FIFO interrupt level
 | ||||
|     Uint16 RXFFIENA:1;         // 5      FIFO interrupt enable/disable
 | ||||
|     Uint16 RXFFINTCLR:1;       // 6      FIFO clear
 | ||||
|     Uint16 RXFFINT:1;          // 7      FIFO interrupt flag
 | ||||
|     Uint16 RXFFST:5;           // 12:8   FIFO level
 | ||||
|     Uint16 RXFFRST:1;          // 13     FIFO reset
 | ||||
|     Uint16 rsvd1:2;            // 15:14  reserved
 | ||||
| }; | ||||
| 
 | ||||
| union I2CFFRX_REG { | ||||
|     Uint16                 all; | ||||
|     struct I2CFFRX_BITS    bit; | ||||
| }; | ||||
| 
 | ||||
| struct I2C_REGS { | ||||
|     Uint16              I2COAR;             // Own address register
 | ||||
|     union  I2CIER_REG   I2CIER;             // Interrupt enable
 | ||||
|     union  I2CSTR_REG   I2CSTR;             // Interrupt status
 | ||||
|     Uint16              I2CCLKL;            // Clock divider low
 | ||||
|     Uint16              I2CCLKH;            // Clock divider high
 | ||||
|     Uint16              I2CCNT;             // Data count
 | ||||
|     Uint16              I2CDRR;             // Data recieve
 | ||||
|     Uint16              I2CSAR;             // Slave address
 | ||||
|     Uint16              I2CDXR;             // Data transmit
 | ||||
|     union  I2CMDR_REG   I2CMDR;             // Mode
 | ||||
|     union  I2CISRC_REG  I2CISRC;            // Interrupt source
 | ||||
|     union  I2CEMDR_REG  I2CEMDR;            // Extended Mode   
 | ||||
|     union  I2CPSC_REG   I2CPSC;             // Pre-scaler
 | ||||
|     Uint16              rsvd2[19];          // reserved
 | ||||
|     union  I2CFFTX_REG  I2CFFTX;            // Transmit FIFO
 | ||||
|     union  I2CFFRX_REG  I2CFFRX;            // Recieve FIFO
 | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // External References & Function Declarations
 | ||||
| //
 | ||||
| extern volatile struct I2C_REGS I2caRegs; | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif /* extern "C" */ | ||||
| 
 | ||||
| #endif  // end of DSP2833x_I2C_H definition
 | ||||
| 
 | ||||
| //
 | ||||
| // End of file
 | ||||
| //
 | ||||
| 
 | ||||
| @ -0,0 +1,148 @@ | ||||
| //###########################################################################
 | ||||
| //
 | ||||
| // FILE:	DSP2833x_I2cExample.h
 | ||||
| //
 | ||||
| // TITLE:	2833x I2C Example Code Definitions.
 | ||||
| //
 | ||||
| //###########################################################################
 | ||||
| // $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $
 | ||||
| // $Release Date: November  1, 2016 $
 | ||||
| // $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated -
 | ||||
| //             http://www.ti.com/ ALL RIGHTS RESERVED $
 | ||||
| //###########################################################################
 | ||||
| 
 | ||||
| #ifndef DSP2833x_I2C_DEFINES_H | ||||
| #define DSP2833x_I2C_DEFINES_H | ||||
| 
 | ||||
| //
 | ||||
| // Defines
 | ||||
| //
 | ||||
| 
 | ||||
| //
 | ||||
| // Error Messages
 | ||||
| //
 | ||||
| #define I2C_ERROR               0xFFFF | ||||
| #define I2C_ARB_LOST_ERROR      0x0001 | ||||
| #define I2C_NACK_ERROR          0x0002 | ||||
| #define I2C_BUS_BUSY_ERROR      0x1000 | ||||
| #define I2C_STP_NOT_READY_ERROR 0x5555 | ||||
| #define I2C_NO_FLAGS            0xAAAA | ||||
| #define I2C_SUCCESS             0x0000 | ||||
| 
 | ||||
| //
 | ||||
| // Clear Status Flags
 | ||||
| //
 | ||||
| #define I2C_CLR_AL_BIT          0x0001 | ||||
| #define I2C_CLR_NACK_BIT        0x0002 | ||||
| #define I2C_CLR_ARDY_BIT        0x0004 | ||||
| #define I2C_CLR_RRDY_BIT        0x0008 | ||||
| #define I2C_CLR_SCD_BIT         0x0020 | ||||
| 
 | ||||
| //
 | ||||
| // Interrupt Source Messages
 | ||||
| //
 | ||||
| #define I2C_NO_ISRC             0x0000 | ||||
| #define I2C_ARB_ISRC            0x0001 | ||||
| #define I2C_NACK_ISRC           0x0002 | ||||
| #define I2C_ARDY_ISRC           0x0003 | ||||
| #define I2C_RX_ISRC             0x0004 | ||||
| #define I2C_TX_ISRC             0x0005 | ||||
| #define I2C_SCD_ISRC            0x0006 | ||||
| #define I2C_AAS_ISRC            0x0007 | ||||
| 
 | ||||
| //
 | ||||
| // I2CMSG structure defines
 | ||||
| //
 | ||||
| #define I2C_NO_STOP  0 | ||||
| #define I2C_YES_STOP 1 | ||||
| #define I2C_RECEIVE  0 | ||||
| #define I2C_TRANSMIT 1 | ||||
| #define I2C_MAX_BUFFER_SIZE 16 | ||||
| 
 | ||||
| //
 | ||||
| // I2C Slave State defines
 | ||||
| //
 | ||||
| #define I2C_NOTSLAVE      0 | ||||
| #define I2C_ADDR_AS_SLAVE 1 | ||||
| #define I2C_ST_MSG_READY  2 | ||||
| 
 | ||||
| //
 | ||||
| // I2C Slave Receiver messages defines
 | ||||
| //
 | ||||
| #define I2C_SND_MSG1 1 | ||||
| #define I2C_SND_MSG2 2 | ||||
| 
 | ||||
| //
 | ||||
| // I2C State defines
 | ||||
| //
 | ||||
| #define I2C_IDLE               0 | ||||
| #define I2C_SLAVE_RECEIVER     1 | ||||
| #define I2C_SLAVE_TRANSMITTER  2 | ||||
| #define I2C_MASTER_RECEIVER    3 | ||||
| #define I2C_MASTER_TRANSMITTER 4 | ||||
| 
 | ||||
| //
 | ||||
| // I2C  Message Commands for I2CMSG struct
 | ||||
| //
 | ||||
| #define I2C_MSGSTAT_INACTIVE          0x0000 | ||||
| #define I2C_MSGSTAT_SEND_WITHSTOP     0x0010 | ||||
| #define I2C_MSGSTAT_WRITE_BUSY        0x0011 | ||||
| #define I2C_MSGSTAT_SEND_NOSTOP       0x0020 | ||||
| #define I2C_MSGSTAT_SEND_NOSTOP_BUSY  0x0021 | ||||
| #define I2C_MSGSTAT_RESTART           0x0022 | ||||
| #define I2C_MSGSTAT_READ_BUSY         0x0023 | ||||
| 
 | ||||
| //
 | ||||
| // Generic defines
 | ||||
| //
 | ||||
| #define I2C_TRUE  1 | ||||
| #define I2C_FALSE 0 | ||||
| #define I2C_YES   1 | ||||
| #define I2C_NO    0 | ||||
| #define I2C_DUMMY_BYTE 0 | ||||
| 
 | ||||
| //
 | ||||
| // Structures
 | ||||
| //
 | ||||
| 
 | ||||
| //
 | ||||
| // I2C Message Structure
 | ||||
| //
 | ||||
| struct I2CMSG  | ||||
| { | ||||
|     Uint16 MsgStatus;	// Word stating what state msg is in:
 | ||||
|                         //   I2C_MSGCMD_INACTIVE = do not send msg
 | ||||
|                         //   I2C_MSGCMD_BUSY = msg start has been sent,
 | ||||
|                         //                     awaiting stop
 | ||||
|                         //   I2C_MSGCMD_SEND_WITHSTOP = command to send
 | ||||
|                         //       master trans msg complete with a stop bit
 | ||||
|                         //   I2C_MSGCMD_SEND_NOSTOP = command to send
 | ||||
|                         //       master trans msg without the stop bit
 | ||||
|                         //   I2C_MSGCMD_RESTART = command to send a restart
 | ||||
|                         //       as a master receiver with a stop bit
 | ||||
|     Uint16 SlaveAddress; // I2C address of slave msg is intended for
 | ||||
|     Uint16 NumOfBytes;	 // Num of valid bytes in (or to be put in MsgBuffer)
 | ||||
|      | ||||
|     //
 | ||||
|     // EEPROM address of data associated with msg (high byte)
 | ||||
|     //
 | ||||
|     Uint16 MemoryHighAddr;   | ||||
|      | ||||
|     //
 | ||||
|     // EEPROM address of data associated with msg (low byte)
 | ||||
|     //
 | ||||
|     Uint16 MemoryLowAddr;    | ||||
|      | ||||
|     //
 | ||||
|     // Array holding msg data - max that MAX_BUFFER_SIZE can be is 16 due to
 | ||||
|     // the FIFO's
 | ||||
|     Uint16 MsgBuffer[I2C_MAX_BUFFER_SIZE];	 | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| #endif  // end of DSP2833x_I2C_DEFINES_H definition
 | ||||
| 
 | ||||
| //
 | ||||
| // End of file
 | ||||
| //
 | ||||
| 
 | ||||
| @ -0,0 +1,776 @@ | ||||
| //###########################################################################
 | ||||
| //
 | ||||
| // FILE:   DSP2833x_Mcbsp.h
 | ||||
| //
 | ||||
| // TITLE:  DSP2833x Device McBSP Register Definitions.
 | ||||
| //
 | ||||
| //###########################################################################
 | ||||
| // $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $
 | ||||
| // $Release Date: November  1, 2016 $
 | ||||
| // $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated -
 | ||||
| //             http://www.ti.com/ ALL RIGHTS RESERVED $
 | ||||
| //###########################################################################
 | ||||
| 
 | ||||
| #ifndef DSP2833x_MCBSP_H | ||||
| #define DSP2833x_MCBSP_H | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
| 
 | ||||
| //
 | ||||
| // McBSP Individual Register Bit Definitions
 | ||||
| //
 | ||||
| 
 | ||||
| //
 | ||||
| // McBSP DRR2 register bit definitions
 | ||||
| //
 | ||||
| struct  DRR2_BITS {        // bit   description
 | ||||
|     Uint16     HWLB:8;     // 16:23 High word low byte
 | ||||
|     Uint16     HWHB:8;     // 24:31 High word high byte
 | ||||
| }; | ||||
| 
 | ||||
| union DRR2_REG { | ||||
|     Uint16            all; | ||||
|     struct DRR2_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // McBSP DRR1 register bit definitions
 | ||||
| //
 | ||||
| struct  DRR1_BITS {        // bit   description
 | ||||
|     Uint16     LWLB:8;     // 16:23 Low word low byte
 | ||||
|     Uint16     LWHB:8;     // 24:31 low word high byte
 | ||||
| }; | ||||
| 
 | ||||
| union DRR1_REG { | ||||
|     Uint16            all; | ||||
|     struct DRR1_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // McBSP DXR2 register bit definitions
 | ||||
| //
 | ||||
| struct  DXR2_BITS {        // bit   description
 | ||||
|     Uint16     HWLB:8;     // 16:23 High word low byte
 | ||||
|     Uint16     HWHB:8;     // 24:31 High word high byte
 | ||||
| }; | ||||
| 
 | ||||
| union DXR2_REG { | ||||
|     Uint16            all; | ||||
|     struct DXR2_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // McBSP DXR1 register bit definitions
 | ||||
| //
 | ||||
| struct  DXR1_BITS {        // bit   description
 | ||||
|     Uint16     LWLB:8;     // 16:23 Low word low byte
 | ||||
|     Uint16     LWHB:8;     // 24:31 low word high byte
 | ||||
| }; | ||||
| 
 | ||||
| union DXR1_REG { | ||||
|     Uint16              all; | ||||
|     struct DXR1_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // SPCR2 control register bit definitions
 | ||||
| //
 | ||||
| struct  SPCR2_BITS {        // bit   description
 | ||||
|     Uint16     XRST:1;      // 0     transmit reset
 | ||||
|     Uint16     XRDY:1;      // 1     transmit ready
 | ||||
|     Uint16     XEMPTY:1;    // 2     Transmit empty
 | ||||
|     Uint16     XSYNCERR:1;  // 3     Transmit syn errorINT flag
 | ||||
|     Uint16     XINTM:2;     // 5:4   Transmit interrupt types
 | ||||
|     Uint16     GRST:1;      // 6     CLKG reset
 | ||||
|     Uint16     FRST:1;      // 7     Frame sync reset
 | ||||
|     Uint16     SOFT:1;      // 8     SOFT bit
 | ||||
|     Uint16     FREE:1;      // 9     FREE bit
 | ||||
|     Uint16     rsvd:6;      // 15:10 reserved
 | ||||
| }; | ||||
| 
 | ||||
| union SPCR2_REG { | ||||
|     Uint16               all; | ||||
|     struct SPCR2_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // SPCR1 control register bit definitions
 | ||||
| //
 | ||||
| struct  SPCR1_BITS {        // bit   description
 | ||||
|     Uint16     RRST:1;      // 0     Receive reset
 | ||||
|     Uint16     RRDY:1;      // 1     Receive  ready
 | ||||
|     Uint16     RFULL:1;     // 2     Receive  full
 | ||||
|     Uint16     RSYNCERR:1;  // 7     Receive  syn error
 | ||||
|     Uint16     RINTM:2;     // 5:4   Receive  interrupt types
 | ||||
|     Uint16     rsvd1:1;     // 6     reserved
 | ||||
|     Uint16     DXENA:1;     // 7     DX hi-z enable
 | ||||
|     Uint16     rsvd2:3;     // 10:8  reserved
 | ||||
|     Uint16     CLKSTP:2;    // 12:11 CLKSTOP mode bit
 | ||||
|     Uint16     RJUST:2;     // 13:14 Right justified
 | ||||
|     Uint16     DLB:1;       // 15    Digital loop back
 | ||||
| }; | ||||
| 
 | ||||
| union SPCR1_REG { | ||||
|     Uint16              all; | ||||
|     struct SPCR1_BITS bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // RCR2 control register bit definitions
 | ||||
| //
 | ||||
| struct  RCR2_BITS {             // bit    description
 | ||||
|     Uint16     RDATDLY:2;       // 1:0    Receive data delay
 | ||||
|     Uint16     RFIG:1;          // 2      Receive  frame sync ignore
 | ||||
|     Uint16     RCOMPAND:2;      // 4:3    Receive  Companding Mode selects
 | ||||
|     Uint16     RWDLEN2:3;       // 7:5    Receive  word length
 | ||||
|     Uint16     RFRLEN2:7;       // 14:8   Receive  Frame sync
 | ||||
|     Uint16     RPHASE:1;        // 15     Receive Phase
 | ||||
| }; | ||||
| 
 | ||||
| union RCR2_REG { | ||||
|     Uint16           all; | ||||
|     struct RCR2_BITS bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // RCR1 control register bit definitions
 | ||||
| //
 | ||||
| struct  RCR1_BITS {          // bit   description
 | ||||
|     Uint16     rsvd1:5;      // 4:0   reserved
 | ||||
|     Uint16     RWDLEN1:3;    // 7:5   Receive word length
 | ||||
|     Uint16     RFRLEN1:7;    // 14:8  Receive frame length
 | ||||
|     Uint16     rsvd2:1;      // 15    reserved
 | ||||
| }; | ||||
| 
 | ||||
| union RCR1_REG { | ||||
|     Uint16           all; | ||||
|     struct RCR1_BITS bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // XCR2 control register bit definitions
 | ||||
| //
 | ||||
| struct  XCR2_BITS {          // bit    description
 | ||||
|     Uint16     XDATDLY:2;    // 1:0    Transmit data delay
 | ||||
|     Uint16     XFIG:1;       // 2      Transmit frame sync ignore
 | ||||
|     Uint16     XCOMPAND:2;   // 4:3    Transmit Companding Mode selects
 | ||||
|     Uint16     XWDLEN2:3;    // 7:5    Transmit  word length
 | ||||
|     Uint16     XFRLEN2:7;    // 14:8   Transmit  Frame sync
 | ||||
|     Uint16     XPHASE:1;     // 15     Transmit Phase
 | ||||
| };   | ||||
| 
 | ||||
| union XCR2_REG { | ||||
|     Uint16           all; | ||||
|     struct XCR2_BITS bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // XCR1 control register bit definitions
 | ||||
| //
 | ||||
| struct  XCR1_BITS {             // bit   description
 | ||||
|     Uint16     rsvd1:5;         // 4:0   reserved
 | ||||
|     Uint16     XWDLEN1:3;       // 7:5   Transmit word length
 | ||||
|     Uint16     XFRLEN1:7;       // 14:8  Transmit frame length
 | ||||
|     Uint16     rsvd2:1;         // 15    reserved
 | ||||
| }; | ||||
| 
 | ||||
| union XCR1_REG { | ||||
|     Uint16             all; | ||||
|     struct XCR1_BITS bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // SRGR2 Sample rate generator control register bit definitions
 | ||||
| //
 | ||||
| struct  SRGR2_BITS {            // bit  description
 | ||||
|     Uint16     FPER:12;         // 11:0 Frame period
 | ||||
|     Uint16     FSGM:1;          // 12   Frame sync generator mode
 | ||||
|     Uint16     CLKSM:1;         // 13   Sample rate generator mode
 | ||||
|     Uint16     rsvd:1;          // 14   reserved
 | ||||
|     Uint16     GSYNC:1;         // 15   CLKG sync
 | ||||
| }; | ||||
| 
 | ||||
| union  SRGR2_REG { | ||||
|     Uint16              all; | ||||
|     struct  SRGR2_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // SRGR1 control register bit definitions
 | ||||
| //
 | ||||
| struct  SRGR1_BITS {         // bit   description
 | ||||
|     Uint16     CLKGDV:8;     // 7:0   CLKG divider
 | ||||
|     Uint16     FWID:8;       // 15:8  Frame width
 | ||||
| }; | ||||
| 
 | ||||
| union  SRGR1_REG { | ||||
|     Uint16              all; | ||||
|     struct  SRGR1_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // MCR2 Multichannel control register bit definitions
 | ||||
| //
 | ||||
| struct  MCR2_BITS {             // bit   description
 | ||||
|     Uint16     XMCM:2;          // 1:0   Transmit multichannel mode
 | ||||
|     Uint16     XCBLK:3;         // 2:4   Transmit current block
 | ||||
|     Uint16     XPABLK:2;        // 5:6   Transmit partition A Block
 | ||||
|     Uint16     XPBBLK:2;        // 7:8   Transmit partition B Block
 | ||||
|     Uint16     XMCME:1;         // 9     Transmit multi-channel enhance mode
 | ||||
|     Uint16     rsvd:6;          // 15:10 reserved
 | ||||
| }; | ||||
| 
 | ||||
| union  MCR2_REG { | ||||
|     Uint16             all; | ||||
|     struct  MCR2_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // MCR1 Multichannel control register bit definitions
 | ||||
| //
 | ||||
| struct  MCR1_BITS {          // bit   description
 | ||||
|     Uint16     RMCM:1;       // 0     Receive multichannel mode
 | ||||
|     Uint16     rsvd:1;       // 1     reserved
 | ||||
|     Uint16     RCBLK:3;      // 4:2   Receive current block
 | ||||
|     Uint16     RPABLK:2;     // 6:5   Receive partition A Block
 | ||||
|     Uint16     RPBBLK:2;     // 7:8   Receive partition B Block
 | ||||
|     Uint16     RMCME:1;      // 9     Receive multi-channel enhance mode
 | ||||
|     Uint16     rsvd1:6;      // 15:10 reserved
 | ||||
| }; | ||||
| 
 | ||||
| union  MCR1_REG { | ||||
|     Uint16             all; | ||||
|     struct  MCR1_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // RCERA control register bit definitions
 | ||||
| //
 | ||||
| struct  RCERA_BITS {          // bit description
 | ||||
|     Uint16     RCEA0:1;       // 0   Receive Channel enable bit
 | ||||
|     Uint16     RCEA1:1;       // 1   Receive Channel enable bit
 | ||||
|     Uint16     RCEA2:1;       // 2   Receive Channel enable bit
 | ||||
|     Uint16     RCEA3:1;       // 3   Receive Channel enable bit
 | ||||
|     Uint16     RCEA4:1;       // 4   Receive Channel enable bit
 | ||||
|     Uint16     RCEA5:1;       // 5   Receive Channel enable bit
 | ||||
|     Uint16     RCEA6:1;       // 6   Receive Channel enable bit
 | ||||
|     Uint16     RCEA7:1;       // 7   Receive Channel enable bit
 | ||||
|     Uint16     RCEA8:1;       // 8   Receive Channel enable bit
 | ||||
|     Uint16     RCEA9:1;       // 9   Receive Channel enable bit
 | ||||
|     Uint16     RCEA10:1;      // 10  Receive Channel enable bit
 | ||||
|     Uint16     RCEA11:1;      // 11  Receive Channel enable bit
 | ||||
|     Uint16     RCEA12:1;      // 12  Receive Channel enable bit
 | ||||
|     Uint16     RCEA13:1;      // 13  Receive Channel enable bit
 | ||||
|     Uint16     RCEA14:1;      // 14  Receive Channel enable bit
 | ||||
|     Uint16     RCEA15:1;      // 15  Receive Channel enable bit
 | ||||
| }; | ||||
| 
 | ||||
| union RCERA_REG { | ||||
|     Uint16              all; | ||||
|     struct  RCERA_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // RCERB control register bit definitions
 | ||||
| //
 | ||||
| struct  RCERB_BITS {          // bit description
 | ||||
|     Uint16     RCEB0:1;       // 0   Receive Channel enable bit
 | ||||
|     Uint16     RCEB1:1;       // 1   Receive Channel enable bit
 | ||||
|     Uint16     RCEB2:1;       // 2   Receive Channel enable bit
 | ||||
|     Uint16     RCEB3:1;       // 3   Receive Channel enable bit
 | ||||
|     Uint16     RCEB4:1;       // 4   Receive Channel enable bit
 | ||||
|     Uint16     RCEB5:1;       // 5   Receive Channel enable bit
 | ||||
|     Uint16     RCEB6:1;       // 6   Receive Channel enable bit
 | ||||
|     Uint16     RCEB7:1;       // 7   Receive Channel enable bit
 | ||||
|     Uint16     RCEB8:1;       // 8   Receive Channel enable bit
 | ||||
|     Uint16     RCEB9:1;       // 9   Receive Channel enable bit
 | ||||
|     Uint16     RCEB10:1;      // 10  Receive Channel enable bit
 | ||||
|     Uint16     RCEB11:1;      // 11  Receive Channel enable bit
 | ||||
|     Uint16     RCEB12:1;      // 12  Receive Channel enable bit
 | ||||
|     Uint16     RCEB13:1;      // 13  Receive Channel enable bit
 | ||||
|     Uint16     RCEB14:1;      // 14  Receive Channel enable bit
 | ||||
|     Uint16     RCEB15:1;      // 15  Receive Channel enable bit
 | ||||
| };  | ||||
| 
 | ||||
| union RCERB_REG { | ||||
|     Uint16              all; | ||||
|     struct  RCERB_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // XCERA control register bit definitions
 | ||||
| //
 | ||||
| struct  XCERA_BITS {            // bit description
 | ||||
|     Uint16     XCERA0:1;        // 0   Receive Channel enable bit
 | ||||
|     Uint16     XCERA1:1;        // 1   Receive Channel enable bit
 | ||||
|     Uint16     XCERA2:1;        // 2   Receive Channel enable bit
 | ||||
|     Uint16     XCERA3:1;        // 3   Receive Channel enable bit
 | ||||
|     Uint16     XCERA4:1;        // 4   Receive Channel enable bit
 | ||||
|     Uint16     XCERA5:1;        // 5   Receive Channel enable bit
 | ||||
|     Uint16     XCERA6:1;        // 6   Receive Channel enable bit
 | ||||
|     Uint16     XCERA7:1;        // 7   Receive Channel enable bit
 | ||||
|     Uint16     XCERA8:1;        // 8   Receive Channel enable bit
 | ||||
|     Uint16     XCERA9:1;        // 9   Receive Channel enable bit
 | ||||
|     Uint16     XCERA10:1;       // 10  Receive Channel enable bit
 | ||||
|     Uint16     XCERA11:1;       // 11  Receive Channel enable bit
 | ||||
|     Uint16     XCERA12:1;       // 12  Receive Channel enable bit
 | ||||
|     Uint16     XCERA13:1;       // 13  Receive Channel enable bit
 | ||||
|     Uint16     XCERA14:1;       // 14  Receive Channel enable bit
 | ||||
|     Uint16     XCERA15:1;       // 15  Receive Channel enable bit
 | ||||
| }; | ||||
| 
 | ||||
| union XCERA_REG { | ||||
|     Uint16              all; | ||||
|     struct  XCERA_BITS  bit; | ||||
| };   | ||||
| 
 | ||||
| //
 | ||||
| // XCERB control register bit definitions
 | ||||
| //
 | ||||
| struct  XCERB_BITS {           // bit description
 | ||||
|     Uint16     XCERB0:1;       // 0   Receive Channel enable bit
 | ||||
|     Uint16     XCERB1:1;       // 1   Receive Channel enable bit
 | ||||
|     Uint16     XCERB2:1;       // 2   Receive Channel enable bit
 | ||||
|     Uint16     XCERB3:1;       // 3   Receive Channel enable bit
 | ||||
|     Uint16     XCERB4:1;       // 4   Receive Channel enable bit
 | ||||
|     Uint16     XCERB5:1;       // 5   Receive Channel enable bit
 | ||||
|     Uint16     XCERB6:1;       // 6   Receive Channel enable bit
 | ||||
|     Uint16     XCERB7:1;       // 7   Receive Channel enable bit
 | ||||
|     Uint16     XCERB8:1;       // 8   Receive Channel enable bit
 | ||||
|     Uint16     XCERB9:1;       // 9   Receive Channel enable bit
 | ||||
|     Uint16     XCERB10:1;      // 10  Receive Channel enable bit
 | ||||
|     Uint16     XCERB11:1;      // 11  Receive Channel enable bit
 | ||||
|     Uint16     XCERB12:1;      // 12  Receive Channel enable bit
 | ||||
|     Uint16     XCERB13:1;      // 13  Receive Channel enable bit
 | ||||
|     Uint16     XCERB14:1;      // 14  Receive Channel enable bit
 | ||||
|     Uint16     XCERB15:1;      // 15  Receive Channel enable bit
 | ||||
| }; | ||||
|      | ||||
| union XCERB_REG { | ||||
|     Uint16              all; | ||||
|     struct  XCERB_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // PCR control register bit definitions
 | ||||
| //
 | ||||
| struct  PCR_BITS {            // bit description
 | ||||
|     Uint16     CLKRP:1;       // 0   Receive Clock polarity
 | ||||
|     Uint16     CLKXP:1;       // 1   Transmit clock polarity
 | ||||
|     Uint16     FSRP:1;        // 2   Receive Frame synchronization polarity
 | ||||
|     Uint16     FSXP:1;        // 3   Transmit Frame synchronization polarity
 | ||||
|     Uint16     DR_STAT:1;     // 4   DR pin status - reserved for this McBSP
 | ||||
|     Uint16     DX_STAT:1;     // 5   DX pin status - reserved for this McBSP
 | ||||
|     Uint16     CLKS_STAT:1;   // 6   CLKS pin status - reserved for 28x -McBSP
 | ||||
|     Uint16     SCLKME:1;      // 7   Enhanced sample clock mode selection bit.
 | ||||
|     Uint16     CLKRM:1;       // 8   Receiver Clock Mode
 | ||||
|     Uint16     CLKXM:1;       // 9   Transmitter Clock Mode.
 | ||||
|     Uint16     FSRM:1;        // 10  Receive Frame Synchronization Mode
 | ||||
|     Uint16     FSXM:1;        // 11  Transmit Frame Synchronization Mode
 | ||||
|     Uint16     RIOEN:1;       // 12  General Purpose I/O Mode - reserved in 
 | ||||
|                               //     this 28x-McBSP
 | ||||
|     Uint16     XIOEN:1;       // 13  General Purpose I/O Mode - reserved in 
 | ||||
|                               //     this 28x-McBSP
 | ||||
|     Uint16     IDEL_EN:1;     // 14  reserved in this 28x-McBSP
 | ||||
|     Uint16     rsvd:1  ;      // 15  reserved
 | ||||
| }; | ||||
| 
 | ||||
| union PCR_REG { | ||||
|     Uint16            all; | ||||
|     struct  PCR_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // RCERC control register bit definitions
 | ||||
| //
 | ||||
| struct  RCERC_BITS {          // bit description
 | ||||
|     Uint16     RCEC0:1;       // 0   Receive Channel enable bit
 | ||||
|     Uint16     RCEC1:1;       // 1   Receive Channel enable bit
 | ||||
|     Uint16     RCEC2:1;       // 2   Receive Channel enable bit
 | ||||
|     Uint16     RCEC3:1;       // 3   Receive Channel enable bit
 | ||||
|     Uint16     RCEC4:1;       // 4   Receive Channel enable bit
 | ||||
|     Uint16     RCEC5:1;       // 5   Receive Channel enable bit
 | ||||
|     Uint16     RCEC6:1;       // 6   Receive Channel enable bit
 | ||||
|     Uint16     RCEC7:1;       // 7   Receive Channel enable bit
 | ||||
|     Uint16     RCEC8:1;       // 8   Receive Channel enable bit
 | ||||
|     Uint16     RCEC9:1;       // 9   Receive Channel enable bit
 | ||||
|     Uint16     RCEC10:1;      // 10  Receive Channel enable bit
 | ||||
|     Uint16     RCEC11:1;      // 11  Receive Channel enable bit
 | ||||
|     Uint16     RCEC12:1;      // 12  Receive Channel enable bit
 | ||||
|     Uint16     RCEC13:1;      // 13  Receive Channel enable bit
 | ||||
|     Uint16     RCEC14:1;      // 14  Receive Channel enable bit
 | ||||
|     Uint16     RCEC15:1;      // 15  Receive Channel enable bit
 | ||||
| }; | ||||
| 
 | ||||
| union RCERC_REG { | ||||
|     Uint16              all; | ||||
|     struct  RCERC_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // RCERD control register bit definitions
 | ||||
| //
 | ||||
| struct  RCERD_BITS {          // bit description
 | ||||
|     Uint16     RCED0:1;       // 0   Receive Channel enable bit
 | ||||
|     Uint16     RCED1:1;       // 1   Receive Channel enable bit
 | ||||
|     Uint16     RCED2:1;       // 2   Receive Channel enable bit
 | ||||
|     Uint16     RCED3:1;       // 3   Receive Channel enable bit
 | ||||
|     Uint16     RCED4:1;       // 4   Receive Channel enable bit
 | ||||
|     Uint16     RCED5:1;       // 5   Receive Channel enable bit
 | ||||
|     Uint16     RCED6:1;       // 6   Receive Channel enable bit
 | ||||
|     Uint16     RCED7:1;       // 7   Receive Channel enable bit
 | ||||
|     Uint16     RCED8:1;       // 8   Receive Channel enable bit
 | ||||
|     Uint16     RCED9:1;       // 9   Receive Channel enable bit
 | ||||
|     Uint16     RCED10:1;      // 10  Receive Channel enable bit
 | ||||
|     Uint16     RCED11:1;      // 11  Receive Channel enable bit
 | ||||
|     Uint16     RCED12:1;      // 12  Receive Channel enable bit
 | ||||
|     Uint16     RCED13:1;      // 13  Receive Channel enable bit
 | ||||
|     Uint16     RCED14:1;      // 14  Receive Channel enable bit
 | ||||
|     Uint16     RCED15:1;      // 15  Receive Channel enable bit
 | ||||
| }; | ||||
| 
 | ||||
| union RCERD_REG { | ||||
|     Uint16              all; | ||||
|     struct  RCERD_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // XCERC control register bit definitions
 | ||||
| //
 | ||||
| struct  XCERC_BITS {           // bit description
 | ||||
|     Uint16     XCERC0:1;       // 0   Receive Channel enable bit
 | ||||
|     Uint16     XCERC1:1;       // 1   Receive Channel enable bit
 | ||||
|     Uint16     XCERC2:1;       // 2   Receive Channel enable bit
 | ||||
|     Uint16     XCERC3:1;       // 3   Receive Channel enable bit
 | ||||
|     Uint16     XCERC4:1;       // 4   Receive Channel enable bit
 | ||||
|     Uint16     XCERC5:1;       // 5   Receive Channel enable bit
 | ||||
|     Uint16     XCERC6:1;       // 6   Receive Channel enable bit
 | ||||
|     Uint16     XCERC7:1;       // 7   Receive Channel enable bit
 | ||||
|     Uint16     XCERC8:1;       // 8   Receive Channel enable bit
 | ||||
|     Uint16     XCERC9:1;       // 9   Receive Channel enable bit
 | ||||
|     Uint16     XCERC10:1;      // 10  Receive Channel enable bit
 | ||||
|     Uint16     XCERC11:1;      // 11  Receive Channel enable bit
 | ||||
|     Uint16     XCERC12:1;      // 12  Receive Channel enable bit
 | ||||
|     Uint16     XCERC13:1;      // 13  Receive Channel enable bit
 | ||||
|     Uint16     XCERC14:1;      // 14  Receive Channel enable bit
 | ||||
|     Uint16     XCERC15:1;      // 15  Receive Channel enable bit
 | ||||
| }; | ||||
| 
 | ||||
| union XCERC_REG { | ||||
|     Uint16              all; | ||||
|     struct  XCERC_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // XCERD control register bit definitions
 | ||||
| //
 | ||||
| struct  XCERD_BITS {           // bit description
 | ||||
|     Uint16     XCERD0:1;       // 0   Receive Channel enable bit
 | ||||
|     Uint16     XCERD1:1;       // 1   Receive Channel enable bit
 | ||||
|     Uint16     XCERD2:1;       // 2   Receive Channel enable bit
 | ||||
|     Uint16     XCERD3:1;       // 3   Receive Channel enable bit
 | ||||
|     Uint16     XCERD4:1;       // 4   Receive Channel enable bit
 | ||||
|     Uint16     XCERD5:1;       // 5   Receive Channel enable bit
 | ||||
|     Uint16     XCERD6:1;       // 6   Receive Channel enable bit
 | ||||
|     Uint16     XCERD7:1;       // 7   Receive Channel enable bit
 | ||||
|     Uint16     XCERD8:1;       // 8   Receive Channel enable bit
 | ||||
|     Uint16     XCERD9:1;       // 9   Receive Channel enable bit
 | ||||
|     Uint16     XCERD10:1;      // 10  Receive Channel enable bit
 | ||||
|     Uint16     XCERD11:1;      // 11  Receive Channel enable bit
 | ||||
|     Uint16     XCERD12:1;      // 12  Receive Channel enable bit
 | ||||
|     Uint16     XCERD13:1;      // 13  Receive Channel enable bit
 | ||||
|     Uint16     XCERD14:1;      // 14  Receive Channel enable bit
 | ||||
|     Uint16     XCERD15:1;      // 15  Receive Channel enable bit
 | ||||
| };  | ||||
| 
 | ||||
| union XCERD_REG { | ||||
|     Uint16              all; | ||||
|     struct  XCERD_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // RCERE control register bit definitions
 | ||||
| //
 | ||||
| struct  RCERE_BITS {          // bit description
 | ||||
|     Uint16     RCEE0:1;       // 0   Receive Channel enable bit
 | ||||
|     Uint16     RCEE1:1;       // 1   Receive Channel enable bit
 | ||||
|     Uint16     RCEE2:1;       // 2   Receive Channel enable bit
 | ||||
|     Uint16     RCEE3:1;       // 3   Receive Channel enable bit
 | ||||
|     Uint16     RCEE4:1;       // 4   Receive Channel enable bit
 | ||||
|     Uint16     RCEE5:1;       // 5   Receive Channel enable bit
 | ||||
|     Uint16     RCEE6:1;       // 6   Receive Channel enable bit
 | ||||
|     Uint16     RCEE7:1;       // 7   Receive Channel enable bit
 | ||||
|     Uint16     RCEE8:1;       // 8   Receive Channel enable bit
 | ||||
|     Uint16     RCEE9:1;       // 9   Receive Channel enable bit
 | ||||
|     Uint16     RCEE10:1;      // 10  Receive Channel enable bit
 | ||||
|     Uint16     RCEE11:1;      // 11  Receive Channel enable bit
 | ||||
|     Uint16     RCEE12:1;      // 12  Receive Channel enable bit
 | ||||
|     Uint16     RCEE13:1;      // 13  Receive Channel enable bit
 | ||||
|     Uint16     RCEE14:1;      // 14  Receive Channel enable bit
 | ||||
|     Uint16     RCEE15:1;      // 15  Receive Channel enable bit
 | ||||
| };   | ||||
| 
 | ||||
| union RCERE_REG { | ||||
|     Uint16              all; | ||||
|     struct  RCERE_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // RCERF control register bit definitions
 | ||||
| //
 | ||||
| struct  RCERF_BITS {          // bit   description
 | ||||
|     Uint16     RCEF0:1;       // 0   Receive Channel enable bit
 | ||||
|     Uint16     RCEF1:1;       // 1   Receive Channel enable bit
 | ||||
|     Uint16     RCEF2:1;       // 2   Receive Channel enable bit
 | ||||
|     Uint16     RCEF3:1;       // 3   Receive Channel enable bit
 | ||||
|     Uint16     RCEF4:1;       // 4   Receive Channel enable bit
 | ||||
|     Uint16     RCEF5:1;       // 5   Receive Channel enable bit
 | ||||
|     Uint16     RCEF6:1;       // 6   Receive Channel enable bit
 | ||||
|     Uint16     RCEF7:1;       // 7   Receive Channel enable bit
 | ||||
|     Uint16     RCEF8:1;       // 8   Receive Channel enable bit
 | ||||
|     Uint16     RCEF9:1;       // 9   Receive Channel enable bit
 | ||||
|     Uint16     RCEF10:1;      // 10  Receive Channel enable bit
 | ||||
|     Uint16     RCEF11:1;      // 11  Receive Channel enable bit
 | ||||
|     Uint16     RCEF12:1;      // 12  Receive Channel enable bit
 | ||||
|     Uint16     RCEF13:1;      // 13  Receive Channel enable bit
 | ||||
|     Uint16     RCEF14:1;      // 14  Receive Channel enable bit
 | ||||
|     Uint16     RCEF15:1;      // 15  Receive Channel enable bit
 | ||||
| }; | ||||
| 
 | ||||
| union RCERF_REG { | ||||
|    Uint16              all; | ||||
|    struct  RCERF_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| // XCERE control register bit definitions:
 | ||||
| struct  XCERE_BITS {         // bit description
 | ||||
|    Uint16     XCERE0:1;       // 0   Receive Channel enable bit
 | ||||
|    Uint16     XCERE1:1;       // 1   Receive Channel enable bit
 | ||||
|    Uint16     XCERE2:1;       // 2   Receive Channel enable bit
 | ||||
|    Uint16     XCERE3:1;       // 3   Receive Channel enable bit
 | ||||
|    Uint16     XCERE4:1;       // 4   Receive Channel enable bit
 | ||||
|    Uint16     XCERE5:1;       // 5   Receive Channel enable bit
 | ||||
|    Uint16     XCERE6:1;       // 6   Receive Channel enable bit
 | ||||
|    Uint16     XCERE7:1;       // 7   Receive Channel enable bit
 | ||||
|    Uint16     XCERE8:1;       // 8   Receive Channel enable bit
 | ||||
|    Uint16     XCERE9:1;       // 9   Receive Channel enable bit
 | ||||
|    Uint16     XCERE10:1;      // 10  Receive Channel enable bit
 | ||||
|    Uint16     XCERE11:1;      // 11  Receive Channel enable bit
 | ||||
|    Uint16     XCERE12:1;      // 12  Receive Channel enable bit
 | ||||
|    Uint16     XCERE13:1;      // 13  Receive Channel enable bit
 | ||||
|    Uint16     XCERE14:1;      // 14  Receive Channel enable bit
 | ||||
|    Uint16     XCERE15:1;      // 15  Receive Channel enable bit
 | ||||
| }; | ||||
| 
 | ||||
| union XCERE_REG { | ||||
|     Uint16              all; | ||||
|     struct  XCERE_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // XCERF control register bit definitions
 | ||||
| //
 | ||||
| struct  XCERF_BITS {            // bit description
 | ||||
|     Uint16     XCERF0:1;        // 0   Receive Channel enable bit
 | ||||
|     Uint16     XCERF1:1;        // 1   Receive Channel enable bit
 | ||||
|     Uint16     XCERF2:1;        // 2   Receive Channel enable bit
 | ||||
|     Uint16     XCERF3:1;        // 3   Receive Channel enable bit
 | ||||
|     Uint16     XCERF4:1;        // 4   Receive Channel enable bit
 | ||||
|     Uint16     XCERF5:1;        // 5   Receive Channel enable bit
 | ||||
|     Uint16     XCERF6:1;        // 6   Receive Channel enable bit
 | ||||
|     Uint16     XCERF7:1;        // 7   Receive Channel enable bit
 | ||||
|     Uint16     XCERF8:1;        // 8   Receive Channel enable bit
 | ||||
|     Uint16     XCERF9:1;        // 9   Receive Channel enable bit
 | ||||
|     Uint16     XCERF10:1;       // 10  Receive Channel enable bit
 | ||||
|     Uint16     XCERF11:1;       // 11  Receive Channel enable bit
 | ||||
|     Uint16     XCERF12:1;       // 12  Receive Channel enable bit
 | ||||
|     Uint16     XCERF13:1;       // 13  Receive Channel enable bit
 | ||||
|     Uint16     XCERF14:1;       // 14  Receive Channel enable bit
 | ||||
|     Uint16     XCERF15:1;       // 15  Receive Channel enable bit
 | ||||
| }; | ||||
| 
 | ||||
| union XCERF_REG { | ||||
|     Uint16              all; | ||||
|     struct  XCERF_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // RCERG control register bit definitions
 | ||||
| //
 | ||||
| struct  RCERG_BITS {          // bit description
 | ||||
|     Uint16     RCEG0:1;       // 0   Receive Channel enable bit
 | ||||
|     Uint16     RCEG1:1;       // 1   Receive Channel enable bit
 | ||||
|     Uint16     RCEG2:1;       // 2   Receive Channel enable bit
 | ||||
|     Uint16     RCEG3:1;       // 3   Receive Channel enable bit
 | ||||
|     Uint16     RCEG4:1;       // 4   Receive Channel enable bit
 | ||||
|     Uint16     RCEG5:1;       // 5   Receive Channel enable bit
 | ||||
|     Uint16     RCEG6:1;       // 6   Receive Channel enable bit
 | ||||
|     Uint16     RCEG7:1;       // 7   Receive Channel enable bit
 | ||||
|     Uint16     RCEG8:1;       // 8   Receive Channel enable bit
 | ||||
|     Uint16     RCEG9:1;       // 9   Receive Channel enable bit
 | ||||
|     Uint16     RCEG10:1;      // 10  Receive Channel enable bit
 | ||||
|     Uint16     RCEG11:1;      // 11  Receive Channel enable bit
 | ||||
|     Uint16     RCEG12:1;      // 12  Receive Channel enable bit
 | ||||
|     Uint16     RCEG13:1;      // 13  Receive Channel enable bit
 | ||||
|     Uint16     RCEG14:1;      // 14  Receive Channel enable bit
 | ||||
|     Uint16     RCEG15:1;      // 15  Receive Channel enable bit
 | ||||
| }; | ||||
| 
 | ||||
| union RCERG_REG { | ||||
|    Uint16              all; | ||||
|    struct  RCERG_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| // RCERH control register bit definitions:
 | ||||
| struct  RCERH_BITS {         // bit description
 | ||||
|    Uint16     RCEH0:1;       // 0   Receive Channel enable bit
 | ||||
|    Uint16     RCEH1:1;       // 1   Receive Channel enable bit
 | ||||
|    Uint16     RCEH2:1;       // 2   Receive Channel enable bit
 | ||||
|    Uint16     RCEH3:1;       // 3   Receive Channel enable bit
 | ||||
|    Uint16     RCEH4:1;       // 4   Receive Channel enable bit
 | ||||
|    Uint16     RCEH5:1;       // 5   Receive Channel enable bit
 | ||||
|    Uint16     RCEH6:1;       // 6   Receive Channel enable bit
 | ||||
|    Uint16     RCEH7:1;       // 7   Receive Channel enable bit
 | ||||
|    Uint16     RCEH8:1;       // 8   Receive Channel enable bit
 | ||||
|    Uint16     RCEH9:1;       // 9   Receive Channel enable bit
 | ||||
|    Uint16     RCEH10:1;      // 10  Receive Channel enable bit
 | ||||
|    Uint16     RCEH11:1;      // 11  Receive Channel enable bit
 | ||||
|    Uint16     RCEH12:1;      // 12  Receive Channel enable bit
 | ||||
|    Uint16     RCEH13:1;      // 13  Receive Channel enable bit
 | ||||
|    Uint16     RCEH14:1;      // 14  Receive Channel enable bit
 | ||||
|    Uint16     RCEH15:1;      // 15  Receive Channel enable bit
 | ||||
| }; | ||||
| 
 | ||||
| union RCERH_REG { | ||||
|     Uint16              all; | ||||
|     struct  RCERH_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // XCERG control register bit definitions
 | ||||
| //
 | ||||
| struct  XCERG_BITS {           // bit description
 | ||||
|     Uint16     XCERG0:1;       // 0   Receive Channel enable bit
 | ||||
|     Uint16     XCERG1:1;       // 1   Receive Channel enable bit
 | ||||
|     Uint16     XCERG2:1;       // 2   Receive Channel enable bit
 | ||||
|     Uint16     XCERG3:1;       // 3   Receive Channel enable bit
 | ||||
|     Uint16     XCERG4:1;       // 4   Receive Channel enable bit
 | ||||
|     Uint16     XCERG5:1;       // 5   Receive Channel enable bit
 | ||||
|     Uint16     XCERG6:1;       // 6   Receive Channel enable bit
 | ||||
|     Uint16     XCERG7:1;       // 7   Receive Channel enable bit
 | ||||
|     Uint16     XCERG8:1;       // 8   Receive Channel enable bit
 | ||||
|     Uint16     XCERG9:1;       // 9   Receive Channel enable bit
 | ||||
|     Uint16     XCERG10:1;      // 10  Receive Channel enable bit
 | ||||
|     Uint16     XCERG11:1;      // 11  Receive Channel enable bit
 | ||||
|     Uint16     XCERG12:1;      // 12  Receive Channel enable bit
 | ||||
|     Uint16     XCERG13:1;      // 13  Receive Channel enable bit
 | ||||
|     Uint16     XCERG14:1;      // 14  Receive Channel enable bit
 | ||||
|     Uint16     XCERG15:1;      // 15  Receive Channel enable bit
 | ||||
| }; | ||||
| 
 | ||||
| union XCERG_REG { | ||||
|     Uint16              all; | ||||
|     struct  XCERG_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // XCERH control register bit definitions
 | ||||
| //
 | ||||
| struct  XCERH_BITS {          // bit description
 | ||||
|     Uint16     XCEH0:1;       // 0   Receive Channel enable bit
 | ||||
|     Uint16     XCEH1:1;       // 1   Receive Channel enable bit
 | ||||
|     Uint16     XCEH2:1;       // 2   Receive Channel enable bit
 | ||||
|     Uint16     XCEH3:1;       // 3   Receive Channel enable bit
 | ||||
|     Uint16     XCEH4:1;       // 4   Receive Channel enable bit
 | ||||
|     Uint16     XCEH5:1;       // 5   Receive Channel enable bit
 | ||||
|     Uint16     XCEH6:1;       // 6   Receive Channel enable bit
 | ||||
|     Uint16     XCEH7:1;       // 7   Receive Channel enable bit
 | ||||
|     Uint16     XCEH8:1;       // 8   Receive Channel enable bit
 | ||||
|     Uint16     XCEH9:1;       // 9   Receive Channel enable bit
 | ||||
|     Uint16     XCEH10:1;      // 10  Receive Channel enable bit
 | ||||
|     Uint16     XCEH11:1;      // 11  Receive Channel enable bit
 | ||||
|     Uint16     XCEH12:1;      // 12  Receive Channel enable bit
 | ||||
|     Uint16     XCEH13:1;      // 13  Receive Channel enable bit
 | ||||
|     Uint16     XCEH14:1;      // 14  Receive Channel enable bit
 | ||||
|     Uint16     XCEH15:1;      // 15  Receive Channel enable bit
 | ||||
| };  | ||||
| 
 | ||||
| union XCERH_REG { | ||||
|     Uint16              all; | ||||
|     struct  XCERH_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // McBSP Interrupt enable register for RINT/XINT
 | ||||
| //
 | ||||
| struct  MFFINT_BITS {       // bits description
 | ||||
|     Uint16     XINT:1;      // 0    XINT  interrupt enable
 | ||||
|     Uint16     rsvd1:1;     // 1    reserved
 | ||||
|     Uint16     RINT:1;      // 2    RINT  interrupt enable
 | ||||
|     Uint16     rsvd2:13;    // 15:3 reserved
 | ||||
| }; | ||||
| 
 | ||||
| union MFFINT_REG { | ||||
|     Uint16              all; | ||||
|     struct MFFINT_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // McBSP Register File
 | ||||
| //
 | ||||
| struct  MCBSP_REGS { | ||||
|     union DRR2_REG    DRR2;       // MCBSP Data receive register bits 31-16
 | ||||
|     union DRR1_REG    DRR1;       // MCBSP Data receive register bits 15-0
 | ||||
|     union DXR2_REG    DXR2;       // MCBSP Data transmit register bits 31-16
 | ||||
|     union DXR1_REG    DXR1;       // MCBSP Data transmit register bits 15-0
 | ||||
|     union SPCR2_REG   SPCR2;      // MCBSP control register bits 31-16
 | ||||
|     union SPCR1_REG   SPCR1;      // MCBSP control register bits 15-0
 | ||||
|     union RCR2_REG    RCR2;       // MCBSP receive control register bits 31-16
 | ||||
|     union RCR1_REG    RCR1;       // MCBSP receive control register bits 15-0
 | ||||
|     union XCR2_REG    XCR2;       // MCBSP transmit control register bits 31-16
 | ||||
|     union XCR1_REG    XCR1;       // MCBSP transmit control register bits 15-0
 | ||||
|     union SRGR2_REG   SRGR2;      // MCBSP sample rate gen register bits 31-16
 | ||||
|     union SRGR1_REG   SRGR1;      // MCBSP sample rate gen register bits 15-0
 | ||||
|     union MCR2_REG    MCR2;       // MCBSP multichannel register bits 31-16
 | ||||
|     union MCR1_REG    MCR1;       // MCBSP multichannel register bits 15-0
 | ||||
|     union RCERA_REG   RCERA;      // MCBSP Receive channel enable partition A
 | ||||
|     union RCERB_REG   RCERB;      // MCBSP Receive channel enable partition B
 | ||||
|     union XCERA_REG   XCERA;      // MCBSP Transmit channel enable partition A
 | ||||
|     union XCERB_REG   XCERB;      // MCBSP Transmit channel enable partition B
 | ||||
|     union PCR_REG     PCR;        // MCBSP Pin control register bits 15-0
 | ||||
|     union RCERC_REG   RCERC;      // MCBSP Receive channel enable partition C
 | ||||
|     union RCERD_REG   RCERD;      // MCBSP Receive channel enable partition D
 | ||||
|     union XCERC_REG   XCERC;      // MCBSP Transmit channel enable partition C
 | ||||
|     union XCERD_REG   XCERD;      // MCBSP Transmit channel enable partition D
 | ||||
|     union RCERE_REG   RCERE;      // MCBSP Receive channel enable partition E
 | ||||
|     union RCERF_REG   RCERF;      // MCBSP Receive channel enable partition F
 | ||||
|     union XCERE_REG   XCERE;      // MCBSP Transmit channel enable partition E
 | ||||
|     union XCERF_REG   XCERF;      // MCBSP Transmit channel enable partition F
 | ||||
|     union RCERG_REG   RCERG;      // MCBSP Receive channel enable partition G
 | ||||
|     union RCERH_REG   RCERH;      // MCBSP Receive channel enable partition H
 | ||||
|     union XCERG_REG   XCERG;      // MCBSP Transmit channel enable partition G
 | ||||
|     union XCERH_REG   XCERH;      // MCBSP Transmit channel enable partition H
 | ||||
|     Uint16            rsvd1[4];   // reserved
 | ||||
|     union MFFINT_REG  MFFINT;     // MCBSP Interrupt enable register for 
 | ||||
|                                   // RINT/XINT
 | ||||
|     Uint16            rsvd2;      // reserved
 | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // McBSP External References & Function Declarations
 | ||||
| //
 | ||||
| extern volatile struct MCBSP_REGS McbspaRegs; | ||||
| extern volatile struct MCBSP_REGS McbspbRegs; | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif /* extern "C" */ | ||||
| 
 | ||||
| #endif  // end of DSP2833x_MCBSP_H definition
 | ||||
| 
 | ||||
| //
 | ||||
| // No more
 | ||||
| //
 | ||||
| 
 | ||||
| @ -0,0 +1,164 @@ | ||||
| //###########################################################################
 | ||||
| //
 | ||||
| // FILE:   DSP2833x_PieCtrl.h
 | ||||
| //
 | ||||
| // TITLE:  DSP2833x Device PIE Control Register Definitions.
 | ||||
| //
 | ||||
| //###########################################################################
 | ||||
| // $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $
 | ||||
| // $Release Date: November  1, 2016 $
 | ||||
| // $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated -
 | ||||
| //             http://www.ti.com/ ALL RIGHTS RESERVED $
 | ||||
| //###########################################################################
 | ||||
| 
 | ||||
| #ifndef DSP2833x_PIE_CTRL_H | ||||
| #define DSP2833x_PIE_CTRL_H | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
| 
 | ||||
| //
 | ||||
| // PIE Control Register Bit Definitions
 | ||||
| //
 | ||||
| 
 | ||||
| //
 | ||||
| // PIECTRL: Register bit definitions
 | ||||
| //
 | ||||
| struct PIECTRL_BITS {       // bits description
 | ||||
|     Uint16  ENPIE:1;        // 0    Enable PIE block
 | ||||
|     Uint16  PIEVECT:15;     // 15:1 Fetched vector address
 | ||||
| }; | ||||
| 
 | ||||
| union PIECTRL_REG { | ||||
|     Uint16                 all; | ||||
|     struct PIECTRL_BITS  bit; | ||||
| };   | ||||
| 
 | ||||
| //
 | ||||
| // PIEIER: Register bit definitions
 | ||||
| //
 | ||||
| struct PIEIER_BITS {        // bits description
 | ||||
|     Uint16 INTx1:1;         // 0    INTx.1
 | ||||
|     Uint16 INTx2:1;         // 1    INTx.2
 | ||||
|     Uint16 INTx3:1;         // 2    INTx.3
 | ||||
|     Uint16 INTx4:1;         // 3    INTx.4
 | ||||
|     Uint16 INTx5:1;         // 4    INTx.5
 | ||||
|     Uint16 INTx6:1;         // 5    INTx.6
 | ||||
|     Uint16 INTx7:1;         // 6    INTx.7
 | ||||
|     Uint16 INTx8:1;         // 7    INTx.8
 | ||||
|     Uint16 rsvd:8;          // 15:8 reserved
 | ||||
| }; | ||||
|    | ||||
| union PIEIER_REG { | ||||
|     Uint16              all; | ||||
|     struct PIEIER_BITS  bit; | ||||
| };  | ||||
| 
 | ||||
| //
 | ||||
| // PIEIFR: Register bit definitions
 | ||||
| //
 | ||||
| struct PIEIFR_BITS {        // bits description
 | ||||
|     Uint16 INTx1:1;         // 0    INTx.1
 | ||||
|     Uint16 INTx2:1;         // 1    INTx.2
 | ||||
|     Uint16 INTx3:1;         // 2    INTx.3
 | ||||
|     Uint16 INTx4:1;         // 3    INTx.4
 | ||||
|     Uint16 INTx5:1;         // 4    INTx.5
 | ||||
|     Uint16 INTx6:1;         // 5    INTx.6
 | ||||
|     Uint16 INTx7:1;         // 6    INTx.7
 | ||||
|     Uint16 INTx8:1;         // 7    INTx.8
 | ||||
|     Uint16 rsvd:8;          // 15:8 reserved
 | ||||
| };  | ||||
| 
 | ||||
| union PIEIFR_REG { | ||||
|     Uint16              all; | ||||
|     struct PIEIFR_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // PIEACK: Register bit definitions
 | ||||
| //
 | ||||
| struct PIEACK_BITS {        // bits description
 | ||||
|     Uint16 ACK1:1;          // 0    Acknowledge PIE interrupt group 1
 | ||||
|     Uint16 ACK2:1;          // 1    Acknowledge PIE interrupt group 2
 | ||||
|     Uint16 ACK3:1;          // 2    Acknowledge PIE interrupt group 3
 | ||||
|     Uint16 ACK4:1;          // 3    Acknowledge PIE interrupt group 4
 | ||||
|     Uint16 ACK5:1;          // 4    Acknowledge PIE interrupt group 5
 | ||||
|     Uint16 ACK6:1;          // 5    Acknowledge PIE interrupt group 6
 | ||||
|     Uint16 ACK7:1;          // 6    Acknowledge PIE interrupt group 7
 | ||||
|     Uint16 ACK8:1;          // 7    Acknowledge PIE interrupt group 8
 | ||||
|     Uint16 ACK9:1;          // 8    Acknowledge PIE interrupt group 9
 | ||||
|     Uint16 ACK10:1;         // 9    Acknowledge PIE interrupt group 10
 | ||||
|     Uint16 ACK11:1;         // 10   Acknowledge PIE interrupt group 11
 | ||||
|     Uint16 ACK12:1;         // 11   Acknowledge PIE interrupt group 12
 | ||||
|     Uint16 rsvd:4;          // 15:12 reserved
 | ||||
| }; | ||||
| 
 | ||||
| union PIEACK_REG { | ||||
|     Uint16              all; | ||||
|     struct PIEACK_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // PIE Control Register File
 | ||||
| //
 | ||||
| struct PIE_CTRL_REGS { | ||||
|     union PIECTRL_REG PIECTRL;       // PIE control register
 | ||||
|     union PIEACK_REG  PIEACK;        // PIE acknowledge
 | ||||
|     union PIEIER_REG  PIEIER1;       // PIE int1 IER register  
 | ||||
|     union PIEIFR_REG  PIEIFR1;       // PIE int1 IFR register
 | ||||
|     union PIEIER_REG  PIEIER2;       // PIE INT2 IER register 
 | ||||
|     union PIEIFR_REG  PIEIFR2;       // PIE INT2 IFR register
 | ||||
|     union PIEIER_REG  PIEIER3;       // PIE INT3 IER register 
 | ||||
|     union PIEIFR_REG  PIEIFR3;       // PIE INT3 IFR register
 | ||||
|     union PIEIER_REG  PIEIER4;       // PIE INT4 IER register             
 | ||||
|     union PIEIFR_REG  PIEIFR4;       // PIE INT4 IFR register
 | ||||
|     union PIEIER_REG  PIEIER5;       // PIE INT5 IER register  
 | ||||
|     union PIEIFR_REG  PIEIFR5;       // PIE INT5 IFR register
 | ||||
|     union PIEIER_REG  PIEIER6;       // PIE INT6 IER register 
 | ||||
|     union PIEIFR_REG  PIEIFR6;       // PIE INT6 IFR register
 | ||||
|     union PIEIER_REG  PIEIER7;       // PIE INT7 IER register 
 | ||||
|     union PIEIFR_REG  PIEIFR7;       // PIE INT7 IFR register
 | ||||
|     union PIEIER_REG  PIEIER8;       // PIE INT8 IER register
 | ||||
|     union PIEIFR_REG  PIEIFR8;       // PIE INT8 IFR register
 | ||||
|     union PIEIER_REG  PIEIER9;       // PIE INT9 IER register  
 | ||||
|     union PIEIFR_REG  PIEIFR9;       // PIE INT9 IFR register
 | ||||
|     union PIEIER_REG  PIEIER10;      // PIE int10 IER register 
 | ||||
|     union PIEIFR_REG  PIEIFR10;      // PIE int10 IFR register
 | ||||
|     union PIEIER_REG  PIEIER11;      // PIE int11 IER register 
 | ||||
|     union PIEIFR_REG  PIEIFR11;      // PIE int11 IFR register
 | ||||
|     union PIEIER_REG  PIEIER12;      // PIE int12 IER register
 | ||||
|     union PIEIFR_REG  PIEIFR12;      // PIE int12 IFR register
 | ||||
| };      | ||||
| 
 | ||||
| //
 | ||||
| // Defines
 | ||||
| //
 | ||||
| #define PIEACK_GROUP1   0x0001 | ||||
| #define PIEACK_GROUP2   0x0002 | ||||
| #define PIEACK_GROUP3   0x0004 | ||||
| #define PIEACK_GROUP4   0x0008 | ||||
| #define PIEACK_GROUP5   0x0010 | ||||
| #define PIEACK_GROUP6   0x0020 | ||||
| #define PIEACK_GROUP7   0x0040 | ||||
| #define PIEACK_GROUP8   0x0080 | ||||
| #define PIEACK_GROUP9   0x0100 | ||||
| #define PIEACK_GROUP10  0x0200 | ||||
| #define PIEACK_GROUP11  0x0400 | ||||
| #define PIEACK_GROUP12  0x0800 | ||||
| 
 | ||||
| //
 | ||||
| // PIE Control Registers External References & Function Declarations
 | ||||
| //
 | ||||
| extern volatile struct PIE_CTRL_REGS PieCtrlRegs; | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif /* extern "C" */ | ||||
| 
 | ||||
| #endif  // end of DSP2833x_PIE_CTRL_H definition
 | ||||
| 
 | ||||
| //
 | ||||
| // End of file
 | ||||
| //
 | ||||
| 
 | ||||
| @ -0,0 +1,234 @@ | ||||
| //###########################################################################
 | ||||
| //
 | ||||
| // FILE:   DSP2833x_PieVect.h
 | ||||
| //
 | ||||
| // TITLE:  DSP2833x Devices PIE Vector Table Definitions.
 | ||||
| //
 | ||||
| //###########################################################################
 | ||||
| // $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $
 | ||||
| // $Release Date: November  1, 2016 $
 | ||||
| // $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated -
 | ||||
| //             http://www.ti.com/ ALL RIGHTS RESERVED $
 | ||||
| //###########################################################################
 | ||||
| 
 | ||||
| #ifndef DSP2833x_PIE_VECT_H | ||||
| #define DSP2833x_PIE_VECT_H | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
| 
 | ||||
| //
 | ||||
| // PIE Interrupt Vector Table Definition
 | ||||
| //
 | ||||
| 
 | ||||
| //
 | ||||
| // Typedef used to create a user type called PINT (pointer to interrupt)
 | ||||
| //
 | ||||
| typedef interrupt void(*PINT)(void); | ||||
| 
 | ||||
| //
 | ||||
| // Vector Table Define
 | ||||
| //
 | ||||
| struct PIE_VECT_TABLE { | ||||
|     //
 | ||||
|     // Reset is never fetched from this table. It will always be fetched from 
 | ||||
|     // 0x3FFFC0 in boot ROM
 | ||||
|     //
 | ||||
|     PINT     PIE1_RESERVED; | ||||
|     PINT     PIE2_RESERVED; | ||||
|     PINT     PIE3_RESERVED; | ||||
|     PINT     PIE4_RESERVED; | ||||
|     PINT     PIE5_RESERVED; | ||||
|     PINT     PIE6_RESERVED; | ||||
|     PINT     PIE7_RESERVED; | ||||
|     PINT     PIE8_RESERVED; | ||||
|     PINT     PIE9_RESERVED; | ||||
|     PINT     PIE10_RESERVED; | ||||
|     PINT     PIE11_RESERVED; | ||||
|     PINT     PIE12_RESERVED; | ||||
|     PINT     PIE13_RESERVED; | ||||
| 
 | ||||
|     //
 | ||||
|     // Non-Peripheral Interrupts
 | ||||
|     //
 | ||||
|     PINT     XINT13;        // XINT13 / CPU-Timer1
 | ||||
|     PINT     TINT2;         // CPU-Timer2
 | ||||
|     PINT     DATALOG;       // Datalogging interrupt
 | ||||
|     PINT     RTOSINT;       // RTOS interrupt
 | ||||
|     PINT     EMUINT;        // Emulation interrupt
 | ||||
|     PINT     XNMI;          // Non-maskable interrupt
 | ||||
|     PINT     ILLEGAL;       // Illegal operation TRAP
 | ||||
|     PINT     USER1;         // User Defined trap 1
 | ||||
|     PINT     USER2;         // User Defined trap 2
 | ||||
|     PINT     USER3;         // User Defined trap 3
 | ||||
|     PINT     USER4;         // User Defined trap 4
 | ||||
|     PINT     USER5;         // User Defined trap 5
 | ||||
|     PINT     USER6;         // User Defined trap 6
 | ||||
|     PINT     USER7;         // User Defined trap 7
 | ||||
|     PINT     USER8;         // User Defined trap 8
 | ||||
|     PINT     USER9;         // User Defined trap 9
 | ||||
|     PINT     USER10;        // User Defined trap 10
 | ||||
|     PINT     USER11;        // User Defined trap 11
 | ||||
|     PINT     USER12;        // User Defined trap 12
 | ||||
| 
 | ||||
|     //
 | ||||
|     // Group 1 PIE Peripheral Vectors
 | ||||
|     //
 | ||||
|     PINT     SEQ1INT; | ||||
|     PINT     SEQ2INT; | ||||
|     PINT     rsvd1_3; | ||||
|     PINT     XINT1; | ||||
|     PINT     XINT2; | ||||
|     PINT     ADCINT;    // ADC
 | ||||
|     PINT     TINT0;     // Timer 0
 | ||||
|     PINT     WAKEINT;   // WD
 | ||||
| 
 | ||||
|     //
 | ||||
|     // Group 2 PIE Peripheral Vectors
 | ||||
|     //
 | ||||
|     PINT     EPWM1_TZINT; // EPWM-1
 | ||||
|     PINT     EPWM2_TZINT; // EPWM-2
 | ||||
|     PINT     EPWM3_TZINT; // EPWM-3
 | ||||
|     PINT     EPWM4_TZINT; // EPWM-4
 | ||||
|     PINT     EPWM5_TZINT; // EPWM-5
 | ||||
|     PINT     EPWM6_TZINT; // EPWM-6
 | ||||
|     PINT     rsvd2_7; | ||||
|     PINT     rsvd2_8; | ||||
| 
 | ||||
|     //
 | ||||
|     // Group 3 PIE Peripheral Vectors
 | ||||
|     //
 | ||||
|     PINT     EPWM1_INT;  // EPWM-1
 | ||||
|     PINT     EPWM2_INT;  // EPWM-2
 | ||||
|     PINT     EPWM3_INT;  // EPWM-3
 | ||||
|     PINT     EPWM4_INT;  // EPWM-4
 | ||||
|     PINT     EPWM5_INT;  // EPWM-5
 | ||||
|     PINT     EPWM6_INT;  // EPWM-6
 | ||||
|     PINT     rsvd3_7; | ||||
|     PINT     rsvd3_8; | ||||
| 
 | ||||
|     //
 | ||||
|     // Group 4 PIE Peripheral Vectors
 | ||||
|     //
 | ||||
|     PINT     ECAP1_INT; // ECAP-1
 | ||||
|     PINT     ECAP2_INT; // ECAP-2
 | ||||
|     PINT     ECAP3_INT; // ECAP-3
 | ||||
|     PINT     ECAP4_INT; // ECAP-4
 | ||||
|     PINT     ECAP5_INT; // ECAP-5
 | ||||
|     PINT     ECAP6_INT; // ECAP-6
 | ||||
|     PINT     rsvd4_7; | ||||
|     PINT     rsvd4_8; | ||||
| 
 | ||||
|     //
 | ||||
|     // Group 5 PIE Peripheral Vectors
 | ||||
|     //
 | ||||
|     PINT     EQEP1_INT; // EQEP-1
 | ||||
|     PINT     EQEP2_INT; // EQEP-2
 | ||||
|     PINT     rsvd5_3; | ||||
|     PINT     rsvd5_4; | ||||
|     PINT     rsvd5_5; | ||||
|     PINT     rsvd5_6; | ||||
|     PINT     rsvd5_7; | ||||
|     PINT     rsvd5_8; | ||||
| 
 | ||||
|     //
 | ||||
|     // Group 6 PIE Peripheral Vectors
 | ||||
|     //
 | ||||
|     PINT     SPIRXINTA; // SPI-A
 | ||||
|     PINT     SPITXINTA; // SPI-A
 | ||||
|     PINT     MRINTB;    // McBSP-B
 | ||||
|     PINT     MXINTB;    // McBSP-B
 | ||||
|     PINT     MRINTA;    // McBSP-A
 | ||||
|     PINT     MXINTA;    // McBSP-A
 | ||||
|     PINT     rsvd6_7; | ||||
|     PINT     rsvd6_8; | ||||
| 
 | ||||
|     //
 | ||||
|     // Group 7 PIE Peripheral Vectors
 | ||||
|     //
 | ||||
|     PINT     DINTCH1;   // DMA
 | ||||
|     PINT     DINTCH2;   // DMA
 | ||||
|     PINT     DINTCH3;   // DMA
 | ||||
|     PINT     DINTCH4;   // DMA
 | ||||
|     PINT     DINTCH5;   // DMA
 | ||||
|     PINT     DINTCH6;   // DMA
 | ||||
|     PINT     rsvd7_7; | ||||
|     PINT     rsvd7_8; | ||||
| 
 | ||||
|     //
 | ||||
|     // Group 8 PIE Peripheral Vectors
 | ||||
|     //
 | ||||
|     PINT     I2CINT1A;  // I2C-A
 | ||||
|     PINT     I2CINT2A;  // I2C-A
 | ||||
|     PINT     rsvd8_3; | ||||
|     PINT     rsvd8_4; | ||||
|     PINT     SCIRXINTC;  // SCI-C
 | ||||
|     PINT     SCITXINTC;  // SCI-C
 | ||||
|     PINT     rsvd8_7; | ||||
|     PINT     rsvd8_8; | ||||
| 
 | ||||
|     //
 | ||||
|     // Group 9 PIE Peripheral Vectors
 | ||||
|     //
 | ||||
|     PINT     SCIRXINTA;  // SCI-A
 | ||||
|     PINT     SCITXINTA;  // SCI-A
 | ||||
|     PINT     SCIRXINTB;  // SCI-B
 | ||||
|     PINT     SCITXINTB;  // SCI-B
 | ||||
|     PINT     ECAN0INTA;  // eCAN-A
 | ||||
|     PINT     ECAN1INTA;  // eCAN-A
 | ||||
|     PINT     ECAN0INTB;  // eCAN-B
 | ||||
|     PINT     ECAN1INTB;  // eCAN-B
 | ||||
| 
 | ||||
|     //
 | ||||
|     // Group 10 PIE Peripheral Vectors
 | ||||
|     //
 | ||||
|     PINT     rsvd10_1; | ||||
|     PINT     rsvd10_2; | ||||
|     PINT     rsvd10_3; | ||||
|     PINT     rsvd10_4; | ||||
|     PINT     rsvd10_5; | ||||
|     PINT     rsvd10_6; | ||||
|     PINT     rsvd10_7; | ||||
|     PINT     rsvd10_8; | ||||
| 
 | ||||
|     //
 | ||||
|     // Group 11 PIE Peripheral Vectors
 | ||||
|     //
 | ||||
|     PINT     rsvd11_1; | ||||
|     PINT     rsvd11_2; | ||||
|     PINT     rsvd11_3; | ||||
|     PINT     rsvd11_4; | ||||
|     PINT     rsvd11_5; | ||||
|     PINT     rsvd11_6; | ||||
|     PINT     rsvd11_7; | ||||
|     PINT     rsvd11_8; | ||||
| 
 | ||||
|     //
 | ||||
|     // Group 12 PIE Peripheral Vectors
 | ||||
|     //
 | ||||
|     PINT     XINT3;      // External interrupt
 | ||||
|     PINT     XINT4; | ||||
|     PINT     XINT5; | ||||
|     PINT     XINT6; | ||||
|     PINT     XINT7; | ||||
|     PINT     rsvd12_6; | ||||
|     PINT     LVF;        // Latched overflow
 | ||||
|     PINT     LUF;        // Latched underflow
 | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // PIE Interrupt Vector Table External References & Function Declarations
 | ||||
| //
 | ||||
| extern volatile struct PIE_VECT_TABLE PieVectTable; | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif /* extern "C" */ | ||||
| 
 | ||||
| #endif    // end of DSP2833x_PIE_VECT_H definition
 | ||||
| 
 | ||||
| //
 | ||||
| // End of file
 | ||||
| //
 | ||||
| 
 | ||||
| @ -0,0 +1,220 @@ | ||||
| //###########################################################################
 | ||||
| //
 | ||||
| // FILE:	DSP2833x_Sci.h
 | ||||
| //
 | ||||
| // TITLE:	DSP2833x Device SCI Register Definitions.
 | ||||
| //
 | ||||
| //###########################################################################
 | ||||
| // $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $
 | ||||
| // $Release Date: November  1, 2016 $
 | ||||
| // $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated -
 | ||||
| //             http://www.ti.com/ ALL RIGHTS RESERVED $
 | ||||
| //###########################################################################
 | ||||
| 
 | ||||
| #ifndef DSP2833x_SCI_H | ||||
| #define DSP2833x_SCI_H | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
| 
 | ||||
| //
 | ||||
| // SCI Individual Register Bit Definitions
 | ||||
| //
 | ||||
| 
 | ||||
| //
 | ||||
| // SCICCR communication control register bit definitions
 | ||||
| //
 | ||||
| struct  SCICCR_BITS {         // bit    description
 | ||||
|     Uint16 SCICHAR:3;         // 2:0    Character length control        
 | ||||
|     Uint16 ADDRIDLE_MODE:1;   // 3      ADDR/IDLE Mode control
 | ||||
|     Uint16 LOOPBKENA:1;       // 4      Loop Back enable
 | ||||
|     Uint16 PARITYENA:1;       // 5      Parity enable   
 | ||||
|     Uint16 PARITY:1;          // 6      Even or Odd Parity
 | ||||
|     Uint16 STOPBITS:1;        // 7      Number of Stop Bits
 | ||||
|     Uint16 rsvd1:8;           // 15:8   reserved
 | ||||
| };   | ||||
| 
 | ||||
| union SCICCR_REG { | ||||
|     Uint16              all; | ||||
|     struct SCICCR_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // SCICTL1 control register 1 bit definitions
 | ||||
| //                       
 | ||||
| struct  SCICTL1_BITS {        // bit    description
 | ||||
|     Uint16 RXENA:1;           // 0      SCI receiver enable
 | ||||
|     Uint16 TXENA:1;           // 1      SCI transmitter enable
 | ||||
|     Uint16 SLEEP:1;           // 2      SCI sleep  
 | ||||
|     Uint16 TXWAKE:1;          // 3      Transmitter wakeup method
 | ||||
|     Uint16 rsvd:1;            // 4      reserved
 | ||||
|     Uint16 SWRESET:1;         // 5      Software reset   
 | ||||
|     Uint16 RXERRINTENA:1;     // 6      Recieve interrupt enable
 | ||||
|     Uint16 rsvd1:9;           // 15:7   reserved
 | ||||
| };  | ||||
| 
 | ||||
| union SCICTL1_REG { | ||||
|     Uint16               all; | ||||
|     struct SCICTL1_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // SCICTL2 control register 2 bit definitions
 | ||||
| //
 | ||||
| struct  SCICTL2_BITS {        // bit    description
 | ||||
|     Uint16 TXINTENA:1;        // 0      Transmit interrupt enable    
 | ||||
|     Uint16 RXBKINTENA:1;      // 1      Receiver-buffer break enable
 | ||||
|     Uint16 rsvd:4;            // 5:2    reserved
 | ||||
|     Uint16 TXEMPTY:1;         // 6      Transmitter empty flag
 | ||||
|     Uint16 TXRDY:1;           // 7      Transmitter ready flag  
 | ||||
|     Uint16 rsvd1:8;           // 15:8   reserved
 | ||||
| };  | ||||
| 
 | ||||
| union SCICTL2_REG { | ||||
|     Uint16               all; | ||||
|     struct SCICTL2_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // SCIRXST Receiver status register bit definitions
 | ||||
| //
 | ||||
| struct  SCIRXST_BITS {        // bit    description
 | ||||
|     Uint16 rsvd:1;            // 0      reserved
 | ||||
|     Uint16 RXWAKE:1;          // 1      Receiver wakeup detect flag
 | ||||
|     Uint16 PE:1;              // 2      Parity error flag
 | ||||
|     Uint16 OE:1;              // 3      Overrun error flag
 | ||||
|     Uint16 FE:1;              // 4      Framing error flag
 | ||||
|     Uint16 BRKDT:1;           // 5      Break-detect flag   
 | ||||
|     Uint16 RXRDY:1;           // 6      Receiver ready flag
 | ||||
|     Uint16 RXERROR:1;         // 7      Receiver error flag
 | ||||
| };  | ||||
| 
 | ||||
| union SCIRXST_REG { | ||||
|     Uint16               all; | ||||
|     struct SCIRXST_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // SCIRXBUF Receiver Data Buffer with FIFO bit definitions
 | ||||
| // 
 | ||||
| struct  SCIRXBUF_BITS {       // bits   description
 | ||||
|     Uint16 RXDT:8;            // 7:0    Receive word
 | ||||
|     Uint16 rsvd:6;            // 13:8   reserved
 | ||||
|     Uint16 SCIFFPE:1;         // 14     SCI PE error in FIFO mode
 | ||||
|     Uint16 SCIFFFE:1;         // 15     SCI FE error in FIFO mode
 | ||||
| };  | ||||
| 
 | ||||
| union SCIRXBUF_REG { | ||||
|     Uint16                all; | ||||
|     struct SCIRXBUF_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // SCIPRI Priority control register bit definitions
 | ||||
| //                                                    
 | ||||
| struct  SCIPRI_BITS {         // bit    description
 | ||||
|     Uint16 rsvd:3;            // 2:0    reserved
 | ||||
|     Uint16 FREE:1;            // 3      Free emulation suspend mode
 | ||||
|     Uint16 SOFT:1;            // 4      Soft emulation suspend mode
 | ||||
|     Uint16 rsvd1:3;           // 7:5    reserved
 | ||||
| }; | ||||
| 
 | ||||
| union SCIPRI_REG { | ||||
|     Uint16              all; | ||||
|     struct SCIPRI_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // SCI FIFO Transmit register bit definitions
 | ||||
| //                                                 
 | ||||
| struct  SCIFFTX_BITS {        // bit    description
 | ||||
|     Uint16 TXFFIL:5;          // 4:0    Interrupt level
 | ||||
|     Uint16 TXFFIENA:1;        // 5      Interrupt enable
 | ||||
|     Uint16 TXFFINTCLR:1;      // 6      Clear INT flag
 | ||||
|     Uint16 TXFFINT:1;         // 7      INT flag
 | ||||
|     Uint16 TXFFST:5;          // 12:8   FIFO status
 | ||||
|     Uint16 TXFIFOXRESET:1;    // 13     FIFO reset
 | ||||
|     Uint16 SCIFFENA:1;        // 14     Enhancement enable
 | ||||
|     Uint16 SCIRST:1;          // 15     SCI reset rx/tx channels     
 | ||||
| };  | ||||
| 
 | ||||
| union SCIFFTX_REG { | ||||
|     Uint16               all; | ||||
|     struct SCIFFTX_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // SCI FIFO recieve register bit definitions
 | ||||
| //                                                
 | ||||
| struct  SCIFFRX_BITS {        // bits   description
 | ||||
|     Uint16 RXFFIL:5;          // 4:0    Interrupt level
 | ||||
|     Uint16 RXFFIENA:1;        // 5      Interrupt enable
 | ||||
|     Uint16 RXFFINTCLR:1;      // 6      Clear INT flag
 | ||||
|     Uint16 RXFFINT:1;         // 7      INT flag
 | ||||
|     Uint16 RXFFST:5;          // 12:8   FIFO status
 | ||||
|     Uint16 RXFIFORESET:1;     // 13     FIFO reset
 | ||||
|     Uint16 RXFFOVRCLR:1;      // 14     Clear overflow
 | ||||
|     Uint16 RXFFOVF:1;         // 15     FIFO overflow
 | ||||
| };  | ||||
| 
 | ||||
| union SCIFFRX_REG { | ||||
|     Uint16               all; | ||||
|     struct SCIFFRX_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // SCI FIFO control register bit definitions
 | ||||
| //
 | ||||
| struct  SCIFFCT_BITS {        // bits   description
 | ||||
|     Uint16 FFTXDLY:8;         // 7:0    FIFO transmit delay
 | ||||
|     Uint16 rsvd:5;            // 12:8   reserved
 | ||||
|     Uint16 CDC:1;             // 13     Auto baud mode enable
 | ||||
|     Uint16 ABDCLR:1;          // 14     Auto baud clear
 | ||||
|     Uint16 ABD:1;             // 15     Auto baud detect
 | ||||
| }; | ||||
|      | ||||
| union SCIFFCT_REG { | ||||
|     Uint16               all; | ||||
|     struct SCIFFCT_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // SCI Register File
 | ||||
| //
 | ||||
| struct  SCI_REGS { | ||||
|     union SCICCR_REG     SCICCR;     // Communications control register
 | ||||
|     union SCICTL1_REG    SCICTL1;    // Control register 1
 | ||||
|     Uint16               SCIHBAUD;   // Baud rate (high) register
 | ||||
|     Uint16               SCILBAUD;   // Baud rate (low) register
 | ||||
|     union SCICTL2_REG    SCICTL2;    // Control register 2
 | ||||
|     union SCIRXST_REG    SCIRXST;    // Recieve status register
 | ||||
|     Uint16               SCIRXEMU;   // Recieve emulation buffer register
 | ||||
|     union SCIRXBUF_REG   SCIRXBUF;   // Recieve data buffer  
 | ||||
|     Uint16               rsvd1;      // reserved
 | ||||
|     Uint16               SCITXBUF;   // Transmit data buffer 
 | ||||
|     union SCIFFTX_REG    SCIFFTX;    // FIFO transmit register
 | ||||
|     union SCIFFRX_REG    SCIFFRX;    // FIFO recieve register
 | ||||
|     union SCIFFCT_REG    SCIFFCT;    // FIFO control register
 | ||||
|     Uint16               rsvd2;      // reserved
 | ||||
|     Uint16               rsvd3;      // reserved
 | ||||
|     union SCIPRI_REG     SCIPRI;     // FIFO Priority control   
 | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // SCI External References & Function Declarations
 | ||||
| //
 | ||||
| extern volatile struct SCI_REGS SciaRegs; | ||||
| extern volatile struct SCI_REGS ScibRegs; | ||||
| extern volatile struct SCI_REGS ScicRegs; | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif /* extern "C" */ | ||||
| 
 | ||||
| #endif  // end of DSP2833x_SCI_H definition
 | ||||
| 
 | ||||
| //
 | ||||
| // End of file
 | ||||
| //
 | ||||
| 
 | ||||
| @ -0,0 +1,177 @@ | ||||
| //###########################################################################
 | ||||
| //
 | ||||
| // FILE:   DSP2833x_Spi.h
 | ||||
| //
 | ||||
| // TITLE:  DSP2833x Device SPI Register Definitions.
 | ||||
| //
 | ||||
| //###########################################################################
 | ||||
| // $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $
 | ||||
| // $Release Date: November  1, 2016 $
 | ||||
| // $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated -
 | ||||
| //             http://www.ti.com/ ALL RIGHTS RESERVED $
 | ||||
| //###########################################################################
 | ||||
| 
 | ||||
| #ifndef DSP2833x_SPI_H | ||||
| #define DSP2833x_SPI_H | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
| 
 | ||||
| //
 | ||||
| // SPI Individual Register Bit Definitions
 | ||||
| //
 | ||||
| 
 | ||||
| //
 | ||||
| // SPI FIFO Transmit register bit definitions
 | ||||
| //
 | ||||
| struct  SPIFFTX_BITS {        // bit    description
 | ||||
|     Uint16 TXFFIL:5;          // 4:0    Interrupt level
 | ||||
|     Uint16 TXFFIENA:1;        // 5      Interrupt enable
 | ||||
|     Uint16 TXFFINTCLR:1;      // 6      Clear INT flag
 | ||||
|     Uint16 TXFFINT:1;         // 7      INT flag
 | ||||
|     Uint16 TXFFST:5;          // 12:8   FIFO status
 | ||||
|     Uint16 TXFIFO:1;          // 13     FIFO reset
 | ||||
|     Uint16 SPIFFENA:1;        // 14     Enhancement enable
 | ||||
|     Uint16 SPIRST:1;          // 15     Reset SPI
 | ||||
| }; | ||||
| 
 | ||||
| union SPIFFTX_REG { | ||||
|     Uint16               all; | ||||
|     struct SPIFFTX_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // SPI FIFO recieve register bit definitions
 | ||||
| //
 | ||||
| struct  SPIFFRX_BITS {        // bits   description
 | ||||
|     Uint16 RXFFIL:5;          // 4:0    Interrupt level
 | ||||
|     Uint16 RXFFIENA:1;        // 5      Interrupt enable
 | ||||
|     Uint16 RXFFINTCLR:1;      // 6      Clear INT flag
 | ||||
|     Uint16 RXFFINT:1;         // 7      INT flag
 | ||||
|     Uint16 RXFFST:5;          // 12:8   FIFO status
 | ||||
|     Uint16 RXFIFORESET:1;     // 13     FIFO reset
 | ||||
|     Uint16 RXFFOVFCLR:1;      // 14     Clear overflow
 | ||||
|     Uint16 RXFFOVF:1;         // 15     FIFO overflow
 | ||||
| }; | ||||
| 
 | ||||
| union SPIFFRX_REG { | ||||
|     Uint16               all; | ||||
|     struct SPIFFRX_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // SPI FIFO control register bit definitions
 | ||||
| //
 | ||||
| struct  SPIFFCT_BITS {        // bits   description
 | ||||
|     Uint16 TXDLY:8;           // 7:0    FIFO transmit delay
 | ||||
|     Uint16 rsvd:8;            // 15:8   reserved
 | ||||
| };  | ||||
| 
 | ||||
| union SPIFFCT_REG { | ||||
|     Uint16               all; | ||||
|     struct SPIFFCT_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // SPI configuration register bit definitions
 | ||||
| //
 | ||||
| struct  SPICCR_BITS {         // bits   description
 | ||||
|     Uint16 SPICHAR:4;         // 3:0    Character length control
 | ||||
|     Uint16 SPILBK:1;          // 4      Loop-back enable/disable
 | ||||
|     Uint16 rsvd1:1;           // 5      reserved
 | ||||
|     Uint16 CLKPOLARITY:1;     // 6      Clock polarity
 | ||||
|     Uint16 SPISWRESET:1;      // 7      SPI SW Reset
 | ||||
|     Uint16 rsvd2:8;           // 15:8   reserved
 | ||||
| }; | ||||
| 
 | ||||
| union SPICCR_REG { | ||||
|     Uint16              all; | ||||
|     struct SPICCR_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // SPI operation control register bit definitions
 | ||||
| //
 | ||||
| struct  SPICTL_BITS {         // bits   description
 | ||||
|     Uint16 SPIINTENA:1;       // 0      Interrupt enable
 | ||||
|     Uint16 TALK:1;            // 1      Master/Slave transmit enable
 | ||||
|     Uint16 MASTER_SLAVE:1;    // 2      Network control mode
 | ||||
|     Uint16 CLK_PHASE:1;       // 3      Clock phase select
 | ||||
|     Uint16 OVERRUNINTENA:1;   // 4      Overrun interrupt enable
 | ||||
|     Uint16 rsvd:11;           // 15:5   reserved
 | ||||
| }; | ||||
| 
 | ||||
| union SPICTL_REG { | ||||
|     Uint16              all; | ||||
|     struct SPICTL_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // SPI status register bit definitions
 | ||||
| //
 | ||||
| struct  SPISTS_BITS {         // bits   description
 | ||||
|     Uint16 rsvd1:5;           // 4:0    reserved
 | ||||
|     Uint16 BUFFULL_FLAG:1;    // 5      SPI transmit buffer full flag
 | ||||
|     Uint16 INT_FLAG:1;        // 6      SPI interrupt flag
 | ||||
|     Uint16 OVERRUN_FLAG:1;    // 7      SPI reciever overrun flag
 | ||||
|     Uint16 rsvd2:8;           // 15:8   reserved
 | ||||
| }; | ||||
| 
 | ||||
| union SPISTS_REG { | ||||
|     Uint16              all; | ||||
|     struct SPISTS_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // SPI priority control register bit definitions
 | ||||
| //
 | ||||
| struct  SPIPRI_BITS {         // bits   description
 | ||||
|     Uint16 rsvd1:4;           // 3:0    reserved
 | ||||
|     Uint16 FREE:1;            // 4      Free emulation mode control
 | ||||
|     Uint16 SOFT:1;            // 5      Soft emulation mode control
 | ||||
|     Uint16 rsvd2:1;           // 6      reserved
 | ||||
|     Uint16 rsvd3:9;           // 15:7   reserved
 | ||||
| }; | ||||
| 
 | ||||
| union SPIPRI_REG { | ||||
|     Uint16              all; | ||||
|     struct SPIPRI_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // SPI Register File
 | ||||
| //
 | ||||
| struct  SPI_REGS { | ||||
|     union SPICCR_REG     SPICCR;      // Configuration register
 | ||||
|     union SPICTL_REG     SPICTL;      // Operation control register
 | ||||
|     union SPISTS_REG     SPISTS;      // Status register
 | ||||
|     Uint16               rsvd1;       // reserved
 | ||||
|     Uint16               SPIBRR;      // Baud Rate
 | ||||
|     Uint16               rsvd2;       // reserved
 | ||||
|     Uint16               SPIRXEMU;    // Emulation buffer
 | ||||
|     Uint16               SPIRXBUF;    // Serial input buffer
 | ||||
|     Uint16               SPITXBUF;    // Serial output buffer
 | ||||
|     Uint16               SPIDAT;      // Serial data
 | ||||
|     union SPIFFTX_REG    SPIFFTX;     // FIFO transmit register
 | ||||
|     union SPIFFRX_REG    SPIFFRX;     // FIFO recieve register
 | ||||
|     union SPIFFCT_REG    SPIFFCT;     // FIFO control register
 | ||||
|     Uint16               rsvd3[2];    // reserved
 | ||||
|     union SPIPRI_REG     SPIPRI;      // FIFO Priority control
 | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // SPI External References & Function Declarations
 | ||||
| //
 | ||||
| extern volatile struct SPI_REGS SpiaRegs; | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif /* extern "C" */ | ||||
| 
 | ||||
| #endif  // end of DSP2833x_SPI_H definition
 | ||||
| 
 | ||||
| //
 | ||||
| // End of file
 | ||||
| //
 | ||||
| 
 | ||||
| @ -0,0 +1,453 @@ | ||||
| //###########################################################################
 | ||||
| //
 | ||||
| // FILE:   DSP2833x_SysCtrl.h
 | ||||
| //
 | ||||
| // TITLE:  DSP2833x Device System Control Register Definitions.
 | ||||
| //
 | ||||
| //###########################################################################
 | ||||
| // $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $
 | ||||
| // $Release Date: November  1, 2016 $
 | ||||
| // $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated -
 | ||||
| //             http://www.ti.com/ ALL RIGHTS RESERVED $
 | ||||
| //###########################################################################
 | ||||
| 
 | ||||
| #ifndef DSP2833x_SYS_CTRL_H | ||||
| #define DSP2833x_SYS_CTRL_H | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
| 
 | ||||
| //
 | ||||
| // System Control Individual Register Bit Definitions
 | ||||
| //
 | ||||
| 
 | ||||
| //
 | ||||
| // PLL Status Register
 | ||||
| //
 | ||||
| struct PLLSTS_BITS   {     // bits  description
 | ||||
|     Uint16 PLLLOCKS:1;     // 0     PLL lock status
 | ||||
|     Uint16 rsvd1:1;        // 1     reserved
 | ||||
|     Uint16 PLLOFF:1;       // 2     PLL off bit
 | ||||
|     Uint16 MCLKSTS:1;      // 3     Missing clock status bit
 | ||||
|     Uint16 MCLKCLR:1;      // 4     Missing clock clear bit
 | ||||
|     Uint16 OSCOFF:1;       // 5     Oscillator clock off
 | ||||
|     Uint16 MCLKOFF:1;      // 6     Missing clock detect
 | ||||
|     Uint16 DIVSEL:2;       // 7     Divide Select
 | ||||
|     Uint16 rsvd2:7;        // 15:7  reserved
 | ||||
| }; | ||||
| 
 | ||||
| union PLLSTS_REG { | ||||
|     Uint16              all; | ||||
|     struct PLLSTS_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // High speed peripheral clock register bit definitions
 | ||||
| //
 | ||||
| struct HISPCP_BITS  {       // bits  description
 | ||||
|     Uint16 HSPCLK:3;        // 2:0   Rate relative to SYSCLKOUT
 | ||||
|     Uint16 rsvd1:13;        // 15:3  reserved
 | ||||
| }; | ||||
|      | ||||
| union HISPCP_REG { | ||||
|     Uint16              all; | ||||
|     struct HISPCP_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // Low speed peripheral clock register bit definitions
 | ||||
| //
 | ||||
| struct LOSPCP_BITS  {       // bits  description
 | ||||
|     Uint16 LSPCLK:3;        // 2:0   Rate relative to SYSCLKOUT
 | ||||
|     Uint16 rsvd1:13;        // 15:3  reserved
 | ||||
| }; | ||||
| 
 | ||||
| union LOSPCP_REG { | ||||
|     Uint16              all; | ||||
|     struct LOSPCP_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // Peripheral clock control register 0 bit definitions
 | ||||
| //
 | ||||
| struct PCLKCR0_BITS  {    // bits  description
 | ||||
|     Uint16 rsvd1:2;       // 1:0   reserved
 | ||||
|     Uint16 TBCLKSYNC:1;   // 2     EWPM Module TBCLK enable/sync
 | ||||
|     Uint16 ADCENCLK:1;    // 3     Enable high speed clk to ADC
 | ||||
|     Uint16 I2CAENCLK:1;   // 4     Enable SYSCLKOUT to I2C-A
 | ||||
|     Uint16 SCICENCLK:1;   // 5     Enalbe low speed clk to SCI-C
 | ||||
|     Uint16 rsvd2:2;       // 7:6   reserved
 | ||||
|     Uint16 SPIAENCLK:1;   // 8     Enable low speed clk to SPI-A
 | ||||
|     Uint16 rsvd3:1;       // 9     reserved
 | ||||
|     Uint16 SCIAENCLK:1;   // 10    Enable low speed clk to SCI-A
 | ||||
|     Uint16 SCIBENCLK:1;   // 11    Enable low speed clk to SCI-B
 | ||||
|     Uint16 MCBSPAENCLK:1; // 12    Enable low speed clk to McBSP-A
 | ||||
|     Uint16 MCBSPBENCLK:1; // 13    Enable low speed clk to McBSP-B
 | ||||
|     Uint16 ECANAENCLK:1;  // 14    Enable system clk to eCAN-A
 | ||||
|     Uint16 ECANBENCLK:1;  // 15    Enable system clk to eCAN-B
 | ||||
| }; | ||||
| 
 | ||||
| union PCLKCR0_REG { | ||||
|     Uint16              all; | ||||
|     struct PCLKCR0_BITS bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // Peripheral clock control register 1 bit definitions
 | ||||
| //
 | ||||
| struct PCLKCR1_BITS  {     // bits  description
 | ||||
|     Uint16 EPWM1ENCLK:1;   // 0     Enable SYSCLKOUT to EPWM1
 | ||||
|     Uint16 EPWM2ENCLK:1;   // 1     Enable SYSCLKOUT to EPWM2
 | ||||
|     Uint16 EPWM3ENCLK:1;   // 2     Enable SYSCLKOUT to EPWM3
 | ||||
|     Uint16 EPWM4ENCLK:1;   // 3     Enable SYSCLKOUT to EPWM4
 | ||||
|     Uint16 EPWM5ENCLK:1;   // 4     Enable SYSCLKOUT to EPWM5
 | ||||
|     Uint16 EPWM6ENCLK:1;   // 5     Enable SYSCLKOUT to EPWM6
 | ||||
|     Uint16 rsvd1:2;        // 7:6   reserved
 | ||||
|     Uint16 ECAP1ENCLK:1;   // 8     Enable SYSCLKOUT to ECAP1
 | ||||
|     Uint16 ECAP2ENCLK:1;   // 9     Enable SYSCLKOUT to ECAP2
 | ||||
|     Uint16 ECAP3ENCLK:1;   // 10    Enable SYSCLKOUT to ECAP3
 | ||||
|     Uint16 ECAP4ENCLK:1;   // 11    Enable SYSCLKOUT to ECAP4
 | ||||
|     Uint16 ECAP5ENCLK:1;   // 12    Enable SYSCLKOUT to ECAP5
 | ||||
|     Uint16 ECAP6ENCLK:1;   // 13    Enable SYSCLKOUT to ECAP6
 | ||||
|     Uint16 EQEP1ENCLK:1;   // 14    Enable SYSCLKOUT to EQEP1
 | ||||
|     Uint16 EQEP2ENCLK:1;   // 15    Enable SYSCLKOUT to EQEP2
 | ||||
| }; | ||||
| 
 | ||||
| union PCLKCR1_REG { | ||||
|     Uint16              all; | ||||
|     struct PCLKCR1_BITS bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // Peripheral clock control register 2 bit definitions
 | ||||
| //
 | ||||
| struct PCLKCR3_BITS  {         // bits  description
 | ||||
|     Uint16 rsvd1:8;            // 7:0   reserved
 | ||||
|     Uint16 CPUTIMER0ENCLK:1;   // 8     Enable SYSCLKOUT to CPU-Timer 0
 | ||||
|     Uint16 CPUTIMER1ENCLK:1;   // 9     Enable SYSCLKOUT to CPU-Timer 1
 | ||||
|     Uint16 CPUTIMER2ENCLK:1;   // 10    Enable SYSCLKOUT to CPU-Timer 2
 | ||||
|     Uint16 DMAENCLK:1;         // 11    Enable the DMA clock
 | ||||
|     Uint16 XINTFENCLK:1;       // 12    Enable SYSCLKOUT to XINTF
 | ||||
|     Uint16 GPIOINENCLK:1;      //     Enable GPIO input clock
 | ||||
|     Uint16 rsvd2:2;            // 15:14 reserved
 | ||||
| }; | ||||
| 
 | ||||
| union PCLKCR3_REG { | ||||
|     Uint16              all; | ||||
|     struct PCLKCR3_BITS bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // PLL control register bit definitions
 | ||||
| //
 | ||||
| struct PLLCR_BITS {       // bits  description
 | ||||
|     Uint16 DIV:4;         // 3:0   Set clock ratio for the PLL
 | ||||
|     Uint16 rsvd1:12;      // 15:4  reserved
 | ||||
| }; | ||||
| 
 | ||||
| union PLLCR_REG { | ||||
|     Uint16             all; | ||||
|     struct PLLCR_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // Low Power Mode 0 control register bit definitions
 | ||||
| //
 | ||||
| struct LPMCR0_BITS {      // bits  description
 | ||||
|     Uint16 LPM:2;         // 1:0   Set the low power mode
 | ||||
|     Uint16 QUALSTDBY:6;   // 7:2   Qualification
 | ||||
|     Uint16 rsvd1:7;       // 14:8  reserved
 | ||||
|     Uint16 WDINTE:1;      // 15    Enables WD to wake the device from STANDBY
 | ||||
| }; | ||||
|      | ||||
| union LPMCR0_REG { | ||||
|     Uint16              all; | ||||
|     struct LPMCR0_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // Dual-mapping configuration register bit definitions
 | ||||
| //
 | ||||
| struct MAPCNF_BITS {     // bits  description
 | ||||
|     Uint16 MAPEPWM:1;    // 0     EPWM dual-map enable
 | ||||
|     Uint16 rsvd1:15;     // 15:1  reserved
 | ||||
| }; | ||||
| 
 | ||||
| union MAPCNF_REG { | ||||
| 	Uint16             all; | ||||
| 	struct MAPCNF_BITS bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // System Control Register File
 | ||||
| //
 | ||||
| struct SYS_CTRL_REGS { | ||||
|     Uint16              rsvd1;     // 0
 | ||||
|     union   PLLSTS_REG  PLLSTS;    // 1
 | ||||
|     Uint16              rsvd2[8];  // 2-9
 | ||||
|      | ||||
|     //
 | ||||
|     // 10: High-speed peripheral clock pre-scaler
 | ||||
|     //
 | ||||
|     union   HISPCP_REG  HISPCP; | ||||
|      | ||||
|     union   LOSPCP_REG  LOSPCP;    // 11: Low-speed peripheral clock pre-scaler
 | ||||
|     union   PCLKCR0_REG PCLKCR0;   // 12: Peripheral clock control register
 | ||||
|     union   PCLKCR1_REG PCLKCR1;   // 13: Peripheral clock control register
 | ||||
|     union   LPMCR0_REG  LPMCR0;    // 14: Low-power mode control register 0
 | ||||
|     Uint16              rsvd3;     // 15: reserved
 | ||||
|     union   PCLKCR3_REG PCLKCR3;   // 16: Peripheral clock control register
 | ||||
|     union   PLLCR_REG   PLLCR;     // 17: PLL control register
 | ||||
|      | ||||
|     //
 | ||||
|     // No bit definitions are defined for SCSR because
 | ||||
|     // a read-modify-write instruction can clear the WDOVERRIDE bit
 | ||||
|     //
 | ||||
|     Uint16              SCSR;      // 18: System control and status register
 | ||||
|      | ||||
|     Uint16              WDCNTR;    // 19: WD counter register
 | ||||
|     Uint16              rsvd4;     // 20
 | ||||
|     Uint16              WDKEY;     // 21: WD reset key register
 | ||||
|     Uint16              rsvd5[3];  // 22-24
 | ||||
|      | ||||
|     //
 | ||||
|     // No bit definitions are defined for WDCR because
 | ||||
|     // the proper value must be written to the WDCHK field
 | ||||
|     // whenever writing to this register.
 | ||||
|     //
 | ||||
|     Uint16              WDCR;      // 25: WD timer control register
 | ||||
|      | ||||
|     Uint16              rsvd6[4];  // 26-29
 | ||||
|     union   MAPCNF_REG  MAPCNF;    // 30: Dual-mapping configuration register
 | ||||
|     Uint16              rsvd7[1];  // 31
 | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // CSM Registers
 | ||||
| //
 | ||||
| 
 | ||||
| //
 | ||||
| // CSM Status & Control register bit definitions
 | ||||
| //
 | ||||
| struct  CSMSCR_BITS {       // bit   description
 | ||||
|     Uint16     SECURE:1;    // 0     Secure flag
 | ||||
|     Uint16     rsvd1:14;    // 14-1  reserved
 | ||||
|     Uint16     FORCESEC:1;  // 15    Force Secure control bit
 | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // Allow access to the bit fields or entire register
 | ||||
| //
 | ||||
| union CSMSCR_REG { | ||||
|     Uint16             all; | ||||
|     struct CSMSCR_BITS bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // CSM Register File
 | ||||
| //
 | ||||
| struct  CSM_REGS { | ||||
|     Uint16           KEY0;    // KEY reg bits 15-0
 | ||||
|     Uint16           KEY1;    // KEY reg bits 31-16
 | ||||
|     Uint16           KEY2;    // KEY reg bits 47-32
 | ||||
|     Uint16           KEY3;    // KEY reg bits 63-48
 | ||||
|     Uint16           KEY4;    // KEY reg bits 79-64
 | ||||
|     Uint16           KEY5;    // KEY reg bits 95-80
 | ||||
|     Uint16           KEY6;    // KEY reg bits 111-96
 | ||||
|     Uint16           KEY7;    // KEY reg bits 127-112
 | ||||
|     Uint16           rsvd1;   // reserved
 | ||||
|     Uint16           rsvd2;   // reserved
 | ||||
|     Uint16           rsvd3;   // reserved
 | ||||
|     Uint16           rsvd4;   // reserved
 | ||||
|     Uint16           rsvd5;   // reserved
 | ||||
|     Uint16           rsvd6;   // reserved
 | ||||
|     Uint16           rsvd7;   // reserved
 | ||||
|     union CSMSCR_REG CSMSCR;  // CSM Status & Control register
 | ||||
| };   | ||||
| 
 | ||||
| //
 | ||||
| // Password locations
 | ||||
| //
 | ||||
| struct  CSM_PWL { | ||||
|     Uint16   PSWD0;  // PSWD bits 15-0
 | ||||
|     Uint16   PSWD1;  // PSWD bits 31-16
 | ||||
|     Uint16   PSWD2;  // PSWD bits 47-32
 | ||||
|     Uint16   PSWD3;  // PSWD bits 63-48
 | ||||
|     Uint16   PSWD4;  // PSWD bits 79-64
 | ||||
|     Uint16   PSWD5;  // PSWD bits 95-80
 | ||||
|     Uint16   PSWD6;  // PSWD bits 111-96
 | ||||
|     Uint16   PSWD7;  // PSWD bits 127-112
 | ||||
| };   | ||||
|      | ||||
| //
 | ||||
| // Defines for Flash Registers
 | ||||
| //
 | ||||
| #define FLASH_SLEEP   0x0000; | ||||
| #define FLASH_STANDBY 0x0001; | ||||
| #define FLASH_ACTIVE  0x0003; | ||||
| 
 | ||||
| //
 | ||||
| // Flash Option Register bit definitions
 | ||||
| //
 | ||||
| struct  FOPT_BITS {        // bit   description
 | ||||
|     Uint16     ENPIPE:1;   // 0     Enable Pipeline Mode
 | ||||
|     Uint16     rsvd:15;    // 1-15  reserved
 | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // Allow access to the bit fields or entire register
 | ||||
| //
 | ||||
| union FOPT_REG { | ||||
|     Uint16           all; | ||||
|     struct FOPT_BITS bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // Flash Power Modes Register bit definitions
 | ||||
| //
 | ||||
| struct  FPWR_BITS {        // bit   description
 | ||||
|     Uint16     PWR:2;      // 0-1   Power Mode bits
 | ||||
|     Uint16     rsvd:14;    // 2-15  reserved
 | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // Allow access to the bit fields or entire register
 | ||||
| //
 | ||||
| union FPWR_REG { | ||||
|     Uint16           all; | ||||
|     struct FPWR_BITS bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // Flash Status Register bit definitions
 | ||||
| //
 | ||||
| struct  FSTATUS_BITS {        // bit   description
 | ||||
|     Uint16     PWRS:2;        // 0-1   Power Mode Status bits
 | ||||
|     Uint16     STDBYWAITS:1;  // 2     Bank/Pump Sleep to Standby Wait Counter Status bits
 | ||||
|     Uint16     ACTIVEWAITS:1; // 3     Bank/Pump Standby to Active Wait Counter Status bits
 | ||||
|     Uint16     rsvd1:4;       // 4-7   reserved
 | ||||
|     Uint16     V3STAT:1;      // 8     VDD3V Status Latch bit
 | ||||
|     Uint16     rsvd2:7;       // 9-15  reserved
 | ||||
| };   | ||||
| 
 | ||||
| //
 | ||||
| // Allow access to the bit fields or entire register
 | ||||
| //
 | ||||
| union FSTATUS_REG { | ||||
|     Uint16              all; | ||||
|     struct FSTATUS_BITS bit; | ||||
| };   | ||||
| 
 | ||||
| //
 | ||||
| // Flash Sleep to Standby Wait Counter Register bit definitions
 | ||||
| //
 | ||||
| struct  FSTDBYWAIT_BITS {     // bit   description
 | ||||
|     //
 | ||||
|     // 0-8   Bank/Pump Sleep to Standby Wait Count bits
 | ||||
|     //
 | ||||
|     Uint16     STDBYWAIT:9; | ||||
|      | ||||
|     Uint16     rsvd:7;        // 9-15  reserved
 | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // Allow access to the bit fields or entire register
 | ||||
| //
 | ||||
| union FSTDBYWAIT_REG { | ||||
|     Uint16                 all; | ||||
|     struct FSTDBYWAIT_BITS bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // Flash Standby to Active Wait Counter Register bit definitions
 | ||||
| //
 | ||||
| struct  FACTIVEWAIT_BITS {    // bit   description
 | ||||
|     //
 | ||||
|     // 0-8   Bank/Pump Standby to Active Wait Count bits
 | ||||
|     //
 | ||||
|     Uint16     ACTIVEWAIT:9; | ||||
|      | ||||
|     Uint16     rsvd:7;        // 9-15  reserved
 | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // Allow access to the bit fields or entire register
 | ||||
| //
 | ||||
| union FACTIVEWAIT_REG { | ||||
|     Uint16                  all; | ||||
|     struct FACTIVEWAIT_BITS bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // Bank Read Access Wait State Register bit definitions
 | ||||
| //
 | ||||
| struct  FBANKWAIT_BITS {        // bit   description
 | ||||
|     Uint16     RANDWAIT:4;      // 0-3   Flash Random Read Wait State bits
 | ||||
|     Uint16     rsvd1:4;         // 4-7   reserved
 | ||||
|     Uint16     PAGEWAIT:4;      // 8-11  Flash Paged Read Wait State bits
 | ||||
|     Uint16     rsvd2:4;         // 12-15 reserved
 | ||||
| };  | ||||
| 
 | ||||
| //
 | ||||
| // Allow access to the bit fields or entire register
 | ||||
| //
 | ||||
| union FBANKWAIT_REG { | ||||
|     Uint16                all; | ||||
|     struct FBANKWAIT_BITS bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // OTP Read Access Wait State Register bit definitions
 | ||||
| //
 | ||||
| struct  FOTPWAIT_BITS {       // bit   description
 | ||||
|     Uint16     OTPWAIT:5;     // 0-4   OTP Read Wait State bits
 | ||||
|     Uint16     rsvd:11;       // 5-15  reserved
 | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // Allow access to the bit fields or entire register
 | ||||
| //
 | ||||
| union FOTPWAIT_REG { | ||||
|     Uint16               all; | ||||
|     struct FOTPWAIT_BITS bit; | ||||
| };   | ||||
| 
 | ||||
| struct FLASH_REGS { | ||||
|     union FOPT_REG        FOPT;        // Option Register
 | ||||
|     Uint16                rsvd1;       // reserved
 | ||||
|     union FPWR_REG        FPWR;        // Power Modes Register
 | ||||
|     union FSTATUS_REG     FSTATUS;     // Status Register
 | ||||
|      | ||||
|     //
 | ||||
|     // Pump/Bank Sleep to Standby Wait State Register
 | ||||
|     //
 | ||||
|     union FSTDBYWAIT_REG  FSTDBYWAIT; | ||||
|      | ||||
|     //
 | ||||
|     // Pump/Bank Standby to Active Wait State Register
 | ||||
|     //
 | ||||
|     union FACTIVEWAIT_REG FACTIVEWAIT; | ||||
|      | ||||
|     union FBANKWAIT_REG   FBANKWAIT;   // Bank Read Access Wait State Register
 | ||||
|     union FOTPWAIT_REG    FOTPWAIT;    // OTP Read Access Wait State Register
 | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // System Control External References & Function Declarations
 | ||||
| //
 | ||||
| extern volatile struct SYS_CTRL_REGS SysCtrlRegs; | ||||
| extern volatile struct CSM_REGS CsmRegs; | ||||
| extern volatile struct CSM_PWL CsmPwl; | ||||
| extern volatile struct FLASH_REGS FlashRegs; | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif /* extern "C" */ | ||||
| 
 | ||||
| #endif  // end of DSP2833x_SYS_CTRL_H definition
 | ||||
| 
 | ||||
| //
 | ||||
| // End of file
 | ||||
| //
 | ||||
| 
 | ||||
| @ -0,0 +1,78 @@ | ||||
| //###########################################################################
 | ||||
| //
 | ||||
| // FILE:  DSP2833x_XIntrupt.h
 | ||||
| //
 | ||||
| // TITLE: DSP2833x Device External Interrupt Register Definitions.
 | ||||
| //
 | ||||
| //###########################################################################
 | ||||
| // $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $
 | ||||
| // $Release Date: November  1, 2016 $
 | ||||
| // $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated -
 | ||||
| //             http://www.ti.com/ ALL RIGHTS RESERVED $
 | ||||
| //###########################################################################
 | ||||
| 
 | ||||
| #ifndef DSP2833x_XINTRUPT_H | ||||
| #define DSP2833x_XINTRUPT_H | ||||
| 
 | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
| 
 | ||||
| struct XINTCR_BITS { | ||||
|     Uint16   ENABLE:1;    // 0      enable/disable
 | ||||
|     Uint16   rsvd1:1;     // 1      reserved
 | ||||
|     Uint16   POLARITY:2;  // 3:2    pos/neg, both triggered
 | ||||
|     Uint16   rsvd2:12;    //15:4    reserved
 | ||||
| }; | ||||
| 
 | ||||
| union XINTCR_REG { | ||||
|     Uint16               all; | ||||
|     struct XINTCR_BITS   bit; | ||||
| };   | ||||
| 
 | ||||
| struct XNMICR_BITS { | ||||
|     Uint16   ENABLE:1;    // 0      enable/disable
 | ||||
|     Uint16   SELECT:1;    // 1      Timer 1 or XNMI connected to int13
 | ||||
|     Uint16   POLARITY:2;  // 3:2    pos/neg, or both triggered
 | ||||
|     Uint16   rsvd2:12;    // 15:4   reserved
 | ||||
| }; | ||||
| 
 | ||||
| union XNMICR_REG { | ||||
|     Uint16               all; | ||||
|     struct XNMICR_BITS   bit; | ||||
| };   | ||||
| 
 | ||||
| //
 | ||||
| // External Interrupt Register File
 | ||||
| //
 | ||||
| struct XINTRUPT_REGS { | ||||
|     union XINTCR_REG XINT1CR; | ||||
|     union XINTCR_REG XINT2CR; | ||||
|     union XINTCR_REG XINT3CR; | ||||
|     union XINTCR_REG XINT4CR; | ||||
|     union XINTCR_REG XINT5CR; | ||||
|     union XINTCR_REG XINT6CR; | ||||
|     union XINTCR_REG XINT7CR; | ||||
|     union XNMICR_REG XNMICR; | ||||
|     Uint16           XINT1CTR; | ||||
|     Uint16           XINT2CTR; | ||||
|     Uint16           rsvd[5]; | ||||
|     Uint16           XNMICTR; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // External Interrupt References & Function Declarations
 | ||||
| //
 | ||||
| extern volatile struct XINTRUPT_REGS XIntruptRegs; | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif /* extern "C" */ | ||||
| 
 | ||||
| #endif  // end of DSP2833x_XINTF_H definition
 | ||||
| 
 | ||||
| //
 | ||||
| // End of file
 | ||||
| //
 | ||||
| 
 | ||||
| @ -0,0 +1,123 @@ | ||||
| //###########################################################################
 | ||||
| //
 | ||||
| // FILE:   DSP2833x_Xintf.h
 | ||||
| //
 | ||||
| // TITLE:  DSP2833x Device External Interface Register Definitions.
 | ||||
| //
 | ||||
| //###########################################################################
 | ||||
| // $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $
 | ||||
| // $Release Date: November  1, 2016 $
 | ||||
| // $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated -
 | ||||
| //             http://www.ti.com/ ALL RIGHTS RESERVED $
 | ||||
| //###########################################################################
 | ||||
| 
 | ||||
| #ifndef DSP2833x_XINTF_H | ||||
| #define DSP2833x_XINTF_H | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
| 
 | ||||
| //
 | ||||
| // XINTF timing register bit definitions
 | ||||
| //
 | ||||
| struct XTIMING_BITS {     // bits  description
 | ||||
|     Uint16 XWRTRAIL:2;    // 1:0   Write access trail timing
 | ||||
|     Uint16 XWRACTIVE:3;   // 4:2   Write access active timing
 | ||||
|     Uint16 XWRLEAD:2;     // 6:5   Write access lead timing
 | ||||
|     Uint16 XRDTRAIL:2;    // 8:7   Read access trail timing
 | ||||
|     Uint16 XRDACTIVE:3;   // 11:9  Read access active timing
 | ||||
|     Uint16 XRDLEAD:2;     // 13:12 Read access lead timing
 | ||||
|     Uint16 USEREADY:1;    // 14    Extend access using HW waitstates
 | ||||
|     Uint16 READYMODE:1;   // 15    Ready mode
 | ||||
|     Uint16 XSIZE:2;       // 17:16 XINTF bus width - must be written as 11b
 | ||||
|     Uint16 rsvd1:4;       // 21:18 reserved
 | ||||
|     Uint16 X2TIMING:1;    // 22    Double lead/active/trail timing
 | ||||
|     Uint16 rsvd3:9;       // 31:23 reserved
 | ||||
| }; | ||||
| 
 | ||||
| union XTIMING_REG { | ||||
|     Uint32               all; | ||||
|     struct XTIMING_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // XINTF control register bit definitions
 | ||||
| //
 | ||||
| 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
 | ||||
| }; | ||||
| 
 | ||||
| union XINTCNF2_REG { | ||||
|     Uint32                all; | ||||
|     struct XINTCNF2_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // XINTF bank switching register bit definitions
 | ||||
| //
 | ||||
| struct XBANK_BITS {       // bits  description
 | ||||
|     Uint16  BANK:3;       // 2:0   Zone for which banking is enabled
 | ||||
|     Uint16  BCYC:3;       // 5:3   XTIMCLK cycles to add
 | ||||
|     Uint16  rsvd:10;      // 15:6  reserved
 | ||||
| };   | ||||
|      | ||||
| union XBANK_REG { | ||||
|     Uint16             all; | ||||
|     struct XBANK_BITS  bit; | ||||
| }; | ||||
| 
 | ||||
| struct XRESET_BITS { | ||||
|     Uint16  XHARDRESET:1; | ||||
|     Uint16  rsvd1:15; | ||||
| }; | ||||
| 
 | ||||
| union XRESET_REG { | ||||
|     Uint16            all; | ||||
|     struct XRESET_BITS bit; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // XINTF Register File
 | ||||
| //
 | ||||
| struct XINTF_REGS { | ||||
|     union XTIMING_REG XTIMING0; | ||||
|     Uint32  rsvd1[5]; | ||||
|     union XTIMING_REG XTIMING6; | ||||
|     union XTIMING_REG XTIMING7; | ||||
|     Uint32  rsvd2[2]; | ||||
|     union XINTCNF2_REG XINTCNF2; | ||||
|     Uint32  rsvd3; | ||||
|     union XBANK_REG    XBANK; | ||||
|     Uint16  rsvd4; | ||||
|     Uint16  XREVISION; | ||||
|     Uint16  rsvd5[2]; | ||||
|     union XRESET_REG   XRESET; | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // XINTF External References & Function Declarations
 | ||||
| //
 | ||||
| extern volatile struct XINTF_REGS XintfRegs; | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif /* extern "C" */ | ||||
| 
 | ||||
| #endif  // end of DSP2833x_XINTF_H definition
 | ||||
| 
 | ||||
| //
 | ||||
| // End of File
 | ||||
| //
 | ||||
| 
 | ||||
| @ -0,0 +1,22 @@ | ||||
| 
 | ||||
| //###########################################################################
 | ||||
| //
 | ||||
| // FILE:   DSP28x_Project.h
 | ||||
| //
 | ||||
| // TITLE:  DSP28x Project Headerfile and Examples Include File
 | ||||
| //
 | ||||
| //###########################################################################
 | ||||
| // $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $
 | ||||
| // $Release Date: November  1, 2016 $
 | ||||
| // $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated -
 | ||||
| //             http://www.ti.com/ ALL RIGHTS RESERVED $
 | ||||
| //###########################################################################
 | ||||
| 
 | ||||
| #ifndef DSP28x_PROJECT_H | ||||
| #define DSP28x_PROJECT_H | ||||
| 
 | ||||
| #include "F28335/DSP2833x_Device.h"     // DSP2833x Headerfile Include File | ||||
| #include "F28335/DSP2833x_Examples.h"   // DSP2833x Examples Include File | ||||
| 
 | ||||
| #endif  // end of DSP28x_PROJECT_H definition
 | ||||
| 
 | ||||
| @ -0,0 +1,80 @@ | ||||
| // TI File $Revision: /main/2 $
 | ||||
| // Checkin $Date: June 22, 2007   13:11:24 $
 | ||||
| //###########################################################################
 | ||||
| //
 | ||||
| // FILE:  Flash2833x_API_Config.h
 | ||||
| //
 | ||||
| // TITLE: F2833x Flash Algo's - User Settings
 | ||||
| //
 | ||||
| // NOTE:  This file contains user defined settings that
 | ||||
| //        are used by the F2833x Flash APIs.
 | ||||
| //
 | ||||
| //###########################################################################
 | ||||
| // $TI Release:$
 | ||||
| // $Release Date:$
 | ||||
| //###########################################################################
 | ||||
| 
 | ||||
| #ifndef FLASH2833X_API_CONFIG_H | ||||
| #define FLASH2833X_API_CONFIG_H | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
| 
 | ||||
| // Variables that can be configured by the user. 
 | ||||
| 
 | ||||
| /*-----------------------------------------------------------------------------
 | ||||
|    1. Specify the device. | ||||
|       Define the device to be programmed as "1" (no quotes). | ||||
|       Define all other devices as "0" (no quotes).   | ||||
| -----------------------------------------------------------------------------*/ | ||||
| 
 | ||||
| #define FLASH_F28335   1 | ||||
| #define FLASH_F28334   0 | ||||
| #define FLASH_F28332   0 | ||||
| 
 | ||||
| /*-----------------------------------------------------------------------------
 | ||||
|    2. Specify the clock rate of the CPU (SYSCLKOUT) in nS. | ||||
| 
 | ||||
|       Take into account the input clock frequency and the PLL multiplier | ||||
|       that your application will use. | ||||
|   | ||||
|       Use one of the values provided, or define your own. | ||||
|       The trailing L is required tells the compiler to treat  | ||||
|       the number as a 64-bit value.   | ||||
| 
 | ||||
|       Only one statement should be uncommented. | ||||
| 
 | ||||
|       Example:  CLKIN is a 30MHz crystal.  | ||||
|   | ||||
|                 If the application will set PLLCR = 0xA then the CPU clock  | ||||
|                 will be 150Mhz (SYSCLKOUT = 150MHz).   | ||||
| 
 | ||||
|                 In this case, the CPU_RATE will be 6.667L | ||||
|                 Uncomment the line:  #define CPU_RATE  6.667L    | ||||
| -----------------------------------------------------------------------------*/ | ||||
| 
 | ||||
| #define CPU_RATE    6.667L   // for a 150MHz CPU clock speed (SYSCLKOUT)
 | ||||
| //#define CPU_RATE   10.000L   // for a 100MHz CPU clock speed (SYSCLKOUT)
 | ||||
| //#define CPU_RATE   13.330L   // for a 75MHz CPU clock speed (SYSCLKOUT)
 | ||||
| //#define CPU_RATE   20.000L   // for a 50MHz CPU clock speed  (SYSCLKOUT)
 | ||||
| //#define CPU_RATE   33.333L   // for a 30MHz CPU clock speed  (SYSCLKOUT)
 | ||||
| //#define CPU_RATE   41.667L   // for a 24MHz CPU clock speed  (SYSCLKOUT)
 | ||||
| //#define CPU_RATE   50.000L   // for a 20MHz CPU clock speed  (SYSCLKOUT)
 | ||||
| //#define CPU_RATE   66.667L   // for a 15MHz CPU clock speed  (SYSCLKOUT)
 | ||||
| //#define CPU_RATE  100.000L   // for a 10MHz CPU clock speed  (SYSCLKOUT)
 | ||||
| 
 | ||||
| //----------------------------------------------------------------------------
 | ||||
| 
 | ||||
| 
 | ||||
| //-----------------------------------------------------------------------------
 | ||||
| // **** DO NOT modify the code below this line ****
 | ||||
| //-----------------------------------------------------------------------------
 | ||||
| #define SCALE_FACTOR  1048576.0L*( (200L/CPU_RATE) )  // IQ20
 | ||||
| 
 | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif /* extern "C" */ | ||||
| 
 | ||||
| #endif // -- end FLASH2833X_API_CONFIG_H 
 | ||||
| @ -0,0 +1,272 @@ | ||||
| // TI File $Revision: /main/3 $
 | ||||
| // Checkin $Date: February 5, 2008   11:10:02 $
 | ||||
| //###########################################################################
 | ||||
| //
 | ||||
| // FILE:  Flash2833x_API_Library.h	
 | ||||
| //
 | ||||
| // TITLE: F2833x Flash Algo's main include file
 | ||||
| //
 | ||||
| // DESCRIPTION:
 | ||||
| //
 | ||||
| //       This file should be included in any project that uses any of the
 | ||||
| //       the F2833x flash APIs.    
 | ||||
| //
 | ||||
| //###########################################################################
 | ||||
| // $TI Release:$
 | ||||
| // $Release Date:$
 | ||||
| //###########################################################################
 | ||||
| 
 | ||||
| #ifndef FLASH2833X_API_LIBRARY_H | ||||
| #define FLASH2833X_API_LIBRARY_H | ||||
| 
 | ||||
| #include "F28335/Flash2833x_API_Config.h" | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| /*---------------------------------------------------------------------------
 | ||||
|  28x Datatypes | ||||
| 
 | ||||
|  For Portability, User Is Recommended To Use Following Data Type Size | ||||
|  Definitions For 16/32/64-Bit Signed/Unsigned Integers and floating point | ||||
|  variables: | ||||
| ---------------------------------------------------------------------------*/ | ||||
| 
 | ||||
| #ifndef DSP28_DATA_TYPES | ||||
| #define DSP28_DATA_TYPES | ||||
| typedef int                 int16; | ||||
| typedef long                int32; | ||||
| typedef long long           int64;    | ||||
| typedef unsigned int        Uint16; | ||||
| typedef unsigned long       Uint32; | ||||
| typedef unsigned long long  Uint64; | ||||
| typedef float               float32; | ||||
| typedef long double         float64; | ||||
| #endif | ||||
| 
 | ||||
| /*---------------------------------------------------------------------------
 | ||||
|  API Status Messages | ||||
| 
 | ||||
|  The following status values are returned from the API to the calling | ||||
|  program.  These can be used to determine if the API function passed | ||||
|  or failed.   | ||||
| ---------------------------------------------------------------------------*/ | ||||
|  // Operation passed, no errors were flagged
 | ||||
| #define STATUS_SUCCESS                        0    | ||||
| 
 | ||||
| // The CSM is preventing the function from performing its operation
 | ||||
| #define STATUS_FAIL_CSM_LOCKED               10 | ||||
| 
 | ||||
| // Device REVID does not match that required by the API
 | ||||
| #define STATUS_FAIL_REVID_INVALID            11 | ||||
|      | ||||
| // Invalid address passed to the API
 | ||||
| #define STATUS_FAIL_ADDR_INVALID             12 | ||||
| 
 | ||||
| // Incorrect PARTID
 | ||||
| // For example the F2806 API was used on a F2808 device. 
 | ||||
| #define STATUS_FAIL_INCORRECT_PARTID         13 | ||||
| 
 | ||||
| // API/Silicon missmatch.  An old version of the
 | ||||
| // API is being used on silicon it is not valid for
 | ||||
| // Please update to the latest API. 
 | ||||
| #define STATUS_FAIL_API_SILICON_MISMATCH     14 | ||||
| 
 | ||||
| // ---- Erase Specific errors ---- 
 | ||||
| #define STATUS_FAIL_NO_SECTOR_SPECIFIED      20 | ||||
| #define STATUS_FAIL_PRECONDITION             21 | ||||
| #define STATUS_FAIL_ERASE                    22 | ||||
| #define STATUS_FAIL_COMPACT                  23 | ||||
| #define STATUS_FAIL_PRECOMPACT               24 | ||||
| 
 | ||||
| // ---- Program Specific errors ----  
 | ||||
| #define STATUS_FAIL_PROGRAM                  30 | ||||
| #define STATUS_FAIL_ZERO_BIT_ERROR           31 | ||||
| 
 | ||||
| // ---- Verify Specific errors ----
 | ||||
| #define STATUS_FAIL_VERIFY                   40 | ||||
| 
 | ||||
| // Busy is set by each API function before it determines
 | ||||
| // a pass or fail condition for that operation.  
 | ||||
| // The calling function will will not receive this 
 | ||||
| // status condition back from the API
 | ||||
| #define STATUS_BUSY                999     | ||||
| 
 | ||||
| /*---------------------------------------------------------------------------
 | ||||
|  Flash sector mask definitions | ||||
| 
 | ||||
|  The following macros can be used to form a mask specifying which sectors | ||||
|  will be erased by the erase API function. | ||||
|   | ||||
|  Bit0 = Sector A | ||||
|  Bit1 = Sector B | ||||
|  Bit2 = Sector C | ||||
|  Bit3 = Sector D | ||||
|  Bit4 = Sector E | ||||
|  Bit5 = Sector F | ||||
|  Bit6 = Sector G | ||||
|  Bit7 = Sector H | ||||
| ---------------------------------------------------------------------------*/ | ||||
| 
 | ||||
| #define SECTORA   (Uint16)0x0001 | ||||
| #define SECTORB   (Uint16)0x0002 | ||||
| #define SECTORC   (Uint16)0x0004 | ||||
| #define SECTORD   (Uint16)0x0008 | ||||
| #define SECTORE   (Uint16)0x0010 | ||||
| #define SECTORF   (Uint16)0x0020 | ||||
| #define SECTORG   (Uint16)0x0040 | ||||
| #define SECTORH   (Uint16)0x0080 | ||||
| 
 | ||||
| 
 | ||||
| #if FLASH_F28335 | ||||
| // All sectors on an F28335 - Sectors A - H
 | ||||
| #define SECTOR_F28335 (SECTORA|SECTORB|SECTORC|\ | ||||
|                        SECTORD|SECTORE|SECTORF|\ | ||||
|                        SECTORG|SECTORH) | ||||
| #endif // -- end FLASH_F28335
 | ||||
| 
 | ||||
| #if FLASH_F28334 | ||||
| // All sectors on an F28334 - Sectors A - H
 | ||||
| #define SECTOR_F28334 (SECTORA|SECTORB|SECTORC|\ | ||||
|                        SECTORD|SECTORE|SECTORF|\ | ||||
|                        SECTORG|SECTORH) | ||||
| #endif // -- end FLASH_F28334
 | ||||
| 
 | ||||
| #if FLASH_F28332 | ||||
| // All sectors on an F28332 - Sectors A - D
 | ||||
| #define SECTOR_F28332 (SECTORA|SECTORB|SECTORC|\ | ||||
|                        SECTORD) | ||||
| #endif // -- end FLASH_F28332
 | ||||
| 
 | ||||
| 
 | ||||
| /*---------------------------------------------------------------------------
 | ||||
|  API Status Structure | ||||
|   | ||||
|  This structure is used to pass debug data back to the calling routine. | ||||
|  Note that the Erase API function has 3 parts: precondition, erase and | ||||
|  and compaction. Erase and compaction failures will not populate  | ||||
|  the expected and actual data fields.   | ||||
| ---------------------------------------------------------------------------*/ | ||||
| 
 | ||||
| typedef struct { | ||||
|     Uint32  FirstFailAddr; | ||||
|     Uint16  ExpectedData; | ||||
|     Uint16  ActualData; | ||||
| }FLASH_ST; | ||||
| 
 | ||||
| /*---------------------------------------------------------------------------
 | ||||
|    Interface Function prototypes | ||||
|     | ||||
|    For each 28x Flash API library, the function names are of the form: | ||||
|    Flash<DeviceNum>_<Operation>() | ||||
|     | ||||
|    Where <DeviceNum> is the device: ie 2808, 2806, 2801 | ||||
|          <Operation> is the operation such as Erase, Program... | ||||
|           | ||||
|    For portability for users who may move between the F2808, F2806 and | ||||
|    F2801, the following macro definitions are supplied.  | ||||
|     | ||||
|    Using these macro definitions,  the user can use instead make a generic | ||||
|    call:  Flash_<Operation> and the macro will map the call to the proper | ||||
|    device function | ||||
|     | ||||
|    Note except for the toggle test function, all of the function prototypes | ||||
|    are compatible with F281x devices as well.  | ||||
| ---------------------------------------------------------------------------*/ | ||||
| 
 | ||||
| #if FLASH_F28335 | ||||
| #define Flash_Erase(a,b)          Flash28335_Erase(a,b) | ||||
| #define Flash_Program(a,b,c,d)    Flash28335_Program(a,b,c,d) | ||||
| #define Flash_Verify(a,b,c,d)     Flash28335_Verify(a,b,c,d) | ||||
| #define Flash_ToggleTest(a,b)     Flash28335_ToggleTest(a,b) | ||||
| #define Flash_DepRecover()        Flash28335_DepRecover() | ||||
| #define Flash_APIVersionHex()     Flash28335_APIVersionHex() | ||||
| #define Flash_APIVersion()        Flash28335_APIVersion() | ||||
| #endif | ||||
| 
 | ||||
| #if FLASH_F28334 | ||||
| #define Flash_Erase(a,b)          Flash28334_Erase(a,b) | ||||
| #define Flash_Program(a,b,c,d)    Flash28334_Program(a,b,c,d) | ||||
| #define Flash_Verify(a,b,c,d)     Flash28334_Verify(a,b,c,d) | ||||
| #define Flash_ToggleTest(a,b)     Flash28334_ToggleTest(a,b) | ||||
| #define Flash_DepRecover()        Flash28334_DepRecover() | ||||
| #define Flash_APIVersionHex()     Flash28334_APIVersionHex() | ||||
| #define Flash_APIVersion()        Flash28334_APIVersion() | ||||
| #endif | ||||
| 
 | ||||
| #if FLASH_F28332 | ||||
| #define Flash_Erase(a,b)          Flash28332_Erase(a,b) | ||||
| #define Flash_Program(a,b,c,d)    Flash28332_Program(a,b,c,d) | ||||
| #define Flash_Verify(a,b,c,d)     Flash28332_Verify(a,b,c,d) | ||||
| #define Flash_ToggleTest(a,b)     Flash28332_ToggleTest(a,b) | ||||
| #define Flash_DepRecover()        Flash28332_DepRecover() | ||||
| #define Flash_APIVersionHex()     Flash28332_APIVersionHex() | ||||
| #define Flash_APIVersion()        Flash28332_APIVersion() | ||||
| #endif | ||||
| 
 | ||||
| extern Uint16  Flash_Erase(Uint16 SectorMask, FLASH_ST *FEraseStat); | ||||
| extern Uint16  Flash_Program(Uint16 *FlashAddr, Uint16 *BufAddr, Uint32 Length, FLASH_ST *FProgStatus); | ||||
| extern Uint16  Flash_Verify(Uint16 *StartAddr, Uint16 *BufAddr, Uint32 Length, FLASH_ST *FVerifyStat); | ||||
| extern void    Flash_ToggleTest(volatile Uint32 *ToggleReg, Uint32 Mask); | ||||
| extern Uint16  Flash_DepRecover(); | ||||
| extern float32 Flash_APIVersion(); | ||||
| extern Uint16  Flash_APIVersionHex();  | ||||
| 
 | ||||
| /*---------------------------------------------------------------------------
 | ||||
|    Frequency Scale factor: | ||||
|    The calling program must provide this global parameter used | ||||
|    for frequency scaling the algo's. | ||||
| ----------------------------------------------------------------------------*/ | ||||
| 
 | ||||
| extern Uint32 Flash_CPUScaleFactor; | ||||
| 
 | ||||
| /*---------------------------------------------------------------------------
 | ||||
|    Callback Function Pointer: | ||||
|    A callback function can be specified.  This function will be called | ||||
|    at safe times during erase, program and verify.  This function can | ||||
|    then be used to service an external watchdog or send a communications | ||||
|    packet. | ||||
|     | ||||
|    Note:  | ||||
|    THE FLASH AND OTP ARE NOT AVAILABLE DURING THIS FUNCTION CALL. | ||||
|    THE FLASH/OTP CANNOT BE READ NOR CAN CODE EXECUTE FROM IT DURING THIS CALL | ||||
|    DO NOT CALL ANY OF THE THE FLASH API FUNCTIONS DURING THIS CALL | ||||
| ----------------------------------------------------------------------------*/ | ||||
| extern void (*Flash_CallbackPtr) (void); | ||||
| 
 | ||||
| /*---------------------------------------------------------------------------
 | ||||
|    API load/run symbols: | ||||
|    These symbols are defined by the linker during the link.  Refer to the | ||||
|    Flash28_API section in the example .cmd file: | ||||
| 
 | ||||
|    Flash28_API: | ||||
|    { | ||||
|         Flash28335_API_Library.lib(.econst)  | ||||
|         Flash28335_API_Library.lib(.text) | ||||
|    } LOAD = FLASH,  | ||||
|      RUN = SARAM,  | ||||
|      LOAD_START(_Flash28_API_LoadStart), | ||||
|      LOAD_END(_Flash28_API_LoadEnd), | ||||
|      RUN_START(_Flash28_API_RunStart), | ||||
|      PAGE = 0 | ||||
|     | ||||
|    These are used to copy the flash API from flash to SARAM | ||||
|     | ||||
| ----------------------------------------------------------------------------*/ | ||||
| 
 | ||||
| extern Uint16 Flash28_API_LoadStart; | ||||
| extern Uint16 Flash28_API_LoadEnd; | ||||
| extern Uint16 Flash28_API_RunStart; | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif /* extern "C" */ | ||||
| 
 | ||||
| 
 | ||||
| #endif // -- end FLASH2833x_API_LIBRARY_H 
 | ||||
| 
 | ||||
| // --------- END OF FILE ----------------------------------
 | ||||
| 
 | ||||
| @ -0,0 +1,109 @@ | ||||
| /*
 | ||||
|  * ModbusRTUCRC.cpp | ||||
|  * | ||||
|  *      Author: Aleksey Gerasimenko | ||||
|  *      gerasimenko.aleksey.n@gmail.com | ||||
|  */ | ||||
| 
 | ||||
| #include "MODBUSRTU/ModbusRTUCRC.h" | ||||
| 
 | ||||
| namespace MODBUSRTU | ||||
| { | ||||
| 
 | ||||
| const uint16_t ModbusRTUCRC::m_table[256] = {0x0000, 0xC1C0, 0x81C1, 0x4001, 0x01C3, 0xC003, 0x8002, 0x41C2, | ||||
|                                       0x01C6, 0xC006, 0x8007, 0x41C7, 0x0005, 0xC1C5, 0x81C4, 0x4004, | ||||
|                                       0x01CC, 0xC00C, 0x800D, 0x41CD, 0x000F, 0xC1CF, 0x81CE, 0x400E, | ||||
|                                       0x000A, 0xC1CA, 0x81CB, 0x400B, 0x01C9, 0xC009, 0x8008, 0x41C8, | ||||
|                                       0x01D8, 0xC018, 0x8019, 0x41D9, 0x001B, 0xC1DB, 0x81DA, 0x401A, | ||||
|                                       0x001E, 0xC1DE, 0x81DF, 0x401F, 0x01DD, 0xC01D, 0x801C, 0x41DC, | ||||
|                                       0x0014, 0xC1D4, 0x81D5, 0x4015, 0x01D7, 0xC017, 0x8016, 0x41D6, | ||||
|                                       0x01D2, 0xC012, 0x8013, 0x41D3, 0x0011, 0xC1D1, 0x81D0, 0x4010, | ||||
|                                       0x01F0, 0xC030, 0x8031, 0x41F1, 0x0033, 0xC1F3, 0x81F2, 0x4032, | ||||
|                                       0x0036, 0xC1F6, 0x81F7, 0x4037, 0x01F5, 0xC035, 0x8034, 0x41F4, | ||||
|                                       0x003C, 0xC1FC, 0x81FD, 0x403D, 0x01FF, 0xC03F, 0x803E, 0x41FE, | ||||
|                                       0x01FA, 0xC03A, 0x803B, 0x41FB, 0x0039, 0xC1F9, 0x81F8, 0x4038, | ||||
|                                       0x0028, 0xC1E8, 0x81E9, 0x4029, 0x01EB, 0xC02B, 0x802A, 0x41EA, | ||||
|                                       0x01EE, 0xC02E, 0x802F, 0x41EF, 0x002D, 0xC1ED, 0x81EC, 0x402C, | ||||
|                                       0x01E4, 0xC024, 0x8025, 0x41E5, 0x0027, 0xC1E7, 0x81E6, 0x4026, | ||||
|                                       0x0022, 0xC1E2, 0x81E3, 0x4023, 0x01E1, 0xC021, 0x8020, 0x41E0, | ||||
|                                       0x01A0, 0xC060, 0x8061, 0x41A1, 0x0063, 0xC1A3, 0x81A2, 0x4062, | ||||
|                                       0x0066, 0xC1A6, 0x81A7, 0x4067, 0x01A5, 0xC065, 0x8064, 0x41A4, | ||||
|                                       0x006C, 0xC1AC, 0x81AD, 0x406D, 0x01AF, 0xC06F, 0x806E, 0x41AE, | ||||
|                                       0x01AA, 0xC06A, 0x806B, 0x41AB, 0x0069, 0xC1A9, 0x81A8, 0x4068, | ||||
|                                       0x0078, 0xC1B8, 0x81B9, 0x4079, 0x01BB, 0xC07B, 0x807A, 0x41BA, | ||||
|                                       0x01BE, 0xC07E, 0x807F, 0x41BF, 0x007D, 0xC1BD, 0x81BC, 0x407C, | ||||
|                                       0x01B4, 0xC074, 0x8075, 0x41B5, 0x0077, 0xC1B7, 0x81B6, 0x4076, | ||||
|                                       0x0072, 0xC1B2, 0x81B3, 0x4073, 0x01B1, 0xC071, 0x8070, 0x41B0, | ||||
|                                       0x0050, 0xC190, 0x8191, 0x4051, 0x0193, 0xC053, 0x8052, 0x4192, | ||||
|                                       0x0196, 0xC056, 0x8057, 0x4197, 0x0055, 0xC195, 0x8194, 0x4054, | ||||
|                                       0x019C, 0xC05C, 0x805D, 0x419D, 0x005F, 0xC19F, 0x819E, 0x405E, | ||||
|                                       0x005A, 0xC19A, 0x819B, 0x405B, 0x0199, 0xC059, 0x8058, 0x4198, | ||||
|                                       0x0188, 0xC048, 0x8049, 0x4189, 0x004B, 0xC18B, 0x818A, 0x404A, | ||||
|                                       0x004E, 0xC18E, 0x818F, 0x404F, 0x018D, 0xC04D, 0x804C, 0x418C, | ||||
|                                       0x0044, 0xC184, 0x8185, 0x4045, 0x0187, 0xC047, 0x8046, 0x4186, | ||||
|                                       0x0182, 0xC042, 0x8043, 0x4183, 0x0041, 0xC181, 0x8180, 0x4040}; | ||||
| 
 | ||||
| //CONSTRUCTOR
 | ||||
| ModbusRTUCRC::ModbusRTUCRC(): | ||||
|         m_crc_calculate(), | ||||
|         m_table_crc_index(0), | ||||
|         m_table_crc_value(), | ||||
|         m_start(0), | ||||
|         m_end(0) | ||||
| {}//CONSTRUCTOR
 | ||||
| 
 | ||||
| 
 | ||||
| // #pragma CODE_SECTION("ramfuncs");
 | ||||
| uint16_t ModbusRTUCRC::calculate(uint16_t *start, uint16_t length) | ||||
| { | ||||
|     m_crc_calculate.all = 0x0ffFF; | ||||
|     m_start = start; | ||||
|     m_end = start + length - 1; | ||||
| 
 | ||||
|     _while_cycle(); | ||||
| 
 | ||||
|     return m_crc_calculate.all; | ||||
| }//
 | ||||
| //
 | ||||
| // #pragma CODE_SECTION("ramfuncs");
 | ||||
| uint16_t ModbusRTUCRC::calculate(uint16_t *start, uint16_t *end) | ||||
| { | ||||
|     m_crc_calculate.all = 0x0ffFF; | ||||
|     m_start = start; | ||||
|     m_end = end; | ||||
| 
 | ||||
|     _while_cycle(); | ||||
| 
 | ||||
|     return m_crc_calculate.all; | ||||
| }//
 | ||||
| //
 | ||||
| // #pragma CODE_SECTION("ramfuncs");
 | ||||
| uint16_t ModbusRTUCRC::calculate(uint16_t databyte, uint16_t crc) | ||||
| { | ||||
|     m_crc_calculate.all = crc; | ||||
| 
 | ||||
|     m_table_crc_index = m_crc_calculate.byte.low ^ databyte; | ||||
|     m_table_crc_value.all = m_table[m_table_crc_index]; | ||||
|     m_crc_calculate.byte.low = m_crc_calculate.byte.high ^ m_table_crc_value.byte.high; | ||||
|     m_crc_calculate.byte.high = m_table_crc_value.byte.low; | ||||
| 
 | ||||
|     return m_crc_calculate.all; | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| // #pragma CODE_SECTION("ramfuncs");
 | ||||
| inline void ModbusRTUCRC::_while_cycle() | ||||
| { | ||||
|     while(m_start <= m_end) | ||||
|     { | ||||
|         m_table_crc_index = m_crc_calculate.byte.low ^ (*m_start++); | ||||
|         m_table_crc_value.all = m_table[m_table_crc_index]; | ||||
|         m_crc_calculate.byte.low = m_crc_calculate.byte.high ^ m_table_crc_value.byte.high; | ||||
|         m_crc_calculate.byte.high = m_table_crc_value.byte.low; | ||||
|         //
 | ||||
|     }//while
 | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| 
 | ||||
| } /* namespace MODBUSRTU */ | ||||
| @ -0,0 +1,58 @@ | ||||
| /*
 | ||||
|  * ModbusRTUCRC.h | ||||
|  * | ||||
|  *      Author: Aleksey Gerasimenko | ||||
|  *      gerasimenko.aleksey.n@gmail.com | ||||
|  */ | ||||
| 
 | ||||
| #include <math.h> | ||||
| #include <stdint.h> | ||||
| 
 | ||||
| 
 | ||||
| #ifndef MODBUSRTU_MODBUSRTUCRC_H_ | ||||
| #define MODBUSRTU_MODBUSRTUCRC_H_ | ||||
| 
 | ||||
| 
 | ||||
| struct Uint16ByteField | ||||
| { | ||||
|     uint16_t low: 8; | ||||
|     uint16_t high: 8; | ||||
| };//Uint16ByteField
 | ||||
| 
 | ||||
| union Uint16Register | ||||
| { | ||||
|     uint16_t all; | ||||
|     Uint16ByteField byte; | ||||
|     Uint16Register(): | ||||
|     all(0) | ||||
|     {} | ||||
| };//
 | ||||
| 
 | ||||
| 
 | ||||
| namespace MODBUSRTU | ||||
| { | ||||
| 
 | ||||
| class ModbusRTUCRC | ||||
| { | ||||
| private: | ||||
|     static const uint16_t m_table[256]; | ||||
| private: | ||||
| 
 | ||||
|     Uint16Register  m_crc_calculate; | ||||
|     uint16_t        m_table_crc_index; | ||||
|     Uint16Register  m_table_crc_value; | ||||
|     uint16_t        *m_start; | ||||
|     uint16_t        *m_end; | ||||
| public: | ||||
|     ModbusRTUCRC(); | ||||
| public: | ||||
|     uint16_t calculate(uint16_t *start, uint16_t length); | ||||
|     uint16_t calculate(uint16_t *start, uint16_t *end); | ||||
|     uint16_t calculate(uint16_t databyte, uint16_t crc); | ||||
| private: | ||||
|     inline void _while_cycle(); | ||||
| }; | ||||
| 
 | ||||
| } /* namespace MODBUSRTU */ | ||||
| 
 | ||||
| #endif /* MODBUSRTU_MODBUSRTUCRC_H_ */ | ||||
| @ -0,0 +1,65 @@ | ||||
| /*
 | ||||
|  * ModbusRTUCRCTable.h | ||||
|  * | ||||
|  *      Author: Aleksey Gerasimenko | ||||
|  *      gerasimenko.aleksey.n@gmail.com | ||||
|  */ | ||||
| 
 | ||||
| #include <stdint.h> | ||||
| 
 | ||||
| #ifndef MODBUSRTU_MODBUSRTUCRCTABLE_H_ | ||||
| #define MODBUSRTU_MODBUSRTUCRCTABLE_H_ | ||||
| 
 | ||||
| struct Uint16ByteField | ||||
| { | ||||
|     uint16_t low: 8; | ||||
|     uint16_t high: 8; | ||||
| };//Uint16ByteField
 | ||||
| 
 | ||||
| union Uint16Register | ||||
| { | ||||
|     uint16_t all; | ||||
|     Uint16ByteField byte; | ||||
|     Uint16Register(): | ||||
|     all(0) | ||||
|     {} | ||||
| };//
 | ||||
| 
 | ||||
| static const  uint16_t TABLE_CRC_16[] = | ||||
|     { | ||||
|         0x0000, 0xC1C0, 0x81C1, 0x4001, 0x01C3, 0xC003, 0x8002, 0x41C2, | ||||
|         0x01C6, 0xC006, 0x8007, 0x41C7, 0x0005, 0xC1C5, 0x81C4, 0x4004, | ||||
|         0x01CC, 0xC00C, 0x800D, 0x41CD, 0x000F, 0xC1CF, 0x81CE, 0x400E, | ||||
|         0x000A, 0xC1CA, 0x81CB, 0x400B, 0x01C9, 0xC009, 0x8008, 0x41C8, | ||||
|         0x01D8, 0xC018, 0x8019, 0x41D9, 0x001B, 0xC1DB, 0x81DA, 0x401A, | ||||
|         0x001E, 0xC1DE, 0x81DF, 0x401F, 0x01DD, 0xC01D, 0x801C, 0x41DC, | ||||
|         0x0014, 0xC1D4, 0x81D5, 0x4015, 0x01D7, 0xC017, 0x8016, 0x41D6, | ||||
|         0x01D2, 0xC012, 0x8013, 0x41D3, 0x0011, 0xC1D1, 0x81D0, 0x4010, | ||||
|         0x01F0, 0xC030, 0x8031, 0x41F1, 0x0033, 0xC1F3, 0x81F2, 0x4032, | ||||
|         0x0036, 0xC1F6, 0x81F7, 0x4037, 0x01F5, 0xC035, 0x8034, 0x41F4, | ||||
|         0x003C, 0xC1FC, 0x81FD, 0x403D, 0x01FF, 0xC03F, 0x803E, 0x41FE, | ||||
|         0x01FA, 0xC03A, 0x803B, 0x41FB, 0x0039, 0xC1F9, 0x81F8, 0x4038, | ||||
|         0x0028, 0xC1E8, 0x81E9, 0x4029, 0x01EB, 0xC02B, 0x802A, 0x41EA, | ||||
|         0x01EE, 0xC02E, 0x802F, 0x41EF, 0x002D, 0xC1ED, 0x81EC, 0x402C, | ||||
|         0x01E4, 0xC024, 0x8025, 0x41E5, 0x0027, 0xC1E7, 0x81E6, 0x4026, | ||||
|         0x0022, 0xC1E2, 0x81E3, 0x4023, 0x01E1, 0xC021, 0x8020, 0x41E0, | ||||
|         0x01A0, 0xC060, 0x8061, 0x41A1, 0x0063, 0xC1A3, 0x81A2, 0x4062, | ||||
|         0x0066, 0xC1A6, 0x81A7, 0x4067, 0x01A5, 0xC065, 0x8064, 0x41A4, | ||||
|         0x006C, 0xC1AC, 0x81AD, 0x406D, 0x01AF, 0xC06F, 0x806E, 0x41AE, | ||||
|         0x01AA, 0xC06A, 0x806B, 0x41AB, 0x0069, 0xC1A9, 0x81A8, 0x4068, | ||||
|         0x0078, 0xC1B8, 0x81B9, 0x4079, 0x01BB, 0xC07B, 0x807A, 0x41BA, | ||||
|         0x01BE, 0xC07E, 0x807F, 0x41BF, 0x007D, 0xC1BD, 0x81BC, 0x407C, | ||||
|         0x01B4, 0xC074, 0x8075, 0x41B5, 0x0077, 0xC1B7, 0x81B6, 0x4076, | ||||
|         0x0072, 0xC1B2, 0x81B3, 0x4073, 0x01B1, 0xC071, 0x8070, 0x41B0, | ||||
|         0x0050, 0xC190, 0x8191, 0x4051, 0x0193, 0xC053, 0x8052, 0x4192, | ||||
|         0x0196, 0xC056, 0x8057, 0x4197, 0x0055, 0xC195, 0x8194, 0x4054, | ||||
|         0x019C, 0xC05C, 0x805D, 0x419D, 0x005F, 0xC19F, 0x819E, 0x405E, | ||||
|         0x005A, 0xC19A, 0x819B, 0x405B, 0x0199, 0xC059, 0x8058, 0x4198, | ||||
|         0x0188, 0xC048, 0x8049, 0x4189, 0x004B, 0xC18B, 0x818A, 0x404A, | ||||
|         0x004E, 0xC18E, 0x818F, 0x404F, 0x018D, 0xC04D, 0x804C, 0x418C, | ||||
|         0x0044, 0xC184, 0x8185, 0x4045, 0x0187, 0xC047, 0x8046, 0x4186, | ||||
|         0x0182, 0xC042, 0x8043, 0x4183, 0x0041, 0xC181, 0x8180, 0x4040 | ||||
|     }; | ||||
| 
 | ||||
| 
 | ||||
| #endif /* MODBUSRTU_MODBUSRTUCRCTABLE_H_ */ | ||||
| @ -0,0 +1,257 @@ | ||||
| /*
 | ||||
|  * ModbusRTUDefines.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 "DSP28335/GPIO.h" | ||||
| #include "DSP28335/SCIBase.h" | ||||
| 
 | ||||
| #include "MODBUSRTU/ModbusRTUVariant.h" | ||||
| 
 | ||||
| 
 | ||||
| #ifndef SCIRS485_BAUDRATE_DEFAULT | ||||
| //#define SCIRS485_BAUDRATE_DEFAULT   (DSP28335::BR2400)
 | ||||
| //#define SCIRS485_BAUDRATE_DEFAULT   (DSP28335::BR4800)
 | ||||
| #define SCIRS485_BAUDRATE_DEFAULT   (DSP28335::BR9600) | ||||
| //#define SCIRS485_BAUDRATE_DEFAULT   (DSP28335::BR14400)
 | ||||
| //#define SCIRS485_BAUDRATE_DEFAULT   (DSP28335::BR19200)
 | ||||
| //#define SCIRS485_BAUDRATE_DEFAULT   (DSP28335::BR38400)
 | ||||
| #endif | ||||
| 
 | ||||
| #ifndef SCIRS485_PARITY_DEFAULT | ||||
| #define SCIRS485_PARITY_DEFAULT     (DSP28335::NO) | ||||
| //#define SCIRS485_PARITY_DEFAULT     (MODBUSRTU::ODD)
 | ||||
| //#define SCIRS485_PARITY_DEFAULT     (MODBUSRTU::EVEN)
 | ||||
| #endif | ||||
| 
 | ||||
| #ifndef SCIRS485_STOPBITS_DEFAULT | ||||
| #define SCIRS485_STOPBITS_DEFAULT   (DSP28335::ONE) | ||||
| //#define SCIRS485_STOPBITS_DEFAULT   (DSP28335::ODD)
 | ||||
| //#define SCIRS485_STOPBITS_DEFAULT   (DSP28335::EVEN)
 | ||||
| #endif | ||||
| 
 | ||||
| #ifndef SCIRS485_LENGHT_DEFAULT | ||||
| #define SCIRS485_LENGHT_DEFAULT     (DSP28335::LEN8) | ||||
| #endif | ||||
| 
 | ||||
| #ifndef SCIRS485_GPIO_SETUP_DEFAULT | ||||
| #define SCIRS485_GPIO_SETUP_DEFAULT (&DSP28335::GPIO::gpio_scib_setup) | ||||
| #endif | ||||
| 
 | ||||
| #ifndef SCIRS485_GPIO_DE_DEFAULT | ||||
| #define SCIRS485_GPIO_DE_DEFAULT (&DSP28335::GPIO::gpio_scib_re_de_set) | ||||
| #endif | ||||
| 
 | ||||
| #ifndef SCIRS485_GPIO_RE_DEFAULT | ||||
| #define SCIRS485_GPIO_RE_DEFAULT (&DSP28335::GPIO::gpio_scib_re_de_clear) | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| #ifndef NOP | ||||
| #define  NOP   asm(" NOP") | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| #ifndef MODBUSRTU_FUNCTION_BROADCAST | ||||
| #define MODBUSRTU_FUNCTION_BROADCAST                    (uint16_t) 00 | ||||
| #endif | ||||
| 
 | ||||
| #ifndef MODBUSRTU_FUNCTION_READ_COIL_STATUS | ||||
| #define MODBUSRTU_FUNCTION_READ_COIL_STATUS             (uint16_t) 01 | ||||
| #endif | ||||
| 
 | ||||
| #ifndef MODBUSRTU_FUNCTION_READ_INPUT_STATUS | ||||
| #define MODBUSRTU_FUNCTION_READ_INPUT_STATUS            (uint16_t) 02 | ||||
| #endif | ||||
| 
 | ||||
| #ifndef MODBUSRTU_FUNCTION_READ_HOLDING_REGISTERS | ||||
| #define MODBUSRTU_FUNCTION_READ_HOLDING_REGISTERS       (uint16_t) 03 | ||||
| #endif | ||||
| 
 | ||||
| #ifndef MODBUSRTU_FUNCTION_READ_INPUT_REGISTERS | ||||
| #define MODBUSRTU_FUNCTION_READ_INPUT_REGISTERS         (uint16_t) 04 | ||||
| #endif | ||||
| 
 | ||||
| #ifndef MODBUSRTU_FUNCTION_FORCE_SINGLE_COIL | ||||
| #define MODBUSRTU_FUNCTION_FORCE_SINGLE_COIL            (uint16_t) 05 | ||||
| #endif | ||||
| 
 | ||||
| #ifndef MODBUSRTU_FUNCTION_PRESET_SINGLE_REGISTER | ||||
| #define MODBUSRTU_FUNCTION_PRESET_SINGLE_REGISTER       (uint16_t) 06 | ||||
| #endif | ||||
| 
 | ||||
| #ifndef MODBUSRTU_FUNCTION_FORCE_MULTIPLE_COILS | ||||
| #define MODBUSRTU_FUNCTION_FORCE_MULTIPLE_COILS         (uint16_t) 15 | ||||
| #endif | ||||
| 
 | ||||
| #ifndef MODBUSRTU_FUNCTION_PRESET_MULTIPLE_REGISTERS | ||||
| #define MODBUSRTU_FUNCTION_PRESET_MULTIPLE_REGISTERS    (uint16_t) 16 | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| #ifndef DEFAULT_MODBUSRTU_INPUT_REGISTERS_SIZE | ||||
| #define DEFAULT_MODBUSRTU_INPUT_REGISTERS_SIZE (uint16_t)10 | ||||
| #endif | ||||
| 
 | ||||
| #ifndef DEFAULT_MODBUSRTU_OUTPUT_REGISTERS_SIZE | ||||
| #define DEFAULT_MODBUSRTU_OUTPUT_REGISTERS_SIZE (uint16_t)10 | ||||
| #endif | ||||
| 
 | ||||
| #ifndef DEFAULT_MODBUSRTU_INPUT_COILS_SIZE | ||||
| #define DEFAULT_MODBUSRTU_INPUT_COILS_SIZE (uint16_t)10 | ||||
| #endif | ||||
| 
 | ||||
| #ifndef DEFAULT_MODBUSRTU_OUTPUT_COILS_SIZE | ||||
| #define DEFAULT_MODBUSRTU_OUTPUT_COILS_SIZE (uint16_t)10 | ||||
| #endif | ||||
| 
 | ||||
| #ifndef MODBUSRTU_INPUT_REGISTERS_SIZE | ||||
| #define MODBUSRTU_INPUT_REGISTERS_SIZE DEFAULT_MODBUSRTU_INPUT_REGISTERS_SIZE | ||||
| #endif | ||||
| 
 | ||||
| #ifndef MODBUSRTU_OUTPUT_REGISTERS_SIZE | ||||
| #define MODBUSRTU_OUTPUT_REGISTERS_SIZE  DEFAULT_MODBUSRTU_OUTPUT_REGISTERS_SIZE | ||||
| #endif | ||||
| 
 | ||||
| #ifndef MODBUSRTU_INPUT_COILS_SIZE | ||||
| #define MODBUSRTU_INPUT_COILS_SIZE  DEFAULT_MODBUSRTU_INPUT_COILS_SIZE | ||||
| #endif | ||||
| 
 | ||||
| #ifndef MODBUSRTU_OUTPUT_COILS_SIZE | ||||
| #define MODBUSRTU_OUTPUT_COILS_SIZE  DEFAULT_MODBUSRTU_OUTPUT_COILS_SIZE | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| #ifndef MODBUSRTU_MODBUSRTUDEFINES_H_ | ||||
| #define MODBUSRTU_MODBUSRTUDEFINES_H_ | ||||
| 
 | ||||
| 
 | ||||
| namespace MODBUSRTU | ||||
| { | ||||
| 
 | ||||
| enum buffer_type_t  {OUTPUTCOILS, INPUTCOILS, OUTPUTREGISTERS, INPUTREGISTERS}; | ||||
| enum transceiver_state_machine_t {SCAN, RECEIVE, WAIT_RESPONSE, TRANSMIT, BREAK}; | ||||
| enum transceiver_event_t {ENTRY, RXREADY, TXREADY, TXWAIT}; | ||||
| 
 | ||||
| enum modbusrtu_register_16_bit_t {  REG16_BIT0, | ||||
|                                     REG16_BIT1, | ||||
|                                     REG16_BIT2, | ||||
|                                     REG16_BIT3, | ||||
|                                     REG16_BIT4, | ||||
|                                     REG16_BIT5, | ||||
|                                     REG16_BIT6, | ||||
|                                     REG16_BIT7, | ||||
|                                     REG16_BIT8, | ||||
|                                     REG16_BIT9, | ||||
|                                     REG16_BIT10, | ||||
|                                     REG16_BIT11, | ||||
|                                     REG16_BIT12, | ||||
|                                     REG16_BIT13, | ||||
|                                     REG16_BIT14, | ||||
|                                     REG16_BIT15}; | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| //struct ModbusRTUDataByteField
 | ||||
| //{
 | ||||
| //    uint16_t low :8;
 | ||||
| //    uint16_t high :8;
 | ||||
| //};//ModbusRTUDataByteField
 | ||||
| 
 | ||||
| //union ModbusRTUDataRegister
 | ||||
| //{
 | ||||
| //    uint16_t all;
 | ||||
| //    ModbusRTUDataByteField byte;
 | ||||
| //    ModbusRTUDataRegister():
 | ||||
| //        all(0)
 | ||||
| //    {}
 | ||||
| //};//ModbusRTUDataRegister
 | ||||
| 
 | ||||
| 
 | ||||
| //enum ModbusRTUEventRS
 | ||||
| //{
 | ||||
| //    ENTRY,                  // state entry event
 | ||||
| //    EXIT,                   // state exit event
 | ||||
| //    TIMEOUT3_5CHAR,         // All datagram have been received
 | ||||
| //    TIMEOUT1_5CHAR,         // Interval time of each byte in datagram. Not used
 | ||||
| //    RX_READY,               // SCIRXST.bit.RXRDY. Serial port received a serial data (one byte)
 | ||||
| //    TX_READY,               // All datagram have been sent
 | ||||
| //    TX_WAIT                 // Wait for the datagram to be sent
 | ||||
| //};//
 | ||||
| 
 | ||||
| /*
 | ||||
| enum ModbusRTUReceiveEvent | ||||
| { | ||||
|     ENTRY, | ||||
|     RECEIVE, | ||||
|     EXIT, | ||||
|     TIMEOUT355CHAR, | ||||
|     TIMEOUT155CHAR, | ||||
|     FRAMEREADY, | ||||
|     WAIT | ||||
| };//
 | ||||
| */ | ||||
| 
 | ||||
| 
 | ||||
| //struct ModbusRTUTimerStateBitField
 | ||||
| //{
 | ||||
| //    uint16_t time_over_1_5_char :1;
 | ||||
| //    uint16_t time_over_3_5_char :1;
 | ||||
| //};//ModbusRTUTimerStateBitField
 | ||||
| 
 | ||||
| //union ModbusRTUTimerState
 | ||||
| //{
 | ||||
| //    uint16_t all;
 | ||||
| //    ModbusRTUTimerStateBitField bit;
 | ||||
| //    ModbusRTUTimerState():
 | ||||
| //        all((uint16_t)0)
 | ||||
| //    {}
 | ||||
| //};//ModbusRTUTimerState
 | ||||
| 
 | ||||
| 
 | ||||
| //struct ModbusRTUTimer
 | ||||
| //{
 | ||||
| //    uint32_t counter;
 | ||||
| //    uint32_t start;
 | ||||
| //    uint32_t interval;
 | ||||
| //    uint32_t period_1_5_char;
 | ||||
| //    uint32_t period_3_5_char;
 | ||||
| //    ModbusRTUTimerState flag;
 | ||||
| //    ModbusRTUTimer():
 | ||||
| //        counter((uint32_t)0),
 | ||||
| //        start((uint32_t)0),
 | ||||
| //        interval((uint32_t)0),
 | ||||
| //        period_1_5_char((uint32_t)0),
 | ||||
| //        period_3_5_char((uint32_t)0),
 | ||||
| //        flag()
 | ||||
| //    {}
 | ||||
| //};//
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| } /* namespace MODBUSRTU */ | ||||
| 
 | ||||
| #endif /* MODBUSRTU_MODBUSRTUDEFINES_H_ */ | ||||
| @ -0,0 +1,496 @@ | ||||
| /*
 | ||||
|  * ModbusRTUTransceiver.cpp | ||||
|  * | ||||
|  *      Author: Aleksey Gerasimenko | ||||
|  *      gerasimenko.aleksey.n@gmail.com | ||||
|  */ | ||||
| 
 | ||||
| #include "MODBUSRTU/ModbusRTUTransceiver.h" | ||||
| 
 | ||||
| namespace MODBUSRTU | ||||
| { | ||||
| //CONSTRUCTOR
 | ||||
| //ModbusRTUTransceiver::ModbusRTUTransceiver(DSP28335::SCIBase& sciport, DSP28335::CPUTimers& cputimer, MODBUSRTU::ModbusRTUCRC& crc):
 | ||||
| ModbusRTUTransceiver::ModbusRTUTransceiver(DSP28335::SCIBase& sciport, DSP28335::MeasureTimeInterval& interval_measure, MODBUSRTU::ModbusRTUCRC& crc): | ||||
|         m_sci_port(sciport), | ||||
|         m_sci_config(), | ||||
|         m_node_id(0), | ||||
|         //
 | ||||
|         m_state_machine(MODBUSRTU::SCAN), | ||||
|         m_event(MODBUSRTU::ENTRY), | ||||
|         //
 | ||||
|         //m_interval(cputimer.CPUTimer),
 | ||||
|         m_interval_measure(interval_measure), | ||||
|         m_interval_pause((Uint32)0), | ||||
|         m_interval_b5((Uint32)0), | ||||
|         m_interval_b75((Uint32)0), | ||||
|         m_interval_1b((Uint32)0), | ||||
|         m_interval_1b25((Uint32)0), | ||||
|         m_interval_1b5((Uint32)0), | ||||
|         m_interval_1b75((Uint32)0), | ||||
|         m_interval_3b5((Uint32)0), | ||||
|         m_interval_freeze((Uint32)0), | ||||
|         m_interval_current((Uint32)0), | ||||
|         //
 | ||||
|         m_rx_buffer(), | ||||
|         m_tx_buffer(), | ||||
|         m_rx_count(0), | ||||
|         m_tx_count(0), | ||||
|         m_tx_length(0), | ||||
|         //
 | ||||
|         m_aux_rx_buf(0), | ||||
|         m_aux_rx_count(0), | ||||
|         m_aux_tx_buf(0), | ||||
|         m_aux_tx_count(0), | ||||
|         //
 | ||||
|         m_crc_status(false), | ||||
|         m_crc(crc), | ||||
|         m_crc_rx_frame(0), | ||||
|         m_crc_tx_frame(0), | ||||
|         //
 | ||||
|         m_rx_external_buffer(m_rx_buffer), | ||||
|         m_tx_external_buffer(m_tx_buffer), | ||||
|         m_rx_messaage_length(&m_rx_count), | ||||
|         m_tx_message_length(&m_tx_count), | ||||
|         //
 | ||||
|         m_destination(0), | ||||
|         m_source_start(0), | ||||
|         m_source_end(0), | ||||
|         m_copy_length(0), | ||||
|         //
 | ||||
|         _execute(&ModbusRTUTransceiver::_execute_transceiver), | ||||
|         _frame_transceiver(&ModbusRTUTransceiver::_frame_receive_node_id), | ||||
|         //
 | ||||
|         _re_de_setup(&DSP28335::GPIO::gpio_scib_re_de_setup), | ||||
|         _driver_enable(&DSP28335::GPIO::gpio_scib_re_de_set), | ||||
|         _receiver_enable(&DSP28335::GPIO::gpio_scib_re_de_clear) | ||||
|         //
 | ||||
| {}//CONSTRUCTOR
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| void ModbusRTUTransceiver::setup(ModbusRTUTransceiverSetup& setup) | ||||
| { | ||||
|     //m_interval.setup();
 | ||||
|     _re_de_setup = setup.gpio_re_de_setup; | ||||
|     _driver_enable = setup.gpio_driver_enable; | ||||
|     _receiver_enable = setup.gpio_receiver_enable; | ||||
| 
 | ||||
|      | ||||
|     (*_re_de_setup)(); | ||||
|      | ||||
|     _set_receive_node_id(); | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| void ModbusRTUTransceiver::configure(ModbusRTUTransceiverConfiguration& config) | ||||
| { | ||||
|     m_sci_config = config.config; | ||||
|     m_node_id = config.node_id; | ||||
| 
 | ||||
|     if(!m_sci_port.compare_configuration(m_sci_config)) | ||||
|     { | ||||
|         m_sci_port.set_configuration(m_sci_config); | ||||
|         //
 | ||||
|     }//if
 | ||||
| 
 | ||||
|     switch(m_sci_config.baudrate) | ||||
|     { | ||||
|     case DSP28335::BR2400:  {m_interval_b5 = (Uint32)250000; m_interval_b75 = (Uint32)375000; m_interval_1b = (Uint32)500000; m_interval_1b25 = (Uint32)625000; m_interval_1b5 = (Uint32)750000; m_interval_1b75 = (Uint32)875000; m_interval_3b5 = (Uint32)1750000; m_interval_freeze = (Uint32)2000000; break;} | ||||
|     case DSP28335::BR4800:  {m_interval_b5 = (Uint32)125000; m_interval_b75 = (Uint32)187500; m_interval_1b = (Uint32)250000; m_interval_1b25 = (Uint32)312500; m_interval_1b5 = (Uint32)375000; m_interval_1b75 = (Uint32)250000; m_interval_3b5 = (Uint32) 875000; m_interval_freeze = (Uint32)1000000; break;} | ||||
|     case DSP28335::BR9600:  {m_interval_b5 = (Uint32) 62500; m_interval_b75 = (Uint32) 93750; m_interval_1b = (Uint32)125000; m_interval_1b25 = (Uint32)156250; m_interval_1b5 = (Uint32)187500; m_interval_1b75 = (Uint32)218750; m_interval_3b5 = (Uint32) 437500; m_interval_freeze = (Uint32) 500000; break;} | ||||
|     case DSP28335::BR19200: {m_interval_b5 = (Uint32) 31250; m_interval_b75 = (Uint32) 46875; m_interval_1b = (Uint32) 62500; m_interval_1b25 = (Uint32)78125;  m_interval_1b5 = (Uint32) 93750; m_interval_1b75 = (Uint32)109375; m_interval_3b5 = (Uint32) 218750; m_interval_freeze = (Uint32) 250000; break;} | ||||
|     case DSP28335::BR38400: {m_interval_b5 = (Uint32)15625;  m_interval_b75 = (Uint32)23437;  m_interval_1b = (Uint32) 31250; m_interval_1b25 = (Uint32)39062;  m_interval_1b5 = (Uint32) 46875; m_interval_1b75 = (Uint32) 54687; m_interval_3b5 = (Uint32) 109375; m_interval_freeze = (Uint32) 125000; break;} | ||||
|     default: {m_interval_b5 = (Uint32)62500;  m_interval_b75 = (Uint32)93750;  m_interval_1b = (Uint32)125000; m_interval_1b25 = (Uint32)156250; m_interval_1b5 = (Uint32)187500; m_interval_1b75 = (Uint32)218750; m_interval_3b5 = (Uint32) 437500; m_interval_freeze = (Uint32) 500000; break;} | ||||
|     }//switch
 | ||||
| 
 | ||||
|     m_interval_pause = m_interval_1b * 0.1; | ||||
|     //m_interval_pause = m_interval_1b * 0.2;
 | ||||
| 
 | ||||
|     _set_receive_node_id(); | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| 
 | ||||
| void ModbusRTUTransceiver::port_reset() | ||||
| { | ||||
|     m_sci_port.set_configuration(m_sci_config); | ||||
|     _set_receive_node_id(); | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| bool ModbusRTUTransceiver::compare_state(MODBUSRTU::transceiver_state_machine_t  state_machine) | ||||
| { | ||||
|     return m_state_machine == state_machine; | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| void ModbusRTUTransceiver::execute() | ||||
| { | ||||
|     (this->*_execute)(); | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| 
 | ||||
| void ModbusRTUTransceiver::_execute_transceiver() | ||||
| { | ||||
|     if(m_sci_port.SciRegs.SCIRXST.bit.BRKDT) | ||||
|     { | ||||
|         _set_break_condition(); | ||||
|         //
 | ||||
|     }//if
 | ||||
|     //
 | ||||
|     (this->*_frame_transceiver)(); | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| void ModbusRTUTransceiver::_execute_break() | ||||
| { | ||||
|     //m_interval_current = m_interval.interval();
 | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| void ModbusRTUTransceiver::setRXBuffer(uint16_t *bufferStart, uint16_t *messageLen) | ||||
| { | ||||
|     m_rx_external_buffer = bufferStart; | ||||
|     m_rx_messaage_length = messageLen; | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| void ModbusRTUTransceiver::setTXBuffer(uint16_t *bufferStart, uint16_t *messageLen) | ||||
| { | ||||
|     m_tx_external_buffer = bufferStart; | ||||
|     m_tx_message_length = messageLen; | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| 
 | ||||
| // #pragma CODE_SECTION("ramfuncs");
 | ||||
| void ModbusRTUTransceiver::_set_receive_node_id() | ||||
| { | ||||
|     m_state_machine = MODBUSRTU::SCAN; | ||||
|     _frame_transceiver = &ModbusRTUTransceiver::_frame_receive_node_id; | ||||
|     _execute = &ModbusRTUTransceiver::_execute_transceiver; | ||||
|     (*_receiver_enable)(); | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| // #pragma CODE_SECTION("ramfuncs");
 | ||||
| void ModbusRTUTransceiver::_set_receive_function() | ||||
| { | ||||
|     m_state_machine = MODBUSRTU::RECEIVE; | ||||
|     _frame_transceiver = &ModbusRTUTransceiver::_frame_receive_function; | ||||
|     _execute = &ModbusRTUTransceiver::_execute_transceiver; | ||||
|     (*_receiver_enable)(); | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| // #pragma CODE_SECTION("ramfuncs");
 | ||||
| void ModbusRTUTransceiver::_set_receive_data() | ||||
| { | ||||
|     m_state_machine = MODBUSRTU::RECEIVE; | ||||
|     _frame_transceiver = &ModbusRTUTransceiver::_frame_receive_data; | ||||
|     _execute = &ModbusRTUTransceiver::_execute_transceiver; | ||||
|     (*_receiver_enable)(); | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| // #pragma CODE_SECTION("ramfuncs");
 | ||||
| void ModbusRTUTransceiver::_set_wait_response() | ||||
| { | ||||
|     m_state_machine = MODBUSRTU::WAIT_RESPONSE; | ||||
|     _frame_transceiver = &ModbusRTUTransceiver::_frame_wait_response; | ||||
|     _execute = &ModbusRTUTransceiver::_execute_transceiver; | ||||
|     (*_receiver_enable)(); | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| // #pragma CODE_SECTION("ramfuncs");
 | ||||
| void ModbusRTUTransceiver::_set_transmit_data() | ||||
| { | ||||
|     m_state_machine = MODBUSRTU::TRANSMIT; | ||||
|     _frame_transceiver = &ModbusRTUTransceiver::_frame_transmit_data; | ||||
|     _execute = &ModbusRTUTransceiver::_execute_transceiver; | ||||
|     (*_driver_enable)(); | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| // #pragma CODE_SECTION("ramfuncs");
 | ||||
| void ModbusRTUTransceiver::_set_break_condition() | ||||
| { | ||||
|     m_state_machine = MODBUSRTU::BREAK; | ||||
|     _frame_transceiver = &ModbusRTUTransceiver::_frame_break_condition; | ||||
|     _execute = &ModbusRTUTransceiver::_execute_break; | ||||
|     (*_receiver_enable)(); | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| // #pragma CODE_SECTION("ramfuncs");
 | ||||
| void ModbusRTUTransceiver::_frame_receive_node_id() | ||||
| { | ||||
|         if(m_sci_port.SciRegs.SCIRXST.bit.RXRDY) | ||||
|         { | ||||
|             m_aux_rx_buf = m_sci_port.SciRegs.SCIRXBUF.bit.RXDT; | ||||
| 
 | ||||
|             while(m_sci_port.SciRegs.SCIRXST.bit.RXRDY){} | ||||
| 
 | ||||
|             if((m_node_id == m_aux_rx_buf)||(MODBUSRTU_FUNCTION_BROADCAST == m_aux_rx_buf)) | ||||
|             { | ||||
|                 m_rx_buffer[0] = m_aux_rx_buf; | ||||
| 
 | ||||
|                 m_aux_rx_count = 1; | ||||
|                 m_interval_measure.start(); | ||||
|                 _set_receive_function(); | ||||
|                 //
 | ||||
|             }//if
 | ||||
|         } | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| // #pragma CODE_SECTION("ramfuncs");
 | ||||
| void ModbusRTUTransceiver::_frame_receive_function() | ||||
| { | ||||
|     if(m_sci_port.SciRegs.SCIRXST.bit.RXRDY) | ||||
|     { | ||||
|         m_aux_rx_buf = m_sci_port.SciRegs.SCIRXBUF.bit.RXDT; | ||||
| 
 | ||||
|         while(m_sci_port.SciRegs.SCIRXST.bit.RXRDY){} | ||||
| 
 | ||||
|         if(//(MODBUSRTU_FUNCTION_BROADCAST                        == m_aux_rx_buf)||
 | ||||
|                 (MODBUSRTU_FUNCTION_READ_COIL_STATUS            == m_aux_rx_buf)|| | ||||
|                 //(MODBUSRTU_FUNCTION_READ_INPUT_STATUS           == m_aux_rx_buf)||
 | ||||
|                 (MODBUSRTU_FUNCTION_READ_HOLDING_REGISTERS      == m_aux_rx_buf)|| | ||||
|                 //(MODBUSRTU_FUNCTION_READ_INPUT_REGISTERS        == m_aux_rx_buf)||
 | ||||
|                 (MODBUSRTU_FUNCTION_FORCE_SINGLE_COIL           == m_aux_rx_buf)|| | ||||
|                 (MODBUSRTU_FUNCTION_PRESET_SINGLE_REGISTER      == m_aux_rx_buf)|| | ||||
|                 (MODBUSRTU_FUNCTION_FORCE_MULTIPLE_COILS        == m_aux_rx_buf)|| | ||||
|                 (MODBUSRTU_FUNCTION_PRESET_MULTIPLE_REGISTERS   == m_aux_rx_buf)) | ||||
|         { | ||||
|             m_rx_buffer[1] = m_aux_rx_buf; | ||||
|             m_aux_rx_count = 2; | ||||
|             m_interval_measure.start(); | ||||
|             _set_receive_data(); | ||||
|             //
 | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             // wrong function, break receive
 | ||||
|             m_interval_measure.stop(); | ||||
|             _set_receive_node_id(); | ||||
|             //
 | ||||
|         }//if else
 | ||||
|         //
 | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         m_interval_current = m_interval_measure.interval(); | ||||
|         if(m_interval_current > m_interval_1b5) | ||||
|         { | ||||
|             // exceed time interval, break receive
 | ||||
|             m_interval_measure.stop(); | ||||
|             _set_receive_node_id(); | ||||
|             //
 | ||||
|         }//if
 | ||||
|         //
 | ||||
|     }//if else
 | ||||
|     //
 | ||||
| }//
 | ||||
| 
 | ||||
| // #pragma CODE_SECTION("ramfuncs");
 | ||||
| void ModbusRTUTransceiver::_frame_receive_data() | ||||
| { | ||||
|     if(m_sci_port.SciRegs.SCIRXST.bit.RXRDY) | ||||
|     { | ||||
|         m_aux_rx_buf = m_sci_port.SciRegs.SCIRXBUF.bit.RXDT; | ||||
| 
 | ||||
|         while(m_sci_port.SciRegs.SCIRXST.bit.RXRDY){} | ||||
| 
 | ||||
|         m_rx_buffer[m_aux_rx_count] = m_aux_rx_buf; | ||||
|         m_aux_rx_count++; | ||||
|         m_interval_measure.start(); | ||||
| 
 | ||||
|         if(m_aux_rx_count >= 256) | ||||
|         { | ||||
|             // exceed count, break receive
 | ||||
|             m_interval_measure.stop(); | ||||
|             _set_receive_node_id(); | ||||
|             //
 | ||||
|         }//if
 | ||||
|         //
 | ||||
|     } | ||||
|     else | ||||
|     { | ||||
| 
 | ||||
|         m_interval_current = m_interval_measure.interval(); | ||||
|         if(m_interval_current >= m_interval_1b5) | ||||
|         { | ||||
|             //
 | ||||
|             // count must be more then 4
 | ||||
|             if(m_aux_rx_count > 4) | ||||
|             { | ||||
|                 // stop receive, frame is ended
 | ||||
|                 // check message
 | ||||
|                 m_rx_count = m_aux_rx_count; | ||||
| 
 | ||||
|                 m_crc_calculate = m_crc.calculate(m_rx_buffer, m_rx_count - 2); | ||||
| 
 | ||||
|                 m_crc_rx_frame = (m_rx_buffer[m_rx_count - 1] << 8) | m_rx_buffer[m_rx_count - 2]; | ||||
| 
 | ||||
|                 m_crc_status =  m_crc_calculate == m_crc_rx_frame ? true : false; | ||||
| 
 | ||||
|                 if(m_crc_status) | ||||
|                 { | ||||
|                     m_destination = m_rx_external_buffer; | ||||
|                     m_source_start = m_rx_buffer; | ||||
|                     m_source_end = m_rx_buffer + m_rx_count - 1; | ||||
|                     m_copy_length = m_rx_count; | ||||
|                     *m_rx_messaage_length = m_rx_count; | ||||
|                     m_event = MODBUSRTU::RXREADY; | ||||
|                     //_frame_copy();
 | ||||
|                     _frame_copy_erase(); | ||||
|                     _set_wait_response(); | ||||
|                     //
 | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|                     m_interval_measure.stop(); | ||||
|                     _set_receive_node_id(); | ||||
|                     //
 | ||||
|                 }//if else
 | ||||
|                 //
 | ||||
|             }//
 | ||||
|             else | ||||
|             { | ||||
|                 m_interval_measure.stop(); | ||||
|                 _set_receive_node_id(); | ||||
|                 //
 | ||||
|             }// if else
 | ||||
|             //
 | ||||
|         }//if
 | ||||
|         //
 | ||||
|     }//if else
 | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| // #pragma CODE_SECTION("ramfuncs");
 | ||||
| void ModbusRTUTransceiver::_frame_wait_response() | ||||
| { | ||||
|     if(m_sci_port.SciRegs.SCIRXST.bit.RXRDY) | ||||
|     { | ||||
|         m_aux_rx_buf = m_sci_port.SciRegs.SCIRXBUF.bit.RXDT; | ||||
| 
 | ||||
|         while(m_sci_port.SciRegs.SCIRXST.bit.RXRDY){} | ||||
| 
 | ||||
|         // error protocol, reset message
 | ||||
|         m_interval_measure.stop(); | ||||
|         _set_receive_node_id(); | ||||
|         //
 | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         m_interval_current = m_interval_measure.interval(); | ||||
|         if(m_interval_current >= m_interval_3b5) | ||||
|         { | ||||
|             m_interval_measure.stop(); | ||||
|             _set_receive_node_id(); | ||||
|             //
 | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             if(*m_tx_message_length != 0) | ||||
|             { | ||||
|                 // copy external tx buffer
 | ||||
|                 m_tx_length = *m_tx_message_length; | ||||
|                 m_source_start = m_tx_external_buffer; | ||||
|                 m_source_end = m_tx_external_buffer + m_tx_length - 1; | ||||
|                 m_destination = m_tx_buffer; | ||||
|                 //_frame_copy_erase();
 | ||||
|                 _frame_copy(); | ||||
|                 *m_tx_message_length = 0; | ||||
|                 m_tx_count = 0; | ||||
|                 _set_transmit_data(); | ||||
|                 _frame_transmit_data(); | ||||
|                 m_interval_measure.stop(); | ||||
|                 //
 | ||||
|             }//if
 | ||||
|             //
 | ||||
|         }//if else
 | ||||
|         //
 | ||||
|     }//if else
 | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| // #pragma CODE_SECTION("ramfuncs");
 | ||||
| void ModbusRTUTransceiver::_frame_transmit_data() | ||||
| { | ||||
|     if(m_sci_port.SciRegs.SCICTL2.bit.TXRDY & m_sci_port.SciRegs.SCICTL2.bit.TXEMPTY) | ||||
|     { | ||||
|         // data was transmitted
 | ||||
|         if(m_tx_count >= m_tx_length) | ||||
|         { | ||||
|             // all message was transmitted
 | ||||
|             // break transmit mode, go to the receive mode
 | ||||
|             _set_receive_node_id(); | ||||
|             //
 | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             m_sci_port.SciRegs.SCITXBUF = m_tx_buffer[m_tx_count]; | ||||
| 
 | ||||
|             while(m_sci_port.SciRegs.SCICTL2.bit.TXEMPTY == 1){} | ||||
| 
 | ||||
|             m_tx_count++; | ||||
|             //
 | ||||
|         }//if else
 | ||||
|         //
 | ||||
|     }// if
 | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| // #pragma CODE_SECTION("ramfuncs");
 | ||||
| void ModbusRTUTransceiver::_frame_break_condition() | ||||
| { | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| // #pragma CODE_SECTION("ramfuncs");
 | ||||
| inline void ModbusRTUTransceiver::_frame_copy() | ||||
| { | ||||
|     while(m_source_start <= m_source_end) | ||||
|     { | ||||
|         *m_destination++ = *m_source_start++; | ||||
|         //
 | ||||
|     }//while
 | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| // #pragma CODE_SECTION("ramfuncs");
 | ||||
| inline void ModbusRTUTransceiver::_frame_copy_erase() | ||||
| { | ||||
|     while(m_source_start <= m_source_end) | ||||
|     { | ||||
|         *m_destination++ = *m_source_start; | ||||
|         *m_source_start++ = 0; | ||||
|         //
 | ||||
|     }//while
 | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| // #pragma CODE_SECTION("ramfuncs");
 | ||||
| void ModbusRTUTransceiver::_frame_copy(uint16_t *source, uint16_t length, uint16_t *destination) | ||||
| { | ||||
|     m_destination = destination; | ||||
|     m_source_start = source; | ||||
|     m_source_end = destination + length - 1; | ||||
|     m_copy_length = length; | ||||
| 
 | ||||
|     while(m_source_start <= m_source_end) | ||||
|     { | ||||
|         *m_destination++ = *m_source_start++; | ||||
|         //
 | ||||
|     }//while
 | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| 
 | ||||
| } /* namespace MODBUSRTU */ | ||||
| @ -0,0 +1,125 @@ | ||||
| /*
 | ||||
|  * ModbusRTUTransceiver.h | ||||
|  * | ||||
|  *      Author: Aleksey Gerasimenko | ||||
|  *      gerasimenko.aleksey.n@gmail.com | ||||
|  */ | ||||
| 
 | ||||
| #include <math.h> | ||||
| #include <stdint.h> | ||||
| 
 | ||||
| 
 | ||||
| #include <DSP28x_Project.h> | ||||
| 
 | ||||
| #include "DSP28335/GPIO.h" | ||||
| #include "DSP28335/CPUTimers.h" | ||||
| #include "DSP28335/MeasureTimeInterval.h" | ||||
| #include "DSP28335/SCIA.h" | ||||
| #include "DSP28335/SCIB.h" | ||||
| #include "DSP28335/SCIBase.h" | ||||
| #include "DSP28335/SCIC.h" | ||||
| 
 | ||||
| #include "MODBUSRTU/ModbusRTUTransceiverBase.h" | ||||
| #include "MODBUSRTU/ModbusRTUCRC.h" | ||||
| #include "MODBUSRTU/ModbusRTUDefines.h" | ||||
| #include "MODBUSRTU/ModbusRTUVariant.h" | ||||
| 
 | ||||
| 
 | ||||
| #ifndef MODBUSRTU_MODBUSRTUTRANSCEIVER_H_ | ||||
| #define MODBUSRTU_MODBUSRTUTRANSCEIVER_H_ | ||||
| 
 | ||||
| namespace MODBUSRTU | ||||
| { | ||||
| 
 | ||||
| 
 | ||||
| class ModbusRTUTransceiver | ||||
| { | ||||
| private: | ||||
|     DSP28335::SCIBase&          m_sci_port; | ||||
|     DSP28335::SCIConfiguration  m_sci_config; | ||||
|     uint16_t                    m_node_id; | ||||
| private: | ||||
|     MODBUSRTU::transceiver_state_machine_t  m_state_machine; | ||||
|     MODBUSRTU::transceiver_event_t          m_event; | ||||
| private: | ||||
|     DSP28335::MeasureTimeInterval&    m_interval_measure; | ||||
|     Uint32 m_interval_pause; | ||||
|     Uint32 m_interval_b5; | ||||
|     Uint32 m_interval_b75; | ||||
|     Uint32 m_interval_1b; | ||||
|     Uint32 m_interval_1b25; | ||||
|     Uint32 m_interval_1b5; | ||||
|     Uint32 m_interval_1b75; | ||||
|     Uint32 m_interval_3b5; | ||||
|     Uint32 m_interval_freeze; | ||||
|     Uint32 m_interval_current; | ||||
| private: | ||||
|     uint16_t m_rx_buffer[256]; | ||||
|     uint16_t m_tx_buffer[256]; | ||||
|     uint16_t m_rx_count; | ||||
|     uint16_t m_tx_count; | ||||
|     uint16_t m_tx_length; | ||||
|     //
 | ||||
| private: | ||||
|     uint16_t     m_aux_rx_buf; | ||||
|     uint16_t     m_aux_rx_count; | ||||
|     uint16_t     m_aux_tx_buf; | ||||
|     uint16_t     m_aux_tx_count; | ||||
| private: | ||||
|     bool            m_crc_status; | ||||
|     MODBUSRTU::ModbusRTUCRC& m_crc; | ||||
|     uint16_t        m_crc_calculate; | ||||
|     uint16_t        m_crc_rx_frame; | ||||
|     uint16_t        m_crc_tx_frame; | ||||
| private: | ||||
|     uint16_t *m_rx_external_buffer; | ||||
|     uint16_t *m_tx_external_buffer; | ||||
|     uint16_t *m_rx_messaage_length; | ||||
|     uint16_t *m_tx_message_length; | ||||
| private: | ||||
|     uint16_t *m_destination; | ||||
|     uint16_t *m_source_start; | ||||
|     uint16_t *m_source_end; | ||||
|     uint16_t m_copy_length; | ||||
| public: | ||||
|     ModbusRTUTransceiver(DSP28335::SCIBase& sciport, DSP28335::MeasureTimeInterval& interval_measure, MODBUSRTU::ModbusRTUCRC& crc); | ||||
|     void setup(ModbusRTUTransceiverSetup& setup); | ||||
|     void configure(ModbusRTUTransceiverConfiguration& config); | ||||
|     void port_reset(); | ||||
|     bool compare_state(MODBUSRTU::transceiver_state_machine_t  state_machine); | ||||
| public: | ||||
|     void execute(); | ||||
| public: | ||||
|     void setRXBuffer(uint16_t *bufferStart, uint16_t *messageLen); | ||||
|     void setTXBuffer(uint16_t *bufferStart, uint16_t *messageLen); | ||||
| private: | ||||
|     void _set_receive_node_id(); | ||||
|     void _set_receive_function(); | ||||
|     void _set_receive_data(); | ||||
|     void _set_wait_response(); | ||||
|     void _set_transmit_data(); | ||||
|     void _set_break_condition(); | ||||
| private: | ||||
|     void (ModbusRTUTransceiver::*_execute)(); | ||||
|     void (ModbusRTUTransceiver::*_frame_transceiver)(); | ||||
|     void _execute_transceiver(); | ||||
|     void _execute_break(); | ||||
|     void _frame_receive_node_id(); | ||||
|     void _frame_receive_function(); | ||||
|     void _frame_receive_data(); | ||||
|     void _frame_wait_response(); | ||||
|     void _frame_transmit_data(); | ||||
|     void _frame_break_condition(); | ||||
| private: | ||||
|     inline void _frame_copy(); | ||||
|     inline void _frame_copy_erase(); | ||||
|     void _frame_copy(uint16_t *source, uint16_t length, uint16_t *destination); | ||||
| private: | ||||
|     void (*_re_de_setup)(); | ||||
|     void (*_driver_enable)(); | ||||
|     void (*_receiver_enable)(); | ||||
| }; | ||||
| 
 | ||||
| } /* namespace MODBUSRTU */ | ||||
| 
 | ||||
| #endif /* MODBUSRTU_MODBUSRTUTRANSCEIVER_H_ */ | ||||
| @ -0,0 +1,23 @@ | ||||
| /*
 | ||||
|  * ModbusRTUTransceiverBase.cpp | ||||
|  * | ||||
|  *      Author: Aleksey Gerasimenko | ||||
|  *      gerasimenko.aleksey.n@gmail.com | ||||
|  */ | ||||
| 
 | ||||
| #include "MODBUSRTU/ModbusRTUTransceiverBase.h" | ||||
| 
 | ||||
| namespace MODBUSRTU | ||||
| { | ||||
| //CONSTRUCTOR
 | ||||
| ModbusRTUTransceiverBase::ModbusRTUTransceiverBase(DSP28335::SCIBase& sciport, DSP28335::CPUTimers& cputimer, MODBUSRTU::ModbusRTUCRC& crc): | ||||
|         m_sci_port(sciport), | ||||
|         m_sci_config(), | ||||
|         m_node_id(0), | ||||
|         //
 | ||||
|         m_state_machine(MODBUSRTU::SCAN), | ||||
|         m_event(MODBUSRTU::ENTRY) | ||||
|         //
 | ||||
| {}//CONSTRUCTOR
 | ||||
| 
 | ||||
| } /* namespace MODBUSRTU */ | ||||
| @ -0,0 +1,83 @@ | ||||
| /*
 | ||||
|  * ModbusRTUTransceiverBase.h | ||||
|  * | ||||
|  *      Author: Aleksey Gerasimenko | ||||
|  *      gerasimenko.aleksey.n@gmail.com | ||||
|  */ | ||||
| 
 | ||||
| #include <math.h> | ||||
| #include <stdint.h> | ||||
| 
 | ||||
| #include "F28335/DSP28x_Project.h" | ||||
| 
 | ||||
| #include "DSP28335/GPIO.h" | ||||
| #include "DSP28335/CPUTimers.h" | ||||
| #include "DSP28335/SCIA.h" | ||||
| #include "DSP28335/SCIB.h" | ||||
| #include "DSP28335/SCIBase.h" | ||||
| #include "DSP28335/SCIC.h" | ||||
| 
 | ||||
| #include "MODBUSRTU/ModbusRTUCRC.h" | ||||
| #include "MODBUSRTU/ModbusRTUDefines.h" | ||||
| #include "MODBUSRTU/ModbusRTUVariant.h" | ||||
| 
 | ||||
| #ifndef MODBUSRTU_MODBUSRTUTRANSCEIVERBASE_H_ | ||||
| #define MODBUSRTU_MODBUSRTUTRANSCEIVERBASE_H_ | ||||
| 
 | ||||
| namespace MODBUSRTU | ||||
| { | ||||
| 
 | ||||
| 
 | ||||
| struct ModbusRTUTransceiverSetup | ||||
| { | ||||
|     pGPIO_FUNCTION gpio_re_de_setup; | ||||
|     pGPIO_FUNCTION gpio_driver_enable; | ||||
|     pGPIO_FUNCTION gpio_receiver_enable; | ||||
|     ModbusRTUTransceiverSetup(): | ||||
|         gpio_re_de_setup(0), | ||||
|         gpio_driver_enable(0), | ||||
|         gpio_receiver_enable(0) | ||||
|     { | ||||
|         //gpio_re_de_setup = &DSP28335::GPIO::gpio_scib_re_de_setup;
 | ||||
|         //gpio_driver_enable = &DSP28335::GPIO::gpio_scib_re_de_set;
 | ||||
|         //gpio_receiver_enable = &DSP28335::GPIO::gpio_scib_re_de_clear;
 | ||||
|     } | ||||
| };//ModbusRTUTransceiverSetup
 | ||||
| 
 | ||||
| 
 | ||||
| struct ModbusRTUTransceiverConfiguration | ||||
| { | ||||
|     uint16_t                        node_id; | ||||
|     DSP28335::SCIConfiguration      config; | ||||
|     ModbusRTUTransceiverConfiguration(): | ||||
|         node_id(0), | ||||
|         config() | ||||
|     { | ||||
|         //config.baudrate = SCIRS485_BAUDRATE_DEFAULT;
 | ||||
|         //config.parity = SCIRS485_PARITY_DEFAULT;
 | ||||
|         //config.stopbits = SCIRS485_STOPBITS_DEFAULT;
 | ||||
|         //config.lenght = SCIRS485_LENGHT_DEFAULT;
 | ||||
|     } | ||||
| };//ModbusRTUTransceiverConfiguration
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| class ModbusRTUTransceiverBase | ||||
| { | ||||
| protected: | ||||
|     DSP28335::SCIBase&          m_sci_port; | ||||
|     DSP28335::SCIConfiguration  m_sci_config; | ||||
|     uint16_t                    m_node_id; | ||||
| protected: | ||||
|     MODBUSRTU::transceiver_state_machine_t  m_state_machine; | ||||
|     MODBUSRTU::transceiver_event_t          m_event; | ||||
| 
 | ||||
| public: | ||||
|     ModbusRTUTransceiverBase(DSP28335::SCIBase& sciport, DSP28335::CPUTimers& cputimer, MODBUSRTU::ModbusRTUCRC& crc); | ||||
| }; | ||||
| 
 | ||||
| } /* namespace MODBUSRTU */ | ||||
| 
 | ||||
| #endif /* MODBUSRTU_MODBUSRTUTRANSCEIVERBASE_H_ */ | ||||
| @ -0,0 +1,110 @@ | ||||
| /*
 | ||||
|  * ModbusRTUVariant.cpp | ||||
|  * | ||||
|  *      Author: Aleksey Gerasimenko | ||||
|  *      gerasimenko.aleksey.n@gmail.com | ||||
|  */ | ||||
| 
 | ||||
| #include "MODBUSRTU/ModbusRTUVariant.h" | ||||
| 
 | ||||
| namespace MODBUSRTU | ||||
| { | ||||
| //CONSTRUCTOR
 | ||||
| ModbusRTUVariant::ModbusRTUVariant(): | ||||
|         t(MODBUSRTU::VARIANT_UINT32), | ||||
|         u32((uint32_t)0) | ||||
| {}//CONSTRUCTOR
 | ||||
| 
 | ||||
| 
 | ||||
| MODBUSRTU::modbus_variant_type_t ModbusRTUVariant::get_type() const | ||||
| { | ||||
|     return t; | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| 
 | ||||
| void ModbusRTUVariant::set_float(float value) | ||||
| { | ||||
|     f = value; | ||||
|     t = MODBUSRTU::VARIANT_FLOAT; | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| 
 | ||||
| void ModbusRTUVariant::set_int16(int16_t value) | ||||
| { | ||||
|     i16 = value; | ||||
|     t = MODBUSRTU::VARIANT_INT16; | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| void ModbusRTUVariant::set_int32(int32_t value) | ||||
| { | ||||
|     i32 = value; | ||||
|     t = MODBUSRTU::VARIANT_INT32; | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| void ModbusRTUVariant::set_uint16(uint16_t value) | ||||
| { | ||||
|     u16 = value; | ||||
|     t = MODBUSRTU::VARIANT_UINT16; | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| void ModbusRTUVariant::set_uint32(uint32_t value) | ||||
| { | ||||
|     u32 = value; | ||||
|     t = MODBUSRTU::VARIANT_UINT32; | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| void ModbusRTUVariant::set_bool(bool value) | ||||
| { | ||||
|     b = value; | ||||
|     t = MODBUSRTU::VARIANT_BOOL; | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| float ModbusRTUVariant::get_float() const | ||||
| { | ||||
|     return f; | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| 
 | ||||
| int16_t ModbusRTUVariant::get_int16() const | ||||
| { | ||||
|     return i16; | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| int32_t  ModbusRTUVariant::get_int32() const | ||||
| { | ||||
|     return i32; | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| uint16_t ModbusRTUVariant::get_uint16() const | ||||
| { | ||||
|     return u16; | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| uint32_t ModbusRTUVariant::get_uint32() const | ||||
| { | ||||
|     return u32; | ||||
|     //
 | ||||
| }//
 | ||||
| //
 | ||||
| 
 | ||||
| 
 | ||||
| bool ModbusRTUVariant::get_bool() const | ||||
| { | ||||
|     return b; | ||||
| }//
 | ||||
| //
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| } /* namespace MODBUSRTU */ | ||||
| @ -0,0 +1,58 @@ | ||||
| /*
 | ||||
|  * ModbusRTUVariant.h | ||||
|  * | ||||
|  *      Author: Aleksey Gerasimenko | ||||
|  *      gerasimenko.aleksey.n@gmail.com | ||||
|  */ | ||||
| 
 | ||||
| #include <math.h> | ||||
| #include <stdint.h> | ||||
| 
 | ||||
| #include "RUDRIVEFRAMEWORK/DataTypesDefinitions.h" | ||||
| 
 | ||||
| 
 | ||||
| #ifndef MODBUSRTU_MODBUSRTUVARIANT_H_ | ||||
| #define MODBUSRTU_MODBUSRTUVARIANT_H_ | ||||
| 
 | ||||
| namespace MODBUSRTU | ||||
| { | ||||
| 
 | ||||
| 
 | ||||
| enum modbus_variant_type_t {VARIANT_FLOAT, VARIANT_INT16, VARIANT_INT32, VARIANT_UINT16, VARIANT_UINT32, VARIANT_BOOL}; | ||||
| 
 | ||||
| class ModbusRTUVariant | ||||
| { | ||||
| private: | ||||
|     union | ||||
|         { | ||||
|             float       f; | ||||
|             int16_t     i16; | ||||
|             int32_t     i32; | ||||
|             uint16_t    u16; | ||||
|             uint32_t    u32; | ||||
|             bool        b; | ||||
|         }; | ||||
|     modbus_variant_type_t t; | ||||
| public: | ||||
|     ModbusRTUVariant(); | ||||
|     modbus_variant_type_t get_type() const; | ||||
|     //setters
 | ||||
|     void set_float  (float    v); | ||||
|     void set_int16  (int16_t  v); | ||||
|     void set_int32  (int32_t  v); | ||||
|     void set_uint16 (uint16_t v); | ||||
|     void set_uint32 (uint32_t v); | ||||
|     void set_bool   (bool     v); | ||||
|     //getters
 | ||||
|     float    get_float() const; | ||||
|     int16_t  get_int16() const; | ||||
|     int32_t  get_int32() const; | ||||
|     uint16_t get_uint16() const; | ||||
|     uint32_t get_uint32() const; | ||||
|     bool     get_bool() const; | ||||
|     //
 | ||||
| }; | ||||
| 
 | ||||
| } /* namespace MODBUSRTU */ | ||||
| 
 | ||||
| #endif /* MODBUSRTU_MODBUSRTUVARIANT_H_ */ | ||||
| @ -0,0 +1,43 @@ | ||||
| /*
 | ||||
|  * 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 */ | ||||
| @ -0,0 +1,59 @@ | ||||
| /*
 | ||||
|  * 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_ */ | ||||
| @ -0,0 +1,50 @@ | ||||
| /*
 | ||||
|  * 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 */ | ||||
| @ -0,0 +1,79 @@ | ||||
| /*
 | ||||
|  * 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_ */ | ||||
| @ -0,0 +1,172 @@ | ||||
| /*
 | ||||
|  * 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 */ | ||||
| @ -0,0 +1,150 @@ | ||||
| /*
 | ||||
|  * 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_ */ | ||||
| @ -0,0 +1,46 @@ | ||||
| /*
 | ||||
|  * 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 */ | ||||
| @ -0,0 +1,63 @@ | ||||
| /*
 | ||||
|  * 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
												
											
										
									
								| @ -0,0 +1,268 @@ | ||||
| /*
 | ||||
|  * 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_ */ | ||||
| @ -0,0 +1,57 @@ | ||||
| /*
 | ||||
|  * 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 */ | ||||
| @ -0,0 +1,51 @@ | ||||
| /*
 | ||||
|  * 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_ */ | ||||
| @ -0,0 +1,54 @@ | ||||
| /*
 | ||||
|  * 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 */ | ||||
| @ -0,0 +1,51 @@ | ||||
| /*
 | ||||
|  * 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_ */ | ||||
| @ -0,0 +1,492 @@ | ||||
| /*
 | ||||
|  * 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 */ | ||||
| @ -0,0 +1,133 @@ | ||||
| /*
 | ||||
|  * 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_ */ | ||||
| @ -0,0 +1,37 @@ | ||||
| /*
 | ||||
|  * 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 */ | ||||
Some files were not shown because too many files have changed in this diff Show More
					Loading…
					
					
				
		Reference in New Issue