diff options
Diffstat (limited to 'cc3200/hal')
| -rw-r--r-- | cc3200/hal/cc3200_hal.c | 14 | ||||
| -rw-r--r-- | cc3200/hal/cc3200_hal.h | 6 |
2 files changed, 19 insertions, 1 deletions
diff --git a/cc3200/hal/cc3200_hal.c b/cc3200/hal/cc3200_hal.c index 37026db14..5c0e9c30f 100644 --- a/cc3200/hal/cc3200_hal.c +++ b/cc3200/hal/cc3200_hal.c @@ -108,6 +108,19 @@ mp_uint_t mp_hal_ticks_ms(void) { return HAL_tickCount; } +// The SysTick timer counts down at HAL_FCPU_HZ, so we can use that knowledge +// to grab a microsecond counter. +mp_uint_t mp_hal_ticks_us(void) { + mp_uint_t irq_state = disable_irq(); + uint32_t counter = SysTickValueGet(); + uint32_t milliseconds = mp_hal_ticks_ms(); + enable_irq(irq_state); + + uint32_t load = SysTickPeriodGet(); + counter = load - counter; // Convert from decrementing to incrementing + return (milliseconds * 1000) + ((counter * 1000) / load); +} + void mp_hal_delay_ms(mp_uint_t delay) { // only if we are not within interrupt context and interrupts are enabled if ((HAL_NVIC_INT_CTRL_REG & HAL_VECTACTIVE_MASK) == 0 && query_irq() == IRQ_STATE_ENABLED) { @@ -211,4 +224,3 @@ static void hal_TickInit (void) { MAP_SysTickEnable(); } #endif - diff --git a/cc3200/hal/cc3200_hal.h b/cc3200/hal/cc3200_hal.h index 9715096b6..fcb85b292 100644 --- a/cc3200/hal/cc3200_hal.h +++ b/cc3200/hal/cc3200_hal.h @@ -30,6 +30,9 @@ #include <stdint.h> #include <stdbool.h> +#include "hal/utils.h" +#include "hal/systick.h" + /****************************************************************************** DEFINE CONSTANTS ******************************************************************************/ @@ -64,4 +67,7 @@ extern void HAL_SystemDeInit (void); extern void HAL_IncrementTick(void); extern void mp_hal_set_interrupt_char (int c); +#define mp_hal_delay_us(usec) UtilsDelay(UTILS_DELAY_US_TO_COUNT(usec)) +#define mp_hal_ticks_cpu() (SysTickPeriodGet() - SysTickValueGet()) + #endif /* CC3200_LAUNCHXL_HAL_CC3200_HAL_H_ */ |
