X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=lib%2Futil.h;h=18e36524b422304b6ec1b0aa98e5bd0e8486dcc9;hb=3038b627489dae62ce54d415a4bcfc4cfd28f084;hp=b06b6add070627072e181fbfb9d04bc793a06185;hpb=d910e34d0deecc4af18cf98377479cdfb78eac31;p=home-hw.git diff --git a/lib/util.h b/lib/util.h index b06b6ad..18e3652 100644 --- a/lib/util.h +++ b/lib/util.h @@ -23,6 +23,8 @@ typedef int32_t s32; #define MIN(x,y) ((x) < (y) ? (x) : (y)) #define MAX(x,y) ((x) > (y) ? (x) : (y)) +#define CLAMP(x,min,max) ({ typeof(x) _t=x; (_t < min) ? min : (_t > max) ? max : _t; }) +#define ARRAY_SIZE(ary) (sizeof(ary)/sizeof((ary)[0])) #define UNUSED __attribute__((unused)) @@ -76,8 +78,26 @@ static inline void put_u32_le(byte *p, u32 x) p[0] = x & 0xff; } -// debug.c +// CPU instructions not covered by libopencm3 -void debug_printf(const char *fmt, ...); +static inline void wait_for_interrupt(void) +{ + asm volatile ("wfi"); +} + +// A compiler memory barrier + +static inline void barrier(void) +{ + asm volatile ("" : : : "memory"); +} + +// util-debug.c + +void debug_printf(const char *fmt, ...) __attribute__((format(printf,1,2))); void debug_puts(const char *s); void debug_putc(int c); +void debug_flush(void); + +void debug_led(bool light); +void debug_led_toggle(void);