mini-jtag: split shift_dr/ir function

This commit is contained in:
Xiangfu 2012-09-25 23:21:30 +08:00
parent ee6066e225
commit bdc395a615
2 changed files with 41 additions and 19 deletions

View File

@ -35,18 +35,11 @@ void tap_reset_rti(struct ftdi_context *ftdi)
tap_tms(ftdi, 0, 0); /* Goto RTI */
}
int tap_shift_ir(struct ftdi_context *ftdi, uint8_t ir)
int tap_shift_ir_only(struct ftdi_context *ftdi, uint8_t ir)
{
/* Have to be at RTI status before call this function */
int ret = 0;
uint8_t buf[3] = {0, 0, 0};
tap_tms(ftdi, 1, 0);
tap_tms(ftdi, 1, 0);
tap_tms(ftdi, 0, 0);
tap_tms(ftdi, 0, 0); /* Goto shift IR */
buf[0] = MPSSE_DO_WRITE|MPSSE_LSB|
MPSSE_BITMODE|MPSSE_WRITE_NEG;
buf[1] = 4;
@ -57,12 +50,26 @@ int tap_shift_ir(struct ftdi_context *ftdi, uint8_t ir)
}
tap_tms(ftdi, 1, (ir >> 5));
tap_tms(ftdi, 1, 0);
tap_tms(ftdi, 0, 0); /* Goto RTI */
return ret;
}
int tap_shift_ir(struct ftdi_context *ftdi, uint8_t ir)
{
int ret;
tap_tms(ftdi, 1, 0); /* RTI status */
tap_tms(ftdi, 1, 0);
tap_tms(ftdi, 0, 0);
tap_tms(ftdi, 0, 0); /* Goto shift IR */
ret = tap_shift_ir_only(ftdi, ir);
tap_tms(ftdi, 1, 0);
tap_tms(ftdi, 0, 0); /* Goto RTI */
return ret;
}
static int shift_last_bits(struct ftdi_context *ftdi,
uint8_t *in, uint8_t len, uint8_t *out)
@ -97,7 +104,7 @@ static int shift_last_bits(struct ftdi_context *ftdi,
return 0;
}
int tap_shift_dr_bits(struct ftdi_context *ftdi,
int tap_shift_dr_bits_only(struct ftdi_context *ftdi,
uint8_t *in, uint32_t in_bits,
uint8_t *out)
{
@ -109,11 +116,6 @@ int tap_shift_dr_bits(struct ftdi_context *ftdi,
uint16_t last_bytes, len;
int i, t;
/* Send 3 Clocks with TMS = 1 0 0 to reach SHIFTDR*/
tap_tms(ftdi, 1, 0);
tap_tms(ftdi, 0, 0);
tap_tms(ftdi, 0, 0);
in_bytes = in_bits / 8;
last_bits = in_bits % 8;
@ -157,12 +159,28 @@ int tap_shift_dr_bits(struct ftdi_context *ftdi,
} else
tap_tms(ftdi, 1, 0);
tap_tms(ftdi, 1, 0);
tap_tms(ftdi, 0, 0); /* Goto RTI */
return 0;
}
int tap_shift_dr_bits(struct ftdi_context *ftdi,
uint8_t *in, uint32_t in_bits,
uint8_t *out)
{
int ret;
/* Send 3 Clocks with TMS = 1 0 0 to reach SHIFTDR*/
tap_tms(ftdi, 1, 0);
tap_tms(ftdi, 0, 0);
tap_tms(ftdi, 0, 0);
ret = tap_shift_dr_bits_only(ftdi, in, in_bits, out);
tap_tms(ftdi, 1, 0);
tap_tms(ftdi, 0, 0); /* Goto RTI */
return ret;
}
int ft232_flush(struct ftdi_context *ftdi)
{
uint8_t buf[1] = { SEND_IMMEDIATE };

View File

@ -31,6 +31,10 @@
int tap_tms(struct ftdi_context *ftdi, int tms, uint8_t bit7);
void tap_reset_rti(struct ftdi_context *ftdi);
int tap_shift_ir_only(struct ftdi_context *ftdi, uint8_t ir);
int tap_shift_dr_bits_only(struct ftdi_context *ftdi,
uint8_t *in, uint32_t in_bits,
uint8_t *out);
int tap_shift_ir(struct ftdi_context *ftdi, uint8_t ir);
int tap_shift_dr_bits(struct ftdi_context *ftdi,
uint8_t *in, uint32_t in_bits,