MicroConverter®, Dual 16- Bit
a
DCs
Silicon Errata Sheet ADuC836
A. This Errata sheet represents the known bugs, anomalies and work-arounds for the ADuC836
MicroConverter.
B. The Errata listed, apply to all ADuC836 packaged material branded as follows:
First Line: ADuC836BS or ADuC836BCP
Fourth Line: F23
C. Analog Devices Inc. is committed, through future silicon revisions to continuously improve silicon
functionality. Analog Devices Inc. will use its best endeavors to ensure that these future silicon
revisions remain compatible with your present software/systems implementing the recommended
work-arounds outlined in this document.
D. ADuC836 Silicon Errata Sheet Revision History :
Revision Date Relevance Silicon Status # of Bugs Reported
F April 2009 All Silicon branded Release 1 Errata
ADUC836BS or ADuC836BCP
Fourth Line: F23
REV. F
Information furnishe d by Analog Devices is believed to be acc urate and reliable. However,
no responsibility is assum ed by Analog Devices for its use, nor for any infringements of
patents or other rights o f third parties which may result from its use. No license is granted by
implication or otherwise under any patent or patent rights of Analog Devices.
® MicroConverter is a Trademar k of Analog Devices, Inc.
One Technology Way, P.O. Box 9106, Norwood, MA 02062-9106, U.S.A.
Tel: 781/329-4700 World Wide Web Site: http://www.analog.com
Fax: 781/326-8703 Analog Devices, Inc., 2009
Silicon Errata Sheet ADuC836
2 EXTENDED (11-BIT) STACK POINTER – PUSH AND POP OPERATION
Background: The ADuC836 offers an extended (11-bit) stack pointer that allows the stack to extend
into the 2 KBytes of internal XRAM. This can be very useful where embedded functions
are used.
Issue: If the extended stack pointer is enabled (CFG836.7=1) and the stack points to the
extended stack space (SPH>=1) then PUSH direct or POP direct instructions will not
operate correctly if the direct address is less than 80H (i.e. not an SFR).
Work-Around:
ASSEMBLY Programming:
A fix for the bug is to PUSH or POP the data through the accumulator. i.e. instead of
PUSH 00h
Use
MOV A, 00H ;(or MOV A, R0 if register bank 0 selected)
PUSH ACC
instead of
POP 00h
use
POP ACC
MOV 00H, A ;(or MOV R0, A if register bank 0 selected)
C Programming (KEIL Compiler)
The Keil Compiler only ever pushes (or pops) an SFR or any of the 32 registers (4 banks
of 8 registers) onto the stack. Keil support a compiler directive that disables absolute
register addressing (#pragma NOAREGS). Using this directive a PUSH/POP register will
be automatically changed as above.
#pragma NOAREGS
int increment (int);
void main(void)
{
int a, b, c;
a=5;
b=6;
c=increment(a)+ increment (b);
while(1);
}
int increment (int a)
{
return (a+1);
}
Related Issues: None
Page 2 of 3 Rev F