- added -c option that will execute an openocd command
authoroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Sun, 24 Feb 2008 20:10:48 +0000 (20:10 +0000)
committeroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Sun, 24 Feb 2008 20:10:48 +0000 (20:10 +0000)
- added at91eb40a target library example.

git-svn-id: svn://svn.berlios.de/openocd/trunk@333 b42882b7-edfa-0310-969c-e2dbd0fdcd60

src/helper/Makefile.am
src/helper/configuration.c
src/target/Makefile.am
src/target/event/at91eb40a_reset.cfg [new file with mode: 0644]
src/target/target/at91eb40a.cfg [new file with mode: 0644]

index 1e82261..f65a1d2 100644 (file)
@@ -1,8 +1,8 @@
-INCLUDES = $(all_includes)
-METASOURCES = AUTO
-AM_CPPFLAGS = -DPKGDATADIR=\"$(pkgdatadir)\" @CPPFLAGS@
-noinst_LIBRARIES = libhelper.a
-libhelper_a_SOURCES = binarybuffer.c configuration.c log.c interpreter.c command.c time_support.c \
-       replacements.c fileio.c
-noinst_HEADERS = binarybuffer.h configuration.h types.h log.h command.h \
-       interpreter.h time_support.h replacements.h fileio.h
+INCLUDES = $(all_includes)\r
+METASOURCES = AUTO\r
+AM_CPPFLAGS = -DPKGDATADIR=\"$(pkgdatadir)\" -DPKGLIBDIR=\"$(pkglibdir)\" @CPPFLAGS@\r
+noinst_LIBRARIES = libhelper.a\r
+libhelper_a_SOURCES = binarybuffer.c configuration.c log.c interpreter.c command.c time_support.c \\r
+       replacements.c fileio.c\r
+noinst_HEADERS = binarybuffer.h configuration.h types.h log.h command.h \\r
+       interpreter.h time_support.h replacements.h fileio.h\r
index 2fbed08..d9300e9 100644 (file)
-/***************************************************************************
- *   Copyright (C) 2004, 2005 by Dominic Rath                              *
- *   Dominic.Rath@gmx.de                                                   *
- *                                                                         *
- *   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  *
- *   the Free Software Foundation; either version 2 of the License, or     *
- *   (at your option) any later version.                                   *
- *                                                                         *
- *   This program is distributed in the hope that it will be useful,       *
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
- *   GNU General Public License for more details.                          *
- *                                                                         *
- *   You should have received a copy of the GNU General Public License     *
- *   along with this program; if not, write to the                         *
- *   Free Software Foundation, Inc.,                                       *
- *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
- ***************************************************************************/
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "types.h"
-#include "command.h"
-#include "configuration.h"
-#include "log.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <getopt.h>
-#include <string.h>
-
-static size_t num_config_files;
-static char** config_file_names;
-
-static size_t num_script_dirs;
-static char** script_search_dirs;
-
-static int help_flag;
-
-static struct option long_options[] =
-{
-       {"help",                        no_argument,    &help_flag, 1},
-
-       {"debug",                       optional_argument,      0, 'd'},
-       {"file",                        required_argument,      0, 'f'},
-       {"search",                      required_argument,      0, 's'},
-       {"log_output",          required_argument,      0, 'l'},
-       
-       {0, 0, 0, 0}
-};
-
-int configuration_output_handler(struct command_context_s *context, char* line)
-{
-       INFO(line);
-       
-       return ERROR_OK;
-}
-
-void add_script_search_dir (const char *dir)
-{
-       num_script_dirs++;
-       script_search_dirs = (char **)realloc(script_search_dirs, (num_script_dirs+1) * sizeof (char *));
-
-       script_search_dirs[num_script_dirs-1] = strdup(dir);
-       script_search_dirs[num_script_dirs] = NULL;
-}
-
-void add_config_file_name (const char *cfg)
-{
-       num_config_files++;
-       config_file_names = (char **)realloc(config_file_names, (num_config_files+1) * sizeof (char *));
-
-       config_file_names[num_config_files-1] = strdup(cfg);
-       config_file_names[num_config_files] = NULL;
-}
-
-int parse_cmdline_args(struct command_context_s *cmd_ctx, int argc, char *argv[])
-{
-       int c;
-       char command_buffer[128];
-
-       while (1)
-       {       
-               /* getopt_long stores the option index here. */
-               int option_index = 0;
-               
-               c = getopt_long(argc, argv, "hd::l:f:s:", long_options, &option_index);
-               
-               /* Detect the end of the options. */
-               if (c == -1)
-                       break;
-               
-               switch (c)
-               {
-                       case 0:
-                               break;
-                       case 'h':       /* --help | -h */
-                               help_flag = 1;
-                               break;
-                       case 'f':       /* --file | -f */
-                               add_config_file_name(optarg);
-                               break;
-                       case 's':       /* --search | -s */
-                               add_script_search_dir(optarg);
-                               break;
-                       case 'd':       /* --debug | -d */
-                               if (optarg)
-                                       snprintf(command_buffer, 128, "debug_level %s", optarg);
-                               else
-                                       snprintf(command_buffer, 128, "debug_level 3");
-                               command_run_line(cmd_ctx, command_buffer);
-                               break;
-                       case 'l':       /* --log_output | -l */
-                               if (optarg)
-                               {
-                                       snprintf(command_buffer, 128, "log_output %s", optarg);
-                                       command_run_line(cmd_ctx, command_buffer);
-                               }       
-                               break;
-               }
-       }
-
-       if (help_flag)
-       {
-               printf("Open On-Chip Debugger\n(c) 2005 by Dominic Rath\n\n");
-               printf("--help       | -h\tdisplay this help\n");
-               printf("--file       | -f\tuse configuration file <name>\n");
-               printf("--search     | -s\tdir to search for config files and scripts.\n");
-               printf("--debug      | -d\tset debug level <0-3>\n");
-               printf("--log_output | -l\tredirect log output to file <name>\n");
-               exit(-1);
-       }       
-
-       /* Add dir for openocd supplied scripts last so that user can over
-          ride those scripts if desired. */
-       add_script_search_dir(PKGDATADIR);
-
-       return ERROR_OK;
-}
-
-FILE *open_file_from_path (command_context_t *cmd_ctx, char *file, char *mode)
-{
-       FILE *fp = NULL;
-       char **search_dirs = script_search_dirs;
-       char *dir;
-       char full_path[1024];
-
-       /* Check absolute and relative to current working dir first.
-        * This keeps full_path reporting belowing working. */
-       snprintf(full_path, 1024, "%s", file);
-       fp = fopen(full_path, mode);
-
-       while (!fp)
-       {
-               dir = *search_dirs++;
-
-               if (!dir)
-                       break;
-
-               snprintf(full_path, 1024, "%s/%s", dir, file);
-               fp = fopen(full_path, mode);
-       }
-
-       if (fp)
-               command_print(cmd_ctx, "opened %s", full_path);
-
-       return fp;
-}
-
-int parse_config_file(struct command_context_s *cmd_ctx)
-{
-       char **cfg;
-       FILE *config_file;
-
-       if (!config_file_names)
-               add_config_file_name ("openocd.cfg");
-
-       cfg = config_file_names;
-
-       while (*cfg)
-       {
-               config_file = open_file_from_path(cmd_ctx, *cfg, "r");
-               if (!config_file)
-               {
-                       ERROR("couldn't open config file");
-                       return ERROR_NO_CONFIG_FILE;
-               }
-
-               command_run_file(cmd_ctx, config_file, COMMAND_CONFIG);
-
-               fclose(config_file);
-
-               cfg++;
-       }
-
-       return ERROR_OK;
-}
+/***************************************************************************\r
+ *   Copyright (C) 2004, 2005 by Dominic Rath                              *\r
+ *   Dominic.Rath@gmx.de                                                   *\r
+ *                                                                         *\r
+ *   This program is free software; you can redistribute it and/or modify  *\r
+ *   it under the terms of the GNU General Public License as published by  *\r
+ *   the Free Software Foundation; either version 2 of the License, or     *\r
+ *   (at your option) any later version.                                   *\r
+ *                                                                         *\r
+ *   This program is distributed in the hope that it will be useful,       *\r
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *\r
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *\r
+ *   GNU General Public License for more details.                          *\r
+ *                                                                         *\r
+ *   You should have received a copy of the GNU General Public License     *\r
+ *   along with this program; if not, write to the                         *\r
+ *   Free Software Foundation, Inc.,                                       *\r
+ *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *\r
+ ***************************************************************************/\r
+#ifdef HAVE_CONFIG_H\r
+#include "config.h"\r
+#endif\r
+\r
+#include "types.h"\r
+#include "command.h"\r
+#include "configuration.h"\r
+#include "log.h"\r
+\r
+#include <stdio.h>\r
+#include <stdlib.h>\r
+#include <getopt.h>\r
+#include <string.h>\r
+\r
+static size_t num_config_files;\r
+static char** config_file_names;\r
+\r
+static size_t num_script_dirs;\r
+static char** script_search_dirs;\r
+\r
+static int help_flag;\r
+\r
+static struct option long_options[] =\r
+{\r
+       {"help",                        no_argument,    &help_flag, 1},\r
+\r
+       {"debug",                       optional_argument,      0, 'd'},\r
+       {"file",                        required_argument,      0, 'f'},\r
+       {"search",                      required_argument,      0, 's'},\r
+       {"log_output",          required_argument,      0, 'l'},\r
+       {"command",                     required_argument,      0, 'c'},\r
+       \r
+       {0, 0, 0, 0}\r
+};\r
+\r
+int configuration_output_handler(struct command_context_s *context, char* line)\r
+{\r
+       INFO(line);\r
+       \r
+       return ERROR_OK;\r
+}\r
+\r
+void add_script_search_dir (const char *dir)\r
+{\r
+       num_script_dirs++;\r
+       script_search_dirs = (char **)realloc(script_search_dirs, (num_script_dirs+1) * sizeof (char *));\r
+\r
+       script_search_dirs[num_script_dirs-1] = strdup(dir);\r
+       script_search_dirs[num_script_dirs] = NULL;\r
+}\r
+\r
+void add_config_file_name (const char *cfg)\r
+{\r
+       num_config_files++;\r
+       config_file_names = (char **)realloc(config_file_names, (num_config_files+1) * sizeof (char *));\r
+\r
+       config_file_names[num_config_files-1] = strdup(cfg);\r
+       config_file_names[num_config_files] = NULL;\r
+}\r
+\r
+int parse_cmdline_args(struct command_context_s *cmd_ctx, int argc, char *argv[])\r
+{\r
+       int c;\r
+       char command_buffer[128];\r
+\r
+       while (1)\r
+       {       \r
+               /* getopt_long stores the option index here. */\r
+               int option_index = 0;\r
+               \r
+               c = getopt_long(argc, argv, "hd::l:f:s:c:", long_options, &option_index);\r
+               \r
+               /* Detect the end of the options. */\r
+               if (c == -1)\r
+                       break;\r
+               \r
+               switch (c)\r
+               {\r
+                       case 0:\r
+                               break;\r
+                       case 'h':       /* --help | -h */\r
+                               help_flag = 1;\r
+                               break;\r
+                       case 'f':       /* --file | -f */\r
+                               snprintf(command_buffer, 128, "script %s", optarg);\r
+                               add_config_file_name(command_buffer);\r
+                               break;\r
+                       case 's':       /* --search | -s */\r
+                               add_script_search_dir(optarg);\r
+                               break;\r
+                       case 'd':       /* --debug | -d */\r
+                               if (optarg)\r
+                                       snprintf(command_buffer, 128, "debug_level %s", optarg);\r
+                               else\r
+                                       snprintf(command_buffer, 128, "debug_level 3");\r
+                               command_run_line(cmd_ctx, command_buffer);\r
+                               break;\r
+                       case 'l':       /* --log_output | -l */\r
+                               if (optarg)\r
+                               {\r
+                                       snprintf(command_buffer, 128, "log_output %s", optarg);\r
+                                       command_run_line(cmd_ctx, command_buffer);\r
+                               }       \r
+                               break;\r
+                       case 'c':       /* --command | -c */\r
+                               if (optarg)\r
+                               {\r
+                                       add_config_file_name(optarg);\r
+                               }       \r
+                               break;\r
+                               \r
+               }\r
+       }\r
+\r
+       if (help_flag)\r
+       {\r
+               printf("Open On-Chip Debugger\n(c) 2005 by Dominic Rath\n\n");\r
+               printf("--help       | -h\tdisplay this help\n");\r
+               printf("--file       | -f\tuse configuration file <name>\n");\r
+               printf("--search     | -s\tdir to search for config files and scripts.\n");\r
+               printf("--debug      | -d\tset debug level <0-3>\n");\r
+               printf("--log_output | -l\tredirect log output to file <name>\n");\r
+               printf("--command    | -c\trun <command>\n");\r
+               exit(-1);\r
+       }       \r
+\r
+       /* Add dir for openocd supplied scripts last so that user can over\r
+          ride those scripts if desired. */\r
+       add_script_search_dir(PKGDATADIR);\r
+       add_script_search_dir(PKGLIBDIR);\r
+\r
+       return ERROR_OK;\r
+}\r
+\r
+FILE *open_file_from_path (command_context_t *cmd_ctx, char *file, char *mode)\r
+{\r
+       FILE *fp = NULL;\r
+       char **search_dirs = script_search_dirs;\r
+       char *dir;\r
+       char full_path[1024];\r
+\r
+       /* Check absolute and relative to current working dir first.\r
+        * This keeps full_path reporting belowing working. */\r
+       snprintf(full_path, 1024, "%s", file);\r
+       fp = fopen(full_path, mode);\r
+\r
+       while (!fp)\r
+       {\r
+               dir = *search_dirs++;\r
+\r
+               if (!dir)\r
+                       break;\r
+\r
+               snprintf(full_path, 1024, "%s/%s", dir, file);\r
+               fp = fopen(full_path, mode);\r
+       }\r
+\r
+       if (fp)\r
+               command_print(cmd_ctx, "opened %s", full_path);\r
+\r
+       return fp;\r
+}\r
+\r
+int parse_config_file(struct command_context_s *cmd_ctx)\r
+{\r
+       char **cfg;\r
+       FILE *config_file;\r
+\r
+       if (!config_file_names)\r
+               add_config_file_name ("script openocd.cfg");\r
+\r
+       cfg = config_file_names;\r
+\r
+       while (*cfg)\r
+       {\r
+               command_run_line(cmd_ctx, *cfg);\r
+               cfg++;\r
+       }\r
+\r
+       return ERROR_OK;\r
+}\r
index 2529287..d2108f0 100644 (file)
@@ -1,22 +1,23 @@
-
-if OOCD_TRACE
-OOCD_TRACE_FILES = oocd_trace.c
-else
-OOCD_TRACE_FILES =
-endif
-
-INCLUDES = -I$(top_srcdir)/src/gdb -I$(top_srcdir)/src/helper  -I$(top_srcdir)/src/jtag -I$(top_srcdir)/src/xsvf $(all_includes)
-METASOURCES = AUTO
-AM_CPPFLAGS = -DPKGLIBDIR=\"$(pkglibdir)\" @CPPFLAGS@
-noinst_LIBRARIES = libtarget.a
-libtarget_a_SOURCES = target.c register.c breakpoints.c armv4_5.c embeddedice.c etm.c arm7tdmi.c arm9tdmi.c \
-       arm_jtag.c arm7_9_common.c algorithm.c arm920t.c arm720t.c armv4_5_mmu.c armv4_5_cache.c arm_disassembler.c \
-       arm966e.c arm926ejs.c feroceon.c etb.c xscale.c arm_simulator.c image.c armv7m.c cortex_m3.c cortex_swjdp.c \
-       etm_dummy.c $(OOCD_TRACE_FILES) target_request.c trace.c
-noinst_HEADERS = target.h trace.h register.h armv4_5.h embeddedice.h etm.h arm7tdmi.h arm9tdmi.h \
-       arm_jtag.h arm7_9_common.h arm920t.h arm720t.h armv4_5_mmu.h armv4_5_cache.h breakpoints.h algorithm.h \
-       arm_disassembler.h arm966e.h arm926ejs.h etb.h xscale.h arm_simulator.h image.h armv7m.h cortex_m3.h cortex_swjdp.h \
-       etm_dummy.h oocd_trace.h target_request.h trace.h
-
-nobase_dist_pkglib_DATA = xscale/debug_handler.bin
-
+\r
+if OOCD_TRACE\r
+OOCD_TRACE_FILES = oocd_trace.c\r
+else\r
+OOCD_TRACE_FILES =\r
+endif\r
+\r
+INCLUDES = -I$(top_srcdir)/src/gdb -I$(top_srcdir)/src/helper  -I$(top_srcdir)/src/jtag -I$(top_srcdir)/src/xsvf $(all_includes)\r
+METASOURCES = AUTO\r
+AM_CPPFLAGS = -DPKGLIBDIR=\"$(pkglibdir)\" @CPPFLAGS@\r
+noinst_LIBRARIES = libtarget.a\r
+libtarget_a_SOURCES = target.c register.c breakpoints.c armv4_5.c embeddedice.c etm.c arm7tdmi.c arm9tdmi.c \\r
+       arm_jtag.c arm7_9_common.c algorithm.c arm920t.c arm720t.c armv4_5_mmu.c armv4_5_cache.c arm_disassembler.c \\r
+       arm966e.c arm926ejs.c feroceon.c etb.c xscale.c arm_simulator.c image.c armv7m.c cortex_m3.c cortex_swjdp.c \\r
+       etm_dummy.c $(OOCD_TRACE_FILES) target_request.c trace.c\r
+noinst_HEADERS = target.h trace.h register.h armv4_5.h embeddedice.h etm.h arm7tdmi.h arm9tdmi.h \\r
+       arm_jtag.h arm7_9_common.h arm920t.h arm720t.h armv4_5_mmu.h armv4_5_cache.h breakpoints.h algorithm.h \\r
+       arm_disassembler.h arm966e.h arm926ejs.h etb.h xscale.h arm_simulator.h image.h armv7m.h cortex_m3.h cortex_swjdp.h \\r
+       etm_dummy.h oocd_trace.h target_request.h trace.h\r
+\r
+nobase_dist_pkglib_DATA = xscale/debug_handler.bin event/at91eb40a_reset.cfg target/at91eb40a.cfg\r
+\r
+\r
diff --git a/src/target/event/at91eb40a_reset.cfg b/src/target/event/at91eb40a_reset.cfg
new file mode 100644 (file)
index 0000000..a2d29c6
--- /dev/null
@@ -0,0 +1,8 @@
+# Reset script for AT91EB40a\r
+reg cpsr 0x000000D3            \r
+mww 0xFFE00020 0x1         \r
+mww 0xFFE00024 0x00000000  \r
+mww 0xFFE00000 0x01002539  \r
+mww 0xFFFFF124 0xFFFFFFFF  \r
+mww 0xffff0010 0x100\r
+mww 0xffff0034 0x100\r
diff --git a/src/target/target/at91eb40a.cfg b/src/target/target/at91eb40a.cfg
new file mode 100644 (file)
index 0000000..0f08f71
--- /dev/null
@@ -0,0 +1,34 @@
+#Script for AT91EB40a\r
+\r
+#Atmel ties SRST & TRST together, at which point it makes\r
+#no sense to use TRST, but use TMS instead.\r
+#\r
+#The annoying thing with tying SRST & TRST together is that\r
+#there is no way to halt the CPU *before and during* the\r
+#SRST reset, which means that the CPU will run a number\r
+#of cycles before it can be halted(as much as milliseconds).\r
+reset_config srst_only srst_pulls_trst\r
\r
+#jtag scan chain\r
+#format L IRC IRCM IDCODE (Length, IR Capture, IR Capture Mask, IDCODE)\r
+jtag_device 4 0x1 0xf 0xe\r
+\r
+#target configuration\r
+#target arm7tdmi <endianness> <reset mode> <chainpos> <variant>\r
+target arm7tdmi little reset_init 0 arm7tdmi-s_r4\r
+\r
+# speed up memory downloads\r
+arm7 fast_memory_access enable\r
+arm7_9 dcc_downloads enable\r
+\r
+# OpenOCD does not have a flash driver for for AT91FR40162S \r
+target_script 0 reset event/at91eb40a_reset.cfg\r
+\r
+# required for usable performance. Used for lots of\r
+# other things than flash programming.\r
+working_area 0 0x00000000 0x20000 nobackup\r
+\r
+#force hardware values - we're running out of flash more\r
+#often than not. The user can disable this in his\r
+#subsequent config script.\r
+arm7_9 force_hw_bkpts enable\r