]> git.gag.com Git - fw/altos/blobdiff - lib/ccdbg-command.c
Sometimes the link breaks and the GET_PC command returns garbage
[fw/altos] / lib / ccdbg-command.c
index 30f5094dbdfd71bb5110ab59e1afd7324907808d..d99e8ff3155cd5ea00add5e37d88953c9023d972 100644 (file)
@@ -31,6 +31,7 @@ ccdbg_debug_mode(struct ccdbg *dbg)
        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_sync_io(dbg);
 }
 
 void
@@ -45,6 +46,7 @@ ccdbg_reset(struct ccdbg *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|CC_RESET_N);
+       ccdbg_sync_io(dbg);
 }
 
 uint8_t
@@ -68,7 +70,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