static uint64_t dsu_readDR(urj_chain_t *chain, int size, uint64_t wdata) { urj_tap_register_t *rwr = urj_tap_register_alloc(size); urj_tap_register_t *rrd = urj_tap_register_fill(urj_tap_register_alloc(size), 0); uint64_t rdata; urj_tap_register_set_value(rwr, wdata); urj_tap_capture_dr(chain); urj_tap_shift_register(chain, rwr, rrd, URJ_CHAIN_EXITMODE_IDLE); rdata = urj_tap_register_get_value(rrd); urj_tap_register_free(rwr); urj_tap_register_free(rrd); return rdata; }
urj_tap_register_t * urj_tap_register_realloc (urj_tap_register_t *tr, int new_len) { if (!tr) return urj_tap_register_alloc (new_len); if (new_len < 1) { urj_error_set (URJ_ERROR_INVALID, "new_len < 1"); return NULL; } tr->data = realloc (tr->data, new_len); if (!tr->data) { urj_error_set (URJ_ERROR_OUT_OF_MEMORY, "realloc(%d) fails", new_len); return NULL; } if (tr->len < new_len) memset (tr->data + tr->len, 0, (new_len - tr->len)); tr->len = new_len; return tr; }
static void dsu_writeDR(urj_chain_t *chain, int size, uint64_t wdata) { urj_tap_register_t *rwr = urj_tap_register_alloc(size); urj_tap_register_set_value(rwr, wdata); urj_tap_capture_dr(chain); urj_tap_shift_register(chain, rwr, NULL, URJ_CHAIN_EXITMODE_IDLE); urj_tap_register_free(rwr); }
static void dsu_writeIR(urj_chain_t *chain, int size, unsigned int val) { urj_tap_register_t *rwr = urj_tap_register_alloc(size); urj_tap_register_set_value(rwr, val); urj_tap_capture_ir(chain); urj_tap_shift_register(chain, rwr, NULL, URJ_CHAIN_EXITMODE_IDLE); urj_tap_register_free(rwr); /* urj_tap_capture_ir(chain); */ /* urj_tap_register_set_value(wir, val); */ /* urj_tap_shift_register(chain, wir, NULL, URJ_CHAIN_EXITMODE_IDLE); */ }
urj_tap_register_t * urj_tap_register_duplicate (const urj_tap_register_t *tr) { if (!tr) { urj_error_set (URJ_ERROR_INVALID, "tr == NULL"); return NULL; } return urj_tap_register_init (urj_tap_register_alloc (tr->len), urj_tap_register_get_string (tr)); }
static void tmc_print_ids(urj_chain_t *chain, int channel) { urj_tap_register_t *reg = urj_tap_register_alloc(32); tmc_init(); hudi_init(); tmc_reset_tmc(chain); printf("DeviceId = 0x%08x\n", tmc_read_DeviceId(chain)); printf("PrivateId = 0x%08x\n", tmc_read_PrivateId(chain)); printf("OptionId = 0x%08x\n", tmc_read_OptionId(chain)); printf("ExtraId = 0x%08x\n", tmc_read_ExtraId(chain)); printf("ChipId = 0x%08x\n", tmc_read_chip_id(chain)); tmc_reset_and_bypass(chain, channel); hudi_initialState(chain); hudi_printInternalStatus(chain); printf("SDSR = 0x%08x\n", hudi_readSDSR(chain)); urj_tap_register_free(reg); }
void dsu_init(void) { if (dsurir == NULL) dsurir = urj_tap_register_fill(urj_tap_register_alloc(DSU_IR_LEN), 0); if (dsuwir == NULL) dsuwir = urj_tap_register_fill(urj_tap_register_alloc(DSU_IR_LEN), 0); }