From 4e92a5b3740630546419fed061672caf46a3975e Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Wed, 9 Oct 2013 00:51:26 +0200 Subject: use defines for delay functions --- main.c | 51 ++++++++++++++++++++++++--------------------------- 1 file changed, 24 insertions(+), 27 deletions(-) diff --git a/main.c b/main.c index 90b18e9..c12f7bf 100644 --- a/main.c +++ b/main.c @@ -40,6 +40,27 @@ #define APOS OCR1B #define BYTE EEDR + +#define delay_us_Y(delay) \ + asm volatile ("ldi r29, 0"); \ + asm volatile ("ldi r28, %0" : : "M" (delay)); \ + asm volatile ("wdr"); \ + asm volatile ("wdr"); \ + asm volatile ("wdr"); \ + asm volatile ("sbiw r28, 1"); \ + asm volatile ("cp r28, r1"); \ + asm volatile ("brne .-12"); + +#define delay_us_Z(delay) \ + asm volatile ("ldi r31, 0"); \ + asm volatile ("ldi r30, %0" : : "M" (delay)); \ + asm volatile ("wdr"); \ + asm volatile ("wdr"); \ + asm volatile ("wdr"); \ + asm volatile ("sbiw r30, 1"); \ + asm volatile ("cp r30, r1"); \ + asm volatile ("brne .-12"); + int main (void) { /* watchdog reset after ~4 seconds */ @@ -92,15 +113,7 @@ ISR(INT1_vect) if (LCNTH > 0) { DDRD = _BV(PD3); - // 120us loop - r31 / r30 need not be preserved - asm volatile ("ldi r31, 0"); - asm volatile ("ldi r30, 120"); // Z = 120 - asm volatile ("wdr"); // <----- - asm volatile ("wdr"); - asm volatile ("wdr"); - asm volatile ("sbiw r30, 1"); - asm volatile ("cp r30, r1"); - asm volatile ("brne .-12"); // -^ + delay_us_Z(120); DDRD = 0; LASTCMD = 0; @@ -140,15 +153,7 @@ ISR(INT1_vect) DDRD = _BV(PD3); - // 15us loop - r31 / r28 need not be preserved - asm volatile ("ldi r31, 0"); - asm volatile ("ldi r28, 15"); // Z = 15 - asm volatile ("wdr"); // <----- - asm volatile ("wdr"); - asm volatile ("wdr"); - asm volatile ("sbiw r28, 1"); - asm volatile ("cp r28, r1"); - asm volatile ("brne .-12"); // -^ + delay_us_Y(15); DDRD = 0; asm volatile ("wdr"); @@ -201,15 +206,7 @@ ISR(INT1_vect) //if (BYTE & POS) { DDRD = _BV(PD3); - // 15us loop - r29 / r28 need not be preserved - asm volatile ("ldi r29, 0"); - asm volatile ("ldi r28, 15"); // Z = 15 - asm volatile ("wdr"); // <----- - asm volatile ("wdr"); - asm volatile ("wdr"); - asm volatile ("sbiw r28, 1"); - asm volatile ("cp r28, r1"); - asm volatile ("brne .-12"); // -^ + delay_us_Y(15); DDRD = 0; asm volatile ("wdr"); -- cgit v1.2.3