summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/openocd.c4
-rw-r--r--src/target/Makefile.am2
-rw-r--r--src/target/target/at91eb40a.tcl52
3 files changed, 56 insertions, 2 deletions
diff --git a/src/openocd.c b/src/openocd.c
index c17e149c..e24eb9a7 100644
--- a/src/openocd.c
+++ b/src/openocd.c
@@ -182,9 +182,11 @@ static void tcl_output(void *privData, const char *file, int line,
int jim_command(command_context_t *context, char *line)
{
int retval=ERROR_OK;
+ /* FIX!!!! in reality there is only one cmd_ctx handler, but consider
+ what might happen here if there are multiple handlers w/reentrant callback
+ fn's... shudder! */
active_cmd_ctx=context;
int retcode=Jim_Eval(interp, line);
- active_cmd_ctx=NULL;
const char *result;
int reslen;
diff --git a/src/target/Makefile.am b/src/target/Makefile.am
index 959b34d3..28d5862b 100644
--- a/src/target/Makefile.am
+++ b/src/target/Makefile.am
@@ -34,5 +34,5 @@ nobase_dist_pkglib_DATA = xscale/debug_handler.bin event/at91eb40a_reset.script
interface/calao-usb-a9260.cfg target/at91sam9260minimal.cfg event/lpc2148_reset.script \
interface/chameleon.cfg interface/at91rm9200.cfg interface/jlink.cfg interface/arm-usb-ocd.cfg \
interface/signalyzer.cfg event/eir-sam7se512_reset.script target/eir-sam7se512.cfg \
- event/hammer_reset.script interface/flyswatter.cfg target/hammer.cfg target/mx31.cfg
+ event/hammer_reset.script interface/flyswatter.cfg target/hammer.cfg target/mx31.cfg target/at91eb40a.tcl
diff --git a/src/target/target/at91eb40a.tcl b/src/target/target/at91eb40a.tcl
new file mode 100644
index 00000000..6c396227
--- /dev/null
+++ b/src/target/target/at91eb40a.tcl
@@ -0,0 +1,52 @@
+#Script for AT91EB40a
+
+#Atmel ties SRST & TRST together, at which point it makes
+#no sense to use TRST, but use TMS instead.
+#
+#The annoying thing with tying SRST & TRST together is that
+#there is no way to halt the CPU *before and during* the
+#SRST reset, which means that the CPU will run a number
+#of cycles before it can be halted(as much as milliseconds).
+openocd {reset_config srst_only srst_pulls_trst}
+
+#jtag scan chain
+#format L IRC IRCM IDCODE (Length, IR Capture, IR Capture Mask, IDCODE)
+openocd {jtag_device 4 0x1 0xf 0xe}
+
+#target configuration
+openocd {target arm7tdmi little 0 arm7tdmi-s_r4}
+
+# speed up memory downloads
+openocd {arm7 fast_memory_access enable}
+openocd {arm7_9 dcc_downloads enable}
+
+# OpenOCD does not have a flash driver for for AT91FR40162S
+openocd {target_script 0 reset event/at91eb40a_reset.script}
+
+#flash driver
+openocd {flash bank ecosflash 0x01000000 0x200000 2 2 0 ecos/at91eb40a.elf}
+
+# required for usable performance. Used for lots of
+# other things than flash programming.
+openocd {working_area 0 0x00000000 0x20000 nobackup}
+
+#force hardware values - we're running out of flash more
+#often than not. The user can disable this in his
+#subsequent config script.
+openocd {arm7_9 force_hw_bkpts enable}
+
+set reset_count 0
+
+proc target_reset_0 {} {
+ global reset_count
+ # Reset script for AT91EB40a
+ openocd {reg cpsr 0x000000D3}
+ openocd {mww 0xFFE00020 0x1}
+ openocd {mww 0xFFE00024 0x00000000}
+ openocd {mww 0xFFE00000 0x01002539}
+ openocd {mww 0xFFFFF124 0xFFFFFFFF}
+ openocd {mww 0xffff0010 0x100}
+ openocd {mww 0xffff0034 0x100}
+ set reset_count [expr $reset_count+1]
+ puts "Testing reset $reset_count !"
+}