diff options
| -rw-r--r-- | src/attiny/ao_async.c | 45 | ||||
| -rw-r--r-- | src/micropeak/Makefile | 4 | 
2 files changed, 36 insertions, 13 deletions
| 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) > $@ | 
