diff options
author | Øyvind Harboe <oyvind.harboe@zylin.com> | 2010-03-01 08:25:18 +0100 |
---|---|---|
committer | Øyvind Harboe <oyvind.harboe@zylin.com> | 2010-03-16 21:44:38 +0100 |
commit | 030ee192dd9647b10ff0841a671facec9d6b833f (patch) | |
tree | 3cc50692355eacbe459e1a7e67ccc538f1b81da8 /src/jtag/drivers/bitbang.c | |
parent | 679f6602fd1a7e9763bac52f06bbf2db28098d9a (diff) |
bitbang: add jtag_add_tms_seq support
Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
Diffstat (limited to 'src/jtag/drivers/bitbang.c')
-rw-r--r-- | src/jtag/drivers/bitbang.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/jtag/drivers/bitbang.c b/src/jtag/drivers/bitbang.c index 83c2d29e..6159ef7a 100644 --- a/src/jtag/drivers/bitbang.c +++ b/src/jtag/drivers/bitbang.c @@ -91,6 +91,31 @@ static void bitbang_state_move(int skip) tap_set_state(tap_get_end_state()); } + +/** + * Clock a bunch of TMS (or SWDIO) transitions, to change the JTAG + * (or SWD) state machine. + */ +static int bitbang_execute_tms(struct jtag_command *cmd) +{ + unsigned num_bits = cmd->cmd.tms->num_bits; + const uint8_t *bits = cmd->cmd.tms->bits; + + DEBUG_JTAG_IO("TMS: %d bits", num_bits); + + int tms = 0; + for (unsigned i = 0; i < num_bits; i++) + { + tms = ((bits[i/8] >> (i % 8)) & 1); + bitbang_interface->write(0, tms, 0); + bitbang_interface->write(1, tms, 0); + } + bitbang_interface->write(CLOCK_IDLE(), tms, 0); + + return ERROR_OK; +} + + static void bitbang_path_move(struct pathmove_command *cmd) { int num_states = cmd->num_states; @@ -312,6 +337,9 @@ int bitbang_execute_queue(void) #endif jtag_sleep(cmd->cmd.sleep->us); break; + case JTAG_TMS: + retval = bitbang_execute_tms(cmd); + break; default: LOG_ERROR("BUG: unknown JTAG command type encountered"); exit(-1); |