Qorivva MPC5xxx/SPC5xx Debugger and NEXUS Trace
27
©1989-2021 Lauterbach GmbH
1.
The source of the data access (read and/or write) must be the core, as the data address
breakpoints are part of the core. Any other accesses from on-chip or off-chip peripherals (DMA
etc.) will not be recognized by the data address breakpoints.
2.
The data being targeted must be qualified by an address in memory. It is not possible to set a
data address breakpoint to GPR, SPR etc.
Breakpoints on Data Access at Program Address
A normal data access breakpoint as described above hits on all data accesses to the memory address or
address range, independent of the program address which caused the access. It is also possible to set a
data address breakpoint which only hits if the access is performed from a specified program address. The
specified program address must be a load or store instruction.
The program address can also be an address range or a range of debug symbols:
Breakpoints on Data Value
Most e200 cores (see
) implement two on-chip breakpoints on data value
For e200 cores without on-chip data value breakpoints, TRACE32 supports them by software emulation.
When a data value breakpoint is set, the debugger will use one of the data address breakpoints. When the
core hits that breakpoint, the target application will stop and the debugger will evaluate if the data value
matches. If the value matches, the debugger will stop execution, if it does not match, the debugger will
restart the application. Using software emulated data value breakpoints will cause the target application to
slow down.
In case of the NEXUS debugger and trace, breakpoints on data value can be realized using the complex
trigger unit. See
“Complex Trigger Unit for Nexus MPC5xxx”
;Break if the instruction at address 0x40001148 reads from variable
count
Break.Set 0x40001148 /MemoryRead count
;Break if the instruction at address 0x40001148 writes to range
Break.Set 0x40001148 /MemoryWrite 0xFFFFF000--0xFFFFFFFF
;Break on all accesses to
count
from code of the address range
Break.Set 0x40000100--0x400001ff /MemoryReadWrite count
;Break if variable
nMyIntVar
is written by an interrupt handler
;(debug symbols IVORxx_Handler loaded from debug symbols)
Break.Set IVOR0_Handler--IVOR15_Handler /MemoryWrite nMyIntVar
;Break if variable
nTestValue
is written
within
function
test_func
Break.Set sYmbol.RANGE(test_func) /MemoryWrite nTestValue
;Break if variable
nTestValue
is written
outside
of
test_func
Break.Set sYmbol.RANGE(test_func) /EXclude /MemoryWrite nTestValue