Wait for a while when switching the RESET_N line
[fw/altos] / lib / ccdbg-command.c
index 38c006cb99c4ee303493b5baa59f75ad2211ebe0..74313bdf8ebbd0aea3485f32232b786aaafecc67 100644 (file)
@@ -27,10 +27,12 @@ ccdbg_debug_mode(struct ccdbg *dbg)
        ccdbg_debug(CC_DEBUG_COMMAND, "#\n");
        ccdbg_send(dbg, CC_CLOCK|CC_DATA|CC_RESET_N, CC_CLOCK|CC_DATA|CC_RESET_N);
        ccdbg_send(dbg, CC_CLOCK|CC_DATA|CC_RESET_N,          CC_DATA           );
+       ccdbg_wait_reset(dbg);
        ccdbg_send(dbg, CC_CLOCK|CC_DATA|CC_RESET_N, CC_CLOCK|CC_DATA           );
        ccdbg_send(dbg, CC_CLOCK|CC_DATA|CC_RESET_N,          CC_DATA           );
        ccdbg_send(dbg, CC_CLOCK|CC_DATA|CC_RESET_N, CC_CLOCK|CC_DATA           );
        ccdbg_send(dbg, CC_CLOCK|CC_DATA|CC_RESET_N,          CC_DATA|CC_RESET_N);
+       ccdbg_wait_reset(dbg);
 }
 
 void
@@ -41,10 +43,12 @@ ccdbg_reset(struct ccdbg *dbg)
        ccdbg_debug(CC_DEBUG_COMMAND, "#\n");
        ccdbg_send(dbg, CC_CLOCK|CC_DATA|CC_RESET_N, CC_CLOCK|CC_DATA|CC_RESET_N);
        ccdbg_send(dbg, CC_CLOCK|CC_DATA|CC_RESET_N, CC_CLOCK|CC_DATA           );
+       ccdbg_wait_reset(dbg);
        ccdbg_send(dbg, CC_CLOCK|CC_DATA|CC_RESET_N, CC_CLOCK|CC_DATA           );
        ccdbg_send(dbg, CC_CLOCK|CC_DATA|CC_RESET_N, CC_CLOCK|CC_DATA           );
        ccdbg_send(dbg, CC_CLOCK|CC_DATA|CC_RESET_N, CC_CLOCK|CC_DATA           );
        ccdbg_send(dbg, CC_CLOCK|CC_DATA|CC_RESET_N, CC_CLOCK|CC_DATA|CC_RESET_N);
+       ccdbg_wait_reset(dbg);
 }
 
 uint8_t
@@ -68,7 +72,14 @@ ccdbg_rd_config(struct ccdbg *dbg)
 uint16_t
 ccdbg_get_pc(struct ccdbg *dbg)
 {
-       return ccdbg_cmd_write_read16(dbg, CC_GET_PC, NULL, 0);
+       uint16_t        pc1, pc2;
+
+       pc1 = ccdbg_cmd_write_read16(dbg, CC_GET_PC, NULL, 0);
+       pc2 = ccdbg_cmd_write_read16(dbg, CC_GET_PC, NULL, 0);
+       if (pc1 != pc2)
+               fprintf (stderr, "Invalid pc %04x != %04x\n",
+                        pc1, pc2);
+       return pc2;
 }
 
 uint8_t
@@ -174,9 +185,9 @@ ccdbg_execute_hex_image(struct ccdbg *dbg, struct hex_image *image)
        ccdbg_write_hex_image(dbg, image, 0);
        ccdbg_set_pc(dbg, image->address);
        pc = ccdbg_get_pc(dbg);
-       printf ("pc starts at 0x%04x\n", pc);
+       ccdbg_debug(CC_DEBUG_EXECUTE, "pc starts at 0x%04x\n", pc);
        status = ccdbg_resume(dbg);
-       printf ("resume status: 0x%02x\n", status);
+       ccdbg_debug(CC_DEBUG_EXECUTE, "resume status: 0x%02x\n", status);
        return 0;
 }