From: Keith Packard Date: Mon, 7 Apr 2014 05:27:37 +0000 (-0700) Subject: altos: Fix nanopeak compile X-Git-Tag: 1.3.2.2~141 X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=commitdiff_plain;h=4211c59e585545817b3cac02b41bb73106d6403e;hp=350d941a825d0271933de0bfdea82d3af5744c21;ds=sidebyside altos: Fix nanopeak compile Nanopeak uses port B bit 3 for the LED instead of bit 4. Fix the async code to support arbitrary bits for the serial LED. Signed-off-by: Keith Packard --- diff --git a/src/attiny/ao_async.c b/src/attiny/ao_async.c index 9f7fd6d7..f64f7bde 100644 --- a/src/attiny/ao_async.c +++ b/src/attiny/ao_async.c @@ -52,10 +52,6 @@ ao_async_byte(uint8_t byte) ao_arch_block_interrupts(); -#if AO_LED_SERIAL != 4 -#error "expect AO_LED_SERIAL to be 4" -#endif - /* Ok, this is a bit painful. * We need this loop to be precisely timed, which * means knowing exactly how many instructions will @@ -72,18 +68,45 @@ ao_async_byte(uint8_t byte) " andi %[v], %[led_mask]\n" // mask to clear LED bit " mov %[bit], %[w_lo]\n" // get current data byte " andi %[bit], 0x01\n" // get current data bit - " swap %[bit]\n" // rotate by 4 (AO_LED_SERIAL is 4) - " andi %[bit], 0xf0\n" // mask off other 4 bits - " or %[v], %[bit]\n" // add to register - " out %[port], %[v]\n" // write current value - " lsr %[w_hi]\n" // shift data - " ror %[w_lo]\n" // ... +#if AO_LED_SERIAL >= 1 + " add %[bit],%[bit]\n" // shift by one +#else + " nop\n" +#endif +#if AO_LED_SERIAL >= 2 + " add %[bit],%[bit]\n" // shift by one +#else + " nop\n" +#endif +#if AO_LED_SERIAL >= 3 + " add %[bit],%[bit]\n" // shift by one +#else " nop\n" +#endif +#if AO_LED_SERIAL >= 4 + " add %[bit],%[bit]\n" // shift by one +#else " nop\n" +#endif +#if AO_LED_SERIAL >= 5 + " add %[bit],%[bit]\n" // shift by one +#else " nop\n" +#endif +#if AO_LED_SERIAL >= 6 + " add %[bit],%[bit]\n" // shift by one +#else " nop\n" +#endif +#if AO_LED_SERIAL >= 7 + " add %[bit],%[bit]\n" // shift by one +#else " nop\n" - +#endif + " or %[v], %[bit]\n" // add to register + " out %[port], %[v]\n" // write current value + " lsr %[w_hi]\n" // shift data + " ror %[w_lo]\n" // ... " nop\n" " nop\n" " nop\n" diff --git a/src/micropeak/Makefile b/src/micropeak/Makefile index 335a96e5..6ae3d0be 100644 --- a/src/micropeak/Makefile +++ b/src/micropeak/Makefile @@ -84,8 +84,8 @@ $(PROG).hex: $(PROG) load: $(PROG).hex $(LOADCMD) $(LOADARG)$(PROG).hex -#load-slow: $(PROG).hex -# $(LOADCMD) $(LOADSLOW) $(LOADARG)$(PROG).hex +load-slow: $(PROG).hex + $(LOADCMD) $(LOADSLOW) $(LOADARG)$(PROG).hex ao_product.h: ao-make-product.5c ../Version $(call quiet,NICKLE,$<) $< -m altusmetrum.org -i $(IDPRODUCT) -p $(PRODUCT) -v $(VERSION) > $@