#include "project.h" static volatile uint32_t delay_ms_count; static uint32_t scale = 35; volatile uint32_t ticks; void delay_us (uint32_t d) { d *= scale; while (d--) __asm__ ("nop"); } void sys_tick_handler (void) { static int slow; if (delay_ms_count) delay_ms_count--; ticks++; led_tick(); cdcacm_tick(); slow++; if (slow < 1000) return; slow = 0; ptp_slow_tick(); ref_slow_tick(); steth_slow_tick(); led_slow_tick(); } void delay_ms (uint32_t d) { delay_ms_count = d; while (delay_ms_count); } void ticker_init (void) { uint32_t v, w; /*168MHz 1ms */ systick_set_reload (168000); systick_set_clocksource (STK_CSR_CLKSOURCE_AHB); systick_counter_enable(); /* this done last */ systick_interrupt_enable(); /*Calibrate the delay loop */ do { scale--; v = ticks; while (v == ticks); delay_us (1000); w = ticks; v++; w -= v; } while (w); SCS_DEMCR |= SCS_DEMCR_TRCENA; DWT_CTRL |= DWT_CTRL_CYCCNTENA; }