Controlling program flow
Breakpoints are points in the code where execution is
stopped and control of the DSP is returned to the debugger,
allowing you to view the contents of registers and
memory. Breakpoints can be activated or deactivated by
double-clicking on any line of code in the disassembly
window.
You may also want to step through your program code,
executing one line at a time, to follow branches and watch
memory change with the results of calculations. This can be
done by choosing the "Step Into" or "Step Over" menu options
from the "Debug" pull-down menu. (Unlike "Step Over," "Step
Into" traces subroutine calls caused by "call" opcodes.)
Like most DSPs, the DSP we are using is a pipelined
processor, which means that instructions execute in several
stages over several clock cycles. Unfortunately, our
debugger does not "flush" the pipeline of all current
instructions when it halts your program; i.e., the DSP does
not execute all remaining stages of instructions. As a
consequence, when a program halts, the register values shown
in the register and memory windows may not actually the last
values written. Often, the values shown correspond to
values written several cycles before the current
instruction. If it is necessary to know the exact contents
of the registers at any particular point in the program
flow, simply insert three or more nop (no
operation) instructions into your program after the
instruction in question. Then, to debug, execute the
instruction in question and the nop
instructions that follow; this will flush the pipeline.
You can choose the "Run Free" option from the "Debug"
pull-down menu to allow the your code to run freely,
ignoring any breakpoints. The code will continue running
until explicitly halted with the "Halt" command.
Note that stopping and restarting execution sometimes
confuses the A/D and D/A converters on the six-channel
surround-sound board. If this happens, the output will
generally go to zero or become completely unrelated to the
input signal. This can be fixed by simply resetting the DSP
and starting your code from the beginning.
The bar on the left-hand side of the Code Composer Studio
window contains shortcuts for many of the commands in the
Debug menu.
Practice:
Practice setting breakpoints in your program code and
single-stepping by setting a breakpoint after the
WAITDATA call and tracing through the program
flow for several iterations of the FIR filter code. What
code does the WAITDATA call correspond to in
the disassembly window?