54 uint8_t scan_size_bytes, bits_last_byte;
55 uint8_t tms_count_start, tms_count_end;
56 uint8_t tms_sequence_start, tms_sequence_end;
57 uint8_t tdo_data, i, j;
62 scan_size_bytes = OUT2BUF[out_offset];
63 bits_last_byte = OUT2BUF[out_offset + 1];
64 tms_count_start = (OUT2BUF[out_offset + 2] >> 4) & 0x0F;
65 tms_count_end = OUT2BUF[out_offset + 2] & 0x0F;
66 tms_sequence_start = OUT2BUF[out_offset + 3];
67 tms_sequence_end = OUT2BUF[out_offset + 4];
69 if (tms_count_start > 0)
75 for (i = 0; i < scan_size_bytes - 1; i++) {
78 for (j = 0; j < 8; j++) {
80 tdo_data = tdo_data >> 1;
88 IN2BUF[i + in_offset] = tdo_data;
94 for (j = 0; j < bits_last_byte; j++) {
96 if ((j == bits_last_byte - 1) && (tms_count_end > 0)) {
99 tms_sequence_end = tms_sequence_end >> 1;
103 tdo_data = tdo_data >> 1;
104 OUTB = (outb_buffer |
PIN_TCK);
109 tdo_data = tdo_data >> (8 - bits_last_byte);
112 IN2BUF[i + in_offset] = tdo_data;
115 if (tms_count_end > 0)
131 uint8_t scan_size_bytes, bits_last_byte;
132 uint8_t tms_count_start, tms_count_end;
133 uint8_t tms_sequence_start, tms_sequence_end;
134 uint8_t tdo_data, i, j, k;
139 scan_size_bytes = OUT2BUF[out_offset];
140 bits_last_byte = OUT2BUF[out_offset + 1];
141 tms_count_start = (OUT2BUF[out_offset + 2] >> 4) & 0x0F;
142 tms_count_end = OUT2BUF[out_offset + 2] & 0x0F;
143 tms_sequence_start = OUT2BUF[out_offset + 3];
144 tms_sequence_end = OUT2BUF[out_offset + 4];
146 if (tms_count_start > 0)
152 for (i = 0; i < scan_size_bytes - 1; i++) {
155 for (j = 0; j < 8; j++) {
159 tdo_data = tdo_data >> 1;
161 OUTB = (outb_buffer |
PIN_TCK);
170 IN2BUF[i + in_offset] = tdo_data;
176 for (j = 0; j < bits_last_byte; j++) {
178 if ((j == bits_last_byte - 1) && (tms_count_end > 0)) {
181 tms_sequence_end = tms_sequence_end >> 1;
187 tdo_data = tdo_data >> 1;
189 OUTB = (outb_buffer |
PIN_TCK);
196 tdo_data = tdo_data >> (8 - bits_last_byte);
199 IN2BUF[i + in_offset] = tdo_data;
202 if (tms_count_end > 0)
219 uint8_t scan_size_bytes, bits_last_byte;
220 uint8_t tms_count_start, tms_count_end;
221 uint8_t tms_sequence_start, tms_sequence_end;
222 uint8_t tdi_data, i, j;
227 scan_size_bytes = OUT2BUF[out_offset];
228 bits_last_byte = OUT2BUF[out_offset + 1];
229 tms_count_start = (OUT2BUF[out_offset + 2] >> 4) & 0x0F;
230 tms_count_end = OUT2BUF[out_offset + 2] & 0x0F;
231 tms_sequence_start = OUT2BUF[out_offset + 3];
232 tms_sequence_end = OUT2BUF[out_offset + 4];
234 if (tms_count_start > 0)
240 for (i = 0; i < scan_size_bytes - 1; i++) {
241 tdi_data = OUT2BUF[i + out_offset + 5];
243 for (j = 0; j < 8; j++) {
250 tdi_data = tdi_data >> 1;
251 OUTB = (outb_buffer |
PIN_TCK);
255 tdi_data = OUT2BUF[i + out_offset + 5];
258 for (j = 0; j < bits_last_byte; j++) {
265 if ((j == bits_last_byte - 1) && (tms_count_end > 0)) {
268 tms_sequence_end = tms_sequence_end >> 1;
272 tdi_data = tdi_data >> 1;
273 OUTB = (outb_buffer |
PIN_TCK);
277 if (tms_count_end > 0)
294 uint8_t scan_size_bytes, bits_last_byte;
295 uint8_t tms_count_start, tms_count_end;
296 uint8_t tms_sequence_start, tms_sequence_end;
297 uint8_t tdi_data, i, j, k;
302 scan_size_bytes = OUT2BUF[out_offset];
303 bits_last_byte = OUT2BUF[out_offset + 1];
304 tms_count_start = (OUT2BUF[out_offset + 2] >> 4) & 0x0F;
305 tms_count_end = OUT2BUF[out_offset + 2] & 0x0F;
306 tms_sequence_start = OUT2BUF[out_offset + 3];
307 tms_sequence_end = OUT2BUF[out_offset + 4];
309 if (tms_count_start > 0)
315 for (i = 0; i < scan_size_bytes - 1; i++) {
316 tdi_data = OUT2BUF[i + out_offset + 5];
318 for (j = 0; j < 8; j++) {
327 tdi_data = tdi_data >> 1;
329 OUTB = (outb_buffer |
PIN_TCK);
335 tdi_data = OUT2BUF[i + out_offset + 5];
338 for (j = 0; j < bits_last_byte; j++) {
345 if ((j == bits_last_byte - 1) && (tms_count_end > 0)) {
348 tms_sequence_end = tms_sequence_end >> 1;
354 tdi_data = tdi_data >> 1;
356 OUTB = (outb_buffer |
PIN_TCK);
362 if (tms_count_end > 0)
379 uint8_t scan_size_bytes, bits_last_byte;
380 uint8_t tms_count_start, tms_count_end;
381 uint8_t tms_sequence_start, tms_sequence_end;
382 uint8_t tdi_data, tdo_data, i, j;
387 scan_size_bytes = OUT2BUF[out_offset];
388 bits_last_byte = OUT2BUF[out_offset + 1];
389 tms_count_start = (OUT2BUF[out_offset + 2] >> 4) & 0x0F;
390 tms_count_end = OUT2BUF[out_offset + 2] & 0x0F;
391 tms_sequence_start = OUT2BUF[out_offset + 3];
392 tms_sequence_end = OUT2BUF[out_offset + 4];
394 if (tms_count_start > 0)
400 for (i = 0; i < scan_size_bytes - 1; i++) {
401 tdi_data = OUT2BUF[i + out_offset + 5];
404 for (j = 0; j < 8; j++) {
411 tdi_data = tdi_data >> 1;
412 OUTB = (outb_buffer |
PIN_TCK);
413 tdo_data = tdo_data >> 1;
420 IN2BUF[i + in_offset] = tdo_data;
423 tdi_data = OUT2BUF[i + out_offset + 5];
427 for (j = 0; j < bits_last_byte; j++) {
434 if ((j == bits_last_byte - 1) && (tms_count_end > 0)) {
437 tms_sequence_end = tms_sequence_end >> 1;
441 tdi_data = tdi_data >> 1;
442 OUTB = (outb_buffer |
PIN_TCK);
443 tdo_data = tdo_data >> 1;
448 tdo_data = tdo_data >> (8 - bits_last_byte);
451 IN2BUF[i + in_offset] = tdo_data;
454 if (tms_count_end > 0)
471 uint8_t scan_size_bytes, bits_last_byte;
472 uint8_t tms_count_start, tms_count_end;
473 uint8_t tms_sequence_start, tms_sequence_end;
474 uint8_t tdi_data, tdo_data, i, j, k;
479 scan_size_bytes = OUT2BUF[out_offset];
480 bits_last_byte = OUT2BUF[out_offset + 1];
481 tms_count_start = (OUT2BUF[out_offset + 2] >> 4) & 0x0F;
482 tms_count_end = OUT2BUF[out_offset + 2] & 0x0F;
483 tms_sequence_start = OUT2BUF[out_offset + 3];
484 tms_sequence_end = OUT2BUF[out_offset + 4];
486 if (tms_count_start > 0)
492 for (i = 0; i < scan_size_bytes - 1; i++) {
493 tdi_data = OUT2BUF[i + out_offset + 5];
496 for (j = 0; j < 8; j++) {
505 tdi_data = tdi_data >> 1;
507 OUTB = (outb_buffer |
PIN_TCK);
510 tdo_data = tdo_data >> 1;
517 IN2BUF[i + in_offset] = tdo_data;
520 tdi_data = OUT2BUF[i + out_offset + 5];
524 for (j = 0; j < bits_last_byte; j++) {
531 if ((j == bits_last_byte - 1) && (tms_count_end > 0)) {
534 tms_sequence_end = tms_sequence_end >> 1;
540 tdi_data = tdi_data >> 1;
542 OUTB = (outb_buffer |
PIN_TCK);
545 tdo_data = tdo_data >> 1;
550 tdo_data = tdo_data >> (8 - bits_last_byte);
553 IN2BUF[i + in_offset] = tdo_data;
556 if (tms_count_end > 0)
570 uint8_t outb_buffer = OUTB & ~(
PIN_TCK);
572 for (i = 0; i <
count; i++) {
589 uint8_t outb_buffer = OUTB & ~(
PIN_TCK);
591 for (i = 0; i <
count; i++) {
612 uint8_t outb_buffer = OUTB & ~(
PIN_TCK);
615 for (i = 0; i <
count; i++) {
623 sequence = sequence >> 1;
639 uint8_t outb_buffer = OUTB & ~(
PIN_TCK);
642 for (i = 0; i <
count; i++) {
652 sequence = sequence >> 1;
668 uint8_t input_signal_state, output_signal_state;
670 input_signal_state = 0;
671 output_signal_state = 0;
689 return ((uint16_t)input_signal_state << 8) | ((uint16_t)output_signal_state);
714 uint8_t scan_io, uint8_t tck, uint8_t tms)
uint8_t delay_scan_in
Delay value for SCAN_IN operations with less than maximum TCK frequency.
uint16_t jtag_get_signals(void)
Get current JTAG signal states.
static struct ublast_lowlevel low
uint8_t delay_tck
Delay value for CLOCK_TCK operations with less than maximum frequency.
void jtag_slow_scan_io(uint8_t out_offset, uint8_t in_offset)
Perform bidirectional JTAG SCAN operation at maximum TCK frequency.
void jtag_set_signals(uint8_t low, uint8_t high)
Set state of JTAG output signals.
void jtag_configure_tck_delay(uint8_t scan_in, uint8_t scan_out, uint8_t scan_io, uint8_t tck, uint8_t tms)
Configure TCK delay parameters.
uint8_t delay_scan_out
Delay value for SCAN_OUT operations with less than maximum TCK frequency.
Definition of the commands supported by the OpenULINK firmware.
void jtag_scan_io(uint8_t out_offset, uint8_t in_offset)
Perform bidirectional JTAG SCAN operation at maximum TCK frequency.
void jtag_slow_clock_tck(uint16_t count)
Generate TCK clock cycles at variable frequency.
void jtag_scan_out(uint8_t out_offset)
Perform JTAG SCAN-OUT operation at maximum TCK frequency.
void jtag_slow_scan_in(uint8_t out_offset, uint8_t in_offset)
Perform JTAG SCAN-IN operation at variable TCK frequency.
void jtag_clock_tck(uint16_t count)
Generate TCK clock cycles.
void jtag_clock_tms(uint8_t count, uint8_t sequence)
Perform TAP FSM state transitions at maximum TCK frequency.
uint8_t delay_scan_io
Delay value for SCAN_IO operations with less than maximum TCK frequency.
uint8_t delay_tms
Delay value for CLOCK_TMS operations with less than maximum frequency.
#define MASK_PORTB_DIRECTION_OUT
void jtag_slow_clock_tms(uint8_t count, uint8_t sequence)
Perform TAP-FSM state transitions at less than maximum TCK frequency.
void jtag_slow_scan_out(uint8_t out_offset)
Perform JTAG SCAN-OUT operation at maximum TCK frequency.
void jtag_scan_in(uint8_t out_offset, uint8_t in_offset)
Perform JTAG SCAN-IN operation at maximum TCK frequency.