On Wed, May 13, 2009 at 10:29 AM, David Brownell <davi...@pacbell.net> wrote:
> On Tuesday 12 May 2009, Ųyvind Harboe wrote:
>> I've been thinking about whether some helper fn's to
>> use 32 bit arrays instead of 8 bit input/output might make sense.
>
> Why 32 bits instead of e.g. just plain "unsigned long"?

We're talking about bits to be clocked in/out not integers as such...

32 bits is just a convenient size that works well on 32 & 64 bit hosts.

Below is the current 32 bit version of clocking out drscan's. This has
been implemented for quite some time now and is exploited by
embedded hosts for ARM7/9 memory DCC writes...

>From jtag.h:

/* jtag_add_dr_out() is a version of jtag_add_dr_scan() which
 * only scans data out. It operates on 32 bit integers instead
 * of 8 bit, which makes it a better impedance match with
 * the calling code which often operate on 32 bit integers.
 *
 * Current or end_state can not be TAP_RESET. end_state can be TAP_INVALID
 *
 * num_bits[i] is the number of bits to clock out from value[i] LSB first.
 *
 * If the device is in bypass, then that is an error condition in
 * the caller code that is not detected by this fn, whereas jtag_add_dr_scan()
 * does detect it. Similarly if the device is not in bypass, data must
 * be passed to it.
 *
 * If anything fails, then jtag_error will be set and jtag_execute() will
 * return an error. There is no way to determine if there was a failure
 * during this function call.
 *
 * This is an inline fn to speed up embedded hosts. Also note that
 * interface_jtag_add_dr_out() can be a *small* inline function for
 * embedded hosts.
 *
 * There is no jtag_add_dr_outin() version of this fn that also allows
 * clocking data back in. Patches gladly accepted!
 */
static __inline__ void jtag_add_dr_out(jtag_tap_t* tap, int
num_fields, const int* num_bits, const u32* value,
                tap_state_t end_state)


Example:

                u32 values[1];
                int num_bits[1];
                values[0]=new_scan_chain;
                num_bits[0]=jtag_info->scann_size;
                
                jtag_add_dr_out(jtag_info->tap,
                                1,
                                num_bits,
                                values,
                                TAP_INVALID);



-- 
Øyvind Harboe
Embedded software and hardware consulting services
http://consulting.zylin.com
_______________________________________________
Openocd-development mailing list
Openocd-development@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/openocd-development

Reply via email to