示例#1
0
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);
}
示例#2
0
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); */
}
示例#3
0
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;
}
示例#4
0
文件: register.c 项目: bgiffel/urjtag
int
urj_tap_register_set_string (urj_tap_register_t *tr, const char *str)
{
    if (!tr)
    {
        urj_error_set (URJ_ERROR_INVALID, "tr == NULL");
        return URJ_STATUS_FAIL;
    }

    if (strncmp (str, "0x", 2) == 0)
    {
        /* Hex values */
        uint64_t val;

        if (sscanf (str, "%"PRIX64, &val) != 1)
        {
            urj_error_set (URJ_ERROR_SYNTAX,
                           _("invalid hex string '%s'"),
                           str);
            return URJ_STATUS_FAIL;
        }
        return urj_tap_register_set_value (tr, val);
    }
    else
    {
        /* Bit string */
        unsigned int bit;

        if (strspn (str, "01") != strlen (str))
        {
            urj_error_set (URJ_ERROR_SYNTAX,
                           _("bit patterns should be 0s and 1s, not '%s'"),
                           str);
            return URJ_STATUS_FAIL;
        }
        else if (tr->len != strlen (str))
        {
            urj_error_set (URJ_ERROR_OUT_OF_BOUNDS,
                           _("register length %d mismatch: %zd"),
                           tr->len, strlen (str));
            return URJ_STATUS_FAIL;
        }

        for (bit = 0; str[bit]; ++bit)
            tr->data[tr->len - 1 - bit] = (str[bit] == '1');

        return URJ_STATUS_OK;
    }
}