78 lines
1.9 KiB
C
78 lines
1.9 KiB
C
/* Reflow Oven Controller
|
|
*
|
|
* Copyright (C) 2020 Mario Hüttel <mario.huettel@gmx.net>
|
|
*
|
|
* This file is part of the Reflow Oven Controller Project.
|
|
*
|
|
* The reflow oven controller is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
* published by the Free Software Foundation.
|
|
*
|
|
* The Reflow Oven Control Firmware is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with the reflow oven controller project.
|
|
* If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
/**
|
|
* @addtogroup main-cycle-counter
|
|
* @{
|
|
*/
|
|
|
|
#include <reflow-controller/main-cycle-counter.h>
|
|
#include <helper-macros/helper-macros.h>
|
|
#include <stm32/stm32f4xx.h>
|
|
|
|
/**
|
|
* @brief Variable storing the main cycle counter.
|
|
* @note This variable should not be accessed directly.
|
|
* Use the main_cycle_counter_get() or main_cycle_counter_inc() functions.
|
|
*/
|
|
static uint64_t IN_SECTION(.ccm.bss) main_cycle_counter;
|
|
|
|
void main_and_core_cycle_counter_init(void)
|
|
{
|
|
CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
|
|
|
|
/* Enable the core cycle counter if available on current processor */
|
|
if (!(DWT->CTRL & DWT_CTRL_NOCYCCNT_Msk)) {
|
|
/* Cycle counter is available. Enable */
|
|
DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;
|
|
}
|
|
|
|
/* Reset the counters to 0 */
|
|
main_cycle_counter_reset();
|
|
core_cycle_counter_reset();
|
|
}
|
|
|
|
void main_cycle_counter_reset(void)
|
|
{
|
|
main_cycle_counter = 0ULL;
|
|
}
|
|
|
|
void main_cycle_counter_inc(void)
|
|
{
|
|
main_cycle_counter++;
|
|
}
|
|
|
|
uint64_t main_cycle_counter_get(void)
|
|
{
|
|
return main_cycle_counter;
|
|
}
|
|
|
|
void core_cycle_counter_reset(void)
|
|
{
|
|
DWT->CYCCNT = 0UL;
|
|
}
|
|
|
|
uint32_t core_cycle_counter_get(void)
|
|
{
|
|
return DWT->CYCCNT;
|
|
}
|
|
|
|
/** @} */
|