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.
80 lines
2.0 KiB
C++
80 lines
2.0 KiB
C++
/*
|
|
* MeasureTimePeriod.cpp
|
|
*
|
|
* Author: Aleksey Gerasimenko
|
|
* gerasimenko.aleksey.n@gmail.com
|
|
*/
|
|
|
|
#include "SYSCTRL/MeasureTimePeriod.h"
|
|
|
|
namespace SYSCTRL
|
|
{
|
|
|
|
//Constructor
|
|
MeasureTimePeriod::MeasureTimePeriod(CPUTIMER_REGS& CPUTimer, Uint32 magic):
|
|
m_CPUTimer(CPUTimer),
|
|
m_timer_result((Uint32)0),
|
|
m_timer_result_previous((Uint32)0),
|
|
m_magic_number((Uint32)magic),
|
|
m_period((Uint32)0),
|
|
m_tim((Uint32)0),
|
|
m_counter((Uint32)0),
|
|
_execute(&SYSCTRL::MeasureTimePeriod::_execute_start)
|
|
//
|
|
{}//end Constructor
|
|
|
|
//#pragma CODE_SECTION(".TI.ramfunc");
|
|
#pragma CODE_SECTION("ramfuncs");
|
|
void MeasureTimePeriod::execute(void)
|
|
{
|
|
(this->*_execute)();
|
|
//
|
|
}//end
|
|
//
|
|
//#pragma CODE_SECTION(".TI.ramfunc");
|
|
#pragma CODE_SECTION("ramfuncs");
|
|
void MeasureTimePeriod::reset(void)
|
|
{
|
|
m_CPUTimer.TCR.bit.TSS = 1; // Stop CPU Timer
|
|
m_CPUTimer.PRD.all = (Uint32)0xFFFFFFFF;
|
|
m_CPUTimer.TCR.bit.TRB = 1; // Reload CPU Timer
|
|
//
|
|
_execute = &SYSCTRL::MeasureTimePeriod::_execute_start;
|
|
//
|
|
}//end
|
|
//
|
|
//#pragma CODE_SECTION(".TI.ramfunc");
|
|
#pragma CODE_SECTION("ramfuncs");
|
|
void MeasureTimePeriod::_execute_start(void)
|
|
{
|
|
_execute = &SYSCTRL::MeasureTimePeriod::_execute_scan;
|
|
//
|
|
m_CPUTimer.TCR.bit.TSS = 1; // Stop CPU Timer
|
|
m_CPUTimer.TCR.bit.TRB = 1; // Reload CPU Timer
|
|
m_CPUTimer.TCR.bit.TSS = 0; // Start CPU Timer
|
|
//
|
|
|
|
//
|
|
}//end
|
|
//
|
|
//#pragma CODE_SECTION(".TI.ramfunc");
|
|
#pragma CODE_SECTION("ramfuncs");
|
|
void MeasureTimePeriod::_execute_scan(void)
|
|
{
|
|
m_CPUTimer.TCR.bit.TSS = 1; // Stop CPU Timer
|
|
//
|
|
m_timer_result_previous = (Uint32)m_timer_result;
|
|
m_period = (Uint32)m_CPUTimer.PRD.all;
|
|
m_tim = (Uint32)m_CPUTimer.TIM.all;
|
|
m_timer_result = (Uint32)((Uint32)m_CPUTimer.PRD.all - (Uint32)m_CPUTimer.TIM.all - (Uint32)m_magic_number);
|
|
//
|
|
m_CPUTimer.TCR.bit.TRB = 1; // Reload CPU Timer
|
|
m_CPUTimer.TCR.bit.TSS = 0; // Start CPU Timer
|
|
//
|
|
m_counter++;
|
|
//
|
|
}//end
|
|
//
|
|
|
|
} /* namespace SYSCTRL */
|