You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
2.1 KiB
C++
87 lines
2.1 KiB
C++
4 weeks ago
|
/*
|
||
|
* 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 */
|