From d50dd5ab9567cc308e412c5e9e775dc8e15fb509 Mon Sep 17 00:00:00 2001 From: Tat-Chee Wan Date: Fri, 3 Feb 2012 23:57:04 +0100 Subject: merge armdebug rc1 This enables the use of GDB or GDB based debuggers to debug the code running on the NXT brick using the USB connection. --- AT91SAM7S256/SAM7S256/Include/Cstartup.S | 19 +++++++++++++++---- AT91SAM7S256/SAM7S256/Include/sam7s256.c | 6 ++++++ AT91SAM7S256/SAM7S256/gcc/Makefile | 11 +++++++---- AT91SAM7S256/SAM7S256/gcc/nxt.ld | 24 ++++++++++++++++++++++++ 4 files changed, 52 insertions(+), 8 deletions(-) (limited to 'AT91SAM7S256/SAM7S256') diff --git a/AT91SAM7S256/SAM7S256/Include/Cstartup.S b/AT91SAM7S256/SAM7S256/Include/Cstartup.S index b60ba2c..e3e996e 100644 --- a/AT91SAM7S256/SAM7S256/Include/Cstartup.S +++ b/AT91SAM7S256/SAM7S256/Include/Cstartup.S @@ -136,16 +136,22 @@ FIQ_Handler_Entry: /* end of fiqhandler */ Reset_Addr: .word InitReset -Undef_Addr: .word Undef_Handler +Undef_Addr: .word undef_handler /* BKPT instruction trap */ SWI_Addr: .word SWI_Handler /*SWI_Addr: .word SoftwareInterruptASM*/ /*in swi_handler.S */ -PAbt_Addr: .word PAbt_Handler -DAbt_Addr: .word DAbt_Handler +PAbt_Addr: .word prefetch_abort_handler +DAbt_Addr: .word data_abort_handler IRQ_Addr: .word IRQ_Handler_Entry - + + .global default_undef_handler +default_undef_handler: Undef_Handler: B Undef_Handler SWI_Handler: B SWI_Handler + .global default_prefetch_abort_handler +default_prefetch_abort_handler: PAbt_Handler: B PAbt_Handler + .global default_data_abort_handler +default_data_abort_handler: DAbt_Handler: B DAbt_Handler @@ -255,6 +261,7 @@ already_remapped: .EQU ARM_MODE_FIQ, 0x11 .EQU ARM_MODE_IRQ, 0x12 .EQU ARM_MODE_SVC, 0x13 + .EQU ARM_MODE_ABT, 0x17 .EQU I_BIT, 0x80 .EQU F_BIT, 0x40 @@ -264,6 +271,10 @@ already_remapped: //*-------------------------------*/ mov r0, sp /* see (**) */ +/*- Set up Abort Mode Stack for Debugger*/ + msr CPSR_c, #ARM_MODE_ABT | I_BIT | F_BIT + ldr sp, =__abort_stack_top__ + /*- Set up Fast Interrupt Mode and set FIQ Mode Stack*/ msr CPSR_c, #ARM_MODE_FIQ | I_BIT | F_BIT mov sp, r0 diff --git a/AT91SAM7S256/SAM7S256/Include/sam7s256.c b/AT91SAM7S256/SAM7S256/Include/sam7s256.c index cc22ca3..8ff0ab4 100644 --- a/AT91SAM7S256/SAM7S256/Include/sam7s256.c +++ b/AT91SAM7S256/SAM7S256/Include/sam7s256.c @@ -11,6 +11,9 @@ // // Platform C // +#ifdef __ARMDEBUG__ +#include "debug_stub.h" +#endif void main(void) { @@ -18,6 +21,9 @@ void main(void) { HARDWAREInit; mSchedInit(); +#ifdef __ARMDEBUG__ + dbg__bkpt_init(); +#endif while(TRUE == mSchedCtrl()) { OSWatchdogWrite; diff --git a/AT91SAM7S256/SAM7S256/gcc/Makefile b/AT91SAM7S256/SAM7S256/gcc/Makefile index ad40886..e96e153 100644 --- a/AT91SAM7S256/SAM7S256/gcc/Makefile +++ b/AT91SAM7S256/SAM7S256/gcc/Makefile @@ -1,5 +1,6 @@ BASE = ../.. SRCDIR = $(BASE)/Source +DBGDIR = $(BASE)/armdebug/Debugger CPUINCDIR = $(BASE)/SAM7S256/Include GIT_VERSION := $(shell git rev-parse --short=7 HEAD) @@ -17,21 +18,23 @@ THUMB_SOURCES = c_button.c c_cmd.c c_comm.c c_display.c c_input.c c_ioctrl.c \ abort.c errno.c sbrk.c strtod.c sscanf.c \ Cstartup_SAM7.c -ASM_ARM_SOURCE = Cstartup.S +ASM_ARM_SOURCE = Cstartup.S abort_handler.S undef_handler.S debug_hexutils.S \ + debug_stub.S debug_comm.S debug_opcodes.S debug_runlooptasks.S ASM_THUMB_SOURCE = vpath %.c $(SRCDIR) vpath %.c $(CPUINCDIR) vpath %.c lib -vpath %.S $(CPUINCDIR) +vpath %.S $(CPUINCDIR) $(DBGDIR) -INCLUDES = +INCLUDES = -I../../armdebug/Debugger MCU = arm7tdmi +DEBUG_DEFINES = -D__ARMDEBUG__ STARTOFUSERFLASH_DEFINES = -DSTARTOFUSERFLASH_FROM_LINKER=1 VERSION_DEFINES = -DCUSTOM_FIRMWAREVERSION=\"$(CUSTOM_FIRMWAREVERSION)\" DEFINES = -DPROTOTYPE_PCB_4 -DNEW_MENU -DROM_RUN -DVECTORS_IN_RAM \ - $(STARTOFUSERFLASH_DEFINES) $(VERSION_DEFINES) + $(STARTOFUSERFLASH_DEFINES) $(VERSION_DEFINES) $(DEBUG_DEFINES) OPTIMIZE = -Os -fno-strict-aliasing \ -ffunction-sections -fdata-sections WARNINGS = -Wall -W -Wundef -Wno-unused -Wno-format diff --git a/AT91SAM7S256/SAM7S256/gcc/nxt.ld b/AT91SAM7S256/SAM7S256/gcc/nxt.ld index d63944e..9b7171f 100644 --- a/AT91SAM7S256/SAM7S256/gcc/nxt.ld +++ b/AT91SAM7S256/SAM7S256/gcc/nxt.ld @@ -87,6 +87,30 @@ SECTIONS __STARTOFUSERFLASH_FROM_LINKER = ALIGN (LOADADDR (.data) + SIZEOF (.data), 0x100); + /* + * The various debugger stacks. + */ + .stack : ALIGN(8) { + /* abort stack */ + __abort_stack_bottom__ = . ; + . += 0x80; /* 128 byte abort mode stack. */ + __abort_stack__ = . ; + __abort_stack_top__ = . ; + + /* debugger state */ + __debugger_stack_bottom__ = . ; + . += 0x48; /* 16 user mode registers + SPSR + UNDEF Next Instruction Address */ + __debugger_stack__ = . ; + __debugger_stack_top__ = . ; + + /* breakpoints */ + __breakpoints_start__ = . ; + . += 0x40; /* Single Stepping Breakpoint + 7 Breakpoints */ + __breakpoints_end__ = . ; + } > DATA + + __breakpoints_num__ = (__breakpoints_end__ - __breakpoints_start__) / 8; + /* .bss section which is used for uninitialized data */ .bss (NOLOAD) : { -- cgit v1.2.3