SILICON ERRATA ISSUES
PLEASE READ THIS:
Some devices contains silicon bugs. The compiler will not
automatically generate work around code for such problems. This
file contains a list of some silicon bugs and suggested
solutions. It is ALWAYS recommended to get (download) the latest
errata doc from Microchip to make sure that all such issues are
handled in the application.
1. LFSR bug. Applies to the PIC18C242 /442 /252 /452 devices.
PROBLEM: "Using the LFSR instruction to load a value into the
specified FSR register, may also corrupt a RAM location."
WORK AROUND: The compiler will BY DEFAULT NOT use the LFSR
instruction for the mentioned devices (when using the standard
header files). For all other devices, LFSR will be used. For
compiler version 1.0E and earlier, the default setting is to
not use LFSR for any device.
It is possible to override the default settings by a command
line option:
-LFSR- : do not use the LFSR instruction
-LFSR+ : use the LFSR instruction
2. TABLE READ problem. Applies to the PIC18F252 /452 /258 /458
devices produced earlier than a certain date.
PROBLEM: "The execution of a TABLE READ instruction may yield
erroneous results. This has been observed when a Table Read
instruction and its read destination, as indicated by the Table
Pointer registers, are on opposite sides of the 4000h program
memory address boundary. This behavior has not been observed when
the instruction and its target both occur strictly within the
same half of the program memory space."
WORK AROUND: This must be handled in the application according to
the information from Microchip. The compiler will put the _const
access function on a specific position by using:
#pragma insertConst
From Microchip doc: "Insert a data word of value FFFFh
immediately following any Table Read instruction. This behaves as
a NOP instruction when executed. Using the actual NOP instruction
instead of a literal FFFFh may not have the same results. This is
a recommended solution. Others may exist."
3. Program flow problem. Applies to the PIC18F252 /452 /258 /458
devices produced earlier than a certain date.
PROBLEM: "The execution of some control operations may yield
unexpected results. This has been observed when the following
instructions vector code execution across the 4000h program
memory address boundary: CALL, GOTO, RETURN, RETLW and RETFIE.
There are no known issues related to any of these instructions
when execution occurs strictly above or below the 4000h address
boundary."
WORK AROUND: This must be handled in the application according to
the information from Microchip. The application should be
partisioned to limit crossing the 4000h boundary. The required
data words can be inserted by inline assembly and DW statements
when using C code.
From Microchip doc: "Two possible solutions are presented. Others
may exist. It is recommended to implement either or both as
needed. 1: Insert a data word of value FFFFh as the first
instruction in the destination of a CALL or GOTO. 2: Insert a
data word of value FFFFh immediately following any RETURN, RETLW,
or RETFIE instruction. In either case, the literal data behaves
as a NOP instruction when executed. Using the actual NOP
instruction instead of a literal FFFFh may not have the same
results."