Pre-Release v0.5 #54
@@ -30,10 +30,16 @@
 | 
				
			|||||||
#include <stdint.h>
 | 
					#include <stdint.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * @brief Initialize/Reset the main cycle counter to 0.
 | 
					 * @brief Initialize the main cycle counter and reset to 0. This also enables the core cycle counter
 | 
				
			||||||
 * This function can be called multiple times.
 | 
					 * This function can be called multiple times.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
void main_cycle_counter_init(void);
 | 
					void main_and_core_cycle_counter_init(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @brief Reset the main cycle counter.
 | 
				
			||||||
 | 
					 * @note This does not reset the core cycle counter
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					void main_cycle_counter_reset(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * @brief Increment the main cycle counter by 1
 | 
					 * @brief Increment the main cycle counter by 1
 | 
				
			||||||
@@ -46,6 +52,18 @@ void main_cycle_counter_inc(void);
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
uint64_t main_cycle_counter_get(void);
 | 
					uint64_t main_cycle_counter_get(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @brief Reset the core cycle counter to 0
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					void core_cycle_counter_reset(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @brief Get the current value of the core cycle counter
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * @return uint32_t Counter value
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					uint32_t core_cycle_counter_get(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif /* __MAIN_CYCLE_COUNTER_H__ */
 | 
					#endif /* __MAIN_CYCLE_COUNTER_H__ */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/** @} */
 | 
					/** @} */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -25,6 +25,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include <reflow-controller/main-cycle-counter.h>
 | 
					#include <reflow-controller/main-cycle-counter.h>
 | 
				
			||||||
#include <helper-macros/helper-macros.h>
 | 
					#include <helper-macros/helper-macros.h>
 | 
				
			||||||
 | 
					#include <stm32/stm32f4xx.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * @brief Variable storing the main cycle counter.
 | 
					 * @brief Variable storing the main cycle counter.
 | 
				
			||||||
@@ -33,7 +34,22 @@
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
static uint64_t IN_SECTION(.ccm.bss) main_cycle_counter;
 | 
					static uint64_t IN_SECTION(.ccm.bss) main_cycle_counter;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void main_cycle_counter_init(void)
 | 
					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;
 | 
						main_cycle_counter = 0ULL;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -48,4 +64,14 @@ uint64_t main_cycle_counter_get(void)
 | 
				
			|||||||
	return main_cycle_counter;
 | 
						return main_cycle_counter;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void core_cycle_counter_reset(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						DWT->CYCCNT = 0UL;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uint32_t core_cycle_counter_get(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return DWT->CYCCNT;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/** @} */
 | 
					/** @} */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -268,8 +268,8 @@ int main(void)
 | 
				
			|||||||
	/** - Print motd to shell */
 | 
						/** - Print motd to shell */
 | 
				
			||||||
	shell_print_motd(shell_handle);
 | 
						shell_print_motd(shell_handle);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/** - Set the main cycle counter to 0 */
 | 
						/** - Set the main cycle counter to 0 and activate the core cycle counter if available */
 | 
				
			||||||
	main_cycle_counter_init();
 | 
						main_and_core_cycle_counter_init();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/** - Do a loop over the following */
 | 
						/** - Do a loop over the following */
 | 
				
			||||||
	while (1) {
 | 
						while (1) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -892,7 +892,7 @@ shellmatta_retCode_t shell_cmd_cycle_count(const shellmatta_handle_t handle, con
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	counter = main_cycle_counter_get();
 | 
						counter = main_cycle_counter_get();
 | 
				
			||||||
	core_cycle_count = DWT->CYCCNT;
 | 
						core_cycle_count = core_cycle_counter_get();
 | 
				
			||||||
	if (hex) {
 | 
						if (hex) {
 | 
				
			||||||
		shellmatta_printf(handle, "Main loop: 0x%016"PRIX64"\r\n", counter);
 | 
							shellmatta_printf(handle, "Main loop: 0x%016"PRIX64"\r\n", counter);
 | 
				
			||||||
		shellmatta_printf(handle, "CPU cycles: 0x%08"PRIX32"\r\n", core_cycle_count);
 | 
							shellmatta_printf(handle, "CPU cycles: 0x%08"PRIX32"\r\n", core_cycle_count);
 | 
				
			||||||
@@ -901,8 +901,8 @@ shellmatta_retCode_t shell_cmd_cycle_count(const shellmatta_handle_t handle, con
 | 
				
			|||||||
		shellmatta_printf(handle, "CPU cycles: %"PRIu32"\r\n", core_cycle_count);
 | 
							shellmatta_printf(handle, "CPU cycles: %"PRIu32"\r\n", core_cycle_count);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (clear) {
 | 
						if (clear) {
 | 
				
			||||||
		main_cycle_counter_init();
 | 
							main_cycle_counter_reset();
 | 
				
			||||||
		DWT->CYCCNT = 0UL;
 | 
							core_cycle_counter_reset();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return SHELLMATTA_OK;
 | 
						return SHELLMATTA_OK;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user