diff options
Diffstat (limited to 'firmware/print.c')
-rw-r--r-- | firmware/print.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/firmware/print.c b/firmware/print.c new file mode 100644 index 0000000..accce26 --- /dev/null +++ b/firmware/print.c @@ -0,0 +1,41 @@ +// This is free and unencumbered software released into the public domain. +// +// Anyone is free to copy, modify, publish, use, compile, sell, or +// distribute this software, either in source code form or as a compiled +// binary, for any purpose, commercial or non-commercial, and by any +// means. + +#include "firmware.h" + +#define OUTPORT 0x10000000 + +void print_chr(char ch) +{ + *((volatile uint32_t*)OUTPORT) = ch; +} + +void print_str(const char *p) +{ + while (*p != 0) + *((volatile uint32_t*)OUTPORT) = *(p++); +} + +void print_dec(unsigned int val) +{ + char buffer[10]; + char *p = buffer; + while (val || p == buffer) { + *(p++) = val % 10; + val = val / 10; + } + while (p != buffer) { + *((volatile uint32_t*)OUTPORT) = '0' + *(--p); + } +} + +void print_hex(unsigned int val, int digits) +{ + for (int i = (4*digits)-4; i >= 0; i -= 4) + *((volatile uint32_t*)OUTPORT) = "0123456789ABCDEF"[(val >> i) % 16]; +} + |