diff options
author | mlu <mlu@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2009-04-27 08:29:28 +0000 |
---|---|---|
committer | mlu <mlu@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2009-04-27 08:29:28 +0000 |
commit | b0d04ab6c6c2a04130a72124e79fede7655032e2 (patch) | |
tree | f7c07c195fbddc6f5fe7876d58b6fd082005158f /src/target/armv7m.c | |
parent | 573d9a036894670e64f7ed22a6e842961bc24b8e (diff) |
Changed armv7m and cortexm3 to use nev arm_adi_v5 instead of cortex_swjdp.
Added support for accessport ROM table identification, dap command.
git-svn-id: svn://svn.berlios.de/openocd/trunk@1536 b42882b7-edfa-0310-969c-e2dbd0fdcd60
Diffstat (limited to 'src/target/armv7m.c')
-rw-r--r-- | src/target/armv7m.c | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/target/armv7m.c b/src/target/armv7m.c index 1bf69297..d6bed358 100644 --- a/src/target/armv7m.c +++ b/src/target/armv7m.c @@ -550,6 +550,12 @@ int armv7m_init_arch_info(target_t *target, armv7m_common_t *armv7m) int armv7m_register_commands(struct command_context_s *cmd_ctx) { + command_t *arm_adi_v5_dap_cmd; + + arm_adi_v5_dap_cmd = register_command(cmd_ctx, NULL, "dap", NULL, COMMAND_ANY, "cortex dap specific commands"); + register_command(cmd_ctx, arm_adi_v5_dap_cmd, "info", handle_dap_info_command, COMMAND_EXEC, "dap info for ap [num] (default 0)"); + register_command(cmd_ctx, arm_adi_v5_dap_cmd, "apsel", handle_dap_apsel_command, COMMAND_EXEC, "select a different AP [num] (default 0)"); + return ERROR_OK; } @@ -695,3 +701,45 @@ int armv7m_blank_check_memory(struct target_s *target, u32 address, u32 count, u return ERROR_OK; } + +int handle_dap_apsel_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) +{ + target_t *target = get_current_target(cmd_ctx); + armv7m_common_t *armv7m = target->arch_info; + swjdp_common_t *swjdp = &armv7m->swjdp_info; + u32 apsel, apid; + int retval; + + apsel = 0; + if (argc > 0) + { + apsel = strtoul(args[0], NULL, 0); + } + + dap_ap_select(swjdp, apsel); + dap_ap_read_reg_u32(swjdp, 0xFC, &apid); + retval = swjdp_transaction_endcheck(swjdp); + command_print(cmd_ctx, "ap %i selected, identification register 0x%8.8x", apsel, apid); + + return retval; +} + +int handle_dap_info_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) +{ + target_t *target = get_current_target(cmd_ctx); + armv7m_common_t *armv7m = target->arch_info; + swjdp_common_t *swjdp = &armv7m->swjdp_info; + int retval; + u32 apsel; + + apsel = 0; + if (argc > 0) + { + apsel = strtoul(args[0], NULL, 0); + } + + retval = dap_info_command(cmd_ctx, swjdp, apsel); + + return retval; +} + |