SimonQian <simonqian@SimonQian.com>:

Changes svf_check_tdo function (checks tdo output matches desired values):
- call buf_cmp_mask function to do comparison instead of using a loop.
- fixes a bug when data length is equal to sizeof(int).


git-svn-id: svn://svn.berlios.de/openocd/trunk@1900 b42882b7-edfa-0310-969c-e2dbd0fdcd60
This commit is contained in:
zwelch 2009-05-24 00:47:49 +00:00
parent 7e11f08a77
commit 8717ed04aa
1 changed files with 23 additions and 20 deletions

View File

@ -628,34 +628,37 @@ static int svf_copy_hexstring_to_binary(char *str, u8 **bin, int orig_bit_len, i
static int svf_check_tdo(void) static int svf_check_tdo(void)
{ {
int i, j, byte_len, index; int i, len, index;
for (i = 0; i < svf_check_tdo_para_index; i++) for (i = 0; i < svf_check_tdo_para_index; i++)
{ {
if (svf_check_tdo_para[i].enabled)
{
byte_len = (svf_check_tdo_para[i].bit_len + 7) >> 3;
index = svf_check_tdo_para[i].buffer_offset; index = svf_check_tdo_para[i].buffer_offset;
for (j = 0; j < byte_len; j++) len = svf_check_tdo_para[i].bit_len;
if ((svf_check_tdo_para[i].enabled)
&& buf_cmp_mask(&svf_tdi_buffer[index], &svf_tdo_buffer[index], &svf_mask_buffer[index], len))
{ {
if ((svf_tdi_buffer[index + j] & svf_mask_buffer[index + j]) != svf_tdo_buffer[index + j]) unsigned bitmask;
{
unsigned bitmask = (1 << svf_check_tdo_para[i].bit_len) - 1;
unsigned received, expected, tapmask; unsigned received, expected, tapmask;
if (svf_check_tdo_para[i].bit_len >= 32)
{
bitmask = 0xFFFFFFFF;
}
else
{
bitmask = (1 << svf_check_tdo_para[i].bit_len) - 1;
}
memcpy(&received, svf_tdi_buffer + index, sizeof(unsigned)); memcpy(&received, svf_tdi_buffer + index, sizeof(unsigned));
memcpy(&expected, svf_tdo_buffer + index, sizeof(unsigned)); memcpy(&expected, svf_tdo_buffer + index, sizeof(unsigned));
memcpy(&tapmask, svf_mask_buffer + index, sizeof(unsigned)); memcpy(&tapmask, svf_mask_buffer + index, sizeof(unsigned));
LOG_ERROR("tdo check error at line %d, " LOG_ERROR("tdo check error at line %d",
"read = 0x%X, want = 0x%X, mask = 0x%X", svf_check_tdo_para[i].line_num);
svf_check_tdo_para[i].line_num, LOG_ERROR("read = 0x%X, want = 0x%X, mask = 0x%X",
received & bitmask, received & bitmask,
expected & bitmask, expected & bitmask,
tapmask & bitmask); tapmask & bitmask);
return ERROR_FAIL; return ERROR_FAIL;
} }
} }
}
}
svf_check_tdo_para_index = 0; svf_check_tdo_para_index = 0;
return ERROR_OK; return ERROR_OK;