49 lines
1.7 KiB
C++
49 lines
1.7 KiB
C++
|
#include <CortexMMCUInstrumentation.hpp>
|
||
|
#include <touchgfx/hal/HAL.hpp>
|
||
|
|
||
|
namespace touchgfx
|
||
|
{
|
||
|
void CortexMMCUInstrumentation::init()
|
||
|
{
|
||
|
// See: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0337e/CEGHJDCF.html
|
||
|
//
|
||
|
// [24] Read/write TRCENA This bit must be set to 1 to enable use of the trace and debug blocks:
|
||
|
// Data Watchpoint and Trace (DWT)
|
||
|
// Instrumentation Trace Macrocell (ITM)
|
||
|
// Embedded Trace Macrocell (ETM)
|
||
|
// Trace Port Interface Unit (TPIU).
|
||
|
// This enables control of power usage unless tracing is required. The application can enable this, for ITM use, or use by a debugger.
|
||
|
|
||
|
// Enable Debug Exception and Monitor Control Register
|
||
|
*((volatile unsigned int*)0xE000EDFC) |= 0x01000000;
|
||
|
// Enable Lock Access Register
|
||
|
*((volatile unsigned int*)0xE0001FB0) |= 0xC5ACCE55;
|
||
|
// Enable Data Watchpoint and Trace Control Register
|
||
|
*((volatile unsigned int*)0xE0001000) |= 1;
|
||
|
}
|
||
|
|
||
|
//Board specific clockfrequency
|
||
|
unsigned int CortexMMCUInstrumentation::getElapsedUS(unsigned int start, unsigned int now, unsigned int clockfrequency)
|
||
|
{
|
||
|
return ((now - start) + (clockfrequency / 2)) / clockfrequency;
|
||
|
}
|
||
|
|
||
|
unsigned int CortexMMCUInstrumentation::getCPUCycles()
|
||
|
{
|
||
|
return *((volatile unsigned int*)0xE0001004);
|
||
|
}
|
||
|
|
||
|
void CortexMMCUInstrumentation::setMCUActive(bool active)
|
||
|
{
|
||
|
if (active) //idle task sched out
|
||
|
{
|
||
|
uint32_t cc_temp = getCPUCycles() - cc_in;
|
||
|
cc_consumed += cc_temp;
|
||
|
}
|
||
|
else //idle task sched in
|
||
|
{
|
||
|
cc_in = getCPUCycles();
|
||
|
}
|
||
|
}
|
||
|
}
|