/***************************************************************************
- * Copyright (C) 2007-2008 by Øyvind Harboe *
+ * Copyright (C) 2007-2009 by Øyvind Harboe *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
#define TEST_MANUAL() 0
#if 0
-int diag_printf( const char *fmt, ... );
+int diag_printf(const char *fmt, ...);
#define ZY1000_POKE(a, b) HAL_WRITE_UINT32(a, b); diag_printf("poke 0x%08x,0x%08x\n", a, b)
#define ZY1000_PEEK(a, b) HAL_READ_UINT32(a, b); diag_printf("peek 0x%08x = 0x%08x\n", a, b)
#else
-#define ZY1000_POKE(a, b) HAL_WRITE_UINT32(a, b)
#define ZY1000_PEEK(a, b) HAL_READ_UINT32(a, b)
+#define ZY1000_POKE(a, b) HAL_WRITE_UINT32(a, b);\
+ {/* This will flush the bridge FIFO. Overflowed bridge FIFO fails. We must \
+ flush every "often". No precise system has been found, but 4 seems solid. \
+ */ \
+ static int overflow_counter = 0; \
+ if (++overflow_counter >= 1) \
+ { \
+ /* clear FIFO */ \
+ cyg_uint32 empty; ZY1000_PEEK(ZY1000_JTAG_BASE + 0x10, empty); \
+ overflow_counter = 0; \
+ } \
+ }
#endif
// FIFO empty?
{
int i;
setCurrentState(state);
- for (i = 0; i<repeat; i++)
+ for (i = 0; i < repeat; i++)
{
int tms;
tms = 0;
#endif
#else
/* maximum debug version */
- if ((repeat>0) && ((state == TAP_DRSHIFT)||(state == TAP_SI)))
+ if ((repeat > 0) && ((state == TAP_DRSHIFT)||(state == TAP_SI)))
{
int i;
/* sample shift register for every bit. */
- for (i = 0; i<repeat-1; i++)
+ for (i = 0; i < repeat-1; i++)
{
sampleShiftRegister();
ZY1000_POKE(ZY1000_JTAG_BASE + 0xc, value >> i);
-static __inline__ void interface_jtag_add_dr_out_core(jtag_tap_t *target_tap,
+static __inline__ void interface_jtag_add_dr_out_core(struct jtag_tap *target_tap,
int num_fields,
const int *num_bits,
const uint32_t *value,
{
enum tap_state pause_state = TAP_DRSHIFT;
- jtag_tap_t *tap, *nextTap;
+ struct jtag_tap *tap, *nextTap;
for (tap = jtag_tap_next_enabled(NULL); tap!= NULL; tap = nextTap)
{
nextTap = jtag_tap_next_enabled(tap);
if (tap == target_tap)
{
int j;
- for (j = 0; j<(num_fields-1); j++)
+ for (j = 0; j < (num_fields-1); j++)
{
shiftValueInner(TAP_DRSHIFT, TAP_DRSHIFT, num_bits[j], value[j]);
}
}
}
-static __inline__ void interface_jtag_add_dr_out(jtag_tap_t *target_tap,
+static __inline__ void interface_jtag_add_dr_out(struct jtag_tap *target_tap,
int num_fields,
const int *num_bits,
const uint32_t *value,