mirror of https://github.com/ArduPilot/ardupilot
46 lines
948 B
C
46 lines
948 B
C
#ifndef _STOPWATCH_H
|
|
#define _STOPWATCH_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
extern uint32_t us_ticks;
|
|
|
|
|
|
#define DEMCR_TRCENA 0x01000000
|
|
|
|
/* Core Debug registers */
|
|
#define DEMCR (*((volatile uint32_t *)0xE000EDFC))
|
|
|
|
#define DWT_CTRL (*(volatile uint32_t *)0xe0001000)
|
|
#define CYCCNTENA (1<<0)
|
|
#define DWT_CYCCNT ((volatile uint32_t *)0xE0001004)
|
|
#define CPU_CYCLES *DWT_CYCCNT
|
|
|
|
void stopwatch_init(void);
|
|
void stopwatch_delay_us(uint32_t us);
|
|
|
|
static inline void stopwatch_reset(void)
|
|
{
|
|
/* enable DWT access */
|
|
DEMCR |= DEMCR_TRCENA;
|
|
*DWT_CYCCNT = 0;
|
|
/* enable the CPU cycle counter */
|
|
DWT_CTRL |= CYCCNTENA;
|
|
}
|
|
|
|
static inline uint32_t stopwatch_getticks()
|
|
{
|
|
return CPU_CYCLES;
|
|
}
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif
|
|
/*----------------------------------------------------------------------------
|
|
* end of file
|
|
*---------------------------------------------------------------------------*/
|