#ifndef DELAY_H #define DELAY_H // TODO: define system clock well #define SYSTEM_CLOCK ((uint32_t)48000000UL) #define SYSTICK_CALIB 0x3E8 #define SYSTICK_LOAD (SYSTEM_CLOCK/1000000UL) #define SYSTICK_DELAY_CALIB (SYSTICK_LOAD >> 1) #define DELAY_US(us) \ do { \ uint32_t start = SysTick->VAL; \ uint32_t ticks = (us * SYSTICK_LOAD)-SYSTICK_DELAY_CALIB; \ while((start - SysTick->VAL) < ticks); \ } while (0) #define DELAY_MS(ms) \ do { \ for (uint32_t i = 0; i < ms; ++i) { \ DELAY_US(1000); \ } \ } while (0) void systick_configure(); #endif // DELAY_H