diff options
author | drath <drath@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2007-03-15 13:36:44 +0000 |
---|---|---|
committer | drath <drath@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2007-03-15 13:36:44 +0000 |
commit | cb582796539d35920e918bec2d0118eb3736d40e (patch) | |
tree | 0c46f343c31094c65d196c66cc821e0a6d43bf49 /src/jtag | |
parent | e0c2e30660bef422744e885ab32c26c58978a8a1 (diff) | |
download | openocd_libswd-cb582796539d35920e918bec2d0118eb3736d40e.tar.gz openocd_libswd-cb582796539d35920e918bec2d0118eb3736d40e.tar.bz2 openocd_libswd-cb582796539d35920e918bec2d0118eb3736d40e.tar.xz openocd_libswd-cb582796539d35920e918bec2d0118eb3736d40e.zip |
- reworked file i/o. every fileaccess (target, flash, nand, in future configuration, too) should now go through the fileio subsystem
- added support for reading IHEX files (through fileio)
- load/dump_binary renamed to the more generic load/dump_image <file> <address> ['bin'|'ihex']
- added NAND framework (preliminary)
- added support for the LPC3180 SLC and MLC NAND controllers (preliminary)
- fix initialization for parport
- gw16012 fixes/cleanups
- added EmbeddedICE version 7 (preliminary, reported on two LPC23xx devices so far)
- added 'arm7_9 etm <target#>' configuration command to enable access to the ETM registers
git-svn-id: svn://svn.berlios.de/openocd/trunk@132 b42882b7-edfa-0310-969c-e2dbd0fdcd60
Diffstat (limited to 'src/jtag')
-rw-r--r-- | src/jtag/gw16012.c | 33 | ||||
-rw-r--r-- | src/jtag/jtag.c | 6 | ||||
-rw-r--r-- | src/jtag/jtag.h | 2 | ||||
-rw-r--r-- | src/jtag/parport.c | 3 |
4 files changed, 33 insertions, 11 deletions
diff --git a/src/jtag/gw16012.c b/src/jtag/gw16012.c index 218ac4c6..8211fee3 100644 --- a/src/jtag/gw16012.c +++ b/src/jtag/gw16012.c @@ -288,13 +288,17 @@ void gw16012_scan(int ir_scan, enum scan_type type, u8 *buffer, int scan_size) enum tap_state saved_end_state = end_state; u8 scan_out, scan_in; - if (ir_scan) - gw16012_end_state(TAP_SI); - else - gw16012_end_state(TAP_SD); + /* only if we're not already in the correct Shift state */ + if (!((!ir_scan && (cur_state == TAP_SD)) || (ir_scan && (cur_state == TAP_SI)))) + { + if (ir_scan) + gw16012_end_state(TAP_SI); + else + gw16012_end_state(TAP_SD); - gw16012_state_move(); - gw16012_end_state(saved_end_state); + gw16012_state_move(); + gw16012_end_state(saved_end_state); + } while (type == SCAN_OUT && ((bits_left - 1) > 7)) { @@ -309,6 +313,9 @@ void gw16012_scan(int ir_scan, enum scan_type type, u8 *buffer, int scan_size) while (bits_left-- > 0) { u8 tms = 0; + + scan_out = buf_get_u32(buffer, bit_count, 1); + if (bits_left == 0) /* last bit */ { if ((ir_scan && (end_state == TAP_SI)) @@ -321,14 +328,15 @@ void gw16012_scan(int ir_scan, enum scan_type type, u8 *buffer, int scan_size) tms = 2; } } - - scan_out = buf_get_u32(buffer, bit_count, 1); + gw16012_data(scan_out | tms); + if (type != SCAN_OUT) { gw16012_input(&scan_in); buf_set_u32(buffer, bit_count, 1, ((scan_in & 0x08) >> 3)); - } + } + bit_count++; } @@ -530,6 +538,13 @@ int gw16012_init(void) return ERROR_JTAG_INIT_FAILED; } DEBUG("...privileges granted"); + + /* make sure parallel port is in right mode (clear tristate and interrupt */ +#ifdef __FreeBSD__ + outb(gw16012_port + 2, 0x0); +#else + outb(0x0, gw16012_port + 2); +#endif #endif /* PARPORT_USE_PPDEV */ gw16012_input(&status_port); diff --git a/src/jtag/jtag.c b/src/jtag/jtag.c index a3e8cff8..b8d963b1 100644 --- a/src/jtag/jtag.c +++ b/src/jtag/jtag.c @@ -1143,6 +1143,7 @@ void jtag_sleep(u32 us) */ int jtag_examine_chain() { + jtag_device_t *device = jtag_devices; scan_field_t field; u8 idcode_buffer[JTAG_MAX_CHAIN_SIZE * 4]; int i; @@ -1204,6 +1205,11 @@ int jtag_examine_chain() break; } + if (device) + { + device->idcode = idcode; + device = device->next; + } device_count++; manufacturer = (idcode & 0xffe) >> 1; diff --git a/src/jtag/jtag.h b/src/jtag/jtag.h index ad038ae5..29e3da60 100644 --- a/src/jtag/jtag.h +++ b/src/jtag/jtag.h @@ -25,7 +25,7 @@ #include "command.h" -#if 1 +#if 0 #define _DEBUG_JTAG_IO_ #endif diff --git a/src/jtag/parport.c b/src/jtag/parport.c index 83006d86..6386940e 100644 --- a/src/jtag/parport.c +++ b/src/jtag/parport.c @@ -94,6 +94,7 @@ cable_t cables[] = { /* name tdo trst tms tck tdi srst o_inv i_inv init */ { "wiggler", 0x80, 0x10, 0x02, 0x04, 0x08, 0x01, 0x01, 0x80, 0x80 }, + { "wiggler_ntrst_inverted", 0x80, 0x10, 0x02, 0x04, 0x08, 0x01, 0x11, 0x80, 0x80 }, { "old_amt_wiggler", 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x11, 0x80, 0x80 }, { "chameleon", 0x80, 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, 0x80, 0x00 }, { "dlc5", 0x10, 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x10 }, @@ -390,7 +391,7 @@ int parport_init(void) #ifdef __FreeBSD__ outb(parport_port + 2, 0x0); #else - outb(0x0, dataport); + outb(0x0, parport_port + 2); #endif #endif /* PARPORT_USE_PPDEV */ |