bitbang: add jtag_add_tms_seq support

Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
This commit is contained in:
Øyvind Harboe 2010-03-01 08:25:18 +01:00
parent 679f6602fd
commit 030ee192dd
6 changed files with 33 additions and 0 deletions

View File

@ -126,6 +126,7 @@ struct jtag_interface at91rm9200_interface =
{
.name = "at91rm9200",
.supported = DEBUG_CAP_TMS_SEQ,
.execute_queue = bitbang_execute_queue,
.speed = at91rm9200_speed,

View File

@ -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);

View File

@ -164,6 +164,7 @@ static const struct command_registration dummy_command_handlers[] = {
struct jtag_interface dummy_interface = {
.name = "dummy",
.supported = DEBUG_CAP_TMS_SEQ,
.commands = dummy_command_handlers,
.execute_queue = &bitbang_execute_queue,

View File

@ -57,6 +57,7 @@ struct jtag_interface ep93xx_interface =
{
.name = "ep93xx",
.supported = DEBUG_CAP_TMS_SEQ,
.execute_queue = bitbang_execute_queue,
.speed = ep93xx_speed,

View File

@ -524,6 +524,7 @@ static const struct command_registration parport_command_handlers[] = {
struct jtag_interface parport_interface = {
.name = "parport",
.supported = DEBUG_CAP_TMS_SEQ,
.commands = parport_command_handlers,
.init = parport_init,

View File

@ -580,6 +580,7 @@ static const struct command_registration usb_blaster_command_handlers[] = {
struct jtag_interface usb_blaster_interface = {
.name = "usb_blaster",
.commands = usb_blaster_command_handlers,
.supported = DEBUG_CAP_TMS_SEQ,
.execute_queue = bitbang_execute_queue,