summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMathias K <kesmtp@freenet.de>2011-01-26 12:28:48 +0000
committerSpencer Oliver <ntfreak@users.sourceforge.net>2011-01-26 12:30:35 +0000
commit9629adcbde2bfac67296ad954c2233f725e1570e (patch)
treebe122160d75ec41ebb8fa4f2821e4ee715953bf5 /src
parent5b34018ccd244e888e8b7e1619e0e979b2a6147e (diff)
downloadopenocd+libswd-9629adcbde2bfac67296ad954c2233f725e1570e.tar.gz
openocd+libswd-9629adcbde2bfac67296ad954c2233f725e1570e.tar.bz2
openocd+libswd-9629adcbde2bfac67296ad954c2233f725e1570e.tar.xz
openocd+libswd-9629adcbde2bfac67296ad954c2233f725e1570e.zip
add basic TI xds100v2 support
Signed-off-by: Spencer Oliver <ntfreak@users.sourceforge.net>
Diffstat (limited to 'src')
-rw-r--r--src/jtag/drivers/ft2232.c94
1 files changed, 94 insertions, 0 deletions
diff --git a/src/jtag/drivers/ft2232.c b/src/jtag/drivers/ft2232.c
index 54f7c260..f8b29273 100644
--- a/src/jtag/drivers/ft2232.c
+++ b/src/jtag/drivers/ft2232.c
@@ -190,6 +190,7 @@ static int ktlink_init(void);
static int redbee_init(void);
static int lisa_l_init(void);
static int flossjtag_init(void);
+static int xds100v2_init(void);
/* reset procedures for supported layouts */
static void ftx23_reset(int trst, int srst);
@@ -205,6 +206,7 @@ static void icebear_jtag_reset(int trst, int srst);
static void signalyzer_h_reset(int trst, int srst);
static void ktlink_reset(int trst, int srst);
static void redbee_reset(int trst, int srst);
+static void xds100v2_reset(int trst, int srst);
/* blink procedures for layouts that support a blinking led */
static void olimex_jtag_blink(void);
@@ -318,6 +320,10 @@ static const struct ft2232_layout ft2232_layouts[] =
.reset = ftx23_reset,
.blink = flossjtag_blink,
},
+ { .name = "xds100v2",
+ .init = xds100v2_init,
+ .reset = xds100v2_reset,
+ },
{ .name = NULL, /* END OF TABLE */ },
};
@@ -1683,6 +1689,36 @@ static void redbee_reset(int trst, int srst)
high_direction);
}
+static void xds100v2_reset(int trst, int srst)
+{
+ if (trst == 1)
+ {
+ tap_set_state(TAP_RESET);
+ high_output &= ~nTRST;
+ }
+ else if (trst == 0)
+ {
+ high_output |= nTRST;
+ }
+
+ if (srst == 1)
+ {
+ high_output |= nSRST;
+ }
+ else if (srst == 0)
+ {
+ high_output &= ~nSRST;
+ }
+
+ /* command "set data bits low byte" */
+ buffer_write(0x82);
+ buffer_write(high_output);
+ buffer_write(high_direction);
+ LOG_DEBUG("trst: %i, srst: %i, high_output: 0x%2.2x, "
+ "high_direction: 0x%2.2x", trst, srst, high_output,
+ high_direction);
+}
+
static int ft2232_execute_runtest(struct jtag_command *cmd)
{
int retval;
@@ -3172,6 +3208,64 @@ static int flossjtag_init(void)
return ftx232_dbus_write();
}
+static int xds100v2_init(void)
+{
+ uint8_t buf[3];
+ uint32_t bytes_written;
+
+ low_output = 0x3A;
+ low_direction = 0x7B;
+
+ /* initialize low byte for jtag */
+ buf[0] = 0x80; /* command "set data bits low byte" */
+ buf[1] = low_output; /* value (TMS = 1,TCK = 0, TDI = 0, nOE = 0) */
+ buf[2] = low_direction; /* dir (output = 1), TCK/TDI/TMS = out, TDO = in, nOE[12]=out, n[ST]srst = out */
+ LOG_DEBUG("%2.2x %2.2x %2.2x", buf[0], buf[1], buf[2]);
+
+ if (ft2232_write(buf, sizeof(buf), &bytes_written) != ERROR_OK)
+ {
+ LOG_ERROR("couldn't initialize FT2232 with 'xds100v2' layout");
+ return ERROR_JTAG_INIT_FAILED;
+ }
+
+ nTRST = 0x10;
+ nTRSTnOE = 0x0; /* not output enable for nTRST */
+ nSRST = 0x00; /* TODO: SRST is not supported yet */
+ nSRSTnOE = 0x00; /* no output enable for nSRST */
+
+ high_output = 0x00;
+ high_direction = 0x59;
+
+ /* initialize high port */
+ buf[0] = 0x82; /* command "set data bits high byte" */
+ buf[1] = high_output; /* value */
+ buf[2] = high_direction; /* all outputs (xRST and xRSTnOE) */
+ LOG_DEBUG("%2.2x %2.2x %2.2x", buf[0], buf[1], buf[2]);
+
+ if (ft2232_write(buf, sizeof(buf), &bytes_written) != ERROR_OK)
+ {
+ LOG_ERROR("couldn't initialize FT2232 with 'xds100v2' layout");
+ return ERROR_JTAG_INIT_FAILED;
+ }
+
+ high_output = 0x86;
+ high_direction = 0x59;
+
+ /* initialize high port */
+ buf[0] = 0x82; /* command "set data bits high byte" */
+ buf[1] = high_output; /* value */
+ buf[2] = high_direction; /* all outputs (xRST and xRSTnOE) */
+ LOG_DEBUG("%2.2x %2.2x %2.2x", buf[0], buf[1], buf[2]);
+
+ if (ft2232_write(buf, sizeof(buf), &bytes_written) != ERROR_OK)
+ {
+ LOG_ERROR("couldn't initialize FT2232 with 'xds100v2' layout");
+ return ERROR_JTAG_INIT_FAILED;
+ }
+
+ return ERROR_OK;
+}
+
static void olimex_jtag_blink(void)
{
/* Olimex ARM-USB-OCD has a LED connected to ACBUS3