support new board (fpv motherboard v1)
[protos/rc_servos.git] / main.c
diff --git a/main.c b/main.c
index 2e2f13a..ad0af05 100644 (file)
--- a/main.c
+++ b/main.c
@@ -1,4 +1,5 @@
 #include <aversive.h>
+#include <aversive/wait.h>
 
 struct servo {
        uint8_t bit;
@@ -7,16 +8,28 @@ struct servo {
 
 static struct servo servo_table[] = {
        {
-               .bit = 0,
-               .command = 0,
+               .bit = 2,
+               .command = 300,
+       },
+       {
+               .bit = 3,
+               .command = 700,
        },
        {
-               .bit = 1,
+               .bit = 4,
                .command = 512,
        },
        {
-               .bit = 2,
-               .command = 1023,
+               .bit = 5,
+               .command = 512,
+       },
+       {
+               .bit = 6,
+               .command = 512,
+       },
+       {
+               .bit = 7,
+               .command = 512,
        },
 };
 #define NB_SERVO (sizeof(servo_table)/sizeof(*servo_table))
@@ -29,6 +42,9 @@ static volatile uint8_t rxidx;
 #define BYPASS_ENABLE 14
 #define BYPASS_DISABLE 15
 
+#define LED_ON() do { PORTB |= 0x02; } while(0)
+#define LED_OFF() do { PORTB &= ~0x02; } while(0)
+
 /*
  * SPI protocol:
  *
@@ -61,7 +77,7 @@ static volatile union {
 
 SIGNAL(TIMER1_COMPA_vect)
 {
-       PORTC = portval;
+       PORTD = portval;
        TIMSK1 &= ~_BV(OCIE1A);
        done = 1;
 }
@@ -144,10 +160,19 @@ int main(void)
        uint8_t t, diff;
 
        /* LED */
-       DDRB = 0x20;
+       DDRB = 0x02;
 
-       /* servo outputs */
-       DDRC = 0x7;
+#if 0 /* LED debug */
+       while (1) {
+               LED_ON();
+               wait_ms(100);
+               LED_OFF();
+               wait_ms(100);
+       }
+#endif
+
+       /* servo outputs PD2-PD7 */
+       DDRD = 0xfc;
 
        /* start timer1 at clk/1 (8Mhz) */
        TCNT1 = 0;
@@ -177,8 +202,11 @@ int main(void)
                }
                /* bypass mode */
                while (bypass == 1) {
-                       PORTC = PORTB;
+                       LED_ON();
+                       PORTD = (PINC & 0x3f) << 2;
+                       poll_spi();
                }
+               LED_OFF();
        }
 
        return 0;