User manual

MPLAB
®
REAL ICE
In-Circuit Emulator User’s Guide
DS51616B-page 86 © 2008 Microchip Technology Inc.
9.4 WHAT’S WRONG
I cannot get trace to work. What’s wrong?
Things to consider:
- Certain tool versions are required to use trace. Please refer to either Chapter
7. “Debug for 8- and 16-Bit Devices” or Chapter 8. “Debug for 32-Bit
Devices”.
- For dsPIC30F/33F and PIC24F/H devices, only C code can be used with trace,
not assembly.
- In-line assembly code (assembly code within C code) cannot be traced.
- Native trace and real-time data capture triggers cannot be used together.
- For Port I/O Trace, all 8 pins must be dedicated to trace (i.e., not multiplexed
with the currently used PGC and PGM pins.)
- For Port I/O Trace, ensure that the chosen port is able to output 0x00 and 0xFF.
As a test, set the port TRIS to 0 (all outputs) and set the LAT to a value in the
watch window. The value written to LAT should appear on the port pins.
My PC went into power-down/hibernate mode, and now my emulator won’t work.
What happened?
When using the emulator for prolonged periods of time, and especially as a
debugger, be sure to disable the Hibernate mode in the Power Options Dialog
window of your PC’s operating system. Go to the Hibernate tab and clear or
uncheck the “Enable hibernation” check box. This will ensure that all
communication is maintained across all the USB subsystem components.
I set my peripheral to NOT freeze on halt, but it is suddenly freezing. What's going
on?
For dsPIC30F/33F and PIC24F/H devices, a reserved bit in the peripheral control
register (usually either bit 14 or 5) is used as a Freeze bit by the debugger. If you
have performed a write to the entire register, you may have overwritten this bit.
(The bit is user accessible in Debug mode.)
To avoid this problem, write only to the bits you wish to change for your application
(BTS, BTC) instead of to the entire register (MOV).
When using a 16-bit device, unexpected reset occurred. How do I determine what
caused it?
Some things to consider:
- To determine a reset source, check the RCON register.
- Handle traps/interrupts in an interrupt service routine (ISR). You should include
trap.c style code, i.e.,
void __attribute__((__interrupt__)) _OscillatorFail(void);
:
void __attribute__((__interrupt__))
_AltOscillatorFail(void);
:
void __attribute__((__interrupt__)) _OscillatorFail(void)
{
INTCON1bits.OSCFAIL = 0; //Clear the trap flag
while (1);
}
:
void __attribute__((__interrupt__))
_AltOscillatorFail(void)
{
INTCON1bits.OSCFAIL = 0;
while (1);