Information

PIC18F2682/2685/4682/4685
DS80284E-page 2 © 2007 Microchip Technology Inc.
2. Module: ECAN™ Technology
Under specific conditions, the TXBxSIDH register
of the pending message for transmission may be
corrupted. The following conditions must exist for
this event to occur:
1. A transmit message must be pending.
2. All of the receive buffers must be full and a
received message is in the Message Assembly
Buffer (MAB).
3. A receiver buffer must be made available
(RXBxCON<RXFUL> set to '0') when a Start-
of-Frame (SOF) is recognized on the CAN bus
or on the instruction cycle prior to the SOF for
the TXBxSIDH corruption event to occur. The
timing of this event is crucial.
Work around
Ensure that a receive buffer overflow condition
does not occur, and/or ensure that a transmit
request is not pending, if a received buffer
overflow condition does exist.
The pseudo code segment in Example 1 on the
following page is an example of how to disable a
pending transmission. This code is for illustration
purposes only.
Date Codes that pertain to this issue:
All engineering and production devices
EXAMPLE 1:
3. Module: Timer1 and Timer3
When either Timer1 or Timer3 is configured to
use the external clock source in 8-Bit
Asynchronous mode (T1CON<7:0> or
T3CON<7:0> = 0xxx x111), writes to the
corresponding TMRxH:TMRxL registers may not
occur as expected.
For the purposes of this issue, instructions that
directly affect the contents of the Timer registers
are considered to be writes. This includes CLRF,
SETF and MOVF instructions.
Work around
Insert a delay of one instruction cycle between
writes to TMRxH and TMRxL. This delay can be a
NOP, or any instruction that does not access the
Timer registers (Example 2).
EXAMPLE 2:
Date Codes that pertain to this issue:
All engineering and production devices.
If (RXBnOVFL == 1) // Has an overflow occurred?
{ If (TXREQ == 1)// Is a transmission pending?
{ TXREQ = 0; // Clear transmit request
If (TXABT == 1)// Store transmission aborted status value
MyFlag = 1;
}
}
Temp_RXREG = RXBx; // Read receive buffer
If (MyFlag) // Was previous transmission aborted?
{ TXREQ = 1; // Set transmit request
MyFlag = 0; // Reset stored transmission aborted status
}
CLRF TMR1H
MOVLW T1Offset ; 1 Tcy delay
MOVWF TMR1L