]> git.sur5r.net Git - openocd/commitdiff
add basic TI xds100v2 support
authorMathias K <kesmtp@freenet.de>
Wed, 26 Jan 2011 12:28:48 +0000 (12:28 +0000)
committerSpencer Oliver <ntfreak@users.sourceforge.net>
Wed, 26 Jan 2011 12:30:35 +0000 (12:30 +0000)
Signed-off-by: Spencer Oliver <ntfreak@users.sourceforge.net>
src/jtag/drivers/ft2232.c

index 54f7c260269107610c7dd3f00146980b0cbe2a6e..f8b29273ac6a30ed4c6cdcac478590d876b19c5b 100644 (file)
@@ -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