Georg Acher <acher@in.tum.de> corrected TDO sampling
git-svn-id: svn://svn.berlios.de/openocd/trunk@1016 b42882b7-edfa-0310-969c-e2dbd0fdcd60
This commit is contained in:
parent
4eda44db36
commit
9807a00206
|
@ -172,35 +172,33 @@ void bitbang_scan(int ir_scan, enum scan_type type, u8 *buffer, int scan_size)
|
||||||
|
|
||||||
for (bit_cnt = 0; bit_cnt < scan_size; bit_cnt++)
|
for (bit_cnt = 0; bit_cnt < scan_size; bit_cnt++)
|
||||||
{
|
{
|
||||||
|
int val=0;
|
||||||
|
int tms=(bit_cnt==scan_size-1) ? 1 : 0;
|
||||||
|
int tdi;
|
||||||
|
int bytec=bit_cnt/8;
|
||||||
|
int bcval=1<<(bit_cnt % 8);
|
||||||
|
|
||||||
/* if we're just reading the scan, but don't care about the output
|
/* if we're just reading the scan, but don't care about the output
|
||||||
* default to outputting 'low', this also makes valgrind traces more readable,
|
* default to outputting 'low', this also makes valgrind traces more readable,
|
||||||
* as it removes the dependency on an uninitialised value
|
* as it removes the dependency on an uninitialised value
|
||||||
*/
|
*/
|
||||||
if ((type != SCAN_IN) && ((buffer[bit_cnt/8] >> (bit_cnt % 8)) & 0x1))
|
tdi=0;
|
||||||
{
|
if ((type != SCAN_IN) && (buffer[bytec] & bcval))
|
||||||
bitbang_interface->write(0, (bit_cnt==scan_size-1) ? 1 : 0, 1);
|
tdi=1;
|
||||||
bitbang_interface->write(1, (bit_cnt==scan_size-1) ? 1 : 0, 1);
|
|
||||||
} else {
|
bitbang_interface->write(0, tms, tdi);
|
||||||
bitbang_interface->write(0, (bit_cnt==scan_size-1) ? 1 : 0, 0);
|
|
||||||
bitbang_interface->write(1, (bit_cnt==scan_size-1) ? 1 : 0, 0);
|
if (type!=SCAN_OUT)
|
||||||
}
|
val=bitbang_interface->read();
|
||||||
|
|
||||||
|
bitbang_interface->write(1, tms, tdi);
|
||||||
|
|
||||||
if (type != SCAN_OUT)
|
if (type != SCAN_OUT)
|
||||||
{
|
{
|
||||||
/*
|
if (val)
|
||||||
TDO should be sampled on the rising edge, and will change
|
buffer[bytec] |= bcval;
|
||||||
on the falling edge.
|
|
||||||
|
|
||||||
Because there is no way to read the signal exactly at the rising edge,
|
|
||||||
read after the rising edge.
|
|
||||||
|
|
||||||
This is plain IEEE 1149 JTAG - nothing specific to the OpenOCD or its JTAG
|
|
||||||
API.
|
|
||||||
*/
|
|
||||||
if (bitbang_interface->read())
|
|
||||||
buffer[(bit_cnt)/8] |= 1 << ((bit_cnt) % 8);
|
|
||||||
else
|
else
|
||||||
buffer[(bit_cnt)/8] &= ~(1 << ((bit_cnt) % 8));
|
buffer[bytec] &= ~bcval;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue