Пример #1
0
static void amt_jtagaccel_scan(bool ir_scan, enum scan_type type, uint8_t *buffer, int scan_size)
{
	int bits_left = scan_size;
	int bit_count = 0;
	tap_state_t saved_end_state = tap_get_end_state();
	uint8_t aw_tdi_option;
	uint8_t dw_tdi_scan;
	uint8_t dr_tdo;
	uint8_t aw_tms_scan;
	uint8_t tms_scan[2];
	int jtag_speed_var;
	int retval = jtag_get_speed(&jtag_speed_var);
	assert(retval == ERROR_OK);

	if (ir_scan)
		amt_jtagaccel_end_state(TAP_IRSHIFT);
	else
		amt_jtagaccel_end_state(TAP_DRSHIFT);

	/* Only move if we're not already there */
	if (tap_get_state() != tap_get_end_state())
		amt_jtagaccel_state_move();

	amt_jtagaccel_end_state(saved_end_state);

	/* handle unaligned bits at the beginning */
	if ((scan_size - 1) % 8) {
		aw_tdi_option = 0x30 | (((scan_size - 1) % 8) - 1);
		AMT_AW(aw_tdi_option);

		dw_tdi_scan = buf_get_u32(buffer, bit_count, (scan_size - 1) % 8) & 0xff;
		AMT_DW(dw_tdi_scan);
		if (jtag_speed_var > 3 || rtck_enabled)
			amt_wait_scan_busy();

		if ((type == SCAN_IN) || (type == SCAN_IO)) {
			AMT_DR(dr_tdo);
			dr_tdo = dr_tdo >> (8 - ((scan_size - 1) % 8));
			buf_set_u32(buffer, bit_count, (scan_size - 1) % 8, dr_tdo);
		}
Пример #2
0
void amt_jtagaccel_scan(int ir_scan, enum scan_type type, u8 *buffer, int scan_size)
{
	int bits_left = scan_size;
	int bit_count = 0;
	tap_state_t saved_end_state = tap_get_end_state();
	u8 aw_tdi_option;
	u8 dw_tdi_scan;
	u8 dr_tdo;
	u8 aw_tms_scan;
	u8 tms_scan[2];

	if (ir_scan)
		amt_jtagaccel_end_state(TAP_IRSHIFT);
	else
		amt_jtagaccel_end_state(TAP_DRSHIFT);

	amt_jtagaccel_state_move();
	amt_jtagaccel_end_state(saved_end_state);

	/* handle unaligned bits at the beginning */
	if ((scan_size - 1) % 8)
	{
		aw_tdi_option = 0x30 | (((scan_size - 1) % 8) - 1);
		AMT_AW(aw_tdi_option);

		dw_tdi_scan = buf_get_u32(buffer, bit_count, (scan_size - 1) % 8) & 0xff;
		AMT_DW(dw_tdi_scan);
		if (jtag_speed > 3 || rtck_enabled)
			amt_wait_scan_busy();

		if ((type == SCAN_IN) || (type == SCAN_IO))
		{
			AMT_DR(dr_tdo);
			dr_tdo = dr_tdo >> (8 - ((scan_size - 1) % 8));
			buf_set_u32(buffer, bit_count, (scan_size - 1) % 8, dr_tdo);
		}