From 6c7125b380c3d8f5428bae9306e91b5d327f1a61 Mon Sep 17 00:00:00 2001 From: Clifford Wolf Date: Sun, 19 Jul 2015 16:09:19 +0200 Subject: Improved icestorm example --- scripts/icestorm/firmware.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 scripts/icestorm/firmware.c (limited to 'scripts/icestorm/firmware.c') diff --git a/scripts/icestorm/firmware.c b/scripts/icestorm/firmware.c new file mode 100644 index 0000000..b400ba0 --- /dev/null +++ b/scripts/icestorm/firmware.c @@ -0,0 +1,28 @@ +#include + +#define SHIFT_COUNTER_BITS 16 + +void output(uint8_t c) +{ + *(volatile char*)0x10000000 = c; +} + +void output_gray(uint8_t c) +{ + unsigned int in_buf = c, out_buf = 0; + for (int i = 0; i < 8; i++) { + unsigned int bit = (in_buf & 1) ^ ((in_buf >> 1) & 1); + in_buf = in_buf >> 1; + out_buf = (out_buf << 1) | bit; + } + output(out_buf); +} + +void main() +{ + for (uint32_t counter = (2+4+32+64) << SHIFT_COUNTER_BITS;; counter++) { + asm volatile ("" : : "r"(counter)); + if ((counter & ~(~0 << SHIFT_COUNTER_BITS)) == 0) + output_gray(counter >> SHIFT_COUNTER_BITS); + } +} -- cgit