diff options
author | oharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2009-05-08 19:24:40 +0000 |
---|---|---|
committer | oharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2009-05-08 19:24:40 +0000 |
commit | 060f61ef244370ba2059b6113e081cb1f0106340 (patch) | |
tree | c48211d90dfb4225880c12018e1c1f229eedbfd5 /src | |
parent | 5f7791474b205858421fc3c05334b9374735776d (diff) | |
download | openocd_libswd-060f61ef244370ba2059b6113e081cb1f0106340.tar.gz openocd_libswd-060f61ef244370ba2059b6113e081cb1f0106340.tar.bz2 openocd_libswd-060f61ef244370ba2059b6113e081cb1f0106340.tar.xz openocd_libswd-060f61ef244370ba2059b6113e081cb1f0106340.zip |
sync up zy1000 interface to bitbang driver's handling of exiting the shift state
git-svn-id: svn://svn.berlios.de/openocd/trunk@1679 b42882b7-edfa-0310-969c-e2dbd0fdcd60
Diffstat (limited to 'src')
-rw-r--r-- | src/jtag/zy1000.c | 40 |
1 files changed, 25 insertions, 15 deletions
diff --git a/src/jtag/zy1000.c b/src/jtag/zy1000.c index ae082e2c..eac80041 100644 --- a/src/jtag/zy1000.c +++ b/src/jtag/zy1000.c @@ -448,7 +448,7 @@ static void gotoEndState(void) setCurrentState(cmd_queue_end_state); } -static __inline void scanFields(int num_fields, scan_field_t *fields, tap_state_t shiftState, int pause) +static __inline void scanFields(int num_fields, scan_field_t *fields, tap_state_t shiftState, tap_state_t end_state) { int i; int j; @@ -482,10 +482,10 @@ static __inline void scanFields(int num_fields, scan_field_t *fields, tap_state_ { k=32; /* we have more to shift out */ - } else if (pause&&(i == num_fields-1)) + } else if (i == num_fields-1) { /* this was the last to shift out this time */ - pause_state=(shiftState==TAP_DRSHIFT)?TAP_DRPAUSE:TAP_IRPAUSE; + pause_state=end_state; } // we have (num_bits+7)/8 bytes of bits to toggle out. @@ -535,7 +535,14 @@ int interface_jtag_add_ir_scan(int num_fields, scan_field_t *fields, tap_state_t for(tap = jtag_NextEnabledTap(NULL); tap!= NULL; tap=nextTap) { nextTap=jtag_NextEnabledTap(tap); - int pause=(nextTap==NULL); + tap_state_t end_state; + if (nextTap==NULL) + { + end_state = cmd_queue_end_state; + } else + { + end_state = TAP_IRSHIFT; + } int found = 0; @@ -548,7 +555,7 @@ int interface_jtag_add_ir_scan(int num_fields, scan_field_t *fields, tap_state_t { found = 1; - scanFields(1, fields+j, TAP_IRSHIFT, pause); + scanFields(1, fields+j, TAP_IRSHIFT, end_state); /* update device information */ buf_cpy(fields[j].out_value, tap->cur_instr, scan_size); @@ -566,13 +573,12 @@ int interface_jtag_add_ir_scan(int num_fields, scan_field_t *fields, tap_state_t memset(&tmp, 0, sizeof(tmp)); tmp.out_value = ones; tmp.num_bits = scan_size; - scanFields(1, &tmp, TAP_IRSHIFT, pause); + scanFields(1, &tmp, TAP_IRSHIFT, end_state); /* update device information */ buf_cpy(tmp.out_value, tap->cur_instr, scan_size); tap->bypass = 1; } } - gotoEndState(); return ERROR_OK; } @@ -583,8 +589,7 @@ int interface_jtag_add_ir_scan(int num_fields, scan_field_t *fields, tap_state_t int interface_jtag_add_plain_ir_scan(int num_fields, scan_field_t *fields, tap_state_t state) { - scanFields(num_fields, fields, TAP_IRSHIFT, 1); - gotoEndState(); + scanFields(num_fields, fields, TAP_IRSHIFT, cmd_queue_end_state); return ERROR_OK; } @@ -600,7 +605,14 @@ int interface_jtag_add_dr_scan(int num_fields, scan_field_t *fields, tap_state_t { nextTap=jtag_NextEnabledTap(tap); int found=0; - int pause=(nextTap==NULL); + tap_state_t end_state; + if (nextTap==NULL) + { + end_state = cmd_queue_end_state; + } else + { + end_state = TAP_DRSHIFT; + } for (j=0; j < num_fields; j++) { @@ -608,7 +620,7 @@ int interface_jtag_add_dr_scan(int num_fields, scan_field_t *fields, tap_state_t { found = 1; - scanFields(1, fields+j, TAP_DRSHIFT, pause); + scanFields(1, fields+j, TAP_DRSHIFT, end_state); } } if (!found) @@ -619,20 +631,18 @@ int interface_jtag_add_dr_scan(int num_fields, scan_field_t *fields, tap_state_t tmp.out_value = NULL; tmp.in_value = NULL; - scanFields(1, &tmp, TAP_DRSHIFT, pause); + scanFields(1, &tmp, TAP_DRSHIFT, end_state); } else { } } - gotoEndState(); return ERROR_OK; } int interface_jtag_add_plain_dr_scan(int num_fields, scan_field_t *fields, tap_state_t state) { - scanFields(num_fields, fields, TAP_DRSHIFT, 1); - gotoEndState(); + scanFields(num_fields, fields, TAP_DRSHIFT, cmd_queue_end_state); return ERROR_OK; } |