optimize the bypass mode
[protos/rc_servos.git] / main.c
diff --git a/main.c b/main.c
index ad0af05..5d449de 100644 (file)
--- a/main.c
+++ b/main.c
@@ -34,10 +34,10 @@ static struct servo servo_table[] = {
 };
 #define NB_SERVO (sizeof(servo_table)/sizeof(*servo_table))
 
-static volatile uint8_t bypass;
+static uint8_t bypass;
 static volatile uint8_t done;
-static volatile uint8_t portval;
-static volatile uint8_t rxidx;
+static uint8_t portval;
+static uint8_t rxidx;
 
 #define BYPASS_ENABLE 14
 #define BYPASS_DISABLE 15
@@ -56,7 +56,7 @@ static volatile uint8_t rxidx;
  * Command 14 is to enable bypass mode.
  * Command 15 is to disable bypass mode.
  */
-static volatile union {
+static union {
        uint8_t u8;
        struct {
                /* inverted: little endian */
@@ -66,7 +66,7 @@ static volatile union {
        };
 } byte0;
 
-static volatile union {
+static union {
        uint8_t u8;
        struct {
                /* inverted: little endian */
@@ -158,6 +158,7 @@ int main(void)
 {
        uint8_t i;
        uint8_t t, diff;
+       uint8_t tmp;
 
        /* LED */
        DDRB = 0x02;
@@ -201,12 +202,18 @@ int main(void)
                        poll_spi();
                }
                /* bypass mode */
-               while (bypass == 1) {
+               if (bypass == 1) {
                        LED_ON();
-                       PORTD = (PINC & 0x3f) << 2;
-                       poll_spi();
+
+                       while (bypass == 1) {
+                               tmp = PINC;
+                               tmp &= 0x3f;
+                               tmp <<= 2;
+                               PORTD = tmp;
+                               poll_spi();
+                       }
+                       LED_OFF();
                }
-               LED_OFF();
        }
 
        return 0;