altos: Fix nanopeak compile
authorKeith Packard <keithp@keithp.com>
Mon, 7 Apr 2014 05:27:37 +0000 (22:27 -0700)
committerKeith Packard <keithp@keithp.com>
Mon, 7 Apr 2014 05:27:37 +0000 (22:27 -0700)
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 <keithp@keithp.com>
src/attiny/ao_async.c
src/micropeak/Makefile

index 9f7fd6d761d8072c7ac665b880d347319aaa47f7..f64f7bde41e626218669f7cae25d8789c5812f41 100644 (file)
@@ -52,10 +52,6 @@ ao_async_byte(uint8_t byte)
 
        ao_arch_block_interrupts();
 
 
        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
        /* 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
                "       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"
                "       nop\n"
+#endif
+#if AO_LED_SERIAL >= 4
+               "       add     %[bit],%[bit]\n"        // shift by one
+#else
                "       nop\n"
                "       nop\n"
+#endif
+#if AO_LED_SERIAL >= 5
+               "       add     %[bit],%[bit]\n"        // shift by one
+#else
                "       nop\n"
                "       nop\n"
+#endif
+#if AO_LED_SERIAL >= 6
+               "       add     %[bit],%[bit]\n"        // shift by one
+#else
                "       nop\n"
                "       nop\n"
+#endif
+#if AO_LED_SERIAL >= 7
+               "       add     %[bit],%[bit]\n"        // shift by one
+#else
                "       nop\n"
                "       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"
                "       nop\n"
                "       nop\n"
                "       nop\n"
index 335a96e50df8af1268e847c5432bf1f04f86e4a4..6ae3d0be2acb08611b2119bfe611d3b7d659f02d 100644 (file)
@@ -84,8 +84,8 @@ $(PROG).hex: $(PROG)
 load: $(PROG).hex
        $(LOADCMD) $(LOADARG)$(PROG).hex
 
 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) > $@
 
 ao_product.h: ao-make-product.5c ../Version
        $(call quiet,NICKLE,$<) $< -m altusmetrum.org -i $(IDPRODUCT) -p $(PRODUCT) -v $(VERSION) > $@