When changing RESET line, delay 20ms
[fw/altos] / src / ao_dbg.c
index b218897c627fd7664aa041a394e14243a553ec95..2fc266e3f38c462083e746d1a38db9c4449cf2ee 100644 (file)
  */
 
 #include "ao.h"
-
-#define DBG_CLOCK      (1 << 3)
-#define DBG_DATA       (1 << 4)
-#define DBG_RESET_N    (1 << 5)
-
-#define DBG_CLOCK_PIN  (P0_3)
-#define DBG_DATA_PIN   (P0_4)
-#define DBG_RESET_N_PIN        (P0_5)
+#include "ao_pins.h"
 
 static void
 ao_dbg_send_bits(uint8_t msk, uint8_t val) __reentrant
 {
-       P0 = (P0 & ~msk) | (val & msk);
+       DBG_PORT = (DBG_PORT & ~msk) | (val & msk);
        _asm
                nop
                nop
@@ -40,8 +33,8 @@ ao_dbg_send_byte(uint8_t byte)
 {
        __xdata uint8_t b, d;
 
-       P0 |= DBG_DATA;
-       P0DIR |= DBG_DATA;
+       DBG_PORT |= DBG_DATA;
+       DBG_PORT_DIR |= DBG_DATA;
        for (b = 0; b < 8; b++) {
                d = 0;
                if (byte & 0x80)
@@ -50,7 +43,7 @@ ao_dbg_send_byte(uint8_t byte)
                ao_dbg_send_bits(DBG_CLOCK|DBG_DATA, DBG_CLOCK|d);
                ao_dbg_send_bits(DBG_CLOCK|DBG_DATA,     0    |d);
        }
-       P0DIR &= ~DBG_DATA;
+       DBG_PORT_DIR &= ~DBG_DATA;
 }
 
 uint8_t
@@ -171,20 +164,15 @@ ao_dbg_read_byte(void)
 static void
 ao_dbg_set_pins(void)
 {
-       /* Disable peripheral use of P0 */
-       ADCCFG = 0;
-       P0SEL = 0;
-
-
-       /* make P0_4 tri-state */
-       P0INP = DBG_DATA;
-       P2INP &= ~(P2INP_PDUP0_PULL_DOWN);
+       /* make DBG_DATA tri-state */
+       DBG_PORT_INP |= DBG_DATA;
 
        /* Raise RESET_N and CLOCK */
-       P0 = DBG_RESET_N | DBG_CLOCK;
+       DBG_PORT |= DBG_RESET_N | DBG_CLOCK;
 
        /* RESET_N and CLOCK are outputs now */
-       P0DIR = DBG_RESET_N | DBG_CLOCK;
+       DBG_PORT_DIR |= DBG_RESET_N | DBG_CLOCK;
+       DBG_PORT_DIR &= ~DBG_DATA;
 }
 
 static void
@@ -196,6 +184,12 @@ ao_dbg_long_delay(void)
                _asm nop _endasm;
 }
 
+static void
+ao_dbg_reset_delay(void)
+{
+       ao_delay(AO_MS_TO_TICKS(20));
+}
+
 void
 ao_dbg_debug_mode(void)
 {
@@ -204,7 +198,7 @@ ao_dbg_debug_mode(void)
        ao_dbg_send_bits(DBG_CLOCK|DBG_DATA|DBG_RESET_N, DBG_CLOCK|DBG_DATA|DBG_RESET_N);
        ao_dbg_long_delay();
        ao_dbg_send_bits(DBG_CLOCK|DBG_DATA|DBG_RESET_N,     0    |DBG_DATA|    0    );
-       ao_dbg_long_delay();
+       ao_dbg_reset_delay();
        ao_dbg_send_bits(DBG_CLOCK|DBG_DATA|DBG_RESET_N, DBG_CLOCK|DBG_DATA|    0    );
        ao_dbg_long_delay();
        ao_dbg_send_bits(DBG_CLOCK|DBG_DATA|DBG_RESET_N,     0    |DBG_DATA|    0    );
@@ -212,7 +206,7 @@ ao_dbg_debug_mode(void)
        ao_dbg_send_bits(DBG_CLOCK|DBG_DATA|DBG_RESET_N, DBG_CLOCK|DBG_DATA|    0    );
        ao_dbg_long_delay();
        ao_dbg_send_bits(DBG_CLOCK|DBG_DATA|DBG_RESET_N,     0    |DBG_DATA|DBG_RESET_N);
-       ao_dbg_long_delay();
+       ao_dbg_reset_delay();
 }
 
 void
@@ -223,7 +217,7 @@ ao_dbg_reset(void)
        ao_dbg_send_bits(DBG_CLOCK|DBG_DATA|DBG_RESET_N, DBG_CLOCK|DBG_DATA|DBG_RESET_N);
        ao_dbg_long_delay();
        ao_dbg_send_bits(DBG_CLOCK|DBG_DATA|DBG_RESET_N, DBG_CLOCK|DBG_DATA|    0    );
-       ao_dbg_long_delay();
+       ao_dbg_reset_delay();
        ao_dbg_send_bits(DBG_CLOCK|DBG_DATA|DBG_RESET_N, DBG_CLOCK|DBG_DATA|    0    );
        ao_dbg_long_delay();
        ao_dbg_send_bits(DBG_CLOCK|DBG_DATA|DBG_RESET_N, DBG_CLOCK|DBG_DATA|    0    );
@@ -231,7 +225,7 @@ ao_dbg_reset(void)
        ao_dbg_send_bits(DBG_CLOCK|DBG_DATA|DBG_RESET_N, DBG_CLOCK|DBG_DATA|    0    );
        ao_dbg_long_delay();
        ao_dbg_send_bits(DBG_CLOCK|DBG_DATA|DBG_RESET_N, DBG_CLOCK|DBG_DATA|DBG_RESET_N);
-       ao_dbg_long_delay();
+       ao_dbg_reset_delay();
 }
 
 static void