1997_Philips_IC25_80C51XA 1997 Philips IC25 80C51XA
User Manual: 1997_Philips_IC25_80C51XA
Open the PDF directly: View PDF
.
Page Count: 762
| Download | |
| Open PDF In Browser | View PDF |
INTEGRATED CIRCUITS
16-bit BOC51 XA
Microcontrollers
(eXtended Architecture)
1997
- Data Handbook IC25
CD-ROM included
QUALITY ASSURED
Our quality system focuses on the continuing high quality of our
components and the best possible service for our customers. We have
a three-sided quality strategy: we apply a system oftotal quality control
and assurance; we operate customer-oriented dynamic improvement
programmes; and we promote a partnering relationship with our
customers and suppliers.
PRODUCT SAFETY
In striving for state-of-the-art perfection, we continuously improve
components and processes with respect to environmental demands.
Our components offer no hazard to the environment in normal use
when operated orstored within the limits specified in the data sheet.
Some components unavoidably contain substances that, if exposed by
accident or misuse, are potentially hazardous to health. Users of these
components are informed of the danger by warning notices in the data
sheets supporting the components. Where necessary the warning
notices also indicate safety precautions to be taken and disposal
instructions to be followed. Obviously users of these components, in
general the set-making industry, assume responsibility towards the
consumerwith respect to safety matters and environmental demands.
All used or obsolete components should be disposed of according to
the regulations applying at the disposal location. Depending on the
location, electronic components are considered to be 'chemical',
'special' orsometimes 'industrial' waste. Disposal as domestic waste is
usually not perm itted.
16-bit 80C51 XA (eXtended Architecture)
Microcontrollers Data Handbook
CONTENTS
page
SECTION 1
SELECTION GUIDES
5
GENERAL INFORMATION
21
SECTION 3
XA USER GUIDE
31
SECTION 4
XA FAMILY DERIVATIVES
315
SECTION 5
FUTURE DERIVATIVES
411
SECTION 6
APPLICATION NOTES
423
SECTION 7
DEVELOPMENT SUPPORT TOOLS
659
SECTION 8
PACKAGE INFORMATION
737
SECTION 9
DATA HANDBOOK SYSTEM
749
. SECTION 2
DEFINITIONS
Definition (Note)
Data Sheet Identification
Product Status
Objective Specification
Formative or in Design
This data sheet contains the design target or goal specifications for
product development. Specifications may change in any manner
without notice.
Preliminary Specification
Preproduction Product
This data sheet contains preliminary data, and supplementary data
will be published at a later date. Philips Semiconductors reserves the
right to make changes at any time without notice in order to improve
design and supply the best possible product.
Product Specification
Full Production
This data sheet contains Final Specifications. Philips Semiconductors
reserves the right to make changes at any time without notice, in
order to improve design and supply the best possible product.
Short-form specification
-
The data in this specification is extracted from a full data sheet with
the same type number and title. For detailed information see the
relevant data sheet or data handbook.
Limiting values
Limiting values given are in accordance with the Absolute Maximum Rating System (IEC 134). Stress above one or more of the limiting
values may cause permanent damage to the device. These are stress ratings only and operation of the device at these or at any other
conditions above those given in the Characteristics sections of the specification is not implied. Exposure to limiting values for extended
periods may affect device reliability.
Application information
Applications that are described herein for any of these products are for illustrative purposes only. Philips Semiconductors makes no
representation or warranty that such applications will be suitable for the specified use without further testing or modification
LIFE SUPPORT APPLICATIONS
These products are not designed for use in life support appliances, devices, or systems where malfunction of these
products can reasonably be expected to result in personal injury. Philips Semiconductors customers using or
selling these products for use in such applications do so at their own risk and agree to fully indemnify Philips
Semiconductors for any damages resulting from such improper use or sale.
PURCHASE OF PHILIPS 12C COMPONENTS
Purchase of Philips 12C components conveys a license under the Philips' 12C patent to use the
components in the 12C system provided the system conforms to the 12C specifications defined
by Philips. This specification can be ordered using the code 939839340011.
DISCLAIMER
Philips Semiconductors reserves the right to make changes, without notice, in the products, including circuits,
standard cells, and/or software, described or contained herein in order to improve design and/or performance.
Philips Semiconductors assumes no responsibility or liability for the use of any of these products, conveys no
license or title under any patent, copyright, or mask work right to these products, and makes no representations or
warranties that these products are free from patent, copyright, or mask work right infringement, unless otherwise
specified.
NOTE: Always check with your local Philips Semiconductors Sales Office to be certain that you have the latest
data sheet(s) before completing a design.
Philips Semiconductors
Preface
XA Microcontrollers from Philips Semiconductors
Philips Semiconductors offers a wide range of microcontrollers based on the 8048,
80C51 , and now the XA architectures. The XA is a new architecture that was
developed by Philips Semiconductors in response to the market need for higher
performance than what can be obtained from the 8-bit 80C51 and retained
compatibility with the 80C51 designed-in architecture. The XA successfully
addresses both of these needs. It is compatible with the 80C51 at the source code
level. All of the internal registers and operating modes of the 80C51 are fully
supported within the XA, as are all of the 80C51 instructions. Yet compatibility with
the 80C51 has in no way hindered the performance of the XA. It is a very high
performance 16-bit architecture. The XfJ\s performance is 3 to 4 times faster than
that of the most popular 16 bit architectures and 10 to 100 times faster than the
80C51.
If you use or are familiar with the 80C51 and need higher performance, the XA is
the architecture for you. You will find it very easy to understand. Rather than having
to learn its programmer's model, you will find that you already know it, and, better,
are very familiar with it. You will be able to focus on the enhanced features of the
XA and quickly move your design to much higher performance. You will also notice
that the features on the XA, in many cases, exceed what you need today. We have
designed the XA so that it will meet your needs not only today but well into the
future; you will not need to look for another architecture for many years to come.
As Philips Semiconductors has done with the 8048 and 80C51 , we will develop the
XA into a broad family of derivatives. Advance information has been included in this
handbook that covers the first two of these. It is our plan to introduce 3 to 4 XA
derivatives in 1997 and 5 to 8 per year after that. In addition to this, we will continue
to move the XA into Philips Semiconductors' most advanced processes and we
have plans to increase the clocking frequency of the architecture to over 100MHz
(greater than 30MIPS execution rate).
Philips Semiconductors offers you one of the industry's widest selections of
microcontrollers. The XA architecture is an extension of this strategy that gives you
the ability to easily upgrade your designs to very high performance with the only
16-bit, 80C51-compatible microcontroller available on the market.
1997 Mar21
3
Philips Semiconductors
Section 1
Selection Guides
CONTENTS
XA tools linecard ............................................................. .
7
Microcontroller internet and bulletin board access ................................. .
8
Philips Fax-On-Demand System ................................................ .
10
CMOS and NMOS 8-bit microcontroller family .................................... .
11
CMOS 16-bit microcontrolier family ............................................. .
15
80C51 microcontroller family fee.tures guide ...................................... .
16
5
6
Philips Semiconductors
XA tools linecard
Telephone/Contact
North America
Product
Europe
C Compilers
Archimedes
1-206-822-6300
Mary Sorensen
SW
41.61.331.7151
Claude Vonlanthen
CMX Company
1-508-872-7675
Charles Behrmann
US
1-508-872-7675
Charles Behrmann
Hi-Tech XAC
Hi-Tech
1-207-236-9055
Avocet - T. Taylor
UK
44.1.932.829460
Computer Solutions
Hi-Tech C (X A)
C-51XA
Pantasoft
1-314-830-4084
Roly Schwartzman
GE
49.6151.27505
M. Kimron
C-XA
Tasking
1-617-320-9400
Vaughn Orchard
US
1-617-320-9400
Vaughn Orchard
C-Compiler
Ultra2000-XA
Emulators (including Debuggers)
Ashling
1-508-366-3220
Bob Labadini
IR
353.61.334466
Micheal Healy
Ceibo
1-314-830-4084
Roly Schwartzman
GE
49.6151.27505
M. Kimron
DS-XA
Nohau
1-408-866-1820
Jim Straub
SW
46.40.922425
Mikael Johnsson
EMUL51XA-PC
Archimedes
1-206-822-6300
Mary Sorensen
SW
41.61.331.7151
Claude Vonlanthen
A-51XA
Ashling
1-508-366-3220
Bob Labadini
IR
353.61.334466
Micheal Healy
SDS-XA
Pantasoft
1-314-830-4084
Roly Schwartzman
GE
49.6151.27505
M. Kimron
ASM-XA
Philips/Macraigor*
1-408-991-51XA Mati Kama
US
1.408.991.5192
Moti Kama
Mcgtool
Tasking
1-617-320-9400
Vaughn Orchard
US
1-617-320-9400
Vaughn Orchard
C-Compiler
Cross Assemblers
Real-Time Operating Systems
CMX Company
1-508-872-7675
Charles Behrmann
US
1.508.872.7675
Charles Behrmann
CMX-RTX
Embedded
System Products
1-713-561-9990
Ron Hodge
US
1.713.516.9990
Ron Hodge
RTXC
R&D Publications
1-913-841-1631
Customer Service
US
1.913.841.1631
Customer Service
Labrosse MCU/OS
Simulators & Software Generation Tools
Aisys
1-800-397-7922
Customer Service
IL
972.3.9226860
Oren Katz
DriveWay-XA
Archimedes
1-206-822-6300
Mary Sorensen
SW
41.61.331.7151
Claude Vonlanthen
SimCASE-51XA
Pantasoft
1-314-830-4084
Roly Schwartzman
GE
49.6151.27505
M. Kimron
DEBUG-XA
Philips/Macraigor*
1-408-991-51XA Moti Kama
US
1.408.991.5192
Moti Kama
Mcgtool
US
1.408.991.5192
Mike Thompson
Mcgtool
Translators (80CS1-to-XA)
Philips/Macraigor*
1-408-991-51XA Mike Thompson
Development Kits
CMX (Hi-Tech)
1-508-872-7675
Charles Behrmann
UK
44.1 .932.829460
Charles Behrmann
XADEV
Future Designs
1-205-830-4116
Mark Hall
US
1-205-830-4116
Mark Hall
XTEND-G3
Philips/Macraigor
1-408-991-51 XA
Moti Kama
US
1.408.991.5192
Moti Kama
P51XA-DBE SD
EPROM Programmers
BP Microsystems
1-800-225-2102
Sales Department
US
1.713.688.4600
Sales Department
BP-1200
Ceibo
1-314-830-4084
Roly Schwartzman
GE
49.6151.27505
M. Kimron
MP-51
Data 1/0 Corp.
1-800-247-5700
Tech Help Desk
BE
32.1.638.0808
Roland Appeltants
UniSite
EDI Corp
1-702-735-4997
Milos Krejcik
US
1.702.735.4997
Milos Krejcik
44PG/44PL
Logical Systems
1-315-478-0722
Lynn Burko
US
1.315.478.0722
Lynn Burko
PA-XG3FC-44
Adapters & Sockets
•
..
The Philips cross assembler, simulator, and translator are available on the Philips FTP site at ftp://ftp.philipsMCU.com/pub.
File name XA-TOOLS.ZIP
1997 Mar21
7
Philips Semiconductors
Microcontroller internet and
bulletin board access
INTERNET ACCESS
Philips Semiconductors World Wide Web:
http://www.semiconductors.philips.com
Internet XA 16-bit 80C51 Support Address:
XA_help@sv.sc.philips.com
Microcontroller FTP Site:
ftp://ftp.PhilipsMCU.com
Internet Microcontroller Newsletter:
To subscribe, send email to:
News-Request@PhilipsMCU.com
Internet 80C51 Discussion Forum:
Forum-Request@ PhilipsMCU.com
Internet 80C51 Applications Support Address:
80C51_help @sv.sc.philips.com
Send us your questions and we will respond quickly.
1997 Mar 21
8
Philips Semiconductors
Microcontroller internet and
bulletin board access
BULLETIN BOARDS
To better serve our customers, Philips maintains a microcontroller bulletin board. This computer bulletin board
system features microcontroller newsletters, application and demonstration programs for download.
The telephone numbers is:
European Bulletin Board
MAX 14.400 baud
Standards V32N42N42.bis/HST
+31 402721102
Sunnyvale ROMcode Bulletin Board
We also have a ROM code bulletin board through which you can submit ROM codes. This is a closed bulletin
board for security reasons. To get an ID, contact your local sales office. The system can be accessed with a 2400,
1200, or 300 baud modem, and is available 24 hours a day.
The telephone number is:
(408) 991-3459
All code for application notes in this databook are available on the Philips web site.
1997 Mar 21
9
Philips Semiconductors
FAX-on-DEMAND System
FAX
DEMAND
You can hang up now
What is it?
FAX-on-DEMAND phone numbers:
The FAX-on-DEMAND system is a computer facsimile
system that allows customers to receive selected
documents by fax automatically.
England
(United Kingdom, Ireland)
44-181-730-5020
France
33-1-40-99-60-60
Italy
39-167-295502
North America
1-800-282-2000
How does it work?
To order a document, you simply enter the document
number. This number can be obtained by asking for an
index of available documents to be faxed to you the
first time you call the system.
Locations soon to be in operation:
Hong Kong
Japan
The Netherlands
Our system has a selection of the latest product data
sheets from Philips with varying page counts. As you
know, it takes approximately one minute to FAX one
page. This isn't bad if the number of pages is less than
10. But if the document is 37 pages long, be ready for
a long transmission!
Philips Semiconductors also maintains product
information on the World-Wide Web. Our home page
can be located at:
http://www.semiconductors.philips.com
Who do I contact if I have a question
about FAX-on-DEMAND?
Contact your local Philips sales office.
1997 Mar 04
10
Philips Semiconductors
CMOS and NMOS a-bit microcontroller family
8400 FAMILY CMOS
TYPE
ROM
RAM SPEED
(MHz)
PACKAGE
FUNCTIONS
REMARKS
PROBE
SDS
REMARKS
84C21A
84C41A
84C81A
2k
4k
8k
64
128
256
10
10
10
DIL28/S028
DIL28/S028
DIL28/S028
20 I/O lines
8-bittimer
Byte 12C
OM1083
OM1025
(LSDS)
84C22A
84C42A
84C12A
2k
4k
1k
64
64
64
10
10
16
DIL20/S020
DIL20/S020
DIL20/S020
DIL20/S020
131/0 lines
8-blttimer
OM1083 +
Adapter_1
OM1025
(LSDS)
84COOB
0
256
10
28 pins
20 I/O lines
8-bittimer
Byte 12C
84COOT
0
256
10
VSO-56
84C121
1k
64
10
DIL20/S020
131/0 lines
2 8-bit timers
8 bytes
EEPROM
Piggyback
OM1080
ROMless
OM1080
OM1073
84C121B
0
64
10
84C122A
84C122B
84C422A
84C422B
84C822A
84C822B
84C822C
1k
32
10
A: S020
B: S024
C: S028
Controller for
remote control
A: 121/0
B: 161/0
C:201/0
OM4830
OM1027
Piggyback
4K
32
8K
32
84C230
21
64
10
DIL40NS040
121/0 lines
8-bittimer
16*4 LCD drive
OM1072
84C430
4k
128
10
QFP64
241/0 lines
8-bittimer
Byte 12C
24*4 LCD drive
OM1072
84C430BH
0
128
10
84C633
6k
256
16
0
256
16
4k
4k
4k
4k
6k
6k
6k
6k
8k
8k
8k
8k
128
128
128
128
128
128
128
128
192
192
192
192
10
10
10
10
10
10
10
10
10
10
10
10
84C633B
84C440
84C441
84C443
84C444
84C640
84C641
84C643
84C644
84C840
84C841
84C843
84C844
July 1996
OM 1025(LEDS)
Piggyback for C230
and C430
VS056
281/0 lines
8-bittimer
16-bit up/down
counter
16-bittimer
with compare
and capture
16*4 LCD drive
DIP42 shrunk
RC: 29 I/O lines
LC: 28 I/O lines
8-bittimer
114-bitPWM
56-bitPWM
3-bitADC
OSD 2L-16
11
OM1086
12C, RC
12C, LC
RC
LC
12C, RC
12C, LC
RC
LC
2
1 C, RC
12C, LC
RC
LC
OM1074
For emulation of
LC versions,
use OM1074 +
adaptec3 +
2adaptec5
Baud for LCDS
OM4831
Philips Semiconductors
CMOS and NMOS a-bit microcontroller family
8400 FAMILY CMOS (Continued)
TYPE
PACKAGE
FUNCTIONS
ROM
RAM
SPEED
(MHz)
84C646
84C846
6k
8k
192
192
10
10
DIP42 shrunk
30 I/O lines
DOS clock
PLL
8 bit timer
1-14 bit PWM
4-6 bit PWM
4-7 bit PWM
3-4 bitADC
DOS: 64 disp.
RAM
62 char. fonts
Char. blinking
Shadow modes
8 foreground
colors/char.
8 background
colors/word
DOS: clock:
8".20MHz
84C85
8k
256
10
DIL40NS040
321/0 lines
8-bittimer
Byte 12C
84C85B
0
256
10
84C853
8k
256
16
DIL40NS040
331/0 lines
8-bittimer
16-bit up/down
counter
16-bit timer with
compare and
capture
84C853B
0
256
16
84C270
84C470
2k
4k
128
128
10
10
DIL40NS040
DIL40NS040
81/0 lines
16*8 captu re
keyboard matrix
8-bittimer
84C270B
0
128
10
84C470B
0
128
10
84C271
2k
128
10
"
=
REMARKS
12C,
12C,
RC
RC
PROBE
SDS
OM4829 +
OM4832
REMARKS
OM4833 for
LCD584
OM1070
Piggyback for C85
OM1081
Piggyback for C853
OM1077
Piggyback for C270
470 also
handles mech.
keys
DIL40
81/0 lines
16*8 mech.
keyboard matrix
8-bittimer
PACKAGE
FUNCTIONS
Piggyback for C470
OM1078
8400 FAMILY NMOS
TYPE
ROM
RAM
SPEED
(MHz)
8411
8421
8441
8461
1k
2k
4k
6k
64
64
128
128
6
6
6
6
DIL28/S028
DIL28/S028
DIL28/S028
DIL28/S028
20 I/O lines
8-bittimer
Byte 12C
8422
8442
2k
4k
64
128
6
6
DIL20
DIL20
131/0 lines
8-bittimer
Bitl 2C
8401B
0
128
6
28-pin
July 1996
REMARKS
REMARKS
OM1025
(LCDS) +
OM1026
Piggyback for 84X1
12
EMULATOR
TOOLS
Philips Semiconductors
CMOS and NMOS a-bit microcontroller family
3300 FAMILY CMOS
TYPE
ROM
RAM SPEED
(MHz)
PACKAGE
FUNCTIONS
REMARKS
PROBE
sos
REMARKS
1.5k
160
10
DIL28/S028
20110 lines
8-bittimer
Voo> 1.8V
OM1083
OM1025(LCDS)
3343
3k
224
10
DIL28/S028
20 I/O lines
8-bittimer
Voo> 1.8V
8yte 12C
OM1083
OM 1025(LCDS)
3344A
2k
224
3.58
DIL28/S028
20 I/O lines
8-bittimer
DTMF generator
OM1071
OM 1025(LCDS)
+ OM1028
3346A
4k
128
10
DIL28/S028
20 I/O lines
8-bittimer
8yte 12C
256 bytes EEPROM
Voo < 1.8V
OM1076
1.5k
64
3.58
DIL20/S020
121/0 lines
8-bittimer
DTMF generator
OM1071 +
Adapter_2
OM1025(LCDS)
+OM1028
3348A
8k
256
10
DIL28/S028
20110 lines
8-bittimer
8yte 12C
Voo < 1.8V
OM1083
OM1025(LCDS)
3349A
4k
224
3.58
DIL28/S028
20110 lines
8-bittimer
DTMF generator
OM1071
OM1025(LCDS)
+OM1028
3350A
8k
128
3.58
VS064
30110 lines
8-bittimer
DTMF generator
256 bytes EEPROM
3351A
2k
64
3.58
DIL28/S028
20 I/O lines
8-bittimer
DTMF generator
128 bytes EEPROM
OM5000
3352A
6k
128
3.58
DIL28/S028
20 I/O lines
8-bittimer
DTMF generator
128 byte EEPROM
OM5000
3353A
6k
128
16
DIL28/S028
20110 lines
8-bittimer
DTMF generator
Ringer out
128 bytes EEPROM
March '92
OM5000
3354A
8k
256
16
QFP64
361/0 lines
8-bittimer
DTMF generator
Ringer out
256 bytes EEPROM
June '92
OM4829+
OM5003
8755A
0
128
16
DIL28/S028
8kOTP
20110 lines
8-bittimer
DTMF generator
Melody output
128 bytes EEPROM
In Development
3315A
3347
33018
Piggyback for 3315,
3343,3348
OM1083
33448
Piggyback for 3344,
3347,3349
OM1071
33468
Piggyback for 3346
OM1076
July 1996
13
OM4829: Probe
base
Philips Semiconductors
CMOS and N MaS a-bit microcontroller family
3300 FAMILY CMOS (Continued)
TYPE
ROM
RAM SPEED
(MHz)
PACKAGE
FUNCTIONS
REMARKS
PROBE
SDS
33508
Piggyback for 3350A
OM4829+
OM5003
33518
Piggyback for
3351 A, 3352A,
3353A
OM5000
33548
Piggyback for 3354A
OM4829+
OM5010
July 1996
14
REMARKS
Philips Semiconductors
CMOS 16-bit microcontroller family
16-81T CONTROLLERS (XA ARCHITECTURE)
TYPE
(EP)ROM
RAM
SPEED
(MHz)
FUNCTIONS
REMARKS
DEVELOPMENT TOOLS
XA-G1
8k
512
30
3 timers, watchdog,
2 UARTs
-40 to
+125°C
Nohau
Ceibo
MacCraigor Systems
XA-G2
16k
512
30
3 timers, watchdog,
2 UARTs
-40 to
+125°C
Nohau
Ceibo
MacCraigor Systems
XA-G3
32k
512
30
3 timers, watchdog,
2 UARTs
-40 to
+125°C
Nohau
Ceibo
MacCraigor Systems
16-81T CONTROLLERS (68000 ARCHITECTURE)
TYPE
68070
93C101
90CE201
July 1996
(EP)ROM
RAM
SPEED
(MHz)
FUNCTIONS
-
-
17.5
2 DMA channels,
MMU, UART,
16-bit timer, 12C,
68000 bus interface,
16Mb address range
34k
512
15
Derivative with low
power modes
Not for new
design
16MB
external
ROM
16MB
external
RAM
24
UART, fast 12C.
3 timers (16 bit),
Watchdog timer.
68000 software
compatible, EMC,
QFP64
-25 to
+85°C
REMARKS
15
PHILIPS TOOLS
THIRD-PARTY
TOOLS
OM4160 Microcore 1
OM4160/2 Microcore 2
OM4161 (SBE68070)
OM4767/2 XRAY68070SBE
high level symbolic debugger
OM4222 68070DS development
system
OM4226 XRAY68070DS
high level symbolic debugger
TRACE32-ICE68070
(Lauterbach)
OM4162 Microcore 4
TRACE32(Lauterbach)
Philips Semiconductors
80C51 microcontroller family features guide
Part Number
(ROM less)
P
83C750
P
87C750
P
83C748
P
87C748
S
83C751
s
87C751
P
83C749
P
87C749
S
83C752
Memory
ROM
EPRM
1K
1K
2K
2K
2K
2K
2K
2K
2K
Serial
Interfaces
External
Interrupt
Comments!
Special Features
2-3/8
2
40 MHz, Lowest cost, SSOP
2-3/8
2
40 MHz, Lowest cost, SSOP
2-3/8
2
1 (16-bit)
2-3/8
2
8XC751 w/o I"C, SSOP
8XC751 w/o 12C, SSOP
64
1 (16-bit)
2-3/8
12C (bit)
2
24-pin Skinny DIP, SSOP
64
1 (16-bit)
2-3/8
12C (bit)
2
64
1 (16-bit)
2-5/8
24-pin Skinny DIP, SSOP
8XC752 w/o 12C, SSOP
RAM
Counter
Timers
64
1 (16-bit)
64
1 (16-bit)
64
1 (16-bit)
64
I/O
Port
2
64
1 (16-bit)
2-5/8
2
8XC752 w/o 12C, SSOP
64
1 (16-bit)
2-5/8
12C (bit)
2
5 Channel 8-bit NO, PWM Output, SSOP
S
87C752
64
1 (16-bit)
2-5/8
12C (bit)
2
5 Channel 8-bit NO, PWM Output, SSOP
SC
80C51 (80C31)
4K
128
2
4
UART
2
CMOS (Sunnyvale)
PCx
80C51 (80C31)
4K
128
2
4
UART
2
CMOS (Hamburg)
SC
87C51
128
2
4
UART
2
CMOS
P
80CL51 (80CL31)
4K
128
2
4
UART
10
Low Voltage (1.8V to 6V), Low Power
P
83CL410 (80CL41 0)
4K
128
2
4
12C
10
Low Voltage (1.8V to 6V), Low Power
SC
83C451,(80C451)
4K
128
2
7
UART
2
Extended 110, Processor Bus Interface
128
2
7
UART
2
Extended 110, Processor Bus Interface
128
2 + Watchdog
4
UART
2
8 Channel 8-bit NO
128
2+ Watchdog
4
UART
2
8 Channel 8-bit NO
UART
2
256B EEPROM, 80C51 Pin compatible
1
Smartcard Controller with 2K EEPROM (Data,
Code) Cryptographic Calc Unit
9
4 Channel 8-bit NO, PWM Output,
Low Voltage (2.5V to 6V), Low Power
80C51 Pin Compatible
2K
4K
SC
87C451
p
83C550 (80C550)
P
87C550
P
83C851 (80C851)
4K
128
2
4
P
83C852
6K
256
2 (16-bit)
2/8
P
83CL580 (80CL580)
6K
256
3 + Watchdog
5
P
80C52 (80C32)
8K
P
87C52
P
83C652 (80C652)
S
87C652
P
83C453 (80C453)
p
87C453
S
83C51 FA (80C51 FA)
S
87C51FA
S
83L51FA
S
87L51FA
P
83C575 (80C575)
P
87C575
P
83C576 (80C576)
4K
4K
4K
8K
8K
8K
8K
8K
8K
8K
8K
8K
8K
8K
8K
UART,12C
256
3
4
UART
2
256
3
4
UART
2
(see above)
256
2
4
UART,12C
2
80C51 Pin Compatible
256
2
4
UART,12C
2
(see above)
256
2
7
UART
2
Extended 110, Processor Bus Interface
256
2
7
UART
2
Extended 110, Processor Bus Interface
256
3+PCA
4
UART
2
Enhanced UART, 3 timers + PCA
256
3+PCA
4
UART
2
Enhanced UART, 3 timers + PCA
256
3+PCA
4
UART
2
Low Voltage 83C51 FA (3V @ 20M Hz)
256
3+PCA
4
UART
2
Low Voltage OTP 87C51 FA (3V @ 20M Hz)
256
3+ PCA+
Watchdog
4
UART
2
High Reliability, with Low Voltage Detect,
OSC Fail Detect, Analog Comparators, PCA
256
(see above)
4
UART
2
(see above)
256
3+ PCA+
Watchdog
4
UART
2
Same as 8XC575 plus UPI and 10-bit NO
P
87C576
256
(see above)
4
UART
2
(see above)
PC
83C562 (80C562)
8K
256
3 + Watchdog
6
UART
2
8 Channel 8-bit NO, 2 PWM Outputs,
Capture/Compare Timer
PCx
83C552 (80C552)
8K
256
3 + Watchdog
6
UART,12C
2
8 Channel10-bit NO, 2 PWM Outputs,
Capture/Compare Timer
S
87C552
256
3 + Watchdog
6
UART,12C
2
,(see above)
8K
8K
Notes: Part number prefixes are noted In the first column.
All combinations of part type, speed, temperature and package may not be available.
July 1996
16
Philips Semiconductors
80C51 microcontroller family features guide
Part Number
(ROM less)
pacKage
Temperature Ranges (OC)
Program
Security?
Clock Freq
(MHz)
Oto 70
-40 to +85 -55 to +125
PDIP
CDIP
PLCC
CLCC
PQFP/SSOP
83C750
S
N
3.51040
X
X
N24
F24
A28
OB24 (0-70F)
87C750
S
y
3.51040
X
X
N24
F24
A28
OB24 (0-70F)
83C748
S
N
3.51016
X
X
N24
A28
OB24 (0-70F)
87C748
8
y
3.51016
X
X
N24
A28
OB24 (0-70F)
83C751
8
N
3.51016
X
X
N24
A28
OB24 (0-70F)
87C751
8
Y
3.51016
X
X
N24
83C749
8
N
3.51016
X
X
N28
87C749
S
Y
3.51016
X
X
83C752
8
N
3.51016
X
X
X
N28
87C752
8
y
3.51016
X
X
X
N28
8C80C51 (80C31)
8
y
3.51033
X
X
X
PCx80CS1 (80C31)
H
N
1.21030
X
X
87CS1
8
y
3.51033
X
X
F24
F24
A28
OB24 (0-70F)
A28
OB28 (0-70F)
A28
OB28 (0-70F)
A28
OB28 (0-70F)
A28
OB28 (0-70F)
N40
A44
B44 (5)
X
P (40)
WP(44)
X
N40
N28
80CL51 (80CL31)
Z
N
01016 (1)
X
N40(2)
83CL41 0(80CL41 0)
Z
N
01012 (1)
X
N40 (2)
83C451 (80C451)
8
N
3.51016
F28
F28
F40
A44
B44
X
X
N64 (4)
A68
X
N64 (4)
A68
87C451
S
Y
3.51016
X
X
8
y
3.51016
X
X
87CS50
8
y
3.51016
X
X
83C851 (80C8S1)
H
y
1.21016
X
X
83C852
H
Y
11012
X
83CLS80 (80CL580)
Z
N
01012 (1)
80C52 (80C32)
S
y
3.51024
X
X
87CS2
S
y
3.51024
X
X
X
N40
83C652 (80C652)
H
Y
1.21024
X
X
-4010 +125
N40
87C652
8
y
1.21020
X
X
X
N40
N40
-4010 +125
N40
8
N
3.51016
X
X
Y
3.51016
X
X
83C51FA (80C51 FA)
8
y
3.51024
X
X
N40
87CS1FA
8
Y
3.51024
X
X
N40
83L51FA
8
y
3.51020
X
X
N40
X
y
3.51020
X
Y
41016
X
87C575
S
y
41016
83C576 (80C576)
S
y
41016
B44
B64
N40
S
8
K44
A44
(3)
87C453
S
A44
8028
ordie
83C453 (80C453)
87L51FA
A44
F40
N40
X
83C575 (80C575)
B44 (5)
B44
X
83CS50 (80C550)
H (44)
K44
A44
F40
A44
B44 (5)
K44
A44
F40
A44
B44 (5)
B44
K44
A68
A68
N40
X
N40
X
X
N40
X
X
N40
X
N40
A44
F40
A44
B44
K44
A44
F40
A44
K44
A44
F40
A44
844
B44
B44
B44
K44
A44
B44
B44
87C576
S
Y
41016
X
83C562 (80C562)
H
N
1.21016
X
X
-4010 +125
A68
B80
83C552 (80C552)
H
N
1.21030
X
X
-40 to +125
A68
B80
87C552
S
y
1.21016
X
A44
A68
Notes: Production Centers are indicated In the second column: H - Hamburg, S - Sunnyvale, Z - Zunch.
All combinations of part type, speed, temperature and package may not be available.
1) Oscillator options start from 32kHz.
2) Also available in VS040 package.
3) Also available in VS056 Package.
4) Not recommended for new design.
5) Package available up to 16 MHz only.
July 1996
F40
17
K44
K68
B44
Philips Semiconductors
80C51 microcontroller family features guide
Memory
Part Number
(ROMless)
ROM
p
83C055
16K
p
87C055
p
80C54
p
87C54
p
83C654
EPRM
16K
16K
16K
16K
RAM
Counter
Timers
I/O
Port
Serial
Interfaces
External
Interrupt
Comments!
Special Features
256
2 (16-bit)
31/2
-
2
On-Screen Display, 9 PWM Outputs,
3 Software AID Inputs
256
2 (16-bit)
31/2
-
2
(see above)
256
3
4
UART
2
Standard; 80C51 compatible
256
3
4
UART
2
Standard; 87C51 compatible
256
2
4
UART,12C
2
80C51 Pin Compatible
s
87C654
256
2
4
UART,12C
2
(see above)
p
83CE654
16K
256
2
4
UART,12C
2
83C654 with Reduced EMI
p
83CL781
16K
256
3
4
UART,12C
10
Low Voltage (1.8V to 6V), Low Power
p
83CL782
16K
256
3
4
UART,12C
10
83CL781 Optimized 12MHz @ 3.1V
s
s
s
s
83C51FB
16K
256
3+ PCA
4
UART
2
Enhanced UART, 3 timers + PCA
256
3+ PCA
4
UART
2
Enhanced UART, 3 timers + PCA
256
3+ PCA
4
UART
2
Low Voltage 83C51 FB (3V @ 20MHz)
Low Voltage OTP 87C51 FB (3V @ 20MHz)
p
83C524
p
87C524
p
83C592 (80C592)
p
87C592
p
80C58
16K
87C51FB
83L51FB
16K
16K
87L51FB
p
87C58
s
s
83C51FC
p
83C528 (80C528)
16K
16K
16K
16K
16K
32K
32K
32K
87C51FC
32K
32K
256
3+ PCA
4
UART
2
512
3 + Watchdog
4
UART, 12C-bit
2
512 RAM
512
3+Watchdog
4
UART, 12C-bit
2
512 RAM
512
3+ Watchdog
6
UART,CAN
6
CAN Bus Controller with 8 x 1O-bit AID,
2 PWM outputs, Capture/Compare Timer
512
3 + Watchdog
6
UART,CAN
6
(see above)
256
3
4
UART
2
Standard; 80C51 compatible
256
3
4
UART
2
Standard; 87C51 compatible
256
3+PCA
4
UART
2
Enhanced UART, 3 timers + PCA
256
3+PCA
4
UART
2
Enhanced UART, 3 timers + PCA
512
3+ Watchdog
4
UART, 12C-bit
2
Large Memory for High Level Languages
Large Memory for High Level Languages
p
87C528
512
3+ Watchdog
4
UART, 12C-bit
2
p
83CE528 (80CE528)
32K
512
3 + Watchdog
4
UART, 12C-bit
2
8XC528 with Reduced EMI
p
83CE598 (80CE598)
32K
512
3 + Watchdog
6
UART,CAN
6
CAN Bus Controller, 8 x 10-bit AID,
2 PWM outputs, WD, T2, Reduced EMI
p
87CE598
p
83CE558(80CE558)
p
89CE558
32K
32K
32K
32K
512
3 + Watchdog
6
UART,CAN
6
(see above)
1024
3 + Watchdog
6
UART,12C
2
Low EMI, 8 Channel10-bit AID,
2 PWM Outputs, Capture/Compare Timer
1024
3 + Watchdog
6
UART,12C
2
32K FLash EEPROM plus above
Notes: Part number prefixes are noted In the first column.
All combinations of part type, speed, temperature and package may not be available.
July
1996
18
Philips Semiconductors
80C51 microcontroller family features guide
Part Number
(ROMless)
package
lemperature Hanges (0C)
Program
Security?
Clock Freq
(MHz)
Oto 70
N
3.5 to 20
X
-40 to +85
-55 to +125
PDIP
83C055
S
87C055
S
N
3.5 to 20
X
80C54
S
y
3.5 to 24
X
X
N40
87C54
S
Y
3.5 to 24
X
X
N40
83C654 (80C654)
H
Y
1.2t024
X
X
-40 to +125
R42.
N40
X
N40
PLCC
F40
A44
CLCC
PQFP/SSOP
NB42
NB42
87C654
S
y
1.2t020
X
X
83CE654
H
y
1.2to 16
X
X
83CL781
Z
N
Oto 12 (1)
X
N40
Z
N
Oto 12 (1)
-25 to +55
N40
83C51 FB
S
y
3.5 to 24
X
X
N40
87C51 FB
S
y
3.5 to 24
X
X
N40
83L51FB
S
y
3.5 to 20
X
N40
87L51FB
S
y
3.5 to 20
X
N40
83C524
H
Y
1.2 to 16
X
X
N40
87C524
S
y
3.5 to 20
X
N40
83C592 (80C592)
H
Y
1.2to 16
X
X
87C592
H
Y
1.2to 16
X
80C58
S
y
3.5 to 16
X
X
87C58
S
y
3.51016
X
X
N40
83C51FC
S
y
3.5 to 24
X
X
N40
87C51FC
S
Y
3.51024
X
X
N40
83C528 (80C528)
H
Y
1.2to 16
X
X
87C528
S
Y
3.5 to 20
X
X
83CE528 (80CE528)
H
Y
1.2to 16
X
X
-40 to +125
83CE598 (80CE598)
H
Y
1.2to 16
X
-40 to +125
87CE598
H
Y
3.5 to 16
X
X
83CE55880CE558
H
y
1.2to 16
X
X
89CE558
H
Y
1.2to 16
X
X
B44
K44
A44
F40
A44
B44
B44
K44
B44
B44
B44
A44
F40
B44
K44
A44
F40
A44
AS8
K68
R42
AS8
K68
N40
A44
F40
F40
A44
A44
B44
B44
K44
B44
K44
B44
A44
F40
B44
B44
K44
A44
N40
N40
A44
B44
B44
K44
F40
B44
B44
K44
A44
-40 to +125
-40 to +125
A44
A44
B44
A44
B44
B80
B80
-40 to +125
Notes: Production Centers are indicated In the second column: H - Hamburg, S - Sunnyvale, Z - Zunch.
All combinations of part type, speed, temperature and package may not be available.
1) Oscillator options start from 32kHz.
2) Also available in VS040 package.
3) Also available in VS056 Package.
4) Not recommended for new design.
5) Package available up to 16 MHz only.
19
A44
B44
83CL782
July 1996
CDIP
B80
Q80
B80
20
Philips Semiconductors
Section 2
General Information
CONTENTS
Contents .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
Ordering information ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
Quality.......................................................................
28
Handling MOS devices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
Rating systems ...............................................................
30
21
22
Philips Semiconductors
CONTENTS
IC25: 16-bit 80C51 XA (eXtended Architecture) Microcontrollers
Preface............................................................................................................
3
Section 1 - Selection Guides
XA tools linecard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Microcontroller internet and bulletin board access .......................................................................
Philips Fax-On-Demand System ......................................................................................
CMOS and NMOS 8-bit microcontroller family. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CMOS 16-bit microcontroller family . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
80C51 microcontroller family features guide ............................................................................
7
8
10
11
15
16
Section 2 - General Information
Contents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ordering information. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Quality............................................................................................................
Handling MOS devices ..............................................................................................
Rating systems ......... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
27
28
29
30
Section 3 - XA User Guide
The XA Family - High Performance, Enhanced Architecture 80C51-Compatible 16-Bit CMOS Microcontrollers
1.1 Introduction...............................................................................................
1.2 Architectural Features of XA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
33
34
2
ArchitecturalOverview. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . .
2.1
Introduction...............................................................................................
2.2 Memory Organization ......................................................................................
2.2.1 Register File .......................................................................................
2.2.2 Data Memory. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2.3 Code Memory ......................................................................................
2.2.4 Special Function Registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3 CPU.....................................................................................................
2.3.1 CPU Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.4 Task Management .....................................................................................•...
2.5 Instruction Set. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . .. .. . . . . . . . . . . . . . . . . .
2.5.1 Instruction Syntax. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.5.2 Instruction Set Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.6 External Bus ..............................................................................................
2.6.1 External Bus Signals ................................................................................
2.6.2 Bus Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.6.3 Bus Timing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.7 Ports.....................................................................................................
2.8 Peripherals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.9 80C51 Compatibility. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.9.1 Software Compatibility..... ..................... ........... ......... .............. ...................
2.9.2 Hardware Compatibility.... ................ .........................................................
35
35
35
35
36
38
39
40
41
45
46
46
49
52
52
52
53
54
55
55
56
56
3
XA Memory Organization .......................................................................................
3.1
Introduction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . .
3.2 The XA Register File .......................................................................................
3.2.1 Register File Overview. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3 The XA Memory Spaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3.1 Bytes, Words, and Alignment .................... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4 Data Memory .............................................................................................
3.4.1 Alignment in Data Memory ...........................................................................
3.4.2 External and Internal Overlap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4.3 Use and Read/Write Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4.4 Data Memory Addressing ............................................................................
3.5 Code Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.5.1 Alignment in Code Memory. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.5.2 External and Internal Overlap. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.5.3 Access.......................................................... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.6 Special Function Registers (SFRs) ................................. . . . . . . . . . . . . . . . . . . . . . . . .. . . . . .. . . . . . . . . .
3.7 Summary of Bit Addressing ........................................................................
58
58
58
58
61
62
62
62
62
63
63
67
March 1997
23
67
68
68
69
71
Philips Semiconductors
CONTENTS
4
CPU Organization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1
Introduction .................. , ......................................... .... .............. ........... ......
4.2 Program Status Word ......................................................................................
4.2.1 CPU Status Flags. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2.2 Operating Mode Flags .............................................................. . . . . . . . . . . . . . . . . .
4.2.3 Program Writes to PSW ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . .
4.2.4 PSW Initialization ...................................................................................
4.3 System Configuration Register ..............................................................................
4.3.1 XA Large-Memory Model Description ..................................................................
4.3.2 XA Page 0 Model Description. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4 Reset. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4.1 Reset Sequence Overview ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4.2 Power-up Reset ....................................................................................
4.4.3 Internal Reset Sequence. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4.4 XA Configuration at Reset. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4.5 The Reset Exception Interrupt ........................................................................
4.4.6 Startup Code .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4.7 Reset Interactions with XA Subsystems. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4.8 An External Reset Circuit ............................................................................
4.5 Oscillator. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.6 Power Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.6.1 Idle Mode. . . . . . . . . . . . . . . . . . . . .
..........................................................
4.6.2 Power-Down Mode. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.7 XA Stacks .............................................................. , ................ ........... ......
4.7.1 The Stack Pointers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.7.2 PUSH and POP ....................................................................................
4.7.3 Stack-Based Addressing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.7.4 Stack Errors. . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.7.5 Stack Initialization. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.8 XA Interrupts. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.8.1 Interrupt Type Detailed Descriptions ...................................................................
4.8.2 Interrupt Service Data Elements ......................................................................
4.9 Trace Mode Debugging. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.9.1 Trace Mode Operation.. .............. ............. ...... ... .........................................
4.9.2 Trace Mode Initialization and Deactivation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
72
72
73
73
75
75
76
76
77
77
78
78
78
79
80
81
82
82
82
83
83
84
84
85
85
85
87
87
88
89
90
94
96
96
98
5
Real-time Multitasking. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.1
Assist for Multitasking in XA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.1.1 Dual stack approach ................................................................................
5.1.2 Register Banks .....................................................................................
5.1.3 Interrupt Latency and Overhead. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.1.4 Protection.... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
99
99
99
100
100
100
6
Instruction Set and Addressing .................................................................................
6.1
Addressing Modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2 Description of the Modes ...................................................................................
6.2.1 Register Addressing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2.2 Indirect Addressing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2.3 Indirect-Offset Addressing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2.4 Direct Addressing ...................... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2.5 SFR Addressing ....................................................................................
6.2.6 Immediate Addressing.. .......................................... .................. .. ...............
6.2.7 Bit Addressing....... .. .............................................................................
6.3 Relative Branching and Jumps ..............................................................................
6.4 Data Types in XA .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.5 Instruction Set Overview. ...... ....... ......... .............................................................
6.6 Summary of Illegal Operand Combinations on the XA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
103
103
104
104
105
106
107
108
108
109
110
111
111
277
7
External Bus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.1
External Bus Signals........ .. ..... ........... ........... .. ...... ..........................................
7.1 .1 P'S'Ef\J - Program Store Enable .......................................................................
7.1.2 FIT> - Read. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.1 .3 WR[ - Write Low Byte. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.1.4 WAH - Write High Byte. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
278
278
278
278
278
278
March 1997
24
Philips Semiconductors
CONTENTS
7.1.5 ALE - Address Latch Enable .........................................................................
7.1.6 Address Lines. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . .
7.1.7 Multiplexed Address and Data Lines. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . .
7.1.8 WAIT-Wait................................. ............. ................ .... ............... .......
7.1.9 EA - External Access ...............................................................................
7.1.10 BUSW - Bus Width .................................................................................
Bus Configuration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . .. . . . . . . . . . . .
7.2.1 8-Bit and 16-Bit Data Bus Widths......... .... .................. ............. ..........................
7.2.2 Typical External Device Connections ..................................................................
Bus Timing and Sequences .................................................................................
7.3.1 Code Memory ......................................................................................
7.3.2 Data Memory. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . .
7.3.3 Reset Configuration .................................................................................
Ports. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.4.1 1/0 Port Access. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . .
7.4.2 Port Output Configurations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . .. . . . . . . . . . . .
7.4.3 Quasi-BidirectionaIOutput.... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . .
7.4.4 Reset State and Initialization .........................................................................
7.4.5 Sharing of 1/0 Ports with On-Chip Peripherals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
278
279
279
279
279
280
280
280
282
284
284
286
292
293
293
294
294
297
297
8
Special Function Register Bus ..................................................................................
8.1
Implementation and Possible Enhancements ..................................................................
8.2 Read-Modify-Write Lockout .................................................................................
298
298
299
9
80C51 Compatibility. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.1 Compatibility Considerations ................................................................................
9.1.1 Compatibility Mode, Memory Map and Addressing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.1.2 Interrupt and Exception Processing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.1.3 On-Chip Peripherals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.1.4 Bus Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.1.5 Instruction Set. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.2 Code Translation ..........................................................................................
9.3 New Instructions on the XA .................................................................................
300
300
300
302
303
303
304
307
310
7.2
7.3
7.4
Section 4 - XA Family Derivatives
XA-G1
XA-G2
XA-G3
CMOS single-chip 16-bit microcontrolier....................................................................
CMOS single-chip 16-bit microcontroller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CMOS single-chip 16-bit microcontroller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
317
348
379
Section 5 - Future Derivatives
XA-C3
XA-S3
CMOS single-chip 16-bit microcontroller with CAN/DeviceNet controller ........................................
Single-chip 16-bit microcontroller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
411
418
Section 6 - Application Notes
AN700
AN701
AN702
AN703
AN704
AN705
AN707
AN708
AN709
AN710
AN711
AN713
AN96075
AN96098
AN96119
March 1997
Digital filtering using XA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SP floating point math with XA ............................................................................
High level language support in XA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XA benchmark versus the architectures 68000, 80C196, and 80C51 ...........................................
An upward migration path for the 80C51: the Philips XA architecture ...........................................
XA benchmark vs. the MCS251 ...........................................................................
Programmable peripherals using the PSD311 with the Philips XA ..............................................
Translating 8051 assembly code to XA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . .
Reversing bits within a data byte on the XA .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Implementing fuzzy logic control with the XA ......... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
jlC/OS for the Philips XA .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XA interrupts ...........................................................................................
Using the XA EAlWAIT pin ...............................................................................
Interfacing 68000 family peripherals to the XA................................................ ......... . . .. . .
12C with the XA-G3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
425
430
453
457
481
489
511
522
552
555
565
578
598
619
632
Philips Semiconductors
CONTENTS
Section 7 - Development Support Tools
XA tools linecard ..................................................................................". . . . . . . . . . . . . . . . . .
Advin Systems Inc. PILOT-U40 Universal Programmer ................................................................
Aisys Ltd. DriveWayTM-XA Device Drivers Code Generation Tool ........................................................
Archimedes Software, Inc. IDE-8051 XA Archimedes Integrated Development
Environment (IDE) for 8051XA .......................... ...........................................................
Ashling Microsystems Ltd. Ultra-51XA Microprocessor Development System..... .......................................
BP Microsystems
BP-1200 Universal Device Programmer.............................................................................
BP-2100 Concurrent Programming System™ ........................................................................
BP-41 00 Automated Programming System ..........................................................................
BSOlTasking Total Development Solution for the Philips 51 XA Architecture ...............................................
CEIBO
DS-XA In-Circuit Emulator. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XA Software Tools ...............................................................................................
CMX Company
CMX-RTXTM, CMX-TINY+TM, CMX-TINyTM Real-Time Multi-Tasking Operating System
for Microprocessors and Microcomputers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
The CMX-TINy+TM RTOS Kernel................... ........ ......................................... ...............
CMX PCProto·RTXTM ........ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
The CMXTracker™ .................. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
The CMXBug™ Debugger .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Data 1/0 Corp. ProMaster 2500 Automated Handling System. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
EDI Corporation Accessories for 8051-Architecture Devices.............................. ............... ...............
Embedded System Products, Inc.
3 different configurations ....... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
RTXCTM V3.2 Library contents .....................................................................................
RTXCTM V3.2 Kernel services ............ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
RTXCTM Real-Time Kernel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
RTXCio™ Input/Output Subsystem .................................................................................
RTXCfile™ MS-DOS Compatible File Manager ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Emulation Technology, Inc. XA Microcontroller Development Tools............ ........... ...............................
Future Designs, Inc. XTEND, XA Trainer & Expandable Narrative Design........ ................ ........................
HI·TECH Software HI-TECH C Compiler for the Philips XA microcontroller
- technical specifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Hiware Hi-Cross Development System.. ... ...... ......... ................. ... .................. ......................
Logical Systems Corp. 51XA-G3 Programming Adapters... ...........................................................
Nohau Corp. EMUL 51XA In·Circuit Emulators for the P51XA Family.....................................................
Philips Semiconductors
P51XA Development Board .......................................................................................
80C51 XA Software Development Tools .............................................................................
Signum Systems Corp. Universal In-Circuit Emulator for 8051/31 Series. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
System General Universal Device Programmers ......................................................................
660
661
662
663
665
670
676
678
680
682
686
692
693
694
695
696
697
698
699
700
701
703
707
709
711
713
715
719
720
721
728
730
732
734
Section 8 - Package Information
Soldering ..........................................................................................................
LQFP44:
plastic low profile quad flat package; 44 leads; body 10 x 10 x 1.4 mm ...... 80T389-1 .........................
PLCC44:
plastic leaded chip carrier; 44 leads .................................... 80T187-2 .........................
44-pin CerQuad J-Bend (K) Package .................................. 1472A.............................
TQFP44:
plastic thin quad flat package; 44 leads; body 10 x 10 x 1.0 mm ........... 80T376-1 .........................
LQFP64:
plastic low profile quad flat package; 64 leads; body 10 x 10 x 1.4 mm ...... 80T314-2 .........................
PLCC68:
plastic leaded chip carrier; 68 leads .................................... S0T188-2 .........................
PLCC68:
plastic leaded chip carrier; 68 leads; pedestal ............... , ........... SOT188-3 .........................
Section 9 - Data Handbook System ..............................................................................
March 1997
26
739
741
742
743
744
745
746
747
750
Philips Semiconductors
Ordering Information
XA PRODUCTS
Example:
P51 XA G3 7
Philips SOCS1 eX1ended Architecture]
Derivative Name
T
KBA
L
Package Code
A = Plastic Leaded Chip Carrier (PLCC)
BD = Low Profile Quad Flat Pack (LQFP)
KA = CerQuad (window)
BC = Thin Quad Flat Pack (TQFP)
Temperature
B = O°C to +70°C
F = -40°C to +85°C
H = -40°C to +125°C
Speed
J = 25MHz
K = 30MHz
' - - - - - - Memory Option
0= ROMless
3= ROM
5 = Bond-Out (emulation)
7 = EPROM/OTP
9 =FLASH
1997 Mar 21
27
Philips Semiconductors
General
Quality
TOTAL QUALITY MANAGEMENT
PRODUCT CONFORMANCE
Philips Semiconductors is a Quality Company, renowned
for the high quality of our products and service. We keep
alive this tradition by constantly aiming towards one
ultimate standard, that of zero defects. This.aim is guided
by our Total Quality Management (TQM) system, the
basis of which is described in the following paragraphs.
The assurance of product conformance is an integral part
of our quality assurance (QA) practice. This is achieved
by:
• Incoming material management through partnerships
with suppliers.
• In-line quality assurance to monitor process
reproducibility during manufacture and initiate any
necessary corrective action. Critical process steps are
100% under statistical process control.
Quality assurance
Based on ISO 9000 standards, customer standards such
as Ford TQE and IBM MDQ. Our factories are certified to
ISO 9000 by external inspectorates.
• Acceptance tests on finished products to verify
conformance with the device specification. The test
results are used for quality feedback and corrective
actions. The inspection and test requirements are
detailed in the general quality specifications.
Partnerships with customers
PPM co-operations, design-in agreements, ship-to-stock,
just-in-time and self-qualification programmes, and
application support.
• Periodic inspections to monitor and measure the
conformance of products.
Partnerships with suppliers
Ship-to-stock, statistical process control and ISO 9000
audits.
PRODUCT RELIABILITY
Quality improvement programme
With the increasing complexity of Original Equipment
Manufacturer (OEM) equipment, components reliability
must be extremely high. Our research laboratories and
development departments study the failure mechanisms
of semiconductors. Their studies result in design rules
and process optimization for the highest built-in product
reliability. Highly accelerated tests are applied to the
product reliability evaluation. Rejects from reliability tests
and from customer complaints are submitted to failure
analysis, to result in corrective action.
Continuous process and system improvement, design
improvement, complete use of statistical process control,
realization of our final objective of zero defects, and
logistics improvement by ship-to-stock and just-in-time
agreements.
ADVANCED QUALITY PLANNING
During the design and development of new products and
processes, quality is built-in by advanced quality
planning. Through failure-mode-and-effect analysis the
critical parameters are detected and measures taken to
ensure good performance on these parameters. The
capability of process steps is also planned in this phase.
CUSTOMER RESPONSES
Our quality improvement depends on joint action with our
customer. We need our customer's inputs and we invite
constructive comments on all aspects of our performance.
Please contact our local sales representative.
RECOGNITION
The high quality of our products and services is
demonstrated by many Quality Awards granted by major
customers and international organizations.
1995 Mar 21
28
Philips Semiconductors
Handling MOS devices
General
contents are sensitive to electrostatic discharge is shown by warning
labels on both primary and secondary packing.
ELECTROSTATIC CHARGES
Electrostatic charges can exist in many things; for example,
man-made-fibre clothing, moving machinery, objects with air blowing
across them, plastic storage bins, sheets of paper stored in plastic
envelopes, paper from electrostatic copying machines, and people.
The charges are caused by friction between two surfaces, at least
one of which is non-conductive. The magnitude and polarity of the
charges depend on the different affinities for electrons of the two
materials rubbing together, the friction force and the humidity of the
surrounding air.
The devices should be kept in their original packing whilst in
storage. If a bulk container is partially unpacked, the unpacking
should be performed at a protected work station. Any MOS devices
that are stored temporarily should be packed in conductive or
antistatic packing or carriers.
ASSEMBLY
MOS devices must be removed from their protective packing with
earthed component pincers or short-circuit clips. Short-circuit clips
must remain in place during mounting, soldering and
cleansing/drying processes. Do not remove more devices from the
storage packing than are needed at anyone time.
Production/assembly documents should state that the product
contains electrostatic sensitive devices and that special precautions
need to be taken.
Electrostatic discharge is the transfer of an electrostatic charge
between bodies at different potentials and occurs with direct contact
or when Induced by an electrostatic field. All of our MOS devices are
internally protected against electrostatic discharge but they can be
damaged if the following precautions are not taken.
WORK STATION
Figure 1 shows a working area suitable for safely handling
electrostatic sensitive devices. It has a work bench, the surface of
which is conductive or covered by an antistatic sheet. Typical
resistivity for the bench surface Is between 1 and 500 kn per cm 2
The floor should also be covered with antistatic material. The
following precautions should be observed:
• Persons at a work bench should be earthed via a wrist strap and a
resistor
During assembly, endure that the MOS devices are the last of the
components to be mounted and that this is done at a protected work
station.
All tools used during assembly, including soldering tools and solder
baths, must be earthed. All hand tools should be of conductive or
antistatic material and, where possible, should not be insulated.
Measuring and testing of completed circuit boards must be done at a
protected work station. Place the soldered side of the circuit board
on conductive or antistatic foam and remove the short-circuit clips.
Remove the circuit board from the foam, holding the board only at
the edges. Make sure the circuit board does not touch the
conductive surface of the work bench. After testing, replace the
circuit board on the conductive foam to await packing.
• All mains-powered electrical equipment should be connected via
an earth leakage switch
• Equipment cases should be earthed
• Relative humidity should be maintained between 50 and 65%
• An ionizer should be used to neutralize objects with immobile
static charges
Assembled circuit boards containing MOS devices should be
handled in the same way a unmounted MOS devices. they should
also carry waning labels and be packed in conductive or antistatic
packing.
RECEIPT AND STORAGE
MOS devices are packed for dispatch in antistatic/conductive
containers, usually boxes, tubes or blister tape. The fact that the
(1)
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8), (9)
Earthing rail.
Resistor (500 kn ± 10%,0.5 W).
Ionizer.
Work bench.
Chair
Wrist strap.
Electrical equipment.
Conductive surface/antistatic sheet.
Figure 1. Protected work station
November 1994
29
Philips Semiconductors .
Rating systems
General
The equipment manufacturer should design so that,
initially and throughout the life of the device, no absolute
maximum value for the intended service is exceeded with
any device, under the worst probable operating
conditions with respect to supply voltage variation,
equipment component variation, equipment control
adjustment, load variations, signal variation,
environmental conditions, and variations in
characteristics of the device under consideration and of
all other electronic devices in the equipment.
RATING SYSTEMS
The rating systems described are those recommended
by the IEC in its publication number 134.
Definitions of terms used
ELECTRONIC DEVICE
An electronic tube or valve, transistor or other
semiconductor device. This definition excludes inductors,
capacitors. resistors and similar components.
CHARACTERISTIC
Design maximum rating system
A characteristic is an inherent and measurable property
of a device. Such a property may be electrical,
mechanical, thermal, hydraulic, electro-magnetic or
nuclear, and can be expressed as a value for stated or
recognized conditions. A characteristic may also be a set
of related values, usually shown in graphical form.
Design maximum ratings are limiting values of operating
and environmental conditions applicable to a bogey
electronic device of a specified type as defined by its
published data, and should not be exceeded under the
worst probable conditions.
These values are chosen by the device manufacturer to
provide acceptable serviceability of the device,taking
responsibility for the effects of changes in operating
conditions due to variations in the characteristics of the
electronic device under consideration.
BOGEY ELECTRONIC DEVICE
An electronic device whose characteristics have the
published nominal values for the type. A bogey electronic
device for any particular application can be obtained by
considering only those characteristics that are directly
related to the application.
The equipment manufacturer should design to that,
initially and throughout the life of the device, no design
maximum value for the intended service is exceeded with
a bogey electronic device, under the worst probable
conditions with respect to supply voltage variation,
equipment component variation, variation in
characteristics of all other devices in the equipment,
equipment control adjustment, load variation, signal
variation and environmental conditions.
RATING
A value that establishes either a limiting capability or a
limiting condition for an electronic device. It is determined
for specified values of environment and operation, and
may be stated in any suitable terms. Limiting conditions
may be either maxima or minima.
RATING SYSTEM
Design centre rating system
The set of principles upon which ratings are established
and which determine their interpretation. The rating
system indicates the division of responsibility between
the device manufacturer and the circuit designer, with the
object of ensuring that the working conditions do not
exceed the ratings.
Design centre ratings are limiting values of operating and
environmental conditions applicable to a bogey electronic
device of a specified type as defined by its published
data, and should not be exceeded under normal
conditions.
These values are chosen by the device manufacturer to
provide acceptable serviceability of the device in average
applications, taking responsibility for normal changes in
operating conditions due to rated supply voltage
variation, equipment component variation, equipment
control adjustment, load variation, signal variation,
environmental conditions, and variations in the
characteristics of all electronic devices.
Absolute maximum rating system
Absolute maximum ratings are limiting values of
operating and environmental conditions applicable to any
electronic device of a specified type, as defined by its
published data, which should not be exceeded under the
worst probable conditions.
These values are chosen by the device manufacturer to
provide acceptable serviceability of the device, taking no
responsibility for equipment variations, environmental
variations, and the effects of changes in operating
conditions due to variations in the characteristics of the
device under consideration and of all other electronic
devices in the equipment.
1995 Mar 27
The equipment manufacturer should design so that,
initially, no design centre value for the intended service is
exceeded with a bogey electronic device in equipment
operating at the stated normal supply voltage.
30
Philips Semiconductors
Section 3
XA User Guide
CONTENTS
The XA Family - High Performance, Enhanced Architecture 80C5i-Compatible
is-Bit CMOS Microcontrollers , ....... , ........... , ............. " ................ .
1.1 Introduction, .. , , ....... , .... , ............... , .............................. .
1.2 Architectural Features of XA , .. , .. , , , .. , .. , ................................... .
33
33
34
2
Architectural Overview .......................................................... .
2.1
Introduction ................................................................ .
2.2 Memory Organization ........................................................ .
2.2.1 Register File ......................................................... .
2.2.2 Data Memory ........................................................ .
2.2.3 Code Memory .'.,' ...... , ........................ , .................. .
2.2.4 Special Function Registers ......................................... : .. .
2.3 CPU. . .. .., ........ ,." .............. , ................... , ............... .
2.3.1 CPU Blocks " ... , ... , ........................... , ................... .
2.4 Task Management .......................................................... .
2.5 Instruction Set .............................................................. .
2.5.1 Instruction Syntax .................................. . . . . . . . .. . ....... .
2.5.2 Instruction Set Summary .............................................. .
2.6 External Bus ............................................................... .
2.6.1 External Bus Signals ................................................. .
2.6.2 Bus Configuration .................................................... .
2.6.3 Bus Timing .......................................................... .
2.7 Ports. , . , ...... , . , ...... , .................................................. .
2.8 Peripherals .. , ..... , ..... , .................................................. .
2.9 80C51 Compatibility ......................................................... .
2.9.1 Software Compatibility ................................................ .
2.9.2 Hardware Compatibility .............................. , ................ .
35
35
35
35
36
38
39
40
41
45
46
46
49
52
52
52
53
54
55
55
56
56
3
XA Memory Organization , ... , ................................................... .
3.1
Introduction ... , . " .......................... , ............................... .
3.2 The XA Register File .... " ................................................... .
3.2.1 Register File Overview , ............................ , .................. .
3.3 The XA Memory Spaces .'.' .............................. , .................. .
3.3.1 Bytes, Words, and Alignment .......................................... .
3.4 Data Memory ............................................................... .
3.4.1 Alignment in Data Memory ........................... , ................ .
3.4.2 External and Internal Overlap ......................... , ................ .
3.4.3 Use and ReadlWrite Access ......................................... .' ..
3.4.4 Data Memory Addressing ............................................. .
3.5 Code Memory ........................................... , .................. .
3.5.1 Alignment in Code Memory ............................................ .
3.5.2 External and Internal Overlap ....................... , .................. .
3.5.3 Access ............................................................. .
3.6 Special Function Registers (SFRs) ............................................ .
3.7 Summary of Bit Addressing ................................................... .
58
58
58
58
61
62
62
62
62
63
63
67
67
68
68
69
71
4
CPU Organization ............................................................... .
4.1
Introduction ............................................... , ................ .
4.2 Program Status Word ....................................... , ................ .
4.2.1 CPU Status Flags ................................. , .................. .
4.2.2 Operating Mode Flags ................................................ .
4.2.3 Program Writes to PSW ............................................... .
4.2.4 PSW Initialization .................................................... .
4.3 System Configuration Register ............................... , ................ .
4.3.1 XA Large-Memory Model Description .................. , ................ .
4.3.2 XA Page 0 Model Description ......................... , ................ .
4.4 Reset
4.4.1 Reset Sequence Overview .. ,.', ... , .................................. .
4.4.2 Power-up Reset. , .................................................... .
4.4.3 Internal Reset Sequence .............................................. ,
4.4.4 XA Configuration at Reset ............................................. ,
4.4.5 The Reset Exception Interrupt .................................... " .. ,.
4.4.6 Startup Code .................................................. .
4.4.7 Reset Interactions with XA Subsystems ........................ , ..
4.4.8 An External Reset Circuit ............................. , ...... , , , ,
72
72
73
73
75
75
76
76
77
77
78
78
78
79
80
81
82
82
82
31
""IIlli,!f
IIII~
,..
4.5
4.6
Oscillator. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Power Control ............................ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.6.1 Idle Mode ............................................................
4.6.2 Power-Down Mode. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XA Stacks .................. "...............................................
4.7.1 The Stack Pointers....................................................
4.7.2 PUSH and POP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.7.3 Stack-Based Addressing.. .. .... .... . ...... ..... .. . ... .. ..... ... . ......
4.7.4 StackErrors ...................... ,...................................
4.7.5 Stack Initialization ............ ". " ............ ,. ... ... .. .. .... . . . .. ... .
XA Interrupts .............................. '. ... .... . . .. . ... .... ....... .. ... .
4.8.1 Interrupt Type Detailed Descriptions ' .. , .. " .... " ... ,...................
4.8.2 Interrupt Service Data Elements ........ , . , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Trace Mode Debugging , ............ , ........ , ..... , . . . . . . . . . . . . . . . . . . . . . . . . . .
4.9.1 Trace Mode Operation ... , ... , .. , . . . .. ................................
4.9.2 Trace Mode Initialization and Deactivation .. ". .... . .. .... .. ........ . .... ..
83
83
84
84
85
85
85
87
87
88
89
90
94
96
96
98
5
Real-time Multitasking ...... , ..... , , , , .. , " ... , ...... , . , . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.1 Assist for Multitasking in XA ... , . " ...... , ........ , , . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.1.1 Dual stack approach. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.1.2 Register Banks .......................................................
5.1.3 Interrupt Latency and Overhead. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.1.4 Protection ........... "" ...... "".""....................................
99
99
99
100
100
100
6
Instruction Set and Addressing "".""".".", ......... " , .. , , , .. , , . . . . . . . . . . . . . . . . . . . .
6.1 Addressing Modes ............. """""""" .. ""." .. "" .... ,,.......................
6.2 Description of the Modes ....... , . , ... , ........ , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2.1 Register Addressing . , ... , , , , .... , .. , . , , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2.2 Indirect Addressing ..... , .. , ... , ....... , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2.3 Indirect-Offset Addressing .. , ........ , .. . . .. ... .. ... ... .. ..... .. .... ... .
6.2.4 Direct Addressing ....... " .. " ...... " ... "...............................
6.2.5 SFR Addressing ......................................................
6.2.6 Immediate Addressing ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2.7 Bit Addressing ...... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.3 Relative Branching and Jumps. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.4 Data Types in XA ............................................................
6.5 Instruction Set Overview.... .... . .. .... .... ... .. ...... ... ...... ..... ..... ... ..
6.6 Summary of Illegal Operand Combinations on the XA ... . . . . . . . . . . . . . . . . . . . . . . . . . .
103
103
104
104
105
106
107
108
108
109
110
111
111
277
7
External Bus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.1
External Bus Signals .........................................................
7.1.1
PSEI'1- Program Store Enable .........................................
7.1.2 l1lJ - Read . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.1.3 WRI - Write Low Byte ................................................
7.1.4 WAR - Write High Byte ......... "'.....................................
7.1.5 ALE - Address Latch Enable ...........................................
7.1.6 Address Lines ........... " ...... ".....................................
7.1.7 Multiplexed Address and Data Lines ... , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.1.8 WAIT - Wait ..... , . , . , ... , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.1.9 EA.:.. External Access .. , . , , ...... , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.1.10 BUSW-BusWidth ............................... : ...................
7.2 Bus Configuration ................... ". .... . .. . ... ... .. .. . ... .. .. . .. .. .... .. . .
7.2.1 8-Bit and 16-Bit Data Bus Widths. .. .. . .. . .. .. .. . . .. . .. . . . .. . .. .. .. .. .. ..
7.2.2 Typical External Device Connections ....................................
7.3 Bus Timing and Sequences ... ,...............................................
7.3.1 Code Memory ........ ,...............................................
7.3.2 Data Memory....... ..... .............................................
7.3.3 Reset Configuration ...................................................
7.4 Ports" , , ... , .... , ..... , ..... , ................. , . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.4.1 I/O Port Access ........ , , ..... , . , . , ..... , . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.4.2 Port Output Configurations .............................................
7.4.3 Quasi-Bidirectional Output .............................................
7.4.4 Reset State and Initialization" . , .. , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.4.5 Sharing of I/O Ports with On-Chip Peripherals..... . .. .. ....... . .. ... .. . .. . .
278
278
278
278
278
278
278
279
279
279
279
280
280
280
282
284
284
286
292
293
293
294
294
297
297
8
Special Function Register Bus ............ ~ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.1
Implementation and Possible Enhancements ....................................
8.2 Read-Modify-Write Lockout ...................................................
298
298
299
9
80C51 Compatibility ................ , ............................................ ,
9.1 Compatibility Considerations .................. "...............................
9.1.1 Compatibility Mode, Memory Map and Addressing. . . . . . . . . . . . . . . . . . . . . . . . .
9.1.2 Interrupt and Exception Processing ..... , . , ....... , . . . . . . . . . . . . . . . . . . . . . .
9.1.3 On-Chip Peripherals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.1.4 Bus Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.1.5 Instruction Set" ...................... , . , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.2 Code Translation ............. ,..............................................
9.3 New Instructions on the XA .. , .... , ...... , ...... , ... , . . . . . . . . . . . . . . . . . . . . . . . . . .
300
300
300
302
303
303
304
307
310
4.7
4.8
4.9
1 The XA Family - High Performance, Enhanced
Architecture 80C51-Compatible 16-8it CMOS
Microcontrollers
1.1 Introduction
The role of the microcontroller is becoming increasingly important in the world of electronic '
systems which in the past relied on mechanical or simple analog electrical control systems h s as
microcontrollers embedded in them that dramatically improve functionality and reliahilit w:.~e
reducing size and cost. Microcontrollers also provide the general purpose solutiOllS n .. Y, dIe
, ce de so
that common software and hardware can be shared among multiple designs to reduce
1
overa 1
design-in time and costs.
The requirements of systems using microcontrollers are .,Iso much more demanding now th. .
.c
'
11"
lew years ago. Whether called by the name ..mIcrocontro
ers, "embedded conrrollers",til ,t
"single-chip microcomputers", the systems that use these devicesrequire a much highl'r le~e1 ~;
performance and on-chip integration.
As microcontrollers begin to enter into Illore complex c()ntrol~nvronIllents. rhe demand fi
increased throughput, increased addressing capability, and higkr Ive] of on-chip integratio~;
has led to the development of I (}-bit micrncontrollers that arc ca~ah of processing much
.
.'
more
information than 8-bit mil:rocontrollers. However, Simply Intl~gtlllg more bits Of'
lllore
peripheral functions does not solve the dl'mand of the control sysus being developed today.
New microcontrollers must provide. high-~evel-Iangua~e wlrt, POWerful debugging
environments, and advanced methods 01 real tIme control 111 onle' meet tile more stringent
functionality and cost requirements ofthl"s~ systems.
To meet the above goals The XA or "eXtended Architectunmily of general-purpose
microcontrollers from Philips is being introduced to provide the ~st performance/cost ratio
for ~ vari~ty of h~gh performance emhc{~de~-systems-control aijions including real-time.,
multI-taskmg enVIronments. The XA Iamlly members add
CPU core a specific
complement of on-chip memory, 1I0s, and peripherals aimed ~tIng the requirements (I
different application areas. The core-based architecture allow~;expansion of the rami'
according to a wide variety of customer requirements. The
instruction set Slippor
faster computing power. faster data transfer. multi-tasking, impljsponse to external eve
and efficient high-leveJJanguage programming.
f.
pf
i
Upward (assembly-level) code compatihility with the PhiliP' family of contro
provides a smooth design transition for system upgrades hy pg tremendously enh~,
performance.
XA User Guide
33
I
I
I
I
I
I
II
Automotive Electronics
- Power train Electronics
- Vehicle Control Electronics
- Ignition Control
- Fuel Injection Control
- Anti-lock Braking
- Active Suspension
Data Processing
Industrial Control
_ Disk Drives
..
_ Laser Printers
_Multi-processor Communtcatlons
_Copiers
_ Protocol Handling
- Mass Storage
_Computer Peripherals
- Robotic Control
- Asynchronous Motor Control
- Fuzzy Control
- Stepper Motor Control
- Process Automation
- Drive Control
F\gure 1. Ipplications of Philips XA microcontrollers
I
1.2 Architectura\
•
•
fe~es of XA
Upward compatibility w\e standard 8XC51 core (assembly source level)
24-bit address range (16 abytes code and data space)
16-bit static CPU
Enhanced architecture uS)th 16-bit words and 8-bit bytes
Enhanced instruction set
High code efficiency~ mane instructions are 2-4 bytes in length
Fast 16X 16 Multiply and, Divide Instructions
'\6-bit Stack Pointers and\l pointer registers
~apability to support 32 'd interrupts - 31 maskable and 1 NMI
e1pports 16 hardware anqware traps
• wer Down and Idle P°"'tction modes
• 'dware support for mul\g software
34
The XA Family
1 The XA Family - High Performance, Enhanced
Architecture 80C51-Compatible 16-Bit CMOS
Microcontrollers
1.1 Introduction
The role of the microcontroller is becoming increasingly important in the world of electronics as
systems which in the past relied on mechanical or simple analog electrical control systems have
microcontrollers embedded in them that dramatically improve functionality and reliability, while
reducing size and cost. Microcontrollers also provide the general purpose solutions needed so
that common software and hardware can be shared among multiple designs to reduce overall
design-in time and costs.
The requirements of systems using microcontrollers are also much more demanding now than a
few years ago. Whether called by the name 6"microcontrollers", "embedded controllers" or
"single-chip microcomputers", the systems that use these devices require a much higher level of
performance and on-chip integration.
As microcontrollers hegin to enter into more complex control environments, the demand for
increased throughput, increased addressing capability, and higher level of on-chip integration
has led to the development of 16-bit microcontrollers that are capable of processing much more
information than X-hit microcontrollers. However, simply integrating more bits or more
peripheral functions does not solve the demand of the control systems being developed today.
New microcolltrollers must provide high-level-language support, powerful debugging
environments, and advanced methods of real time control in order to meet the more stringent
functionality and cost requirements of these systems.
To meet the above goals The XA or "eXtended Architecture" family of general-purpose
microcontrollers from Philips is being introduced to provide the highest performance/cost ratio
for a variety of high performance embedded-systems-control applications including real-time,
multi-tasking environments. The XA family members add to the CPU core a specific
complement of on-chip memory, JlOs, and peripherals aimed at meeting the requirements of
different application areas. The core-based architecture allows easy expansion of the family
according to a wide variety of customer requirements. The powerful instruction set supports
faster computing power. faster data transfer. Illulti-tasking, improved response to external events
and efficient high-level language programming.
Upward (assembly-level) code compatibility with the Philips 80C51 family of controllers
provides a smooth dcsign transitioll for systcm upgrades by providing tremendously enhanced
performance.
XA User Guide
3124/97
Automotive Electronics
- Power train Electronics
- Vehicle Control Electronics
- Ignition Control
- Fuel Injection Control
- Anti-lock Braking
- Active Suspension
Data Processing
Industrial Control
- Disk Drives
- Laser Printers
- Multi-processor Communications
- Copiers
- Protocol Handling
- Mass Storage
- Computer Peripherals
- Robotic Control
- Asynchronous Motor Control
- Fuzzy Control
- Stepper Motor Control
- Process Automation
- Drive Control
Figure 1,
Applications of Philips XA microcontrollers
1.2 Architectural Features of XA
•
•
•
•
•
•
•
Upward compatibility with the standard 8XC51 core (assembly source level)
24-bit address range (16 Megabytes code and data space)
16-bit static CPU
Enhanced architecture using both 16-bit words and 8-bit bytes
Enhanced instruction set
High code efficiency; most of the instructions are 2-4 bytes in length
Fast 16X16 Multiply and 32x16 Divide Instructions
16-bit Stack Pointers and general pointer registers
Capability to support 32 vectored interrupts - 31 maskable and 1 NMI
Supports 16 hardware and 16 software traps
Power Down and Idle power reduction modes
Hardware support for multi-tasking software
3124/97
34
The XA Family
2 Architectural Overview
2.1 Introduction
The Philips XA (eXtended Architecture) has a general purpose register-register architecture to
provide the best cost-to-performance trade-off available for a high speed microcontroller using
today's technology. Intended as both an upward compatibility path for 80C51 users who need
greater performance or more memory, and as a powerful, general-purpose 16-bit controller, the
XA also incorporates support for multi-tasking operating systems and high-level languages such
as C, while retaining the comprehensive bit-oriented operations that are the hallmark of the
80C51.
This overview introduces the concepts and terminology of the XA architecture in preparation for
the detailed descriptions in the following sections of this manual.
2.2 Memory Organization
The XA architecture has several distinct memory spaces. The architecture and the instruction
encoding are optimized for register based operations; in addition, arithmetic and logical
operations may be done directly on data memory as well, Thus, the XA architecture avoids the
bottleneck of having a single accumulator register.
2.2.1 Register File
The register file (Figure 2.1) allows access to 8 words of data at anyone time; the eight words
are also addressable as 16 bytes. The bottom 4 word registers are "banked". That is, there are
four groups of registers, anyone of which may occupy the bottom 4 words of the register file at
anyone time. This feature may be used to minimize the time required for context switching
during interrupt service, and to provide more register space for complicated algorithms.
For some instructions -32-bit shifts, multiplies, and divides- adjacent pairs of word registers
are referenced as double words.
The upper four words of the register file are not banked. The topmost word register is the stack
pointer, while any other word register may be used as a general purpose pointer to data memory.
The entire register file is bit addressable. That is, any bit in the register file (except the 3
unselected banks of the bottom 4 words) may be operated on by bit manipulation instructions.
The XA instruction encoding allows for future expansion of the register file by the addition of 8
word registers. If implemented, these additional registers will be word data registers only and
cannot be used as pointers or addressed as bytes.
The overall XA register file structure provides a superset of the 80C51 register structure. For
details, refer to the section on 80C51 compatibility.
XA User Guide
35
3/24/97
s ystem Stac kP'Olnter
I
R7
R7H
R6
R6H
User Stack
Pointer
I
I
R7L
I
R6L
R5
R5H
I
I
I
R5L
R4
R4H
I
I
I
R4L
R3
R3H
R3L
R2
R2H
R2L
R1
R1H
R1L
RO
ROH
J
Global registers.
i
I
I
i
I
I
Banked Registers
I
ROL
!
Figure 2.1 XA register file diagram
2.2.2 Data Memory
The XA architecture supports a 16 megabyte data memory space with a full 24-bit address.
Some derivative parts may implement fewer address lines for a smaller range. The data space
beginning at address 0 is normally on-chip and extends to the limit of the RAM size of a
particular XA derivative. For addresses above that on a derivative, the XA will automatically
roll over to external data memory.
Data memory in the XA is divided into 64K byte segments (Figure 2.2) to provide an intrinsic
protection mechanism for multi-tasking systems and to improve performance. Segment registers
provide the upper 8 address bits needed to obtain a complete 24-bit address in applications that
require large data memories (Figure 2.3).
The XA provides 2 segment registers used to access data memory, the Data Segment register
(DS) and the Extra Segment register (ES). Each pointer register is associated with one of the
segment registers via the Segment Select (SSEL) register. Pointer registers retain this
association until it is changed under program control.
The XA provides flexible data addressing modes. Most arithmetic, logic, and data movement
instructions support the following modes of addressing data memory:
3/24/97
36
Architectural Overview
Figure 2.2 XA data memory segments
FFFFh (64K)
The entire memory is
addressable in the
indirect and indirect --.
with offset modes
Off-chip
data memory
The direct
addressing mode
limit is at 1K (3FFh)
The on-chip/off-chip data
memory boundary varies - - -.•~=
for different XA derivatives
Figure 2.3 Simplified XA data memory diagram
XA User Guide
37
Direct. The first lK bytes of data on each segment may be accessed by an address contained
within the instruction.
Indirect. A complete 24-bit data memory address is formed by an 8-bit segment register
concatenated with 16-bits from a pointer register.
Indirect with offset. An 8-bit or 16-bit signed offset contained within the instruction is added to
the contents of a pointer register, then concatenated with an 8-bit segment register to produce a
complete address. This mode allows access into a data structure when a pointer register contains
the starting address of the structure. It also allows subroutines to access parameters passed on
the stack.
Indirect with auto-increment. The address is formed in the same manner as plain indirect, but
the pointer register contents are automatically incremented following the operation.
Data movement instructions and some special purpose instructions also have additional data
addressing modes.
The XA data memory addressing scheme provides for upward compatibility with the 80CSl.
For details, refer to Chapter 9.
2.2.3 Code Memory
The XA is a Harvard architecture device, meaning that the code and data spaces are separate.
The XA provides a continuous, unsegmented linear code space that may be as large as 16
megabytes (Figure 2.4). In XA derivatives with on-chip ROM or EPROM code memory, the on-
FFFFFFh(16M)
I
16 Mbytes of linear
code space
Off-chip
code memory
The on-chip/off-chip code
memory boundary varies
for different XA derivatives
o
Figure 2.4 XA code memory map
38
Architectural Overview
,!~'
"
, ' ' 'I
,' ' !
__
Segment 255, '
J __ . ____ ... _/,'
(Segment n),"
Segment 1 ,,' I
Segment 0
i
!
I
I
j,'
"
64K bytes
-:'
I
I
i
i
I
I,
. "
Figure 2.2 XA data memory segments
FFFFh (64K)
The entire memory is
addressable in the
indirect and indirect
with offset modes
Off-chip
data memory
The direct
addressing mode
limit is at 1K (3FFh)
The on-chip/off-chip data
memory boundary varies .. ----~
for different XA derivatives
Figure 2.3 Simplified XA data memory diagram
XA User Guide
37
DireCt. The first 1K bytes of data on each segment may be accessed by an address contained
within the instruction.
Indirect. A complete 24-bit data memory address is formed by an 8-bit segment register
concatenated with 16-bits from a pointer register.
Indirect with offset. An 8-bit or 16-bit signed offset contained within the instruction is added to
the contents of a pointer register, then concatenated with an 8-bit segment register to produce a
complete address. This mode allows access into a data structure when a pointer register contains
the starting address of the structure. It also allows subroutines to access parameters passed on
the stack.
Indirect with auto-increment. The address is formed in the same manner as plain indirect, but
the pointer register contents are automatically incremented following the operation.
Data movement instructions and some special purpose instructions also have additional data
addressing modes.
The XA data memory addressing scheme provides for upward compatibility with the 80CS1.
For details, refer to Chapter 9.
2.2.3 Code Memory
The XA is a Harvard architecture device, meaning that the code and data spaces are separate.
The XA provides a continuous, unsegmented linear code space that may be as large as 16
megabytes (Figure 2.4). In XA derivatives with on-chip ROM or EPROM code memory, the onFFFFFFh (16M)
16 Mbytes of linear
code space
Off-chip
code memory
I
The on-chip/off-chip code
memory boundary varies
for different XA derivatives
o
Figure 2.4 XA code memory map
38
Architectural Overview
chip space always begins at code address 0 and extends to the limit of the on-chip code memory.
Above that, code will be fetched from off-chip. Most XA derivatives will support an external
bus for off-chip data and code memory, and may also be used in a ROM-less mode, with no
code memory used on-chip.
In some cases, code memory may be addressed as data. Special instructions provide access to
the entire code space via pointers. Either a special segment register (CS or Code Segment) or the
upper 8-bits of the Program Counter (PC) may be used to identify the portion of code memory
referenced by the pointer.
2.2.4 Special Function Registers
Special Function Registers (SFRs) provide a means for the XA to access Core registers, internal
control registers, peripheral devices, and IJOports. Any SFR may b~ accessed by a program at
any time without regard to any pointer or segment. An SFR address IS always contained entirel
within an instruction. See Figure 2.5.
y
512 bytes
Off-Chip
SFRs
512 bytes
On-Chip
SFRs
1 K bytes
Bit-AddrfSsabl e
+
Figure 2.5 SFR Address: e
The total SFR space is 1K bytes in siz;e. This is further div 1to two 512 byte regions. rr
lower half is assigned to on-chip SFRs, while the second ~·eserved for off-chip SFRsis
allows provides a means to add off-chip I/O devices maN) the XA as SFRs. Off-chiR
access is not implemented on all XA derivatives.
On-chip SFRs are implemented as needed to provide con peripherals or access to (
features and functions. Each XA derivative may havl~ II ~ numher of SFRs impkn-
XA User Guide
39
because each has a different set of peripheral functions. Many SFR addresses will be unused on
any particular XA derivative.
The first 64 bytes of on-chip SFR space are bit-addressable. Any CPU or peripheral register that
allows bit access will be allocated an address within that range.
2.3 CPU
Figure 2.6 shows the XA architecture as a whole. Each of the blocks shown are described in this
section.
---------------_ .. _---_ ... _ ... _---_ .... _-_ .. _----------------------------
Execution
Unit
o
y
On-chip
On-chip
Peripherals
RAM
lal
On-chip
EPROM/
ROM
External
SFR
I
'y
Devices
External
Program
Memory
Figure-he XA Architecture
40
Architectural Overview
chip space always begins at code address 0 and extends to the limit of the on-chip code memory.
Above that, code will be fetched from off-chip. Most XA derivatives will support an external
bus for off-chip data and code memory, and may also be used in a ROM-less mode, with no
code memory used on-chip.
In some cases, code memory may be addressed as data. Special instructions provide access to
the entire code space via pointers. Either a special segment register (CS or Code Segment) or the
upper 8-bits of the Program Counter (PC) may be used to identify the portion of code memory
referenced by the pointer.
2.2.4 Special Function Registers
Special Function Registers (SFRs) provide a means for the XA to access Core registers, internal
control registers, peripheral devices, and I/O ports. Any SFR may be accessed by a program at
any time without regard to any pointer or segment. An SFR address is always contained entirely
within an instruction. See Figure 2.5.
512 bytes
Off-Chip
SFRs
512 bytes
On-Chip
SFRs
1 K bytes
Bit-Addressable
Figure 2.5 SFR Address Space
The total SFR space is IK hytes in size. This is further divided into two 512 byte regions. The
lower half is assigned to on-chip SFRs, while the second half is reserved for off-chip SFRs. This
allows provides a means to add off-chip I/O devices mapped into the XA as SFRs. Off-chip SFR
access is not implemented on all XA derivatives.
On-chip SFRs are implemented as needed to provide control for peripherals or access to CPU
features and functions. Each XA derivative may have a different number of SFRs implemented
XA User Guide
39
3/24/97
because each has a different set of peripheral functions. Many SFR addresses will be unused on
any particular XA derivative.
The first 64 bytes of on-chip SFR space are bit-addressable. Any CPU or peripheral register that
allows bit access will be allocated an address within that range.
2.3 CPU
Figure 2.6 shows the XA architecture as a whole. Each of the blocks shown are described in this
section.
Execution
Unit
o
-err
On-chip
Peripherals
External
Data
Memory
On-chip
EPROM/
ROM
External
SFR
Devices
External
Program
Memory
Figure 2.6 The XA Architecture
3/24/97
40
Architectural Overview
2.3.1 CPU Blocks
The XA processor is composed of several functional blocks: Instruction fetch and decode;
Execution unit; ALU; Exception controller; Interrupt controller; Register File and core registers;
Program memory (ROM or EPROM), Data memory (RAM); SFR and external bus interface;
Oscillator; and on-chip peripherals and I/O ports.
Certain functional blocks that exist on most XA derivatives are not part of the CPU core and
may vary in each derivative. These are: the external bus interface, the Special Function Register
bus (SFR bus) interface, specific peripherals, 1/0 ports, code and data memories, and the
interrupt controller.
CPU Performance Features
The XA core is partially pipelined and performs some CPU functions in parallel. For instance,
instruction fetch and decode, and in some cases data write-back, are done in parallel with
instruction execution. This partial pipelining gives very fast instruction execution at a very low
cost. For instance, the instruction execution time for most register-to-register operations on the
XA is 3 CPU clocks, or 100 nanoseconds with a 30 MHz oscillator.
ALU
Data operations in the XA core are accomplished with a 16-bit ALU, providing both 8-bit and
16-bit functions. Special circuitry has been included to allow some 32-bit functions, such as
shifts, multiply, and divide.
Core Registers
The XA core includes several key Special Function Registers which are accessed by programs.
The System Configuration Register (SCR) sets up the basic operating modes of the XA. The
Program Status Word (PSW) contains status flags that show the result of ALU operations, the
register select bits for the four register file banks, the interrupt mask bit, and other system flags.
The Data Segment (DS), Extra Segment (ES), and Code Segment (CS) registers contain the
segment numbers of active data memory segments. The Segment Select register (SSEL),
contains bits that determine which segment register is used by each pointer register in the
register file. Bits in the Power Control register (PCON) control the reduced power modes of the
processor.
Execution and Control
The Execution and Control block fetches instructions from the code memory and decodes the
instructions prior to execution. The XA normally attempts to fetch instructions from the code
memory ahead of what is immediately needed by the execution unit. These pre-fetched
instructions are stored in a 7 byte queue contained in the fetch and decode unit.
If the fetch unit has instructions in the queue, the execution unit will not have to wait for a fetch
to occur when it is ready to begin execution of a new instruction. If a program branch is taken,
the queue is flushed and instructions are fetched from the new location. This block also decides
whether to attempt instruction fetches from on or off-chip code memory.
XA User Guide
41
3/24/97
The instruction at the head of the queue is decoded into separate functional fields that tell the
other CPU blocks what to do when the instruction is executed. These fields are stored in staging
registers that hold the information until the next instruction begins executing.
Execution Unit
The execution unit controls many of the other CPU blocks during instruction execution. It routes
addressing information, sends read and write commands to the register file and memory control
blocks, tells the fetch and decode unit when to branch, controls the stack, and ensures that all of
these operations are performed in the proper sequence. The execution unit obtains control
information for each instruction from a microcode ROM.
Interrupt Controller
The interrupt controller can receive an interrupt request from any of the sources on a particular
XA derivative. It prioritizes these based on user programmable registers containing a priority for
each interrupt source. It then compares the priority of the highest pending interrupt (if any) to
the interrupt mask bits from the PSW. If the interrupt has a higher priority than the currently
running code, the interrupt controller issues a request to the execution unit.
The interrupt controller also contains extra registers for processing software interrupts. These
are used to run non-critical portions of interrupt service routines at a decreased priority without
risking "priority inversion."
While the interrupt controller is not part of the XA core, it is present in some form on all XA
derivatives.
Exception Controller
The exception controller is similar to the interrupt controller except that it processes CPU
exceptions rather than hardware and software interrupt requests. Sources of exceptions are: stack
overflow; divide by zero; user execution of an RETI instruction; hardware breakpoint; trace
mode; and non-maskable interrupt (NMI).
Exceptions are serviced according to a fixed priority ranking. Generally, exceptions must be
serviced immediately since each represents some important event or problem that must be dealt
with before normal operation can resume.
The Exception Controller is part of the XA core and is always present.
Interrupt and Exception Processing
Interrupt and exception processing both make use of a vector table that resides in the low
addresses of the code memory. Each interrupt and exception has an entry in the vector table that
includes the starting address of the service routine and a new PSW value to be used at the
beginning of the service routine. The starting address of a service routine must be within the first
64 K of code memory.
When the XA services an exception or interrupt, it first saves the return address on the stack,
followed by the PSW contents. Next, the PC and the PSW are loaded with the starting address of
the appropriate service routine and the new PSW contents, respectively, from the vector table.
3124/97
42
Architectural Overview
When the service routine completes, it returns to the interrupted code by executing the RETI
(return from interrupt) instruction. This instruction loads first the PSW and then the Program
Counter from the stack, resuming operation at the point of interruption. If more than the PC and
PSW are used by the service routine, it is up to that routine to save and restore those registers or
other portions of the machine state, normally by using the stack, and often by switching register
banks"
Reset
Power up reset and any other external reset of the XA is accomplished via an active low reset
pin. A simple resistor and capacitor reset circuit is typically used to provide the power-on reset
pulse. the reset pin is a Schmitt trigger input, in order to prevent noise on the reset pin from
causing spurious or incomplete resets.
The XA may be reset under program control by executing the RESET instruction. This
instruction has the effect of resetting the processor as if an external reset occurred, except that
some hardware features that are latched following a hardware reset (such as the state of the EA
pin and bus width programming) are not re-Iatched by a software reset This distinction is
necessary because external circuitry driving those inputs cannot determine that a reset is in
progress.
Some XA derivatives also have a hardware watchdog timer peripheral that will trigger an
equivalent chip reset if it is allowed to time out
Oscillator and Power Saving Modes
XA derivatives have an on-chip oscillator that may be used with crystals or ceramic resonators
to provide a clock source for the processor.
The XA supports two power saving modes of operation: Idle mode and Power Down mode.
Either mode is activated by setting a bit in the Power Control (PC ON) register. The Idle mode
shuts down all processor functions, but leaves most of the on-chip peripherals and the external
interrupts functioning. The oscillator continues to run. An interrupt from any operating source
will cause the XA to resume operation where it left off
The Power Down mode goes one step further and shuts down everything, including the on-chip
oscillator. This reduces power consumption to a tiny amount of CMOS leakage plus whatever
loads are placed on chip pins. Resuming operation from the power down mode requires the
oscillator to be restarted, which takes about 10 milliseconds. Power down mode can be
terminated either by resetting the XA or by asserting one of the external interrupts, if one was
left enabled when power down mode was entered. In Power Down mode, data in on-board RAM
is retained. Further power savings may be made by reducing Vdd in Power Down mode; see the
device data sheet for details.
Stack
The processor stack provides a means to store interrupt and subroutine return addresses, as well
as temporary data. The XA includes 2 stack pointers, the System Stack Pointer (SSP) and the
User Stack Pointer (USP), which correspond to 2 different stacks: the system stack and the user
stack. See Figure 2.7. The system stack always resides inthe first data memory segment,
XA User Guide
43
3/24/97
•••
••
•
System
Stack
System Stack
Pointer
User Stack
Pointer
in Segment 0
System Mode
User
Stack
in OS Segment
User Mode
R7
Figure 2.7 XA Stacks
segment O. The user stack resides in the data memory segment identified by the current value of
the data segment (DS) register. Executing code has access to only one of these stacks at a time,
via the Stack Pointer, R7. Since each stack resides in a single data memory segment, its
maximum size is 64K bytes. The purpose of having two stack pointers will be discussed in more
detail in the section on Task Management below.
The XA stack grows downwards, from higher addresses to lower addresses within data memory.
The current stack pointer always points to the last item pushed on the stack, unless the stack is
empty. Prior to a push operation, the stack pointer is decremented by 2, then data is written to
memory. When the stack is popped, the reverse procedure is used. First, data is read from
memory, then the stack pointer is incremented by 2. Data on the stack always occupies an even
number of bytes and is word aligned in data memory.
Debugging Features
The XA incorporates some special features designed to aid in program and system debugging.
There is a software breakpoint instruction that may be inserted in a user's program by a
debugger program, causing the user program to break at that point and go to the breakpoint
service routine, which can transmit the CPU state so that it can be viewed by the user.
The trace mode is similar to a breakpoint, but is forced by hardware in the XA after the
execution of every instruction. The trace service routine can then keep track of every instruction
executed by a user program and transmit information about the CPU state to a serial port or
other peripheral for display or storage. Trace mode is controlled by a bit in the PSW. The XA is
able to alter the trace mode bit whenever an interrupt or exception vector is taken. This gives
very flexible use of trace mode, for instance by allowing all interrupts to run at full speed to
comply with system hardware requirements, while single stepping through mainline code.
3124/97
44
Architectural Overview
With these two features, a simple monitor debugger routine can allow a user to single step
through a program, or to run a program at full speed, stopping only when execution reaches a
breakpoint, in either case viewing the CPU state before continuing.
2.4 Task Management
Several features of the XA have been included to facilitate multi-tasking. Multi-tasking can be
thought of as running several programs at once on the same processor, with a supervisory
program determining when each program, or task, runs, and for how long. Since each task
shares the same CPU, the system resources required by each must be kept separate and the CPU
state restored when switching execution from one task to another. The problem is much simpler
for a microcontroller than it is for a microprocessor, because the code executed by a
microcontroller always comes from the same source: the designers of the system it runs on.
Thus, this code can be considered to be basically trustworthy and extreme measures to prevent
misbehavior are not necessary. The emphasis in the XA design is to protect against simple
accidents.
The first step in supporting multi-tasking is to provide two execution contexts, one for the basic
tasks -on the XA termed "user mode"- and one for the supervisory program -"system mode.".
A program running in system mode has access to all of the processor's resources and can set up
and launch tasks.
Code running in system and user mode use different stack pointers, the System Stack Pointer
(SSP) and the User Stack Pointer (USP) respectively. The system stack is always located in the
first 64K data memory segment, where it can take advantage of the fast on-chip RAM. The user
stack is located within each task's local data segment, identified by the DS register. The fact that
user mode code uses a different stack than system mode code prevents tasks from accidentally
destroying data on the system stack and in other task spaces.
Additional protection mechanisms are provided in the form of control bits and registers that are
only writable by system mode code. For instance the DS register, that identifies the local data
segment for user mode code, is only writable in the system mode. While tasks can still write to
the other segment register, the ES register, they cannot write to memory via the ES register
unless specifically allowed to do so by the system. The data memory segmentation scheme thus
prevents tasks from accessing data memory in unpredictable ways.
Other protected features include enabling of the Trace Mode and alteration of the Interrupt Mask.
The 4 register banks are a feature that can be useful in small multi-tasking systems by using
each bank for a different task, including one for system code. This means less CPU state that
must be saved during task switching.
XA User Guide
45
3/24/97
2.5 Instruction Set
The XA instruction set is designed to support common control applications. The instruction
encoding is optimized for the most commonly used instructions: register to register or register
with indirect arithmetic and logic operations; and short conditional and unconditional branches.
These instructions are all encoded as 2 bytes. The bulk of XA instructions are encoded as either
2 or 3 bytes, although there are a few 1 byte instructions as well as 4, 5, and 6 byte instructions.
The execution of instructions normally overlaps instruction fetch, and sometimes write-back
operations, in order to further speed processing.
2.5.1 Instruction Syntax
The instruction syntax chosen for the XA is similar in many ways to that of the SOC51. A typical
XA instruction has a basic mnemonic, such as "ADD", followed by the operands that the
operation is to be performed on. The basic syntax is illustrated in Figure 2.S. The direction of
operation flow is determined by the order in which operands occur in the source line. For
instance, the instruction: "ADD Rl, R2" would cause the contents ofRI and R2 to be added
together and the result stored in RI. Since Rl and R2 are word registers in the XA, this is a 16bit operation.
op-code
mnemonic
ADD
target
source
- - - operand
operand ......
Rl
R2
\ operand delimiter (comma)
Figure 2.8 Basic Instruction Syntax
An indirect reference (a reference to data memory using the contents of a register as an address)
is specified by enclosing the operand in square brackets, as in: "ADD Rl, [R2]". See Figure 2.9.
This instruction causes the contents of R 1 and the data memory location pointed to by R2
(appended to its associated segment register) to be added together and the result stored in Rl.
Reversing the operand order ("ADD [R2], Rl ") causes the result to be stored in data memory,
as shown in Figure 2.10.
Most instructions support an additional feature called auto-increment that causes the register
used to supply the indirect memory address to be automatically incremented after the memory
access takes place. The source line for such an operation is written as follows: "ADD Rl,
[R2+]". As illustrated in Figure 2.11, the auto-increment amount always matches the data size
used in the instruction. In the previous example, R2 will have 2 added to it because this was a
word operation.
3/24/97
46
Architectural Overview
After
Before
Rl~
1004
ADD RI, [R2]
Rl~
1004
R2
R2
register file
register file
1000
1000
1002
1002
1004
45
1004
45
1006
1006
data memory
data memory
Figure 2.9 Basic Indirect Addressing Syntax, to register
After
Before
Rl~
R2
1004
ADD [R2], Rl
Rl~
R2
1004
register file
register file
1000
1000
1002
1002
1004
45
1004
1045
1006
1006
data memory
data memory
Figure 2.10 Basic Indirect Addressing Syntax, from Register
Another version of indirect addressing is called indirect with offset mode. In this version, an
immediate value from the instruction word is added to the contents of the indirect register in
order to form the actual address. This result of the add is 16 bits in size, which is then appended
to the segment register for that pointer register. If the offset calculation overflows 16 bits, the
overflow is ignored, so the indirect reference always remains on the same segment. The
immediate data from the instruction is a signed 8-bit or 16-bit offset. Thus, the range is + 127
bytes to -128 bytes for an 8-bit offset, and +32,767 to -32,768 bytes for a 16-bit offset. Note that
since the address calculation is limited to 16-bits, the 16-bit offset mode allows access to an
entire data segment
When an instruction requires an immediate data value (a value stored within the instruction
itself), it is written using the "#" symbol. For example: "ADD Rl, #12" says to add the value 12
to register R1,
XA User Guide
47
3/24/97
After
Before
Rl~
R2
1004
ADD Rl, [R2+]
Rl~
R2
1006
register file
register file
1000
1002
1000
1002
1004
45
1004
45
1006
1006
data memory
data memory
Figure 2.11 Indirect Addressing with Auto-Increment
Since indirect memory references and immediate data values do not implicitly identify the size
of the operation to be performed, a few XA instructions must have an operation size explicitly
called out. An example would be the instruction: "MOV [Rl], #1", The immediate data value
does not specify the operation size, and the value stored in memory at the location pointed to by
Rl could be either a byte or a word. To clarify the intent of such an instruction, a size identifier
is added to the mnemonic as follows: "MOV.b [Rl], #1 ". This tells us that the operation should
be performed on a byte. If the line read "MOV.w [Rl], #1", it would be a word operation.
If a direct data address is used in an instruction, the address is simply written into the
instruction: "ADD 123, Rl", meaning to add the contents of register Rl to the data memory
value stored at direct address 123. In an actual program, the direct data address could be given a
name to make the program more readable, such as "ADD Count, RI".
Operations using Special Function Registers (SFRs) are written in a way similar to direct
addresses, except that they are normally called out by their names only: "MOV PSW,#12".
U sing actual SFR addresses rather than their names in instructions makes the code both harder
to read and less transportable between XA derivatives.
Bit addresses within instructions may be specified in one of several ways. A bit may be given a
unique name, or it may be referred to by its position within some larger register or entity. An
example of a bit name would be one of the status flags in the PSW, for instance the carry ("C")
flag. To clear the carry flag, the following instruction could be used: "CLR C". The same bit
could be addressed by its position within the PSW as follows: "CLR PSWL.T', where the period
(". ") character 'indicates that this is a bit reference. A program may use its own names to identify
bits that are defined as part of the application program.
Finally, code addresses are written within instructions either by name or by value. Again, a
program is more readable and easier to modify if addresses are called out by name. Examples
are: "IMP Loop" and "IMP 124".
3/24/97
48
Architectural Overview
2.5.2 Instruction Set Summary
The following pages give a summary of the XA instruction set. For full details, consult Chapter 6.
Basic Arithmetic, Logic, and Data Movement Instructions
The most used operations in most programs are likely to be the basic arithmetic and logic
instructions, plus the MOV (move data) instruction. The XA supports the following basic
operations:
ADD
Simple addition.
ADDC
Add with carry.
SUB
Subtract.
Subtract with borrow.
SUBB
Compare.
CMP
Logical AND.
AND
OR
Logical OR.
Exclusive-OR.
XOR
These instructions support all of the following standard XA data addressing mode combinations::
Operands
Description
R,R
The source and destination operands are both registers.
R, [RJ
The source operand is indirect, the destination operand is a
register.
[R], R
The source operand is a register, the destination operand is
indirect.
The source operand is indirect with auto-increment, the destination
operand is a register.
[R+], R
The source operand is a register, the destination operand is
indirect with auto-increment.
R, [R+offset]
The source operand is indirect with an 8 or 16-bit offset, the
destination operand is a register.
[R+offset], R
The source operand is a register, the destination operand is
indirect with an 8 or 16-bit offset.
direct, R
The source operand is a register, the destination operand is a
direct address.
R, direct
The source operand is a direct address, the destination operand is
a register.
R, #data
The source operand is an 8 or 16-bit immediate value, the
destination operand is a register.
[R], #data
The source operand is an 8 or 16-bit immediate value, the
destination operand is indirect
XA User Guide
49
3/24/97
Operands
Description
[R+], #data
The source operand is an 8 or 16-bit immediate value, the
destination operand is indirect with auto-increment.
[R+offset], #data
The source operand is an 8 or 16-bit immediate value, the
destination operand is indirect with an 8 or 16-bit offset.
direct, #data
The source operand is an 8 or 16 bit immediate value, the
destination operand is a direct address.
Other instructions on the XA use different operand combinations. All XA instructions are
covered in detail in the Instruction Set section. Following is a summary of other instruction
types:Additional arithmetic instructions
Additional arithmetic instructions
ADDS
Add short immediate (4-bit signed value).
NEG
Negate (twos complement).
SEXT
Sign extend.
MUL
Multiply.
DIV
Divide.
DA
Decimal adjust.
ASL
Arithmetic shift left.
ASR
Arithmetic shift right.
LEA
Load effective address.
Additional logic instructions
CPL
Complement (ones complement or logical inverse).
LSR
Logical shift right.
NORM
Normalize.
RL
Rotate left.
RLC
Rotate left through carry.
RR
Rotate right.
RRC
Rotate right through carry.
Other data movement instructions
MOVS
Move short immediate (4-bit signed value).
MOVC
Move to or from code memory.
MOVX
Move to or from external data memory.
PUSH
Push data onto the stack.
POP
Pop data from the stack.
XCH
Exchange data in two locations.
Bit manipulation instructions
SETB
Set (write a 1 to) a bit.
CLR
Clear (write a 0 to) a bit.
MOV
Move a bit to or from the carry flag.
ANL
Logical AND a bit (or its inverse) to the carry flag.
ORL
Logical OR a bit (or its inverse) to the carry flag.
3124/97
50
Architectural Overview
Jump~
branch, and call instructions
BR
Branch to code address (plus or minus 256 byte range).
JMP
Jump to code address (range depends on specific JMP variation).
CALL
Call subroutine (range depends on specific CALL variation).
RET
Return from subroutine or interrupt.
Bcc
Conditional branches with 15 possible condition variations.
JB, JNB
Jump if a bit set or not set
CJNE
Compare two operands and jump if they not equal.
DJNZ
Decrement and jump if the result is not zero.
JZ, JNZ
Jump on zero or not zero (included for 80C51 compatibility).
Other instructions
NOP
BKPT
TRAP
RESET
XA User Guide
No operation (used mainly to align branch targets).
Breakpoint (used for debugging).
Software trap (used to call system services in a multitasking system).
Reset the entire chip.
51
3/24/97
2.6 External Bus
Most XA derivatives have the capability of accessing external code and/or data memory through
the use of an external bus. The external bus provides address information to external devices,
and initiates code read, data read, or data write strobes. The standard XA external bus is
designed to provide flexibility, simplicity of connection, and optimization for external code
fetches.
As described in section 4.4.4, the initial external bus width is hardware settable, and the XA
determines its value (8 or 16 bits) during the reset sequence.
2.6.1 External Bus Signals
The standard XA external bus supports 8 or 16-bit data transfers and up to 24 address lines. The
precise number of address lines varies by derivative. The standard control signals and their
functions for the external bus are as follows:
Signal name
Function
ALE
Address Latch Enable. This signal directs an external address
latch to store a portion of the address for the next bus operation.
This may be a data address or a code address.
PSEN
Program Store Enable. Indicates that the XA is reading code
information over the bus. Typically connected to the Output
Enable pin of external EPROMs.
RD
Read. The external data read strobe. Typically connected to the
RD pin of external peripheral devices.
WRL
Write. The low byte write strobe for external data. Typically
connected to the WR pin of external peripheral devices. For an 8bit data bus, this is the only write strobe. For a 16-bit data bus, this
strobe applies only to the lower data byte.
WRH
Write High. This is the upper byte write strobe for external data
when using a 16-bit data bus.
WAIT
Wait. Allows slowing down any type external bus cycle. When
asserted during a bus operation, that operation waits for this
signal to be de-asserted before it is completed.
2.6.2 Bus Configuration
The standard XA bus is user configurable in several ways. First, the bus size may be configured
to either 8 bits or 16 bits. This may be configured by the logic level on a pin at reset, or under
firmware control (if code is initially executed from on-chip code memory) prior to any actual
external bus operations. As on the 80CS1, the EA pin determines whether or not on-chip code
memory is used for initial code fetches.
3/24/97
52
Architectural Overview
Second, the number of address lines may be configured in order to make optimal use of 1/0
ports. Since external bus functions are typically shared with 1/0 ports and/or peripheral I/O
functions, it is advantageous to set the number of address lines to only what is needed for a
particular application, freeing I/O pins for other uses.
2.6.3 Bus Timing
The standard XA bus also provides a high degree of bus timing configurability. There are
separate controls for ALE width, PSEN width, RD and WRLIWRH width, and data hold time
from WRLIWRH. These times are programmable in a range that will support most RAMs,
ROMs, EPROMs, and peripheral devices over a wide range of oscillator frequencies without the
need for additional external latches, buffers, or WAIT state generators.
The following figures show the basic sequence of events and timing of typical XA bus accesses.
For more detailed information, consult Section 7 and the device data sheet.
ALE
Address bus
Data bus
-----/
\'-------
----------~<:~
_________
c_o_de__
ad_d_r_es_s______~:>~-----
<
----------~< address>
instruction data
\
:>>---
/
Figure 2.12 Typical External Code Read.
ALE
Address bus
Data bus
code address
X'-________
X'-______
---'X'-__
c_o_d_e_a_d_d_re_s_s______
instruction data
i_ns_t_ru_c_tio_n__
da_t_a_________
>C
Figure 2.13 Optimized (Sequential Burst) External Code Read.
XA User Guide
53
3/24/97
ALE
\~----------------
1
_--J
Address bus ----------~<:~
_________d_a_ta__ad_d_re_s_s_______:>~-----
Data bus ...--------~< address:>
< data in to XA :>>---
\
/
Figure 2.14 Typical External Data Read.
ALE
_---I
Address bus ------~<:~
\~----------------
________d_a_ta_a_d_d_re_s_s________:>>------
Data bus -------~< address :>
---
\
/
Figure 2.15 Typical External Data Write.
2.7 Ports
Standard 1/0 ports on the XA have been enhanced to provide better versatility and
programmability than was previously available in the 80CSI and most of its derivatives. Access
to the I/O ports from a program is through SFR addresses assigned to those ports. Ports may be
read and written is the same manner as any other SFR.
The XA provides more flexibility in the use of I/O ports by allowing different output
configurations. See Figure 2.16. Port outputs may be programmed to be quasi-bidirectional
(80CSI style ports), open drain, push-pull, and high impedance (input only).
3124/97
54
Architectural Overview
output
input
---II~
hi-Z
+V
+V
Wri,,~r
Quasi -bidirectional
open drain
push-pull
Figure 2.16 XA Port Pins with Driver Option Detail
2.8 Peripherals
The XA CPU core is designed to make derivative design fast and easy. Peripheral devices are
not part of the core, but are attached by means of a Special Function Register bus, called the
SFR bus, which is distinct from the CPU internal buses. So, a new XA derivative may be made
by designing a new SFR bus compatible peripheral function block, if one does not already exist,
then attaching it to the XA core.
2.9 80C51 Compatibility
The 80CS1 is the most extensively designed-in 8-bit microcontroller architecture in the world,
and a vast amount of public and private code exists for this device family. For customers who
use the 80CS1 or one of its derivatives, preservation of their investment in code development is
an important consideration. By permitting simple translation.of source code, the XA allows
existing 80CS1 code to be re-used with this higher-performance 16-bit controller. At the same
time, the XA hardware was designed with the clear goal of upward compatibility. 80CS1
designs may be migrated to the XA with very few changes necessary to software source or
hardware.
XA User Guide
55
3/24/97
The XA provides an 80CS1 Compatibility Mode, which essentially replicates the 80CS1 register
architecture for the best possible upward compatibility. In the alternative Native Mode, the XA
operates as an optimized 16-bit microcontroller incorporating the best conceptual features of the
original 80CS1 architecture.
Many trade-offs and considerations were taken into account in the creation of the XA
architecture. The most important goal was to make it possible for a software translator to
convert 80CS1 assembler source code to XA source code on a 1: 1 basis, i.e., one XA instruction
for one 80CS1 instruction.
Some specific compatibility issues are summarized in the following two sections. See Chapter 9
for a complete description of compatibility.
2.9.1 Software Compatibility
Several basic goals were observed in order to design 80CS1 software compatibility for the XA,
while avoiding over-complicating the XA design. Following are some key issues for XA
software:
• Instruction mapping. Each 80CS1 instruction translates into one XA instruction. Multiinstruction combinations that could result in problems if split by an interrupt were avoided as
much as possible. Only one 80CS1 instruction does not have a one-to-one direct replacement
with an XA instruction (this instruction, XCHD, is extremely rarely used).
• "As-is" instructions. Most XA instructions are more powerful supersets of 80CS1 instructions.
Where this was not possible, the original 80CS1 instruction is included" as-is" in the XA
instruction set.
• Timing. Instruction timing must necessarily change in order to improve performance. The XA
does not attempt to retain timing compatibility with the 80CS1; rather, the design simply
maximizes instruction execution speed. When 80CS1 code that is timing critical is translated to
the XA, the user must re-analyze the timing and make adjustments.
• SFR Access. Translation of SFR accesses is usually simple, since SFRs are normally
referenced by name. Such references are simply retained in the translated XA code. If program
source code from a specific 80CS1 derivative references an SFR by its address, the translator
can directly substitute the appropriate XA SFR, provided both the 80CS1 and the XA derivative
are correctly identified to the translator.
2.9.2 Hardware Compatibility
The key goal for hardware was to produce a familiar architecture with a good deal of upward
compatibility.
• Memory Map. A major consideration in hardware compatibility of the XA with the 80CS1 is
the memory map. The XA approaches this issue by having each memory area (registers, data
memory, code memory, stack, SFRs) be a superset of the corresponding 80CS1 area.
3/24/97
56
Architectural Overview
• Stack. One area where a functional change could not be avoided is in the use of the processor
stack. Due to the fact that the XA supports 16-bit operations in memory, it was necessary to
change the direction of stack growth to downward -the standard for 16-bit processors- in order
to match stack usage with efficient access of 16-bit variables in memory. This is an important
consideration for support of high-level language compilers such as C.
• Pin-for-pin compatibility. XA derivatives are not intended to be exactly pin-compatible with
other 80C51 derivatives that have similar features. Many on-chip XA peripherals, for example,
have improved capabilities, and maintaining pin-for-pin compatibility would limit access to
these capabilities. In general, peripherals have been made upward compatible with the original
80C51 devices, and most enhancements are added transparently. In these cases, 80C51 code will
operate correctly on the 80C51 functional subset.
• Bus Interface. The external bus on the XA is an example of a trade-off between 80C51
compatibility and performance. In order to provide more flexibility and maximum performance,
the 80C51 bus had to be changed somewhat. The differences are described in detail in the
section on the external bus.
XA User Guide
57
3/24/97
)1
3 XA Memory Organization
3.1 Introduction
The memory space of XA is configured in a Harvard architecture which means that code and
data memory (including sfrs) are organized in separate address spaces. The XA architecture
supports 16 Megabytes (24-bit address) of both code and data space. The size and type of
memory are specific to an XA derivative.
The XA supports different types of both code and data memory e.g.,code memory could be
Eprom, EEProm, OTP ROM, Flash, and Masked ROM whereas data memory could be RAM,
EEProm or Flash.
This chapter describes the XA Memory Organization of register, code, and data spaces; how
each of these spaces are accessed, and how the spaces are related.
3.2 The XA Register File
The XA architecture is optimized for arithmetic, logical, and address-computation operations
on the contents of one or more registers in the XA Register File.
3.2.1 Register File Overview
The XA architecture defines a total of 16 word registers in the Register File:
In the baseline XA core, only RO through R7 are implemented. These registers are available for
unrestricted use except R7- which is the XA stack pointer, as illustrated in Figure 3.1. In effect,
the XA registers provide users with at least 7 distinct "accumulators" which may be used for all
operations. As will be seen below, the XA registers are accessible at the bit, byte, word, and
doubleword level.
Additional global registers, R8 through R15, are reserved and may be implemented in specific
XA derivatives. These registers, when available, are equivalent to RO through R7 except byte
access and use as pointers will not be possible (only word, double-word, and bit-addressable).
The Register File is independent of all other XA memory spaces (except in Compatibility Mode;
see chapter 9).
Register File Detail
Figure 3.2 describes RO through R7 in greater detail.
Byte, Word, and Doubleword Registers
All registers are accessible as bits, bytes. words, and -in a few cases- doublewords. Bit access
to registers is described in the next section. As for byte and word accesses, R1 -for example- is
a word register that can be word referenced simply as "R 1". The more significant byte is labeled
as "R1H" and the less significant byte of R1 is referenced as "R1L". Double-word registers are
always formed by adjacent pairs of registers and are used for 32 bit shifts, multiplies, and
divides. The pair is referenced by the name of the lower-numbered register (which contains the
XA User Guide
58
3/24/97
less significant word), and this must have an even number. Thus valid double-register pairs are
(RO,R1), (R2,R3), (R4,R5) and (R6, R7).
R15
R14
R13
R12
R11
R10
R9
R8
R7
R6
R5
R4
R3
R2
R1
RO
.
•
16 bits
deri vati ve-optional
general registers
(word-accessible only)
general registers
present in all
XA derivatives
Figure 3.1
XA Register File Overview
As described in section 4.7, there are two stack pointers, one for user mode and another for
system mode. At any given instant only one stack pointer is accessible and its value is in R7.
When PSW.SM is 0, user mode is active and the USP is accessible via R7. When PSW.SM is 1,
the XA is operating in system mode, and SSP is in SP (R7). (Note however, as described in
Chapter 4, all interrupts save stack frames on the system stack, using the SSP, regardless of the
current operating mode.)
There are four distinct instances of registers RO through R3. At any given time, only 1 set of the
4 banks is active, referenced as RO through R3, and the contents of the other banks are
inaccessible. This allows high-speed context-switching, for example, for interrupt service
routines. PSW bits RSI and RSO select the active register bank:
RS1 RSO
visible register bank
o
o
bank 0
bank 1
bank 2
bank 3
1
1
3/24/97
o
1
o
1
59
XA Memory Organization
PSW;RSn are writable when the XA is operating in system or user mode, and programs running
in either mode may explicitly change these bits to make selected banks visible one at a time.
More commonly, the interrupt mechanism, as described in Chapter 4, provides automatic
implicit register bank switching so interrupt handlers may immediately begin operating in a
reserved register context.
R15
R14
R13
R12
Global registers
(word only)
R11
R10
R9
R8
SP(R7)
L
R7H
SSP
U$P
I
I
R7l
I
I
R6
R6H
R5
R5H
R4
R4H
R3
R3H
R2
R2H
R1
R1H
RO
ROH
R6l
I
I
Global registers.
R5l
I
I
I
,
I
R4l
I
I
I
I
I
I
I
I
I
I
I
I
I
R3l
R2l
f-
r-
Banked Registers
R1l
ROl
/'
I
I
Figure 3.2
XA User Guide
XA Register File
60
3124/97
Bit Access to Registers
The XA Registers are all bit addressable. Figure 3.3 shows how bit addresses overlie the basic
register file map. In general, absolute bit references as given in this map are unnecessary. XA
software development tools provide symbolic access to bits in registers. For example, bit 7 may
be designated as "RO.7" with no ambiguity
Bit references to banked registers RO through R3 access the currently accessible register bank,
as set by PSW bits RSl, RSO and the currently selected stack pointer USP or SSP. The
unselected registers are inaccessible ..
R1S
FF FE FD FC F8 FA F9 F8 F7 F6 F5 F4 F3 F2 F1
R14
EF EE ED EC E8 EA E9 E8 E7 E6 E5 E4 E3 E2 E1 EO
FO
••
•
R7
R6
7F 7E 7D 7C 78 7A 79 78 77 76 75 74 73 72 71
70
6F 6E 6D 6C 68 6A 69 68 67 66 65 64 63 62 61
60
RS
5F 5E 5D 5C 58 5A 59 58 57 56 55 54 53 52 51
50
R4
R3
R2
4F 4E 4D 4C 48 4A 49 48 47 46 45 44 43 42 41
40
3F 3E 3D 3C 38 3A 39 38 37 36 35 34 33 32 31
30
2F 2E 2D 2C 28 2A 29 28 27 26 25 24 23 22 21
20
R1
iF 1E 1D 1C 18 1A 19 18 17 16 15 14 13 12 11
10
RD
OF DE OD DC 08 OA 09 08 07 06 05 04 03 02 01
00
'------~V-------A------~V-------/
RnH
RnL
Figure 3.3
Bit Address to Registers
3.3 The XA Memory Spaces
The XA divides physical memory into program and data memory spaces. Twenty-four address
bits, corresponding to a 16MB address space, are defined in the XA architecture. In any given
XA implementation, fewer than all twenty-four address bits may actually be used, and there is
provision for a small-memory mode which uses only 16-bit addresses; see Chapter 4.
Code and data memory may be on-chip or external, depending on the XA variant and the user
implementation. Whether a specific region is on-chip or external does not, in general, affect
access to the memory.
3/24/97
61
XA Memory Organization
3.3.1 Bytes, Words, and Alignment
XA memory is addressed in units of bytes, where each byte consists of 8 bits. A word consists of
two bytes, and the word storage order is "Little-Endian", that is, the less significant byte of word
data is located at a lower memory addresso See Figure 304.
address
AO
n
o
L.S. Byte
}
WORD at address n
M.So Byte
n+1
'--------'
Figure 3.4
Memory byte order
Any word access must be aligned at an even address (Address bit AO=O). If an odd-aligned word
access is attempted the word at the next-smallest even address will be accessed, that is, AO will
be set to 00
The external XA memory spaces may be accessed in byte or word units but the h.ardware access
method does not affect the even alignment restriction on word accesses.
3.4 Data Memory
The data memory space starts at address 0 and extends to the highest valid address in the
implementation, at maximum, FFFFFFh. As will be described below, the data memory space is
segmented into 256 segments of 64K bytes each. External Data Memory starts at the first
address following the highest Internal Data Memory location. In general, at least 512 bytes of
Internal Data Memory, starting at location 0, will be provided in all XA implementations;
however, there is no inherent minimum or maximum architectural limitation on Internal Data
Memory.
The upper 16 segments of data memory (addresses FO:OOOO through FF:FFFF hexadecimal) are
reserved for special functions in XA derivatives. A similar range is reserved in the code memory
space, see section 3.5.
3.4.1 Alignment in Data Memory
There are no data memory alignment restrictions except that placed on word accesses to all
memory: Words must be fetched from even addresses. An attempt to fetch a word at an odd
address will fetch a word from the preceding even address.
3.4.2 External and Internal Overlap
If External Data Memory is placed by external logic at addresses that overlaps Internal Data
Memory, the Internal Data Memory generally takes precedence. The overlapped portion of the
External memory may be accessed only by using a form of the MOVX instruction; see
Chapter 6. The use of MOVX always forces external data memory fetch in XA. For nonoverlapped portion of external data memory, no MOVX is required.
XA User Guide
62
3124/97
3.4.3 Use and ReadlWrite Access
Data memory is defined as read-write, and is intended to contain read/write data. It is logically
impossible to execute instructions from XA Data Memory. It is possible, and a common
practice, to add logic to overlap external code and data memory spaces. In this case it is
important to understand that the memory spaces are logically separate. In such a modified
Harvard architecture, implemented with external logic, it is possible -but not recommended- to
write self-modifying XA code. No such overlap is possible for internal data memory.
3.4.4 Data Memory Addressing
XA data memory addressing is optimized for the needs of embedded processing. Data memory
in the XA is divided into 64K byte segments. This provides an intrinsic protection mechanism
for multitasking applications and improves performance by requiring fewer address bits for
localized accesses.
Addressing through Segment Registers
Segment registers provide the upper 8 address bits needed to obtain a complete 24-bit address in
applications that require full use of the XA 16 Mbyte address space. Two segment registers are
defined in the XA architecture for use in accessing data memory, the Data Segment Register
(DS), and the Extra Segment Register (ES). As user stacks are located in the segment specified
by DS, it is probably most convenient to address user data structures through ES. Each pointer
register, namely RO through R6, is associated with one of the segment registers via the Segment
Select (SSEL) register as illustrated in Figure 3.5.
SSEL
DS
segment
registers
8-bit segment
identifier
R3
16-bit segment offset
complete
24-bit memory
address
Figure 3.5
Address generation
A 0 in the SSEL bit corresponding to the pointer register selects DS (default on RESET) and 1
selects the ES. For example, when R3 contains a pointer value, the full 24 bit address is formed
by concatenating DS or ES, as determined by the state of SSEL bit 3, as the most significant
8 bits. As a consequence of segmented addressing, the XA data memory space may be viewed
as 256 segments of 64K bytes each (Figure 3.6).
3124/97
63
XA Memory Organization
64K Segments
,
/ ~--------------~~~-----------------FFFFh
0
1
Data Memory
(only indirectly
addressed)
400h
3FFh
Directly
addressed
data
(1Kb per
segment)
255
----------
------- - - - --
r----
- - - --
RAM
(directly and
indirectly
addressable)
40h
3Fh
Standard
bit-addressable
RAM
20h
1Fh
RAM
(directly and
indirectly
add ressable)
o
Figure 3.6
Data memory segmentation
If R7 (the stack pointer) is used as a normal indirect pointer, the data segment addressed will
always be segment 0 in System Mode and the DS segment in User Mode. More information
about the System and User modes may be found in sections 4 and 5.
The ESWEN (bit 7 of SSEL) can be programmed only in the System Mode to enable (1) or
disable (0) write privileges to data segment via ES register in the User Mode. This bit defaults to
the disabled (0) state after reset.
Addressing Modes
The XA provides flexible data addressing modes. Arithmetic, logic, and data movement
instructions generally support the following data memory access:
Indirect. A complete 24-bit data memory address is formed by an 8-bit segment register
concatenated with a 16-bit pointer in a register.
Direct. The first lK bytes of data in each segment may be accessed by an address contained
within the instruction. Indirect with offset. A signed byte/word offset contained within the
instruction is added to the contents of a pointer register, and the result is concatenated with the
8-bit segment register DS to produce a complete 24-bit address.
Indirect with auto-increment. Indirect addresses are formed as above and the pointer register
contents are automatically incremented.
XA User Guide
64
3/24/97
Bit-level. Bit-level addresses are absolute references to specific bits.
Data move instructions and some special purpose instructions also have additional data
addressing modes as described in Chapter 6.
Indirect Addressing
The entire 16 MByte address space is accessible via register-indirect addressing with a segment
register, as illustrated by Figure 3.7 (Note that for simplicity, this figure omits showing how the
Extra Segment or Data Segment Register is chosen using SSEL.).
FFFFFFh
U
I
V
r
+
r
11.-
-
16 bits
I
Seg
Reg
18 bitsl
I
Rn
24 bit address
I
0
Figure 3.7
Indirect Access to 24 Bit Address Space
Indirect addressing with an offset is a variant of general indirect addressing in which an 8-bit or
16-bit signed offset contained within the instruction is added to the contents of a pointer register,
then concatenated with an 8-bit segment register to produce a complete address. This mode
gives access to data structures when a pointer register contains the starting address of the
structure. It also supports stack-based parameter passing.
Indirect addressing with autoincrement is another variant of indirect addressing in which the
pointer register contents are automatically incremented following the operation. When the
operand is a byte, the increment is one; when the operand is a word, the increment is 2. Using
indirect addressing with auto-increment provides a convenient method of traversing data
structures smaller than 64K bytes. For data structures exceeding 64K bytes in length, the
program code must explicitly adjust the segment register at page boundaries.
Address generation in these two modes of indirect addressing is illustrated inFigures 3.8 and 3.9.
When using indirect addressing care is necessary to avoid accessing a word quantity at an odd
address. This will result in an access using the next-lower even address, which is generally not
desirable. Note that the indirect addressing with an offset will be successful in this case as long
as the final, effective address is even. That is, both the base address and the offset may be odd.
3/24/97
65
XA Memory Organization
Direct Addressing
The first lK of each segment is directly addressable. Address generation for the direct address
mode is summarized in Figure 3.10. Segment register DS is always used.
Direct data-reference instructions encode a maximum of 10 address bits, which are zero extended
to sixteen bits and concatenated with DS to form an absolute 24 bit address. In all segments, direct
addressing can be used to access any byte in the first 1K bytes of the segment.
-----1_ _ _ _ _ -
8 or i6-bit
signed offset
I
+
+
+
Rn
partial
indirect addr
Seg
Reg
16 bits
18 bitsl
G
16 bits
18 bitsl
Rn
Seg
Reg
24 bit address
0
Rn <-- Rn + data size
24 bit address
a) Indirect addressing with offset
b) indirect addressing with auto increment
Figure 3.8
o
Indirect Addressing
10 bits
Direct address from instruction
+
OS (data segment register)
24 bit address
Figure 3.9
Direct address generation
SFR Addressing
A 1K portion of the direct address space, addresses 400h through 7FFh, is reserved for SFR
addresses. The SFR address space uses a portion of the direct address space, but represents a
completely distinct logical area that is not related to the data memory segmentation scheme. See
section 3.6 for a complete description of SFR access.
Bit Addressing
Thirty-two bytes of each segment of data memory are also bit-addressable, starting at offset 20h
in the segment addressed by the DS register. Address generation for bit addressing in the data
memory space is shown in Figure 3.10. As described in chapter 6, bits are encoded in
instructions as 10 bits. Figure 3.11 shows the bit addresses as they appear in memory .
XA User Guide
66
3124/97
identifies 1 of 8 bits in a byte.
~
byte offset from 20h
/r----....J1\'---______\
o
9
8
I7
Figure 3.10
3Fh
3Eh
6
5
4
3
I 2 I 1 I0 I
Bit address generation in direct memory space
Segment n
1FF 1FE 1FD 1FC 1FB 1FA 1F9 1F8 1F7 1F6 1F5 1F4 1F3 1F2 1F1 1FO
1EF 1EE 1ED 1EC 1EB 1EA 1E9 1E8 1E7 1E6 1E5 1E4 1E3 1E2 1E1 1EO
••
•
r
r
14F 14E 14D 14C 14B 14A 149 148 147 146 145 144 143 142 141 140
28h
26h
24h
22h
20h ,
~
)
13F 13E 13D 13C 13B 13A 139 138 137 136 135 134 133 132 131 130
12F 12E 12D 12C 12B 12A 129 128 127 126 125 124 123 122 121 120
11F 11E 110 11C 11B 11A 119 118 117 116 115 114 113 112 111 110
10F 10E 10D 10C 10B 10A 109 108 107 106 105 104 103 102 101 100
V
A
V
byte at odd address
Figure 3.11
byte even address
/
3Fh
------
~
20h
------
Direct memory bit addressing
3.5 Code Memory
Code memory starts at address 0 and extends to the highest valid address in the implementation,
at maximum, FFFFFFh. External Code Memory (off-chip) starts at the first address following
the highest Internal Code Memory (on-chip) location, if any. If code memory is present on-chip,
it always starts at location O.
The upper sixteen 64K byte code pages (addresses FOOOOO through FFFFFF hexadecimal) are
reserved for special functions in XA derivatives. The same address range is reserved in the data
memory space, see section 3.4.
3.5.1 Alignment in Code Memory
As instructions are variable in length, from 1 to 6 bytes (see Chapter 6), instructions in code
memory can be located at odd addresses. As described in Chapter 6, instruction branch targets,
i.e., targets of jumps, calls, branches, traps, and interrupts must be aligned on an even address.
3/24/97
67
XA Memory Organization
3.5.2 External and Internal Overlap
If External Code Memory is placed by external logic at locations that overlap Internal Code
Memory, the Internal Code Memory takes precedence, and the overlapped portion of the
External memory will in not be accessed. However, on XA implementations that provide an
External Address (EA) hardware input, setting EA low will cause external program memory to
be used.
3.5.3 Access
Code memory is intended to contain executable XA instructions. The XA architecture supports
storing constant data in Code Memory and provides special access modes for retrieving this
information. Constant data is implicitly stored within the instruction of many data manipulation
instructions when immediate operands are specified.
It is possible, and a common practice, to overlap external code and data memory spaces. In this
case it is important to understand that the memory spaces are logically separate. In such an
architecture, implemented with external logic, code memory is logically read-only memory that
is writable when accessed as external data memory. No such overlap is possible for internal
code memory.
MOVC addressing in Code Memory
A special instruction, MOVC, is defined in the XA for accessing constant data (e.g lookup
tables, string constants etc.) stored in code memory. There is a standard form of MOVC that
reflects the native XA architecture, and there are two variations that reflect 80CSI compatibility;
see Chapter 9 for details of 80CS1 compatibility. The standard form of MOVC uses a 16-bit
register value as a pointer, appended to either the top 8 bits of the Program Counter (PC) or the
Code Segment register (CS) to form a 24-bit address, as shown in Figure 3.12. The source for
the upper 8 address bits is determined by the setting of the segment selection bit (0 = PC and
1= CS) in the SSEL register that corresponds to the operand register.
segment
registers
PC
8-bit segment
identifier
R4
CS
16-bit segment offset
complete
24-bit memory
address
Figure 3.12
XA User Guide
MOVC addressing in code memory
68
3/24/97
3.6 Special Function Registers (SFRs)
Special Function Registers (SFRs) provide a means for programs to access CPU control and
status registers, peripheral devices, and 110 ports. The SFR mechanism provides a consistent
mechanism for accessing standard portions of the XA core, peripheral functions added to the
core within each XA derivative, and external devices as implemented in future derivatives.
Figure 3.13 highlights the core registers that are accessed as SFRs: PCON, SCR, SSEL,
PSWH, PSWL, CS, ES, DS. Communication with these registers as well as on-chip peripheral
devices is performed via the dedicated Special Function Register Bus (see section 8).
Execution
Unit
_ _ _ _ .I
o
On-chip
Peripherals
y
On-chip
EPROMI
ROM
External
Data
Memory
Figure 3.13
External
SFR
Devices
External
Program
Memory
XA Core with SFRs highlighted
The SFR address space is 1K bytes (Figure 3.14). The first half of this space (400h through
5FFh) is dedicated to accessing core registers and on-chip peripherals outside the XA core.
3/24197
69
XA Memory Organization
SFRs assigned addresses in the range 400h through 43Fh are both byte and bit-addressable. The
second half (600h through 7FFh) of the SFR space is reserved for providing access to off-chip
SFRs. The off-chip sfr space is provided to allow faster access of off-chip memory mapped liD
devices without having to create a pointer for each access.
7FFh
Reserved for off-chip,
non-bit addressable
SFRs
(memory-mapped I/O)
512 bytes
600h
5FFh
Standard
non-bit addressable
on-chip SFRs
1K directly
addressable
SFR space
440h
512 bytes
43Fh
64 bytes of bit
addressable on-chip
SFRs
400h
Figure 3.14
SFR address space
Following are some key points to remember when using SFRs:
SFRs should be symbolically addressed. Because SFR assignments may vary from derivative to
derivative, it is important to always use symbolic references to SFRs. XA software development
tools provide symbolic constants for all SFRs in the form of header/include files and the tools
will be updated as new SFRs are added with each added XA derivative.
Verify that your application uses the right headerlincludefiles. Although baseline SFRs are
likely to retain their addresses in future XA derivatives, this is not guaranteed. SFRs used for
optional peripherals may well have different addresses on different derivatives, and the same
address on one derivative may access a different peripheral SFR.
Any SFR may be accessed at any time without reference to a pointer or segment. SFR access is
independent of any segment register, so SFRs are always accessible with the 10 bit address
encoded in instructions accessing SFRs.
SFRs may not be accessed via indirect address. Any time indirection is used, data memory is
accessed. If an SFR address is referenced as an indirect address, physical RAM at that address if it exists- is accessed.
XA User Guide
70
3/24/97
An SFR address is always contained entirely within an instruction. The SFR address is always
encoded in the instruction providing the access, and there is no other way of addressing an SFR.
Details of access to external SFRs is determinedby derivative implementation. Access to offchip SFRs is a reserved feature not implemented in the baseline XA. Consult derivative product
datasheets for details of external SFR access, e.g., timing.
3.7 Summary of Bit Addressing
Several sections of this chapter have described portions of the XA that are bit-addressable.
There are a total of 1024 addressable bits distributed in the XA architecture, chosen to make
important data structures immediately accessible via XA bit-processing instructions,
specifically, all registers in the register file, RO through R7 (and R8 through R15 if
implemented); directly addressable RAM addresses 20h through 3Fh in the page currently
specified by DS, and a portion of the on-chip SFRs. Figure 3.15 summarizes all the bitaddressable portions of the XA.5
bit space
start
overlaps bytes ...
end
type
start
0
~
OFFh
registers
100h
~
IFFh
direct RAM
200h
~
3FFh
on-chip SFRs
Figure 3.15
3/24/97
end
RO
~
R15
20h
~
3Fh
400h
~43Fh
Bit addressing summary
71
XA Memory Organization
~I
4 CPU Organization
This chapter describes the Central Processing Unit (CPU) of the XA Core. The CPU contains all
status and control logic for the XA architecture. The XA reset sequence and the system
oscillator interface with the CPU, and power control is handled here. The CPU performs
interrupt and exception handling. The XA CPU is equipped with special functions to support
debugging.
4.1 Introduction
Figure 4.1 is a block diagram of the XA Core .
. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. . .. .. .. .. .. .. . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. . .. .. .. .. .. .. .. .. . .. .. .. .. .. .. .. . .. .. . .. .. .. "- .....
I
Execution
Unit
o
y
On-chip
Peripherals
External
Data
Memory
External
SFR
Devices
On-chip
EPROM/
ROM
External
Program
Memory
Figure 4.1 The XA Core
3124/97
72
CPU Organization
Here is an overview of core elements: The XA Core oscillator provides a basic system clock.
Timing and control logic are initialized by an external reset signal; once initialized, this logic
provides internal and external timing for program and data memory access. This logic supervises
loading the Program Counter and storing instructions fetched by the Program Memory Interface
into the Instruction Register. The timing and control logic sequences data transfers to and from
the Data Memory Interface. Under the same control, the ALU performs Arithmetic and Logical
operations. The ALU stores status information in the low byte of the Program Status Word
(PSWL). The on-board register file is used for intermediate storage and contains the current
value of the Stack Pointer (SP). The high byte of the Program Status Word (PSWH) chooses
between a privileged System Mode and a restricted User Mode; controls a Trace Mode used for
single-step debugging, chooses the active register bank, and records the priority of the currently
executing process. The System Configuration Register (SCR) is initialized to choose native XA
mode execution or an 80C51 family compatibility mode. The Segment Selection Register (SSL)
controls the use of the Code Segment (CS), Data Segment (DS), and the Extra Segment (ES)
registers. The XA Core architecture supports interfaces to on- and off-chip RAM, ROMI
EPROM, and Special Function Registers (SFRs).
This chapter describes all these core elements in detaiL
4.2 Program Status Word
The Program Status Word (PSW) is a two-byte SFR register that is a focal point of XA
operations. The least significant byte contains the CPU status flags, which generally reflect the
result of each XA instruction execution. This byte is readable and writable by programs running
in both User and System modes.
PSWH
PSWL
Figure 4.2 XA PSW
The most significant byte of PSW is written by programs to set important XA operating modes
and parameters: system/user mode, trace mode, register bank select bits, and task execution
priority. PSWH is readable by any process but only the register select bits may be modified by
User mode code. All of the flags may be modified by code running in System Mode.
It should be noted that the XA includes a special SFR that mimics the original 80C51 PSW
register. This register, called PSW51, allows complete compatibility with 80C51 code that
manipulates bits in the PSW. See Chapter 9 for details of 80C51 compatibility.
4.2.1
CPU Status Flags
The PSW CPU flags (Figure 4.3) signify Carry, Auxiliary Carry, Overflow, Negative, and Zero.
Some instructions affect all these flags, others only some of them, and a few XA instructions
have no effect on the PSW status flags. In general, these flags are read by programs in order to
XA User Guide
73
3124/97
make logical decisions about program flow. Chapter 6 describes comprehensively how CPU
Status Flags are affected by each instruction type. Consult reference pages in Chapter 6 for
details about how individual instructions affect the PSW Status Flags.
PSWLlc><-:
v
N
z
Figure 4.3 PSW CPU status flags
C, the Carry Flag, generally reflects the results of arithmetic and logical operations. It contains
the carry out of the most significant bit of an arithmetic operation, if any, for the instructions
ADD, ADDC, CMP, CJNE, DA, SUB, and SUBB.The carry flag is also used as an intermediate
bit for shift and rotate instructions ASL, ASR, LSR, RLC, and RRC.
The multiply and divide instructions (MUL16, MULU8, MULU16, DIV16, DIV32, DIVU8,
DIVU16, and DIVU32) unconditionally clear the carry flag.
AC, the auxiliary carry flag, is updated to reflect the result of arithmetic instructions ADD,
ADDe, CMP, SUB, and SUBB with the carry out of the least significant nibble of the ALU.
This flag is used primarily to support BCD arithmetic using the decimal adjust instruction (DA).
V is the overflow flag. It is set by an arithmetic overflow condition during signed arithmetic
using instructions ADD, ADDC, CMP, NEG, SUB, and SUBB.
V is also set when the result of a divide instruction (DIV16, DIV32, DIVU8, DIVU16, DIVU32)
exceeds the size of the specified destination register and when a divide-by-zero has occurred.
For multiply instructions (MUL16, MULU8, MULU16) this flag is set when the result of a
multiply instruction exceeds the source operand size. In this case "overflow" provides an
indication to the program that the result is a larger data type than the source, such as a long
integer product resulting from the multiply of two integers).
N reflects the twos complement sign (the high-order or "negative" bit) of the result of arithmetic
operations and the value transferred by data moves. This flag is unaffected by PUSH, POP,
SEXT, LEA, and XCH instructions.
Z ("zero") reflects the value of the result of arithmetic operations and the value transferred by
data moves. This flag is set if the result or value is zero, otherwise it is cleared. The flag is
unaffected by PUSH, POP, SEXT, LEA, and XCH instructions.
Other bits (marked with "-" in the register diagram) are reserved for possible future use.
Programs should take care when writing to registers with reserved bits that those bits are given
the value o. This will prevent accidental activation of any function those bits may acquire in
future XA CPU implementations.
3/24/97
74
CPU Organization
4.2.2 Operating Mode Flags
The PSW operating mode flags (Figure 4.4) set several aspects of the XA operating mode. All
of the flags in the upper byte of the PSW (PSWH) except the bits RS 1 and RSO may be modified
only by code running in system mode.
PSWH
ISM: TM: RS1: RSO: 1M3: 1M2: IM1
IMO
Figure 4.4 PSW operating mode flags
The System Mode bit, SM, when asserted, allows the currently running program full System
Mode access to all XA registers, instructions, and memories. (For example, most of PSWH can
only be modified when SM is asserted.) When this bit is cleared, the XA is running in User
Mode and some privileges are denied to the currently running program.
The Trace Mode bit, TM, when set to 1, enables the built-in XA debugging facilities described
in section 4.9. When TM is cleared, the XA debugging features are disabled.
The bits RSI and RSO identify one of the four banks of word registers RO through R3 as the
active register set. The other three banks are not accessible as registers (but also see the
Compatibility Mode description in the System Configuration Register section).
The 4 bits 1M3 through IMO (Interrupt Mask bits) identify the execution priority of the current
executing program. The event interrupt controller compares the setting of the 1M bits to the
priority of any pending interrupts to decide whether to initiate an interrupt sequence. The value 0
in the 1M bits indicates the lowest priority, or fully interruptible code. The value 15 (or F
hexadecimal) indicates the highest priority, not interruptible by event interrupts. Note that
priority 15 does not inhibit servicing of exception interrupts or NMI.
The value of the 1M bits may be written only by code operating in the system mode. Their value
may be read by interrupt handler code to implement software-based interrupt priorities. Note
that simply writing a new value to the interrupt mask bits can sometimes cause what is called a
priority inversion, that is, the currently executing code may have a lower priority than
previously interrupted code. The Software Interrupt mechanism is included on some XA
derivatives specifically to avoid priority inversion in complex systems. Refer to the section on
Software Interrupts for details.
4.2.3 Program Writes to PSW
The bytes comprising the PSW, namely PSWH and PSWL, are accessible as SFRs, and there is
a potential ambiguity when a write to the PSW is performed by an instruction whose execution
also modifies one or more PSW bits. The XA resolves this by giving full precedence to explicit
writes to the PSW.
.
XA User Guide
75
3/24/97
For example, executing
MOV.b ROL,#81h
sets PSW bit N to 1, since the byte value transferred is a twos complement negative number.
However, executing
MOV.b PSWL, #81h
will set PSW bits C and Z and leave bit N cleared, since the value explicitly written to PSW
takes precedence.
This precedence rule suppresses all PSW flag updates. When a value is written to the PSW, for
example when executing
OR.b PSWH, #30
the contents of PSWL are unaffected.
4.2.4 PSW Initialization
As described below, at XA reset, the initial PSW value is loaded from the reset vector located at
program memory address O. Philips recommends that the PSW initialization value in the reset
vector sets 1M3 through IMO to all l' s so that XA initialization is marked as the highest priority
process (and therefore cannot be interrupted except by an exception or NMI). At the conclusion
of the initialization code, the execution priority is typically reduced, often to 0, to allow all other
tasks to run. It is also recommended that the reset vector set the SM bit to 1, so that execution
begins in System Mode.
4.3 System Configuration Register
The System Configuration Register (SCR), described in Figure 4.5, sets XA global operating
mode. SCR is intended to be written once during system start-up and left alone thereafter. Four
bits are currently defined:
Figure 4.5 System Configuration Register (SCR)
PZ set to 0 (the default) puts the XA in the Large-Memory mode that uses full 24-bit XA
addressing. When PZ = 1 the XA uses a small-memory "Page 0" mode that uses 16 bit
addresses. The intent of Page 0 mode is to save stack space and improve interrupt latency in
systems with less than 64 K bytes of code and data memory. See the following sections for
details.
3/24/97
76
CPU Organization
CM chooses between standard "native" mode XA operation and 80CSI compatibility mode.
When SOCS1 compatibility mode is enabled, two things happen. First, the bottom 32 bytes of
data memory in each data segment are replaced by the four banks of RO through R3 from the
register file. ROL of bank 0 will appear at data address 0, ROH of bank 0 will appear at data
address 1, etc. Second, the use of RO and Rl as indirect pointers is altered. To mimic 80CSI
indirect addressing, indirect references to RO use the byte ROL (zero extended to 16-bits) as the
actual pointer value. References to Rl similarly use the byte ROH (zero extended to 16-bits) as
the actual pointer value. Note that ROL and ROH on the XA are the same registers as RO and Rl
on the 80CS1. No other XA features are altered or affected by compatibility mode. Operation of
the XA with compatibility mode off (CM =0) is reflected in descriptions found in the first 8
chapters of this User Guide. Operation with compatibility mode on (CM = 1) is discussed in
Chapter 9.
PTI and PTO select a submultiple of the oscillator clock as a Peripheral Timing clock source, in
particular for timers but possibly for other peripherals in XA derivatives. Here are the values for
these bits and the resulting clock frequency:
PT 1
PTO
Peripheral Clock
o
0
oscillator/4
o
oscillator/16
o
oscillator/64
reserved
Other bits (marked with "-" in the register diagram) are reserved for possible future use.
Programs should take care when writing to registers with reserved bits that those bits are given
the value O. This will prevent accidental activation of any function those bits may acquire in
future XA CPU implementations.
4.3.1 XA Large-Memory Model Description
When the default XA operation is chosen via the SCR (CM = 0 and PZ = 0), all addresses are
maintained by the core as 24 bit values, providing a full 16 MByte address space. On a specific
XA derivative, fewer than 24 bits may be available at the external bus interface. All 24 address
bits are pushed on the stack during calls and interrupts and 24 bits are popped by RETs and
RETls.
4.3.2 XA Page 0 Memory Model Description
When XA Page 0 mode is chosen, only 16 address bits are maintained by the XA core. This
operating mode supports XA applications for which a 64K byte address space is sufficient. The
external memory interface port used for the upper 8 address bits, if present, is available for other
uses. A single 16-bit word is pushed on the stack during calls and interrupts and 16 bits are, in
turn popped by RETs and RETls. Using Page 0 mode when only a small memory model is
needed saves stack space and speeds up address PUSH and POP operations on the stack.
XA User Guide
77
3124/97
Switching into or out of Page 0 mode after the original initialization is not recommended. First,
switching into Page 0 mode can only be done by code running on Page 0, since the code address
will be truncated to 16-bits as soon as Page 0 mode takes effect. Instructions already in the XA
pre-fetch queue would have been fetched prior to Page 0 mode taking effect. Any addresses that
may have been pushed onto the stack previously also become invalid when Page 0 mode is
changed. Thus Page 0 mode could not be changed while in an interrupt service routine, or any
subroutine.
4.4 Reset
The term "reset" refers specifically to the hardware input required when power is first applied to
the XA device, and generally to the sequence of initialization that follows a hardware reset,
which may occur at any time. The term also refers to the effect of the RESET instruction (see
Chapter 6); in addition, an overflowing Watchdog timer (if this peripheral is present) has an
identical effect.
This section describes the XA reset sequence and its implications for user hardware and
software.
4.4.1 Reset Sequence Overview
A specific hardware reset sequence must be initiated by external hardware when the XA device
is powered-up, before execution of a program may begin. If a proper reset at power up is not
done, the XA may fail wholly or in part. The XA reset sequence includes the following
sequential components:
•
•
•
Reset signal generated by external hardware
Internal Reset Sequence occurs
RST line goes high
External bus width and memory configuration determined
Reset exception interrupt generated
Startup Code executed
Figure 4.6 illustrates this process.
4.4.2 Power-up Reset
This section describes the reset sequence for powering up an XA device.
The XA RST input must be held low for a minimum reset period after V dd has been applied to
the XA device and has stabilized within specifications. The minimum reset period for a typical
system with a reasonably fast power supply ramp-up time is 10 milliseconds. This reset period
provides sufficient time for the XA oscillator to start and stabilize and for the CPU to detect the
reset condition. At this point, the CPU initiates an internal reset sequence. RST must continue to
be low for a sufficient time for the internal reset sequence to complete.
3/24/97
78
CPU Organization
Vdd
/
~
:
I
XA configuration signals sampled
~
~irst instruction executed
'Vmin
I
I
I
I
I
XA
internal
reset
sequence
1
reset exception
generated
Figure 4.6 XA power-up sequence
4.4.3 Internal Reset Sequence
The XA internal reset sequence occurs after power-up or any time a sufficiently long reset pulse
is applied to the RST input while the XA is operating. This sequence requires a minimum of a
10 microseconds (or 10 clocks, whichever is greater) to complete, and RST must remain low for
at least this long.
The internal reset sequence does the following:
• Writes a 00 to most core and many peripheral SFRs. Other values are written to some peripheral SFRs. Consult the data sheet of a specific device for details.
Sets CS, DS, and ES to O.
• Sets SSEL =0, i.e., sets all accesses through DS.
• Sets all registers in the Register File to O.
• Sets the user and the system stack pointers (USP and SSP) to 01 OOh.
• Clears SCR bit PZ, i.e., 24-bit memory addresses will be used by default.
Clears SCR bit CM, i.e., starts execution in XA Native Mode.
• Clears IE bit EA, disabling all maskable interrupts.
Note that the internal reset sequence does not initialize internal or external RAM. Note also that
the contents of PSW at this point is not important, as it will immediately be replaced as
described further below.
The effect of the internal reset sequence on components outside the XA core depends on the
peripheral complement and configuration of the specific XA derivative. In general, the internal
reset sequence has the following effects:
•
•
•
Sets all port pins to inputs (quasi-bidirectional output configuration with port value = FF hex)
Clears most SFRs to 0
Initializes most other SFRs to appropriate non-zero values
XA User Guide
79
3/24/97
Note that serial port buffers, PCA capture registers, and WatchDog feed registers (if present) are
unaffected. Consult the XA derivative data sheet for more information.
After the XA internal reset sequence has been completed, the device is quiescent until the RST
line goes high.
4.4.4 XA Configuration at Reset
As the RST line goes high, the value on two input pins is sampled to determine the XA memory
and bus configuration. The EA and BUSW pins (if present on a specific XA derivative) have
special function during the reset sequence, to allow external hardware to determine the use of
internal or external program memory, and to select the default external bus width.
Immediately after the RST line goes high, the CPU triggers a reset exception interrupt, as
described in the next section.
Selecting Internal or External Program Memory
The XA is capable of reading instructions from internal or external memory, both of which may
be present. The XA EA input pin determines whether internal or external program memory will
be used. The EA pin is sampled on the rising edge of the RST pulse. If EA = 0, the XA will
operate out of external program memory, otherwise it will use internal code memory. The
selection of external or internal code memory is fixed until the next time RST is asserted and
released; until then all code fetches will access the selected code memory.
The XA cannot detect inconsistencies between the setting detected on the EA input and the
hardware memory configuration. For example, setting EA = 1 on a ROMless XA variant will
cause the XA to attempt to execute internal code memory, which is undefined on a ROMless
device. typically resulting in a system failure.
Selecting External Bus Width
The XA is capable of accessing an 8 or 16 bit external data bus. The BUSW pin tells the XA the
external data bus configuration. BUSW=O selects an 8-bit bus and BUSW=1 selects an 16-bit
bus. On power-up, the XA defaults to the 16-bit bus (due to an on-chip weak pull-up on
BUSW). The BUSW pin is sampled on the rising edge of the RST pulse. If BUSW is low, the
XA operates its external bus interface in 8 bit mode, otherwise, the XA uses 16 bit bus
operation. The bus width may also be set under software control on derivatives equipped with
the BeR ("Bus Configuration Register") SFR.
After RST is released, the BUSW pin may be used an alternate function on some XA
derivatives. Consult derivative data sheets for exact pinouts and details of how pins such as
these may be shared to keep package size small.
3/24/97
80
CPU Organization
4.4.5 The Reset Exception Interrupt
Immediately after the RST line goes high, the CPU generates a Reset Exception Interrupt. As a
result, the initial PSW and address of the first instruction (the "start-up code") is fetched from
the reset vector in code memory at location 0, Here's an example in generalized assembler
format of the setup for the Reset Exception:
code_seg
org Oh
establish code segment
start at address 0
reset_vector
dw
initial PSW
dw
startup_code
define a word constant
define a word constant
org
move to address 120h
(above vector table)
120h
startup_code:
put startup code here
The initial value of PSWL set in the Reset Vector is generally of no special system-wide
importance and may be set to zero or some other value to meet special needs of the XA
application. The initial PSWH value sets the stage for system software initialization and its
value requires more attention. Here's an example set of declarations that create the
recommended initial value of PSWH:
system_mode
maxJ)riority
initial_PSW
equ
equ
equ
8000h
OFOOh
system_mode + maxJ)riority
It is generally appropriate to initialize the XA in System Mode so that the start-up code has
unrestricted access to the entire architecture. This is done by using a initial value that sets the
PSWHbitSM.
Philips recommends initializing the execution priority of the start-up code to the highest possible
value of 15 (that is, IMO through 1M3 to all ones) so that the start-up code is recognizable as the
highest priority process. As described above, the hardware initialization sequence turns off all
possible interrupts, so the only potential interrupting process would arise from a non-mask able
interrupt (NMI). It is generally a good idea to prevent NMI generation with a hardware lock-out
until XA start-up procedures are completed.
The PSWH initialization value given in this example sets System Mode (SM), selects register
bank 0 (any register bank could be used) and clears TM so that Trace Mode is inactive.
XA User Guide
81
3/24/97
.1
4.4.6 Startup Code
Philips recommends that the first instruction of start-up code set the value of the System
Configuration Register (SCR), described in section 4.3, to reflect the system architecture.
The next recommended step is explicitly initializing the stack pointers. The default values
(section 4.7) are usually insufficient for application needs.
The start-up code sequence may be concluded by a simple branch or jump to application code. A
RETI may not be used at the conclusion of a Reset Exception Interrupt handler (which causes
the start-up code to run) because a reset initializes the SP and does not leave an interrupt stack
frame.
4.4.7 Reset Interactions with XA Subsystems
The following describes how the reset process interacts with some key subsystems:
•
•
•
•
Trace Exception. The trace exception is aborted by an external reset; see section 4.9.
WatchDog. In XA derivatives equipped with a WatchDog timer feature, an internal reset will
be asserted for a derivative-defined number of clocks.
Resets while in Idle Mode or during normal code execution. Since the XA oscillator is running in Idle Mode, the RST input must be kept low for only 10 microseconds (or 10 clocks,
whichever is greater) to achieve a complete reset.
Resets while in Power-Down Mode. The XA oscillator is stopped in Power-Down mode, so
the RST input must be low for at least 10 milliseconds. An exception to this is when an external oscillator is used and the XA is in Power-Down mode. In this case, if the external oscillator is running, a reset during Power-Down mode may be the same as a reset in Idle Mode.
4.4.8 An External Reset Circuit
The RST pin is a high-impedance Schmitt trigger input pin. For applications that have no special
start-up requirements, it is practical to generate a reset period known to be much longer than that
required by the power supply rise time and by the XA under all foreseeable conditions. One
simple way to build a reset circuit is illustrated in Figure 4.7.
Vdd
Some typical values for Rand C:
-r-
R
.~
t----I
R = 100K, C = 1.0J..lF
RST
XA
R = 1M, C = 0.1 J..lF
C-'-
(assuming that the Vdd rise time is
1 millisecond or less)
I
Figure 4.7 An external reset circuit
3/24/97
82
CPU Organization
4.5 Oscillator
The XA contains an on-chip oscillator which may be used as the clock source for the XA CPU,
or an external clock source may be used. A quartz crystal or ceramic resonator may be
connected as shown in Figure 4.8a to use the internal oscillator. To use an external clock,
connect the source to pin XTALI and leave pin XTAL2 open, as shown in Figure 4.8b.
C1~
1
0T
--
XTAL1
JLrl.J-
XA
XTAL1
XA
XTAL2
nc- XTAL2
a) using the on-chip oscillator
b) using an external clock
Figure 4.8 XA clock sources
The on-chip oscillator of the XA consists of a single stage linear inverter intended for use as a
positive reactance oscillator. In this application, the crystal is operated in its fundamental
response mode as an inductive reactance in parallel resonance with capacitance external to the
crystaL
A quartz crystal or ceramic resonator is connected between the XTALI and XTAL2 pins,
capacitors ar connected from both pins to ground. In the case of a quartz crystal, a parallel
resonant crystal must be used in order to obtain reliable operation. The capacitor values used in
the oscillator circuit should normally be those recommended by the crystal or resonator
manufacturer. For crystals, the values may generally be from 18to 24 pF for frequencies above
25 MHz and 28 to 34 pF for lower frequencies. Too large or too small capacitor values may
prevent oscillator start-up or adversely affect oscillator start-up time.
4.6 Power Control
The XA CPU implements two modes of reduced power consumption: Idle mode, for moderate
power savings, and Power-Down mode. Power-Down reduces XA consumption to a bare
minimum. These modes are initiated by writing SFR peON, as illustrated in Figure 4.9.
PCON
-: -:
- :
Figure 4.9 _PCON
Idle Mode is activated by setting the PCON bit IDL. This stops CPU execution while leaving
the oscillator and some peripherals running.
XA User Guide
83
3/24/97
Power-Down mode is activated set by setting the PCON bit PD. This shuts down the XA
entirely, stopping the oscillator.
The reset values of IDL and PD are O. If a 1 is written to both bits simultaneously, PD takes
precedence and the XA goes into Power-Down mode,
Other bits (marked with "-" in the register diagram) are reserved for possible future use.
Programs should take care when writing to registers with reserved bits that those bits are given
the value O. This will prevent accidental activation of any function those bits may acquire in
future XA CPU implementations.
4.6.1 Idle Mode
Idle mode stops program execution while leaving the oscillator and selected peripherals active.
This greatly reduces XA power consumption. Those peripheral functions may cause interrupts
(if the interrupt is enabled) that will cause the processor to resume execution where it was
stopped.
In the Idle mode, the port pins retains their logical states from their pre-idle mode. Any port pins
that may have been acting as a portion of the external bus revert to the port latch and
configuration value (normally push-pull outputs with data equal to 1 for bus related pins). ALE
and PSEN are-held in their respective non-asserted states. When Idle is exited normally (via an
active interrupt), port values and configurations will remain in their original state.
4.6.2 Power-Down Mode
Power-Down mode stops program execution and shuts down the on-chip oscillator. This stops
all XA activity. The contents of internal registers, SFRs and internal RAM are preserved.
Further power savings may be gained by reducing XA V dd to the RAM retention voltage in
Power Downmode; see the device data sheet for the applicable Vdd value. The processor may
be re-activated by the assertion of RST or by assertion of one of an external interrupt, if enabled.
When the processor is re-activated, the oscillator will be restarted and program execution will
resume where it left off.
In Power-Down mode, the ALE and PSEN outputs are held in their respective non-asserted
states. The port pins output the values held by their respective SFRs. Thus, port pins that are not
configured to be part of an external bus retain their state. Any port pins that may have been
acting as a portion of the. external bus revert to the port latch and configuration value (normally
push-pull outputs with data equal to 1 for bus related pins). If Power-Down mode is exited via
Reset, all port values and configurations will be set to the default Reset state.
In order to use an external interrupt to re-activate the XA while in Power-Down mode, the
external interrupt must be enabled and be configured to level sensitive mode. When PowerDown mode is exited via an external interrupt, port values and configurations will remain in
their original state. Since the XA oscillator is stopped when the XA leaves Power-Down mode
via an interrupt, time must be allowed for the oscillator to re-start. Rather than force the external
logic asserting the interrupt to remain active during the oscillator start-up time, the XA
implements its own timer to insure proper wake-up. This timer counts 9,892 oscillator clocks
3/24/97
84
CPU Organization
before allowing the XA to resume program execution, thus insudng that the oscillator is running
and stable at that time. Once the oscillator counter times out, the XA will execute the interrupt
that woke it up, if that interrupt is of a higher priority than the currently executing code.
Note that if an external oscillator is used, power supply current reduction in the Power-Down
mode is reduced from what would be obtained when using the XA on-chip oscillator. In this
case, full power savings may be gained by turning off the external clock source or stopping it
from reaching the XTALI pin of the XA. If the clock source may be turned off, it may be
advantageous to use Idle mode rather than Power-Down mode, to allow more ways of
terminating the power reduction mode and to avoid the 9,892 clock waiting period for exiting
Power-Down mode.
4.7 XA Stacks
The XA stacks are word-aligned LIFO data structures that grow downward in data memory,
from high to low address. This and some other details of the XA stack implementation differ
from 80C51 stack operation. Refer to the chapter on 8051 compatibility for a detailed discussion
of this topic.
The XA implements two distinct stacks, one for User Mode and one for System Mode. The User
Stack may be placed anywhere in data memory, while the System Stack must be located in the
first 64K bytes, i.e., segment O.
4.7.1 The Stack Pointers
The XA has two stacks, the system stack and the user stack. Each stack has an associated stack
pointer, the System Stack Pointer (SSP) and the User Stack Pointer (USP), respectively. Only
one of these stacks is active at a given time. The current stack pointer at any instant (which may
be the SSP or the USP) appears as word register SP (R7) in the register file; the other stack
pointer will not be visible. The value of the PSW bit SM determines which stack is active (and
whose stack pointer therefore appears as R7). In User Mode (SM =0), SP (R7) contains the
User Stack Pointer. In System Mode (SM =1), SP (R7) contains the System Stack Pointer. The
XA automatically switches SSP and USP values when the operating mode is changed. Note that
the terms "USP" and "SSP" are logical terms, denoting the value of SP (R7) in each mode.
Segments and Protection
The User stack is always addressed relative to the current data segment (DS) value. This is
consistent with each user task being associated with a specific data segment. Moreover, code
running in User Mode cannot modify DS, so there is no possibility of changing the segment in
which the stack resides within the User context. The System Stack must always be located in
segment 0, that is, the first 64K of data memory.
4.7.2 PUSH and POP
The PUSH operation is illustrated by Figure 4.10. The stack pointer always points to an existing
data item at the top of the stack, and is decremented by 2 prior to writing data.
XA User Guide
85
3/24/97
The POP operation copies the data at the top of the stack and then adds two to the stack pointer,
as follows shown in Figure 4.11.
,
All stack pushes and pops occur in word multiples. If a byte quantity is pushed on the stack it is
stored as the least significant byte of a word and the high byte is left unwritten;
see Figure 4.12. A POP to a byte register removes a word from the stack and the byte register
receives the least significant 8 bits of the word, as shown in Figure 4.13.
MOV RO,#1234h
PUSHRO
before
2n + 6
2n+4
2n+2
~ SP
existing'data
(empty)
2n+6
2n+4
2n+2
(e~pty)
(empty)
after
existing ' data
12
1
34
~ SP
(erripty)
(empty)
Figure 4.10 PUSH operation
POPRI
before
2n+ 6
2n+4
2n+2
AA
55
~
after
2n+6
2n+4
2n+2
SP
(empty)
(empty)
"-SP
AA
55
(empty)
(empty)
Rl =AA55h
Figure 4.11 POP operation
before
2n+6
2n+4
2n+2
AA
55
(empty)
(empty)
MOV Rl,#6869h
POP RIH
2n+6
2n+4
2n+2
~ SP
after
~ SP
AA
55
(empty)
(empty)
Rl = 5569h
Figure 4.12 POP a byte
3124/97
86
CPU Organization
The stack should always be word-aligned. If the SP (R7) is modified to an odd value, the
offending LSB of the stack pointer is ignored and the word at the next-lower even address is
accessed.
Note that neither PUSH or POP operations have any effect on the PSW flags.
MOV RO,#9876h
PUSH ROH
before
2n+ 6
2n+4
existing I data
(empty)
2n+2
.- SP
2n+6
2n+4
2n+2
(empty)
(empty)
after
existing ' data
00 I 98
~
SP
(empty)
(empty)
Figure 4.13 PUSH a byte
4.7.3 Stack-Based Addressing
Stack-based data addressing is fully supported by the XA. RO through R7 may be used in all
indexed address modes; the stack pointer in R7 is equally valid as an index.
Figure 4.14 illustrates an example of stack-based addressing. The segment used for stack
relative addressing is always the same as for other stack operations (Segment 0 for System mode
code and DS for User mode code).
Note that the precautions mentioned in section 3.3.4 apply here: when referencing a word
quantity, the final (effective) address must be even, otherwise incorrect data will be accessed.
This topic is discussed further in the section Stack Pointer Misalignment.
4.7.4 Stack Errors
Special attention is required to avoid problems due to stack overflow, stack underflow, and stack
pointer misalignment
Stack Overflow
Stack overflow occurs when too many items are pushed, either explicitly or as the result of
interrupts. As items are pushed on to the stack, it may grow downward past the memory
allocated to it. It is not always possible for programs to detect stack overflow, so the XA triggers
a Stack Overflow Exception Interrupt whenever the value of the current stack pointer (SSP or
USP) decrements from 80h to 7Eh (simply setting SP to a value lower than 80h would NOT
cause a stack overflow). This value was chosen so that stack space sufficient to handle a stack
overflow exception interrupt is always guaranteed, as follows:
The 80h limit leaves 64 bytes available for stack overflow processing. A worst case might be
occurs when the Stack Pointer is at 80h and a program executes an 8 word push; this generates a
stack overflow. If an NMI occurs at the same time, 3 additional words are pushed. The balance
XA User Guide
87
3124/97
MOV
MOV
Rn, [R7+offset]
[R7+offset], Rn
SP (R7)
ISM bit ~n PSW I
DS
8-bit segment
identifier
OOh
Data Memory
complete 24-bit
memory address
••
•
SP+8
SP+6
SP+4
SP+2
SP+O
Figure 4.14 Stack-based addressing
of the 64 bytes on the stack is available for handler processing, which should carefully limit
further use of the stack.
Stack Underflow
Stack underflow occurs when too many items are popped and the stack pointer value becomes
greater than its initial value, i.e., the stack top. The XA does not support stack underflow
detection.
Stack Pointer Misalignment
Pointer misalignment occurs when a pointer contains an odd value and is used by an instruction
to access a word value in memory. The same situation could occur if some program action
forced the stack pointer to an odd value. In these cases, the XA ignores the bottom bit of the
pointer and continues with a word memory access.
4.7.5 Stack Initialization
At power-on reset, both USP and SSP in all XA derivatives are initialized to 100h. Since SP is
pre-decremented, the first PUSH operation will store a word at location FEh and the stack will
grow downwards from there.
3/24/97
88
CPU Organization
These default stack pointer start-up values overlap the System and User stacks and are
applicable only when one of these stacks will never be used.
Since the System stack is used for all exception and interrupt processing. this may not be
appropriate in all XA applications. The startup code should normally set new and different
values of both USP and SSP.
4.8 XA Interrupts
The XA architecture defines four kinds of interrupts. These are listed below in order of intrinsic
priority:
•
Exception Interrupts
Event Interrupts
Software Interrupts
Trap Interrupts
Exception interrupts reflect system events of overriding importance. Examples are stack
overflow, divide-by-zero, and Non-Maskable Interrupt. Exceptions are always processed
immediately as they occur, regardless of the priority of currently executing code.
Event interrupts reflect less critical hardware events, such as a UART needing service or a timer
overflow. Event interrupts may be associated with some on-chip device or an external interrupt
input. Event interrupts are processed only when their priority is higher than that of currently
executing code. Event interrupt priorities are settable by software.
Software interrupts are an extension of event interrupts, but are caused by software setting a
request bit in an SFR. Software interrupts are also processed only when their priority is higher
than that of currently executing code. Software interrupt priorities are fixed at levels from 1
through 7.
Trap interrupts are processed as part of the execution of a TRAP instruction. So, the interrupt
vector is always taken when the instruction is executed.
All forms of interrupts trigger the same sequence: First, a stack frame containing the address of
the next instruction and then the current value of the PSW is pushed on the System Stack. A
vector containing a new PSW value and a new execution address is fetched from code memory.
The new PSW value entirely replaces the old, and execution continues at the new address, i.e., at
the specific interrupt handler.
The new PSW value may include a new setting of PSW bit SM, allowing handler routines to be
executed in System or User mode, and a new value of PSW bits 1M3 through IMO, reflecting
the execution priority of the new task. These capabilities are basic to multi-tasking support on
the XA. See Chapter 5 for more details.
XA User Guide
89
3/24/97
Returns from all interrupts should in most cases be accomplished by the RETI instruction, which
pops the System Stack and continues execution with the restored PSW context. Since RETI
executed while in User Mode will result in an exception trap, as described further below,
interrupt service routines will normally be executed in System Mode.
The XA architecture contains sophisticated mechanisms for deciding when and if an interrupt
sequence actually occurs. As described below, Exception Interrupts are always serviced as soon
as they are triggered. Event Interrupts are deferred until their execution priority is higher than
that of the currently executing code. For both exception and event interrupts, there is a
systematic way of handling multiple simultaneous interrupts. Software and trap interrupts occur
only when program instructions generating them are executed so there is no need for conflict
resolution.
The Non-Maskable Interrupt requires special consideration. It is generated outside the XA core,
and in that respect is an event interrupt. However, it shares many characteristics of exception
interrupts, since it is not maskable. Note that NMI, while part of the XA CPU core, may not
always be connected to a pin or other event source on all XA derivatives.
4.8.1 Interrupt Type Detailed Descriptions
This section describes the four kinds of interrupts in detail.
Exception Interrupts
Exception interrupts reflect events of overriding importance and are always serviced when they
occur. Exceptions currently defined in the XA core include: Reset, Breakpoint, Divide-by-O,
Stack overflow, Return from Interrupt (RETI) executed in User Mode, and Trace. Nine
additional exception interrupts are reserved. NMI is listed in the table of exception interrupts
(Table 4.1) below because NMI is handled by the XA core in same manner as exceptions, and
factors into the precedence order of exception processing.
Since exception interrupts are by definition not maskable, they must always be serviced
immediately regardless of the priority level of currently executing code, as defined by the 1M
bits in the PSW. In the unusual case that more than one exception is triggered at the same time,
there is a hard-wired service precedence ranking. This determines which exception vector is
taken first if multiple exceptions occur. In these cases, the exception vector taken last may be
considered the highest priority, since its code will execute first. Of course, being non-maskable,
any exception occurring during execution of the ISR for another exception will still be serviced
immediately.
Programmers should be aware of the following when writing exception handlers:
1. Since another exception could interrupt a stack overflow exception handler routine, care
should be taken in all exception handler code to minimize the possibility of a destructive stack
overflow. Remember that stack overflow exceptions only occur once as the stack crosses the
bottom address limit, 80h.
3/24/97
90
CPU Organization
2. The breakpoint (caused by execution of the BKPT instruction, or a hardware breakpoint in an
emulation system) and Trace exceptions are intended to be mutually exclusive. In both cases,
the handler code will want to know the address in user code where the exception occurred. If a
breakpoint occurs during trace mode, or if trace mode is activated during execution of the
breakpoint handler code, one of the handlers will see a return address on the stack that points
within the other handler code.
Table 4.1: Exception interrupts, vectors, and precedence
Exception Interrupt
Vector Address
Service Precedence
Breakpoint
0004h:0007h
0
Trace
0008h:OOOBh
1
Stack Overflow
OOOCh:OOOFh
2
Divide-by-zero
0010h:0013h
3
User RETI
0014h:0017h
4
0018h - 003Fh
5
NMI
009Ch:009Fh
6
Reset
0000h:0003h
7
(always serviced
immediately, aborts
other exceptions)
Event Interrupts
Event Interrupts are typically related to on-chip or off-chip peripheral devices and so occur
asynchronously with respect to XA core activities. The XA core contains no inherent event
interrupt sources, so event interrupts are handled by an interrupt control unit that resides on-chip
but outside of the processor core.
On typical XA derivatives, event interrupts will arise from on-chip peripherals and from events
detected on interrupt input pins. Event interrupts may be globally disabled via the EA bit in the
Interrupt Enable register (IE) and individually masked by specific bits the IE register or its
extension. When an event interrupt for a peripheral device is disabled but the peripheral is not
turned off, the peripheral interrupt flag can still be set by the peripheral and an interrupt will
occur if the peripheral is re-enabled. An event interrupt that is enabled is serviced when its
priority is higher than that of the currently executing code. Each event interrupt is assigned a
priority level in the Interrupt Priority register(s). If more than one event interrupt occurs at the
same time, the priority setting will determine which one is serviced first. If more than one
interrupt is pending at the same level priority, a hardwares precedence scheme is used to choose
the first to service. The XA architecture defines 15 interrupt occurrence priorities that may be
programmed into the Interrupt Priority registers for Event Interrupts. Note that some XA
implementations may not support allIS levels of occurrence priority. Consult the data sheet for
a specific XA derivative for details.
XA User Guide
91
3/24/97
Note that, like all other forms of interrupts, the PSW (including the Interrupt Mask bits) is
loaded from the interrupt vector table when an event interrupt is serviced. Thus, the priority at
which the interrupt service routine executes could be different than the priority at which the
interrupt occurred (since that was determined not by the PSW image in the vector table, but by
the Interrupt Priority register setting for that interrupt). Normally, it is advisable to set the
execution priority in the interrupt vector to be the same as the Interrupt Priority register setting
that will be used in the program.
Furthermore, the occurrence priority of an interrupt should never be set higher than the
execution priority. This could lead to infinite interrupt nesting where the interrupt service
routine is re-interrupted immediately upon entry by the same interrupt source.
Software Interrupts
Software Interrupts act just like event interrupts, except that they are caused by software writing
to an interrupt request bit in an SFR. The standard implementation of the software interrupt
mechanism provides 7 interrupts which are associated with 2 Special Function Registers. One
SFR, the software interrupt request register (SWR), contains 7 request bits: one for each
software interrupt. The second SFR is an enable register (SWE), containing one enable bit
matching each software interrupt request bit.
Software interrupts are initiated by setting one of the request bits in the SWR register. If the
corresponding enable bit in the SWE register is also set, the software interrupt will occur when it
becomes the highest priority pending interrupt and its priority is higher than the current
execution level. The software interrupt request bit in SWR must be cleared by software prior to
returning from the software interrupt service routine.
Software interrupts have fixed interrupt priorities, one each at priorities 1 through 7. These are
shown in Table 4.2 below. Software Interrupts are defined outside the XA core and may not be
present on all XA derivatives; consult the specific XA derivative data sheet for details.
Table 4.2: Software interrupts, vectors, and fixed priorities
Software Interrupt
Vector Address
Fixed Priority
SWI1
01 OOh:01 03h
1
SWI2
01 04h:01 07h
2
SWI3
01 08h:01 OSh
3
SWI4
01 OCh:01 OFh
4
SWI5
0110h:0113h
5
SWI6
0114h:0117h
6
SWI7
0118h:011 Bh
7
The primary purpose of the software interrupt mechanism is to provide an organized way in
which portions of event interrupt routines may be executed at a lower priority level than the one
3124/97
92
CPU Organization
at which the service routine began. An example of this would be an event Interrupt Service
Routine that has been given a very high priority in order to respond quickly to some critical
external event. This ISR has a relatively small portion of code that must be executed
immediately, and a larger portion of follow-up or "clean-up" code which does not need to be
completed right away. Overall system performance may be improved if the lower priority
portion of the ISR is actually executed at a lower priority level, allowing other more important
interrupts to be serviced.
If the high priority ISR simply lowers its execution priority at the point where it enters the
follow-up code, by writing a lower value to the 1M bits in the PSW, a situation called "priority
inversion" could occur. Priority inversion describes a case where code at a lower priority is
executing while a higher priority routine is kept waiting. An example of how this could occur by
writing to the 1M bits follows, and is illustrated in Figure 4.15.
Suppose code is executing at level 0 and is interrupted by an event interrupt that runs at level 10.
This is again interrupted by a level 12 interrupt. The level 12 ISR completes a time-critical
portion of its code and wants to lower the priority of the remainder of its code (the non-time
critical portion) in order to allow more important interrupts to occur. So, it writes to the 1M bits,
setting the execution priority to 5. The ISR continues executing at level 5 until a level 8 event
interrupt occurs. The level 8 ISR runs to completion and returns to the level 5 ISR, which also
runs to completion. When the level 5 ISR returns, the previously interrupted level 10 ISR is reactivated and eventually competes.
It can be seen in this example that lower priority ISR code executed and completed while higher
priority code was kept waiting on the stack. This is priority inversion.
Level 10
interrupt
occurs
,
,
Level 12
interrupt
occurs
Priority
lowered
,
,
,
I
I
I
,
1210-
j~
Level 8
interrupt
occurs
,
,
,
,
,
I
.,
+
8Execution
Priority
50-
"
Return to
level 5
Return to
Jevel10
Return to
level 0
,
I
I
I
I
I
I
·
·,
·
,
.
+
+
h
,r_._--
Time
...
Figure 4.15 Example of priority inversion (see text)
In those cases where it is desirable to alter the priority level of part of an ISR, a software
interrupt may be used to accomplish this without risk of priority inversion. The ISR must first be
XA User Guide
93
3124/97
split into 2 pieces: the high priority portion, and the lower priority portion. The high priority
portion remains associated with the original interrupt vector. The lower priority portion is
associated with the interrupt vector for software interrupt 5. At the completion of the high
priority portion of the ISR, the code sets the request bit for software interrupt 5, then returns. the
remainder of the ISR, now actually the ISR for software interrupt 5, executes when it becomes
the highest priority pending interrupt.
The diagram in Figure 4.16 shows the same sequence of events as in the example of priority
inversion, except using software interrupt 5 as just described. Note that the code now executes in
the correct order (higher priority first).
Trap Interrupts
Trap Interrupts are generated by the TRAP instruction. TRAP 0 through TRAP 15 are defined
and may be used as required by applications. Trap Interrupts are intended to support applicationspecific requirements, as a convenient mechanism to enter globally used routines, and to allow
transitions between user mode and system mode. A trap interrupt will occur if and only if the
instruction is executed, so there is no need for a precedence scheme with respect to simultaneous
traps.
The effect of a TRAP is immediate, the corresponding TRAP service routine is entered upon
completion of the TRAP instruction.
See Chapter 6 for a detailed description of the TRAP instruction.
4.8.2 Interrupt Service Data Elements
There are two data elements associated with XA interrupts. The first is the stack frame created
when each interrupt is serviced. The second is the interrupt vector table located at the beginning
3124/97
94
CPU Organization
of code memory. Understanding the structure and contents of each is essential to the
understanding of how XA interrupts are processed.
Interrupt Stack Frame
A stack frame is generated, always on the System Stack, for each XA interrupt. With one
exception, the stack frame is stored for the duration of interrupt service and used to return to and
restore the CPU state of the interrupted code. (The exception is an Exception Interrupt triggered
by a Reset event. Since Reset re-initializes the stack pointers, no stack frame is preserved. See
section 4.4 for details.) The stack frame in the native 24-bit XA operating mode is illustrated in
Figure 4.17. Three words are stored on the stack in this case. The first word pushed is the loworder 16 bits of the current PC, i.e., the address of the next instruction to be executed. The next
word contains the high-order byte of the current PC. A zero byte is used as a pad. In sum, a
complete 24-bit address is stored in the stack frame. The third word contains a copy of the PSW
at the instant the interrupt was serviced.
When the XA is operating in Page 0 Mode (SCR bit PZ = 1) the stack frame is smaller because,
in this mode, only 16 address bits are used throughout the XA. The stack frame in Page 0 Mode
is illustrated in Figure 4.18. Obviously it is very important that stack frames of both sizes not be
mixed; this is one reason for the admonition in section 4.3 to set the System Configuration
Register once during XA initialization and leave it unchanged thereafter.
'-"'
'"""
'-"'~
~ SSP
I Before interrupt
~ SSP
I
Low-order 16-bits of PC
OxOO
6-bytes {
,
P$W
PC (hi-byte)
After
....... C'
,--,,"=,
Figure 4.17 Interrupt stack frame (non- page zero mode)
Before interrupt
4-bytes
16-bits of PC
{
t------p-S"--.w-----~
After
Figure 4.18 Interrupt stack frame (page 0 mode)
XA User Guide
95
3/24/97
Interrupt Vector Table
The XA uses the first 284 bytes of code memory (addresses 0 through lIB hex) for an interrupt
vector table. The table may contain up to 71 double-word entries, each corresponding to a
particular interrupt event.
The double-word entries each consist of a 16 bit address of an interrupt service routine address .
and a 16 bit PSW replacement value. Because vector addresses are 16-bit, the first instruction of
service routines must be located in the first 64K bytes of XA memory. The first instruction of all
service routines must be word-aligned. Key elements of the replacement PSW value are the
choice of System or User mode for the service routine, the Register Bank selection, and an
Execution Priority setting. For more details on PSW elements, see section 4.2.2.
The first 16 vectors, starting at code memory address 0 are reserved for Exception Interrupt
vectors. The second 16 vectors are reserved for Trap Interrupts. The following 32 vectors in the
table are reserved for Event Interrupts. The final 7 vectors are used for Software Interrupts.
Figure 4.19 illustrates the XA vector table and the structure of each component vector. Of the
vectors assigned to Exceptions, 6 are assigned to events specific to the XA CPU and 10 are
reserved. All 16 Trap Interrupts may be used freely. Assignments of Event Interrupt vectors are
derivative-independent and vary with the peripheral device complement and pinout of each XA
derivative.
Unused interrupt vectors should normally be set to point to a dummy service routine. The
dummy service routine should clear the interrupt flag (if it is not self-clearing) and execute an
RETI to return to the user program. This is especially true of the exception interrupts and NMI,
since these could conceivably occur in a system where the designer did not expect them. If these
vectors are routed to a dummy service routine, the system can essentially ignore the unexpected
exception or interrupt condition and continue operation.
Note that when using some hardware development tools, it may be preferable not to initialize
unused vector locations, allowing the development tool to flag unexpected occurrences of these
conditions.
4.9 Trace Mode Debugging
The XA has an optional Trace Mode in which a special trace exception is generated at the
conclusion of each instruction. Trace Mode supports user-supplied debugger/monitor programs
which can single-step through any code, even code in ROM.
4.9.1 Trace Mode Operation
Trace Mode is initiated by asserting PSW. TM in the context of the program to be traced.
U sing Trace Mode requires a detailed understanding of the XA instruction execution sequence
because when and if a trace exception occurs depends on events within the execution sequence
of a single instruction. Figure 4.20 illustrates the XA instruction sequence in overview.
3124/97
96
CPU Organization
0100
o tware
Interrupt
Vectors
111
32
Event
Interrupt
Vectors
...
16 bits
Service Routine Address
"
80h
Replacen)ent PSW
16
Trap
Interrupt
Vectors
Increasing
---Iaddresses
L - -_ _ _ _ _ _ _ _
40h
16
Exception
Vectors
,
o
Code Memory
Figure 4.19 Interrupt vectors
Instruction n-1
I
••• I11-'I-._----------I~~-I
..
Instruction n
J
Instruction n+ 1
J
.::::II---------t:_..~
I~t_-------~~I
•••
Figure 4.20 XA Instruction Sequence Overview
A detailed model of this sequence is shown in Figure 4.21: First, at die beginning of the
instruction cycle, the state of the TM flag is latched. Next, the instruction is checked to see if it
is valid; undefined instructions or disallowed operations (like a write through ES in User Mode)
are simply not executed, and there is no chance for a trace to occur. The sequence then checks
for instructions illegal in the current context (currently only an IRET while in User Mode is
detected here) and services an exception if one is found. If, and only if, none of these special
conditions occur, the instruction is actually executed. Just after execution, if the Trace Mode bit
had been latched TRUE at the beginning of the instruction cycle, the Trace is serviced. Finally,
the cycle checks for a pending interrupt and performs interrupt service if one is found
Note that an external reset may occur at any point during the cycle illustrated in Figure 4.2L
This will abort processing when it occurs.
XA User Guide
97
3/24/97
~I
Instruction n
I ..
NI
latch-----. instruction
~,.
-----. Instruction _ _ _...
~ ~~~~~~~on _ _ _.~.
~[T)~
,'_d?
ereption
J
Check latch' -----.
trace
...
Interrupt
}~
inlrupt
Figure 4.21 Instruction Execution Clock Detail
One consequence of this sequence is that the instruction that sets TM = 1 cannot generate a
Trace, since TM is not latched when the instruction is actually executed. Another consequence is
that an instruction that generates an exception will never be traced. Finally if an event interrupt
occurs during an instruction clock when the instruction being executed is a TRAP, the TRAP
will be executed, then the trace service, and finally the interrupt will be serviced.
4.9.2 Trace Mode Initialization and Deactivation
Since PSW.TM is in the protected portion of the PSW (i.e., in PSWH), only code executing in
System Mode can initiate or turn off Trace Mode. In practice, this may be done by invoking a
trap whose replacement PSW clears this bit, or by executing a RETI instruction with a synthetic
ExceptionlInterrupt stack frame explicitly pushed on the top of the System Stack, as follows:
)
Lo-order 16-bits of PC
OxOO
...
,
PC (hi-byte)
address of next instruction
in traced routine
PSW
\
TM set in saved PSW image
Tracing will continue until the PSW.bit TM is cleared. This may be done by the trace service
routine by examining the stack frame at the top of the system stack and clearing the TM bit prior
to returning to the currently traced process. A similar method may be used to initiate trace mode.
Note that stack frames generated by exception interrupts are always placed on the System stack.
It is probably a good idea for the trace service routine to verify that the item in the stack frame is
consistent with the traced process before modifying the TM bit.
3124/97
98
CPU Organization
5 Real-time Multi-tasking
Multi-tasking as the name suggests, allows tasks, which are pieces of code that do specific
duties, to run in an apparently concurrent manner. This means that tasks will seem to all run at
the same time, doing many speCific jobs simultaneously.
High end applications (like automotive) require instantaneous responses when dealing with high
speed events, such as engine management, traction control and adaptive braking system (ABS)
and hence there is a trend towards multi-tasking in a wide variety of high performance
embedded control applications.
Real-time application programs are often comprised of multiple tasks. Each task manages a
specific facet of application program. Building a real-time application from individual tasks
allows subdividing a complicated application program into independent and manageable
modules. Each task shares the processor with other tasks in the application program according to
an assigned priority level.
In real-time multi-tasking, the main concern is the system overhead. Switching tasks involve
moving lots of data of the terminated and initiated tasks, and extensive book-keeping to be able
to restore dormant tasks when required. Thus it is extremely crucial to minimize the system
overhead as much as possible. In some cases, some of the tasks may be associated with real-time
response, which further complicates the requirements from the system.
The following section analyzes the requirements and the XA suitability to these applications.
5.1 Assist For Multi-tasking in XA
The XA has numerous provisions to support multi-tasking systems. The architecture provides
direct support for the concept of a multi-tasking as by providing two (System/User) privilege
levels for isolation between tasks. High performance, interrupt driven, multi-tasking applications
systems requiring protection are feasible with the XA.
The XA architecture offers the following features which will appeal to multi-tasking
implementations.
5.1.1 Dual stack approach
The architecture defines a System Stack Pointer (SSP) as well as an User Stack Pointer (USP).
The dual stack feature supports fast task switching, and ease the creation of a multi-tasking
monitor kernel. The separation of the two offers a reduction is storing and retrieving stack
pointers or using a single stack, when switching to the kernel and back to an application. It also
serves to speed up interrupt processing in large systems with external data memory. User stacks
can be allocated in the slower external memory, while system memory is in internal SRAM,
allowing for fast interrupt latency in this environment. The dual stack approach also adds the
benefit of a better potential to recover from an ill-behaved task, since the system stack is still
intact when an error is sensed.
3124/97
99
Multi-tasking
5.1.2 Register Banks
The XA also supports 4 banks of 8 byte/4 word registers, in addition to 12 shared registers. In
some applications, the register banks can be designated statically to tasks, cutting significantly
on the overhead for saving and restoring registers on context switching.
5.1.3 Interrupt Latency and Overhead
Interrupt latency is extremely critical in a multitasking environment. For a real-time
multitasking environment, a fast interrupt response is crucial for switching between tasks. The
XA is designed to provide such fast task switching environment through improved interrupt
latency time.
The interrupt service mechanism saves the PC (1 or 2 words, depending on the PageO mode flag
PZ) and the PSW (1 word) on the stack. The interrupt stack normally resides in the internal data
memory, and interrupt call including saving of three words takes 23 clocks. Prefetching the
service routine takes 3 additional clocks.
When interrupt or an exception/trap occurs, the current instruction in progress always gets
executed prior servicing the interrupt. This present an overhead, while increasing the effective
interrupt latency, since the event that interrupted the machine cannot be dealt with before the
book-keeping is completed. In XA, the longest uninterrupted instruction is the signed 32x16
Divide, which takes 24 clocks.
This puts the worst case interrupt latency at [24 + 23 + 3] =50 clocks (3.125 microseconds at
16.0 MHz, 2.5 microseconds at 20.0 MHz. and 1.67 microseconds at 30.0 MHz). Saving the
state of the lower registers can be done by simply switching the register bank.
In the general case, up to 16 registers would be saved on the stack, which takes 32 clocks. The
totallatency+overhead at start of an interrupt is a maximum of 68 clocks (4.25 microsecond at
16 MHz, 3.4 at 20 MHz and 2.27 at 30 MHz). This allows for extremely fast context switching
for multitasking environments.
5.1.4 Protection
The issue is mentioned here simply to clarify what is and what is not supported by the XA
architecture. Dual stack pointer and minor privileges to what looks like a supervisor mode do
not mean full protection. It is assumed that code in a micro controller does not require guarding
from intentional system break-in by a lower privilege task. A table of the protected features in
XA is given below. Note that features marked "disallowed" are simply not completed if
attempted in the User mode. There are no exceptions or flags associated with these occurrences.
XA User Guide
100
3124/97
Protected Features in the XA
Table 5.1: Segment and Stack Register Protection
Mode
Write
to OS
Write
through
OS
Write
to ES
Write
through
ES
Read
through
OS
Read
through
ES
Read
through
SSP
Write
to SSP
Write
to
SSEL
bit 7
System
Allowed
Allowed
Allowed
Allowed
Allowed
Allowed
Allowed
Allowed
Allowed
User
Disallowed
Allowed
Allowed
Selectable 1
Allowed
Allowed
Not
possible
Not
possible
Disallowed
Note 1: The MSB of SSEL (bit 7) selects whether write through ES is allowed in User mode.
However, this bit is accessible only in System mode.
Table 5.2: PSW bit protection
Mode
Write to SM
bit
Write to RSO: 1
bits
Write to TM bit
Write to IMO:3
bits
System
Allowed
Allowed
Allowed
Allowed
User
Disallowed
Allowed
Disallowed
Disallowed
In addition to the above, the System Stack is protected from corruption by User Mode execution
of the RETI instruction. If User Mode code attempts to execute that instruction, it causes an
exception interrupt. If it is necessary to run TRAP routines, for instance, in User Mode, the User
RETI exception handler can perform the return for the User Mode code. To accomplish this, the
User RETI exception handler may pop the topmost return address from the stack (2 or 3 words,
depending on whether the XA is in Page Zero mode) and then execute the RET!.
Protection Via Data Memory Segmentation
In U serfApplication mode, each task is protected from all others via the separation of data
spaces (unless explicit sharing is planned in advance). If the address spaces of two tasks include
no shared data, one task cannot affect the data of another, but it can read any data in the full
address space. Code sharing is always safe since code memory may never be written!. An
application mode program is prohibited from writing the segment registers, thus confining the
writable area per an ill-behaved task to its dedicated segment. Most applications, which are not
expected to utilize multi-tasking or use external memory, do not require any protection. They
will remain after reset in system mode, and could access all system resources.
At any given instant, two segments of memory are immediately accessible to an executing XA
program. These are the data segment DS, w~ere the stack and local variables reside, and the
extra segment ES, which may be used to read remote data structures. Restricting the
addressability of task modules helps gain complete control of system resources for efficient,
reliable operation in a multi-tasking environment.
1. True for non-writable code memory only like EPROM, ROM, OTP. This might change for FLASH parts.
3124/97
101
Multi-tasking
Protection Vja Dual Stack Pointers
The XA provides a two-level user/supervisor protection mechanism. These are the user or
application mode and the system or supervisor mode. In a multitasking environment, tasks in a
supervisor level are protected from tasks in the application level.
The XA has two stack pointers (in the register file) called the System Stack Pointer (SSP) and
the User Stack Pointer (USP). In multitasking systems one stack pointer is used for the
supervisory system and another for the currently active task. This helps in the protection
mechanism by providing isolation of system software from user applications. The two stack
pointers also help to improve the performance of interrupts. If the stack for a particular
application would exceed the space available in the on-chip RAM, or on-chip RAM is needed
for other time critical purposes (since on-chip RAM is accessed more quickly than off-chip
memory), the main stack can be put off-chip and the interrupt stack (using the System SP) may
be put in on-chip RAM.
These features of the XA place it well above the competition in suitability to multi-tasking
applications.
XA User Guide
102
3124/97
6 Instruction Set and Addressing
This section contains information about the addressing modes and data types used in the XA.
The intent is to help the user become familiar with the programming capabilities of the
processor.
6.1 Addressing Modes
Addressing modes are ways to form effective addresses of the operands. The XA provides seven
basic powerful addressing modes for access on word, byte, and bit data, or to specify the target
address of a branch instruction. These basic addressing modes are uniformly available on a large
number of instructions. Table 6.1 includes the basic addressing modes in the XA. An instruction
could use a combination of these basic addressing modes, e.g., ADD RO, #020 is a combination
of Register and Immediate addressing modes.
All modes (non-register) generate ADDR[15:0]. This address is combined with DSIES[23: 16]
for data and PCJCS [23: 16] for code to form a 24-bit address 1.
An XA instruction can have zero, one, two, or three operands, whose locations are defined by
the addressing mode. A destination operand is one that is replaced by a result, or is in some way
affected by the instruction. The destination operand is listed first in an addressing mode
expression. A source operand is a value that is moved or manipulated by the instruction, but is
not altered. The source is listed second in an addressing mode expression.
Table 6.1
MODE
MNEMONIC
Basic Addressing Modes
OPERANDS
Register
R
operand(s) in register (in Register file)
Indirect
[R]
BytelWord whose 16-bit address is in R
Indirect-Offset
[R+off 8/16]
Byte or Word data whose address (16-bit) contained in R, is
offset by 8/16-bit signed integer "off 8/16'
Direct
mem_addr
BytelWord at given memory "mem_addr'
SFR 1
sfcaddr
BytelWord at "sfr_addr' address
Immediate
#data 4/5
#data 8/16
Immediate 4/5 and 8/16-bit integer constants "data8/16"
Bit
bit
1O-bit address field specifying Register File, Data Memory or
SFR bit address space
1. This is a special case of direct addressing mode but separately identified, as SFR space is separate from data memory.
1. Exception is Page 0 mode, where all addresses are 16-bit.
3/24/97
103
Addressing Modes and Data Types
6.2 Description of the Modes
6.2.1 Register Addressing
Instructions using this addressing mode contain a field that addresses the Register File that
contains an operand. The Register file is byte 2, word, double-word or bit addressable.
Example:
Before: R4 contains 005Ah
R6 contains A5A5h
ADD R6, R4
After:
R4 contains 005Ah
R6 contains A5FFh
REGISTER· REGISTER
DESTINATION
A5FFh (result)
R6
A5A5h (original contents)
SOURCE
005Ah
ADD
R6, R4
R4
REGISTER FILE
Figure 6.1
2. The unimplemented 8 word registers are not Byte addressable
XA User Guide
104
3124/97
6.2.2 Indirect Addressing
Instructions using this addressing mode contain a 16-bit address field. This field is contained in
lout of 8 pointer registers in the Register File (that contain the 16-bit address of the operand in
any 64K data segment). For data, the segment is identified by the 8-bit contents of DS or the ES
and for code by the 8-bit contents of PC23-16 or CS as selected by the appropriate bit (SSEL.bit
n 0 selects DS and 1 selects ES for data and SSEL.bitn 0 selects PC and 1 selects CS for
code) in the segment select register SSEL corresponding to the indirect register number. The
address of the pointer word for word operands should be even
=
Example:
=
ADD R6, [R4J
SSEL.4 = 1
i.e., the operand is in
segment determined
by the contents of ES
So, if ES =08, the
operand is in
segment 8 of data memory.
Before:
R6 contains 1005h
R4 contains AOOOh
Word at AOOOh contains A5A5h
After:
R4 contains AOOOh
R6 contains B5AAh
Word at AOOOh in segment 8
of data memory contains A5A5h
REGISTER - INDIRECT
B5AAh (result)
l005h
R6
Seg8
POINTER
I--_A_5A_5h_..:---A-O-OO-h--------l AOOOh
OR
~
_ _ _--'
DATA MEMORY
ADD
R4
REGISTER FILE
R6, [R4]
Figure 6.2
3/24/97
105
Addressing Modes and Data Types
6.2.3 Indirect-Offset Addressing
This addressing mode is just like the Register-Indirect addressing mode above except that an
additional displacement value is added to obtain the final effective address. Instructions using
this addressing mode contain a 16-bit address field and an 8 or 16-bit signed displacement field.
This field addresses lout of 8 pointer registers in the Register File that contains the 16-bit
address of the operand in any 64K data segment. The contents of the pointer register are added
to the signed displacement to obtain the effective address 3 (which must be even) of the operand.
For data the segment is identified by the 8-bit contents of DS or the ES and for code, by the 8-bit
contents of PC23-16 or CS as selected by the appropriate bit (SSEL.bit n =0 selects DS and 1
selects ES for data and SSEL.bitn =0 selects PC and 1 selects CS for code) in the segment
select register SSEL.
Example:
ADD R5, [R3 +30h]
SSEL.3 = 1
i.e., the operand is in
segment determined
by the contents of ES
So, if ES = 04, the
operand is in segment
4 of data memory.
Before:
R3 contains COOOh
R5 contains 0065h
Word at C030h =A540h
After:
R3 contains COOOh
R5 contains A5A5h
Word at C030h =A540h
REGISTER - INDIRECT WITH OFFSET
DESTINATION
0065h
A5A5h
R5
POINTER
COOOh
R3
r---
! Seg4
FFFFh
A540h
C030h
Oh
DATA MEMORY
ADD
REGISTER FILE
R5, [R3+30]
Figure 6.3
3. In case of an odd address, the XA forces the operand fetch from the next lower even boundary
(address.bitO =0)
XA User Guide
106
3/24/97
6.2.4 Direct Addressing
Instructions using this addressing mode contain an 10-bit address field, which contains the
actual address of the operand in any 64K data memory segment or sfr space.The direct address
data memory space is always the bottom lK byte (0:3FFh) of any segment. The associated data
segment is always identified by the 8-bit contents of DS.
Example:
SUB RO, 200h
If DS =02, the
operand is in segment
2 of data memory.
Before:
RO contains A5FFh
200H contains 5555h
After:
RO contains 50AAh
200h contains 5555h
REGISTER - DIRECT
-,--.
I Seg2 I
FFFFh
--
~ DS = 2h
I
SOURCE
5555h
200h
Oh
DATA MEMORY
DES TINATION
A5FFh
L.--_ _ _ _ _ _ _ _ _ _ _~
50AAh (result)
RO
REGISTER FILE
SUB
RO,200h
Figure 6.4
3/24/97
107
Addressing Modes and Data Types
6.2.5 SFR Addressing
This is identical to the direct addressing mode described before, except it addresses the lK SFR
space. Although encoded into the same instruction field as the direct addressing described
above, this is actually a separate space. Instructions using this addressing mode contain an lO-bit
SFR address. The 1K SFR space is always directly addressed (400:7FFh) and is mapped directly
above the lK direct-addressed RAM space.
MOV ROH, 406h4
Example:
Before:
ROH contains 05h
406h contains A5h
After:
ROH contains A5h
406h contains A5h
6.2.6 Immediate Addressing
In immediate addressing, the actual operand is given explicitly in the instruction.The immediate
operand is either an 4/5, 8 or 16-bit integer which constitutes the source operand. 4-bit short
immediate operands used with instructions ADDS and MOVS are sign extended.
ADD ROL,#OB9h
Example:
Before:
After:
REGISTER - IMMEDIATE
RO contains 13h
ROL contains CCh
DESTINATION
ROL
ADD ROL, #B9h
IMMEDIATE DATA
Figure 6.5
4. The syntax always refers to the SFR address starting from the base address of 400H.
XA User Guide
108
3/24/97
6.2.7 Bit Addressing
Instructions using the bit addressing mode contain a 10-bit field containing the address of the bit
operand. The XA supports three bit address spaces, which are encoded into the same format. The
spaces are: 256 bits in the register file (the entire active register file); 256 bits in the data memory
(byte addresses 20 through 3F hex on the current data segment); and 512 bits in the SFR space (byte
addresses 400 through 43F hex).
Bit addresses 0 to FF hex map to the register file, bit addresses 100 to IFF hex map to data memory,
and bit addresses 200 to 3FF map to the SFR space.
A separate bit-addressable space (20-3F hex) in the direct-address data memory, exists for each
segment. The current working segment for the direct-address space being always identified by the
DS register.
The encoding of the 10-bit field for bit addresses is as follows:
This bit determines
whether the bit address is
an SFR or not (1 =SFR).
5 or 6 bit field (6 bits
for an SFR)
identifies the byte
that the addressed bit
resides in.
...JI\.'--_ _""""
r -_ _
If not an SFR bit address, this bit
determines whether the bit
address is in the Register File or
the data memory (0 =Register
file, 1 =data memory).
3-bit field identifies 1
of 8 bits in a byte.
Bit Address Encoding
Examples:
For a given data segment,
1 001100010 =Bit 2 of an SFR at address OCh (i.e., 40Ch in the map)
0001100010 =Bit 2 of Register file at address OCh, i.e., R6L
o 101100010 =Bit 2 of Data memory address OCh
Figure 6.6
3/24/97
109
Addressing Modes and Data Types
6.3 Relative Branching and Jumps
Program memory addresses as referenced by Jumps, Calls, and Branch instructions must be word
aligned in XA. For instance, a branch instruction may occur at any code address, but it may only
branch to an even address. This forced alignment to even address provides three benefits:
•
•
Branch ranges are doubled without providing an extra bit in the instruction and
Faster execution as XA always fetches first two byte of an instruction simultaneously.
Allows translated 8051 code to have branches extended over intervening code that will tend to
grow when translated and generally increase the chances of a branch target being in that
range.
The ref8 displacement is a 9-bit two's complement integer which is encoded as 8-bits that
represents the relative distance in words from the current PC to the destination PC. Similarly, the
re116 displacement is a 17 -bit twos complement integer which is encoded as 16-bits. The value of
the PC used in the target address calculation is the address of the instruction following the Branch,
Jump or Call instruction.
The 8-bit signed displacement is between -128 to + 127. The branch range for rel8 is (sample
calculation shown below) is really +254 bytes to -256 bytes for instructions located at an even
address, and +253 to -257 for the same located at an odd address, with the limitation that the target
address is word aligned in code memory.
The 16-bit signed displacement is -32,768 to +32,767. The branch range is therefore +65,534 bytes
to -65,536 bytes for instructions located at an even address, and +65,533 to -65,537 for the same
located at an odd address, with the limitation that the target address is word aligned in code
memory.
Sample calculation for rel8 range:
Assuming word aligned branch target, forward range as measured from current PC is:
Branch Target Address - Current PC
Now, maximum positive signed 8-bit displacement
=+127;
So, reI8« 1 is +254
If Current PC = ODD, then
Range = 254 - 1 = +253 as PC is forced to an even location, else
If current PC =EVEN, then
Range = +254
Similarly, reverse range as measured from current PC is:
Branch Target Address - Current PC
Now, maximum positive signed 8-bit displacement
= -128; So, rel8 «
1 is -256
If Current PC = ODD, then
Range = -257
Else if current PC = EVEN, then
Range =-256
XA User Guide
110
3/24/97
6.4 Data Types in XA
The XA uses the following types of data:
Bits
4/5-bit signed integers
8-bit (byte) signed and unsigned integers
8-bit, two digit BCD numbers
16-bit (word) signed and unsigned integers
IO-bit address for bit-addressing in data memory and SFR space
24-bit effective address comprising of 16-bit address and 8-bit segment select. See addressing
modes for more information.
A byte consists of 8-bits. A word is a 16-bit value consisting of two contiguous bytes. A double
word consists of two 16-bit words packed in two contiguous words in memory.
Negative integers are represented in twos complement form. 4-bit signed integers (sign extended
to byte/word) are used as immediate operands in MOVS and ADDS instructions.
Binary coded decimal numbers are packed, 2 digits per byte. BCD operations use byte operands.
6.5 Instruction Set Overview
The XA uses a powerful and efficient instruction set, offering several different types of
addressing modes. A versatile set of "branch" and "jump" instructions are available for
controlling program flow based on register or memory contents. Special emphasis has been
placed on the instruction support of structured high-level languages and real-time multi-tasking
operating systems.
This section discusses the set of instructions provided in the XA microcontroller, and also shows
how to use them. It includes descriptions of the instruction format and the operands used by the
instructions. After a summary of the instructions by category, the section provides a detailed
description of the operation of each instruction, in alphabetical order.
Five summary tables are provided that describes the available instructions. The first table is a
summary of instructions available in the XA along with their common usage. The second and
third table are tables of addressing modes and operands, and the instruction type they pertain to.
A fourth table that lists the summary of status flags update by different instructions. A fifth table
lists the available instructions with their different addressing modes and briefly describes what
each instruction does along with the number of bytes, and number of clocks required for each
instruction.
The formats have been chosen to optimize the length and execution speed of those instructions
that would be used the most often in critical code. Only the first and sometimes the second byte
of an instruction are used for operation encoding. The length of the instruction and the first
execution cycle activity are determined from the first byte. Instruction bytes following the first
two bytes (if any) are always immediate operands, such as addresses, relative displacements,
offsets, bit addresses, and immediate data.
3/24/97
111
Addressing Modes and Data Types
Glossary of mnemonics, notations used
General:
offset8
offset 16
direct
#data4
#data5
#data8
#data16
bit
reI 8
rel16
addr16
addr24
SP
USP
SSP
C
AC
V
N
Z
DS
ES
direct
An 8-bit signed offset (immediate data in the instruction) that is added to a register to
produce an absolute address.
A 16-bit signed offset (immediate data in the instruction) that is added to a register to
produce an absolute address.
An II-bit immediate address contained in the instruction.
4 bits of immediate data contained in the instruction. (range +7 to -8 for
signed immediate data and 0-15 for shifts)
5 bits of immediate data contained in the instruction. (0-31 for shifts)
8 bits of immediate data contained in the instruction. (+ 127 to -128)
16 bits of immediate data contained in the instruction. (+32,767 to -32,768)
The 10-bit address of an addressable bit.
An 8-bit relative displacement for branches. (+254 to -256)
An 16-bit relative displacement for branches.( +65,534 to -65,536)
A 16-bit absolute branch address within a 64K code page.
A 24-bit absolute branch address, able to access the entire XA address space.
The current Stack Pointer (User or System) depending on the operation mode.
The User Stack Pointer.
The System Stack Pointer
Carry flag from the PSW.
Auxiliary Carry flag from the PSW.
Overflow flag from the PSW.
Negative flag from the PSW.
Zero flag from the PSW.
Data segment register. Holds the upper byte of the 24-bit data address space of the XA.
Used mainly for local data segments.
Extra segment register. Holds the upper byte of the 24-bit data address space of the XA.
Used mainly for addressing remote data structures.
Uses the current DS for data memory for the upper byte of the 24-bit address or none
(uses only the low 16-bit address) for accessing the special functions register (SFR)
space. The interpretation should be as below:
if (data range)
then (direct = (DS:direct)
if (sfr range)
then (direct) =(sfr)
Operation encoding fields:
SZ
Data Size. This field encodes whether the operation is byte, word or double-word.
IND
This field flags indirect operation in some instructions.
HIL
This field selects whether PUSH and POP Rlist use the upper or lower half of the
available registers.
dddd
Destination register field, specifies one of 16 registers in the register file.
ddd
Destination register field for indirect references, specifies one of 8 pointer registers in
the register file.
ssss
Source register field, specifies one of 16 registers in the register file.
sss
Source register field for indirect references, specifies one of 8 pointer registers in the
register file.
XA User Guide
112
3124/97
Mnemonic text:
Rs
Source register.
Rd
Destination register.
[ ]
In the instruction mnemonic, indicates an indirect reference (e.g.: [R4] refers to the
memory address pointed to by the contents of register 4).
U sed to indicate an automatic increment of the pointer register in some indirect
[R+]
addressing modes.
[WS:R]
Indicates that the pointer register (R) is extended to a 24-bit pointer by the selected
segment register (either DS or ES for all instructions except MOVe, which uses either
PC 23 - 16 or CS).
Rlist
A bitmap that represents each register in the register file during a PUSH or POP
operation. These registers are RO-R7 for word or ROL-R7H for byte.
Pseudocode:
((SP))
Used to indicate "contents of" in the instruction operation pseudocode (e.g.: (R4) refers
to the contents of register 4).
Pseudocode assignment operator. Occasionally used as <--> to indicate assignment in
both directions (interchange of data).
Data memory contents at the location pointed to by the current stack pointer. In system
mode, the current SP is the SSP, and the segment used is always segment O. In user
mode, the current SP is the USP, and the segment used is the Data Segment (DS). This
segment apply to the uses of the SP, not just PUSH and POP. In a few cases, "((SSP))"
or "((USP))" indicate that a specific SP is used, regardless of the operating mode.
Rn.x
Rn.x-y
Indicates bit x of register n.
Indicates a range of bits from bit x to bit y of register n.
( )
<---
Note: all indirect addressing is accomplished using the contents of the data segment register as the
upper 8 address bits unless otherwise specified. Example: [ES:Rs] indicates that the extra segment
register generates the upper 8 bits of the address in this case.
Execution time:
PZ
nt
t
- In Page 0
- Not Taken
- Taken
Syntax For Operand size:
•w =For word operands
.h =byte operands
.d =double-word operands
Default operand size is dependant on the operands used e.g MOV RO,Rl is always word-size
whereas MOV ROL, ROH is always byte etc. For INDIRECT_IMMEDIATE,
DIRECT_IMMEDIATE, DIRECT_DIRECT, etc., user must specify operand size.
3/24/97
113
Addressing Modes and Data Types
Ox =prefix for Hex values
[] =For indirect addressing
[[]] =For Double-indirect addressing
dest = destination
src = source
Table 6.2
Instruction Set in XA
Mnemonic
Usage
MOV, MOVC, MOVS, MOVX, LEA, XCH, PUSH, POP,
PUSHU,POPU
Data Movement
ADD,ADDS,ADDC,SUB,SUBB
Add and Subtract
MULU.b, MULU.w, MUL.w
DIVU.b, DIVU.w. DIVU.d, DIV.w, DIV.d
Multiply and Divide
RR,RRC,RL,RLC,LSR,ASR,ASL,NORM
Shifts and Rotates
CLR,SETB,MOV,ANL,ORL
Bit Operations
JB, JBC, JNB, JNZ, JZ, DJNZ, CJNE,
Conditional Jumps/Calls
BOV,BNV,BPL,BCC,BCS,BEQ,BNE,BG,BGE,
BGT,BL,BLE,BLT,BMI
Conditional Branches
AND. OR, XOR
Boolean Functions
JMP, FJMP, CALL, FCALL, BR
Unconditional Jumps/Calls/Branches
RET, RETI
Return from subroutines, interrupts
SEXT, NEG, CPL, DA
Sign Extend, Negate, Complement, Decimal Adjust
BKPT,TRAP#,RESET
Exceptions
NOP
No Operation
XA User Guide
114
3/24/97
Table 6.3 shows a summary of the basic addressing modes available for data transfer and
calculation related instructions.
Table 6.3
Modes/
Operands
R,R
R. [R]
[RJ, R
R, [R+offB]
[R+offB], R
R, [R+off16]
[R+off16], R
MOVX
.
.
MOV
CMP
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
[R+off16],
#data
·
·
·
· ·
· ·
·
·
· ·
· ·
· ·
· ·
· ·.
dir, #data
•
dir, dir
·
R, [R+]
[R+], R
[R+]. [R+J
dir, R
R, dir
dir, [R]
[RJ, dir
R, #data
[R], #data
[R+], #data
[R+offBJ,
#data
R,USP
Instruction Addressing Modes
ADD
AD DC
·
·
·
·
·
·
·
·
·
·
·
SUB
SUBB
·
·
·
·
·
·
·
·
·
·
·
AND
OR
XOR
ADDS
MOVS
·
·
·
MUL
DIV
Shift
.
.
XCH
·
·
bytes
2
2
2
·
·
·
·
·
·
·
·
3
3
4
4
2
2
2
3
·
3
3
·
·
·
·
·
·
·
· ·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
.
.
3
2*/3/4
2*/3/4
2*/3/4
3*/4/5
4*/5/6
3*/4/5
4
·
2
Notes:
- Shift class includes rotates, shifts, and normalize.
- USP =User stack pointer.
* : ADDS and MOVS uses a short immediate field (4 bits).
** instructions with no operands include: BKPT, NOP, RESET, RET, RETI.
3124/97
115
Addressing Modes and Data Types
Modesl
Operands
R, [R+]
[R+], R
A,
[A+DPTR]
A, [A+PC]
direct
Rlist
R
addr24
[R]
[A+DPTR]
Move
PUSH
POP
DA,SEXT
CPL, NEG
JUMP
CALL
CJNE
BIT
OPS
MISC
·
·
·
·
bytes
2
2
2
.
.
2
3
2
.
2
·
·
JMP
R, rei
4
2
2
.
3
.
direct, rei
4
·
R, direct, rei
4
·
·
R, #data, rei
[RJ, #data,
rei
bit
bit, C; C, bit
C,/bit
rei
DJNZ
·
4/5
4/5
·
·
·
3
3
3
Condo
Branch
2
bit, rei
Condo
Branch
4
#data4
TRAP
2
R,R+off8
LEA
3
r, R+off16
LEA
4
.
**
1/2
Notes:
- Shift class includes rotates, shifts, and normalize.
- USP =User stack pointer.
* : ADDS and MOVS uses a short immediate field (4 bits).
** instructions with no operands include: BKPT, Nap, RESET, RET, RET!.
XA User Guide
116
3124/97
Table 6.4 summarizes the status flag updates for the various XA instruction types.
Table 6.4
Status Flag Updates
Flags Updated
Instruction Type
AC
C
ADD, ADDC, CMP, SUB, SUBB
X
X
Z
N
V
X
X
X
X
X
X
X
X
X
-
-
X
X
X
X
X
X
AND, OR. XOR
-
ASR, LSR
*
-
branches, all bit operations, NOP
-
-
Calls, Jumps, and Returns
-
CJNE
X
CPL
-
DA
*
-
-
DIV, MUL
*
-
*
X
X
DJNZ
X
X
-
-
X
X
X
X
X
NORM
-
X
-
-
X
PUSH, POP
-
-
NEG
-
-
-
RESET
*
*
*
*
*
RL, RR
-
-
-
X
X
RLC,RRC
*
-
-
X
X
SEXT
-
-
-
-
-
-
ASL
*
-
-
XCH
-
X
X
X
ADDS, MOVS
LEA
MOV, MOVC, MOVX
TRAP,BKPT
-
Notes:
-: flag not updated.
X: flag updated according to the standard definition.
*: flag update is non-standard, refer to the individual instruction description.
Note: Explicit writes to PSW flags takes precedence over flag updates.
3124/97
117
Addressing Modes and Data Types
Instruction Set Summary
Table 6.5 lists the entire XA instruction set by instruction type. This can be used as a quick
reference to find specific instructions that may be looked up in the detailed alphabetical description
section.
Table 6.5
Mnemonic
Description
Bytes
Clocks
Arithmetic Operations
ADD
Rd, Rs
Add registers direct
2
3
ADD
Rd, [Rs]
Add register-indirect to register
2
4
ADD
[Rd], Rs
Add register to register-indirect
2
4
ADD
Rd, [Rs+offset8]
Add register-indirect with 8-bit offset to
register
3
6
ADD
[Rd+offset8], Rs
Add register to register-indirect with 8-bit
offset
3
6
ADD
Rd, [Rs+offset16]
Add register-indirect with f6-bit offset to
register
4
6
ADD
[Rd+offset16], Rs
Add register to register-indirect with 16-bit
offset
4
6
ADD
Rd, [Rs+]
Add register-indirect with auto increment to
register
2
5
ADD
[Rd+], Rs
Add register-indirect with auto increment to
register
2
5
ADD
direct, Rs
Add register to memory
3
4
ADD
Rd, direct
Add memory to register
3
4
ADD
Rd, #data8
Add 8-bit immediate data to register
3
3
ADD
Rd, #data16
Add 16-bit immediate data to register
4
3
ADD
[Rd], #data8
Add 8-bit immediate data to register-indirect
3
4
ADD
[Rd], #data16
Add 16-bit immediate data to register-indirect
4
4
ADD
[Rd+], #data8
Add 8-bit immediate data to register-indirect
with auto-increment
3
5
ADD
[Rd+], #data16
Add 16-bit immediate data to registerindirect with auto-increment
4
5
ADD
[Rd+offset8], #data8
Add 8-bit immediate data to register-indirect
with 8-bit offset
4
6
ADD
[Rd+offset8], #data16
Add 16-bit immediate data to registerindirect with 8-bit offset
5
6
XA User Guide
118
3/24/97
Table 6.5
Description
Mnemonic
Bytes
Clocks
ADD
[Rd+offset16], #data8
Add 8-bit immediate data to register-indirect
with 16-bit offset
5
6
ADD
[Rd+offset16], #data 16
Add 16-bit immediate data to registerindirect with 16-bit offset
6
6
ADD
direct, #data8
Add 8-bit immediate data to memory
4
4
ADD
direct, #data16
Add 16-bit immediate data to memory
5
4
AD DC
Rd, Rs
Add registers direct with carry
2
3
ADDC
Rd, [Rs]
Add register-indirect to register with carry
2
4
ADDC
[Rd], Rs
Add register to register-indirect with carry
2
4
ADDC
Rd, [Rs+offset8]
Add register-indirect with 8-bit offset to
register with carry
3
6
AD DC
[Rd+offset8], Rs
Add register to register-indirect with 8-bit
offset with carry
3
6
ADDC
Rd, [Rs+offset16]
Add register-indirect with 16-bit offset to
register with carry
4
6
ADDC
[Rd+offset16], Rs
Add register to register-indirect with 16-bit
offset with carry
4
6
ADDC
Rd, [Rs+]
Add register-indirect with auto increment to
register with carry
2
5
ADDC
[Rd+], Rs
Add register-indirect with auto increment to
register with carry
2
5
ADDC
direct, Rs
Add register to memory with carry
3
4
ADDC
Rd, direct
Add memory to register with carry
3
4
ADDC
Rd, #data8
Add 8-bit immediate data to register with
carry
3
3
ADDC
Rd, #data16
Add 16-bit immediate data to register with
carry
4
3
ADDC
[Rd], #data8
Add 16-bit immediate data to registerindirect with carry
3
4
AD DC
[Rd], #data16
Add 16-bit immediate data to registerindirect with carry
4
4
ADDC
[Rd+], #data8
Add 8-bit immediate data to register-indirect
and auto-increment with carry
3
5
AD DC
[Rd+], #data16
Add 16-bit immediate data to registerindirect and auto-increment with carry
4
5
ADDC
[Rd+offset8], #data8
Add 8-bit immediate data to register-indirect
with 8-bit offset and carry
4
6
3124/97
119
Addressing Modes and Data Types
Table 6.5
Mnemonic
Description
Bytes
Clocks
AD DC
[Rd+offset8], #data 16
Add 16-bit immediate data to registerindirect with 8-bit offset and carry
5
6
ADDC
[Rd+offset16], #data8
Add 8-bit immediate data to register-indirect
with 16-bit offset and carry
5
6
AD DC
[Rd+offset16], #data 16
Add 16-bit immediate data to registerindirect with 16-bit offset and carry
6
6
ADDC
direct, #data8
Add 8-bit immediate data to memory with
carry
4
4
AD DC
direct, #data16
Add 16-bit immediate data to memory with
carry
5
4
ADDS
Rd, #data4
Add 4-bit signed immediate data to register
2
3
ADDS
[Rd], #data4
Add 4-bit signed immediate data to registerindirect
2
4
ADDS
[Rd+], #data4
Add 4-bit signed immediate data to registerindirect with auto-increment
2
5
ADDS
[Rd+offset8], #data4
Add register-indirect with 8-bit offset to 4-bit
signed immediate data
3
6
ADDS
[Rd+offset16], #data4
Add register-indirect with 16-bit offset to 4bit signed immediate data
4
6
ADDS
direct, #data4
Add 4-bit signed immediate data to memory
3
4
ASL
Rd, Rs
Logical left shift destination register by the
value in the source register
2
See
Note1
ASL
Rd, #data4
Logical left shift register by the 4-bit
immediate value
2
See
Note1
ASR
Rd,Rs
Arithmetic shift right destination register by
the count in the source
2
See
Note1
ASR
Rd, #data4
Arithmetic shift right register by the 4-bit
immediate count
2
See
Note1
CMP
Rd, Rs
Compare destination and source registers
2
3
CMP
[Rd], Rs
Compare register with register-indirect
2
4
CMP
Rd, [Rs]
Compare register-indirect with register
2
4
CMP
[Rd+offset8], Rs
Compare register with register-indirect with
8-bit offset
3
6
CMP
[Rd+offset16], Rs
Compare register with register-indirect with
16-bit offset
4
6
CMP
Rd, [Rs+offset8]
Compare register-indirect with 8-bit offset
with register
3
6
XA User Guide
120
3/24/97
Table 6.5
Description
Mnemonic
Bytes
Clocks
CMP
Rd,[Rs+offset16]
Compare register-indirect with 16-bit offset
with register
4
6
CMP
Rd, [Rs+]
Compare auto-increment register-indirect
with register
2
5
CMP
[Rd+], Rs
Compare register with auto-increment
register-indirect
2
5
CMP
direct, Rs
Compare register with memory
3
4
CMP
Rd, direct
Compare memory with register
3
4
CMP
Rd, #data8
Compare 8-bit immediate data to register
3
3
CMP
Rd, #data16
Compare 16-bit immediate data to register
4
3
CMP
[Rd], #data8
Compare 8 -bit immediate data to registerindirect
3
4
CMP
[Rd], #data 16
Compare 16-bit immediate data to registerindirect
4
4
CMP
[Rd+], #data8
Compare 8-bit immediate data to registerindirect with auto-increment
3
5
CMP
[Rd+], #data16
Compare 16-bit immediate data to registerindirect with auto-increment
4
5
CMP
[Rd+offset8], #data8
Compare 8-bit immediate data to registerindirect with 8-bit offset
4
6
CMP
[Rd+offset8], #data16
Compare 16-bit immediate data to registerindirect with 8-bit offset
5
6
CMP
[Rd+offset16], #data8
Compare 8-bit immediate data to registerindirect with 16-bit offset
5
6
CMP
[Rd+offset16], #data 16
Compare 16-bit immediate data to registerindirect with 16-bit offset
6
6
CMP
direct, #data8
Compare 8-bit immediate data to memory
4
4
CMP
direct, #data 16
Compare 16-bit immediate data to memory
5
4
DA
Rd
Decimal Adjust byte register
2
4
DIV.w
Rd, Rs
16x8 signed register divide
2
14
DIV.w
Rd, #data8
16x8 signed divide register with immediate
word
3
14
DIV.d
Rd, Rs
32x16 signed double register divide
2
24
DIV.d
Rd, #data16
32x16 signed double register divide with
immediate word
4
24
DIVU.b
Rd, Rs
8x8 unsigned register divide
2
12
121
Addressing Modes and Data Types
3124/97
Table 6.5
Mnemonic
Description
Bytes
Clocks
DIVU.b
Rd, #data8
8X8 unsigned register divide with immediate
byte
3
12
DIVU.w
Rd,Rs
16X8 unsigned register divide
2
12
DIVU.w
Rd, #data8
16X8 unsigned register divide with
immediate byte
3
12
DIVU.d
Rd,Rs
32X16 unsigned double register divide
2
22
DIVU.d
Rd, #data16
32X16 unsigned double register divide with
immediate word
4
22
LEA
Rd, Rs+offset8
Load 16-bit effective .address with 8-bit
offset to register
3
3
LEA
Rd, Rs+offset16
Load 16-bit effective address with 16-bit
offset to register
4
3
MUL.w
Rd,Rs
16X16 signed multiply of register contents
2
12
MUL.w
Rd, #data16
16X16 signed multiply 16-bit immediate data
with register
4
12
MULU.b
Rd, Rs
8X8 unsigned multiply of register contents
2
12
MULU.b
Rd, #data8
8X8 unsigned multiply of 8-bit immediate
data with register
3
12
MULU.w
Rd,Rs
16X16 unsigned register multiply
2
12
MULU.w
Rd, #data16
16X16 unsigned multiply 16-bit immediate
data with register
4
12
NEG
Rd
Negate (twos complement) register
2
3
SEXT
Rd
Sign extend last operation to register
2
3
SUB
Rd,Rs
Subtract registers direct
2
3
SUB
Rd, [Rs]
Subtract register-indirect to register
2
4
SUB
[Rd], Rs
Subtract register to register-indirect
2
4
SUB
Rd, [Rs+offset8]
Subtract register-indirect with 8-bit offset to
register
3
6
SUB
[Rd+offset8], Rs
Subtract register to register-indirect with 8bit offset
3
6
SUB
Rd, [Rs+offset16]
Subtract register-indirect with 16-bit offset to
register
4
6
SUB
[Rd+offset16], Rs
Subtract register to register-indirect with 16bit offset
4
6
SUB
Rd, [Rs+]
Subtract register-indirect with auto
increment to register
2
5
XA User Guide
122
3124/97
Table 6.5
Mnemonic
Description
Bytes
Clocks
SUB
[Rd+], Rs
Subtract register-indirect with auto
increment to register
2
S
SUB
direct, Rs
Subtract register to memory
3
4
SUB
Rd, direct
Subtract memory to register
3
4
SUB
Rd, #data8
Subtract 8-bit immediate data to register
3
3
SUB
Rd, #data16
Subtract 16-bit immediate data to register
4
3
SUB
[Rd], #data8
Subtract 8-bit immediate data to registerindirect
3
4
SUB
[Rd], #data 16
Subtract 16-bit immediate data to registerindirect
4
4
SUB
[Rd+], #data8
Subtract 8-bit immediate data to registerindirect with auto-increment
3
S
SUB
[Rd+], #data16
Subtract 16-bit immediate data to registerindirect with auto-increment
4
S
SUB
[Rd+offset8], #data8
Subtract 8-bit immediate data to registerindirect with 8-bit offset
4
6
SUB
[Rd+offset8], #data16
Subtract 16-bit immediate data to registerindirect with 8-bit offset
S
6
SUB
[Rd+offset16], #data8
Subtract 8-bit immediate data to registerindirect with 16-bit offset
S
6
SUB
[Rd+offset16], #data 16
Subtract 16-bit immediate data to registerindirect with 16-bit offset
6
6
SUB
direct, #data8
Subtract 8-bit immediate data to memory
4
4
SUB
direct, #data16
Subtract 16-bit immediate data to memory
S
4
SUBB
Rd,Rs
Subtract with borrow registers direct
2
3
SUBB
Rd, [Rs]
Subtract with borrow register-indirect to
register
2
4
SUBB
[Rd], Rs
Subtract with borrow register to registerindirect
2
4
SUBB
Rd, [Rs+offset8]
Subtract with borrow register-indirect with 8bit offset to register
3
6
SUBB
[Rd+offset8], Rs
Subtract with borrow register to registerindirect with 8-bit offset
3
6
SUBB
Rd, [Rs+offset16]
Subtract with borrow register-indirect with
16-bit offset to register
4
6
SUBB
[Rd+offset16], Rs
Subtract with borrow register to registerindirect with 16-bit offset
4
6
3124/97
123
Addressing Modes and Data Types
Table 6.5
..
Mnemonic
Description
Bytes.
Clocks
SUBB
Rd, [Rs+]
Subtract with borrow register-indirect with
auto increment to register
2
5
SUBB
[Rd+], Rs
Subtract with borrow register-indirect with
auto increment to register
2
5
SUBB
direct, Rs
Subtract with borrow register to memory
3
4
SUBB
Rd, direct
Subtract with borrow memory to register
3
4
SUBB
Rd, #data8
Subtract with borrow 8-bit immediate data to
register
3
3
SUBS
Rd, #data16
Subtract with borrow 16-bit immediate data
to register
4
3
SUBB
[Rd], #data8
Subtract with borrow 8-bit immediate data to
register-indirect
3
4
SUBB
[Rd], #data 16
Subtract with borrow 16-bit immediate data
to register-indirect
4
4
SUBB
[Rd+], #data8
Subtract with borrow 8-bit immediate data to
register-indirect with auto-increment
3
5
SUBS
[Rd+], #data16
Subtract with borrow 16-bit immediate data
to register-indirect with auto-increment
4
5
SUBB
[Rd+offset8], #data8
Subtract with borrow 8-bit immediate data to
register-indirect with 8-bit offset
4
6
SUSS
[Rd+offset8], #data16
Subtract with borrow 16-bit immediate data
to register-indirect with 8-bit offset
5
6
SUBS
[Rd+offset16], #data8
Subtract with borrow 8-bit immediate data to
register-indirect with 16-bit offset
5
6
SUSS
[Rd+offset16], #data 16
Subtract with borrow 16-bit immediate data
to register-indirect with 16-bit offset
6
6
SUBS
direct, #data8
Subtract with borrow 8-bit immediate data to
memory
4
4
SUBS
direct, #data16
Subtract with borrow 16-bit immediate data
to memory
5
4
Logical Operations
AND
Rd,Rs
Logical AND registers direct
2
3
AND
Rd, [Rs]
Logical AND register-indirect to register
2
4
AND
[Rd], Rs
Logical AND register to register-indirect
2
4
AND
Rd, [Rs+offset8]
Logical AND register-indirect with 8-bit offset
to register
3
6
XA User Guide
124
3/24/97
Table 6.5
Mnemonic
Description
Bytes
Clocks
AND
[Rd+offset8], Rs
Logical AND register to register-indirect with
8-bit offset
3
6
AND
Rd, [Rs+offset16]
Logical AND register-indirect with 16-bit
offset to register
4
6
AND
[Rd+offset16], Rs
Logical AND register to register-indirect with
16-bit offset
4
6
AND
Rd, [Rs+]
Logical AND register-indirect with auto
increment to register
2
5
AND
[Rd+], Rs
Logical AND register-indirect with auto
increment to register
2
5
AND
direct, Rs
Logical AND register to memory
3
4
AND
Rd, direct
Logical AND memory to register
3
4
AND
Rd, #data8
Logical AND 8-bit immediate data to register
3
3
AND
Rd, #data16
Logical AND 16-bit immediate data to
register
4
3
AND
[Rd], #data8
Logical AND 8-bit immediate data to registerindirect
3
4
AND
[Rd], #data16
Logical AND16-bit immediate data to
register-indirect
4
4
AND
[Rd+], #data8
Logical AND 8-bit immediate data to registerindirect and auto-increment
3
5
AND
[Rd+], #data 16
Logical AND16-bit immediate data to
register-indirect and auto-increment
4
5
AND
[Rd+offset8], #data8
Logical AND8-bit immediate data to registerindirect with 8-bit offset
4
6
AND
[Rd+offset8], #data 16
Logical AND16-bit immediate data to
register-indirect with 8-bit offset
5
6
AND
[Rd+offset16], #data8
Logical AND8-bit immediate data to registerindirect with 16-bit offset
5
6
AND
[Rd+offset16], #data 16
Logical AND16-bit immediate data to
register-indirect with 16-bit offset
6
6
AND
direct, #data8
Logical AND 8-bit immediate data to memory
4
4
AND
direct, #data16
Logical AND16-bit immediate data to
memory
5
4
CPL
Rd
Complement (ones complement) register
2
3
LSR
Rd, Rs
Logical right shift destination register by the
value in the source register
2
See
Note 1
3124/97
125
Addressing Modes and Data Types
Table 6.5
Mnemonic
Description
Bytes
Clocks
LSR
Rd, #data4
Logical right shift register by the 4-bit
immediate value
2
See
Note 1
NORM
Rd, Rs
Logical shift left destination register by the
value in the source register until MSB set
2
See
Note 1
OR
Rd,Rs
Logical OR registers
2
3
OR
Rd, [Rs]
Logical OR register-indirect to register
2
4
OR
[Rd], Rs
Logical OR register to register-indirect
2
4
OR
Rd, [Rs+offset8]
Logical OR register-indirect with 8-bit offset
to register
3
6
OR
[Rd+offset8], Rs
Logical OR register to register-indirect with
8-bit offset
3
6
OR
Rd, [Rs+offset16]
Logical OR register-indirect with 16-bit offset
to register
4
6
OR
[Rd+offset16], Rs
Logical OR register to register-indirect with
16-bit offset
4
6
OR
Rd, [Rs+]
Logical OR register-indirect with auto
increment to register
2
5
OR
[Rd+], Rs
Logical OR register-indirect with auto
increment to register
2
5
OR
direct, Rs
Logical OR register to memory
3
4
OR
Rd, direct
Logical OR memory to register
3
4
OR
Rd, #data8
Logical OR 8-bit immediate data to register
3
3
OR
Rd, #data16
Logical OR 16-bit immediate data to register
4
3
OR
[Rd], #data8
Logical OR 8-bit immediate data to registerindirect
3
4
OR
[Rd], #data 16
Logical OR 16-bit immediate data to registerindirect
4
4
OR
[Rd+], #data8
Logical OR 8-bit immediate data to registerindirect with auto-increment
3
5
OR
[Rd+], #data16
Logical OR 16-bit immediate data to registerindirect with auto-increment
4
5
OR
[Rd+offset8], #data8
Logical OR 8-bit immediate data to registerindirect with 8-bit offset
4
6
OR
[Rd+offset8], #data16
Logical OR 16-bit immediate data to registerindirect with 8-bit offset
5
'6
OR
[Rd+offset16], #data8
Logical OR 8-bit immediate data to registerindirect with 16-bit offset
5
6
XA User Guide
126
3/24/97
Table 6.5
Mnemonic
Description
Bytes
Clocks
OR
[Rd+offset16], #data 16
Logical OR 16-bit immediate data to registerindirect with 16-bit offset
6
6
OR
direct, #data8
Logical OR 8-bit immediate data to memory
4
4
OR
direct, #data16
Logical OR16-bit immediate data to memory
5
4
RL
Rd, #data4
Rotate left register by the 4-bit immediate
value
2
See
Note 1
RLC
Rd, #data4
Rotate left register though carry by the 4-bit
immediate value
2
See
Note 1
RR
Rd, #data4
Rotate right register by the 4-bit immediate
value
2
See
Note 1
RRC
Rd, #data4
Rotate right register though carry by the 4bit immediate value
2
See
Note 1
XOR
Rd, Rs
Logical XOR registers
2
3
XOR
Rd, [Rs]
Logical XOR register-indirect to register
2
4
XOR
[Rd], Rs
Logical XOR register to register-indirect
2
4
XOR
Rd, [Rs+offset8]
Logical XOR register-indirect with 8-bit
offset to register
3
6
XOR
[Rd+offset8], Rs
Logical XOR register to register-indirect with
8-bit offset
3
6
XOR
Rd, [Rs+offset16]
Logical XOR register-indirect with 16-bit
offset to register
4
6
XOR
[Rd+offset16], Rs
Logical XOR register to register-indirect with
16-bit offset
4
6
XOR
Rd, [Rs+]
Logical XOR register-indirect with auto
increment to register
2
5
XOR
[Rd+], Rs
Logical XOR register-indirect with auto
increment to register
2
5
XOR
direct, Rs
Logical XOR register to memory
3
4
XOR
Rd, direct
Logical XOR memory to register
3
4
XOR
Rd, #data8
Logical XOR 8-bit immediate data to register
3
3
XOR
Rd, #data16
Logical XOR 16-bit immediate data to
register
4
3
XOR
[Rd], #data8
Logical XOR 8-bit immediate data to registerindirect
3
4
XOR
[Rd], #data 16
Logical XOR 16-bit immediate data to
register-indirect
4
4
3/24/97
127
Addressing Modes and Data Types
Table 6.5
Mnemonic
Description
Bytes
Clocks
XOR
[Rd+], #data8
Logical XOR 8-bit immediate data to registerindirect with auto-increment
3
5
XOR
[Rd+], #data16
Logical XOR 16-bit immediate data to
register-indirect with auto-increment
4
5
XOR
[Rd+offset8], #data8
Logical XOR 8-bit immediate data to registerindirect with 8-bit offset
4
6
XOR
[Rd+offset8], #data 16
Logical XOR 16-bit immediate data to
register-indirect with 8-bit offset
5
6
XOR
[Rd+offset16], #data8
Logical XOR 8-bit immediate data to registerindirect with 16-bit offset
5
6
XOR
[Rd+offset16], #data 16
Logical XOR 16-bit immediate data to
register-indirect with 16-bit offset
6
6
XOR
direct, #data8
Logical XOR 8-bit immediate data to memory
4
4
XOR
direct, #data16
Logical XOR16-bit immediate data to
memory
5
4
Data transfer
MOV
Rd, Rs
Move register to register
2
3
MOV
Rd, [Rs]
Move register-indirect to register
2
3
MOV
[Rd], Rs
Move register to register-indirect
2
3
MOV
Rd, [Rs+offset8]
Move register-indirect with 8-bit offset to
register
3
5
MOV
[Rd+offset8], Rs
Move register to register-indirect with 8-bit
offset
3
5
MOV
Rd, [Rs+offset16]
Move register-indirect with 16-bit offset to
register
4
5
MOV
[Rd+offset16], Rs
Move register to register-indirect with 16-bit
offset
4
5
MOV
Rd, [Rs+J
Move register-indirect with auto increment to
register
2
4
MOV
[Rd+], Rs
Move register-indirect with auto increment to
register
2
4
MOV
direct, Rs
Move register to memory
3
4
MOV
Rd, direct
Move memory to register
3
4
MOV
[Rd+], [Rs+]
Move register-indirect to register-indirect,
both pointers auto-incremented
2
6
XA User Guide
128
3124/97
Table 6.5
Description
Mnemonic
Bytes
Clocks
MOV
direct, [Rs]
Move register-indirect to memory
3
4
MOV
[Rd], direct
Move memory to register-indirect
3
4
MOV
Rd, #data8
Move 8-bit immediate data to register
3
3
MOV
Rd, #data16
Move 16-bit immediate data to register
4
3
MOV
[Rd], #data8
Move 16-bit immediate data to registerindirect
3
3
MOV
[Rd], #data 16
Move 16-bit immediate data to registerindirect
4
3
MOV
[Rd+], #data8
Move 8-bit immediate data to registerindirect with auto-increment
3
4
MOV
[Rd+], #data16
Move 16-bit immediate data to registerindirect with auto-increment
4
4
MOV
[Rd+offset8], #data8
Move 8-bit immediate data to registerindirect with 8-bit offset
4
5
MOV
[Rd+offset8], #data 16
Move 16-bit immediate data to registerindirect with 8-bit offset
5
5
MOV
[Rd+offset16], #data8
Move 8-bit immediate data to registerindirect with 16-bit offset
5
5
MOV
[Rd+offset16], #data16
Move 16-bit immediate data to registerindirect with 16-bit offset
6
5
MOV
direct, #data8
Move 8-bit immediate data to memory
4
3
MOV
direct, #data16
Move 16-bit immediate data to memory
5
3
MOV
direct, direct
Move memory to memory
4
4
MOV
Rd, USP
Move User Stack Pointer to register (system
mode only)
2
3
MOV
USP, Rs
Move register to User Stack Pointer (system
mode only)
2
3
MOVe
Rd, [Rs+]
Move data from WS:Rs address of code
memory to register with auto-increment
2
4
MOVe
A, [A+DPTR]
Move data from code memory to the
accumulator indirect with DPTR
2
6
MOVe
A, [A+PC]
Move data from code memory to the
accumulator indirect with pe
2
6
MOVS
Rd, #data4
Move 4-bit sign-extended immediate data to
register
2
3
MOVS
[Rd], #data4
Add 4-bit sign-extended immediate data to
register-indirect
2
4
3124/97
129
Addressing Modes and Data Types
Table 6.5
Description
Mnemonic
Bytes
Clocks
MOVS
[Rd+], #data4
Add 4-bit sign-extended immediate data to
register-indirect with auto-increment
2
4
MOVS
[Rd+offset8], #data4
Add register-indirect with 8-bit offset to 4-bit
sign-extended immediate data
3
5
MOVS
[Rd+offset16], #data4
Add register-indirect with 16-bit offset to 4bit sign-extended immediate data
4
5
MOVS
direct, #data4
Add 4-bit sign-extended immediate data to
memory
3
3
MOVX
Rd, [Rs]
Move external data from memory to register
2
6
MOVX
[Rd], Rs
Move external data from register to memory
2
6
PUSH
direct
Push the memory content (byte/word) onto
the current stack
3
5
PUSHU
direct
Push the memory content (byte/word) onto
the user stack
3
5
PUSH
Rlist
Push multiple registers (byte/word) onto the
current stack
2
See
Note 2
PUSHU
Rlist
Push multiple registers (byte/word)from the
user stack
2
See
Note 2
POP
direct
Pop the memory content (byte/word) from
the current stack
3
5
POPU
direct
Pop the memory content (byte/word) from
the user stack
3
5
POP
Rlist
Pop multiple registers (byte/word) from the
current stack
2
See
Note 3
POPU
Rlist
Pop multiple registers (byte/word) from the
user stack
2
See
Note 3
XCH
Rd,Rs
Exchange contents of two registers
2
5
XCH
Rd, [Rs]
Exchange contents of a register-indirect
address with a register
2
6
XCH
Rd, direct
Exchange contents of memory with a register
3
6
Program Branching
BCC
rel8
Branch if the carry flag is clear
2
6t/3nt
BCS
rel8
Branch if the carry flag is set
2
6t/3nt
BEQ
rel8
Branch if the zero flag is set
2
6t13nt
BNE
rel8
Branch if the zero flag is not set
2
6t13nt
XA User Guide
130
3/24/97
Table 6.5
Description
Mnemonic
Bytes
Clocks
BG
rel8
Branch if greater than (unsigned)
2
6t13nt
BGE
rel8
Branch if greater than or equal to (signed)
2
6t13nt
BGT
rel8
Branch if greater than (signed)
2
6t/3nt
BL
rel8
Branch if less than or equal to (unsigned)
2
6t/3nt
BLE
rel8
Branch if less than or equal to (signed)
2
6t13nt
BLT
rel8
Branch if less than (signed)
2
6t/3nt
BMI
rel8
Branch if the negative flag is set
2
6t/3nt
BPL
rel8
Branch if the negative flag is clear
2
6t/3nt
BNV
rel8
Branch if overflow flag is clear
2
6t13nt
BOV
rel8
Branch if overflow flag is set
2
6t/3nt
BR
rel8
Short unconditional branch
2
6
CALL
[Rs]
Subroutine call indirect with a register
2
8/S(PZ)
CALL
rel16
Relative call (+/- 64K)
3
7/4(PZ)
CJNE
Rd,direct,reI8
Compare direct byte to register and jump if
not equal
4
10tl7nt
CJNE
Rd,#data8, rel8
Compare immediate byte to register and
jump if not equal
4
9t/6nt
CJNE
Rd,#data16,reI8
Compare immediate word to register and
jump if not equal
S
9t16nt
CJNE
[Rd],#data8, rel8
Compare immediate word to register-indirect
and jump if not equal
4
10t17nt
CJNE
[Rd],#data 16, rel8
Compare immediate word to register-indirect
and jump if not equal
S
10t/7nt
DJNZ
Rd,rel8
Decrement register and jump if not zero
3
8t/Snt
DJNZ
direct,rel8
Decrement memory and jump if not zero
4
9t/6nt
FCALL
addr24
Far call (anywhere in the 24-bit address
space)
4
9/S(PZ)
FJMP
addr24
Far jump (anywhere in the 24-bit address
space)
4
6
JB
bit,rel8
Jump if bit set
4
7t14nt
JBC
bit,rel8
Jump if bit set and then clear the bit
4
7t/4nt
JMP
rel16
Long unconditional branch
3
6
JMP
[Rs]
Jump indirect to the address in the register
(64K)
2
7
3124/97
131
Addressing Modes and Data Types
Table 6.5
Description
Mnemonic
Bytes
Clocks
JMP
[A+DPTR]
Jump indirect relative to the DPTR
2
5
JMP
[[Rs+]]
Jump double-indirect to the address (pointer
to a pointer)
2
8
JNB
bit,rel8
Jump if bit not set
4
7t14nt
JNZ
rel8
Jump if accumulator not equal zero
2
7t14nt
JZ
rel8
Jump if accumulator equals zero
2
7t14nt
NOP
No operation
1
3
RET
Return from subroutine
2
8/6(PZ)
RETI
Return from interrupt
2
10/
8(PZ)
Logical AND bit to carry
3
4
Bit Manipulation
ANL
,C, bit
ANL
C, /bit
Logical AND complement of a bit to carry
3
4
CLR
bit
Clear bit
3
4
MOV,
C, bit
Move bit to the carry flag
3
4
MOV
bit, C
Move carry to bit
3
4
ORL
C, bit
Logical OR a bit to carry
3
4
ORL
C, /bit
Logical OR complement of a bit to carry
3
4
SETB
bit
Sets the bit specified
3
4
BKPT
Cause the breakpoint trap to be executed.
1
23/
19(PZ)
RESET
Causes a hardware Reset, identical to an
external Reset
2
8
Causes 1 of 16 hardware traps to be
executed
2
23/
19(PZ)
Exception I Trap
'TRAP
#data4
Note 1: For 8 and 16 bit shifts, it is 4+ 1 per additional two bits. For 32-bit shifts, it is 6+ 1 per additional two bits.
Note 2: 3 clocks per register pushed.
Note 3: 2 clocks per register popped.
XA User Guide
132
3/24/97
ADD
Integer Addition
Syntax:
ADD dest, source
Operation:
dest <- src + dest
Description: Performs a twos complement binary addition of the source and destination operands,
and the result is placed in the destination operand. The source data is not affected by the operation.
Note: If used with write to PSWL, takes precedence to flag updates
Sizes: Byte-Byte, Word-Word
Flags Updated: C, AC, V, N, Z
ADD
Rd,Rs
Bytes:
Clocks:
Operation:
Encoding:
2
3
(Rd) <-- (Rd) + (Rs)
I 0 I 0 I 0 I 0 Isz I 0 I 0
ADD
Rd, [Rs]
Bytes:
Clocks:
Operation:
Encoding:
oI
ADD
2
4
(Rd) <-- (Rd) + C(WS:Rs)
0
I 0 I 0 Isz I 0 I 1 I 0
[Rd], Rs
Bytes:
Clocks:
Operation:
Encoding:
2
4
(WS:Rd) <-- (WS:Rd) + (Rs)
I 0 I 0 I 0 I 0 Isz I 0 I 1 I 0 I
3124/97
d
133
d
d
Addressing Modes and Data Types
ADD
Rd, [Rs+offset8]
3
6
(Rd) <-- (Rd) + ((WS:Rs)+offset8)
Bytes:
Clocks:
Operation:
Encoding:
I"'--SZ-'--I-11"'--0-'--1----'0
Id Id Id Idlo Is Is Is I
"'--1
0 -'--1-0,"'--0--'--1-0
byte 3: offset8
ADD
[Rd+offset8], Rs
3
6
((WS:Rd)+offset8) <-- ((WS:Rd)+offset8) + (Rs)
Bytes:
Clocks:
Operation:
Encoding:
d d d
I 0 I 0 I 0 I 0 Isz I I 0 I 0
byte 3: offset8
ADD
Rd, [Rs+offsetl6]
Bytes:
Clocks:
Operation:
Encoding:
4
6
(Rd) <-- (Rd) + ((WS:Rs)+offset16)
I 0 I 0 I 0 I 0 Isz I 1 I 0 I 1
byte 3: upper 8 bits of offset 16
byte 4: lower 8 bits of offset 16
ADD
[Rd+offsetl6], Rs
Bytes:
Clocks:
Operation:
Encoding:
I0
4
6
((WS:Rd)+offsetl6) <-- ((WS:Rd)+offset16) + (Rs)
d d d
I 0 I 0 I 0 Isz I
byte 3: upper 8 bits of offset 16
byte 4: lower 8 bits of offset 16
XA User Guide
134
3/24/97
ADD
Rd, [Rs+]
2
5
(Rd) <-- (Rd) + ((WS:Rs))
(Rs) <-- (Rs) + 1 (byte operation) or 2 (word operation)
Bytes:
Clocks:
Operation:
Encoding:
1'-0-'--1-01'-0-'--1-0I'-SZ-'--I-01'--1-'--,---'1I
ADD
[Rd+], Rs
Bytes:
Clocks:
Operation:
2
5
((WS:Rd)) <-- ((WS:Rd)) + (Rs)
(Rd) <-- (Rd) + 1 (byte operation) or 2 (word operation)
Encoding:
0
-0""--10---'-1-0""--1
SZ---'-I-0""--11---'-1---'1I
d
Ir-----'-1
ADD
d
d
direct, Rs
Bytes:
Clocks:
Operation:
Encoding:
3
4
(direct) <-- (direct) + (Rs)
I 0 I 0 I 0 I 0 Isz I
o
I
sis
1
sis
1
1
I
direct: 3 bits\
byte 3: lower 8 bits of direct
ADD
Rd, direct
Bytes:
Clocks:
Operation:
Encoding:
3
4
(Rd) <-- (Rd) + (direct)
O----r-,-O-r--I----'0,-0--'--,S-Z.....--,1-'----'--'0
I dId I did I 0 Idirect: 3 bitsl
"'--1
byte 3: lower 8 bits of direct
3/24/97
135
Addressing Modes and Data Types
ADD
Rd, #data8
Bytes:
Clocks:
Operation:
Encoding:
3
3
(Rd) <-- (Rd) + #data8
1110101110101011
byte 3: #data8
ADD
Rd, #datal6
Bytes:
Clocks:
Operation:
Encoding:
4
3
(Rd) <-- (Rd) + #datal6
1110101111101011
byte 3: upper 8 bits of #data 16
byte 4: lower 8 bits of #datal6
ADD
[Rd], #data8
Bytes:
Clocks:
Operation:
Encoding:
3
4
«WS:Rd» <-- «WS:Rd» + #data8
11 1 0 0 1 1 0 1 0 1 11 0 1 10ldldidi 01 01 0101
1
byte 3: #data8
ADD
[Rd], #datal6
Bytes:
Clocks:
Operation:
Encoding:
4
4
«WS:Rd» <-- «WS:Rd» + #datal6
11101011111011101
10ldldidi 01 01 0101
byte 3: upper 8 bits of #datal6
byte 4: lower 8 bits of #datal6
XA User Guide
136
3124/97
ADD
[Rd+], #data8
3
Bytes:
Clocks:
Operation:
5
((WS:Rd) <-- ((WS:Rd) + #data8
(Rd) <-- (Rd) + 1
Encoding:
byte 3: #data8
ADD
[Rd+], #data16
4
Bytes:
Clocks:
Operation:
5
((WS:Rd)) <-- ((WS:Rd)) + #data16
(Rd) <-- (Rd) + 2
Encoding:
11
01 01 1
1\
byte 3: upper 8 bits of #data16
byte 4: lower 8 bits of #data16
ADD
I
1
01
[Rd+offset8], #data8
Bytes:
Clocks:
Operation:
Encoding:
4
6
((WS:Rd)+offset8) <-- ((WS:Rd)+offset8) + #data8
a a
byte 3: offset8
byte 4: #data8
ADD
[Rd+offset8], #data16
Bytes:
Clocks:
Operation:
Encoding:
5
6
((WS:Rd)+offset8) <-- ((WS:Rd)+offset8) + #data16
111 01 01 1 1
1
1
1010
byte 3: offset8
byte 4: upper 8 bits of #data16
byte 5: lower 8 bits of #data16
3124/97
137
Addressing Modes and Data Types
ADD
[Rd+offsetI6], #data8
Bytes:
Clocks:
Operation:
Encoding:
5
6
«WS:Rd)+offsetl6) <-- «WS:Rd)+offsetI6) + #data8
r--'11--r"I-O-r-I----'01r--1---r-1-0""-11 0--'-------'1
---r-
byte 3: upper 8 bits of offset16
byte 4: lower 8 bits of offset 16
byte 5: #data8
ADD
[Rd+offsetI6], #datal6
Bytes:
Clocks:
Operation:
Encoding:
6
6
«WS:Rd)+offsetI6) <-- «WS:Rd)+offsetl6) + #datal6
11 1 0 1 0 1 1 1 1 11
byte 3:
byte 4:
byte 5:
byte 6:
0 1,1 I
upper 8 bits of offset16
lower 8 bits of offset16
upper 8 bits of #datal6
lower 8 bits of #datal6
ADD direct, #data8
Bytes:
4
Clocks:
4
Operation:
(direct) <-- (direct) + #data8
Encoding:
o Idirect: 3 bits' 0' 0' 0 I 0 1
o
byte 3: lower 8 bits of direct
byte 4: #data8
ADD
direct, #datal6
Bytes:
Clocks:
Operation:
Encoding:
5
4
(direct) <-- (direct) + #data 16
o
o ! direct: 3 bits!
O! O! 0
I0I
byte 3: lower 8 bits of direct
byte 4: upper 8 bits of #datal6
byte 5: lower 8 bits of #datal6
XA User Guide
138
3/24/97
ADDC
Integer addition with Carry
Syntax:
ADDC dest, source
Operation:
dest <- dest + src + C
Description: Performs a two's complement binary addition of the source operand and the
previously generated carry bit with the destination operand. The result is stored in the destination
operand. The source data is not affected by the operation.
If the carry from previous operation is one (C=l), the result is greater than the sum of the operands;
if it is zero (C=O), the result is the exact sum.
This form of addition is intended to support multiple-precision arithmetic. For this use, the carry
bit is first reset, then ADDC is used to add the portions of the multiple-precision values from leastsignificant to most-significant
Size: Byte-Byte, Word-Word
Flags Updated: C, AC, V, N, Z
ADDC
Rd, Rs
2
3
(Rd) <-- (Rd) + (Rs) + (C)
Bytes:
Clocks:
Operation:
Encoding:
oI
ADDC
0
I 0 I 1 Isz I 0 I 0 I
Rd, [Rs]
Bytes:
Clocks:
Operation:
Encoding:
2
4
(Rd) <-- (Rd) + ((WS:Rs» + (C)
o
I 0 I 0 I 1 Isz I 0 I 1 I 0 I
3124/97
139
Addressing Modes and Data Types
ADDC
[Rd], Rs
2
4
«WS:Rd)) <-- «WS:Rd)) + (Rs) + (C)
Bytes:
Clocks:
Operation:
Encoding:
ADDC
Rd, [Rs+offset8]
Bytes:
Clocks:
Operation:
Encoding:
3
6
(Rd) <-- (Rd) + «WS:Rs)+offset8) + (C)
I0 I
0
I
0
I sz I
I
1
10 10
byte 3: offset8
ADDC
[Rd+offset8], Rs
Bytes:
Clocks:
Operation:
Encoding:
I0
3
6
«WS:Rd)+offset8) <-- «WS:Rd)+offset8) + (Rs) + (C)
1 0
I 0I
1 1
sz 1
1 0
I0
byte 3: offset8
ADDC
Rd, [Rs+offset16]
Bytes:
Clocks:
Operation:
Encoding:
4
6
(Rd) <-- (Rd) + «WS:Rs)+offset16) + (C)
1 0 1 0 1 0 11
1SZ 11
1 0 11
lid 1 did 1 d 1 0 1 sis 1 s 1
byte 3: upper 8 bits of offset16
byte 4: lower 8 bits of offset 16
XA User Guide
140
3/24/97
ADDC
[Rd+offsetl6], Rs
Bytes:
Clocks:
Operation:
Encoding:
4
6
((WS:Rd)+offsetl6) <-- ((WS:Rd)+offset16) + (Rs) + (C)
I 0 10 10 11 1SZ 11 10
11
I
byte 3: upper 8 bits of offset16
byte 4: lower 8 bits of offset16
ADDC
Rd, [Rs+]
Bytes:
Clocks:
Operation:
2
5
(Rd) <-- (Rd) + ((WS:Rs» + (C)
(Rs) <-- (Rs) + 1 (byte operation) or 2 (word operation)
Encoding:
.--,0-...-,~O,"---0-...-,-1,"---SZ-"'-,0---',"---1-"'-11----',
ADDC
[Rd+], Rs
Bytes:
Clocks:
Operation:
2
5
((WS:Rd» <-- ((WS:Rd» + (Rs) + (C)
(Rd) <-- (Rd) + 1 (byte operation) or 2 (word operation)
Encoding:
d
ADDC
d
d
direct, Rs
Bytes:
Clocks:
Operation:
Encoding:
3
4
(direct) <-- (direct) + (Rs) + (C)
'--10--'-1----'0,"---0-..--,-1,"---SZ-"'-,1-,"---1--'-10-',
1
direct: 3 bitsl
byte 3: lower 8 bits of direct
3/24/97
141
Addressing Modes and Data Types
ADDC
Rd, direct
Bytes:
Clocks:
Operation:
Encoding:
3
4
(Rd) <-- (Rd) + (direct) + (C)
1""'--0"""-10----'1""'--0"""-1----'11""'--8Z"""-11----'1""'--1"""-10----'1
I did I did I 0 Idirect: 3 bitsl
byte 3: lower 8 bits of direct
ADDC
Rd, #data8
Bytes:
Clocks:
Operation:
Encoding:
3
3
(Rd) <-- (Rd) + #data8 + (C)
11101011101010111
byte 3: #data8
ADDC
Rd, #data 16
Bytes:
Clocks:
Operation:
Encoding:
4
3
(Rd) <-- (Rd) +#dataI6 + (C)
111010111110101
byte 3: upper 8 bits of #datal6
byte 4: lower 8 bits of #datal6
ADDC
[Rd], #data8
Bytes:
Clocks:
Operation:
Encoding:
3
4
((WS:Rd» <-- ((WS:Rd» + #data8 + (C)
1 1 1 0 101 1 10101
101
byte 3: #data8
XA User Guide
142
3/24/97
ADDC
[Rd], #data16
Bytes:
Clocks:
Operation:
4
4
((WS:Rd» <-- ((WS:Rd» + #data16 + (C)
Encoding:
1'---1~I-O
-0-r--.-------rO-'--"--0-----'
"""""1
byte 3: upper 8 bits of #data16
byte 4: lower 8 bits of #data16
ADDC
[Rd+], #data8
Bytes:
Clocks:
Operation:
3
5
((WS:Rd» <-- ((WS:Rd» + #data8 + (C)
(Rd) <-- (Rd) + 1
Encoding:
byte 3: #data8
ADDC
[Rd+], #data16
Bytes:
Clocks:
Operation:
4
5
((WS:Rd» <-- ((WS:Rd» + #data16 + (C)
(Rd) <-- (Rd) + 2
Encoding:
byte 3: upper 8 bits of #data16
byte 4: lower 8 bits of #data16
ADDC
[Rd+offset8], #data8
Bytes:
Clocks:
Operation:
Encoding:
4
6
((WS:Rd)+offset8) <-- ((WS:Rd)+offset8) + #data8 + (C)
o
0
byte 3: offset8
byte 4: #data8
3/24/97
143
Addressing Modes and Data Types
ADDC
[Rd+offset8], #datal6
Bytes:
Clocks:
Operation:
Encoding:
5
6
((WS:Rd)+offset8) <-- «(WS:Rd)+offset8) + #datal6 + (C)
11101011111100
byte 3: offset8
byte 4: upper 8 bits of #datal6
byte 4: lower 8 bits of #datal6
ADDC
[Rd+offsetI6], #data8
Bytes:
Clocks:
Operation:
Encoding:
5
6
«(WS:Rd)+offsetl6) <-- ((WS:Rd)+offsetI6) + #data8 + (C)
o
1
byte 3: upper 8 bits of offset 16
byte 4: lower 8 bits of offset16
byte 5: #data8
ADDC
[Rd+offsetl6], #data16
Bytes:
Clocks:
Operation:
Encoding:
6
6
(WS:Rd)+offsetI6) <-- ((WS:Rd)+offset16) + #datal6 + (C)
o
byte 3:
byte 4:
byte 5:
byte 6:
ADDC
upper 8 bits of offset 16
lower 8 bits of offset16
upper 8 bits of #data16
lower 8 bits of #datal6
direct, #data8
Bytes:
Clocks:
Operation:
Encoding:
4
4
(direct) <-- (direct) + #data8 + (C)
o 1direct: 3 bits 10 10 1 0 1
1110101110111110 I
byte 3: lower 8 bits of direct
byte 4: #data8
XA User Guide
144
3124/97
AD DC
direct, #data 16
Bytes:
Clocks:
Operation:
Encoding:
5
4
(direct) <-- (direct) + #data16 + (C)
I~
1 ---'--10-1'--0---'--1-1,'--1---.--,-""-----'------'0
o Idirect: 3 bits I 0
0
I0 I
byte 3: lower 8 bits of direct
byte 4: upper 8 bits of #data16
byte 5: lower 8 bits of #data16
3/24/97
145
Addressing Modes and Data Types
ADDS
Add Short
Syntax:
ADDS
Operation:
dest <- dest + #data4
dest, #value
Description: Four bits of signed immediate data are added to the destination. The immediate data
is sign-extended to the proper size, then added to the variable specified by the destination operand,
which may be either a byte or a word. The immediate data range is + 7 to -8. This instruction is used
primarily to increment or decrement pointers and counters.
Size: Byte-Byte, Word-Word
Flags Updated: N, Z
(Note: the C and AC flags must not be updated by ADDS since this instruction is used to replace
the 80C51 INC and DEC instructions, which do not update the flags.)
ADDS
Rd, #data4
2
3
(Rd) <-- (Rd) + #data4
Bytes:
Clocks:
Operation:
Encoding:
1 0 1 1 1 0 1sz I 0 1 0 1 1
ADDS
d
d
d
d
#data4
[Rd], #data4
Bytes:
2
Clocks:
4
Operation:((WS:Rd» <-- ((WS:Rd» + #data4
Encoding:
11
ADDS
I 0 1 1 1 0 1sz 1 0
1 1
I0
#data4
1
[Rd+], #data4
Bytes:
Clocks:
Operation:
.2
5
((WS:Rd» <-- ((WS:Rd» + #data4
(Rd) <-- (Rd) + 1 (byte operation) or 2 (word operation)
Encoding:
11 1 0 1
XA User Guide
I
0
I
sz 1
0
#data4
1
146
3/24/97
ADDS
[Rd+offset8], #data4
Bytes:
Clocks:
Operation:
Encoding:
3
6
((WS:Rd)+offset8) <-- ((WS:Rd)+offset8) + #data4
~11--r-,-01r---1--r-,-0Ir---SZ--r-I-r---IO--r-I----'0
#data4
byte 3: offset8
ADDS
[Rd+offset16], #data4
Bytes:
4
Clocks:
6
Operation:((WS:Rd)+offset16) <-- ((WS:Rd)+offset16) + #data4
Encoding:
#data4
byte 3: upper 8 bits of offset16
byte 4: lower 8 bits of offset 16
ADDS
direct, #data4
Bytes:
3
Clocks:
4
Operation:(direct) <-- (direct) + #data4
Encoding:
,"'--1--"-,-0.....---,---'1,-0--'-,S-Z...--,---'---'----'0
I 0 Idirect: 3 bits I
#data4
byte 3: lower 8 bits of direct
3/24/97
147
Addressing Modes and Data Types
AND
Logical AND
Syntax:
AND dest, src
Operation:
dest <- dest AND src
Description: Bitwise logical AND the contents of the source to the destination. The byte or word
specified by the source operand is logically ANDed to the variable specified by the destination
operand. The source data is not affected by the operation.
Size: Byte-Byte, Word-Word
Flags Updated: N, Z
AND
Rd,Rs
Bytes:
Clocks:
Operation:
Encoding:
2
3
(Rd) <-- (Rd) • (Rs)
1 0 1 1 I 0 1 1 I8Z I 0 1 0 I 1
AND
Rd, [Rs]
Bytes:
Clocks:
Operation:
Encoding:
2
4
(Rd) <-- (Rd) • «WS:Rs))
0-'-1-1"--10-'-18Z-'-1-0"--11-'-11 "--1
0
\d
"'--1
AND
Id Id Id lois Is 151
[Rd], Rs
Bytes:
Clocks:
Operation:
Encoding:
2
4
((WS:Rd)) <-- «WS:Rd)) • (Rs)
1"'0---'
-- --1-1'---10--'--1-11"----8Z---'--1'--'01-1-'--,'--'01
XA User Guide
148
3/24/97
AND
Rd, [Rs+offset8]
3
6
(Rd) <-- (Rd) • ((WS:Rs)+offset8)
Bytes:
Clocks:
Operation:
Encoding:
1"""-0--"--1---'I~O--"--'----'1,"---SZ--"--,----'1,"---0--"--1---'0I
byte 3: offset8
AND
[Rd+offset8], Rs
Bytes:
Clocks:
Operation:
Encoding:
1
0
3
6
((WS:Rd)+offset8) <-- ((WS:Rd)+offset8) • (Rs)
1
I
0
1
1SZ 11 1 0
I
0
d
d
d
d
d
d
byte 3: offset8
AND
Rd, [Rs+offset 16]
Bytes:
Clocks:
Operation:
Encoding:
4
6
(Rd) <-- (Rd) • ((WS:Rs)+offsetI6)
,"---0---.--,-----'1,-0---'--,-----'1,"---SZ---'--I-----'1"---0---'--,---.
byte 3: upper 8 bits of offsetl6
byte 4: lower 8 bits of offsetl6
AND
[Rd+offsetI6], Rs
Bytes:
Clocks:
Operation:
Encoding:
I0 I
4
6
((WS:Rd)+offsetI6) <-- ((WS:Rd)+offsetI6) • (Rs)
1, 0 , 1
Isz I I 0 I
byte 3: upper 8 bits of offset 16
byte 4: lower 8 bits of offset 16
3/24/97
149
Addressing Modes and Data Types
AND
Rd, [Rs+]
Bytes:
Clocks:
Operation:
2
5
(Rd) <-- (Rd) • «WS:Rs))
(Rs) <-- (Rs) + 1 (byte operation) or 2 (word operation)
Encoding:
I 0 I 1 I 0 I ,sz I 0
AND
'1
1
[Rd+], Rs
Bytes:
Clocks:
Operation:
2
5
«WS:Rd)) <-- «WS:Rd)) • (Rs)
(Rd) <-- (Rd) + 1 (byte operation) or 2 (word operation)
Encoding:
I0 I 1 I
AND
0' 1
Isz I 0 I 1 I 1 I
direct, Rs
Bytes:
Clocks:
Operation:
Encoding:
3
4
(direct) <-- (direct) • (Rs)
o
I sis
o
I
1 s , s 11 1direct: 3 bitsl
byte 3: lower 8 bits of direct
AND
Rd, direct
Bytes:
Clocks:
Operation:
Encoding:
3
4
(Rd) <-- (Rd) • (direct)
I0 I 1 I 0 I
1 'SZ
I1
did , did, 0
1
direct: 3 bits'
byte 3: lower 8 bits of direct
XA User Guide
150
3/24/97
AND
Rd, #data8
Bytes:
Clocks:
Operation:
Encoding:
3
3
(Rd) <-- (Rd) • #data8
1~1--'-1----'0Ir---O--'-I----'1Ir---O-'--I----'0I~O--'-I-----.
byte 3: #data8
AND
Rd, #data 16
Bytes:
Clocks:
Operation:
Encoding:
4
3
(Rd) <-- (Rd) • #datal6
1r--1--'-1----'0Ir---O--'-I----'11r---1--'-1----'0Ir---O--'-I-----.
byte 3: upper 8 bits of #datal6
byte 4: lower 8 bits of #datal6
AND
[Rd], #data8
Bytes:
Clocks:
Operation:
Encoding:
1
3
4
«WS:Rd)) <-- «WS:Rd)) • #data8
1 101 0 \1\0\0\1\0\
byte 3: #data8
AND
[Rd], #datal6
Bytes:
Clocks:
Operation:
Encoding:
4
4
«WS:Rd)) <-- «WS:Rd)) • #datal6
\1 \ 01 01 1 1 1 \ 0\1\ 01
byte 3: upper 8 bits of #datal6
byte 4: lower 8 bits of #datal6
3124/97
151
Addressing Modes and Data Types
AND
[Rd+], #data8
Bytes:
Clocks:
Operation:
3
5
((WS:Rd» <-- ((WS:Rd» • #data8
(Rd) <-- (Rd) + 1
Encoding:
byte 3: #data8
AND
[Rd+], #datal6
Bytes:
Clocks:
Operation:
4
5
((WS:Rd» <-- ((WS:Rd» • #datal6
(Rd) <-- (Rd) + 2
Encoding:
11 1 0 1 0 1 1 1 \ 01
1
1
byte 3: upper 8 bits of #data 16
byte 4: lower 8 bits of #datal6
AND
[Rd+offset8], #data8
Bytes:
Clocks:
Operation:
Encoding:
4
6
((WS:Rd)+offset8) <-- ((WS:Rd)+offset8) • #data8
11101011101110101
byte 3: offset8
byte 4: #data8
AND
[Rd+offset8], #datal6
Bytes:
Clocks:
Operation:
Encoding:
5
6
((WS:Rd)+offset8) <-- ((WS:Rd)+offset8) • #datal6
1110101111111010 I
byte 3: offset8
byte 4: upper 8 bits of #datal6
byte 5: lower 8 bits of #datal6
XA User Guide
152
3124/97
AND
[Rd+offset16], #data8
Bytes:
Clocks:
Operation:
Encoding:
5
6
«WS:Rd)+offset16) <-- «WS:Rd)+offset16) • #data8
10 I
1
byte 3: upper 8 bits of offsetl6
byte 4: lower 8 bits of offsetl6
byte 5: #data8
AND
[Rd+offsetl6], #data16
Bytes:
Clocks:
Operation:
Encoding:
6
6
«WS:Rd)+offset16) <-- «WS:Rd)+offsetl6) • #data16
byte 3:
byte 4:
byte 5:
byte 6:
upper 8 bits of offsetl6
lower 8 bits of offset16
upper 8 bits of #data16
lower 8 bits of #data16
AND
direct, #data8
Bytes:
Clocks:
Operation:
Encoding:
4
4
(direct) <-- (direct) • #data8
o
111010111011
o I direct: 3 bits 1 0
1
1
0
11
byte 3: lower 8 bits of direct
byte 4: #data8
AND
direct, #data 16
Bytes:
Clocks:
Operation:
Encoding:
5
4
(direct) <-- (direct) • #data 16
1
o Idirect: 3 bits I 0
0
byte 3: lower 8 bits of direct
byte 4: upper 8 bits of #data16
byte 5: lower 8 bits of #data16
3/24/97
153
Addressing Modes and Data Types
ANL
Logical AND a bit to the Carry flag
Syntax:
ANL
Operation:
C <- C (AND) Bit
C, bit
Description: Read the specified bit and logically AND it to the Carry flag.
Size: Bit
Flags Updated: none
Note: Here the Carry bit is implicitly written by the instruction, and not to be confused with
carry affected by the result of an ALU operation
Bytes:
Clocks:
3
4
Encoding:
1010101011000
10 11 I 0 10 10 10 1 bit: 2 I
byte 3: lower 8 bits of bit address
XA User Guide
154
3/24/97
ANL
Logical AND the complement of a bit to the Carry flag
Syntax:
ANL
Operation:
Carry <- C (AND) bit
C, /bit
Description: Read the specified bit, complement it, and logically AND it to the Carry flag.
Size: Bit
Flags Updated: none
Note: Here the Carry bit is implicitly written by the instruction, and not to be confused with
carry affected by the result of an ALU operation
Bytes:
Clocks:
3
4
Encoding:
I0I 1I 0I 1I 0I 0 I
000
bit: 2
I
byte 3: lower 8 bits of bit address
3/24/97
155
Addressing Modes and Data Types
ASL
Arithmetic Shift Left.
Syntax:
ASL dest, count
Operation:
Do While (count not equal to 0)
(C) <- (dest.msb)
(dest.bit n+ 1) <- (dest.bit n)
count =count-l
if sign change during shift,
(V) <- 1
End While
Description:
If the count operand is greater than 0, the destination operand is logically shifted left by the
number of bits specified by the count operand. The Low-order bits shifted in are zero-filled and
the high-order bits are shifted out through the C (carry) bit. If the count operand is 0, no shift is
performed.
The count operand could be:
- An immediate value (#data4 or #data5)
- A Register (Only 5 bits are used to implement up to 31 bit shifts)
The count is a positive value which may be from 1 to 31 and the destination operand is a signed
integer (twos complement form).The destination operand (data size) may be 8, 16, or 32 bits. In
the case of 32-bit shifts, the destination operand must be the least significant half of a double
word register.The count operand is not affected by the operation.
Note:
- a double word register is double-word aligned in the register file (Rl:RO, R3:R2, R5:R4, or
R7:R6).
- If shift count (count in Rs) exceeds data size, the count value is truncated to 5 bits, else for
immediate shift count, shifting is continued until count is 0.
Size: Byte, word, and double word
Flags Updated: C, V, N, Z
Note: The V flag is set if the sign changes at any time during the shift operation and remains set
until the end of the shift operation i.e., the V flag does not get cleared even if the sign reverts to its
original state because of continued shifts within the same instruction. ASL clears the V flag if the
condition to set it does not occur.
XA User Guide
156
3124/97
ASL
Rd, Rs
Operation:
(Rd)
~
MSB,....
~I---- LSBf.- 0
2
For 8/16 bit shifts -> 4 + 1 for each 2 bits of shift
For 32 bit shifts -> 6 + 1 for each 2 bits of shift
Bytes:
Clocks:
Encoding:
I 1 I 0 I 0 I SZ1 ISZO I 0 I 1 I I did I did I SiS I SiS
ASL
Rd, #data4
Rd,#data5
2
For 8/16 bit shifts -> 4 + 1 for each 2 bits of shift
For 32 bit shifts -> 6 + 1 for each 2 bits of shift
Bytes:
Clocks:
Operation:
(Rd)
~
Encoding:
1
MSB,......
~t----- LSBf.- 0
(for byte and word data sizes)
I 1 I 0 I 1 I SZ1 ISZO I0 I 1 I I did I did I
#data4
(for double word data size)
#data5
Note: SZlISZO =00: byte operation; SZ1/SZ0 =10: word operation; SZlISZO =11 : double word
operation.
3124/97
157
Addressing Modes and Data Types
ASR
Arithmetic Shift Right
Syntax:
ASR
dest, count
Operation:
Do While (count not equal to 0)
(C) <- (dest.O)
(dest.bit n) <- (dest.bit n+ 1)
dest.msb <- Sign bit
count =count-l
End While
Description:
If the count operand is greater than 0, the destination operand is logically shifted right by the
number of bits specified by the count operand. The low-order bits are shifted out through the C
(carry) bit. If the count operand is 0, no shift is performed. To preserve the sign of the original
operand, the MSBs of the result are sign-extended with the sign bit.
The count operand could be:
- An immediate value (#data4/5)
- A Register (Only 5 bits are used to implement up to 31 bit shifts)
The count operand could be an immediate value or a register. The count is a positive value
which may be from to 31 and the destination operand is a signed integer. The count operand is
not affected by the operation. The data size may be 8, 16, or 32 bits. In the case of 32-bit shifts,
the destination operand must be the least significant half of a double word register.
°
Note:
- a double word register is double-word aligned in the register file (Rl:RO, R3:R2, R5:R4, or
R7:R6).
- If shift count (count in Rs) exceeds data size, the count value is truncated to 5 bits, else for
immediate shift count, shifting is continued until count is 0.
- a double word register is double-word aligned in the r~gister file (Rl:RO, R3:R2, R5:R4, or
R7:R6).
Size: Byte, Word, Double Word
Flags Updated: C, N, Z
XA User Guide
158
3124/97
Rd,Rs
ASR
2
Bytes:
Clocks:
For 8/16 bit shifts -> 4 + 1 for each 2 bits of shift
For 32 bit shifts -> 6 + 1 for each 2 bits of shift
Operation:
(Rd)
Encoding:
ASR
Rd, #data4
Rd,#data5
Operation:
(Rd)
r--l
MSB--~~ LSB~
~L....
I
___
Bytes:
Clocks:
2
For 8/16 bit shifts -> 4 + 1 for each 2 bits of shift
For 32 bit shifts -> 6 + 1 for each 2 bits of shift
Encoding:
(for byte and word data sizes)
(for double word data size)
I
1I 0
I
1 I SZ1 I SZO 11
I
0 I lL-d--L.l_d-,--I_d'..l..-I_ _
#d_ata_5_---'
Note: SZlISZO =00: byte operation; SZlISZO = 10: word operation; SZlISZO =11: double word
operation.
3/24/97
159
Addressing Modes and Data Types
BCC
Branch if carry clear
Syntax:
BCC
rel8
Operation:
(PC) <-- (PC) + 2
if (C) =0 then
(PC) <-- (PC + reI8*2)
(PC.O) <-- 0
Description: The branch is taken if the last arithmetic instruction (or other instruction that updates
the C flag) did not generate a carry (the carry flag contains a 0). If Carry is clear, the program
execution branches at the location of the PC, plus the specified displacement, rel8. The branch
range is +254 bytes to -256 bytes, with the limitation that the target address isword aligned in code
memory.
Note: Refer to section 6.3 for details of branch range
Size: Bit
Flags Updated: none
2
6 (t) / 3 (nt)
Bytes:
Clocks:
Encoding:
rela
1
XA User Guide
160
3124/97
BCS
Branch if carry set
Syntax:
BCS
rel8
Operation:
(PC) <-- (PC) + 2
if (C) = 1 then
(PC) <-- (PC + reI8*2)
(PC.O) <-- 0
Description: The branch is taken if the last arithmetic instruction (or other instruction that updates
the C flag) generated a carry (the carry flag contains a 1). The branch range is +254 bytes to -256
bytes, with the limitation that the target address is word aligned in code memory.
Note: Refer to section 6.3 for details of branch range
Size: Bit
Flags Updated: none
Bytes:
Clocks:
2
6t/3nt
Encoding:
rel8
3124/97
161
Addressing Modes and Data Types
BEQ
Branch if zero
Syntax:
BEQ
rel8
Operation:
(PC) <-- (PC) + 2
if (Z) = 1 then
(PC) <-- (PC + reI8*2)
(PC.O) <-- 0
Description: The branch is taken if the lastarithmetic/logic instruction (or other instruction that
updates the Z flag) had a result of zero (the Z flag contains a 1). The branch range is +254 bytes to
-256 bytes, with the limitation that the target address is word aligned in code memory.
Note: Refer to section 6.3 for details of branch range
Size: Bit
Flags Updated: none
Bytes:
Clocks:
2
6t/3nt
Encoding:
rela
1
XA User Guide
162
3124/97
BG
Branch if greater than (unsigned)
Syntax:
BG rel8
Operation:
(PC) <-- (PC) + 2
if (Z) OR (C) = 0 then
(PC) <-- (PC + reI8*2)
(PC.O)
<-- 0
Description: The branch is taken if the last compare instruction had a destination value that was
greater than the source value, in an unsigned operation. The branch range is +254 bytes to -256
bytes, with the limitation that the target address is word aligned in code memory.
Note: Refer to section 6.3 for details of branch range
Size: Bit
Flags Updated: none
Bytes:
Clocks:
2
6t13nt
Encoding:
1
3124/97
1
1
1
rela
1 01 01 01
163
Addressing Modes and Data Types
BGE
Branch if greater than or equal to (signed)
Syntax:
BOE rel8
Operation:
(PC)
<-- (PC) + 2
if (N) XOR (V) =0 then
(PC) <-- (PC + reI8*2)
(PC.O)
<-- 0
Description: The branch is taken if the last compare instruction had a destination value that was
greater than or equal to the source value, in a signed operation. The branch range is +254 bytes to
-256 bytes, with the limitation that the target address is word aligned in code memory.
Note: Refer to section 6.3 for details of branch range
Size: Bit
Flags Updated: none
Bytes:
Clocks:
2
6t/3nt
Encoding:
1
XA User Guide
1
1 01
1
rala
I 01
164
3/24/97
BGT
Branch if greater than (signed)
Syntax:
BGT rel8
Operation:
(PC) <-- (PC) + 2
if «Z) OR (N» XOR (V)
(PC) <-- (PC + reI8*2)
(Pc.a) <-- a
= a then
Description: The branch is taken if the last compare instruction had a destination value that was
greater than the source value, in a signed operation, The branch range is +254 bytes to -256 bytes,
with the limitation that the target address is word aligned in code memory.
Note: Refer to section 6.3 for details of branch range
Size: Bit
Flags Updated: none
Bytes:
Clocks:
2
6t13nt
Encoding:
1
3/24/97
I 0I 0I
165
rela
Addressing Modes and Data Types
BKPT
Breakpoint
Syntax:
BKPT
Operation:
(PC) <-- (PC) + 1
(SSP) <-- (SSP) - 6
((SSP)) <-- (PC)
((SSP)) <-- (PSW)
(PSW) <-- code memory (bkpt vector)
(PC.lS-0) <-- code memory (bkpt vector)
(PC.23-16) <-- 0; (PC.O) <-- 0
Description: Causes a breakpoint trap. The breakpoint trap acts like an immediate interrupt, using
a vector to call a specific piece of code that will be executed in system mode. This instruction is
intended for use in emulator systems to provide a simple method of implementing hardware
breakpoints.
For a breakpoint to work properly under all conditions, it must have an instruction length no greater
than the smallest other instruction on the processor, in this case the one byte NOP. This
requirement exists because a breakpoint may be inserted in place of a NOP that is followed by
another instruction that is branched to or otherwise executed without going through the breakpoint.
If the breakpoint instruction were longer than the NOP, it would corrupt the next instruction in
sequence if that instruction were executed.
The opcode for the breakpoint instruction is specifically assigned to be all ones (FFh). This is so
that un-programmed EPROM code memory will contain breakpoints. Similarly, the NOP
instruction is assigned to opcode 00 so that both "blank" code states map to innocuous instructions.
Size: None
Flags Updated: nones
Bytes:
Clocks:
1
23/19 (PZ)
Encoding:
1
1
1
1
5. All flags are affected during the PSW load from the vector table. It is possible that these flags are restored
by the debugger, but does not have to be the case.
XA User Guide
166
3/24/97
BL
Branch if less than or equal to (unsigned)
Syntax:
BL
Operation:
(PC) <-- (PC) + 2
if (Z) OR (C) = 1 then
(PC) <-- (PC + reI8*2)
(PC.O)
rel8
<-- 0
Description: The branch is taken if the last compare instruction had a destination value that was
less than or equal to the source value, in an unsigned operation. The branch range is +254 bytes to
-256 bytes, with the limitation that the target address is word aligned in code memory.
Note: Refer to section 6.3 for details of branch range
Size: Bit
Flags Updated: none
Bytes:
Clocks:
2
6t/3nt
Encoding:
11111111111010111
3124/97
rela
167
Addressing Modes and Data Types
BLE
Branch if less than or equal (signed)
Syntax:
BLE
Operation:
(PC)
rel8
<-- (PC) + 2
if ((Z) OR (N» XOR (V)
(PC) <-- (PC + reI8*2)
(PC.O)
= 1 then
<-- 0
Description: The branch is taken if the last compare instruction had a destination value that was
less than or equal to the source value, in a signed operation. The branch range is +254 bytes to256 bytes, with the limitation that the target address is word aligned in code memory.
Note: Refer to section 6.3 for details of branch range
Size: Bit
Flags Updated: none
Bytes:
Clocks:
2
6t13nt
Encoding:
rela
1
XA User Guide
168
3/24/97
BLT
Branch if less than (signed)
Syntax:
BLT
Operation:
(PC) <-- (PC)
re18
+2
if (N) XOR (V) = 1 then
(PC) <-- (PC + re18*2)
(PC.O)
<-- 0
Description: The branch is taken if the last compare instruction had a destination value that was
less than the source value, in a signed operation. The branch range is +254 bytes to -256 bytes, with
the limitation that the target address is word aligned in code memory.
Note: Refer to section .6.3 for details of branch range
Size: Bit
Flags Updated: none
Bytes:
Clocks:
2
6t/3nt
Encoding:
rel8
3/24/97
169
Addressing Modes and Data Types
BMI
Branch if negative
Syntax:
BMI
Operation:
(PC) <-- (PC) + 2
if (N) = 1 then
(PC) <-- (PC + reI8*2)
(Pc.a) <-- a
rel8
Description: The branch is. taken if the last arithmetic/logic instruction (or other instruction that
updates the N flag) had a result that is less than a (the N flag contains a 1). The branch range is
+254 bytes to -256 bytes, with the limitation that the target address is word aligned in code
memory.
Note: Refer to section 6.3 for details of branch range
Size: Bit
Flags Updated: none
Bytes:
Clocks:
2
6t13nt
Encoding:
1
XA User Guide
1 01
rel8
1
170
3124/97
BNE
Branch if not equal
Syntax:
BNE
Operation:
(PC) <-- (PC) + 2
if (Z) =0 then
(PC) <-- (PC + reI8*2)
(PC.O) <-- 0
rel8
Description: The branch is taken if the last arithmetic/logic instruction (or other instruction that
updates the Z flag) had a non-zero result (the Z flag contains a 0). The branch range is +254 bytes
to -256 bytes, with the limitation that the target address is word aligned in code memory.
Note: Refer to section 6.3 for details of branch range
Size: Bit
Flags Updated: none
Bytes:
Clocks:
2
6t/3nt
Encoding:
rela
3/24/97
171
Addressing Modes and Data Types
BNV
Branch if no overflow
Syntax:
BNV
Operation:
(PC) <-- (PC) + 2
if (V) = 0 then
(PC) <-- (PC + re18*2)
(PC.O) <-- 0
rel8
Description: The branch is taken if the last arithmetic/logic instruction (or other instruction that
updates the V flag) did not generate an overflow (The V flag contains a 0). The branch range is
+254 bytes to -256 bytes, with the limitation that the target address is word aligned in code
memory.
Note: Refer to section 6.3 for details of branch range
Size: Bit
Flags Updated: none
Bytes:
Clocks:
2
6t/3nt
Encoding:
rel8
1
XA User Guide
172
3124/97
BOV
Branch if overflow flag
Syntax:
BOV rel8
Operation:
(PC) <-- (PC) + 2
if (V) = 1 then
(PC) <-- (PC + re18*2)
(PC.O) <-- 0
Description: The branch is taken if the last arithmetic/logic instruction (or other instruction that
updates the V flag) generated an overflow (the V flag contains a 1). The branch range is +254 bytes
to -256 bytes, with the limitation that the target address is word aligned in code memory.
Note: Refer to section 6.3 for details of branch range
Size: Bit
Flags Updated: none
Bytes:
Clocks:
2
6t/3nt
Encoding:
rel8
3/24/97
173
Addressing Modes and Data Types
BPL
Branch if positive
Syntax:
BPL
Operation:
(PC) <-- (PC) + 2
if (N) = 0 then
(PC) <-- (PC + reI8*2)
(PC.O)
re18
<-- 0
Description: The branch is taken if the last arithmetic/logic instruction (or other instruction that
updates the N flag) had a result that is greater than 0 (the N flag contains a 0). The branch range is
+254 bytes to -256 bytes, with the limitation that the target address is word aligned in code
memory.
Note: Refer to section 6.3 for details of branch range
Size: Bit
Flags Updated: none
Bytes:
Clocks:
2
6t13nt
Encoding:
1
XA User Guide
1
I 0I
I0I
rel8
174
3/24/97
BR
Unconditional Branch
Syntax:
BR
Operation:
(PC) <-- (PC) + 2
(PC) <-- (PC + re18*2)
(PC.O) <-- 0
rel8
Description: Branches unconditionally in the range of +254 bytes to -256 bytes, with the limitation
that the target address is word aligned in code memory
0
Note: Refer to section 6.3 for details of branch range
Size: None
Flags Updated: none
Bytes:
Clocks:
2
6
Encoding:
1
3/24/97
1
1
1
1
1
I0I
175
rela
Addressing Modes and Data Types
CALL
Call Subroutine Relative
Syntax:
CALL rel16
Operation:
(PC) <-- (PC) + 3
(SP) <-- (SP) - 4
«SP» <-- (PC.23-0)
(PC) <-- (PC + re116*2)
(PC.O) <-- 0
Description: Branches unconditionally in the range of +65,534 bytes to -65,536 bytes, with the
limitation that the target address is word aligned in code memory. The 24-bit return address is
saved on the stack.
Note: if the XA is in page 0 mode, only a 16-bit address will be pushed to the stack.
Note: Refer to section 6.3 for details of branch range
Size: None
Flags Updated: none
Bytes:
Clocks:
3
7/4(PZ)
Encoding:
byte 2: upper 8 bits of re116
byte 3: lower 8 bits of rel16
XA User Guide
176
3/24/97
CALL
Call Subroutine Indirect
Syntax:
CALL
Operation:
(PC) <-- (PC) + 2
(SP) <-- (SP) - 4
((SP» <-- (PC.23-0)
(PC.15-1) <-- (Rs.15-1)
(PC.O) <-- 0
[Rs]
Description: Causes an unconditional branch to the address contained in the operand register,
anywhere within the 64K page following the CALL instruction.The return address (the address
following the CALL instruction) of the calling routine is saved on the stack. The target address
must be word aligned, as CALL or branch will force PC.bitO to O.
Note:
(I) Since the PC always points to the instruction following the CALL instruction and if that
happens to be on a different page, then the called routine should be located in that page (64K)
(2) if the XA is in page 0 mode, only a I6-bit address will be pushed to the stack.
Size: None
Flags Updated: none
Bytes:
Clocks:
2
8/5 (PZ)
Encoding:
111
3/24/97
0
10 10
1
1
177
Addressing Modes and Data Types
CJNE
Compare and jump if not equal
Syntax:
CJNE
Operation:
(PC) <-- (PC) + # of instruction bytes
(dest) - (direct)
(result not stored)
if (Z) = 0 then
(PC) <-- (PC + reI8*2); (PC.O) <-- 0
dest, src, rel8
Description: The byte or word specified by the source operand is compared to the variable
specified by the destination operand and the status flags are updated. Jump to the specified address
if the values are not equal. The source and destination data are not affected by the operation. The
branch range is +254 bytes to -256 bytes, with the limitation that the target address is word aligned
in code memory.
Note: Refer to section 6.3 for details of jump range
Size: Byte-Byte, Word-Word
Flags Updated: C, N, Z
(Note: this particular type of compare must not update the V or AC flags to duplicate the 80C51
function.)
CJNE
Rd, direct, rel8
Bytes:
Clocks:
Encoding:
4
10tl7nt
I did
11 1 1 1 1 1 0 1sz 1 0 11 1 0 1
d
d O l direct: 3 bitsl
byte 3: lower 8 bits of direct
byte 4: rel8
XA User Guide
178
3/24/97
CJNE
Rd, #data8, rel8
Bytes:
Clocks:
4
9t/6nt
Encoding:
1
byte 3: rel8
byte 4: data#8
CJNE Rd, #dataI6, rel8
Bytes:
Clocks:
5
9t16nt
Encoding:
1111\1101110111
byte 3: rel8
byte 4: upper 8 bits of #datal6
byte 5: lower 8 bits of #datal6
CJNE
[Rd], #data8, rel8
Bytes:
Clocks:
Encoding:
4
IOt/7nt
""---11 -.,...-,---'1r---r-I---'0I-O~I---"01--'----'
byte 3: rel8
byte 4: #data8
CJNE
[Rd], #data16, rel8
Bytes:
Clocks:
5
lOtl7nt
Encoding:
I~
1-""'-1---'11r-1-""'-1-'01-1~1---"0'-1.,....----,
byte 3: re18
byte 4: upper 8 bits of #data16
byte 5: lower 8 bits of #data16
3124/97
179
Addressing Modes and Data Types
CLR
Clear Bit
Syntax:
CLR bit
Operation:
(bit) <-- 0
Description: Writes a 0 (clears) to the specified bit.
Size: Bit
Flags Updated: none
Bytes:
Clocks:
3
4
Encoding:
r--I
O--r-I-0Ir--O--r-I-01r--1- r O
- -Ir--O--r-I----'0
I 0
I0I0I 0I0I0 I
bit: 2
I
byte 3: lower 8 bits of bit address
XA User Guide
180
3/24/97
CMP
Integer Compare
Syntax:
CMP dest, src
Operation:
dest - src
Description: The byte or word specified by the source operand is compared to the specified
destination operand by performing a twos complement binary subtraction of src from dest. The
flags are set according to the rules of subtraction. The source and destination data are not affected
by the operation.
Size: byte-byte, word-word
Flags Updated: C, AC, V, N, Z
CMP
Rd, Rs
Operation:
(Rd) - (Rs)
Bytes:
Clocks:
2
3
Encoding:
aI
CMP
1
I a I a Isz I a I a I
1
I
Rd, [Rs]
Operation:
(Rd) - ((WS:Rs))
Bytes:
Clocks:
2
4
Encoding:
aI
3/24/97
1
I a I a Isz I a I 1 I a I
181
d d d dais
slsl
Addressing Modes and Data Types
CMP
[Rd], Rs
Operation:
«WS:Rd» - (Rs)
Bytes:
Clocks:
Encoding:
2
4
1'--0--'-11"""----'0
1 "'--1---'0I-O--r-IS-Z~IO---rI-
CMP
d
d
d
Rd, [Rs+offset8]
Bytes:
Clocks:
Operation:
Encoding:
3
6
(Rd) - «WS:Rs)+offset8)
byte 3: offset8
CMP
[Rd+offset8], Rs
Bytes:
Clocks:
Operation:
Encoding:
3
6
«WS:Rd)+offset8) - (Rs)
byte 3: offset8
CMP
Rd, [Rs+offset 16]
Bytes:
Clocks:
Operation:
Encoding:
4
6
(Rd) - «WS:Rs)+offset16)
1"----0--r-I-11"----0-'--1-0I"----SZ-'--I-1"---0-'--1---.
byte 3: upper 8 bits of offset 16
byte 4: lower 8 bits of offset 16
XA User Guide
182
3/24/97
CMP
[Rd+offset16], Rs
Bytes:
Clocks:
Operation:
Encoding:
4
6
((WS:Rd)+offset16) - (Rs)
0-"-,-1 ---'0,-O-r-",8-Z"---,1--r,-0-'--,--'1
'--1
-'--1
byte 3: upper 8 bits of offset16
byte 4: lower 8 bits of offset 16
CMP
Rd, [Rs+]
Bytes:
Clocks:
Operation:
2
5
(Rd) - ((WS:Rs))
(Rs) <-- (Rs) + 1 (byte operation) or 2 (word operation)
Encoding:
....---,
0-r-,-1....---,0--'--,-0 8Z--'--'-0 1--'--,---'1
r--I
CMP
r--,
I
[Rd+], Rs
Bytes:
Clocks:
2
5
Operation:
((WS:Rd)) - (Rs)
(Rd) <-- (Rd) + 1 (byte operation) or 2 (word operation)
Encoding:
,'---0--'--1--1,'---0--'--1--0,""---8Z--'--1--0,""---1--'--1----.
CMP
direct, Rs
Bytes:
Clocks:
Operation:
Encoding:
,0
3
4
(direct) - (Rs)
I 1 I 0 I 0 I8Z I
Idirect: 3 bits'
o
byte 3: lower 8 bits of direct
3/24/97
183
Addressing Modes and Data Types
CMP
Rd, direct
Bytes:
Clocks:
Operation:
Encoding:
3
4
(Rd) - (direct)
1""-0--'-1-1""--1----TO1-0"""-1S-Z
---..,.--~O
1did 1did 10 1direct: 3 bitsl
-r-I
byte 3: lower 8 bits of direct
CMP
Rd, #data8
Bytes:
Clocks:
Operation:
Encoding:
3
3
(Rd) - #data8
111010110101011
byte 3: #data8
CMP
Rd, #data16
Bytes:
Clocks:
Operation:
Encoding:
4
3
(Rd) - #data16
1110101111101011
byte 3: upper 8 bits of #data16
byte 4: lower 8 bits of #data16
CMP
[Rd], #data8
Bytes:
Clocks:
Operation:
Encoding:
3
4
((WS:Rd» - #data8
1'--1-'-1-----01'--0-'-1-----11'--0-'-1-01'--1-'-1----'01
byte 3: #data8
XA User Guide
184
3/24/97
CMP
[Rd], #data16
Bytes:
Clocks:
Operation:
Encoding:
4
4
«WS:Rd)) - #data16
,'---1-,-,-----0,"---0-'-,-1,"---1-r-,-----0I..----r-I--'0I
byte 3: upper 8 bits of #data16
byte 4: lower 8 bits of #data16
CMP
[Rd+], #data8
Bytes:
Clocks:
Operation:
3
5
«WS:Rd)) - #data8
(Rd) <-- (Rd) + 1
Encoding:
1"--1--'-1-----01"--0--'-,-1I"--O-r-I-0I..----r---.
byte 3: #data8
CMP
[Rd+], #data16
Bytes:
Clocks:
Operation:
4
5
«WS:Rd)) - #data16
(Rd) <-- (Rd) + 2
Encoding:
byte 3: upper 8 bits of #data16
byte 4: lower 8 bits of #data16
CMP
[Rd+offset8], #data8
Bytes:
Clocks:
Operation:
Encoding:
4
6
«WS:Rd)+offset8) - #data8
11101011101
1
0 0
1
byte 3: offset8
byte 4: #data8
3124/97
185
Addressing Modes and Data Types
CMP
[Rd+offset8], #data16
Bytes:
Clocks:
Operation:
Encoding:
5
6
«WS:Rd)+offset8) - #data16
\1\0\0\11 1 \100
byte 3: offset8
byte 4: upper 8 bits of #data16
byte 5: lower 8 bits of #data16
CMP
[Rd+offset16], #data8
Bytes:
Clocks:
Operation:
Encoding:
5
6
«WS:Rd)+offsetl6) - #data8
o
byte 3: upper 8 bits of offset16
byte 4: lower 8 bits of offset16
byte 5: #data8
CMP
[Rd+offsetl6], #data16
Bytes:
Clocks:
Operation:
Encoding:
6
6
«WS:Rd)+offsetl6) - #data16
o
byte 3:
byte 4:
byte 5:
byte 6:
upper 8 bits of offset 16
lower 8 bits of offset16
upper 8 bits of #data16
lower 8 bits of #data16
CMP
direct, #data8
Bytes:
Clocks:
Operation:
Encoding:
4
4
(direct) - #data8
o Idirect: 3 bits \
o
0
1 \0
I0
\
byte 3: lower 8 bits of direct
byte 4: #data8
XA User Guide
186
3124/97
CMP
direct, #datal6
Bytes:
Clocks:
Operation:
Encoding:
5
4
(direct) - #data 16
~~--~--~~--~~~~~
o Idirect: 3 bits 10
11101011111110
1
I0 I0
byte 3: lower 8 bits of direct
byte 4: upper 8 bits of #datal6
byte 5: lower 8 bits of #data 16
3124/97
187
Addressing Modes and Data Types
CPL
Integer Ones Complement
Syntax:
CPL
Operation:
Rd <-- (Rd)
Rd
Description: Performs a ones complement of the destination operand specified by the register Rd.
The result is stored back into Rd. The destination may be either a byte or a word.
Size: Byte, Word
Flags Updated: N, Z
Bytes:
Clocks:
2
3
Encoding:
1
I0I 0I
XA User Guide
188
3/24/97
DA
Decimal Adjust
Syntax:
DA
Operation:
if (Rd.3-0) > 9 or (AC) = 1
then (Rd.3-0) <-- (Rd.3-0) + 6
if (Rd.7-4) > 9 or (C) = 1
then (Rd.7-4) <-- (Rd.7-4) + 6
Rd
Description: Adjusts the destination register to BCD format (binary-coded decimal) following an
ADD or ADDC operation on BCD values. This operation may only be done on a byte register.
If the lower 4 bits of the destination value are greater than 9, or if the AC flag is set, 6 is added to
the value. This may cause the carry flag to be set if this addition caused a carry out of the upper 4
bits of the value.
If the upper 4 bits of the destination value are greater than 9, or if the carry flag was set by the add
to the lower bits, 60 hex is added to the value. This may cause the carry flag to be set if this addition
caused a carry out of the upper 4 bits of the value. Carry will never be cleared by the DA instruction
if it was already set.
Size: Byte
Flags Updated: C, N, Z
The carry flag may be set but not cleared. See the description of the carry flag update above.
Bytes:
Clocks:
2
4
Encoding:
I
0
1
0
0
000
0
Note: Please refer to the table on the next page.
3/24/97
189
Addressing Modes and Data Types
The following table shows the possible actions that may occur during the DA instruction, related
to the input conditions.
Table 6.6
Low nibble
(bits 3-0)
Carry to
high
nibble
AC
High
nibble
(bits 7-4)
Initial
Cflag
Number
added to
value
Resulting
Cflag
0-9
0
0
0-9
0
00
0
A-F
0
1
0-8
0
06
0
0-3*
1
0
0-9
0
06
0
0-9
0
0
A-F
0
60
1
A-F
0
1
9-F
0
66
1
0-3*
1
0
A-F
0
66
1
0-9
0
0
0- 2 **
1
60
1
A-F
0
1
0-2 **
1
66
1
0-3*
1
0
0- 3 ***
1
66
1
: The largest digit that could result from adding two BCD digits that caused the AC flag to
be set is 3. This is with an ADDC instruction where 9 + 9 + 1 (the carry flag) = 13 hex.
** : The largest digit that could result in the upper nibble of a value by adding two BCD bytes,
with no carry from the bottom nibble (the AC flag 0) is 2. For instance, 98 hex + 97 hex 12F
hex.
=
=
*** : The largest digit that could result in the upper nibble of a value by adding two BCD bytes,
with a carry from the bottom nibble (the AC flag =1) is 3. For instance, 99 hex + 99 hex =132 hex.
XA User Guide
190
3124/97
DIV.w
DIV.d
DIVU.h
DIVU.w
DIVU.d
16x8
32x16
8x8
16x8
32x16
Signed Division
Signed Division
Unsigned Division
Unsigned Division
Unsigned Division
Description: The byte or word specified by the source operand is divided into the variable
specified by the destination operand.
For DIVU.b, the destination operand can be any byte register that is the least significant byte of a
word register. For DIV.w and DIVU.w, the destination operand must be a word register, and for
DIV.d and DIVU.d, the destination operand must identify a word register that is the low-word of
a double-word register (see note below). The result is stored in the destination register as the
quotient (8 bits for DIVU.b, DIVU.w, DIV.w, and DIVU.w, and 16-bits for DIV.d and DIVU.d)
in the least significant half and the remainder (same size as the quotient), in the most significant
half (except for DIVU.b which stores the quotient in the destination as identified by the lower half
of a word register and the remainder at upper half of the same word register).
Note: a double word register is double-word aligned in the register file (R1:RO, R3:R2, R5:R4, or
R7:R6).
Size: Byte-Byte, Word-Byte, Double word-Word
Flags Updated: C, V, N, Z
The carry flag is always cleared. The V flag is set in the following cases, otherwise it is cleared:
- DIVU.b: V is set if a divide by 0 occurred. A divide by 0 also causes a hardware trap
to be generated.
- DIV.w, DIVU.w: V is set if the result of the divide is larger than 8 bits (the result does
not fit in the destination).
- DIV.d, DIVU.d: V is set if the result of the divide is larger than 16 bits (the result does
not fit in the destination).
The Z, and N flags are set based on the quotient (integer) portion of the result only and not on
the remainder.
Examples:
a) DIVU.b R4L, R4H - will store the result of the division of R4L by R4H in
R4L and R4H (quotient in register R4L, remainder in register R4H).
b) DIV.w RO, R2L - will store the result of word register RO divided by byte register
R2L in word register RO (quotient in register ROL, remainder in register ROH).
c) DIV.d R4,R2 - will store the result of double-word register R5:R4 divided by word
register R2 in double-word register R5:R4 (quotient in R4, remainder in R5)
3/24/97
191
Addressing Modes and Data Types
Note: For all divides except DIVU.b, the destination register size is the same as indicated by the
instruction (by the ".b", ".w", or ".d") and the source register is half that size.
DIV.w
Rd, Rs
(signed 16 bits / 8 bits --> 8 bit quotient, 8 bit remainder)
Bytes:
Clocks:
Operation:
2
14
(RdL) <-- 8-bit integer portion of (Rd) / (Rs).
(RdH) <-- 8-bit remainder of (Rd) / (Rs)
(signed divide)
Encoding:
1
1
1
DIV. w Rd, #data8
(signed 16 bits I 8 bits --> 8 bit quotient, 8 bit remainder)
Bytes:
Clocks:
Operation:
3
14
(RdL) <-- 8-bit integer portion of (Rd) l#data8
(RdH) <-- 8-bit remainder of (Rd) / #data8
(signed divide)
Encoding:
/1/1/1/0/1/0/01 0
1
byte 3: #data8
DIV.d Rd, Rs
(signed 32 bits / 16 bits --> 16 bit quotient, 16 bit remainder)
Bytes:
Clocks:
Operation:
2
24
(Rd) <-- 16-bit integer portion of (Rd) / (Rs)
(Rd+1)<-- 16-bit remainder of (Rd) / (Rs)
(signed divide)
Encoding:
1
XA User Guide
1 1I 0 / 1
1
192
3/24/97
DIV.d Rd, #datal6
(signed 32 bits 116 bits --> 16 bit quotient, 16 bit remainder)
Bytes:
Clocks:
Operation:
4
24
(Rd) <-- 16-bit integer portion of (Rd) 1 #datal6
(Rd+l)<-- 16-bit remainder of (Rd) I #datal6
(signed divide)
Encoding:
1111111011101011
byte 3: upper 8 bits of #data16
byte 4: lower 8 bits of #datal6
DIVU.b Rd, Rs
(unsigned 8 bits 18 bits --> 8 bit quotient, 8 bit remainder)
Bytes:
Clocks:
Operation:
2
12
(RdL) <-- 8-bit integer portion of (RdL) I (Rs)
(RdH) <-- 8-bit remainder of (RdL) 1 (Rs)
(unsigned divide)
Encoding:
DIVU.b Rd, #data8
(unsigned 8 bits 1 8 bits --> 8 bit quotient, 8 bit remainder)
Bytes:
Clocks:
Operation:
3
12
(RdL) <-- 8-bit integer portion of (RdL) 1 #data8
(RdH) ,<-- 8-bit remainder of (RdL) 1 #data8
(unsigned divide)
Encoding:
byte 3: #data8
3/24/97
193
Addressing Modes and Data Types
DIVU.w Rd, Rs
(unsigned 16 bits / 8 bits --> 8 bit quotient, 8 bit remainder) ,
Bytes:
Clocks:
Operation:
2
12
(RdL) <-- 8-bit integer portion of (Rd) / (Rs)
(RdH) <-- 8-bit remainder of (Rd) / (Rs)
(unsigned divide)
Encoding:
1111110101110111
DIVU.w Rd, #data8
(unsigned 16 bits / 8 bits --> 8 bit quotient, 8 bit remainder)
Bytes:
Clocks:
3
12
Operation:
(RdL) <-- 8-bit integer portion of (Rd) / #data8
(RdH) <-- 8-bit remainder of (Rd) / #data8
(unsigned divide)
Encoding:
byte 3: #data8
DIVU.d Rd, Rs
(unsigned 32 bits / 16 bits --> 16 bit quotient, 16 bit remainder)
Bytes:
Clocks:
Operation:
2
22
(Rd) <-- 16-bit integer portion of (Rd)/ (Rs)
(Rd+ 1) <-- 16-bit remainder of (Rd) / (Rs)
(unsigned divide)
Encoding:
Idldldlol slslsls
XA User Guide
194
3/24/97
DIVU.d Rd, #datal6
(unsigned 32 bits 116 bits --> 16 bit quotient. 16 bit remainder)
Bytes:
Clocks:
Operation:
4
22
(Rd) <-- 16-bit integer portion of (Rd) 1 #datal6
(Rd+l)<-- 16-bit remainder of (Rd) 1 #data16
(unsigned divide)
Encoding:
1111111011101011
byte 3: upper 8 bits of #data 16
byte 4: lower 8 bits of #datal6
3124/97
195
Addressing Modes and Data Types
DJNZ
Decrement and jump if not zero
Syntax:
DJNZ
Operation:
(PC) <-- (PC) + 3
(dest) <-- (dest) - 1
if (Z) =0 then
(PC) <-- (PC + reI8*2); (PC.O) <-- 0
dest, rel8
Description: Controls a loop of instructions. The parameters are: a condition code (Z), a counter
(register or memory), and a displacement value. The instruction first decrements the counter by
one, tests the condition if the result of decrement is 0 (for termination of the loop); if it is false,
execution continues with the next instruction. If true, execution branches to the location indicated
by the current value of the PC plus the sign extended displacement. The value in the PC is the
address of the instruction following DJNZ.
The branch range is +254 bytes to -256 bytes, with the limitation that the target address is word
aligned in code memory. The destination operand could be byte or word.
Note: Refer to section 6.3 for details of jump range
Size: Byte, Word
Flags Updated: N, Z
DJNZ
Rd, rel8
Bytes:
Clocks:
Encoding:
3
8t/5nt
\1 \ 0 \ 0 \ 0 \ SZ \1 \1
1
byte 3: rel8
DJNZ
direct, rel8
Bytes:
Clocks:
Encoding:
4
9t/5nt
\1 1 1 1 1 1 0 1SZ 1 0 11
I0 I I 0 1 0 1 0 1 0 1 1 1direct: 3 bits 1
byte 3: lower 8 bits of direct
byte 4: rel8
XA User Guide
196
3124/97
FCALL
Far Call Subroutine Absolute
Syntax:
FCALL
Operation:
(PC) <-- (PC) + 4
(SP) <-- (SP) - 4
«SP)) <-- (PC)
(PC.23-0) <-- addr24
(PC.O) <-- 0
addr24
Description: Causes an unconditional branch to the absolute memory location specified by the
second operand, anywhere in the 16 megabytes XA address space. The 24-bit return address (the
address following the CALL instruction) of the calling routine is saved on the stack. The target
address must be word aligned as CALL or branch will force PC.bitO to O.
Note: if the XA is in page 0 mode, only a 16-bit address will be pushed to the stack.
Size: None
Flags Updated: none
Bytes:
Clocks:
4
12/9(PZ)
Encoding:
1111000
o
I address: middle 8 bits (bits 15-8) I
0
byte 3: lower 8 bits of address (bits 7-0)
byte 4: upper 8 bits of address (bits 23-16)
3124/97
197
Addressing Modes and Data Types
FJMP
Far Jump Absolute
Syntax:
FJMP
Operation:
(PC.23-0) <-- addr24
(PC.O) <-- 0
addr24
Description: Causes an unconditional branch to the absolute memory location specified by the
second operand, anywhere in the 16 megabytes XA address space.
Note: The target address must be word aligned as JMP always forces PC to an even address.
Note: if the XA is in page 0 mode, only 16-bits of the address will be used.
Size: None
Flags Updated: none
Bytes:
Clocks:
4
7
Encoding:
11 11
0
o
1
0
I address: middle 8 bits (bits 15-8) I
0
byte 3: lower 8 bits of address (bits 7-0)
byte 4: upper 8 bits of address (bits 23-16)
XA User Guide
198
3/24/97
JB
Relative Jump if bit set
Syntax:
JB
Operation:
bit, rel8
(PC) <-- (PC) + 4
1 then
(PC) <-- (PC + reI8*2);
(PC.O) <-- 0
if (bit)
=
Description: If the specified bit is a one, program execution jumps at the location of the PC, plus
the specified displacement. If the specified bit is clear, the instruction following JB is executed. The
branch range is +254 bytes to -256 bytes, with the limitation that the target address is word aligned
in code memory.
Note: Refer to section 6.3 for details of jump range
Size: Bit
Flags Updated: none
Bytes:
Clocks:
4
6t13nt
Encoding:
I 11 0I 0I 0I 0 I 0 I bit: 2 I
11101011101111
byte 3: lower 8 bits of bit address
byte 4: rel8
3124/97
199
Addressing Modes and Data Types
JBC
Jump if bit is set then clear bit
Syntax:
JBC
Operation:
(PC) <-- (PC) + 4
if (bit) = 1 then
(PC) <-- (PC + reI8*2);
(PC.O) <-- 0; (bit) <-- 0
bit, rel8
Description: If the bit speCified is set, branch to the address pointed to by the PC plus the specified
displacement. The specified bit is then cleared allowing implementation of semaphore operations.
If the specified bit is clear, the instruction following JBC is executed. The branch range is +254
bytes to -256 bytes, with the limitation that the target address is word aligned in code memory.
Note: Refer to section 6.3 for details of jump range
Size: Bit
Flags Updated: none
Bytes:
Clocks:
4
6t/3nt
Encoding:
0 1 0 1
byte 3: lower 8 bits of bit address
byte 4: rel8
11
1
XA User Guide
1
1
200
1
1
1
1
0
I 0 I 0 I 0 I bit: 2 I
3/24/97
JMP
Relative Jump
Syntax:
JMP
Operation:
(PC) <-- (PC)
rel16
+3
(PC) <-- (PC + rel16*2)
(PC.O) <-- 0
Description: Jumps unconditionally. The branch range is +65,535 bytes to -65,536 bytes, with the
limitation that the target address is word aligned in code memory.
Note: Refer to section 6.3 for details of jump range
Size: None
Flags Updated: none
Bytes:
Clocks:
3
6
Encoding:
11 11
0
o
1
0
re116: upper 8 bits
1
byte 3: lower 8 bits of rel16
3124/97
201
Addressing Modes and Data Types
JMP
Jump Indirect through Register
Syntax:
IMP
Operation:
(PC) <-- (PC) + 2
(PC. IS-I) <-- (Rs.IS-I)
(PC.O) <-- 0
[Rs]
(note that PC.23-16 is not affected)
Description: Causes an unconditional branch to the address contained in the operand word
register, anywhere within the 64K code page following the JMP instruction. The value of the PC
used in the target address calculation is the address of the instruction following the IMP
instruction.
The target address must be word aligned as IMP will force PC.bitO to O.
Size: none
Flags Updated: none
Bytes:
Clocks:
2
7
Encoding:
I0I 1
1
XA User Guide
202
3124/97
JMP
Jump indirect through register
Syntax:
JMP
Operation:
(PC) <-- (PC) + 2
(PCIS-I) <-- (A) + (DPTR)
(PC.O) <-- a
[A+DPTR]
Description: Causes an unconditional branch to the address formed by the sum of the 80CS1
compatibility registers A and DPTR, anywhere within the 64K code page following the JMP
instruction. This instruction is included for 80CS1 compatibility. See Chapter 9 for details of
80CS1 compatibility features.
Note: The target address must be word aligned as JMP will force PC.bitO to O.
Flags Updated: none
Bytes:
Clocks:
2
S
Note: A and DPTR are pre-defined registers used for 80CS1 code translation.
Encoding:
3/24/97
203
Addressing Modes and Data Types
JMP
Jump double indirect
Syntax:
JMP
Operation:
(PC) <-- (PC) + 2
(PC.lS-0) <-- code memory ((WS:Rs»
(PC.O) <-- 0
(Rs) <-- (Rs) + 2
[[Rs+ ]]
Description: Causes an unconditional branch to the address contained in memory at the address
pointed to by the register specified in the instruction. The specified register is post-incremented.
This 2-byte instruction may be used to compress code size by using it to index through a table of
procedure addresses that are accessed in sequence. Each procedure would end with another JMP
[[R+]] that would immediately go to the next procedure whose address is in the table.
The procedures must be located in the same 64K address page of the executed "Jump Doubleindirect" instruction (although the table could be in any page). This instruction can result in
substantial code compression and hence cost reduction through smaller memory requirements. The
register pointer (index to the table) being automatically post-incremented after the execution of the
instruction. The 24-bit address is identified by combining the low order 16-bit of the PC and either
of high 8-bits of PC or the contents of a byte-size CS register as chosen by the program through a
segment select Special Function Register (SFR).
Note: The subroutine addresses must be word aligned as JMP will force PC.bitO to O.
Flags Updated: none
Bytes:
Clocks:
2
8
Encoding:
1
XA User Guide
1
0
o
1
o
204
3/24/97
JNB
Jump if bit not set
Syntax:
JNB
bit, re18
(PC) <-- (PC) + 4
if (bit) = 0 then
(PC. 15-0) <--, (PC + re18*2); (PC.O) <-- 0
Operation:
Description: If the specified bit is a zero, program execution jumps at the location of the PC, plus
the specified displacement. If the specified bit is set, the instruction following JB is executed.
The branch range is +254 bytes to -256 bytes, with the limitation that the target address is word
aligned in code memory.
Note: Refer to section 6.3 for details of jump range
Size: Bit
Flags Updated: none
Bytes:
Clocks:
4
6t/3nt
Encoding:
1110101110/111
I
011 0 1010
bit: 2
byte 3: lower 8 bits of bit address
byte 4: rel8
3/24/97
205
Addressing Modes and Data Types
JNZ
Jump if the A register is not zero
Syntax:
JNZ
Operation:
(PC) <-- (PC) + 2
if (A) not equal to 0, then
(PC. 15-0) <-- (PC + reI8*2); (PC.O) <-- 0
rel8
Description: A relative branch is taken if the contents of the. 80C51 Accumulator are not zero. The
branch range is +254 bytes to -256 bytes, with the limitation that the target address is word aligned
in code memory.
The contents of the accumulator remain unaffected. This instruction is included for 80C51
compatibility. See Chapter 9 for details of 80C51 compatibility features.
Note: Refer to section 6.3 for details of jump range
Size: Bit
Flags Updated: none
Bytes!
Clocks:
2
6t13nt
Encoding:
1
XA User Guide
1
1 01
1
1
rela
1 01
206
3124/97
JZ
Jump if the A register is zero
Syntax:
JZ
Operation:
(PC) <-- (PC) + 2
If (A) = 0 then
(PC.lS-0) <-- (PC + reI8*2);
(PC.O) <-- 0
rel8
Description: A relative branch is taken if the contents of the 80CSI Accumulator are zero. The
branch range is +254 bytes to -256 bytes, with the limitation that the target address is word aligned
in code memory.
The contents of the accumulator remain unaffected. This instruction is included for 80CSI
compatibility. See Chapter 9 for details of 80CSI compatibility features.
Note: Refer to section 6.3 for details of jump range
Size: Bit
Flags Updated: none
Bytes:
Clocks:
2
6t13nt
Encoding:
11111110111110101
3/24/97
rela
207
Addressing Modes and Data Types
LEA
Load effective address
Syntax:
LEA
Operation:
(Rd) <-- (Rs)+offsetSI16
Rd, Rs+offsetS/16
Description: The word specified by the source operand is added to the offset value and the result
is stored into the register specified by the destination operand. The source and destination operands
are both registers. The offset value is an immediate data field of either S or 16 bits in length. The
source data is not affected by the operation.
This instruction mimics the address calculation done during other instructions when the register
indirect with offset addressing mode is used, allowing the resulting address to be saved for other
purposes.
Note: The result of this operation is always a word since it duplicates the calculation ofthe indirect
with offset addressing mode.
Size: Word-Word
Flags Updated: none
LEA
Rd, Rs+offset8
Bytes:
Clocks:
Encoding:
1
3
3
0 1 1 1 01 01 01 0 0 0
byte 3: offset8
,
LEA
Rd, Rs+offset 16
Bytes:
Clocks:
Operation:
Encoding:
4
3
(Rd) <-- (Rs)+offsetI6
10 1 1 1 01 01
1
10 0 0
byte 3: upper 8 bits of offset 16
byte 4: lower 8 bits of offset16
XA User Guide
208
3/24/97
LSR
Logical Shift Right
Syntax:
LSR
dest, count
Operation:
Do While (count not equal to 0)
(C) <- (dest.O)
(dest.bit n) <- (dest.bit n+l)
(dest.msb) <- 0
count = count-1
End While
Description: If the count operand is greater than the variable specified by the destination
operand is logically shifted right by the number of bits specified by the count operand. The
MSBs of the result are filled with zeroes.The low-order bits are shifted out through the C (carry)
bit. If the count operand is 0, no shift is performed. The count operand is a positive value which
may be from to 31. The data size may be 8, 16, or 32 bits. In the case of 32-bit shifts, the
destination operand must be the least significant half of a double word register. The count is not
affected by the operation.
°
Note:
- For Logical Shift Left, use ASL ignoring the N flag.
- If shift count (count in Rs) exceeds data size, the count value is truncated to 5 bits, else for
immediate shift count, shifting is continued until count is 0.
- a double word register is double-word aligned in the register file (R1:RO, R3:R2, R5:R4, or
R7:R6).
Size: Byte, Word, Double Word
Flags Updated: C, N, Z
LSR
Rd, Rs
°
(N = after an LSR unless count =0, then it is unchanged)
(Rs
=Byte-register)
Operation:
°-.j
Bytes:
Clocks:
(Rd)
MSB -----I~~LSB ~
2
For 8/16 bit shifts --> 4+1 for each 2 bits of shift
For 32 bit shifts --> 6+ 1 for each 2 bits of shift
Encoding:
3/24/97
209
Addressing Modes and Data Types
LSR
Rd, #data4
Rd, #data5
Operation:
(Rd)
o --.j
Bytes:
Clocks:
MSB ---I~.LSB ~
2
For 8/16 bit shifts --> 4+ 1 for each 2 bits of shift
For 32 bit shifts --> 6+ 1 for each 2 bits of shift
Encoding:
(for byte and word data sizes)
#data4
(for double word data size)
#data5
1 1 1 1 0 1 t 1111 1 0 1 0 1
Note: SZlISZO =00: byte operation; SZlISZO = 01: reserved; SZlISZO = 10: word operation;
SZlISZO = 11: double word operation.
XA User Guide
210
3124/97
MOV
Move Data
Syntax:
MOV
Operation:
dest <- src
dest, src
Description: The byte or word specified by the source operand is copied into the variable specified
by the destination operand. The source data is not affected by the operation.
Source and destination operands may be a register in the register file, an indirect address specified
by a pointer register, an indirect address specified by a pointer register added to an immediate
offset of 8 or 16 bits, or a direct address. Source operands may also be specified as immediate data
contained within the instruction. Auto-increment of the indirect pointers is available for simple
indirect (not offset) addressing.
Size: Byte-Byte, Word-Word
Flags Updated: N, Z
MOV
Rd,Rs
Bytes:
Clocks:
Operation:
Encoding:
1
MOV
(Rd) <-- (Rs)
o ISZI
0
1
I 0 I 0 I 0 Isz I 0 I 1
0
I
01 01
0
d
d
d
d
I 51
s
5
5
Rd, [Rs]
Bytes:
Clocks:
Operation:
Encoding:
1
3124/97
2
3
2
3
(Rd) <-- ((WS:Rs))
I did
211
I did I 0 I s I 5 I 5 I
Addressing Modes and Data Types
MOV
[Rd], Rs
Bytes:
Clocks:
2
3
Operation:
Encoding:
«WS:Rd» <-- (Rs)
1 0 1 0 1 0 1SZ 1 0
MOV
I
o
d
d
d
Rd, [Rs+offset8]
Bytes:
Clocks:
Operation:
Encoding:
11
3
5
(Rd) <-- «WS:Rs)+offset8)
I 0 I 0 I 0 Isz I I 0 I 0
byte 3: offset8
MOV
[Rd+offset8], Rs
Bytes:
Clocks:
Operation:
Encoding:
11
3
5
«WS:Rd)+offset8) <-- (Rs)
I 0 I 0 I 0 I8Z I 1 I 0 I 0
byte 3: offset8
MOV
Rd, [Rs+offset16]
Bytes:
Clocks:
Operation:
Encoding:
4
5
(Rd) <-- ((WS:Rs)+offset16)
'--\1 -0 0--'-1-01'--8Z--'-1-11'--0--'-1----,
--'-1
'--1
byte 3: upper 8 bits of offsetl6
byte 4: lower 8 bits of offset 16
XA User Guide
212
3/24/97
MOV
[Rd+offset16], Rs
4
5
Bytes:
Clocks:
Operation:
«WS:Rd)+offset16) <--:- (Rs)
Encoding:
--'01""-0--'--1--'0I""-SZ--'--I 1""-0--'-1
1""---1--'--1
----'1I
----'1
byte 3: upper 8 bits of offset16
byte 4: lower 8 bits of offset16
MOV
Rd, [Rs+]
2
4
(Rd) <-- «WS:Rs»
(Rs) <-- (Rs) + 1 (byte operation) or 2 (word operation)
Bytes:
Clocks:
Operation:
Encoding:
I 0 1 0 I 0 Isz I 0 I 1 I 1 I
MOV
[Rd+], Rs
Bytes:
Clocks:
2
4
Operation:
«WS:Rd» <-- (Rs)
(Rd) <-- (Rd) + 1 (byte operation) or 2 (word operation)
Encoding:
1
MOV
0
I
0
I
0
1
sz I
0
I
1
1
[Rd+], [Rs+]
Bytes:
Clocks:
Operation:
2
6
«WS:Rd» <-- «WS:Rs»
(Rs) <-- (Rs) + 1 (byte operation) or 2 (word operation)
(Rd) <-- (Rd) + 1 (byte operation) or 2 (word operation)
Encoding:
1
3124/97
I 0 I 0 1 1 1sz I 0 1 0 I 0 I
213
Addressing Modes and Data Types
MOV
direct, Rs
Bytes:
Clocks:
Operation:
Encoding:
3
4
(direct) <-- (Rs)
'--11--'-1-0 --r-I----'01-0-'-1S-Z-r---"I---r-~O
I
sis
I
sis
1
1
I
di rect 3 bits
1
byte 3: lower 8 bits of direct
MOV
Rd, direct
Bytes:
Clocks:
Operation:
Encoding:
3
4
(Rd) <-- (direct)
11 I 0 I
I
0 0 1sz
byte 3: lower 8 bits of direct
MOV
I
o
direct, [Rs]
Bytes:
Clocks:
Operation:
Encoding:
3
4
(direct) <-- ((WS:Rs»
11 1 0 1 1 1 0 1sz I 0
I 0 10
1
1 sis
I s I 0 1direct3 bits 1
byte 3: lower 8 bits of direct
MOV
[Rd], direct
Bytes:
Clocks:
Operation:
Encoding:
11 I
3
4
(CWS:Rd» <-- (direct)
0
I 0 I did I d I 0 Idirect3 bits I
I 1 I 0 Isz I 0 I 0 10
byte 3: lower 8 bits of direct
XA User Guide
214
3124/97
MOV
Rd, #data8
Bytes:
Clocks:
Operation:
Encoding:
3
3
(Rd) <-- #data8
1---.-'-0
.----1
--"0,-1---r-,-0....-,0--'-0--'------'1
-'--1
byte 3: #data8
MOV
Rd, #data16
Bytes:
Clocks:
Operation:
Encoding:
4
3
(Rd) <-- #data16
1---'-1-0 -,--,
1"---
--"0,-1---r-1-1....-,0--'-0--'------'1
byte 3: upper 8 bits of #data16
byte 4: lower 8 bits of #data16
MOV
[Rd], #data8
Bytes:
Clocks:
Operation:
Encoding:
3
3
((WS:Rd)) <-- #data8
,"""--1--,--,-----'01'---0--'--,-----'11'---0--'--10-----','---1--'--0---'
byte 3: #data8
MOV
[Rd], #data16
Bytes:
Clocks:
Operation:
Encoding:
4
3
((WS:Rd)) <-- #data16
1-r-I-0 O-r-I-1 1-r-,-0
'---1
r---I
r---I
----'-----'0
r---I
byte 3: upper 8 bits of #data16
byte 4: lower 8 bits of #data16
3124/97
215
Addressing Modes and Data Types
MOV
[Rd+]. #data8
Bytes:
Clocks:
Operation:
3
4
((WS:Rd)) <-- #data8
(Rd) <-- (Rd) + 1
Encoding:
1
byte 3: #data8
MOV
[Rd+]. #data16
Bytes:
Clocks:
Operation:
4
4
((WS:Rd)) <-- #data16
(Rd) <-- (Rd)+ 2
Encoding:
byte 3: upper 8 bits of #data16
byte 4: lower 8 bits of #data16
MOV
[Rd+offset8], #data8
Bytes:
Clocks:
Operation:
Encoding:
4
5
((WS:Rd)+offset8) <-- #data8
11 101011101110101
byte 3: offset8
byte 4: #data8
MOV
[Rd+offset8], #data16
Bytes:
Clocks:
Operation:
Encoding:
5
5
((WS:Rd)+offset8) <-- #data16
11101011111110101
byte 3: offset8
byte 4: upper 8 bits of #data16
byte 5: lower 8 bits of #data16
XA User Guide
216
3124/97
MOV
[Rd+offsetl6], #data8
Bytes:
Clocks:
Operation:
Encoding:
5
5
«WS:Rd)+offsetl6) <-- #data8
11 101011101110111
byte 3: upper 8 bits of offsetl6
byte 4: lower 8 bits of offsetl6
byte 5: #data8
MOV
[Rd+offsetI6], #datal6
Bytes:
Clocks:
Operation:
Encoding:
6
5
«WS:Rd)+offset16) <-- #datal6
1110101111111011
byte 3:
byte 4:
byte 5:
byte 6:
MOV
upper 8 bits
lower 8 bits
upper 8 bits
lower 8 bits
of offset 16
of offset16
of #datal6
of #datal6
direct, #data8
Bytes:
Clocks:
Operation:
Encoding:
4
3
(direct) <-- #data8
o Idirect: 3 bits I
10 10 10
I
byte 3: lower 8 bits of direct
byte 4: #data8
MOV
direct, #datal6
Bytes:
Clocks:
Operation:
Encoding:
5
3
(direct) <-- #data 16
111010111111
I0I
o Idirect: 3 bitsl 1 I 0 0 0
byte 3: lower 8 bits of direct
byte 4: upper 8 bits of #datal6
byte 5: lower 8 bits of #datal6
3124/97
217
Addressing Modes and Data Types
MOV
direct, direct
Bytes:
Clocks:
Operation:
Encoding:
4
4
(direct) <-- (direct)
11 1 0 1 0 1 1 1sz 1 1 1 1
Old dir: 3 bits
I
0
I
s dir: 3 bits
1
byte 3: lower 8 bits of direct (dest)
byte 4: lower 8 bits of direct (src)
MOV
Rd, USP (move from user stack pointer)
Bytes:
Clocks:
Operation:
Encoding:
1
MOV
2
3
(Rd) <-- (USP)
0
0
1
0
0
0
I did I did I 1 I 1 11 I 1 I
0
USP, Rs (move to user stack pointer)
Bytes:
Clocks:
Operation:
Encoding:
2
3
(USP) <-- (Rs)
001
XA User Guide
000
218
3/24/97
MOV
Move Bit to Carry
Syntax:
MOV C, bit
Operation:
(C) <-- (bit)
Description: Copies the specified bit to the carry flag.
Size: Bit
Flags Updated: none
Note: C is written as the destination of the move, not as a status flag
Bytes:
Clocks:
3
4
Encoding:
10 I 0 I 0 I 0 I
I0I0I0
000
bit: 2
byte 3: lower 8 bits of bit address
3/24/97
219
Addressing Modes and Data Types
MOV
Move Carry to Bit
Syntax:
MOV bit, C
Operation:
(bit) <-- (C)
Description: Copies the carry flag to the specified bit.
Size: Bit
Flags Updated: none
Bytes:
Clocks:
3
4
Encoding:
10 1 010101
1
I 0I 0I 1
01010
1
I 0I 0
bit: 2
byte 3: lower 8 bits of bit address
XA User Guide
220
3/24/97
MOVC
Move Code
Syntax:
MOVC
Operation:
(Rd) <-- code memory ((WS:Rs»
(Rs) <-- (Rs) + 1 (byte operation) or 2 (word operation)
Rd, [Rs+]
Description: Contents of code memory are copied to an internal register. The byte or word
specified by the source operand is copied to the variable specified by the destination operand. In
the case of MOVC, the pointer segment selection gives the choices of PC 23 - 16 or CS segment
(current working segment referred here as WS), rather than DS or ES as is used for all other
instructions.
Size: Byte-Byte, Word-Word
Flags Updated: N, Z
Bytes:
Clocks:
2
4
Encoding:
1
3/24/97
I
0
I
0
I
0
Isz I
0
0
0
221
Addressing Modes and Data Types
Move
Move Code to A (DPTR)
Syntax:
MOVC A, [A+DPTR]
Operation:
PC <- PC+2
(A) <-- code memory (PC.23-16:(A) + (DPTR))
Description: The byte located at the code memory address formed by the sum of A and the DPTR
is copied to the A register. The A and DPTR registers are pre-defined registers used for 80CS1
compatibility. This instruction is included for 80CS1 compatibility. See Chapter 9 for details of
80CS1 compatibility features.
Size: Byte-Byte
Flags Updated: N. Z
Bytes:
Clocks:
2
6
Encoding:
1101 0 1 1 1010101 0
XA User Guide
1
222
3/24/97
MOVC
Move Code to A (PC)
Syntax:
MOVC A, [A+PC]
Operation:
PC <- PC+2
(A) <-- code memory [PC.23-16: (A +PC.1S-0)]
Note: Only 16-bits of A+PC are used
Description: The byte located at the code memory address formed by the sum of A and the current
Program Counter value is copied to the A register. The A register is a pre-defined register used for
80CS1 compatibility. This instruction is included for 80CS1 compatibility. See Chapter 9 for
details of 80CS1 compatibility features.
Size: Byte-Byte
Flags Updated: N, Z
Bytes:
Clocks:
2
6
Encoding:
o
3/24/97
0
0
o
0
223
1
001
Addressing Modes and Data Types
MOVS
Move Short
Syntax:
MOVS dest, #data
Description: Four bits of signed immediate data are moved to the destination. The immediate data
is sign-extended to the proper size, then moved to the variable specified by the destination operand,
which may be a byte or a word. The immediate data range is +7 to -8. This instruction is used to
save time and code space for the many instances where a small data constant is moved to a
destination.
Size: Byte-Byte, Word-Word
Flags Updated: N, Z
MOVS
Rd, #data4
2
Bytes:
Clocks:
Operation:
Encoding:
3
(Rd) <-- sign-extended #data4
Isz 10
MOVS
[Rd], #data4
2
3
«WS:Rd)) <-- sign-extended #data4
Bytes:
Clocks:
Operation:
Encoding:
1
MOVS
#data4
0
sz
1
0
1
#data4
0
[Rd+], #data4
2
4
«WS:Rd)) <-- sign-extended #data4
(Rd) <-- (Rd) + 1 (byte operation) or 2 (word operation)
Bytes:
Clocks:
Operation:
Encoding:
1
I0I
XA User Guide
Iszl
0
1
#data4
224
3124/97
MOVS
[Rd+offset8], #data4
3
Bytes:
Clocks:
Operation:
Encoding:
5
«WS:Rd)+offset8) <-- sign-extended #data4
I0I0
#data4
byte 3: offset8
MOVS
[Rd+offsetI6], #data4
Bytes:
Clocks:
Operation:
Encoding:
11
4
5
«WS:Rd)+offset16) <-- sign-extended #data4
I 0 I 1 I 1 Isz I 1 I 0 I 1
#data4
byte 3: upper 8 bits of offset 16
byte 4: lower 8 bits of offset16
MOVS
direct, #data4
Bytes:
Clocks:
Operation:
3
3
(direct) <-- sign-extended #data4
Encoding:
11
I 0 1 1 I 1 1sz 1
1
o Idirect: 3 bits 1
0
#data4
byte 3: lower 8 bits of direct
3/24/97
225
Addressing Modes and Data Types
MOVX
Move External Data
Syntax:
MOVX dest, src
Description: Move external data to or from an internal register. The byte or word specified by the
source operand is copied into the variable specified by the destination operand. This instruction
allows access to data external to the microcontroller in the address range of 0 to 64K. The standard
indirect move may access external data only above the boundary where internal data RAM ends,
whereas MOVX always forces an external access. MOVX only operates on the first 64K of
external data memory. This instruction is included to allow compatibility with 80CS1 code.
Note that in the 80CSI MOVX instruction using @Ri as a pointer (where i could be 0 or 1), the
pointer was eight bits in length and the upper address lines were not driven on the external bus. The
XA always drives all of the enabled external bus address lines. The use of the pointer depends on
whether compatibility mode is in use. If CM =0 (compatibility mode off, the default), 16 bits of
RO or R1 are used as the address within data segment O. IfCM = 1 (compatibility mode on), 8 bits
of ROL or ROH are used as the bottom eight bits of the address, while the remainder of the address
bits, including those corresponding to the data segment are O.
Size: Byte-Byte, Word-Word
Flags Updated: N, Z
MOVX
Rd, [Rs]
Bytes:
Clocks:
Operation:
2
6
(Rd) <-- external data memory «Rs»
Encoding:
1
MOVX
0
ISZI
1
1
d
d
d
d
0
sis s
1
1
[Rd], Rs
Bytes:
Clocks:
Operation:
Encoding:
2
6
external data memory «Rd» <-- (Rs)
I0I
XA User Guide
1 0 18Z1
d
226
d
d
3124/97
MUL.w
MULU.b
MULU.w
16x16 Signed Multiply
8x8 Unsigned Multiply
16x16 Unsigned Multiply
Description: The byte or word specified by the source operand is multiplied by the variable
specified by the destination operand.
The destination operand must be the first half of a double size register (word for a byte multiply
and double word for a word multiply). The result is stored in the double size register.
Note: a double word register is double-word aligned in the register file (Rl:RO, R3:R2, RS:R4,
and R7:R6)0
Size: Byte-Byte, Word-Word
Flags Updated: C, V, N, Z
The carry flag is always cleared by a multiply instruction. The V flag is set in the following
cases, otherwise it is cleared:
- MULU.b: V is set if the result of the multiply is greater than FFh (the upper byte is not equal
to 0).
- MULU. w: V is set if the result of the multiply is greater than FFFFh (the upper word is not
equal to 0)0
- MUL.w: V is set if the absolute value of the result of the multiply is greater than 7FFFh (the
upper word is not a sign extension of the lower word).
Examples:
a) MUL. w RO,RS stores the product of word register 0 and word register S in double word
register 0 (least significant word in word register RO, most significant word in word register Rl).
b) MULUob R4L, R4H will store the MS byte of the product of R4L and R4H in R4H and the
LS byte in R4L.
3/24/97
227
Addressing Modes and Data Types
MUL.w Rd,Rs
(signed 16 bits * 16 bits --> 32 bits)
Bytes:
Clocks:
Operation:
2
12
(Rd+1)<-- Most significant word of (Rd) * (Rs)
(Rd) <-- Least significant word of (Rd) * (Rs)
(signed""multiply)
Encoding:
1
MUL.w Rd, #data16
(signed 16 bits * 16 bits --> 32 bits)
Bytes:
Clocks:
Operation:
4
12
(Rd+1)<-- Most significant word of (Rd) * #data16
(Rd) <-- Least significant word of (Rd) * #data16
(signed multiply)
Encoding:
1r----'1~I---'11r----'1~1---'01r----'1--r-1---'0Ir--O~I----.
byte 3: upper 8 bits of #data16
byte 4: lower 8 bits of #data16
MULU.b Rd, Rs
(unsigned 8 bits * 8 bits --> 16 bits)
Bytes:
Clocks:
Operation:
2
12
(RdH) <-- Most significant byte of (RdL) * (Rs)
(RdL) <-- Least significant byte of (RdL) * (Rs)
(unsigned multiply)
Encoding:
1111110101010101
XA User Guide
228
3/24/97
MULU.b Rd, #data8
(unsigned 8 bits * 8 bits --> 16 bits)
Bytes:
Clocks:
Operation:
3
12
(RdH) <-- Most significant byte of (RdL) * #data8
(RdL) <-- Least significant byte of (RdL) * #data8
(unsigned multiply)
Encoding:
byte 3: #data8
MULU.w Rd, Rs
(unsigned 16 bits * 16 bits --> 32 bits)
Bytes:
Clocks:
Operation:
2
12
(Rd+l)<-- Most significant word of (Rd) * (Rs)
(Rd) <-- Least significant word of (Rd) * (Rs)
(unsigned multiply)
Encoding:
MULU.w Rd, #datal6
(unsigned 16 bits * 16 bits --> 32 bits)
Bytes:
Clocks:
Operation:
4
12
(Rd+l)<-- Most significant word of (Rd) * #datal6
(Rd) <-- Least significant word of (Rd) * #datal6
(unsigned multiply)
Encoding:
111111101110101
byte 3: upper 8 bits of #datal6
byte 4: lower 8 bits of #datal6
3124/97
229
Addressing Modes and Data Types
NEG
Negate
Syntax:
NEG Rd
Operation:
Rd <-- (Rd) + 1
Description: The destination register is negated (twos complement). The destination may be a byte
or a word.
Size: Byte, Word
Flags Updated: V, N, Z
The V flag is set if a twos complement overflow occurred: the original value
for a word operation or 80 hex for a byte operation.
Bytes:
Clocks:
=result =8000 hex
2
3
Encoding:
11 1 0 1 0 1 1 1sz 1 0 1 0
XA User Guide
I0 I
230
3124/97
NOP
No Operation
Syntax:
NOP
Operation:
PC <- PC + 1
Description: Execution resumes at the following instruction. This instruction is defined as being
one byte in length in order to allow it to be used to force word alignment of instructions that are
branch targets, or for any other purpose. It may also be used to as a delay for a predictable amount
of time.
Size: None
Flags Updated: none
Bytes:
Clocks:
1
3
Encoding:
00001 0
3/24/97
1
0
1
0
1
0
1
231
Addressing Modes and Data Types
NORM
Normalize
Syntax:
NORM
Rd,Rs
Operation:
(Rd)
\MSB .....
~--LSB h-O
Description: Logically shifts left the contents of the destination until the MSB is set, storing the
number of shifts performed in the count (source) register. The data size may be 8, 16, or 32 bits.
If the destination value already has the MSB set, the count returned will be 0. If the destination
value is 0, the count returned will be 0, the N flag will be cleared, and the Z flag will be set. For all
other conditions, the N flag will be 1 and the Z flag will be 0.
Note: a double word register is double-word aligned in the register file (Rl:RO, R3:R2,
R7:R6).
The last pair, i.e, R7:R6 is probably not a good idea as R7 is the current stack pointer.
~5:R4,
or
Size: Byte, Word, Double Word
Flags Updated: N, Z
Bytes:
Clocks:
2
For 8 or 16 bit shifts -> 4 + 1 for each 2 bits of shift
For 32 bit shifts -> 6 + 1 for each 2 bits of shift
Encoding:
\ 1 \
1\ 0 \ 0 \ SZ1 \ SZO \1 \
11 \ d
\ d \ d \ d \ S \ S \ S \ S
Note: SZlISZO =00: byte operation; SZlISZO =01: reserved; SZlISZO = 10: word operation;
SZ lISZ0 = 11: double word operation.
XA User Guide
232
3/24/97
OR
Logical OR
Syntax:
OR dest, src
Description: Bitwise logical OR the contents of the source to the destination. The byte or word
specified by the source operand is logically ORed to the variable specified by the destination
operand. The source data is· not affected by the operation.
Size: Byte-Byte, Word-Word
Flags Updated: N, Z
OR
Rd, Rs
Bytes:
Clocks:
Operation:
Encoding:
2
3
(Rd) <-- (Rd) + (Rs)
I 0 I 1 I 1 I 0 Isz I 0 I 0 I
OR
Rd, [Rs]
Bytes:
Clocks:
Operation:
Encoding:
2
4
(Rd) <-- (Rd) + ((WS:Rs»
1
OR
I 0 Isz I 0
o
d
d
d
dol
s sis
.1
I
[Rd], Rs
Bytes:
Clocks:
Operation:
Encoding:
3124/97
2
4
(CWS:Rd» <-- C(WS:Rd» + (Rs)
233
Addressing Modes and Data Types
'OR
Rd, [Rs+offset8]
Bytes:
Clocks:
Operation:
Encoding:
3
6
(Rd) <-- (Rd) + «WS:Rs)+offset8)
I
10 1 11 11 0 1sz 1 10 10
lid 1did 1d10
18 18 18 1
byte 3: offset8
OR
[Rd+offset8], Rs
Bytes:
Clocks:
Operation:
Encoding:
3
6
«WS:Rd)+offset8) <-- «WS:Rd)+offset8) + (Rs)
r--Io--r-"I-1r--1--r-"1-0Ir--SZ--r-"I-1Ir--O--r-"I-----'01 1 8 18 18 18 1 1did 1d 1
byte 3: offset8
OR
Rd, [Rs+offset16]
Bytes:
Clocks:
Operation:
Encoding:
4
6
(Rd) <-- (Rd) + «WS:Rs)+offset16)
t--IO--r-"I-1Ir--.1--'-1---'0I-SZ~I 1 I-O~I---'1lid 1did 1d10 18 18 18 1
-----r
byte 3: upper 8 bits of offset 16
byte 4: lower 8 bits of offset 16
OR
[Rd+offsetI6], Rs
Bytes:
Clocks:
Operation:
Encoding:
4
6
«WS:Rd)+offset16) <-- «WS:Rd)+offset16) + (Rs)
1818181811
10 I· 1 1.1 1 0 1sz 1 1 10 1 1
ddd
byte 3: upper 8 bits of offset 16
byte 4: lower 8 bits of offset 16
XA User Guide
234
3/24/97
OR
Rd, [Rs+J
Bytes:
Clocks:
Operation:
2
5
(Rd) <-- (Rd) + ((WS:Rs))
(Rs) <-- (Rs) + 1 (byte operation) or 2 (word operation)
Encoding:
1
OR
0 ,
[Rd+], Rs
Bytes:
Clocks:
Operation:
2
5
((WS:Rd)) <-- ((WS:Rd)) + (Rs)
(Rd) <-- (Rd) + 1 (byte operation) or 2 (word operation)
Encoding:
1
OR
0
1
I
I 0 Isz I 0 I
direct, Rs
Bytes:
Clocks:
Operation:
Encoding:
3
4
(direct) <-- (direct) + (Rs)
I~0--'-,-1-r--I--'1,-0--'-,S-Z~I1---'----'------'0
Is' s , s
'S l' direct: 3bits'
byte 3: lower 8 bits of direct
OR
Rd. direct
Bytes:
Clocks:
Operation:
Encoding:
3
4
(Rd) <-- (Rd) + (direct)
Ir--O---r'",-1-,--,---"1,-0--'--,S-Zr-I1~1""'---'0
I did
, did
I 0 Idirect: 3 bitsl
byte 3: lower 8 bits of direct
3124/97
235
Addressing Modes and Data Types
OR
Rd, #data8
Bytes:
Clocks:
Operation:
Encoding:
3
3
(Rd) <-- (Rd) + #data8
"'---11--'--1--0,"'---0--'--,--1\"'---0-'--\----'0\r-O--r-\----'1
byte 3: #data8
OR
Rd, #data16
Bytes:
Clocks:
Operation:
Encoding:
4
3
(Rd) <-- (Rd)
+ #data16
11 \ 0\ 01 1 \110\ 01
1
byte 3: upper 8 bits of #data16
byte 4: lower 8 bits of #data16
OR
[Rd], #data8
Bytes:
Clocks:
Operation:
Encoding:
3
4
((WS:Rd)) <-- ((WS:Rd)) + #data8
11\ 0\ 01 1 1 0 101 1 1 0 1
10IdldldI01 1 \1\01
byte 3: #data8
OR
[Rd], #data16
Bytes:
Clocks:
Operation:
Encoding:
4
4
((WS:Rd)) <-- ((WS:Rd)) + #data16
11 10\ 01 1 11101 1 101
10ldldidi 011
1101
byte 3: upper 8 bits of #data16
byte 4: lower 8 bits of #data16
XA User Guide
236
3124/97
OR
[Rd+], #data8
Bytes:
Clocks:
Operation:
3
5
((WS:Rd» <-- ((WS:Rd» + #data8
(Rd) <-- (Rd) + 1
Encoding:
\1\0\0\1\0\01 1 \1
byte 3: #data8
OR
[Rd+], #data16
Bytes:
Clocks:
Operation:
4
5
((WS:Rd» <-- ((WS:Rd» + #data16
(Rd) <-- (Rd) + 2
Encoding:
1110101111101111
byte 3: upper 8 bits of #data16
byte 4: lower 8 bits of #data16
OR
[Rd+offset8], #data8
Bytes:
Clocks:
Operation:
Encoding:
4
6
((WS:Rd)+offset8) <-- ((WS:Rd)+offset8) + #data8
11 1 0 1 0 1 1 1 0 11 10 I 0 I 1 0 I did 1 d I 0 1 11 11 01
byte 3: offset8
byte 4: #data8
OR
[Rd+offset8], #data16
Bytes:
Clocks:
Operation:
Encoding:
1
5
6
((WS:Rd)+offset8) <-- ((WS:Rd)+offset8) + #data16
1 10\ 0\11 1 1 1 10 1 0 1
1
0 1 dl dl dl 01
byte 3: offset8
byte 4: upper 8 bits of #data16
byte 5: lower 8 bits of #data16
3/24/97
237
Addressing Modes and Data Types
OR
[Rd+offsetl6], #data8
Bytes:
Clocks:
Operation:
Encoding:
5
6
((WS:Rd)+offsetl6) <-- ((WS:Rd)+offsetl6) + #data8
11101011101
10 11
byte 3: upper 8 bits of offset16
byte 4: lower 8 bits of offsetl6
byte 5: #data8
OR
[Rd+offsetl6], #data16
Bytes:
Clocks:
Operation:
Encoding:
6
6
((WS:Rd)+offsetl6) <-- ((WS:Rd)+offsetl6) + #data16
11101011111
10 11
byte 3: upper 8 bits of offsetl6
byte 4: lower 8 bits of offset 16
byte 5: upper 8 bits of #data16
byte 6: lower 8 bits of #data16
OR
direct, #data8
Bytes:
Clocks:
Operation:
Encoding:
4
4
(direct) <-- (direct) + #data8
o Idirect: 3 bits 1 0 1 1 1 1 I 0 1
byte 3: lower 8 bits of direct
byte 4: #data8
OR
direct, #data16
Bytes:
Clocks:
Operation:
Encoding:
5
4
(direct) <-- (direct) + #data16
o Idirect: 3 bits I 0 I
1
1
I0I
byte 3: lower 8 bits of direct
byte 4: upper 8 bits of #data16
byte 5: lower 8 bits of #data16
XA User Guide
238
3/24/97
ORL
Logical OR bit
Syntax:
ORL
C, bit
Operation:(C) <-- (C) + (bit)
Description: Logical (inclusive) OR a bit to the Carry flag. Read the specified bit and logically OR
it to the Carry flag.
(C is written as the destination of the ORL, not as a status flag)
Size: Bit
Flags Updated: none
Bytes:
Clocks:
3
4
Encoding:
000
1
I0I0I
0
bit: 2
byte 3: lower 8 bits of bit address
3124/97
239
Addressing Modes and Data Types
ORL
Logical OR complement of bit
Syntax:
ORL
Operation:
(C) <-- (C) + (bit)
C~
/bit
Description: Logically OR the complement of a bit to the Carry flag. Read the specified bit,
complement it, and logically OR it to the Carry flag.
(C is written as the destination of the move, not as a status flag)
Flags Updated: none
Bytes:
Clocks:
3
4
Encoding:
I0I1
000
1
I0I0
bit: 2
byte 3: lower 8 bits of bit address
XA User Guide
240
3124/97
POP
POPU
Pop
Pop User
Syntax:
POP
dest
Description: The stack is popped and the data written to the specified directly addressed location.
The data size may be byte or word. POP uses the current stack pointer, while POPU forces an
access to the user stack.
Size: Byte, Word
Flags Updated: none
POP
direct
Bytes:
Clocks:
Operation:
3
5
(direct) <-- «SP»
(SP) <-- (SP) + 2
Encoding:
,"--1-..-,---'01""'--0-"-1---'0I""'--SZ-"-I---,.....-----,----,
1
0 Idirect: 3 bits 1
byte 3: 8 bits of direct
POPU
direct
Bytes:
Clocks:
Operation:
3
5
(direct) <-- «USP»
(USP) <-- (USP) + 2
Encoding:
11
10
I 0 I 0 Isz 1
o
0
0
0
0
1
direct: 3 bitsl
byte 3: 8 bits of direct
3/24/97
241
Addressing Modes and Data Types
POP
POPU
Pop Multiple
Pop User Multiple
Syntax:
POP
POPU
Rlist
Rlist
Description: Pop the specified registers (one or more) from the stack. The stack is popped (from
1 to 8 times) and the data stored in the specified registers. Any combination of word registers in
the group RO to R7 may be popped in a single instruction in a word operation. Or, any combination
of byte registers in the group ROL to R3H or the group R4L to R7H may be popped in a single
instruction in a byte operation. POP uses the current stack pointer, while POPU forces an access to
the user stack.
Note: Rlist is a bit map that represents each register to be popped. The registers are in the order R7,
R6, R5, ...... , RO, for word registers or R3H .... ROL, or R7H ... R4L for byte registers. The pop order
is from right to left, i.e., the register specified by the rightmost one in Rlist will be popped first, etc.
The order must be the reverse ofthat used by the preceding PUSH instruction. Note that ifthe same
register list is used first with a PUSH, then with a POP, the original register contents will be
restored. The order in which the registers are called out in the source code is not important because
the Rlist operand is encoded as a fixed order bit map (see below).
Size: Byte, Word
Flags Updated: none
POP
Rlist
2
4 + 2 per additional register
Repeat for all selected registers (Ri):
(Ri) <-- «SP))
(SP) <-- (SP) + 2
Bytes:
Clocks:
Operation:
Encoding:
I
POPU
0
IHILI 1 I 0 ISZ 11
Rlist
Rlist
Bytes:
Clocks:
Operation:
2
4 + 2 per additional register
Repeat for all selected registers (Ri):
(Ri) <-- «USP))
(USP) <-- (USP) + 2
Encoding:
o IH/LI1
XA User Guide
Isz I
Rlist
242
3124/97
Rlist bit definitions for a byte POP from register(s) in the upper register group (R4L through R7H):
I
R7H
I
R7l
I
R6H
I
R6l
I
R5H
I
R5l
I
R4H
I
R4l
I
Rlist bit definitions for a byte POP from register(s) in the lower register group (ROL through R3H):
I
R3H
I
R3l
I
R2H
I
R2l
I
R1H
I
R1l
I
ROH
ROl
Rlist bit definitions for a word POP from any register(s) (RO through R7):
R7
3/24/97
R6
R5
R4
R3
243
R2
R1
RO
Addressing Modes and Data Types
PUSH
PUSHU
Push
Push User
Syntax:
PUSH
PUSHU
src
src
Description: The specified directly addressed data is pushed onto the stack. The data size may be
byte or word. PUSH uses the current stack pointer, while PUSHU forces an access to the user stack.
Size: Byte, Word
Flags Updated: none
PUSH
direct
Bytes:
Clocks:
Operation:
3
5
(SP) <-- (SP) - 2
((SP» <-- (direct)
Encoding:
I0 I 0
r---,1"""'"T"'""1-0'--1O"""'"T"'""I-0,"---SZ"""'"T"'""I-1...----r----.
11 11 1 0 Idirect: 3 bits 1
byte 3: 8 bits of direct
PUSHU
direct
3
5
(USP) <-- (USP) - 2
((USP» <-- (direct)
Bytes:
Clocks:
Operation:
Encoding:
11
I 0 I 0 I 0 1sz I
1
1
10 1 0 11
I0
1 0 1direct: 3 bits
I
byte 3: 8 bits of direct
XA User Guide
244
3/24/97
PUSH
PUSHU
Push Multiple
Push User Multiple
Syntax:
PUSH
Rlist
PUSHU Rlist
Description: Push the specified registers (one or more) onto the stack. The specified registers are
pushed onto the stack. Any combination of word registers in the group RO to R7 may be pushed in
a single instruction in a word operation. Or, any combination of byte registers in the group ROL to
R3H or the group R4L to R7H may be pushed in a single instruction in a byte operation. The data
size may be byte or word. PUSH uses the current stack pointer, while PUSHU forces an access to
the user stack.
Note: Rlist is a bit map that represents each register to be popped. The registers are in the order R7,
R6, R5, ...... , RO, for word registers or R3H .... ROL, or R7H ... R4L for byte registers. The push order
is from left to right, i.e., the register specified by the leftmost one in Rlist will be pushed first, etc.
The order must be the reverse of that used by the corresponding POP instruction. Note that if the
same register list is used first with a PUSH, then with a POP, the original register contents will be
restored. The order in which the registers are called out in the source code is not important because
the Rlist operand is encoded as a fixed order bit map (see below).
Size: Byte, Word
Flags Updated: none
PUSH
Rlist
Bytes:
Clocks:
Operation:
2
3 + 3 per additional register
Repeat for all selected registers CRi):
(SP) <-- (SP) - 2
«SP» <-- (Ri)
Encoding:
r--"0---'-,-H/L-r'"1-0...-o-,r--"SZ---,-,----r'---...----,
PUSHU
Rlist
RUst
Bytes:
Clocks:
Operation:
2
3 + 3 per additional register
Repeat for all selected registers (Ri):
(USP) <-- (USP) - 2
«USP» <-- (Ri)
Encoding:
o IH/L I 0
3/24/97
I1
ISZ
I
Rlist
245
Addressing Modes and Data Types
Rlist bit definitions for a byte PUSH from register(s) in the upper register group
(R4L through R7H):
I
R7H
I R7l I R6H I R6l I R5H I R5l I R4H I R4l
Rlist bit definitions for a byte PUSH from register(s) in the lower register group
(ROL through R3H):
I
R3H
I R3l I R2H I R2l I R1H I R1l I ROH
HOl
Rlist bit definitions for a word PUSH from any register(s) (RO through R7):
R7
XA User Guide
R6
R5
R4
R3
246
R2
R1
RO
3/24/97
RESET
Software Reset
Syntax:
RESET
Operation:
(PC) <-- vector(O)
(PSW) <-- vector(O)
(SFRs) <-- reset values (refer to the description of reset for details)
Description:· The chip is reset exactly as if the external hardware reset has been asserted with
the exception that it does not sample inputs for configuration, e.g., EA, BUSW, etc. When a
RESET instruction is executed, the chip is internally reset, but no external RESET pulse is
generated. The above inputs which are latched during rising edge of a RESET pulse, hence does
not affect the chip configuration.
Flags Updated: The entire PSW is set to the value specified in the reset vector.
Bytes:
Clocks:
2
19
Encoding:
o
3124/97
1
I0I
000
247
000
0
Addressing Modes and Data Types
RET
Return from Subroutine
Syntax:
RET
Operation:
(PC) <-- ((SP))
(SP) <-- (SP) + 4
Description: A 24-bit return address is popped from the stack and used to replace the entire
program counter value (PC 23 -0). This instruction is used to return from a subroutine that was called
with a CALL or Far Call (FCALL).
Note: if the XA is in page 0 mode, only a 16-bit address will be popped from the stack.
Size: None
Flags Updated: none
Bytes:
Clocks:
2
8/6 (PZ)
Encoding:
0
XA User Guide
1
I
01
248
3/24/97
RETI
Return from Interrupt
Syntax:
RETI
Operation:
(PSW) <-- ((SSP»
(PC.23-0) <-- ((SSP»
(SSP) <-- (SSP) + 6
Description: A 24-bit return address is popped from the stack and used to replace the entire
program counter value. The Program Status Word is also restored by being popped from the stack.
This instruction is a privileged instruction (limited to system mode) and is used to return from
an interrupt/exception. An attempt to use RETl in user mode will generate a trap.
Note: if the XA is in page 0 mode, only a 16-bit address will be popped from the stack.
Size: None
Flags Updated: All PSW bits are written by the POP of the PSW value in System mode. In User
mode, the protected PSW bits are not altered.
Bytes:
Clocks:
2
10/8 (PZ)
Encoding:
1
3/24/97
0
I0I
I0I
249
0
0
0
0
0
0
Addressing Modes and Data Types
RL
Rotate Left
Syntax:
RL Rd, #data4
Operation:
(Rd)
d
MSBOOI
LSBb
count <- #data4
Do While (count not equal to 0)
(desto) <- (destmsb)
(destn) <- (destn_l)
(count) <- count-l
End While
Description: The variable specified by the destination operand is rotated left by the number of bits
specified in the immediate data operand. The data size may be 8 or 16 bits. The number of bit
positions shifted may be from 0 to 15.
Size: Byte, Word
Flags Updated: N, Z
Bytes:
Clocks:
2
4 + 1 for each 2 bits of shift
Encoding:
Iszl
XA User Guide
0
1
d
250
d
d
d
#data4
3/24/97
RLC
Rotate Left Through Carry
Syntax:
RLC Rd, #data4
Operation:
(Rd)
c0=l_M_SB_. .____L_S_Bb
count <- #data4
Do While (count not equal to 0)
(temp) <- (C)
(C) <- (destmsb)
(destn) <- (destn_l)
(desto) <- (temp)
(count) <- count-l
End While
Description: The variable specified by the destination operand is rotated left through the carry flag
by the number of bits specified in the immediate data operand. The data size may be 8 or 16 bits.
The number of bit positions shifted may be from 0 to 15.
Size: Byte, Word
Flags Updated: C, N, Z
Bytes:
Clocks:
2
4 + 1 for each 2 bits of shift
Encoding:
18z1
3/24/97
1
#data4
251
Addressing Modes and Data Types
RR
Rotate Right
Syntax:
RR Rd, #data4
Operation:
rjMSB
(Rd)
count <- #data4
Do While (count not equal to 0)
(destmsb) <- (desto)
(destn_l) <- (destn )
(count) <- count-l
End While
Description: If the count operand is greater than 0, the destination operand is rotated right by
the number of bits specified in the immediate data operand. The data size may be 8 or 16 bits.
The number of bit positions shifted may be from to 15. If the count operand is 0, no rotate is
performed.
°
Size: Byte, Word
Flags Updated: N, Z
Bytes:
Clocks:
2
4 + 1 for each 2 bits of shift
Encoding:
1
XA User Guide
Isz I 0
0
d
0
252
d
d
d
#data4
3124/97
RRC
Rotate Right Through Carry
Syntax:
RRC Rd, #data4
Operation:
(Rd)
c&!MSB
~LSB~
count <- #data4
Do While (count not equal to 0)
(temp) <- (C)
(C) <- (desto)
(destn ) <- (destn+l)
(destmsb) <- (temp)
(count) <- count-l
End While
Description: If the count operand is greater than 0, the destination operand is rotated right through
°
the carry flag by the number of bits specified in the immediate data operand. The data size may be
8 or 16 bits. The number of bit positions shifted may be from to 15.
If the count operand is 0, no rotate is performed.
Size: Byte, Word
Flags Updated: C, N, Z
Bytes:
Clocks:
2
4 + 1 for each 2 bits of shift
Encoding:
I
3/24/97
0
I
Iszl
d
253
d
d
d
#data4
Addressing Modes and Data Types
SETB
Set Bit
Syntax:
SETB bit
Operation:
(bit) <-- 1
Description: Writes (sets) a 1 to the specified bit
Size: Bit
Flags Updated:none
Bytes:
Clocks:
3
4
Encoding:
1010101011000
I
0 1 01 0 1 11 01 0
bit: 2
byte 3: lower 8 bits of bit address
XA User Guide
254
3/24/97
SEXT·
Sign Extend
Syntax:
SEXT
Operation:
if N = 1
then (Rd) <-- FF in byte mode or FFFF in word mode
ifN= 0
then (Rd) <-- 00 in byte mode or 0000 in word mode
Rd
Description: Copies the N flag (the sign bit of the last ALU operation) into the destination register.
The destination register may be a byte or word register.
Example:
SEXT.b Rl
if the result of the previous operation left the N flag set, then Rl <-- FF
Size: Byte, word
Flags Updated: none
Bytes:
Clocks:
2
3
Encoding:
11 1 0
3/24/97
0
1szl
0
0
100
0
255
Addressing Modes and Data Types
SUB
Integer Subtract
Syntax: '
SUB dest, src
Operation:
dest <- dest - src
Description: Performs a twos complement binary subtraction of the source and destination
operands, and the result is placed in the destination operand. The source data is not affected by the
operation.
Size: Byte-Byte, Word-Word
Flags Updated: C, AC, V, N, Z
SUB
Rd, Rs
Bytes:
Clocks:
Operation:
Encoding:
2
3
(Rd) <-- (Rd) - (Rs)
,0 , 0 ,
SUB
I 0 , SZ ,
0 , 0
I1
Rd, [Rs]
Bytes:
Clocks:
Operation:
Encoding:
2
4
(Rd) <-- (Rd) - ((WS:Rs»
,"'--0-r-",--0,"---1--'-,--0,"'--SZ--'-,----'0,"'--1--'-,----'0
SUB
[Rd], Rs
Bytes:
Clocks:
Operation:
Encoding:
2
4
CCWS:Rd» <-- C(WS:Rd» - CRs)
I 0 I 0' 1 I 0' sz I 0 , 1 I 0 I
XA User Guide
256
3/24/97
SUB
Rd, [Rs+offset8]
Bytes:
Clocks:
Operation:
Encoding:
3
6
(Rd) <-- (Rd) - ((WS:Rs)+offset8)
1'-0---.--,-0..--,1--'--1-0I"--SZ--'--I-1"--0--'--1----'0
byte 3: offset8
SUB
[Rd+offset8], Rs
Bytes:
Clocks:
Operation:
Encoding:
3
6
((WS:Rd)+offset8) <-- ((WS:Rd)+offset8) - (Rs)
I 0 10 I
1
I
0
I sz I
1
I
0
I
0
I
byte 3: offset8
SUB
Rd, [Rs+offset16]
Bytes:
Clocks:
Operation:
Encoding:
4
6
(Rd) <-- (Rd) - ((WS:Rs)+offset16)
0 -0"--11--'--,-0..--,
SZ--'--I-,"--0--'--,--.,
1'----'--1
byte 3: upper 8 bits of offset16
byte 4: lower 8 bits of offset 16
SUB
[Rd+offset16], Rs
Bytes:
Clocks:
Operation:
Encoding:
I0 I
4
6
((WS:Rd)+offset16) <-- ((WS:Rd)+offsetl6) - (Rs)
0' 1
I
0'
sz I
'0
I
d
d
d
byte 3: upper 8 bits of offsetl6
byte 4: lower 8 bits of offset 16
3124/97
257
Addressing Modes and Data Types
SUB
Rd, [Rs+]
Bytes:
Clocks:
Operation:
2
5
(Rd) <-- (Rd) - «WS:Rs»
(Rs) <-- (Rs) + 1 (byte operation) or 2 (word operation)
Encoding:
SUB
[Rd+], Rs
Bytes:
Clocks:
Operation:
2
5
«WS:Rd)) <-- «WS:Rd» - (Rs)
(Rd) <-- (Rd) + 1 (byte operation) or 2 (word operation)
Encoding:
I 0 I 0 I 1 I 0 Isz I 0 I 1 I 1 I
SUB
I
sis's s
1
I
1
I
did
d
direct, Rs
Bytes:
Clocks:
Operation:
Encoding:
3
4
(direct) <-- (direct) - (Rs)
I0 I 0 I 1 ,
0 , SZ , 1
o
, sis's , s 11
0
I did I did , 0 'direct: 3 bitsl
'direct: 3 bits'
byte 3: lower 8 bits of direct
SUB
Rd, direct
Bytes:
Clocks:
Operation:
Encoding:
3
4
(Rd) <-- (Rd) - (direct)
I 0 I 0 I 1 I 0 , sz I
1
byte 3: lower 8 bits of direct
XA User Guide
258
3124/97
SUB
Rd, #data8
Bytes:
Clocks:
Operation:
Encoding:
3
3
(Rd) <-- (Rd) - #data8
111010111010101
byte 3: #data8
SUB
Rd, #data16
Bytes:
Clocks:
Operation:
Encoding:
4
3
(Rd) <-- (Rd) - #data16
111010111110101
byte 3: upper 8 bits of #data16
byte 4: lower 8 bits of #data16
SUB
[Rd] , #data8
Bytes:
Clocks:
Operation:
Encoding:
3
4
«WS:Rd)) <-- «WS:Rd)) - #data8
11 1 0 I 0 I 1 I 0 I 0 I 1 I 0 I
I Old 1did
1 0 1 0 1 1 10 I
byte 3: #data8
SUB
[Rd], #data16
Bytes:
Clocks:
Operation:
Encoding:
4
4
«WS:Rd)) <-- «WS:Rd)) - #data16
11 1 0 I 01 1 1 11 01 1 I
01
10 I did 1d 1 0 I 01 1 I 0 I
byte 3: upper 8 bits of #data16
byte 4: lower 8 bits of #data16
3/24/97
259
Addressing Modes and Data Types
SUB
[Rd+ ], #data8
3
Bytes:
Clocks:
Operation:
5
((WS:Rd)) <-- ((WS:Rd)) - #data8
(Rd) <-- (Rd) + 1
Encoding:
\110101110101111
byte 3: #data8
SUB
[Rd+], #data16
Bytes:
Clocks:
Operation:
4
5
((WS:Rd)) <-- ((WS:Rd)) - #data16
(Rd) <-- (Rd) + 2
Encoding:
byte 3: upper 8 bits of #data16
byte 4: lower 8 bits of #data16
SUB
[Rd+offset8], #data8
4
6
((WS:Rd)+offset8) <-- ((WS:Rd)+offset8) - #data8
Bytes:
Clocks:
Operation:
Encoding:
11
I 0 1 0 I I 0 I 10 I 0 I 1 0 I did 1 d 1 0 1 01 11 01
byte 3: offset8
byte 4: #data8
SUB
[Rd+offset8], #data16
5
6
Bytes:
Clocks:
Operation:
Encoding:
11
((WS:Rd)+offset8) <-- ((WS:Rd)+offset8) - #data16
I
0 01
I
1
1 1 11 0 10
1
10
I
I
did
1 dl 01 01 1 1 01
byte 3: offset8
byte 4: upper 8 bits of #data16
byte 5: lower 8 bits of #data16
XA User Guide
260
3/24/97
SUB
[Rd+offsetI6], #data8
Bytes:
Clocks:
Operation:
Encoding:
5
6
((WS:Rd)+offset16) <-- ((WS:Rd)+offsetI6) - #data8
byte 3: upper 8 bits of offset16
byte 4: lower 8 bits of offset 16
byte 5: #data8
SUB
[Rd+offset16], #datal6
Bytes:
Clocks:
Operation:
Encoding:
6
6
((WS:Rd)+offsetl6) <-- ((WS:Rd)+offsetI6) - #data16
10 1
byte 3:
byte 4:
byte 5:
byte 6:
upper 8 bits of offset 16
lower 8 bits of offset 16
upper 8 bits of #datal6
lower 8 bits of #datal6
SUB
direct, #data8
Bytes:
Clocks:
Operation:
Encoding:
4
4
(direct) <-- (direct) - #data8
o Idirect: 3 bits 10 10 11 10 1
o
byte 3: lower 8 bits of direct
byte 4: #data8
SUB
direct, #data 16
Bytes:
Clocks:
Operation:
Encoding:
5
4
(direct) <-- (direct) - #data16
I 0 Idirect: 3 bits 10 10 11 I 0 I
o
byte 3: lower 8 bits of direct
byte 4: upper 8 bits of #data16
byte 5: lower 8 bits of #datal6
3/24/97
261
Addressing Modes and Data Types
SUBB
Subtract with Borrow
Syntax:
SUBB dest, src
Operation:
dest <- dest - src - C
Description: Performs a twos complement binary addition of the source operand and the
previously generated carry bit (borrow) with the destination operand. The result is stored in the
destination operand. The source data is not affected by the operation.
If the carry from previous operation is zero (C =0, i.e., Borrow = 1), the result is exact difference
of the operands; if it is one (C = 1, i.e., Borrow =0), the result is 1 less than the difference in
operands.
This form of subtraction is intended to support multiple-precision arithmetic. For this use, the carry
bit is first reset, then SUBB is used to add the portions of the multiple-precision values from leastsignificant to most-significant.
Size: Byte-Byte, Word-Word
Flags Updated: C, AC, V, N, Z
SUBB
Rd, Rs
Bytes:
Clocks:
Operation:
Encoding:
2
3
(Rd) <-- (Rd) - (Rs) - (C)
I 0 I 0 I 1 I 1 Isz I 0 I 0 I
SUBB
Rd, [Rs]
Bytes:
Clocks:
Operation:
Encoding:
XA User Guide
2
4
(Rd) <-- (Rd) - «WS:Rs)) - (C)
262
3/24/97
SUBB
[Rd], Rs
2
4
((WS:Rd» <-- ((WS:Rd» - (Rs) - (C)
Bytes:
Clocks:
Operation:
Encoding:
I0
SUBB
1 0 1 1 1 1 1sz 1 0 1 1 1 0
liS 1 SiS 1 S11 1 did 1 d 1
Rd, [Rs+offset8]
Bytes:
Clocks:
Operation:
Encoding:
3
6
(Rd) <-- (Rd) - ((WS:Rs)+offset8) - (C)
I 0 I 0 1 1 1 1 1sz 1
10 10
byte 3: offset8
SUBB
[Rd+offset8], Rs
3
Bytes:
Clocks:
Operation:
Encoding:
6
((WS:Rd)+offset8) <-- ((WS:Rd)+offset8) - (Rs) - (C)
I 0 I 0 1 1 1 1 1sz 1 1 1 0 I 0 I lsi sis 1 s 1
d d d
byte 3: offset8
SUBB
Rd, [Rs+offset16]
Bytes:
Clocks:
Operation:
Encoding:
I0
4
6
(Rd) <-- (Rd) - ((WS:Rs)+offset16) - (C)
1 01 1
I 1 Isz I 1 I 0 1 1 I I did 1 did I 0 1 sis 1 S I
byte 3: upper 8 bits of offset16
byte 4: lower 8 bits of offset16
3124/97
263
Addressing Modes and Data Types
SUBB
[Rd+offset16], Rs
Bytes:
Clocks:
Operation:
Encoding:
4
6
«WS:Rd)+offsetl6) <-- «WS:Rd)+offset16) - (Rs) - (C)
101 0 1 1, 1 1 I5Z 1 1 1 0 1 1
I I sis I sis I 1 d d d
byte 3: upper 8 bits of offset16
byte 4: lower 8 bits of offset 16
SUBB
Rd, [Rs+]
Bytes:
Clocks:
Operation:
2
5
(Rd) <-- (Rd) - «WS:Rs» - (C)
(Rs) <-- (Rs) + 1 (byte operation) or 2 (word operation)
Encoding:
I did I did
1
SUBB
1)0
lsi sis l
[Rd+], Rs
Bytes:
Clocks:
Operation:
2
5
«WS:Rd» <-- «WS:Rd» - (Rs) - (C)
(Rd) <-- (Rd) + 1 (byte operation) or 2 (word operation)
Encoding:
SUBB
direct, Rs
Bytes:
Clocks:
Operation:
Encoding:
3
4
(direct) <-- (direct) - (Rs) . . (C)
I
slsi s l s 11 ldirect: 3 bitsl
byte 3: lower 8 bits of direct
XA User Guide
264
3124/97
SUBB
Rd, direct
Bytes:
Clocks:
Operation:
Encoding:
3
4
(Rd) <-- (Rd) - (direct) - (C)
0-'-1-0
'--1
,-1-'--1S-Z,--,
' - 1-----r
1
1 --,-----,0
--r-
I
did did 0 direct: 3 bitsl
I
1
1
byte 3: lower 8 bits of direct
SUBB
Rd, #data8
Bytes:
Clocks:
Operation:
Encoding:
3
3
(Rd) <-- (Rd) - #data8 - (C)
111010111010101
byte 3: #data8
SUBB
Rd, #data16
Bytes:
Clocks:
Operation:
Encoding:
4
3
(Rd)
<-- (Rd) - #data16 - (C)
11 1010111110101
byte 3: upper 8 bits of #data16
byte 4: lower 8 bits of #data16
SUBB
[Rd], #data8
Bytes:
Clocks:
Operation:
Encoding:
3
4
((WS:Rd)) <-- ((WS:Rd)) - #data8 - (C)
11 101011101011101
1
byte 3: #data8
3124/97
265
Addressing Modes and Data Types
SUBB
[Rd], #data16
Bytes:
Clocks:
Operation:
Encoding:
4
4
((WS:Rd)) <-- ((WS:Rd)) - #data16 - (C)
1110\0\1\110\110\
\O\dldld\O\O\
1
byte 3: upper 8 bits of #data16
byte 4: lower 8 bits of #data16
SUBB
[Rd+], #data8
Bytes:
Clocks:
Operation:
3
5
((WS:Rd)) <-- ((WS:Rd)) - #data8 - (C)
(Rd) <-- (Rd) + 1
Encoding:
11 10101110101111
byte 3: #data8
SUBB . [Rd+], #data16
Bytes:
Clocks:
Operation:
4
5
(CWS:Rd)) <-- ((WS:Rd)) - #data16 - (C)
CRd) <-- CRd) + 2
Encoding:
11 1 0 10\1\11 0 \11 1
byte 3: upper 8 bits of #data16
byte 4: lower 8 bits of #data16
SUBB
[Rd+offset8], #data8
Bytes:
Clocks:
Operation:
Encoding:
11
4
6
((WS:Rd)+offset8) <-- C(WS:Rd)+offset8) - #data8 - (C)
I 01 0 I 1I 01
10 I 0
I I Old 1 did 1 0 1 01
11 1\
byte 3: offset8
byte 4: #data8
XA User Guide
266
3124/97
SUBB
[Rd+offset8], #datal6
Bytes:
Clocks:
Operation:
Encoding:
5
6
((WS:Rd)+offset8) <-- ((WS:Rd)+offset8) - #datal6 - (C)
o
0
byte 3: offset8
byte 4: upper 8 bits of #datal6
byte 5: lower 8 bits of #datal6
SUBB
[Rd+offsetI6], #data8
Bytes:
Clocks:
Operation:
Encoding:
5
6
((WS:Rd)+offsetl6) <-- ((WS:Rd)+offsetl6) - #data8 - (C)
o
byte 3: upper 8 bits of offset 16
byte 4: lower 8 bits of offset 16
byte 5: #data8
SUBB
[Rd+offsetl6], #datal6
Bytes:
Clocks:
Operation:
Encoding:
6
6
((WS:Rd)+offsetI6) <-- ((WS:Rd)+offsetI6) - #datal6 - (C)
o
byte 3:
byte 4:
byte 5:
byte 6:
SUBB
upper 8 bits of offsetl6
lower 8 bits of offset16
upper 8 bits of #datal6
lower 8 bits of #datal6
direct, #data8
Bytes:
Clocks:
Operation:
Encoding:
4
4
(direct) <-- (direct) - #data8 - (C)
o Idirect: 3 bits I 0
o
0
1
1
byte 3: lower 8 bits of direct
byte 4: #data8
3/24/97
267
Addressing Modes and Data Types
SUBB
direct. #data16
Bytes:
Clocks:
Operation:
Encoding: .
5
4
(direct) <-- (direct) - #data16 - (C)
"'---11---'-1-0 ""-1 1-1---r-1-1"--11~1~O----'
o I direct: 3 bits
-----rO
1
0
I
0
11
1
byte 3: lower 8 bits of direct
byte 4: upper 8 bits of #data16
byte 5: lower 8 bits of #data16
XA User Guide
268
3/24/97
TRAP
Software Trap
Syntax:
TRAP #data4
Operation:
(PC) <-- (PC) + 2
(SSP) <-- (SSP) - 6
((SSP)) <-- (PC)
((SSP)) <-- (PSW)
(PSW) <-- code memory (trap vector (#data4))
(PC. 15-0) <-- code memory (trap vector (#data4))
(PC.23-I6) <-- 0; (PC.O) <-- 0
Description: Causes the specified software trap. The invoked routine is determined by branching
to the specified vector table entry point. The RETI, return from interrupt, instruction is used to
resume execution after the trap routine has been completed. A trap acts like an immediate interrupt,
using a vector to call one of several pieces of code that will be executed in system mode. This may
be used to obtain system services for application code, such as altering the data segment register.
This is described in more detail in the section on interrupts and exceptions.
Note: The address of the exception handling routine must be word aligned as the PC is forced to
an even address before vectoring to the service routine.
Size: None
Flags Updated: none
Bytes:
Clocks:
2
23/19 (PZ)
Encoding:
o
o
3/24/97
269
0
#data4
Addressing Modes and Data Types
XCH
Exchange
Syntax:
XCH dest, src
Operation:
dest <--> src
Description: The data specified by the source and destination operands is exchanged.
Size: Byte-Byte, word-word.
Flags Updated: none
XCH
Rd, Rs
2
5
(Rd) <--> (Rs)
Bytes:
Clocks:
Operation:
Encoding:
I 0 Isz I 0
XCH
0
0
0
0
0
11 I 0 I 1 I 0 Isz I 0
0
0
Rd, [Rs]
2
6
(Rd) <--> ((WS:Rs))
Bytes:
Clocks:
Operation:
Encoding:
1
XCH
0
1
I
I
01 1
ISZI
Rd, direct
Bytes:
Clocks:
Operation:
Encoding:
3
6
(Rd) <--> (direct)
I did
d
d
1
Idirect: 3 bitsl
byte 3: lower 8 bits of direct
XA User Guide
270
3124/97
XOR
Exclusive OR
Syntax:
XOR dest, src
Operation:
dest <- dest (XOR)
src
Description: The byte or word specified by the source operand is bitwise logically XORed to the
variable specified by the destination operand. The source data is not affected by the operation.
Size: Byte-Byte, Word-Word
Flags Updated: N, Z
XOR
Rd,Rs
Bytes:
Clocks:
Operation:
Encoding:
2
3
(Rd) <-- (Rd) (XOR) (Rs)
,"--0---"-,-1-r---T1-1-'--,8-Z. .---,0--'-,-0 ----'1
-r--I
XOR
Rd, [Rs]
Bytes:
Clocks:
Operation:
Encoding:
2
4
(Rd) <-- (Rd) (X OR) ((WS:Rs»
I 0 1 1 1 1 18Z 1 0 1 1 0
XOR
[Rd], Rs
Bytes:
Clocks:
Operation:
Encoding:
2
4
((WS:Rd» <-- ((WS:Rd» (XOR) (Rs)
0-'-1-1~I1-'-1-1~I
8Z-'-1-01~1---Y-1----'0I
r--,
3124/97
I
271
sis sis
1
1
d
d
d
Addressing Modes and Data Types
XOR
Rd, [Rs+offset8]
Bytes:
Clocks:
Operation:
Encoding:
1
0
3
6
(Rd) <-- (Rd) (X OR) ((WS:Rs)+offset8)
I
1
1
I
1
I
sz 1
1
1
0
I
0
I
byte 3: offset8
XOR
[Rd+offset8], Rs
3
Bytes:
Clocks:
Operation:
Encoding:
6
((WS:Rd)+offset8) <-- ((WS:Rd)+offset8) (XOR) (Rs)
1SZ 11
I
0
I
0
byte 3: offset8
XOR
Rd, [Rs+offset16]
4
Bytes:
Clocks:
Operation:
Encoding:
1
0
6
(Rd) <-- (Rd) (X OR) ((WS:Rs)+offsetl6)
1
1
1
1
1
1
1
sz 1
1
0
I
1
byte 3: upper 8 bits of offset16
byte 4: lower 8 bits of offset16
XOR
[Rd+offset16], Rs
Bytes:
Clocks:
Operation:
Encoding:
4
6
((WS:Rd)+offsetl6) <-- ((WS:Rd)+offset16) (XOR) (Rs)
10 I 1 I 1 I 1 I sz I 1 I 0 I 1
I
byte 3: upper 8 bits of offset 16
byte 4: lower 8 bits of offset16
XA User Guide
272
3/24/97
XOR
Rd, [Rs+]
Bytes:
Clocks:
Operation:
2
5
(Rd) <-- (Rd) (XOR) ((WS:Rs»
(Rs) <-- (Rs) + 1 (byte operation) or 2 (word operation)
Encoding:
1
XOR
0
1 'SZ I
I
0
11
[Rd+], Rs
Bytes:
Clocks:
Operation:
2
5
((WS:Rd» <-- ((WS:Rd» (XOR) (Rs)
(Rd) <-- (Rd) + 1 (byte operation) or 2 (word operation)
Encoding:
1---.-,S-Z-r--"IO---r"I---'------"1
I~O--'-'-1
-r-----T-
XOR
Is' s , s , s
'1
d
d
d
direct, Rs
Bytes:
Clocks:
Operation:
Encoding:
3
4
(direct) <-- (direct) (XOR) (Rs)
I 0 , l' 1 I
l' SZ I 1
1
0 I sis I sis'
, direct: 3 bits'
byte 3: lower 8 bits of direct
XOR
Rd, direct
Bytes:
Clocks:
Operation:
Encoding:
,0
3
4
(Rd) <-- (Rd) (XOR) (direct)
I
l'
1 , 1 Isz I 1 1
I did I d
0
, d , 0
Idirect: 3 bits'
byte 3: lower 8 bits of direct
3/24/97
273
Addressing Modes and Data Types
XOR
Rd, #data8
Bytes:
Clocks:
Operation:
Encoding:
3
3
(Rd) <-- (Rd) (XOR) #data8
I did Id \ d 1 0 \ 1 \1 11 1
1110\0110101011
byte 3: #data8
XOR
Rd, #data16
Bytes:
Clocks:
Operation:
Encoding:
4
3
(Rd) <-- (Rd) (X OR) #data16
I d ld\dldlol 11 1 11 1
111010\111101011
byte 3: upper 8 bits of #data16
byte 4: lower 8 bits of #data16
XOR
[Rd], #data8
Bytes:
Clocks:
Operation:
Encoding:
3
4
«WS:Rd» <-- «WS:Rd» (XOR) #data8
11 10101 110101
1\
01
10Idld\d\ 0\1\1\1
byte 3: #data8
XOR
[Rd], #data16
Bytes:
Clocks:
Operation:
Encoding:
4
4
«WS:Rd» <-- «WS:Rd» (XOR) #data16
11 10101 11 1 \ 01 11 01
1
1
byte 3: upper 8 bits of #data16
byte 4: lower 8 bits of #data16
XA User Guide
274
3/24/97
XOR
[Rd+], #data8
Bytes:
Clocks:
Operation:
3
5
((WS:Rd)) <-'- ((WS:Rd)) (XOR) #data8
(Rd) <-- (Rd) + 1
Encoding:
111010111010111
1
1
byte 3: #data8
XOR
[Rd+], #data16
Bytes:
Clocks:
Operation:
4
5
((WS:Rd)) <-- ((WS:Rd)) (X OR) #data16
(Rd) <-- (Rd) + 2
Encoding:
1110101111101111
byte 3: upper 8 bits of #data16
byte 4: lower 8 bits of #data16
XOR
[Rd+offset8], #data8
Bytes:
Clocks:
Operation:
Encoding:
4
6
((WS:Rd)+offset8) <-- ((WS:Rd)+offset8) (XOR) #data8
11101011101110101
1
0 1 dl dl dl 01 11 11 11
byte 3: offset8
byte 4: #data8
XOR
[Rd+offset8], #data16
Bytes:
Clocks:
Operation:
Encoding:
5
6
((WS:Rd)+offset8) <-- ((WS:Rd)+offset8) (X OR) #data16
11101011111110101
10ldldidl011
1
1
byte 3: offset8
byte 4: upper 8 bits of #data16
byte 5: lower 8 bits of #data16
3124/97
275
Addressing Modes and Data Types
XOR [Rd+offset16], #data8
Bytes:
Clocks:
Operation:
Encoding:
5
6
«WS:Rd)+offsetl6) <-- «WS:Rd)+offsetl6) (XOR) #data8
byte 3: upper 8 bits of offset 16
byte 4: lower 8 bits of offset16
byte 5: #data8
XOR
[Rd+offsetI6], #datal6
Bytes:
Clocks:
Operation:
Encoding:
6
6
«WS:Rd)+offsetl6) <-- «WS:Rd)+offsetl6) (X OR) #datal6
11101011111110111
byte 3:
byte 4:
byte 5:
byte 6:
upper 8 bits of offset I 6
lower 8 bits of offset 16
upper 8 bits of #datal6
lower 8 bits of #datal6
XOR
direct, #data8
Bytes:
Clocks:
Operation:
Encoding:
4
4
(direct) <-- (direct) (X OR) #data8
o 1 direct: 3 bits 1 0 1 11 11
1110101110111101
byte 3: lower 8 bits of direct
byte 4: #data8
XOR
direct, #datal6
Bytes:
Clocks:
Operation:
Encoding:
5
4
(direct) <-- (direct) (XOR) #datal6
11 1 0 101
1
111
1
o 1direct: 3 bits 1 0 1 11 11
0
byte 3: lower 8 bits of direct
byte 4: upper 8 bits of #datal6
byte 5: lower 8 bits of #datal6
XA User Guide
276
3/24/97
6.6 Summary Of Illegal Operand Combinations On The XA
All but one case are instructions that specify or imply 2 write operations to a single register file
location within a single instruction. The other case is a possible corruption of the source register
data by an auto-increment before it is read. These conditions are not detected by XA hardware. The
instruction/operand combinations indicated should not be used when writing XA code.
Instruction(s) affected
(anyop) Rx, [Rx+]
mov [Rx+], [Rx+]
Reason for illegal combination
Auto-increment plus explicit write 1
Double auto-increment of one register
2
(anyop) [Rx+], Rx
Auto-increment write may corrupt the source register before it is read 3
NORM Rx, Rx
Result and shift count stored in the same register 4
XCH Rx, Rx
Double write of a single register 4
(anyop) [Rx+], Ry
Auto-increment plus indirect write to same register 5
(anyop) [Rx+J, [Ry+J
Auto-increment plus indirect write to same register 5
(anyop) [Rx+], #data
Auto-increment plus indirect write to same register 5
XCH Rx, [Rx]
Indirect write plus explicit write to the same register 6
XCH Rx, direct
Direct write plus explicit write to the same register 7
POP R7
Stack pointer auto-increment plus explicit write to R7/SP 8
NOTES:
2
3
4
5
6
7
8
This addressing mode is illegal when the source and destination are the same register. This would cause
both a data write and an auto-increment operation to the same register.
This instruction is illegal when the source and destination pointer registers are the same register. This
'
would cause two auto-increment operations to the same register.
This instruction is illegal when the source and destination are the same register. The source register
would be auto-incremented and read at the same time, with an undefined result.
This instruction is illegal when the source and destination are the same register. This would cause two
writes to the same register.
This addressing mode is illegal when the indirect address of the destination points to the pointer register
itself in the register file. This is possible only when 8051 compatibility mode is enabled. This would
cause both a data write and an auto-increment operation to the same register.
This instruction is illegal when the indirect address of the source operand points to the destination register
itself in the register file. This is possible only when 8051 compatibility mode is enabled. This would
cause two writes to the same register.
.
This instruction is illegal when the direct address of the source operand points to the destination register
itself in the register file. This is possible only when 8051 compatibility mode is enabled. This would
cause two writes to the same register.
A POP to R7 (the stack pointer) would cause both a data write and an auto-increment operation to the
same register.
3/24/97
277
Addressing Modes and Data Types
7 External Bus
Most XA derivatives have the capability of accessing external code and/or data memory through
the use of an external bus. The external bus provides address information to external devices
that are to be accessed, then generates a strobe for the required operation, with data passing in or
out on the data bus. Typical bus operations are code read, data read, and data write. The standard
XA external bus is designed to provide flexibility, simplicity of connection, and optimization for
external code fetches.
The following discussion is based on the standard version of the XA external bus. Some specific
XA derivatives may have a different implementation of the external bus, or no external bus at all.
7.1 External Bus Signals
For flexibility, the standard XA external bus supports 8 or 16-bit data transfers and a user
selectable number of address bits. The maximum number of address lines varies by derivative
but may be up to 24. A standard set of bus control signals coordinates activity on the bus. These
are described in the following sections.
7.1.1 PSEN - Program Store Enable
The program store enable signal is used to activate an external code memory, such as an
EPROM. This active low signal is typically connected to the Output Enable (OE) pin of an
external EPROM. PSEN remains high when a code read is not in progress.
7.1.2 RD - Read
The bus read signal is also active low. Activity of this signal indicates data read operations on
the external bus. RD is typically connected to the pin of the same name on an external peripheral
device.
7.1.3 WRL - Write Low Byte
WRL is the external bus data write strobe. It is typically connected to the WR pin of an external
peripheral device. When the XA external bus is used in the 16-bit mode, this strobe applies only
to the lower data byte, allowing byte writes on the 16-bit bus. The WRL signal is active low.
7.1.4 WRH - Write High Byte
For a 16-bit data bus, a signal similar to WRL, but for the upper data byte is needed. The active
low signal WRH serves this purpose.
7.1.5 ALE - Address Latch Enable
Since a portion of the XA external bus is used for multiplexed address and data information, that
part of the address must be latched outside of the XA so that it will remain constant during the
3124/97
278
External Bus
subsequent read or write operation. The active high ALE signal directs the external latch to
allow information to be stored for a data address or a code address. The external latch must
close and retain this address when the ALE signal ends, by going low (inactive).
7.1.6 Address Lines
Some of the address lines used by the external bus interface are driven during a complete bus
operation and do not need to be latched. In the standard XA bus interface, the lower four address
lines are always driven and unlatched in this manner. This is done specifically as part of the
optimization of the bus for fetching instructions from external code memory at high speed. This
feature will be explained in detail in a later section.
7.1.7 Multiplexed Address and Data Lines
The part of the bus that is used for data transfer is also used for address output from the XA.
Prior to asserting the strobe for the bus operation about to be performed, the XA outputs the
address for the operation. On the multiplexed portion of the bus, this address is captured by an
external latch, as commanded by the ALE signal. After that is done, this part of the bus is free to
be used for data transfer either into or out of the XA. The control signals PSEN, RD, WRL, and
WRH determine what type of bus operation takes place.
7.1.8 WAIT - Wait
The WAIT input allows wait states to be inserted into any external bus operation. If WAIT is
asserted (high) after a bus control strobe (PSEN, RD, WRL, or WRH) is driven by the XA, that
bus operation is stretched, and that control strobe continues to be driven by the XA until WAIT
goes low again. For this feature to be used, an external circuit must be present to generate the
WAIT signal at the appropriate times.
The XA has an internal bus configuration feature that allows programming the various types of
external bus cycles to different lengths, so that in most applications the WAIT line will not be
needed. This feature will be explained in detail in a later section.
7.1.9 EA - External Access
The EA input determines whether the XA operates in single-chip mode, or begins running code
from the internal program memory after reset. If EA is low as Reset goes high, the first code
fetch (and all others after that) is made off-chip. If EA is high as Reset goes high, the XA will
execute the on-chip code first, but will still attempt to execute instructions from external
memory at addresses above the limit of on-chip code. The level on the EA pin is latched as reset
goes high, so whatever mode is selected remains valid until the next reset.
On some XA derivatives, the pin used for the EA function may be shared with another function
that becomes active after the XA begins code execution.
XA User Guide
279
3124/97
7.1.10 BUSW - Bus Width
The external XA bus may be configured to be 8 or 16 bits in width. The XA allows the bus
width to be programmed in 2 ways. In a system where instructions are initially fetched from onchip code memory, the user program can configure the external bus size (and many other
aspects of the bus) prior to the bus actually being used.
When the initial code fetches must be done using off-chip code memory, however, the XA must
know the bus width before the first off-chip code fetch can begin.
On some XA derivatives, the BUSW function may share a pin with some other function. In this
case, the level on the BUSW pin is latched as Reset is released and that selection is kept until
the next Reset. The secondary function on that pin will be active after Reset when the processor
begins executing code normally.
Unlike the EA function, the bus width set by the BUSW pin at reset may be over-ridden by a
user program, making setting by use of the BUSW pin unnecessary in most systems. Settings in
the Bus Configuration Register allow changing the bus size under program control. This feature
is covered in more detail in the next section.
7.2 Bus Configuration
The standard XA external bus has a number of configuration options. In addition to the data bus
width selection discussed previously, the number of address lines used for external accesses is
programmable, as is the bus timing.
7.2.1 a-Bit and 16-Bit Data Bus Widths
The standard XA external bus allows both 8-bit and 16-bit bus widths. BUSW=O selects an 8-bit
bus and BUSW=l selects a 16-bit bus. On power-up, the XA defaults to the 16-bit bus (due to
an on-chip weak pull-up on BUSW). The bus width is determined by the value of the BUSW pin
as Reset is released, unless a user program overrides that setting by writing to the Bus
Configuration Register (BCR), shown in Figure? .1.
3/24/97
280
External Bus
BCR
1-
1-
1-
1
WAITD
BUSD
BC2
BC1
BCQ
WAITD:
WAIT disable. Causes the XA external bus interface to ignore the value on the
WAIT input. This allows tying the WAIT input high for applications that use
internal code and do not need the WAIT function.
BUSD:
Bus disable. Causes XA external bus functions to be disabled permanently.
The primary purpose of this is to allow prevention of inadvertent activation of
the bus by an instruction pre-fetch when the XA is executing code near the end
of the on-chip code memory.
BC2 - BCO:
These bits select the XA external bus configuration, specifically the number of
data bits and the number of address lines. The supported combinations are
shown below.
000 : 8-bit data bus, 12 address lines
001 : 8-bit data bus, 16 address lines
01 Q : 8-bit data bus, 20 address lines
011 : 8-bit data bus, 24 address lines
100 : < function reserved>
101 : < function reserved>
110 : 16-bit data bus, 20 address lines
111 : 16-bit data bus, 24 address lines
Reserved for possible future use. Programs should take care when writing to
registers with reserved bits that those bits are given the value O. This will
prevent accidental activation of any function those bits may acquire in future
XA CPU implementations.
Figure 7.1 Bus Configuration Register (BCR)
XA User Guide
281
3/24/97
Figures 7.2 and 7.3 show the address and data functions present on XA bus related pins when
used with each available bus width.
XA
.....
.....
A3-AO
A4 - A11/
DO - D7
......,.
........
....
........
A12 - A23
4 low order address lines,
always driven
8 multiplexed address
and data lines
Up to 12 high order address
lines, always driven
Figure 7.2 a-Bit External Bus Configuration
XA
....
-
A3 - A1
A4 - A19/
DO - D15
A20 - A23
- -
......
4 low order address lines,
always driven
.....
16 multiplexed address
and data lines
.....
Up to 4 high order address
lines, always driven
-
Figure 7.3 16-Bit External Bus Configuration
7.2.2 Typical External Device Connections
Many possibilities exist for connecting and using external devices with the XA bus. The bus will
support EPROMs, RAMs, and other memory devices, as well as peripheral devices such as
UARTs, and parallel port expanders. The following diagrams show a generalized connection of
devices for 8-bit and 16-bit XA bus modes.
3/24/97
282
External Bus
-..
ALE
A4DOA11D7
- .....
......
-
LE
..c.
u
-'?oo
CX)~
as
.....
......
.....
A3 - AO,
(A12 - A19)
A4 - A11
8-bit
peripheral
device
"C
"C
-
XA
.....
......
~
:t:::oo
-
I
DO- D7
A3 - AO,
(A12 - A19)
-..
-....... WR }fordata
Address
decode
CS
WR
RD
RD
...
PSEN
device
OE } for ~ode
device
Figure 7.4 Typical XA External Bus Connections for a-Bit Peripheral Devices
Address
decode
-
ALE
A4DOA19D15
XA
A3 - A1
WRH
WRL
RD
PSEN
~-
.....
- -
......
r---
LE
~ ~
"
..c.
u
+-'
+-'~
:Coo
00
I
~~
....
......
"C
"C
~
.....
.....
......
-
A4 - A19
CS
........
......
A4 - A19
8-bit
Device
8-bit
Device
(low byte)
(high byte)
DO - D7
A3 - A1
...
WR}
.... RD
~
.....
"
CS
OE }
fo"la..
device
for~ode
device
.......
-.....-.........
.........
.....
--...
...
D8 - D15
A3 - A1
WR}
RD
OE }
for data
device
for~ode
device
Figure 7.5 Typical XA External Bus Connections for 16-Bit Peripheral Devices
XA User Guide
283
3124/97
7.3 Bus Timing and Sequences
The standard XA external bus allows programming the widths of the bus control signals ALE,
PSEN, WRL, WRH, and RD. There is also an option to extend the data hold time after a write·
operation. The combinations available will allow interfacing most devices to the XA directly
without the need for special buffers or a WAIT state generator. Note that there is always a "rest
clock" after any type of bus cycle except part of a burst mode code read. That is, when a bus
cycle is completed and the bus strobe de-asserted, no new bus cycle will be begun until one
clock has passed with no bus activity.
7.3.1 Code Memory
Interfacing with external code memory, typically in the form of EPROMs, is enabled by the
PSEN control signal. If the XA is configured to execute internal code memory at reset, by the
setting of the EA pin, it will automatically begin to fetch external code if the program crosses
the boundary from internal to external code space. The location of this boundary varies for
different XA derivatives, depending on the size of the internal code memory for each part.
Since the XA employs a pre-fetch queue in order to optimize instruction execution times,
fetching of external instructions may begin before program execution actually crosses the on/offchip code memory boundary. If a branch or subroutine return is located near the end of on-chip
code memory, the off-chip fetch would be unnecessary, and may in fact cause problems if the
XA ports that implement the external bus are being used for other purposes. For this reason, the
BUSD (bus disable) bit in the Bus Configuration Register (BCR) is provided to prevent the XA
from using the external bus for code or data operations.
Note also that external code read cycles may sometimes be aborted by the XA. This happens
when a code pre-fetch is occurring on the bus and the XA must execute a branch. The
instruction data from the code pre-fetch will not be needed, so the bus cycle will be terminated
immediately. This may appear as an ALE with no subsequent PSEN strobe, or a PSEN strobe
that is shorter than that specified by the bus timing registers.
Code Read with ALE
The classic operation of a multiplexed address and data bus involves the issuance of an address,
along with its associated control signal, for every bus cycle. The XA uses the bus control signal
ALE to indicate that an address is on the bus that must be latched through the following code or
data operation. The following diagram shows a code memory fetch in a cycle using ALE.
Burst Code Read (No ALE)
The XA does not always require an ALE cycle for every code fetch. This feature is included
specifically to improve performance when the XA executes code from external memory, while
increasing the access time available for the external memory device. Because the lower four
address lines of the external bus are always driven, not multiplexed, the XA can access up to 16
bytes (or 8 words) of sequential code memory each time an ALE is issued. This type of fast
sequential code read is called a burst read. Of course, any type of jump, branch, interrupt, or
other change in sequential program flow will require an ALE in order to change the code fetch
address in a non-sequential manner. Any data operation (read or write) on the XA external bus
also requires an ALE cycle and will cause any subsequent external code fetch to begin with an
ALE cycle also.
3124/97
284
External Bus
XTAL1
Address bus
=x
Address/~
Databus~
,
inst!uction data:
,
\'--_ _
X'-__~___"-
~I.,.----r--------.-
Note: the timing of this type of bus operation is user programmable. The timing shown
here is generated by the Bus Timing Register setup: ALEW =0, CRA 1/0 =01.
Figure 7.6 Typical External Code Read Using ALE
The following diagram shows a typical sequential code fetch where no ALE is issued between
code reads. Also note that thePSEN bus control signal does not toggle, but remains asserted
throughout the burst code read
XTAL1
ALEJ\
,
~~------~--------~------~----~~----I
Address bus
==X~--_----oJ~X"-__
- r -_ _
---.'~X'---_,..._---
Address/
Data bus
\~----~--~--~Note: the timing of this type of bus operation is user programmable. The timing shown
here is generated by the Bus Timing Register setup: ALEW = 0, CR1/0 = 01.
Figure 7.7 Burst Mode (Sequential) External Code Read
XA User Guide
285
3/24/97
7.3.2 Data Memory
Reads and writes on the XA external bus are controlled through the use of the RD, WRL, and
WRH signals. Since the XA bus supports both 8-bit and 16-bit widths, as well as byte and word
read and write operations, several different versions of the basic bus cycles are possible. These
are described in the following sections.
Data memory, like code memory, has a boundary where the internal data memory ends, and
above which the XA will switch to the external bus in order to act on data memory. This onloffchip data memory boundary may be in a different place for various XA derivatives, depending
upon the amount of internal data memory built into a specific derivative.
Typical Data Read
A simple byte read on an 8-bit bus or any read on a 16-bit bus both begin with an ALE cycle,
where the XA presents the address of the data location that is to be read on the bus. This is
followed by the assertion of the RD strobe, that causes the external device to present its data on
the bus. This process is shown in the diagram below.
XTAL1
ALE~
,
~~------~~------~------~------~
Address bus
==><
Address/~
Oatabus~
,
da~a in to XA
~ X'--~----r-
,
;
X'-_---I___
---L-
Note: the timing of this type of bus operation is user programmable. The timing shown
here is generated by the Bus Timing Register setup: ALEW = 0, ORA 1/0 01.
=
Figure 7.8 Typical External Data Read
3124/97
286
External Bus
Word Read on an a-Bit Data Bus
When the XA external bus is configured for an 8-bit data width, a word read operation is
automatically performed as two byte reads at sequential addresses. Since the XA CPU requires
word operations to be performed at even addresses, the second half of any word read on a bytewide bus always uses the same upper address latched by ALE. for this operation, the low order
byte first is read at the even byte address. then the high order byte is read at the next (odd)
address. So, only one ALE is required in this case. The diagram below shows this sequence.
XTAL1
ALE~~~______~______~______~______~____
Address bus
Addressl
Data bus
==><____
X
e-ve-n-ad-d-r-es_s-_ _--,J~
da~a in to XA
odd
~ddress
I
I
\\...---------r----.------Jl
Note: the timing of this type of bus operation is user programmable. The timing shown
here is generated by the Bus Timing Register setup: ALEW = 0, DRA 110 = 01 , DR1 10 = 01.
Figure 7.9 Word Read on a-Bit Data Bus
Byte Read on a 16-Bit Data Bus
When an instruction causes a read of one byte of data from the external bus, when it is
configured for 16-bit width, a simple read operation is performed. This results in 16 bits of data
being received by the XA, which uses only the byte that was requested by the program. There is
no way to distinguish a byte read from a word read on the external bus when it is configured for
a 16-bit widtho
XA User Guide
287
3/24/97
Typical Data Write
A data write operation begins with an ALE cycle, like a read operation, followed by the
assertion of one or both of the write strobes, WRL and WRH. This simple bus cycle applies to
byte writes on an 8-bit data bus and all writes on a 16-bit data bus.
A byte write on an 8-bit data bus will always use only the WRL strobe. A byte write on a 16-bit
data bus will always use either the WRL or WRH strobe, depending on whether the byte is at an
even or odd address. A word write on a 16-bit bus requires the assertion of both the WRL and
WRH strobes. The simple data write cycle is shown below.
XTAL1
ALEJ\
,
~~------~~------~------~------~
,
Address bus
Address/
Data bus
J---_---_....JX'-----r---------.---------r
,
~
~
data out
from XA
X
.
- - I -_ _ _ _ _ _-.l..._ _ _ _ _ _----L..
1 . . . . . ._ _
WRL and/or
WRH
Note: the timing of this type of bus operation is user programmable. The timing shown here
is generated by the Bus Timing Register setup: ALEW =0, DWA 1/0 =00, WMO =0, WM1 =O.
Figure 7.10 Typical External Data Write
3124/97
288
External Bus
Word Write on an a-Bit Data Bus
When a word write operation is done with the bus configured to an 8-bit width, the XA
automatically performs two byte writes. First, the low order byte is written (at the even byte
address), then the high order byte is written at the next (odd) address. As with a word read on an
8-bit bus, this requires only a single ALE cycle at the beginning of the process. This sequence is
shown in the following diagram.
XTAL1
Address bus
Addressl
Data bus
==><
even address
-L
~,-_ _o,....~d_ad_d_re_s_s_~
data out
from XA
data out
from XA
Note: the timing of this type of bus operation is user programmable. The timing shown here
is generated by the Bus Timing Register setup: ALEW = 0, DWA1/0 = 00, DW1/0 = 00,
WMO = 0, WM1 = O.
Figure 7.11 Word Write on a-Bit Data Bus
XA User Guide
289
3124/97
External Bus Signal Timing Configuration
The standard XA bus also provides a high degree of bus timing configurability. There are
separate controls for ALE width, data read and write cycle lengths, and data hold time. These
times are programmable in a range that will support most RAMs, ROMs, EPROMs, and
peripheral devices over a wide range of oscillator frequencies without the need for additional
external latches, buffers, or WAIT state generators.
Programmable bus timing is controlled by settings found in the BusTiming Register SFRs,
named BTRH, and BTRL, shown in Figures 7.12 and 7.13.
BTRH
DW1, DWO:
DWl
I DWO I DWAl I DWAO I
DRl
DRO
DRA1
DRAO
Data Write without ALE. Applies only to the second half of a 16-bit write operation when
the bus is configured to 8 bits.
00 : Data write cycle is 2 clock in duration.
01 : Data write cycle is 3 clocks in duration.
10 : Data write cycle is 4 clocks in duration.
11 : Data write cycle is 5 clocks in duration.
DWA 1, DWAO: Data Write with ALE. Selects the length (in CPU clocks) of the entire data write cycle,
including ALE.
00 : Data write cycle is 2 clocks in duration.
01 : Data write cycle is 3 clocks in duration.
10 : Data write cycle is 4 clocks in duration.
11 : Data write cycle is 5 clocks in duration.
DR1, DRO:
Data Read without ALE. Applies only to the second half of a 16-bit read operation when
the bus is configured to 8 bits.
00 : Data read cycle is 1 clock in duration.
01 : Data read cycle is 2 clocks in duration.
10 : Data read cycle is 3 clocks in duration.
11 : Data read cycle is 4 clocks in duration.
DRA 1, DRAO:
Data Read with ALE. Selects the length (in CPU clocks) of the entire data read cycle,
including ALE.
00 : Data read cycle is 2 clocks in duration.
01 : Data read cycle is 3 clocks in duration.
10 : Data read cycle is 4 clocks in duration.
11 : Data read cycle is 5 clocks in duration.
Notes:
- See text regarding disallowed bus timing combinations.
- The bit pairs DW1 :0, DWA1 :0, DR1 :0, DRA1 :0, CR1 :0, and CRA1:0 determine the length of entire
bus cycles of different types. Bus cycles with an ALE begin when ALE is asserted. Bus cycles without
an ALE begin when the bus strobe is asserted or when the address changes (in the case of burst
mode code reads). Bus cycles end either when the bus strobe is de-asserted or when data hold time
is completed (in the case of a data write with extra hold time, see bit WMO).
Figure 7.12 Bus Timing Register High Byte (BTRH)
3/24/97
290
External Bus
BTRL
~IW__M_1__~W_M_0__~I_A_L_EW__~____~I_C_R_1__~IC_R_0__~I_C_RA_1__~I_C_R_A_0~
WM1:
Write Mode 1. Selects the width of the write pulse.
o : Write pulse (WR) width is 1 CPU clock.
1 : Write pulse (WR) width is 2 CPU clocks.
WMO:
Write Mode O. Selects the data hold time.
o : Data hold time is minimum (0 clocks).
1 : Data hold time is 1 CPU clock.
ALEW:
ALE width selection. Determines the duration of ALE pulses.
o : ALE width is one half of one CPU clock.
1 : ALE width is one and a half CPU clocks.
CR1, CRO:
Code Read. Selects the length of a code read cycle when ALE is not used.
00 : Code read cycle is 1 clocks in duration.
01 : Code read cycle is 2 clocks in duration.
10 : Code read cycle is 3 clocks in duration.
11 : Code read cycle is 4 clocks in duration.
CRA1, CRAO:
Code Read with ALE. Selects the length of a code read cycle when ALE is used prior
to PSEN being asserted.
00 : Code read cycle is 2 clocks in duration.
01 : Code read cycle is 3 clocks in duration.
10 : Code read cycle is 4 clocks in duration.
11 : Code read cycle is 5 clocks in duration.
Reserved for possible future use. Programs should take care when writing to registers
with reserved bits that those bits are given the value O. This will prevent accidental
activation of any function those bits may acquire in future XA CPU implementations.
Notes:
- See text regarding disallowed bus timing combinations.
- The bit pairs DW1 :0, DWA 1 :0, DR1 :0, DRA 1:0, CR1 :0, and CRA 1:0 determine the length of entire
bus cycles of different types. Bus cycles with an ALE begin when ALE is asserted. Bus cycles without
an ALE begin when the bus strobe is asserted or when the address changes (in the case of burst
mode code reads). Bus cycles end either when the bus strobe is de-asserted or when data hold time
is completed (in the case of a data write with extra hold time, see bit WMO).
Figure 7.13 Bus Timing Register Low Byte (BTRL)
XA User Guide
291
3124/97
Disallowed Bus Timing Configurations
Some possible combinations of bus timing register settings do not make sense and the XA
cannot produce working bus signals that match those settings. The disallowed combinations
occur where the sum of the specified components of a bus cycle exceed the specified length of
the entire cycle. Two simple rules define the allowed/disallowed combinations. Violating these
rules may result in incomplete bus cycles, for example a data read cycle in which an address and
ALE pulse are output, but no read strobe (RD) is produced.
For data write cycles on the external bus there are two conditions that must be met. The first
applies to data write cycles with no ALE:
WMI + WMO
~
DWI:O
This says that the sum of the values associated with the WM I and WMO fields must be less than
or equal to the value of the DW field. Note that this is the value of the timing durations that they
specify. For example, if the WM I field specifies a 2 clock write pulse and the WMO field
specifies a I clock data hold time, those two times together (3 clocks) must be less than or equal
to the value specified by the DWI:O field. In this case the DWI:O field must specify a total bus
cycle duration of at least 3 clocks. The other rule uses the same structure, as follows.
A second requirement applies to write cycles with ALE:
ALEW + WMI + WMO
~
DWAI:O
The configuration for data read has only one requirement, which applies to data read cycles with
ALE:
ALEW
~
DRAI:O + I
The configuration for code read also has only one requirement, which applies to code read
cycles with ALE:
ALEW ~ CRA1:0 +1
7.3.3 Reset Configuration
Upon reset, at the time of power up or later, the XA bus is initially configured in certain ways.
As previously discussed, the pins EA and BUSW select whether the XA will begin operation
from internal code, and whether the bus will be 8-bits or 16-bits.
The values for the programmable bus timing are also set to a default value at reset. All of the
timing values are set to their maximum, providing the slowest bus cycles. This setting allows for
the slowest external devices that may be sued with the XA without WAIT generation logic. The
user program should set the bus timing to the correct values for the specific application in the
system initialization code. Refer to the data sheet for a particular XA derivative for details of the
values found in registers and SFRs after reset.
3/24/97
292
External Bus
7.4 Ports
I/O ports on any microcontroller provide a connection to the outside world. The capabilities of
those I/O ports determine how easily the microcontroller can be interfaced to the various
external devices that make up a complete application. The standard XA I/O ports provide a high
degree of versatility through the use of programmable output modes and allow easy connection
to a wide variety of hardware.
7.4.1 1/0 Port Access
The standard on-chip I/O ports of the XA are accessed as SFRs. The SFR names used for these
ports begin with port 0, called PO. Port numbers and names go up in sequence from there, to the
number of ports on a specific XA derivative. Ports are normally identified by their names in
assembler source code, such as: "MOV Pl,#O". This instruction causes the value 0 to be written
to port 1.
XA 1/0 ports are typically bit addressable, meaning that individual port bits are readable,
writable, and testable. An instruction using a port bit looks like this: "SETB P2.1 ". This
particular example would result in the second lowest bit in port 2 (bit 1) having a 1 written to it.
Reading of a Port Pin Versus the Port latch
Each I/O port has two important logic values associated with it. The first is the contents of the
port latch. When data is written to a port, it is stored in the port latch. The second value is the
logic level of the actual port pin, which may be different than the port latch value, especially if a
port pin is being used as an input.
When a port is explicitly read by an instruction, the value returned is that from the pin. When a
port is read intrinsically, in order to perform some operation and store the value back to the port,
the port latch is read. This type of operation is called a read-modify-write.
1) The following instructions cause read-modifywrite operations, and read the port latch when a
port or port bit is specified as the destination:
2) The following instruction reads the
port pins when a port is specified as
the destination operand:
ADD
ADDC
ADDS
AND
DJNZ
OR
SUB
SUBB
XOR
Px,
Px,
Px,
Px,
Px,
Px,
Px,
Px,
Px,
CMP
CLR
JBC
MOV
SETB
Px.y
PX.y, rel8
PX.y, C
Px.y
...
...
...
...
...
...
...
...
...
Px, ...
3) When a port or port bit is specif~ed
as a source in any instruction, the port
pin is always read.
Figure 7.14 How ports are read.
XA User Guide
293
3124/97
7.4.2 Port Output Configurations
Standard XA 110 ports provide several different output configurations. One is the 80CS1 type
quasi-bidirectional port output. Others are open drain, push-pull, and high impedance (input
only). It is important to note that the port configuration applies to a pin even if that pin is part of
the external bus. Bus pins should normally be configured to push-pull mode. Also, the port
latches for pins that are to be used as part of the external bus must be set to one (which is the
reset state). A zero in a port latch will override bus operations and force a zero on the
corresponding bus position.
The port configuration is controlled by settings in two SFRs for each port. One bit in each port
configuration register is associated with a port pin in the corresponding bit position. These port
configuration SFRs are called: PnCFGA and PnCFGB, where "n" is the port number. So, the
configuration registers for port 1 are named P1CFGA and P1CFGB. The table below shows the
port control bit combinations and the associated port output modes.
Table 7.1
PnCFGB
PnCFGA
Port Output Mode
0
0
Open drain.
0
1
Quasi-bidirectional (default).
1
0
High impedance.
1
1
Push-pull.
7.4.3 Quasi-Bidirectional Output
The default port output configuration for standard XA 110 ports is the quasi-bidirectional output
that is common on the 80CS1 and most of its derivatives. This output type can be used as both
an input and output without the need to reconfigure the port. This is possible because when the
port outputs a logic high, it is weakly driven, allowing an external device to pull the pin low.
When the pin is pulled low, it is driven strongly and able to sink a fairly large current. These
features are somewhat similar to an open drain output except that there are three pullup
transistors in the quasi -bidirectional output that serve different purposes.
One of these pullups, called the "very weak" pullup, is turned on whenever the port latch for a
particular pin contains a logic 1. The very weak pullup sources a very small current that will pull
the pin high if it is left floating.
A second pullup, called the "weak" pullup, is turned on when the port latch for its associated pin
contains a logic 1 and the pin itself is a logic 1. This pullup provides the primary source current
for a pin that is outputting a 1, and can drive several TTL loads. If a pin that has a logic 1 on it is
pulled low by an external device, the weak pullup turns off, and only the very weak pullup
remains on. In order to pull the pin low under these conditions, the external device has to sink
enough current to overpower the weak pullup and pull the voltage on the port pin below its input
threshold.
3124/97
294
External Bus
The third (and final) pullup is referred to as the "strong" pullup. This pullup is included to speed
up low-to-high transitions on a port pin when the port latch changes from 0 to 1. When this
occurs, the strong pullup turns on for a brief time, two CPU clocks, pulling the port pin high
quickly, then turning off again.
The quasi-bidirectional output structure normally provides a means to have mixed inputs and
outputs on port pins without the need for special configurations. However, it has several
drawbacks that can be problems in certain situations. For one thing, quasi-bidirectional outputs
have a very small source current and are therefore not well suited to driving certain types of
loads. They are especially unsuited to directly drive the bases of external NPN transistors, a
common method of boosting the current of 110 pins.
Also, since the weak pullup turns off when a port pin is actually low, and the strong pullup turns
on only for a brief time, it is possible that under certain port loading conditions, the port pin will
get "stuck" low and cannot be driven high. This tends to happen when an external device being
driven by the port pin has some leakage to ground that is larger than the current supplied by the
very weak pullup of the quasi-bidirectional port output. If there is also a fairly large capacitance
on the pin, from a combination of the wiring itself and the pin capacitance of the device(s)
connected to the pin, the strong pullup may not succeed in pulling the pin high enough while it
is turned on. When the strong pull up is then turned off, the leakage of the external device pulls
the pin low again, since only the very weak pullup is turned on at that point and the leakage is
greater than the very weak pull up source current. These issues are the reason for enhancing the
port configurations of the XA.
A diagram of the quasi-bidirectional output structure is shown in the figure below.
Vdd
port latch
data
input
data ~--oc
Figure 7.15 Structure of the Quasi-Bidirectional Output Configuration
XA User Guide
295
3/24/97
Open Drain Output
Another port output configuration provided by the standard XA 110 ports is open drain. This
configuration turns off all pull ups and only drives the pulldown transistor of the port driver
when the port latch contains a logic O. To be used as a logic output, a port configured in this
manner must have an external pullup, typically a resistor tied to Vdd. The pulldown for this
mode is the same as for the quasi-bidirectional mode.
An advantage of the open drain output is that ismay be used to create wired AND logic. Several
open drain outputs of various devices can be tied together, and anyone of them can drive the
wire low, creating a logical AND function without using a logic gate. The figure below show the
structure of the open drain output.
port latch ._~
data
NI
--vv-I
input
data ~--o<.
Figure 7.16 Structure of the Open Drain Output Configuration
Push-Pull Output
The push-pull output mode has the same pull down structure as both the open drain and the quasibidirectional output modes, but provides a continuous strong pullup when the port latch contains
a logic 1. This mode uses the same pullup as the strong pull up for the quasi-bidirectional mode.
The push-pull mode may be used when more source current is needed from a port output. The
output structure for this mode is shown below.
Vdd
port latch
data
input
data ~--o<
Figure 7.17 Structure of the Push-Pull Output Configuration
3/24/97
296
External Bus
High Impedance Output
The final XA port output configuration is called high impedance mode. This mode simply turns
all output drivers on a port pin off. Thus, the pin will not source or sink current and may be used
effectively as an input-only pin with no internal drivers for an external device to overcome.
7.4.4 Reset State and Initialization
Upon chip reset, all of the port output configurations are set to quasi-bidirectional, and the port
latches are written with all ones. The quasi-bidirectional output type is a good default at powerup or reset because it does not source a large amount of current if it is driven by an external
device, yet it does not allow the port pin to float. A floating input pin on a CMOS device can
cause excess current to flow in the pin's input circuitry, and of course all port pins have input
circuits in addition to outputs.
7.4.5 Sharing of 1/0 Ports with On-Chip Peripherals
Since XA on-chip peripheral devices share device pins with port functions, some care must be
taken not to accidentally disable a desired pin function by inadvertently activating another
function on the same pin. A peripheral that has an output on a pin will use the 110 port output
configuration for that pin (quasi-bidirectional, open drain, push-pull, or high impedance).
The method of sharing multiple functions on a single pin involves a logic AND of all of the
functions on a pin. So, if a port latch contains a zero, it will drive that port pin low, and any
peripheral output function on that pin is overridden. Conversely, an on-chip peripheral
outputting a zero on a pin prevents the contents of the port latch from controlling the output
level. It is usually not an issue to avoid turning on an alternate peripheral function on a pin
accidentally, since most peripherals must be either explicitly turned on or activated by a write to
one of their SFRs. It is more likely that a user program could erroneously write a zero to a port
latch bit corresponding to a pin whose with a peripheral function that is being used and therefore
disable that function. The simple rule to follow is: never write a zero to a port bit that is
associated with an active on-chip peripheral, or that should only be used an input.
XA User Guide
297
3124/97
8 Special Function Register Bus
The Special Function Register Bus or SFR Bus is the means by which all Special Function
Registers are connected to the XA CPU so that they may be read and written by user programs.
This includes all of the registers contained in peripherals such as Timers and UARTs, as well as
some CPU registers such as the PSW. CPU registers communicate functionally with the CPU
via direct connections, but read and write operations performed on them are routed through the
SFR bus.
The SFR bus provides a common interface for the addition of any new functions to the XA core,
thus supplying the means for building a large and varied microcontroller derivative family. This
is illustrated in Figure 8.1.
XA CPU Core
Figure 8.1. Example of peripheral functions connected to the XA SFR bus.
8.1 Implementation and Possible Enhancements
The SFR bus interface is itself not part of the XA CPU core, but a separate functional block.
Since the SFR bus controller is a separate block, writes to SFRs may occur simultaneously with
the beginning of execution of the next instruction. If the next instruction attempts to access the
SFR bus while it is still busy, the instruction execution will stall until the SFR bus becomes
available. SFR bus read and write clocks each take 2 CPU clocks to complete. However, the
starting time of those 2 clocks has a one clock uncertainty, so the time from the SFR bus
controller receiving a request until it is completed can be either 2 or 3 clocks.
3/24/97
298
Special Function Register Bus
The SFR bus implementation on initial XA derivatives is an 8-bit interface. This means that
word reads and writes are not allowed. In the future, higher performance XA architecture
implementations may expand the capabilities of the SFR bus by supporting 16-bit accesses.
One enhancement to the SFR bus would be to have it divide 16-bit access requests into two 8-bit
accesses. This leaves the actual SFR bus width at 8 bits, but allows a user program to act as if it
was 16-bits. The highest performance alternative is a full 16-bit SFR bus. This would require
extra hardware in the XA to implement, but may eventually become necessary on order to
achieve very high performance with some future enhanced XA core implementation.
8.2 Read-Modify-Write Lockout
Some of the SFRs that are accessed via the SFR bus contain interrupt flags and other status bits
that are set directly by the peripheral device. When a read-modify-write operation is done on
such an SFR, there is a possibility that a peripheral write to a flag bit in the same SFR could
occur in the middle of this process. A standard mechanism is defined for the XA to deal with
such cases, which is called Read-Modify-Write lockout. A read- modify-write is defined as an
operation where a particular SFR is read, altered and written during the execution of a single XA
instruction.
The instructions that fit this description are those that write to bits in SFRs and those that modify
an entire SFR, except for the MOV instruction. This happens to be the same operations as those
that read port latches rather than port pins as specified in Chapter 7, only the SFRs involved are
different.
The mechanism used throughout XA peripherals to avoid losing status flags during a readmodify-write operation first involves detecting that such an operation is in progress. A signal
from the CPU to the peripherals indicates such a condition. When a peripheral detects this, it
prevents the CPU write to just those status flags that the peripheral has already updated since the
beginning of the read-modify-write operation. This basically makes it look as if the peripheral
flag update happened just after the read-modify-write operation completed, rather than during it.
Once the read-modify-write operation is completed, a CPU write may affect all bits in these
SFRs.
XA User Guide
299
3/24/97
9 80C51 Compatibility
Many architectural decisions and features were guided by the goal of 80CS1 compatibility when
the XA core specification was written. The processor's memory configuration, memory
addressing modes, instruction set, and many other things had to be taken into account.
9.1 Compatibility Considerations
Source code compatibility of the XA to the 80CS1 was chosen as a goal for many reasons.
Complete compatibility with an existing processor is not possible if the new processor is to have
substantially higher performance.
The XA architecture makes use of a number of rules for 80CSI compatibility. An 80CSI to XA
source code translator program is intended to be the means of providing compatibility between
the architectures. For the translator software to be fairly simple, a one-to-one translation for all
80CSI instructions is a major consideration. The XA instruction set includes many instructions
that are more powerful than 80CS1 instructions and yet perform roughly the same function.
80CSI instruction can therefore be translated into those XA instructions. When this is not the
case, an 80CS1 instruction may be included in its original form in the XA. The XA memory map
and memory addressing modes are also a superset of the 80CS1, making source code translation
easy to accomplish. Other CPU features are made compatible to the extent that such is possible.
In rare cases, when this compatibility could not be provided for some important reason, the
changes were kept to the minimum while maintaining the XA goals of high performance and
low cost.
9.1.1 Compatibility Mode, Memory Map, and Addressing
Specific XA registers are reserved for use as 80CS1 registers when translating code. The A
register, the B register, and the data pointer all map to a pre-determined place in the XA register
file (see figure 9.1). The accumulator (A) is the only one of these that required special hardware
support in the XA, because the accumulator can be read or tested directly by certain instructions
and in order to generate the parity flag.
The 4 banks of 8 byte registers that are found in the 80CSI are duplicated in the XA. The only
difference is that in the XA, these registers do not normally overlap the lower 32 bytes of data
memory space as they do in the 80CSI. To allow code translation, a special 80CSI compatibility
mode causes the XA register file to copy the 80CSI mapping to data memory. This mode is
activated by the CM bit in the System Configuration Register (SCR).
3/24/97
300
8051 Compatibility
R7
L
SSP
,
U?P
R7H
1
R7l
I
R6
R6H = DPH
DP,TR
,
R6l = DPl
Global registers.
I
R5
R5H
R4
R4H=B
R3
R3H
,
R5l
I
R4l = A (ACC)
I
I
I
i
R3L
r-l-
I
R2
R2H
R1
R1H
RD
ROH
I
I
I
,
R2l
Banked Registers
I
R1L
I
I
ROL
I
I
r-
,/
I
I
Figure 9.1. XA Register File
Other important registers of the 80C5l are provided in other ways. The program status word
(PSW) of the XA is slightly different than the 80C5l PSW, so a special SFR address is reserved
to provide an 80C5l compatible "view" of the PSW for use by translated code. This alternate
PSW, called PSW5l, is shown in the figure 9-.2. The FO flag and the Fl flag are simply readable
PSW51
I
C : AC : FO : RS1: RSO: OV: F1
P
Figure 9.2. PSW CPU status flags
and writable bits. The P flag provides an even parity bit for the 80C5l A register and always
reflects the current contents of that register. Note that the P flag, the FO flag, and the Fl flag
only appear in the PSW5l register.
The 80C5l indirect data memory access mode, using RO or R 1 as pointers, requires special
support on the XA, where pointers are normally 16 bits in length. The 80C5l compatibility
mode also causes the XA to mimic the 80C5l indirect scheme, using the first two bytes of the
register file as indirect pointers, each zero extended to make a l6-bit address. Due to this and the
previously mentioned register overlap to memory feature, the compatibility mode must be
turned on in order to execute most translated 80C5l code on the XA. Other than the two
aforementioned effects, nothing else about XA functioning is affected by the compatibility mode.
XA User Guide
301
3/24/97
The 80CSl mapped the special function registers (SFRs) into the direct address space, from
address 80 hex to FF hex. SFRs were only accessed by instruction that contain the entire SFR
address, so translation to the XA is fairly simple. Since references to SFRs are normally done by
their name in 80CSl source code, the translation just copies the name into the XA code output.
If an SFR happened to be referred.to by its address, its name must be found so that it can be
inserted into the XA code. This would require that an SFR table be available for the 80CSl
derivative for which the code was originally written.
The XA has another mode which may be useful for translated 80CSI code. In order to save
stack space as well as speed up execution, a Page Zero (PZ) mode causes return addresses on the
stack to be saved as 16 bits only, instead of the usual 24 bits (which occupy 32 bits due to word
alignment on the XA stack). All other program and data addresses are also forced to be 16-bits.
If an entire 80CSI application program i~ translated to the XA, it will very likely fit within this
64 K limit, allowing the use of this mode.
Other aspects of the processor stack have been altered on the XA. For one, the standard
direction of stack growth for 16 bit processors has been adopted. So, the XA stack grows
downward, from higher to lower addresses in data memory. The stack can now be nearly 64K in
size if necessary, and begin anywhere in its data segment so may be easily moved to a new
location for translated 80CSl applications. This stack direction change is important to match the
stack contents to normal data memory accesses on the XA.
80CSl code translated to run on the XA will also tend to use more stack space for two reasons.
First, the PSW is automatically saved during interrupt and exception processing on the XA. The
original 80CSI code should have also saved the PSW explicitly, but the XA PSW is 16 bits in
length. Secondly, the initial implementation of the XA allows only word writes to the stack.
Both byte and word operations may be performed, but both types of operations use 16 bits of
stack space.
The tendency for stack size increase, in addition to the stack growth direction will require some
changes to be made if a complete 80CSl application program is translated to run on the XA.
9.1.2 Interrupt and Exception Processing
Interrupt handling on the XA is .inherently much more powerful than it was on the 80CSl. Along
with this added power and flexibility comes some difference that must be taken into account for
80CSI code conversion.
Previously noted was the fact that the XA automatically saves the PSW during interrupt
processing. If an 80CSI program relied on this not being the case somehow, it would not work
without alteration. This type of reliance is not found in code using common programming
practices and should be very rare.
The XA allows up to 15 interrupt priority levels, compared to only 2 in the standard 80CS1,
although up to 4 levels are available in a few of the newer 80CSI variations. These priorities are
stored as 4-bit values, with the priority for 2 interrupts found in the same SFR byte. This is
3124/97
302
8051 Compatibility
different (and much more powerful) than any 80C51 derivative, and will require minor changes
to code that is translatedo
The method of entering an interrupt routine in the XA uses a vector table stored in low addresses
of the code memory. Each interrupt or exception source has a vector which consists of the
address of the handler routine for that event and a new PSW value that is loaded when the vector
is taken. This differs from the 80C51 approach of fixed addresses for the interrupt service
routines, and again is a much more flexible and powerful method. So, if a complete 80C51
application program is converted for the XA, the interrupt service routines must be re-Iocated
above the XA vector table and the new address stored in the table, a very simple process.
9.1.3 On-Chip Peripherals
Compatibility with standard on-chip peripherals found in the 80C51 has been kept in the XA
whenever possible and reasonable, but not to the extent that some enhancements are not made.
The set of standard peripheral devices includes the UART, Timers a and 1, and Timer 2 from
the 80C52.
The XA UART has been enhanced in a way that does not affect translated 80C51 code. Some
additional features are added through the use of a new SFR, such as framing error detection,
overrun detection, and break detection.
Timers a and 1 remain the same except for one difference in the function, and a difference in
timing. The functional change was to remove the 8048 timer mode (mode 0) and replace it with
something much more useful: a 16-bit auto-reload mode. Sixteen bit reload registers (formed by
RTHn and RTLn) had to be added!\) Timers a and 1 to support the new mode O. In mode 2,
RTLn also replaces THn as the 8-bit reload register.
The relationship of all timer count rates to the microcontroller oscillator has also been changed.
This adds flexibility since this is now a programmable feature, allowing oscillator divided by 4,
16, or 64 to be used as the base count rate for all of the timers. Since XA performance is much
higher (on a clock-by clock basis), an application converted to theXA from the 80C51 would
likely not use the same oscillator frequency anyway.
9.1.4 Bus Interface
The customary 80C51 bus control signals are all found on the standard external XA bus. To
provide the best performance, the details of some of these signals have changed somewhat, and
a few new ones have been added. In addition to the well known ALE, PSEN, RD, WR, and EA,
there are now also WAIT andWRH. The WAIT signal causes wait states to be inserted into any
XA bus clock as long as it is asserted. The WRH signal is used to distinguish writes to the high
order byte when the XA bus is configured to be 16 bits wide.
The multiplexed address/data bus has undergone some renovations on the XA as well. To get
the most performance in a system executing code from the external bus, the XA separates the 4
least significant address lines on to their own pins. Since these lines normally change the most
often, an ALE clock would be required on every external code fetch if these lines were
multiplexed as they are on the 80C51. The 80C51 had time to do this since its performance was
XA User Guide
303
3/24/97
not that high. The XA, however, uses only as many clocks as are needed to execute each
instruction, so an ALE for every fetch would slow things down considerably. With this change,
up to 16 bytes (or 8 words) of code may be accessed without the need to insert an ALE cycle on
the XA bus.
The number of XA clocks used for each type of bus cycle (code read, data read, or data write)
can also be programmed, so that slower peripheral devices can work with the XA without the
need for an external WAIT state generator.
Due to the various changes to the bus just mentioned, an XA device cannot be completely pin
compatible with an 80CS1 derivative if the external bus is used. The changes to application
hardware needed are relatively small and easy to make.
9.1.5 Instruction Set
The simplest goal of the XA for instruction set compatibility was to have every 80CS1
instruction translate to one XA instruction. That has been achieved but for a single exception.
Tl,le 80CS1 instruction, XCHD or exchange digits, cannot be translated in that manner. XCHD is
an instruction that is rarely used on the 80CS1 and could not be implemented on the XA, due to
its internal architecture, without adding a great deal of extra circuitry. So, if this instruction lli
encountered when 80CS1 source code is being translated, a sequence of XA instructions is used
to duplicate the function:
PUSH
MOV
RR
RR
RL
R4H
'R4H,(Ri)
R4H,#4
R4L,#4
R4,#4
MOV
(Ri),R4H
R4H
POP
; Save temporary register.
; Get second operand.
; Swap one byte.
; Swap second byte (theIlAUregister).
; Swap word,
; Result is swapped nibbles in A and R4H.
; Store result.
; Restore temporary register.
If the application requires this sequence to not be interruptible, some additional instruction must
be added in order to disable and re-enable interrupts. The table at the end of this section shows
all of the other XA code replacements for 80CS1 instructions.
The XA instruction set is much more powerful than the 80CS1 instruction set, and as a direct
consequence, the average number of bytes in an instruction is higher on the XA. In code written
for the XA, the capability of a single instruction is high, so the size of an entire XA program·will
normally be smaller than the same program written for an 80CS1. Of course, this depends on .
how much the application can take advantage of XA features. When code is translated from
80CS1 source, however, the size change can be an issue.
In the case of a jump table, where the JMP @A+DPTR instruction is used to jump into a table of
other jumps composed of the 80CS1 AJMP instruction, the XA cannot always duplicate the
function of the jumps in the table with instructions that are 2 bytes in length, as in the case of the
AJMP instruction. An adjustment to the calculation of the table index will be required to make
the translated code work properly. For a data table, accessed using MOVC @A+PC, the distance
to the table may change, requiring a similar index adjustment.
3/24/97
304
8051 Compatibility
Since the XA optimizes the timing of each instruction, there will be very little correspondence to
the original 80C51 timing for the same code prior to translation to the XA. If the exact timing of
a sequence of instructions is important to the application, the translated code must be altered,
perhaps by adding NOPs or delay loops, to provide the necessary timing.
To show how a simple 80CS1 to XA source code translator might work, a subroutine was
extracted from a working 80C51 program and translated using the table at the end of this
document and the other rules presented here. The original 80CS1 source code was:
;StepCal - Calculates a trip point value for motor movement based on
; a percent of pointer full scale (0 - 1000/0).
; Call with target value in A. Returns result in A and IIStepResult".
StepCal: MOV
MOV
MUL
MOV
MOV
Temp2,A
B,#Steplow
AB
StepResult,B
Temp1,A
; Save step target for later use.
; Get low byte of step increment.
; Multiply this by the step target.
; Save high byte as partial result
; Save low byte to use for rounding.
MOV
MOV
MUL
A,Temp2
B,#StepHigh
AB
; Get back the step target.
; Get high byte of step increment,
; and multiply the two.
ADD
JNB
INC
ADD
MOV
RET
A,StepResult
Temp1.7,Exit
A
A,#MotorBot
StepResult,A
; Add the two partial results.
; Least significant byte> BOh?
; If so, round up the final result.
; Add in the 0 step displacement.
; Save final step target.
Exit:
The same code as translated for the XA is as follows:
;StepCal - Calculates a trip point value for motor movement based on
; a percent of pointer full scale (0 - 1000/0).
; Call with target value in A. Returns result in A and IIStepResult".
StepCal: MOV
MOV
MULU.b
MOV
MOV
Temp2,R4L
R4H,#Steplow
R4,R4H
StepResult,R4H
Temp1,R4L
; Save step target for later use.
; Get low byte of step increment.
; Multiply this by the step target.
; Save high byte as partial result.
; Save low byte to use for rounding.
MOV
R4L,Temp2
; Get back the step target.
MOV
R4H,#StepHigh; Get high byte of step increment,
MULU.b R4,R4H
; and multiply the two.
Exit:
ADD
JNB
ADDS
ADD
MOV
RET
XA User Guide
R4L,StepResult
Temp1.7,Exit
R4L,#1
R4L,#MotorBot
StepResult,R4
; Add the two partial results.
; Least significant byte> BOh?
; If so, round up the final result.
; Add in the 0 step displacement.
; Save final step target.
305
3/24/97
In this case, the translated code actually changed very little. Primarily, the 80C51 register names
have been replaced by the new ones reserved for them in the XA. The increment (INC)
instruction became a short add (ADDS), and the mnemonic for multiply (MUL) changed to
MULU8.
Some basic statistical information about these code samples may be found in table 9.1. These
statistics show a large performance increase for the XA code. This is significant because the
code is only simple translated 80C5! code and therefore does not take any advantage of the
XA's unique features.
Table 9.1: 80C51 to XA Code Translation Statistics
80C51
code
XA
translation
Code bytes
28
40
- one NOP added for branch
alignment on XA
Clocks to execute
300
78
- includes XA pre-fetch queue
analysis, raw execution is 66
clocks
15 Jlsec
3.9 Jlsec
Statistic
Time to execute
@ 20MHz
3/24/97
306
Comments
- a nearly 4x improvement
without any optimization
8051 Compatibility
9.2 Code Translation
Table 9.2 shows every 80C51 instruction type and the XA instruction that replaces it. An actual
80C51 to XA source code translator can make use of this table, but must also flag the
compatibility exceptions noted in this section, so that any necessary adjustments may be made to
the resulting XA source code.
Table 9.2: 80C51 to XA Instruction Translations
80C51 Instruction
XA Translation
Arithmetic operations
XA User Guide
ADD
ADD
ADD
ADD
ADDC
ADDC
ADDC
ADDC
A,Rn
A, #data8
A,dir8
A, @Ri
A, Rn
A, #data8
A,dir8
A, @Ri
ADD.b R,R
ADD.b R, #data8
ADD.b R, direct
ADD.b R, [R]
ADDC.bR, R
ADDC.bR, #data8
ADDC.bR, direct
ADDC.bR, [R]
SUBB
SUBB
SUBB
SUBB
A,Rn
A, #data8
A, dir8
A, @Ri
SUBB.bR,
SUBB.b R,
SUBB.b R,
SUBB.b R,
INC
INC
INC
INC
INC
Rn
dir8
@Ri
A
DPTR
ADDS.bR, #1
ADDS.bdirect, #1
ADDS.b[R], #1
ADDS.bR, #1
ADDS.wR, #1
DEC
DEC
DEC
DEC
Rn
dir8
@Ri
A
ADDS.bR, #-1
ADDS.bdirect, #-1
ADDS.b[R], #-1
ADDS.bR, #-1
MUL
DIV
DA
AB
AB
A
MULU.bR, R
DIVU.b R, R
DA
R
307
R
#data8
direct
[R]
3/24/97
Table 9.2: 80C51 to XA Instruction Translations
80C51 Instruction
XA Translation
Logical operations
3/24/97
ANL
ANL
ANL
ANL
ANL
ANL
A,Rn
A, #data8
A, dir8
A, @Ri
dir8, A
dir8, #data8
AND.b
AND.b
AND.b
AND.b
AND.b
AND.b
R,R
R, #data8
R, direct
R, [R]
direct, R
direct, #data8
ORL
ORL
ORL
ORL
ORL
ORL
A,Rn
A, #data8
A, dir8
A, @Ri
dir8, A
dir8, #data8
OR.b
OR.b
OR.b
OR.b
OR.b
OR.b
R,R
R, #data8
R, direct
R, [R]
direct, R
direct, #data8
XRL
XRL
XRL
XRL
XRL
XRL
A,Rn
A, #data8
A, dir8
A, @Ri
dir8, A
dir8, #data8
XOR.b
XOR.b
XOR.b
XOR.b
XOR.b
XOR.b
R, R
R, #data8
R, direct
R, [R]
direct, R
direct, #data8
CLR A
CPL A
SWAP A
MOVS R, #0
CPL.b R
RL.b
R,#4
RL
RLC
RR
RRC
A
A
A
A
RL.b
RLC.b
RR.b
RRC.b
R,
R,
R,
R,
CLR
CLR
SETS
SETB
CPL
CPL
ANL
ANL
ORL
ORL
MOV
MOV
C
bit
C
bit
C
bit
C, bit
CLR
CLR
SETB
SETB
XOR.b
XOR.b
AND
AND
OR
OR
MOV
MOV
bit
bit
bit
bit
PSWL, #data8
direct, #data8
C, bit
C,/bit
C, bit
C,/bit
C, bit
bit, C
308
#1
#1
#1
#1
C,/bit
C, bit
C,/bit
C, bit
bit, C
8051 Compatibility
Table 9.2: 80C51 to XA Instruction Translations
80C51 Instruction
XA Translation
Data transfer
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
A,Rn
A, #dataB
A, dirB
A,@Ri
Rn,A
Rn, #dataB
Rn, dirB
dirB, A
dirB, #dataB
dirB, Rn
dirB, dirB
dirB, @Ri
@Ri,A
@Ri, dirB
@Ri, #dataB
DPTR, #data 16
MOV.b
MOV.b
MOV.b
MOV.b
MOV.b
MOV.b
MOV.b
MOV.b
MOV.b
MOV.b
MOV.b
MOV.b
MOV.b
MOV.b
MOV.b
MOV.w
XCH
XCH
XCH
XCHD
A,Rn
A, dirB
A, @Ri
A, @Ri
XCH.b R, R
XCH.b R, direct
XCH.b R, R
a sequence (see text)
PUSH dirB
POP dirB
PUSH.bdirect
POP.b direct
MOVX
MOVX
MOVX
MOVX
MOVX.bR, [R]
MOVX.bR, [R]
MOVX.b[R], R
MOVX.b[R], R
A, @Ri
A, @DPTR
@Ri,A
@DPTR, A
MOVC A, @A+DPTR
MOVC A, @A+PC
XA User Guide
R, R
R, #dataB
R, direct
R, [R]
R, R
R, #dataB
R, direct
direct, R
direct, #dataB
direct, R
direct, direct
direct, [R]
[Rl, R
[Rl, direct
[R], #dataB
R, #data16
MOVC.bA, [A+DPTR]
MOVC.bA, [A+PC]
309
3/24/97
Table 9.2: BOC51 to XA Instruction Translations
BOC51 Instruction
XA Translation
Relative branches
SJMP rel8
CJNE
CJNE
CJNE
CJNE
A, dir8, rei
A, #data8, rei
Rn, #data8, rei
@Ri, #data8, rei
BR
rel8
CJNE.b R, direct, rei
CJNE.b R, #data8, rei
CJNE.b R, #data8, rei
CJNE.b [R], #data8, r~1
DJNZ Rn, rei
DJNZ dir8, rei
DJNZ.b R, rei
DJNZ.b direct, rei
JZ
JNZ
JC
JNC
JZ
JNZ
BCS
BCC
rei
rei
rei
rei
rei
rei
rei
rei
Jumps, Calls, Returns,
and Misc.
NOP
NOP
AJMP addr11
LJMP addr16
@A+DPTR
JMP
JMP
rel16
JMP
rel16
JUMP [A+DPTR]
ACALL addr11
LCALL addr16
CALL
CALL
RET
RETI
RET
RETI
rel16
rel16
9.3 New Instructions on the XA
While the XA instructions that are similar to 80C51 instructions have a larger addressing range,
more status flags, etc~, the XA also has many entirely new instructions and addressing modes
that make writing new code for the XA much easier and more efficient. The new addressing
modes also make the XA work very well with high level language compilers. A complete list of
the new XA instructions and addressing modes is shown in Table 9.3.
3124/97
310
8051 Compatibility
Table 9.3: Instructions and addressing modes new to the XA
New Instructions and Addressing Modes
alu.w
a •• ,
•••
All of the 80C51 arithmetic and logic instructions
with a 16-bit data size.
SUBB
R, ...
Subtract (without borrow), all addressing modes.
alu
[R], R
Arithmetic and logic operations (ADD, ADDC,
SUB, SUBB, CMPAND, OR, XOR, and MOV)
from a register to an indirect address.
alu
R, [R+]
Arithmetic and logic operations from an indirect
address to a register, with the indirect pointer
automatically incremented.
alu
R,[R+offset8/16]
Arith/Logic operations from an indirect offset
address (with 8 or 16-bit offset) to a register.
alu
direct, R
The 80C51 has only MOV direct, R.
alu
[R], R
The 80C51 has only MOV [R], R.
alu
[R+], R
Arith/Logic operations from a register to an
indirect address, with the indirect pointer
automatically incremented.
alu
[R+offset8/16], R
Arith/Logic operations from a register to an
indirect offset address (with 8 or 16-bit offset).
alu
direct, #data8/16
Arith/Logic operations to a direct address with 8
or 16-bit immediate data.
alu
[R], #data8/16
Arith/Logic operations to an indirect address with
8 or 16-bit immediate data.
alu
[R+], #data8/16
Arith/Logic operations to an indirect address with
8 or 16-bit immediate data with the indirect
pointer automatically incremented.
alu
[R+offset8/16], #data8/16
Arith/Logic operations to an indirect offset
address (with 8 or 16-bit offset), with 8 or 16-bit
immediate data.
MOV
direct, [R]
Move data from an indirect to a direct address.
ADDS R, #data4
The 80C51 can only increment or decrement a
register by 1. ADDS has a range of +7 to -8.
ADDS [R], #data4
Add a short value to an indirect address.
XA User Guide
311
3124/97
Table 9.3: Instructions and addressing modes new to the XA
New Instructions and Addressing Modes
ADDS [R+], #data4
Add a short value to an indirect offset address,
with the indirect pointer automatically
incremented.
ADDS [R+offset8/16], #data4
Add a short value to an indirect offset address
(with 8 or 16-bit offset).
ADDS direct, #data4
Add a short value to a direct address.
MOVS ... , #data4
Move short data to destination using any of the
same addressing modes as ADDS.
ASL
R,R
Arithmetic shift left a byte, word, or double word,
up to 31 places, shift count read from register.
ASR
R,R
Arithmetic shift right a byte, word, or double word,
up to 31 places, shift count read from register.
LSR
R,R
Logical shift right a byte, word, or double word,
up to 31 places, shift count read from register.
ASL
R, #DATA4/5
Arithmetic shift left a byte, word, or double word,
up to 31 places, shift count read from instruction.
ASR
R, #DATA4/5
Arithmetic shift right a byte, word, or double word,
up to 31 places, shift count read from instruction.
LSR
R, #DATA4/5
Logical shift right a byte, word, or double word,
up to 31 places, shift count read from instruction.
DIV
R,R
Signed divide of 32 bits register by 16 bit register,
or 16 bit register by 8 bit register.
DIVU
R,R
Unsigned divide of 32 bit register by 16 bit
register, or 16 bit register by 8 bit register.
MUL
R,R
Signed multiply of 16 bit register by 16 bit
register, or 8 bit register by 8 bit register.
MULU R,R
Unsigned multiply of 16 bit register by 16 bit
register.
DIV
R, #data8/16
Signed divide of 32 bits register by 16 bit
immediate, or 16 bit register by 8 bit immediate.
DIVU
R, #data8/16
Unsigned divide of 32 bit register by 16 bit
immediate, or 16 bit register by 8 bit immediate.
MUL
R, #data8/16
Signed multiply of 16 bit register by 16 bit
immediate, or 8 bit register by 8 bit immediate.
3/24/97
312
8051 Compatibility
Table 9.3: Instructions and addressing modes new to the XA
New Instructions and Addressing Modes
MULU R, #data8/16
Unsigned multiply of 16 bit register by 16 bit
immediate, or 8 bit register by 8 bit immediate.
LEA
R, R+offset8/16
Load effective address, duplicates the offset8 or
16-bit addressing mode calculation but saves the
address in a register.
NEG
R
Negate, performs a twos complement operation
on a register.
SEXT
R
Sign extend, copies the sign flag from the last
operation into an 8 or 16-bit register.
NORM R, R
Normalize. Shifts a byte, word, or double word
register left until the MSB becomes a 1. The
number of shifts used is stored in a register.
RL, RR, RLC, RRC R,#data4
All of the 80C51 rotate modes with 16-bit data
size and a variable number of bit positions (up to
15 places).
MOV
[R+], [R+]
Block move. Move data from an indirect address
to another indirect address, incrementing both
pointers,
MOV
R, USP and USP, R
Allows system code to move a value to or from
the user stack pointer. Handy in multi-tasking
applications.
MOVC R, [R+]
Move data from an indirect address in the code
space to a register, with the indirect pOinter
automatically incremented.
PUSH and POP Rlist
PUSH and POP up to 8 word registers in one
instruction,
PUSHU and POPU Rlist or direct
Allows system code to write to or read the user
stack. Handy in multi-tasking applications.
conditional branches
A complete set of conditional branches, including
BEQ, BNE, BG, BGE, BGT, BL, BLE, BMI, BPL,
BNV, and BOV.
CALL
[R]
Call indirect, to an address contained in a
register.
CALL
rel16
Call anywhere in a +/- 64K range.
XA User Guide
313
3/24/97
Table 9.3: Instrlictions and addressing modes new to the XA
New Instructions and Addressing Modes
FCALL addr24
Far call, anywhere within the XA 16Mbyte code
address space.
JMP
[R]
Jump indirect, to an address contained in a
register.
JMP
rel16
Jump anywhere in a +/- 64K range.
FJMP
addr24
Far jump, anywhere within the XA 16Mbyte code
address space.
JMP
[[R+]]
Jump double indirect with auto-increment. Used
to branch to a sequence of addresses contained
in a table.
Breakpoint, a debugging feature.
BKPT
Allows software to completely reset the XA in one
instruction.
'RESET
TRAP
3124/97
#data4
Call one of up to 16 system services. Acts like an
immediate interrupt.
314
8051 Compatibility
Philips Semiconductors
Section 4
XA Family Derivatives
CONTENTS
XA-G1
CMOS single-chip 16-bit microcontrolier ..... ......................... 317
XA-G2
CMOS single-chip 16-blt microcontrolier .............................. 348
XA-G3
CMOS single-chip 16-bit mlcrocontrolier ........... . . . . . . . . . . . . . . . . . .. 379
315
316
Preliminary specification
Philips Semiconductors
XA-G1
CMOS single-chip 16-bit microcontroller
FAMILY DESCRIPTION
• Instruction set tailored for high level language support
The Philips Semiconductors XA (eXtended Architecture) family of
16-bit single-chip microcontrollers is powerful enough to easily
handle the requirements of high performance embedded
applications, yet inexpensive enough to compete in the market for
high-volume, low-cost applications.
• Multi-tasking and real-time executives that include up to 32
vectored interrupts, 16 software traps, segmented data memory,
and banked registers to support context switching
• Low power operation, which is intrinsic to the XA architecture,
includes power-down and idle modes.
The XA family provides an upward compatibility path for 80C51
users who need higher performance and 64k or more of program
memory. Existing 80C51 code can also easily be translated to run
on XA microcontroliers.
More detailed information on the core is available in the XA User
Guide.
The performance of the XA architecture supports the
comprehensive bit-oriented operations of the 80C51 while
incorporating support for multi-tasking operating systems and
high-level languages such as C. The speed of the XA architecture,
at 10 to 100 times that of the 80C51, gives designers an easy path
to truly high performance embedded control.
SPECIFIC FEATURES OF THE XA-G1
• 20-bit address range, 1 megabyte each program and data space.
(Note that the XA archi~ecture supports up to 24 bit addresses.)
• 2.7V to 5.5V operation (EPROM and OTP are 5V ± 5%)
The XA architecture supports:
• 8K bytes on-chip EPROM/ROM program memory
• Upward compatibility with the 80C51 architecture
• 512 bytes of on-chip data RAM
• 16-bit fully static CPU with a 24-bit program and data address
range
• Three counter/timers with enhanced features
(equivalent to 80C51 TO, T1, and T2)
• Eight 16-bit CPU registers each capable of performing all
arithmetic and logic operations as well as acting as memory
pointers. Operations may also be performed directly to memory.
• Watchdog timer
• Two enhanced UARTs
• Four 8-bit I/O ports with 4 programmable output configurations
• Both 8-bit and 16-bit CPU registers, each capable of performing
all arithmetic and logic operations.
• 44-pin PLCC and 44-pin LQFP packages
• An enhanced instruction set that includes bit intensive logic
operations and fast signed or unsigned 16 x 16 multiply and
32 / 16 divide
ORDERING INFORMATION
ROM
EPROM1
TEMPERATURE RANGE °C AND PACKAGE
FREQ
(MHz)
DRAWING
NUMBER
P51XAG13JB BD
P51XAG17JB BD
OTP
SOT389-1
P51 XAG17JB A
OTP
oto +70, Plastic Low Profile Quad Flat Pkg.
oto +70, Plastic Leaded Chip Carrier
25
P51XAG13JB A
25
SOT187-2
P51XAG13JF BD
P51XAG17JF BD
OTP
-40 to +85, Plastic Low Profile Quad Flat Pkg.
25
SOT389-1
P51XAG13JF A
p51XAG17JF A
OTP
-40 to +85, Plastic Leaded Chip Carrier
25
SOT187-2
P51XAG13KB BD
P51XAG17KB BD
OTP
30
SOT389-1
P51XAG13KB A
P51XAG17KB A
OTP
oto +70, Plastic Low Profile Quad Flat Pkg.
oto +70, Plastic Leaded Chip Carrier
30
SOT187-2
NOTE:
1. OTP =One Time Programmable EPROM. UV =Erasable EPROM.
1997 Mar 25
317
Preliminary specification
Philips Semiconductors
XA-G1
CMOS single-chip 16-bit microcontroller
PIN CONFIGURATIONS
44-Pin PLCC Package
~
44-Pin LQFP Package
0
7[/
34
44
~
h
::J 39
33
PLCC
17e
::J 29
~
,
Pin
2
3
4
5
8
7
8
9
10
11
12
13
14
15
16
17'
18
19
20
21
22
11
23
~
Function
Pin
23
24
25
28
27
2B
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
Vss
P1.0/AOIWRR
P1.1/A1
P1.21A2
P1.31A3
P1.4/RxD1
P1.5rrxD1
P1.8rr2
P1.7rr2EX
RST
P3.0/RxDO
NC
P3.1rrxDO
P3.211'fml
P3.311FJTi
P3.4rrO
P3.5!r1/BUSW
P3.6iWRL
P3.71Fm
XTAL2
XTAL1
Vss
12
Function
Voo
Pin
1
2
3
4
5
8
7
8
9
10
11
12
13
14
15
16
17
16
19
20
21
22
P2.0/A12DB
P2.1/A13D9
P2.21A14D10
P2.31A15D11
P2.4/A16D12
P2.5/A17D13
P2.8/A1BD14
P2.7/A19D15
I'SEfl'
ALE.II'Rm
NC
~ppIWAIT
PO.7/A11D7
PO.BlA10D6
PO.5/A9D5
PO.4/A8D4
PO.3/A7D3
PO.21A8D2
PO.1/A5D1
PO.0/A4DO
Voo
SUOO525
22
Function
P1.5rrxD1
P1.8rr2
P1.7!r2EX
Pin
23
24
25
28
27
28
29
30
31
32
33
34
35
38
37
38
39
40
41
42
43
44
RST
P3.0/RxDO
NC
P3.1rrxDO
P3.211'fml
P3.311FJTi
P3.4rrO
P3.5!r1/BUSW
P3.8tWRC
P3.71Fm
XTAL2
XTAL1
Vss
Voo
P2.0/A12D6
P2.1/A13D9
P2.21A14D10
P2.3/A15D11
P2.4/A16/D12
Function
P2.5/A17D13
P2.BlA18D14
P2.7/A19D15
I'SEfl'
ALE/P'FIOG
NC
~ppIWAIT
PO.7/A11D7
PO.6/A10D6
PO.5/A9D5
PO.4/A8D4
PO.3/A7D3
PO.2/A8D2
PO.1/A5D1
PO.0/A4DO
Voo
Vss
P1.0/AOIWRR
P1.1/A1
P1.2/A2
P1.31A3
P1.4/RxD1
SUOO580
LOGIC SYMBOL
----ei
1=
~
en[
Nrn_
Ifm_
~
TO_
T1/BUSW_
~
,
A1
AOIWRR
]
13
wen
!S~
!ii!
WRC_
110_
NOT AVAILABLE ON 40-PIN DIP PACKAGE
1997 Mar 25
~~D1
A2
RxDO_
TxDO_
~
a:
T2EX'
T2'
Tx D1
SU00526
318
Philips Semiconductors
Preliminary specification
XA-G1
CMOS single-chip 16-bit microcontroller
BLOCK DIAGRAM
.o -- .. - - -- -- --- - - --- ---- ----- - ---- ----- - - --- - - - - - - - -- ---.
,
o
XACPU Core
8K BYTES
ROM/EPROM
UARTO
512 BYTES
STATIC RAM
UART1
PORTO
TIMERO&
TIMER 1
PORT 1
TIMER 2
PORT 2
WATCHDOG
TIMER
PORT 3
._----------------------------------------------------.
I
SUOO655
1997 Mar 25
319
Preliminary specification
Philips Semiconductors
XA-G1
CMOS single-chip 16-bit microcontroller
PIN DESCRIPTIONS
PIN. NO.
MNEMONIC
NAME AND FUNCTION
TYPE
LCC
LQFP
Vss
1,22
16
I
Ground: OV reference.
VDD
23,44
17
I
Power Supply: This is the power supply voltage for normal, idle, and power down operation.
PO.O - PO.7
43--36
37-30
1/0
Port 0: Port 0 is an 8-bit 1/0 port with a user-configurable output type. Port 0 latches have 1s written
to them and are configured in the quasi-bidirectional mode during reset. The operation of port 0 pins
as inputs and outputs depends upon the port configuration selected. Each port pin is configured
independently. Refer to the section on 1/0 port configuration and the DC Electrical Characteristics for
details.
When the external programldata bus is used, Port 0 becomes the multiplexed low data/instruction
byte and address lines 4 through 11.
Port 0 also outputs the code bytes during program verification and receives code bytes during
EPROM programming.
P1.O - P1.7
P2.0 - P2.7
2-9
40-44,
1-3
1/0
2
40
0
3
4
5
7
8
9
41
42
43
1
2
3
0
0
0
0
24-31
18-25
1/0
I
I
Port 1: Port 1 is an 8-bit 1/0 port with a user-configurable output type. Port 1 latches have 1s written
to them and are configured in the quasi-bidirectional mode during reset. The operation of port 1 pins
as inputs and outputs depends upon the port configuration selected. Each port pin is configured
independently. Refer to the section on 1/0 port configuration and the DC Electrical Characteristics for
details.
Port 1 also provides special functions as described below.
AOJWFffi:
Address bit 0 of the external address bus when the external data bus is
configured for an 8 bit width. When the external data bus is configured for a 16
bit width, this pin becomes the high byte write strobe.
A1:
Address bit 1 of the external address bus.
A2:
Address bit 2 of the external address bus.
A3:
Address bit 3 of the external address bus.
TxD1 (P1.5):
Transmitter output for serial port 1.
T2 (P1.6):
Timerlcounter 2 external count inputlclockout.
T2EX (P1. 7):
Timerlcounter 2 reloadlcaptureldirection control
Port 2: Port 2 is an 8-bit 1/0 port with a user-configurable output type. Port 2 latches have 1s written
to them and are configured in the quasi-bidirectional mode during reset. The operation of port 2 pins
as inputs and outputs depends upon the port configuration selected. Each port pin is configured
independently. Refer to the section on 1/0 port configuration and the DC Electrical Characteristics for
details.
When the extemal program/data bus is used in 16-bit mode, Port 2 becomes the multiplexed high
datalinstruction byte and address lines 12 through 19. When the extemal program/data bus is used in 8-bit
mode, the number of address lines that appear on port 2 is user programmable.
Port 2 also receives the low-order address byte during program memory verification.
P3.0 - P3.7
11,
13-19
5,
7-13
1/0
Port 3: Port 3 is an 8-bit 1/0 port with a user configurable output type. Port 3 latches have 1s written
to them and are configured in the quaSi-bidirectional mode during reset. the operation of port 3 pins
as inputs and outputs depends upon the port configuration selected. Each port pin is configured
independently. Refer to the section on 1/0 port configuration and the DC Electrical Characteristics for
details.
Port 3 pins receive the high order address bits during EPROM programming and verification.
RST
1997 Mar 25
11
13
14
15
16
17
5
7
8
9
10
11
I
I
I/O
1/0
18
19
12
13
0
0
10
4
I
I
0
Port 3 also provides various special functions as described below.
RxDO (P3.0):
Receiver input for serial port O.
TxDO (P3.1):
Transmitter output for serial port O.
INTO(P3.2):
External interrupt 0 input.
INTf (P3.3):
External interrupt 1 input.
TO (P3.4):
Timer 0 external input, or timer 0 overflow output.
T1/BUSW (P3.5): Timer 1 external input, or timer 1 overflow output. The value on this pin is
latched as the external reset input is released and defines the default
external data bus width (8USW). 0 =8-bit bus and 1 =16-bit bus.
(P3.6):
External data memory low byte write strobe.
RO(P3.7):
External data memory read strobe.
wm::
Reset: A low on this pin resets the microcontroller, causing 1/0 ports and peripherals to take on their
default states, and the processor to begin execution at the address contained in the reset vector.
Refer to the section on Reset for details.
320
Preliminary specification
Philips Semiconductors
CMOS single-chip 16-bit microcontroller
XA-G1
PIN. NO.
TYPE
NAME AND FUNCTION
27
I/O
Address Latch Enable/Program Pulse: A high output on the ALE pin signals external circuitry to
latch the address portion of the multiplexed address/data bus. A pulse on ALE occurs only when it is
needed in order to process a bus cycle. During EPROM programming, this pin is used as the
program pulse input.
32
26
0
Program Store Enable: The read strobe for external program memory. When the microcontroller
accesses external program memory, P"SEf\J is driven low in order to enable memory devices. P"SEf\J
is only active when external code accesses are performed.
35
29
I
External Access/WaitiProgramming Supply Voltage: The EA input determines whether the
internal program memory of the microcontroller is used for code execution. The value on the EA pin
is latched as the external reset input is released and applies during later execution. When latched as
a 0, external program memory is used exclusively, when latched as a 1, internal program memory
will be used up to its limit, and external program memory used above that point. After reset is
released, this pin takes on the function of bus Wait input. If Wait is asserted high during any external
bus access, that cycle will be extended until Wait is released. During EPROM programming, this pin
is also the programming supply voltage input.
XTAL1
21
15
I
Crystal 1 : Input to the inverting amplifier used in the oscillator circuit and input to the internal clock
generator circuits.
XTAL2
20
14
0
MNEMONIC
LCC
LQFP
ALEIJ5'ROG
33
PSEN
"UJWAIT/
Vpp
Crystal 2: Output from the oscillator amplifier.
SPECIAL FUNCTION REGISTERS
NAME
DESCRIPTION
SFR
ADDRESS
BIT FUNCTIONS AND ADDRESSES
MSB
LSB
RESET
VALUE
BCR
Bus configuration register
46A
-
-
WAITD
BUSD
BC2
BC1
BCO
Note 1
BTRH
Bus timing register high byte
469
DW1
DWO
DWA1
DWAO
DR1
DRO
DRA1
DRAO
FF
BTRL
Bus timing register low byte
468
WM1
WMO
ALEW
CR1
CRO
CRA1
CRAO
EF
CS
DS
ES
Code segment
Data segment
Extra segment
443
441
442
lEW
Interrupt enable high byte
427
337
Interrupt enable low byte
426
-
00
00
00
33F
IEL*
-
EA
33E
336
-
33D
335
-
33C
33B
33A
339
338
ETI1
ERI1
ETIO
ERIO
334
333
332
331
330
ET2
ET1
EX1
ETO
EXO
-
00
00
IPAO
Interrupt priority 0
4AO
-
PTO
-
PXO
00
IPA1
Interrupt priority 1
4A1
-
PT1
PX1
00
IPA2
Interrupt priority 2
4A2
-
PT2
00
IPA4
Interrupt priority 4
4A4
IPA5
Interrupt priority 5
4A5
-
-
PO*
PortO
430
P1*
P2*
P3*
1997 Mar 25
Port 1
Port 2
Port 3
431
432
433
PTIO
PTI1
PRIO
00
PRI1
00
387
386
385
384
383
382
381
380
AD7
AD6
AD5
AD4
AD3
AD2
AD1
ADO
38F
38E
38D
38C
38B
38A
389
388
T2EX
T2
TxD1
RxD1
A3
A2
A1
WRH
397
396
395
394
393
392
391
390
P2.7
P2.6
P2.5
P2.4
P2.3
P2.2
P2.1
P2.0
39F
39E
39D
39C
39B
39A
399
398
RD
WR
T1
TO
INT1
INTO
TxDO
RxDO
321
FF
FF
FF
FF
Philips Semiconductors
Preliminary specification
XA-G1
CMOS single-chip 16-bit microcontroller
NAME
DESCRIPTION
SFR
ADDRESS
BIT FUNCTIONS AND ADDRESSES
MSB
LSB
RESET
VALUE
POCFGA
Port 0 configuration A
470
Note 5
P1CFGA
Port 1 configuration A
471
Note 5
P2CFGA
Port 2 configuration A
472
Note 5
P3CFGA
Port 3 configuration A
473
Note 5
POCFGB
Port 0 configuration B
4FO
Note 5
P1CFGB
Port 1 configuration B
4F1
Note 5
P2CFGB
Port 2 configuration B
4F2
Note 5
P3CFGB
Port 3 configuration B
4F3
Note 5
227
PCON*
Power control register
404
-
PSWL*
Program status word (high byte)
Program status word (low byte)
401
400
-
225
-
224
-
223
-
222
-
221
220
PO
10L
209
208
20E
200
20C
SM
TM
RS1
RSO
1M3
1M2
IM1
IMO
207
206
205
204
203
202
201
200
20F
PSWH*
226
20B
20A
C
AC
-
V
N
Z
217
216
215
214
213
212
211
210
C
AC
FO
RS1
RSO
V
F1
P
-
-
00
Note 2
Note 2
PSW51*
80C51 compatible PSW
402
RTHO
455
00
457
00
RTLO
RTL1
Timer 0 extended reload,
high byte
TImer 1 extended reload,
high byte
Timer 0 extended reload, low byte
Timer 1 extended reload, low byte
454
456
00
00
SOCON*
Serial port 0 control register
420
RTH1
SOSTAT*
Serial port 0 extended status
421
SOBUF
SOAOOR
SOAOEN
Serial port 0 buffer register
Serial port 0 address register
Serial port 0 address enable
register
460
461
462
S1CON*
Serial port 1 control register
424
S1STAT*
Serial port 1 extended status
425
S1BUF
S1AOOR
S1AOEN
Serial port 1 buffer register
Serial port 1 address register
Serial port 1 address enable
register
464
465
466
SCR
System configuration register
440
307
306
305
304
303
302
301
300
SMO_O
SM1_0
SM2_0
REN_O
TB8_0
RB8_0
TLO
RI_O
30F
30E
300
30C
30B
30A
309
308
-
-
FEO
BRO
OEO
STINTO
-
-
Note 3
00
00
x
00
00
327
326
325
324
323
322
321
320
SMO_1
SM1_1
SM2_1
REN_1
TB8_1
RB8_1
TU
RU
32F
32E
320
32C
32B
32A
329
328
-
-
FE1
BR1
OE1
STINT1
-
-
00
00
x
00
00
-
-
-
PT1
PTO
CM
PZ
21F
21E
210
21C
21B
21A
219
218
-
00
SSEL*
Segment selection register
403
ESWEN
R6SEG
R5SEG
R4SEG
R3SEG
R2SEG
R1SEG
ROSEG
00
SWE
Software Interrupt Enable
47A
-
SWE7
SWE6
SWE5
SWE4
SWE3
SWE2
SWE1
00
357
356
355
354
353
352
351
350
SWR7
SWR6
SWR5
SWR4
SWR3
SWR2
SWR1
SWR*
1997 Mar 25
Software' Interrupt Request
42A
-
322
00
Preliminary specification
Philips Semiconductors
XA-G1
CMOS single-chip 16-bit microcontroller
NAME
DESCRIPTION
T2CON*
Timer 2 control register
SFR
ADDRESS
BIT FUNCTIONS AND ADDRESSES
MSB
LSB
2C7
418
TF2
2CF
-
2C5
2C6
2C4
2C3
2C2
I EXF2 IRClKO ITClKO IEXEN2 I
2CE
I
-
2CD
2CC
2CB
IRClK11 TClK1 1
-
TR2
2C1
-
2CO
I Crr2 I CP/RL2
2C9
2CA
RESET
VALUE
00
2C8
I T20E I DCEN
T2MOD*
Timer 2 mode control
419
TH2
Tl2
T2CAPH
Timer 2 high byte
Timer 2 low byte
Timer 2 capture register,
high byte
Timer 2 capture register,
low byte
459
458
45B
00
00
00
45A
00
TCON*
Timer 0 and 1 control register
410
THO
TH1
TlO
Tl1
Timer 0 high byte
Timer 1 high byte
Timer 0 low byte
Timer 1 low byte
451
453
450
452
TMOD
Timer 0 and 1 mode control
45C
T2CAPl
287
TF1
286
I
Timer 0 and 1 extended status
411
GATE
2FF
WDCON*
Watchdog control register
41F
WDl
WFEED1
WFEED2
Watchdog timer reload
Watchdog feed 1
Watchdog feed 2
45F
45D
45E
285
I
TFO
284
I
TRO
283
I
IE1
282
I
IT1
281
I
lEO
00
280
I
ITO
00
00
00
00
00
I
28F
TSTAT*
TR1
1
PRE2
crr
I
I
2FE
M1
1
28D
28E
I
-
I
2FD
I PRE1 I PREO I
MO
. 1GATE I
crr
28C
28B
28A
-
I
2FC
-
2FB
I
-
I
1 T10E I
2FA
M1
I
289
-
MO
00
288
I TOOE
2F9
I WORUN IWOTOF I
00
2F8
-
Note 6
00
x
x
NOTES:
• SFRs are bit addressable.
1. At reset, the BeR register is loaded with the binary value 0000 Oa 11, where "a" is the value on the BUSW pin. This defaults the address bus
size to 20 bits since the XA-G1 has only 20 address lines.
2. SFR is loaded from the reset vector.
3. All bits except F1, FO, and P are loaded from the reset vector. Those bits are all O.
4. Unimplemented bits in SFRs are X (unknown) at all times. Ones should not be written to these bits since they may be used for other
purposes in future XA derivatives. The reset,value shown for these bits is O.
5. Port configurations default to quasi-bidirectional when the XA begins execution from internal code memory after reset, based on the
condition found on the EA pin. Thus all PnCFGA registers will contain FF and PnCFGB registers will contain 00. When the XA begins
execution using external code memory, the default configuration for pins that are associated with the external bus will be push-pull. The
PnCFGA and PnCFGB register contents will reflect this difference.
6. The WDCON reset value is E6 for a Watchdog reset, E4 for all other reset cauSes.
7. The XA-G1 implements an 8-bit SFR bus, as stated in Chapter 8 of the XA User Guide. All SFR accesses must be 8-bit operations. Attempts
to write 16 bits to an SFR will actually write only the lower 8 bits. Sixteen bit SFR reads will return undefined data in the upper byte.
1997 Mar 25
323
Preliminary specification
Philips Semiconductors
XA-G1
CMOS single-chip 16-bit microcontroller
baud rate generation, Timer 2 capture. Note that this single rate
setting applies to all of the timers.
XA-G1 TIMER/COUNTERS
The XA has two standard 16-bit enhanced Timer/Counters: Timer 0
and Timer 1. Additionally, it has a third 16-bit Up/Down
timer/counter, T2. A central timing generator in the XA core provides
the time-base for all XA Timers and Counters. The timer/event
counters can perform the following functions:
- Measure time intervals and pulse duration
- Count external events
- Generate interrupt requests
- Generate PWM or timed output waveforms
When timers TO, T1, or T2 are used in the counter mode, the
register will increment whenever a falling edge (high to low
transition) is detected on the external input pin corresponding to the
timer clock. These inputs are sampled once every 2 oscillator
cycles, so it can take as many as 4 oscillator cycles to detect a
transition. Thus the maximum count rate that can be supported is
Osc/4. The duty cycle of the timer clock inputs is not important, but
any high or low state on the timer clock input pins must be present
for 2 oscillator cycles before it is guaranteed to be "seen" by the
timer logic.
All of the XA-G1 timer/counters (Timer 0, Timer 1 and Timer 2) can
be independently programmed to operate either as timers or event
counters via the CIT bit in the TnCON register. All XA-G1 timers
count up unless otherwise stated. These timers may be dynamically
read during program execution.
Timer 0 and Timer 1
The ''Timer'' or "Counter" function is selected by control bits CIT in
the special function register TMOD. These two Timer/Counters have
four operating modes, which are selected by bit-pairs (M1, MO) in
the TMOD register. Timer modes 1, 2, and 3 in XA are kept identical
to the 80C51 timer modes for code compatibility. Only the mode 0 is
replaced in the XA by a more powerful 16-bit auto-reload mode. This
will give the XA timers a much larger range when used as time
bases.
The base clock rate of all of the XA-G1 timers is user
programmable. This applies to timers TO, T1, and T2 when running
in timer mode (as opposed to counter mode), and the watchdog
timer. The clock driving the timers is called TCLK and is determined
by the setting of two bits (PT1, PTO) in the System Configuration
Register (SCR). The frequency of TCLK may be selected to be the
oscillator input divided by 4 (Osc/4), the oscillator input divided by
16 (Osc/16), or the oscillator input divided by 64 (Osc/64). This
gives a range of possibilities for the XA timer functions, including
SCR
Address:440
Not Bit Addressable
Reset Value: OOH
PT1
PTO
o
o
o
o
1
CM
PZ
The recommended M1, MO settings for the different modes are
shown in Figure 2.
LSB
MSB
1- I
PT1
PTO
CM
PZ
I
OPERATING
Prescaler selection.
Osc/4
Osc/16
Osc/64
Reserved
Compatibility Mode allows the XA to execute most translated 80C51 code on the XA. The
XA register file must copy the 80C51 mapping to data memory and mimic the 80C51 indirect
addressing scheme.
Page Zero mode forces all program and data addresses to i6-bits only. This saves stack space
and speeds up execution but limits memory access to 64k.
SU00589
Figure 1. System Configuration Register (SCR)
TMOD
Address:45C
Not Bit Addressable
Reset Value: OOH
MSB
LSB
IGATE I crr
Mi
MO
I GATE I crr
Mi
MO
I
~------~v~--------~) ~~--------~v~----------~
TIMER 1
GATE
crr
M1
MO
o
o
o
o
TIMER 0
Gating control when set. Timer/Counter "n" is enabled only while ''l'J'ITfi'' pin is high and
"TRn" control bit is set. When cleared Timer "n" is enabled whenever "TRn" control bit is set.
Timer or Counter Selector cleared for Timer operation (input from internal system clock.)
Set for Counter operation (input from ''Tn'' input pin).
OPERATING
i6-bit auto-reload timer/counter
i6-bit non-auto-reload timer/counter
8-bit auto-reload timer/counter
Dual 8-bit timer mode (timer 0 only)
Figure 2. Timer/Counter Mode Control (TMOD) Register
1997 Mar 25
324
SUOOB05
Preliminary specification
Philips Semiconductors
XA-G1
CMOS single-chip 16-bit microcontroller
reloads TLn with the contents of RTLn, which is preset by software.
The reload leaves THn unchanged.
New Enhanced Mode 0
For timers TO or T1 the 13-bit count mode on the SOC51 (current
Mode 0) has been replaced in the XA with a 16-bit auto-reload
mode. Four additional S-bit data registers (two per timer: RTHn and
RTLn) are created to hold the auto-reload values. In this mode, the
TH overflow will set the TF flag in the TCON register and cause both
the TL and TH counters to be loaded from the RTL and RTH
registers respectively.
Mode 2 operation is the same for Timer/Counter O.
The overflow rate for Timer 0 or Timer 1 in Mode 2 may be
calculated as follows:
These new SFRs will also be used to hold the TL reload data in the
S-bit auto-reload mode (Mode 2) instead of TH.
Mode 3
Timer 1 in Mode 3 simply holds its count. The effect is the same as
setting TR1 =0.
The overflow rate for Timer 0 or Timer 1 in Mode 0 may be
calculated as follows:
Timer 0 in Mode 3 establishes TLO and THO as two separate
counters. TLO uses the Timer control bits: CIT, GATE, TRO, INTO,
and TFO. THO is locked into a timer function and takes over the use
of TR1 and TF1 from Timer 1. Thus, THO now controls the "Timer 1"
Interrupt.
°
TimecRate = Osc / (N * (65536 - TimecReload_Value))
where N = the TCLK prescaler value: 4 (default), 16, or 64.
Mode 1
Mode 1 is the 16-bit non-auto reload mode.
Mode 3 is provided for applications requiring an extra S-bit timer.
When Timer 0 is in Mode 3, Timer 1 can be turned on and off by
switching it out of and into its own Mode 3, or can still be used by
the serial port as a baud rate generator, or in fact, in any application
not requiring an interrupt.
Mode 2
Mode 2 configures the Timer register as an S-bit Counter (TLn) with
automatic reload. Overflow from TLn not only sets TFn, but also
Address:410
TCON
Bit Addressable
Reset Value: OOH
BIT
TCON.7
SYMBOL
TF1
TCON.6
TCON.5
TR1
TFO
TCONA
TCON.3
TRO
lEi
TCON.2
IT1
TCON.1
lEO
TCON.O
ITO
=Osc / (N * (256 - Timer_Reload_Value))
=the TCLK prescaler value: 4, 16, or 64.
Timer_Rate
where N
MSB
I
TF1
LSB
TR1
TFO
TRO
lEi
IT1
lEO
ITO
FUNCTION
Timer 1 overflow flag. Set by hardware on Timer/Counter overflow.
This flag will not be set if Ti0E (TSTAT.2) is set.
Cleared by hardware when processor vectors to interrupt routine, or by clearing the bit in software.
Timer 1 Run control bit. Set/cleared by software to turn Timer/Counter ion/off.
Timer 0 overflow flag. Set by hardware on Timer/Counter overflow.
This flag will not be set if TOOE (TSTAT.O) is set.
Cleared by hardware when processor vectors to interrupt routine, or by clearing the bit in software.
Timer 0 Run control bit. Set/cleared by software to turn Timer/Counter 0 on/off.
Interrupt 1 Edge flag. Set by hardware when external interrupt edge detected.
Cleared when interrupt processed.
Interrupt 1 type control bit. Set/cleared by software to specify falling edge/low level triggered
external interrupts.
Interrupt 0 Edge flag. Set by hardware when external interrupt edge detected.
Cleared when interrupt processed.
Interrupt 0 Type control bit. Set/cleared by software to specify falling edge/low level
triggered external interrupts.
SU00604C
Figure 3. Timer/Counter Control (TCON) Register
1997 Mar 25
325
Preliminary specification
Philips Semiconductors
XA-G1
CMOS single-chip 16-bit microcontroller
T2CON
Address:41S
Bit Addressable
Reset Value: OOH
M~
I
TF2
~B
I EXF2 I RClKO I TClKO I EXEN21
TR2
I
CtT2
ICP/Rl21
BIT
SYMBOL FUNCTION
T2CON.7 TF2
Timer 2 overflow flag. Set by hardware on Timer/Counter overflow. Must be cleared by software.
TF2 will not be set when RClKO, RClK1, TClKO, TClK1 or T20E=1.
nmer 2 external flag Is set when a capture or reload occurs due to a negative transition on T2EX (and
T2CON.6 EXF2
EXEN2 is set). This flag will cause a Timer 2 Interrupt when this interrupt Is enabled. EXF2 is cleared by
software.
T2CON.5 RClKO
Receive Clock Flag.
Transmit Clock Flag. RClKO and TClKO are used to select Timer 2 overflow rate as a clock source for
T2CON.4 TClKO
UARTO instead of nmer T1.
Timer 2 external enable bit allows a capture or reload to occur due to a negative transition on T2EX.
T2CON.3 EXEN2
T2CON.2 TR2
Start=1/Stop=0 control for Timer 2.
Timer or counter select.
T2CON.1 CtT2
O=lnternal timer
1=External event counter (falling edge triggered)
T2CON.0 CP/Rl2
Capture/Reload flag.
If CP/Rl2 & EXEN2=1 captures will occur on negative transitions of T2EX.
If CP/Rl2=0, EXEN2=1 auto reloads occur with either Timer 2 overflows or negative transitions at T2EX.
If RClK orTClK=1 the timer is set to auto reload on nmer 2 overflow, this bit has no effect.
SU00606A
Figure 4. Timer/Counter 2 Control (T2CON) Register
New Timer-OverflowToggle Output
Auto-Reload Mode (Up or Down Counter)
In the auto-reload mode, the timer registers are loaded with the
16-bit value in T2CAPH and T2CAPl when the count overflows.
T2CAPH and T2CAPl are initialized by software. If the EXEN2 bit in
T2CON is set, the timer registers will also be reloaded and the EXF2
flag set when a 1-to-0 transition occurs at input T2EX. The
auto-reload mode is shown In Figure 8.
In the XA, the timer module now has two outputs, which toggle on
overflow from the individual timers. The same device pins that are
used for the TO and T1 count inputs are also used for the new
overflow outputs. An SFR bit (TnOE in the TSTAT register) is
associated with each counter and indicates whether Port-SFR data
or the overflow signal is output to the pin. These outputs could be
used in applications for generating variable duty cycle PWM outputs
(changing the auto-reload register values). Also variable frequency
(Osc/S to Osc/S,3SS.60S) outputs could be achieved by adjusting
the prescaler along with the auto-reload register values. With a
30.0MHz oscillator, this range would be 3.5SHz to 3.75MHz.
In this mode, Timer 2 can be configured to count up or down. This is
done by setting or clearing the bit DCEN (Down Counter Enable) in
the T2MOD special function register (see Table 1). The T2EX pin
then controls the count direction. When T2EX Is high, the count is In
the up direction, when T2EX is low, the count is in the down
direction.
TimerT2
Timer 2 in the XA is a 16-bit Timer/Counter which can operate as
either a timer or as an event counter. This Is selected by CtT2 in the
special function register T2CON. Upon timer T2 overflow/underflow,
the TF2 flag is set, which may be used to generate an interrupt. It
can be operated in one of three operating modes: auto-reload (up or
down counting), capture, or as the baud rate generator (for either or
both UARTs via SFRs T2MOD and T2CON). These modes are
shown in Table 1.
Figure 8 shows Timer 2, which will count up automatically, since
DC EN O. In this mode there are two options selected by bit
EXEN2 in the T2CON register. If EXEN2 = 0, then nmer 2 counts
up to FFFFH and sets the TF2 (Overflow Flag) bit upon overflow.
This causes the Timer 2 registers to be reloaded with the 16-bit
value in T2CAPl and T2CAPH, whose values are preset by
software. If EXEN2 = 1, a ·16-bit reload can be triggered either by an
overflow or by a 1-to-0 transition at input T2EX. This transition also
sets the EXF2 bit. If enabled, either TF2 or EXF2 bit can generate
the Timer 2 interrupt.
=
Capture Mode
In the capture mode there are two options which are selected by bit
EXEN2 in T2CON. If EXEN2 =0, then timer 2 is a 16-bit timer or
counter, which upon overflowing sets bit TF2, the timer 2 overflow
bit. This will cause an interrupt when the timer 2 interrupt is enabled.
In Figure 9, the DCEN = 1; this enables the Timer 2 to count up or
down. In this mode, the logic level of T2EX pin controls the direction
of count. When a logic '1' is applied at pin T2EX, the nmer 2 will
count up. The Timer 2 will overflow at FFFFH and set the TF2 flag,
which can then generate an interrupt if enabled. This timer overflow,
also causes the 16-bit value in T2CAPl and T2CAPH to be
reloaded into the timer registers Tl2 and TH2, respectively.
If EXEN2 = 1, then Timer 2 still does the above, but with the added
feature that a 1-to-0 transition at external input T2EX causes the
current value in the Timer 2 registers, Tl2 and TH2, to be captured
into registers RCAP2l and RCAP2H, respectively. In addition, the
transition at T2EX causes bit EXF2 in T2CON to be set. This will
cause an interrupt in the same fashion as TF2 when the Timer 2
interrupt is enabled. The capture mode is illustrated in Figure 7.
1997 Mar 25
A logic '0' at pin T2EX causes Timer 2 to count down. When
counting down, the timer value is compared to the 16-bit value
326
Preliminary specification
Philips Semiconductors
CMOS single-chip 16-bit microcontroller
contained in T2CAPH and T2CAPl. When the value is equal, the
timer register is loaded with FFFF hex. The underflow also sets the
TF2 flag, which can generate an interrupt if enabled.
XA-G1
Timer/Counter 2 or (2) to output a 50% duty cycle clock ranging from
3.58Hz to 3.75MHz at a 30MHz operating frequency.
To configure the Timer/Counter 2 as a clock generator, bit CIT2 (in
T2CON) must be cleared and bit T20E in T2MOD must be set. Bit
TR2 (T2CON.2) also must be set to start the timer.
The external flag EXF2 toggles when Timer 2 underflows or
overflows. This EXF2 bit can be used as a 17th bit of resolution, if
needed. the EXF2 flag does not generate an interrupt in this mode.
As the baud rate generator, timer T2 is incremented by TCLK.
The Clock-Out frequency depends on the oscillator frequency and
the reload value of Timer 2 capture registers (TCAP2H, TCAP2L) as
shown in this equation:
Baud Rate Generator Mode
By setting the TCLKn and/or RCLKn in T2CON or T2MOD, the
Timer 2 can be chosen as the baud rate generator for either or both
UARTs. The baud rates for transmit and receive can be
simultaneously different.
TCLK
2 x (65536-TCAP2H, TCAP2L)
In the Clock-Out mode Timer 2 roll-overs will not generate an
interrupt. This is similar to when it is used as a baud-rate generator.
It is possible to use Timer 2 as a baud-rate generator and a clock
generator simultaneously. Note, however, that the baud-rate will be
1/8 of the Clock-Out frequency.
Programmable Clock-Out
A 50% duty cycle clock can be programmed to come out on P1.6.
This pin, besides being a regular I/O pin, has two alternate
functions. It can be programmed (1) to input the external clock for
Table 1. Timer 2 Operating Modes
TF\2
CP/RL2
RCLK+TCLK
DC EN
MODE
0
X
X
X
Timer off (stopped)
1
0
0
0
16-bit auto-reload, counting up
1
0
0
1
16-bit auto-reload, counting up or down depending on T2EX pin
1
1
0
X
16-bit capture
1
X
1
X
Baud rate generator
TSTAT
Address:411
Bit Addressable
Reset Value: OOH
BIT
TSTAT.2
SYMBOL
T10E
TSTAT.O
TOOE
MSB
LSB
nOE
TOOE
FUNCTION
When 0, this bit allows the T1 pin to clock Timer 1 when in the counter mode.
When 1, T1 acts as an output and toggles at every Timer 1 overflow.
When 0, this bit allows the TO pin to clock Timer 0 when in the counter mode.
When 1, TO acts as an output and toggies at every Timer 0 overflow.
SU006128
Figure 5. Timer 0 And 1 Extended Status (TSTAT)
T2MOD
Address:419
Bit Addressable
Reset Value: OOH
BIT
SYMBOL
T2MOD.5 RCLK1
T2MODA TCLK1
T2MOD.1
T20E
T2MOD.0
DC EN
MSB
LSB
I RCLK1 I TCLK1 I
T20E
DCEN
I
FUNCTION
Receive Clock Flag.
Transmit Clock Flag. RCLK1 and TCLK1 are used to select Timer 2 overflow rate as a clock source
for UART1 instead of Timer Ti.
When 0, this bit allows the T2 pin to clock Timer 2 when in the counter mode.
When 1, T2 acts as an output and toggles at every Timer 2 overflow.
Controls count direction for Timer 2 in autoreload mode.
DCEN=1 counter set to count up only
DCEN=O counter set to count up or down, depending on T2EX (see text).
SU00610A
Figure 6. Timer 2 Mode Control (T2MOD)
1997 Mar 25
327
Preliminary specification
Philips Semiconductors
XA-G1
CMOS single-chip 16-bit microcontroller
~,_~
__._O____
T2 Pin
-+~~ O-~----~
______--'t c~.,
TL2
(S-bhs)
TH2
(8-blts)
Control
Transition
Detector
TR2
Capture
Timer 2
Interrupt
~~~----~-------------------~
T2EX Pin
Control
EXEN2
SU00704
Figure 7. Timer 21n Capture Mode
TL2
(S-blts)
TH2
(S-blts)
T2Pln
Timer 2
Interrupt
T2EX Pin
Control
EXEN2
SU00705
. Figure 8. Timer 2 In Auto-Reload Mode (DCEN
=0)
(DOWN COUNTING RELOAD VALUE)
TOGGLE
~_~__=_0____-r-4~-~
+-____
__
-4~
OVERFLOW
TL2
TH2
INTERRUPT
C~='
CONTROL
TR2
COUNT
DIRECTION
, =UP
0= DOWN
(UP COUNTING RELOAD VALUE)
Figure 9_ Timer 2 Auto Reload Mode (DCEN
1997 Mar 25
328
T2EX PIN
=1)
SU00706
Preliminary specification
Philips Semiconductors
XA-G1
CMOS single-chip 16-bit microcontroller
The software must be written so that a feed operation takes place
every tD seconds from the last feed operation. Some tradeoffs may
need to be made. It is not advisable to include feed operations in
minor loops or in subroutines unless the feed operation is a specific
subroutine.
WATCHDOG TIMER
The watchdog timer subsystem protects the system from incorrect
code execution by causing a system reset when the watchdog timer
underflows as a result of a failure of software to feed the timer prior
to the timer reaching its terminal count. It is important to note that
the XA-G1 watchdog timer is running after any type of reset and
must be turned off by user software if the application does not use
the watchdog function.
To turn the watchdog timer completely off, the following code
sequence should be used:
mov.b
mov.b
mov.b
Watchdog Function
The watchdog consists of a programmable presca.ler and the main
timer. The prescaler derives its clock from the TCLK source that also
drives timers 0, 1, and 2. The watchdog timer subsystem consists of
a programmable 13-bit prescaler, and an 8-bit main timer. The main
timer is clocked (decremented) by a tap taken from one of the top
8-bits of the prescaler as shown in Figure 10. The clock source for
the prescaler is the same as TCLK (same as the clock source for
the timers). Thus the main counter can be clocked as often as once
every 64 TCLKs (see Table 2). The watchdog generates an
underflow signal (and is autoloaded from WDL) when the watchdog
is at count a and the clock to decrement the watchdog occurs. The
watchdog is 8 bits wide and the autoload value can range from a to
FFH. (The autoload value. of a is permissible since the prescaler is
cleared upon autoload).
wdcon,#O
; set WD control register to clear WDRUN.
wfeed1,#A5h ; do watchdog feed part 1
wfeed2,#5Ah ; do watchdog feed part 2
This sequence assumes that the watchdog timer is being turned off
at the beginning of initialization code and that the XA interrupt
system has not yet been enabled. If the watchdog timer is to be
turned off at a point when interrupts may be enabled, instructions to
disable and re-enable interrupts should be added to this sequence.
Watchdog Control Register (WDCON)
The reset values of the WDCON and WDL registers will be such that
the watchdog timer has a timeout period of 4 x 8192 x tose and the
watchdog is running. WDCON can be written by software but the
changes only take effect after executing a valid watchdog feed
sequence.
This leads to the following user design equations. DeHnitions :tose
is the oscillator period, N is the selected prescaler tap value, W is
the main counter autoload value, P is the prescaler value from
Table 2, tMIN is the minimum watchdog time-out value (when the
autoload value is 0), tMAX is the maximum time-out value (when the
autoload value is FFH), tD is the design time-out value.
Table 2. Prescaler Select Values in WDCON
PRE2
PRE1
PREO
DIVISOR
a
a
a
32
0
0
1
64
=tose x 4 x 32 (W =0, N =4)
tMAX =lose x 64 x 4096 x 256 (W = 255, N = 64)
tD =tose x N x P x (W + 1)
a
a
1
a
128
1
1
256
1
a
512
The watchdog timer is not directly loadable by the user. Instead. the
value to be loaded into the main timer is held in an autoload register.
In order to cause the main timer to be loaded with the appropriate
value, a special sequence of software action must take place. This
operation is referred to as feeding the watchdog timer.
1
a
a
1
1024
1
1
a
2048
1
1
1
4096
tMIN
To feed the watchdog, two instructions must be sequentially
executed successfully. No intervening SFR accesses are allowed,
so interrupts should be disabled before feeding the watchdog, The
instructions should move A5H to the WFEED1 register and then
5AH to the WFEED2 register. If WFEED1 is correctly loaded and
WFEED2 is not correctly loaded, then an immediate watchdog reset
will occur. The program sequence to feed the watchdog timer or
cause new WDCON settings to take effect is as follows:
clr
mov.b
mov.b
setb
ea
wfeed1.#A5h
wfeed2,#5Ah
ea
Watchdog Detailed Operation
When external RE"SET is applied, the following takes place:
• Watchdog run control bit set to ON (1).
• Autoload register WDL set to 00 (min. count).
• Watchdog time-out flag cleared.
• Prescaler is cleared.
• Prescaler tap set to the highest divide.
; disable global interrupts.
; do watchdog feed part 1
; do watchdog feed part 2
; re-enable global interrupts.
• Autoload takes place.
When coming out of a hardware reset, the software should load the
autoload register and then feed the watchdog (cause an autoload).
This sequence assumes that the XA interrupt system is enabled and
there is a possibility of an interrupt request occurring during the feed
sequence. If an interrupt was allowed to be serviced and the service
routine contained any SFR access, it would trigger a watchdog
reset. If it is known that no interrupt could occur during the feed
sequence, the instructions to disable and re-enable interrupts may
be removed.
1997 Mar 25
If the watchdog is running and happens to underflow at the time the
external RESET is applied, the watchdog time-out flag will be
cleared.
329
Preliminary specification
Philips Semiconductors
XA-G1
CMOS single-chip 16-bit microcontroller
WATCHDOG FEED SEQUENCE
MOV WFEED1,#A5H
MOV WFEED2,#5AH
TCLK
SU00581A
Figure 10. Watchdog Timer In XA-G1
When the watchdog underflows, the following action takes place
(see Figure 10):
Timer 1 defaults to clock both UARTO and UART1. Timer 2 can be
programmed to clock either UARTO through T2CON (via bits ROCLK
and TOCLK) or UART1 through T2MOO (via bits R1CLK and
T1 CLK). In this case, the UART not clocked by T2 could use T1 as
the clock source.
• Autoload takes place.
• Watchdog time-out flag is set
• Watchdog run bit unchanged.
• Prescaler tap unchanged.
The serial port receive and transmit registers are both accessed at
Special Function Register SnBUF. Writing to SnBUF loads the
transmit register, and reading SnBUF accesses a physically
separate receive register.
• All other device action same as external reset.
The serial port can operate in 4 modes:
Note that If the watchdog underflows, the program counter will be
loaded from the reset vector as in the case of an Internal reset. The
watchdog time-out flag can be examined to determine if the
watchdog has caused the reset condition. The watchdog time-out
flag bit can be cleared by software.
Mode 0: Serial 110 expansion mode. Serial data enters and exits
through RxOn. TxOn outputs the shift clock, B bits are
transmitted/received (LSB first). (The baud rate Is fixed at 1/16 the
oscillator frequency.)
• Autoload (WOL) register unchanged.
Mode 1: Standard S-blt UART mode. 10 bits are transmitted
(through TxOn) or received (through RxOn): a start bit (0), B data
bits (LSB first), and a stop bit (1). On receive, the stop bit goes Into
RBB In Special Function Register SnCON. The baud rate Is variable.
WOCON Register Bit Definitions
WOCON.7 PRE2
Prescaler Select 2, reset to 1
WOCON.6 PRE1
Prescaler Select 1, reset to 1
WOCON.5 PREO
Prescaler Select 0, reset to 1
WOCONA
WOCON.3
WOCON.2 WORUN Watchdog Run Control bit, reset to 1
WOCON.1 WOTOF
Timeout flag
WOCON.O
Mode 2: Fixed rate 9·blt UART mode. 11 bits are transmitted
(through TxOn) or received (through RxOn): start bit (0), B data bits
(LSB first), a programmable 9th data bit, and a stop bit (1). On
Transmit, the 9th data bit (TBB_n in SnCON) can be assigned the
value of 0 or 1. Or, for example, the parity bit (P, in the PSW) could
be moved into TBB_n. On receive, the 9th data bit goes into RBB_n
in Special Function Register SnCON, while the stop bit is ignored.
The baud rate is programmable to 1/32 of the oscillator frequency.
UARTs
The XA-G1 includes 2 UART ports that are compatible with the
enhanced UART used on the 8xC51 FB. Baud rate selection is
somewhat different due to the clocking scheme used for the XA
timers.
Mode 3: Standard 9·bit UART mode. 11 bits are transmitted
(through TxOn) or received (through RxOn): a start bit (0), B data
bits (LSB first), a programmable 9th data bit, and a stop bit (1).
In fact, Mode 3 is the same as Mode 2 in all respects except baud
rate. The baud rate in Mode 3 is variable.
Some other enhancements have been made to UART operation.
The first is that there are separate interrupt vectors for each UART's
transmit and receive functions. A break detect function has been
added to the UART. This operates independently of the UART itself
and provides a start-of-break status bit that the program may test.
Finally, an Overrun Error flag has been added to detect missed
characters in the received data stream.
In all four modes, transmission is Initiated by any instruction that
uses SnBUF as a destination register. Reception is initiated in Mode
o by the condition RI_n 0 and REN_n 1. Reception is initiated in
the other modes by the incoming start bit if REN_n =1.
=
Serial Port Control Register
The serial port control and status register is the Special Function
Register SnCON, shown in Figure 12. This register contains not only
the mode selection bits, but also the 9th data bit for transmit and
receive (TBB_n and RB8_n), and the serial port interrupt bits (TI_n
and R'-n).
Each UART rate is determined by either a fixed division of the
oscillator (in UART modes 0 and 2) or by the timer 1 or timer 2
overflow rate (in UART modes 1 and 3).
1997 Mar 25
=
330
Preliminary specification
Philips Semiconductors
XA-G1
CMOS single-chip 16-bit microcontroller
CLOCKING SCHEMEIBAUD RATE GENERATION
Using Timer 2 to Generate Baud Rates
The XA UARTS clock rates are determined by either a fixed division
(modes 0 and 2) of the oscillator clock or by the Timer 1 or Timer 2
overflow rate (modes 1 and 3).
Timer T2 is a 16-bit up/down counter in XA. As a baud rate
generator, timer 2 is selected as a clock source for eitherlboth
UARTO and UART1 transmitters and/or receivers by setting TCLKn
and/or RCLKn in T2CON and T2MOD. As the baud rate generator,
T2 is incremented as Osc/N where N=4, 16 or 64 depending on
TCLK as programmed in the SCR bits PT1, and PTO. So, if T2 is
the source of one UART, the other UART could be clocked by either
T1 overflow or fixed clock, and the UARTs could run independently
with different baud rates.
The clock for the UARTs in XA runs at 16x the Baud rate. If the
timers are used as the source for Baud Clock, since maximum
speed of timers/Baud Clock is Osc/4, the maximum baud rate is
timer overflow divided by 16 i.e. Osc/64.
In Mode 0, it is fixed at Osc/16. In Mode 2, however, the fixed rate is
Osc/32.
Pre-scaler
for all Timers TO,1 ,2
controlled by PT1, PTO
bits in SCR
00
Osc/4
01
Osc/16
10
Osc/64
11
reserved
Baud Rate for UART Mode 0:
Baud_Rate=Osc/16
T2CON
Ox418
bitS
bit4
RCLKO
TCLKO
T2MOD
Ox419
bitS
bit4
RCLK1
TCLK1
Prescaler Select for Timer Clock (TCLK)
Baud Rate calculation for UART Mode 1 and 3:
Baud_Rate=TimecRate/16
bit2
PTO
Timer_Rate=Osc/(N*(TimecRange- TimecReload_Value))
where N=the TCLK prescaler value: 4, 16, or 64.
and Timer_Range= 256 for timer 1 in mode 2.
65536 for timer 1 in mode 0 and timer 2
in count up mode.
The timer reload value may be calculated as follows:
TimecReload_Value= TimecRange-(Osc/(Baud_Rate*N*16))
NOTES:
1. The maximum baud rate for a UART in mode 1 or 3 is Osc/64.
2. The lowest possible baud rate (for a given oscillator frequency
and N value) may be found by using a timer reload value of O.
3. The timer reload value may never be larger than the timer range.
4. If a timer reload value calculation gives a negative or fractional
result, the baud rate requested is not possible at the given
oscillator frequency and N value.
Baud Rate for UART Mode 2:
Baud_Rate = Osc/32
SnSTAT Address: SO STAT 421
S1STAT 425
Bit Addressable
Reset Value: OOH
MSB
LSB
FEn
BRn
OEn
ISTINTn I
BIT
SYMBOL FUNCTION
SnSTAT.3 FEn
Framing Error flag is set when the receiver fails to see a valid STOP bit at the end of the frame.
Cleared by software.
SnSTAT.2 BRn
Break Detect flag is set if a character is received with all bits (including STOP bit) being logic '0'. Thus
it gives a "Start of Break Detect" on bit 8 for Mode 1 and bit 9 for Modes 2 and 3. The break detect
feature operates independently of the UARTs and provides the START of Break Detect status bit that
a user program may poll. Cleared by software.
SnSTAT.1 OEn
Overrun Error flag is set if a new character is received in the receiver buffer while it is still full (before
the software has read the previous character from the buffer), i.e., when bit 8 of a new byte is
received while RI in SnCON is still set. Cleared by software.
SnSTAT.O STINTn
This flag must be set to enable any of the above status flags to generate a receive interrupt (Rln). The
only way it can be cleared is by a software write to this register.
SU006078
Figure 11. Serial Port Extended Status (SnSTAT) Register
(See also Figure 13 regarding Framing Error flag.)
1997 Mar 25
331
Preliminary specification
Philips Semiconductors
XA-G1
CMOS single-chip 16-bit microcontroller
AOH -A3H
UART 0 Receiver
7
A4H-A7H
UART 0 Transmitter
8
Given slave address or addresses. All of the slaves may be
contacted by using the Broadcast address. Two special Function
Registers are used to define the slave's address, SADDR, and the
address mask, SADEN. SADEN is used to define which bits in the
SADDR are to be used and which bits are "don't care". The SAD EN
mask can be logically ANDed with the SADDR to create the "Given"
address which the master will use for addressing each of the slaves.
Use of the Given address allows multiple slaves to be recognized
while excluding others. The following examples will help to show the
versatility of this scheme:
A8H-ABH
UART 1 Receiver
9
Slave 0
ACH -AFH
UART 1 Transmitter
10
INTERRUPT SCHEME
There are separate interrupt vectors for each UART's transmit and
receive functions.
Table 3. Vector Locations for UARTs in XA
Vector Address
Interrupt Source
Arbitration
NOTE:
The transmit and receive vectors could contain the same ISR
address to work like a 8051 interrupt scheme
Slave 1
Error Handling, Status Flags and Break Detect
The UARTs in XA has the following error flags; see Figure 11.
1100 0000
ljj:!
jjQj
1100 OOXO
SADDR
SADEN
Given
1100 0000
jjjj jjjQ
1100 OOOX
In the above example SADDR is the same and the SADEN data is
used to differentiate between the two slaves. Slave 0 requires a 0 in
bit 0 and it ignores bit 1. Slave 1 requires a 0 in bit 1 and bit 0 is
ignored. A unique address for Slave 0 would be 11000010 since
slave 1 requires a 0 In bit 1. A unique address for slave 1 would be
1100 0001 since a 1 in bit 0 will exclude slave O. Both siaves can be
selected at the same time by an address which has bit 0 =0 (for
slave 0) and bit 1 =0 (for slave 1). Thus, both could be addressed
with 1100 0000.
Multiprocessor Communications
Modes 2 and 3 have a special provision for multiprocessor
communications. In these modes, 9 data bits are received. The 9th
one goes into RB8. Then comes a stop bit. The port can be
programmed such that when the stop bit is received, the serial port
interrupt will be activated only if RBB = 1. This feature is enabled by
setting bit SM2 in SCON. A way to use this feature in multiprocessor
systems is as follows:
In a more complex system the following could be used to select
slaves 1 and 2 while excluding slave 0:
When the master processor wants to transmit a block of data to one
of several slaves, it first sends out an address byte which identifies
the target slave. An address byte differs from a data byte in that the
9th bit is 1 In an address byte and 0 in a data byte. With SM2 =1, no
slave will be interrupted by a data byte. An address byte, however,
will interrupt all slaves, so that each slave can examine the received
byte and see if it is being addressed. The addressed slave will ciear
its SM2 bit and prepare to receive the data bytes that will be coming.
The siaves that weren't being addressed leave their SM2s set and
go on about their business, ignoring the coming data bytes.
Slave 0
SADDR
SADEN
Given
Slave 1
1100 0000
:I:Ij:l :100:1
1100 OXXO
SADDR
SAD EN
Given
Slave 2
SM2 has no effect in Mode 0, and in Mode 1 can be used to check
the validity of the stop bit although this is better done with the
Framing Error (FE) flag. In a Mode 1 reception, if SM2 =1, the
receive Interrupt will not be activated unless a valid stop bit is
received.
1110 0000
1111 :lQjQ
1110 OXOX
SADDR
SADEN
Given
1110 0000
jjjj jjQQ
1110 OOXX
In the above exampie the differentiation among the 3 slaves is in the
lower 3 address bits. Slave 0 requires that bit 0 =0 and it can be
uniquely addressed by 11100110. Siave 1 requires that bit 1 0 and
it can be uniquely addressed by 1110 and 0101. Slave 2 requires
that bit 2 0 and its unique address Is 1110 0011. To select Slaves 0
and 1 and exclude Slave 2 use address 1110 0100, since it Is
necessary to make bit 2 1 to exclude slave 2.
=
Automatic Address Recognition
Automatic Address Recognition is a feature which allows the UART
to recognize certain addresses In the serial bit stream by using
hardware to make the comparisons. This feature saves a great deal
of software overhead by eliminating the need for the software to
examine every serial address which passes by the serial port. This
feature is enabled by setting the SM2 bit in SCON. In the 9 bit UART
modes, mode 2 and mode 3, the Receive Interrupt flag (RI) will be
automatically set when the received byte contains either the "Given"
address or the "Broadcast" address. The 9 bit mode requires that
the 9th Information bit is a 1 to indicate that the received Information
is an address and not data. Automatic address recognitipn Is shown
in Figure 14.
.
=
=
The Broadcast Address for each slave Is created by taking the
logical OR of SADDR and SADEN. Zeros in this result are teated as
don't-cares. In most cases, Interpreting the don't-cares as ones, the
broadcast address will be FF hexadecimal.
Upon reset SADDR and SADEN are loaded with Os. This produces
a given address of all "don't cares" as well as a Broadcast address
of all "don't cares". This effectively disables the Automatic
Addressing mode and allows the microcontroller to use standard
UART drivers which do not make use of this feature.
Using the Automatic Address Recognition feature allows a master to
selectively communicate with one or more slaves by invoking the
1997 Mar 25
SADDR
SADEN
Given
332
Preliminary specification
Philips Semiconductors
XA-G1
CMOS single-chip 16-bit microcontroller
SnCON
Address:
SOCON 420
S1CON 424
LSB
MSB
SMO
Bit Addressable
Reset Value: OOH
SM1
SM2
REN
TB8
TI
RB8
RI
Where SMO, SM1 specify the serial port mode, as follows:
SMO
o
o
SYMBOL
BIT
SnCON.5 SM2
SnCON.4 REN
SnCON.3 TB8
SnCON.2 RB8
SnCON.1
TI
SnCON.O
RI
SM1
0
1
Mode
0
o
2
3
Description
shift register
8-bit UART
9-bit UART
9-bit UART
Baud Rate
fosc/ 16
variable
fosc/32
variable
FUNCTION
Enables the multiprocessor communication feature in Modes 2 and 3. In Mode 2 or 3, if SM2 is set to 1, then RI
will not be activated if the received 9th data bit (RB8) is O. In Mode 1, if SM2=1 then RI will not be activated if a
valid stop bit was not received. In Mode 0, SM2 should be O.
Enables serial reception. Set by software to enable reception. Clear by software to disable reception.
The 9th data bit that will be transmitted in Modes 2 and 3. Set or clear by software as desired.
In Modes 2 and 3, is the 9th data bit that was received. In Mode 1, it SM2=0, RB8 is the stop bit that was
received. In Mode 0, RB8 is not used.
Transmit interrupt flag. Set by hardware at the end of the 8th bit time in Mode 0, or at the end of the stop bit in the
other modes. Must be cleared by software.
Receive interrupt flag. Set by hardware at the end of the 8th bit time in Mode 0, or at the end of the stop bit time
in the other modes (except see SM2). Must be cleared by software.
SU005978
Figure 12. Serial Port Control (SnCON) Register
~.I
START
BIT
DATA BYTE
ONLY IN
MODE 2. 3
STOP
BIT
I
IfO. sets FE
/
{
FEn
OEn
BRn
STINTn
I
SnSTAT
SUOO598
Figure 13. UART Framing Error Detection
SnCON
RECEIVED ADDRESS DO TO 07
PROGRAMMED ADDRESS
----r----,
J-------.J
IN UART MODE 2 OR MODE 3 AND SM2 = 1:
INTERRUPT IF REN=1, RBS=' AND "RECEIVED ADDRESS" = "PROGRAMMED ADDRESS"
- WHEN OWN ADDRESS RECEIVED, CLEAR SM2 TO RECEIVE DATA BYTES
- WHEN ALL DATA BYTES HAVE BEEN RECEIVED: SET SM2 TO WAIT FOR NEXT ADDRESS.
SUOO613
Figure 14. UART Multiprocessor Communication, Automatic Address Recognition
1997 Mar 25
333
Preliminary specification
Philips Semiconductors
XA-G1
CMOS single-chip 16-bit microcontroller
110 PORT OUTPUT CONFIGURATION
v2P
Each I/O port pin on the XA-G1 can be user configured to one of 4
output types. The types are Quasi-bidirectional (essentially the
same as standard 80C51 family I/O ports), Open-Drain, Push-Pull,
and Off (high impedance). The default configuration after reset is
Quasi-bidirectional. However, in the ROMless mode (the EA pin is
low at reset), the port pins that comprise the external data bus will
default to push-pull outputs.
R
SOME TYPICAL VALUES FOR RAND C:
R = 1OaK. C = 1.0~F
R = 1.0M. C =O.1~F
(ASSUMING THAT THE vee RISE TIME IS 1ms OR LESS)
RESET OPTIONS
The EA pin is sampled on the rising edge of the 'RST pulse, and
determines whether the device is to begin execution from internal or
external code memory. EA pulled high configures the XA in
single-chip mode. If EA is driven low, the device enters ROMless
mode. After Reset is released, the EAlWAIT pin becomes a bus wait
signal for external bus transactions.
Table 4. Port Configuration Register Settings
0
0
Open Drain
0
1
Quasi-bidirectional
1
0
Off (high impedance)
1
1
SUOO702
Figure 15. Recommended Reset Circuit
Table 4 shows the configuration register settings for the 4 port
output types. The electrical characteristics of each output type may
be found in the DC Characteristic table.
PnCFGA
RESET
C1
I/O port output configurations are determined by the settings in port
configuration SFRs. There are 2 SFRs for each port, called
PnCFGA and PnCFGB, where "n" is the port number. One bit in
each of the 2 SFRs relates to the output setting for the
corresponding port pin, allowing any combination of the 2 output
types to be mixed on those port pins. For instance, the output type
of port 1 pin 3 is controlled by the setting of bit 3 in the SFRs
P1 CFGA and P1 CFGB.
PnCFGB
XA
I----
The BUSW/P3.5 pin is weakiy pulled high while reset is asserted,
allowing simple biasing of the pin with a resistor to ground to select
the alternate bus width. If the BUSW pin is not driven at reset, the
weak pull up will cause a 1 to be loaded for the bus width, giving a
16-bit external bus. BUSW may be pulled low with a 2.7K or smaller
value resistor, giving an 8-bit external bus. The bus width setting
from the BUSW pin may be overridden by software once the user
program is running.
Port Output Mode
Push-Pull
NOTE:
Mode changes may cause glitches to occur during transitions. When
modifying both registers, WRITE instructions should be carried out
consecutively.
Both EA and WAIT must be held for three oscillator clock times after
reset Is deasserted to guarantee that their values are latched
correctly.
EXTERNAL BUS
ONCE MODE
The external program/data bus on t~e XA-G1 allows for 8-bit or
16-blt bus width, and address sizes from 12 to 20 bits. The bus
width is selected by an Input at reset (see Reset Options below),
while the address size Is set by the program In a configuration
register. If all off-chip code is selected (through the use of the EA
pin), the initial code fetches will be done with the maximum address
size (20 bits).
The ONCE (on-circuit emulation) mode facilitates testing and
debugging of systems using the XA-G1 without the device having to
be removed from the circuit. While the XA-G1is In this mode, an
emulator, tester, or test device may be used to drive the application
circuit. The ONCE mode is activated by the following conditions:
1. While 'RST is asserted, ALE, P1.3, P1.2, P1.1, and P1.0 are
pulled low. The 'J5SEiJ'signal must be allowed to remain high.
RESET
2. Deassert'RST while holding the other pins in the above state.
After ONCE mode is entered, the setup signals may be released.
The device is reset whenever a logic "0" is applied to 'RST for at
least 10 microseconds, placing a low level on the pin re-initiallzes
the on-chip logic. Reset must be asserted when power is initially
applied to the XA-G1 and held until the oscillator is running.
While the XA-G1 is in the ONCE mode, all port pins, ALE, and
'J5SEiJ' are pulled weakly high. The on-chip oscillator remains active.
Normal operation is restored after a standard reset is applied.
The duration of reset must be extended when power is initially
applied or when using reset to exit power down mode. This is due to
the need to allow the oscillator time to start up and stabilize. For
most power supply ramp up conditions, this time is 10 milliseconds.
POWER REDUCTION MODES
The XA-G1 supports Idle and Power Down modes of power
reduction. The idle mode leaves some peripherals running to allow
them to activate the processor when an interrupt is generated. The
power down mode stops the oscillator in order to minimize power.
The processor can be made to exit power down mode via reset or
one of the external interrupt inputs. In order to use an external
interrupt to re-activate the XA while in power down mode, the
external Interrupt must be enabled and be configured to level
sensitive mode. In power down mode, the power supply voltage may
be reduced to the RAM keep-alive voltage (2V), retaining the RAM,
register, and SFR values at the point where the power down mode
was entered.
As It is brought high again, an exception is generated which causes
the processor to jump to the address contained in the memory
location 0000. The destination of the reset jump must be located in
the first 64k of code address on power-up, all vectors are 16-bit
values and so point to page zero addresses only. After a reset the
RAM contents are indeterminate.
1997 Mar 25
334
Preliminary specification
Philips Semiconductors
XA-G1
CMOS single-chip 16-bit microcontroller
The XA-G1 supports a total of 9 maskable event interrupt sources
(for the various XA-G1 peripherals), seven software interrupts, 5
exception interrupts (plus reset), and 16 traps. The maskable event
interrupts share a global interrupt disable bit (the EA bit in the IEL
register) and each also has a separate individual interrupt enable bit
(in the IEL or IEH registers). Only three bits of the IPA register values
are used on the XA-G1. Each event interrupt can be set to occur at
one of 8 priority levels via bits in the Interrupt Priority (IP) registers,
IPAO through IPA5. The value 0 in the IPA field gives the interrupt
priority 0, in effect disabling the interrupt. A value of 1 gives the interrupt
a priority of 9, the value 2 gives priority 10, etc. the result is the same
as if all four bits were used and the top bit set for all values except O.
Details of the priority scheme may be found in the XA User Guide.
INTERRUPTS
The XA-G1 supports 38 vectored interrupt sources. These include 9
maskable event interrupts, 7 exception interrupts, 16 trap interrupts,
and 7 software interrupts. The maskable interrupts each have 8 priority
levels and may be globally and/or individually enabled or disabled.
The XA defines four types of interrupts:
• Exception Interrupts - These are system level errors and other
very important occurrences which include stack overflow,
divide-by-O, and reset.
• Event Interrupts - These are peripheral interrupts from devices
such as UARTs, timers, and external interrupt inputs.
• Software Interrupts - These are equivalent of hardware
interrupt, but are requested only under software control.
• Trap Interrupts - These are TRAP instructions, generally used to
call system services in a multi-tasking system.
The complete interrupt vector list for the XA-G1, including all 4
interrupt types, is shown in the following tables. The tables include
the address of the vector for each interrupt, the related priority
register bits (if any), and the arbitration ranking for that interrupt
source. The arbitration ranking determines the order in which
interrupts are processed if more than one interrupt of the same
priority occurs simultaneously.
Exception interrupts, software interrupts, and trap interrupts are
generally standard for XA derivatives and are detailed in the XA
User Guide. Event interrupts tend to be different on different XA
derivatives.
Table 5. Interrupt Vectors
EXCEPTIONITRAPS PRECEDENCE
VECTOR ADDRESS
ARBITRATION RANKING
Reset (h/w, watchdog, s/w)
DESCRIPTION
0000-0003
o (High)
Breakpoint (h/w trap 1)
0004-0007
1
Trace (h/w trap 2)
0008-0008
1
Stack Overflow (h/w trap 3)
OOOC-OOOF
1
Divide by 0 (h/w trap 4)
0010-0013
1
User RETI (h/w trap 5)
0014-0017
1
TRAP 0-15 (software)
0040-o07F
1
EVENT INTERRUPTS
FLAG BIT
VECTOR
ADDRESS
ENABLE BIT
INTERRUPT PRIORITY
External interrupt 0
lEO
008D-0083
EXO
IPAO.2-0 (PXO)
2
Timer 0 interrupt
TFO
0084-0087
ETO
IPAO.6-4 (PTO)
3
DESCRIPTION
ARBITRATION
RANKING
External interrupt 1
lEi
0088-o08B
EX1
IPA1.2-o (PX1)
4
Timer 1 interrupt
TF1
008C-008F
En
IPA1.6-4 (PT1)
5
Timer 2 interrupt
TF2(EXF2)
0090-0093
ET2
IPA2.2-0 (PT2)
6
Serial port 0 Rx
RI.O
00AO-00A3
ERIO
IPA4.2-0 (PRIO)
7
8
Serial port 0 Tx
TLO
00A4-o0A7
ETIO
IPA4.6-4 (PTIO)
Serial port 1 Rx
RLi
00A8-00AB
ERI1
IPA5.2-0 (PRI1)
9
Serial port 1 Tx
TL1
OOAC-OOAF
ETI1
IPA5.6-4 (PTI1)
10
FLAG BIT
VECTOR
ADDRESS
ENABLE BIT
INTERRUPT PRIORITY
Software interrupt 1
SWR1
0100-0103
SWE1
(fixed at 1)
Software interrupt 2
SWR2
0104-0107
SWE2
(fixed at 2)
Software interrupt 3
SWR3
01 08-01 OB
SWE3
(fixed at 3)
Software interrupt 4
SWR4
010C-010F
SWE4
(fixed at 4)
Software interrupt 5
SWR5
0110-0113
SWE5
(fixed at 5)
Software interrupt 6
SWR6
0114-0117
SWE6
(fixed at 6)
Software interrupt 7
SWR7
0118-0118
SWE7
(fixed at 7)
SOFnNAREINTERRUPTS
DESCRIPTION
1997 Mar 25
335
Preliminary specification
Philips Semiconductors
XA-G1
CMOS single-chip 16-bit microcontroller
ABSOLUTE MAXIMUM RATINGS
RATING
UNIT
Operating temperature under bias
-55 to +125
°C
Storage temperature range
-65 to +150
°C
oto +13.0
V
PARAMETER
Voltage on ~PP pin to Vss
-0.5 to Voo+0.5V
V
MaximumloL per I/O pin
15
rnA
Power dissipation (based on package heat transfer limitations, not device power consumption)
1.5
W
Voltage on any other pin to VS8
DC ELECTRICAL CHARACTERISTICS
ROM (G13): Voo =2.7V to 5.5V unless otherwise specified;
EPROM/OTP (G17): Voo =5.0V ± 5% unless otherwise specified;
Tamb =0 to +70°C for commercial, -40°C to +85°C for industrial, unless otherwise specified
SYMBOL
PARAMETER
TEST CONDITIONS
LIMITS
MIN
TYP
MAX
UNIT
Supplies
100
Supply current operating
30 MHz
60
80
rnA
110
Idle mode supply current
30 MHz
22
30
rnA
Ipo
Power-down current
5
50
IA-A
Ip01
Power-down current (-40°C to +85°C)
75
IA-A
VRAM
RAM-keep-alive voltage
VIL
Input low voltage
VIH
Input high voltage, except XTAL 1, RST
VIH1
Input high voltage to XTAL 1, RST
VOL
VOH1
Output low voltage ali ports, ALE, PSEN::I
Output high voltage ali ports, ALE, PSEN'
VOH2
Output high voltage, ports PO-3, ALE, PSEN2
CIO
Input/Output pin capacitance
RAM-keep-alive voltage
1.5
V
0. 22VOD
-0.5
At5.0V
V
2.2
V
At3.0V
2
V
For both 3.0 & 5.0V
0. 7Voo
V
IOL =3.2mA, Voo = 5.0V
0.5
V
1.0mA, Voo = 3.0V
0.4
V
IOH =- 100IA-A, Voo =4.5V
2.4
V
IOH =-30IA-A, Voo
2.0
V
2.4
V
=2.7V
IOH =3.2mA, Voo =4.5V
IOH =1mA, Voo =2.7V
IlL
Logical 0 input current, PO-36
VIN =O.45V
ILl
Input leakage current, PO-35
VIN =VIL or VIH
2.2
V
-25
15
pF
-75
IA-A
±10
IA-A
Logical 1 to 0 transition current ali ports 4
At5.5V
-650
ITL
flA
NOTES:
1. Ports In Quasi bl-dlrectional mode with weak pull-up (applies to ALE, '!'SEN only during RESET).
2. Ports in Push-Pull mode, both pull-up and pull-down assumed to be same strength
3. In all output modes
4. Port pins source a transition current when used in quasi-bidirectional mode and externally driven from 1 to O. This current is highest when
VIN is approximately 2V.
5. Measured with port in high impedance output mode.
6. Measured with port in quasi-bidirectional output mode.
7. Load capacitance for all outputs =80pF.
8. Under steady state (non-transient) conditions, IOL must be externally limited as follows:
Maximum IOL per port pin:
15mA (*NOTE: This is 85°C speCification for VDD 5V.)
Maximum IOL per 8-bit port:
26m A
Maximum total IOL for all output: 71 rnA
If IOL exceeds the test condition, VOL may exceed the related specification. Pins are not guaranteed to sink current greater than the listed
test conditions.
=
1997 Mar 25
336
Preliminary specification
Philips Semiconductors
XA-G1
CMOS single-chip 16-bit microcontroller
AC ELECTRICAL CHARACTERISTICS
VDD = 5.0V ±5%; Tamb = 0 to +70°C for commercial, -40°C to +85°C for industrial.
VARIABLE CLOCK
SYMBOL
FIGURE
PARAMETER
MIN
MAX
0
30
UNIT
External Clock
Oscillator frequency
fc
tc
22
Clock period and CPU timing cycle
tCHCX
22
tCLCX
tCLCH
MHz
1/fc
ns
Clock high time (60%-40% duty cycle)
tc * 0.5
ns
22
Clock low time (60%-40% duty cycle)
tc * 0.4
22
Clock rise time
5
ns
Clock fall time
5
ns
40
ns
22
tCHCL
Address Cycle
10
ns
tCRAR
21
Delay from clock rising edge to ALE rising edge
tLHLL
16
ALE pulse width (programmable)
(Vi * tc) - 4
ns
tAVLL
16
Address valid to ALE de-asserted (set-up)
(Vi * tc) -10
ns
tLLAX
16
Address hold after ALE de-asserted
(tcl2) -10
ns
(V2 * tc) -10
ns
Code Read Cycle
tpLPH
16
'J5S'EI'J pulse width
tLLPL
16
ALE de-asserted to PSEfiT asserted
tAVIVA
16
Address valid to instruction valid, ALE cycle (access time)
(V3 * tc) -30
ns
tAVIVB
17
Address valid to instruction valid, non-ALE cycle (access time)
(V4 * tc) - 25
ns
tpLIV
16
'J5S'EI'J asserted to instruction valid (enable time)
(V2 * tc) - 25
ns
tpXIX
16
Instruction hold after'J5S'EI'J de-asserted
tPXIZ
16
Bus 3-State after'J5S'EI'J de-asserted (disable time)
tc-8
ns
tUAPH
16
Hold time of unlatched part of address after PSEf\J is de-asserted
ns
(tcl2) -5
0
ns
0
ns
(V7*tc)-10
ns
Data Read Cycle
tRLRH
18
'Fro pulse width
tLLRL
18
ALE de-asserted to 'Fro asserted
tAvDVA
18
Address valid to data input valid, ALE cycle (access time)
(V6 * tc) - 30
ns
tAvDVB
19
Address valid to data input valid, non-ALE cycle (access time)
(V5 * tc) - 25
ns
tRLDV
18
(V7 * tc)-25
ns
tRHDX
18
tRHDZ
18
tUARH
18
'Fro low to valid data in, enable time
Data hold time after 'Fro de-asserted
Bus 3-State after 'Fro de-asserted (disable time)
Hold time of unlatched part of address after 'Fro is de-asserted.
ns
(tcl2) - 5
0
ns
tc - 8
ns
0
ns
ns
Data Write Cycle
tWLWH
20
WFf pulse width
(VB * tc) -10
tLLWL
20
ALE falling edge to WFf asserted
(V9 * tc)-5
ns
tovwx
20
Data valid before WFf asserted (data setup time)
(V9 * tc) -25
ns
tWHOX
20
Data hold time after WFf de-asserted
(Vii *tc)-5
ns
tAVWL
20
Address valid to WFf asserted (setup time) (Note 5)
(V9 * tc)-25
ns
tUAWH
20
Hold time of unlatched part of address after WFf is de-asserted
(Vii *tc)-5
ns
21
WAIT stable after bus strobe ('Fro, WFf, or PSm) asserted
Wait Input
tWTH
21
WAIT hold after bus strobe (RO', WFf, or 'J5S'EI'J) assertion
tWTL
NOTES ON FOLLOWING PAGE.
1997 Mar 25
337
(Vi 0 * tc) - 25
(V10 * tc) -10
ns
ns
Preliminary specification
Philips Semiconductors
XA-G1
CMOS single-chip 16-bit microcontroller
NOTES:
1. Load capacitance for all outputs = 80pF.
2. Variables V1 through V11 reflect programmable bus timing, which is programmed via the Bus Timing registers (BTRH and BTRL).
Refer to the XA Usef Guide for details of the bus timing settings. Please note that the XA-G1 requires that extended data bus hold time
(WMO =1) to be used with external bus write cycles.
V1) This variable represents the programmed width of the ALE pulse as determined by the ALEW bit in the BTRL register.
V1 = 0.5 if the ALEW bit = 0, and 1.5 if the ALEW bit = 1.
V2) This variable represents the programmed width of the 'J5S"EN pulse as determined by the CR1 and CRO bits or the CRA 1, CRAO, and
ALEW bits in the BTRL register.
- For a bus cycle with no ALE, V2 = 1 if CR1/0 = 00, 2 if CR1/0 = 01, 3 if CR1/0 = 10, and 4 if CR1/0 = 11. Note that during burst
mode code fetches, 'J5S"EN does not exhibit transitions at the boundaries of bus cycles. V2 still applies for the purpose of
determining peripheral timing requirements.
- For a bus cycle with an ALE, V2 = the total bus cycle duration (2 if CRA 1/0 = 00, 3 if CRA 1/0 = 01, 4 if CRA 1/0 = 10,
and 5 ifCRA1/0 = 11) minus the number of clocks used by ALE (V1 + 0.5).
Example: if CRA1/0 = 10 and ALEW = 1, the V2 = 4 - (1.5 + 0.5) = 2.
V3) This variable represents the programmed length of an entire code read cycle with ALE. This time is determined by the CRA 1 and
CRAO bits in the BTRL register. V3 =the total bus cycle duration (2 if CRA1/0 = 00,3 if CRA1/0 = 01,4 if CRA1/0 = 10,
and 5 if CRA1/0 = 11).
V4) This variable represents the programmed length of an entire code read cycle with no ALE. This time is determined by the CR1 and
CRO bits in the BTRL register. V4 = 1 if CR1/0 = 00, 2 if CR1/0 = 01,3 if CR1/0 = 10, and 4 if CR1/0 = 11.
V5) This variable represents the programmed length of an entire data read cycle with no ALE. this time is determined by the DR1 and
ORO bits in the BTRH register. V5 = 1 if DR1/0 = 00, 2 if DR1/0 = 01,3 if DR1/0 = 10, and 4 if DR1/0 = 11.
V6) This variable represents the programmed length of an entire data read cycle with ALE. The time is determined by the ORA 1 and
DRAO bits in the BTRH register. V6 =the total bus cycle duration (2 if DRA1/0 = 00, 3 if DRA1/0 = 01,4 if DRA1/0 =10,
and 5 if DRA1/0 =11).
V7) This variable represents the programmed width of the RO pulse as de1ermined by the DR1 and ORO bits or the ORA 1, DRAO In the
BTRH register, and the ALEW bit in the BTRL register. Note that during a 16-bit read operation on an 8-bit external bus, RO remains
low and does not exhibit a transition between the first and second byte bus cycles. V7 still applies for the purpose of determining
peripheral timing requirements. The timing for the first byte is for a bus cycle with ALE, the timing for the second byte is for a bus
cycle with no ALE.
- For a bus cycle with no ALE, V7 = 1 if DR1/0 = 00, 2 if DR1/0 = 01,3 if DR1/0 =10, and 4 if DR1/0 = 11.
- For a bus cycle with an ALE, V7 =the total bus cycle duration (2 if DRA1/0 =00,3 if DRA1/0 =01, 4 if DRA1/0 =10,
and 5 if DRA1/0 =11) minus the number of clocks used by ALE (V1 + 0.5).
Example: if DRA1/0 = 00 and ALEW =0, then V7 = 2 - (0.5 + 0.5) = 1.
V8) This variable represents the programmed width of the WRC and/or WRR pulse as determined by the WM1 bit in the BTRL register.
V81 if WM1 =0, and 2 if WM1 =1.
V9) This variable represents the programmed write setup time as determined by the data write cycle duration (defined by DW1 and DWO
or the DWA 1 and DWAO bits in the BTRH register), the WMO and ALEW bits in the BTRL register, and the value of V8.
- For a bus cycle with no ALE, V9 = the total bus write cycle duration (2 if DW1/0 =00, 3 if DW1/0 = 01, 4 if DW1/0 10, and
5 if DW1/0 =11) minus the number of clocks used by the WR[ and/or WRR pulse (V8) minus the number of clocks used for data
hold time (0 if WMO 0 and 1 if WMO =1).
Example:1f DW1/0 = 11, WMO = 0, and WM1 = 0, then V9 =5 - 0 -1 = 4.
- For a bus cycle with an ALE, there are two cases:
1 For the parametertAvwL, V9 =the total bus cycle duration (2 if DWA1/0 =00, 3 if DWA1/0 01, 4 if DWA1/0 10, and 5 if
DWA 1/0 =11) minus the number of clocks used by the WRC and/or WRR pulse (V8), minus the number of clocks used by data
hold time (0 if WMO =0 and 1 if WMO =1).
2 For other parameters, V9 =the above value minus the width of the ALE pulse (V1).
Example: if DWA1/0 =11, WMO = 1, WM1 =1, and V1 = 0.5, then V9 =5 -1 - 2 - 0.5 = 1.5.
V10) This variable represents the length of a bus strobe for calculation of WAIT setup and hold times. The strobe may be RO (for data read
cycles), WRC and/or WRR (for data write cycles), or'J5S"EN (for code read cycles), depending on the type of bus cycle being widened
by WAIT. V10 will equal V2, V7, or V8 in any particular bus cycle (V2 tor a code read cycle, V7 for a data cycle ~ wideneciJ>L
WAIT. V10 = V2 for WAIT associated with a code read cycle using 'I"SE1\l'. V10 = V8 for a data write cycle using WR[ and/or WRR.
V10 = V7-1 for a data read cycle using RO. This means that a single clock data read cycle cannot be stretched using WAIT. If WAIT
is used to vary the duration of data read cycles, the RO strobe width must be set to be at lease two clocks in duration.
Also see note 4.
V11) This variable represents the programmed write hold time as determined by the WMO bit in the BTRL register.
V11 =0 if the WMO bit =0, and 1 if the WMO bit =1.
3. Not all combinations of bus timing configuration values result in valid bus cycles. Please refer to the XA User Guide section on the External
Bus for details.
4. When code is being fetched for execution on the external bus, a burst mode fetch is used that does not have 'J5S"EN edges in every fetch
cycle. Thus, if WAIT is used to delay code fetch cycles, a change in the low order address lines must be detected to locate the beginning of
a cycle. This would be A3-AO for an 8-bit bus, and A3-A 1 for a 16-bit bus. Also, a 16-bit data read operation conducted on a 8-bit wide bus
similarly does not include two separate RO strobes. So, a rising edge on the low order address line (AO) must be used to trigger a WAIT in
the second half of such a cycle.
5. This parameter is provided for peripherals that have the data clocked in on the falling edge of the WR strobe. This is not usually the case,
and in most applications this parameter is not used.
=
=
=
1997 Mar 25
338
=
Preliminary specification
Philips Semiconductors
XA-G1
CMOS single-chip 16-bit microcontroller
ALE
I
tpLPH
~[
I
MULTIPLEXED
ADDRESS AND DATA _ _ _ _oJ
UNMULTIPLEXED
ADDRESS _ _ _ _oJ
*
AO or A1-A3, A12-19
INSTA IN is either DO-D7 or DO-D15, depending on the bus width (8 or 16 bits),
SU00582D
Figure 16. External Program Memory Read Cycle (ALE Cycle)
ALE~
,,~--------------------------------
,,~---------------------------
X
MULTIPLEXED
ADDRESS AND DATA _ _ _ _ _ _oJ
UNMULTIPLEXED _ _ _ _
ADDRESS
~
A4-A11 or A4-A19~
INSTR IN
*
~~/.
rT7'
h
"-_______
r-----------------------i---
~X
AO or A1-A3, A12-19
.'
•
'
~
AO or A1-A3, A12-1e
* INSTR IN is either DO-D7 or DO-D15, depending on the bus width (8 or 16 bits).
Figure 17. External Program Memory Read Cycle (Non-ALE Cycle)
1997 Mar 25
339
SU00707
Preliminary specification
Philips Semiconductors
XA-G1
CMOS single-chip 16-bit microcontroller
ALE
"
I--
tLRL
tRLRH
"
tLAX
/
~tRLDV
tAVLL
I_ tRHDZ.
tRHDX .....
MULTIPLEXED
ADDRESS
AND DATA
)<
A4-A11 or A4-A19
DATA IN *
)<
•
r>77:K
I-- tUARH'"
tAVDVA
UNMULTIPLEXED
ADDRESS
}-
)K
AO or A1-A3, A12-A19
DATA IN is either 00-07 or DO-DiS, depending on the bus width (8 or 16 bits).
SU00583D
Figure 18. External Data Memory Read Cycle (ALE Cycle)
ALE
J
,,'-_____________~_________
Fm ________________________
,----_ /
~
......
MULTIPLEXED
~~g~~~~
UNMULTIPLEXED
ADDRESS
•
____
V
or A 4 - A 1 9 / > - - - - - - - - - < '-_ _ _D_AT._A_IN_*_--J
AO or A1-A3. A12-A19
------",
DATA IN is either 00-07 or
<
\..
.J
A A4-A11
"'____--J/
~O-DiS,
depending on the bus width (8 or 16 bits).
Figure 19. External Data Memory Read Cycle (Non-ALE Cycle)
1997 Mar 25
340
DATA IN •
AO or A1-A3, A12-A19
SU0070B
Philips Semiconductors
Preliminary specification
XA-G1
CMOS single-chip 16-bit microcontrolier
"-
ALE
-
WRCorWFrn
tLLAX
tAVLL
MULTIPLEXED
ADDRESS
AND DATA
)<
A4-A 11 or A4-A 15
~
tWLWH
tLLWL
t~
V
~
t><
DATAOUT*
I+-
tWHQX
~
~tAVWLj+tUAWH+
)<
UNMULTIPLEXED
ADDRESS
*
)K
AD or A1-A3, A12-A19
DATA OUT is either 00-07 or 00-015. depending on the bus width (8 or 16 bits),
SU00584C
Figure 20. External Data Memory Write Cycle
XTAU
tCRAR
ALE
ADDRESS BUS
- -X
- - - - - - - - - - - - - ->C
/v
"t\.
~--------------------------------
WAIT - - - - - - - - - BUS STROBE _ _ _ _ _ _ _- .
~~!k~i
tWTH
"~~+_----_---!--_---------------"
+--
---+
tWTL----+I
(The dashed line shows the strobe without WAIT.)
SU00709A
Figure 21. WAIT Signal Timing
1997 Mar 25
341
Preliminary specification
Philips Semiconductors
XA-G1
CMOS single-chip 16-bit microcontroller
VOO-o·5
0. 7V OO
0. 2V OO-o·1
0.45V
tCHCL-
tCLC
SU00842
Figure 22. External Clock Drive
VOO-o·5
=x
>C
0.2Voo+0.9
0. 2V o0-0· 1
- - - - - - - -....
0.45V
NOTE:
AC inputs during testing are driven at Voo -0.5 for a logic '1' and 0.4SV for a logic '0'.
Timing measurements are made at the 50% point of transitions.
SU00703A
Figure 23. AC Testing Input/Output
TIMING
REFERENCE
POINTS
VLOAO----<
VOL+0.1V
NOTE:
For timing purposes, a port is no longer floating when a 1OOmV change from load voltage occurs,
and begins to float when a 100mV change from the loaded VOW'JOL level occurs. low'IOL;?: ±20mA.
SU00011
Figure 24. Float Waveform
Voo
Voo
Voo
Voo
(NC)
XTAL2
(NC)
CLOCK SIGNAL
XTAL1
CLOCK SIGNAL
I
I'--vss__---'
Vss
SU005918
SU005908
Figure 25. 100 Test Condition, Active Mode
All other pins are disconnected
1997 Mar25
Figure 26. 100 Test Condition, Idle Mode
All other pins are disconnected
342
Preliminary specification
Philips Semiconductors
XA-G1
CMOS single-chip 16-bit microcontroller
100 ~----.-----.-----~----.-----.------,
80
+-----+-----+-----+-----+-----+------:::004
MAX. 100
60
+-----+-----+-----+-----+-----:'::lJIIi'""--+----=-i
TYPICAL S.OV 100 (ACTIVE)
CURRENT (rnA)
40 +-----+-----+----~~---~~~----+-----~
ROM & ROM less
TYPICAL 3.0V 100 (ACTIVE)
20
I:~~~t~~~;t~~~=t====f=~::t:==J
15
10
20
25
TYPICAL 100 (IDLE)
30
FREQUENCY (MHz)
SU00844
Figure 27. 100 vs. Frequency
Valid only within frequency specification of the device under test.
VCC-. This means that a single clock data read cycle cannot be stretched using WAIT.
If WAIT is used to vary the duration of data read cycles, the m:> strobe width must be set to be at least two clocks in duration.
Also see note 4.
Vii) This variable represents the programmed write hold time as determined by the WMO bit in the BTRL register.
Vii = 0 if the WMO bit = 0, and 1 if the WMO bit = 1.
3. Not all combinations of bus timing configuration values result in valid bus cycles. Please refer to the XA User Guide section on the External
Bus for details.
4. When code is being fetched for execution on the external bus, a burst mode fetch is used that does not have ~ edges in every fetch
cycle. Thus, if WAIT is used to delay code fetch cycles, a change in the low order address lines must be detected to locate the beginning of
a cycle. This would be A3-AO for an a-bit bus, and A3-A 1 for a 16-bit bus. Also, a 16-bit data read operation conducted on a a-bit wide bus
similarly does not include two separate AD strobes. So, a rising edge on the low order address line (AO) must be used to trigger a WAIT in
the second half of such a cycle.
5. This parameter is provided for peripherals that have the data clocked in on the falling edge of the WR strobe. This is not usually the case,
and in most applications this parameter is not used.
1997 Mar 25
369
Preliminary specification
Philips Semiconductors
XA-G2
CMOS single-chip 16-bit microcontroller
ALE
MULTIPLEXED
ADDRESS AND DATA
_ _ _ _J
UNMULTIPLEXED
ADDRESS _ _ _ __
•
INSTR IN is either 00-07 or 00-015, depending on the bus width (8 or 16 bits).
SU00582D
Figure 16. External Program Memory Read Cycle (ALE Cycle)
,,~---------------------------------
ALE - - . - /
,,~-----------------------------------------
-.JX
A4-A11 or A4-A19,-----/
MULTIPLEXED _ _ _ _
ADORES".D DATA
..
INSTR IN;
X~----A-o-o-r
UNMULTIPLEXED - - - -....
ADDRESS _ _ _ _...J
•
~
~~
/77'V'~ . A V I V . - - - I - - - - - - - -
rr--= ~AD"
A-1--A-3-,A-1-2--19------
INSTR IN is either 00-07 or 00-015, depending on the bus width (8 or 16 bits).
Figure 17. External Program Memory Read Cycle (Non-ALE Cycle)
1997 Mar 25
370
A1-A3. A10-19
SU00707
Preliminary specification
Philips Semiconductors
XA~G2
CMOS single-chip 16-bit microcontroller
"-
ALE
~
tRLRH
- - tLLRL
"tLLAX
/V'
I_ tRHDZ~
~tRLDV - +
tAVLL
tRHDX MULTIPLEXED
ADDRESS
AND DATA
)<
A4-A11 or A4-A19
DATA IN *
*
)<
~V
jc-
tAVDVA
UNMULTIPLEXED
ADDRESS
r-
AO or A1-A3, A12-A19
tUARH-+
)K
DATA IN is either DO-D7 or DO-DiS, depending on the bus width (8 or 16 bits).
SUOO583D
Figure 18. External Data Memory Read Cycle (ALE Cycle)
,,~-------------------------------------
ALE
RO ____________________
~
,,-----.....,,/
MULTIPLEXED
~~g~~~~
UNMULTIPLEXED
ADDRESS
*
,,'--_ _ _-..J/
V\'(
____ A A4-A11 or A 4 - A 1 9 / > - - - - - - - - - < '--_ _D_A_TA_IN_*_-..J
..J
------
AO or A1-A3, A12-A1g
DATA IN is either Do-D7 or DO-DiS, depending on the bus width (8 or 16 bits).
Figure 19. External Data Memory Read Cycle (Non-ALE Cycle)
1997 Mar 25
371
DATA IN *
AO or A1-A3, A12-A1g
SU0070B
Preliminary specification
Philips Semiconductors
XA-G2
CMOS single-chip 16-bit microcontroller
"\
ALE
-
..
tWLWH
tLLWL
I
d
wm:orWRR
tLAX
tAVLL
MULTIPLEXED
ADDRESS
AND DATA
)<
A4-All or A4-AI5
/V
...
~
DATA OUT"
+- tWHQX
X
I--tAVWLj4-tUAWH+
)<
UNMULTIPLEXED
ADDRESS
•
)K
AO or A1-A3, A12-A19
OATA OUT is either 00-07 or 00-015, depending on the bus width (8 or 16 bits).
SU00584C
Figure 20. External Data Memory Write Cycle
XTAe,
tCRAR
ALE
X
ADDRESS BUS - - - - J ,
' - - -_ _ _ _ _ _ _ _
'f'\...
~--------------------------------
WAIT - - - - - - - - - BUS STROBE _ _ _ _ _ _ __
~'=i
"
tmH--+
>C
II
,,
_
'-~~--------~---------------------------~
tmL----.!
(The dashed line shows the strobe without WAIT.)
SU00709A
Figure 21. WAIT Signal Timing
1997 Mar 25
372
Preliminary specification
Philips Semiconductors
CMOS single-chip 16-bit microcontroller
VOO-O·S -
XA-G2
0. 7V OO
0. 2V OO-o·1
O.4SV
tCHCL -
tCLC
1+----
tc
SU00842
Figure 22. External Clock Drive
>C
V O O - o . S = = x 0.2Voo+0.9
0. 2Voo-o·1
O.4SV
"'----------
NOTE:
AC inputs during testing are driven at Voo -0.5 for a logic '1' and 0.45V for a logic '0'.
Timing measurements are made at the 50% point of transitions.
SU00703A
Figure 230 AC Testing Input/Output
VLOAO+0.1V
TIMING
REFERENCE
POINTS
VLOAO'----<
VOL+O.1V
NOTE:
For timing purposes, a port is no longer floating when a 1OOmV change from load voltage occurs,
and begins to float when a 100mV change from the loaded VOHNOL level occurs. IOWIOL 2: ±20mA.
SUOOOll
Figure 24. Float Waveform
~~
Voo
Voo
t
(NC)
CLOCK SIGNAL
~
EA
--
RST
XTAL2
( N C ) - XTAL2
XTAL 1
CLOCK SIGNAL _ _ XTAL1
VSS
voo
IVSS
SU00591B
SUOO590B
Figure 25. 100 Test Condition, Active Mode
All other pins are disconnected
1997 Mar 25
Figure 26. 100 Test Condition, Idle Mode
All other pins are disconnected
373
Preliminary specification
Philips Semiconductors
XA-G2
CMOS single-chip 16-bit microcontroller
100~--------~--------~--------~--------~--------~------~
80 +---------4---------4---------4--------+_------+_-----~ MAX. 100
60 +---------I---------I---------I----------I---"2II'II!::...---I-------~ TYPICAL 5.0V
100 (ACTIVE)
CURRENT (rnA)
40+---------4---------4-------~~~----~~~------+_------~
ROM & ROM less
TYPICAL 3.0V 100 (ACTIVE)
20
I:~~~~~~~~f~~~=t====I=~::r::=J
15
10
20
25
TYPICAL 100 (IDLE)
30
FREQUENCY (MHz)
SUOOB44
Figure 27. 100 vs. Frequency
Valid only within frequency specification of the device under test.
VC~·5 - - - -
0.7VCC
0.2VC~.1
0.45V
tCHCL-
SU00608
Figure 28. Clock Signal Waveform for 100 Tests in Active and Idle Modes
tCLCH = tCHCl = 5ns
l
~!2P
Voo
I--
RST
EA I - ( N C ) - XTAL2
,-
XTAL1
~
vss
_I.-
-
SUOO585A
Figure 29. 100 Test Condition, Power Down Mode
All other pins are disconnected. Voo=2V to 5.5V
1997 Mar 25
374
Preliminary specification
Philips Semiconductors
CMOS single-chip 16-bit microcontroller
Note that the r=AN pp pin must not be allowed to go above the
maximum specified Vpp level for any amount of time. Even a narrow
glitch above that voltage can cause permanent damage to the
device. The Vpp source should be well regulated and free of glitches
and overshoot.
EPROM CHARACTERISTICS
The XA-G27 is programmed by using a modified Improved
Quick-Pulse Programming™ algorithm. This algorithm is essentially
the same as that used by the later 80C51 family EPROM parts.
However different pins are used for many programming functions.
Program Verification
If security bits 2 and 3 have not been programmed, the on-Chip
program memory can be read out for program verification. The
address of the program memory locations to be read is applied to
ports 2 and 3 as shown in Figure 33. The other pins are held at the
'Verify Code Data' levels indicated in Table 6. The contents of the
address location will be emitted on port O.
NOTE: The Vpp EPROM programming voltage for the XA-G27 is
10.75V ± 0.25V. This is less than the 12.75V used for 80C51
products. Care should be taken when programming the XA-G27 to
insure that the programming voltage (Vpp) is in the correct range.
Using a programming voltage of 12.75V may damage the part being
programmed. See Figure 30 for a circuit that you can use with a
programmer that has a 12.75V programming pulse that will allow
you to safely program the XA-G27.
12.75V
I--01
~~
02
~t
03
~t
PROGRAMMER
Reading the Signature Bytes
The signature bytes are read by the same procedure as a normal
verification of locations 030H. 031H, and 060H except that P1.2 and
P1 .3 need to be pulled to a logic low. The values are:
+5V
=
.
(030H)
15H indicates manufactured by Philips
(031 H) = EAH indicates XA architecture
(060H)
02H indicates XA-G2 (non-Rev.)
05H indicates XA-G2 (Rev. A)
XA-G37
R1
10K
=
10.75V
ProgramNerify Algorithms
vpp
Any algorithm in agreement with the conditions listed in Table 6, and
which satisfies the timing specifications, is suitable.
SU00843
Figure
ao.
XA-G27 Programming Voltage Adjustment Circuit
Erasure Characteristics
Erasure of the EPROM begins to occur when the chip is exposed to
light with wavelengths shorter than approximately 4,000 angstroms.
Since sunlight and fluorescent lighting have wavelengths in this
range, exposure to these light sources over an extended time (about
1 week in sunlight, or 3 years in room level fluorescent lighting)
could cause inadvertent erasure. For this and secondary effects,
it is recommended that an opaque label be placed over the
window. For elevated temperature or environments where solvents
are being used, apply Kapton tape Fluorglas part number 2345-5, or
equivalent.
The XA-G2 contains three signature bytes that can be read and
used by an EPROM programming system to identify the device. The
signature bytes identify the device as an XA-G2 manufactured by
Philips.
Table 6 shows the logic levels for reading the signature byte, and for
programming the code memory and the security bits. The circuit
configuration and waveforms for quick-pulse programming are
shown in Figure 31. Figure 33 shows the circuit configuration for
normal code memory verification.
The recommended erasure procedure is exposure to ultraviolet light
(at 2537 angstroms) to an integrated dose of at least 15W-s/cm2.
Exposing the EPROM to an ultraviolet lamp of 12,000jlW/cm2 rating
for 90 to 120 minutes, at a distance of about 1 inch, should be
sufficient.
Quick-Pulse Programming
The setup for microcontrolier quick-pulse programming is shown in
Figure 31. Note that the XA-G2 is running with a 3.5 to 12MHz
oscillator. The reason the oscillator needs to be running is that the
device is executing internal address and program data transfers.
Erasure leaves the array in an all1s state.
The address of the EPROM location to be programmed is applied to
ports 2 and 3, as shown in Figure 31. The code byte to be
programmed into that location is applied to port O. RST, J5S"E1\J and
pins of port 1 specified in Table 6 are held at the 'Program Code
Data' levels indicated in Table 6. The ALEiP'ROO is pulsed low 5
times as shown in Figure 32.
Security Bits
With none of the security bits programmed the code in the program
memory can be verified. When only security bit 1 (see Table 6) is
programmed, MOVC instructions executed from external program
memory are disabled from fetching code bytes from the internal
memory. All further programming of the EPROM is disabled. When
security bits 1 and 2 are programmed, in addition to the above,
verify mode is disabled. When all three security bits are
programmed, all of the conditions above apply and all external
program memory execution is disabled. (See Table 7.)
To program the security bits, repeat the 5 pulse programming
sequence using the 'Pgm Security Bit' levels. After one security bit is
programmed, further programming of the code memory and
encryption table is disabled. However, the other security bits can still
be programmed.
TMTrademark phrase of Intel Corporation.
1997 Mar 25
XA-G2
375
Preliminary specification
Philips Semiconductors
XA-G2
CMOS single-chip 16-bit microcontroller
Table 6. EPROM Programming Modes
RST
P§R
ALEIPROG
EJ(Npp
P1.0
P1.1
P1.2
P1.3
P1.4
Read signature
0
0
1
1
0
0
0
0
0
Program code data
0
0
O·
Vpp
0
1
1
1
1
Verify code data
0
0
1
1
0
0
1
1
0
pgm security bit 1
0
0
O·
Vpp
1
1
1
1
1
Pgm security bit 2
0
0
O·
Vpp
1
1
0
0
1
Pgm security bit 3
0
0
O·
Vpp
1
0
1
0
1
MODE
Verify security bits
1
1
0
0
0
0
0
1
0
NOTES:
1. '0' = Valid low for that pin, '1' = valid high for that pin.
2. Vpp = 10.75V ±0.25V.
3. Voo = 5V±10% during programming and verification.
* ALE/P'RO'G' receives 5 programming pulses while Vpp is held at 10.75V. Each programming pulse is low for 50~s (±1 O~s) and high for a
minimum of 1O~s.
Table 7. Program Security Bits
PROGRAM LOCK BITS,
SB1
SB2
SB3
1
U
U
U
PROTECTION DESCRIPTION
No Program Security features enabled.
2
P
U
U
MOVe instructions executed from external program memory are disabled from fetching code bytes
from internal memory and further programming of the EPROM is disabled.
3
P
P
U
Same as 2, also verify is disabled.
4
p
P
P
Same as 3, external execution is disabled. Internal data RAM is not accessible.
NOTES:
1. P - programmed. U - unprogrammed.
2. Any other combination of the security bits is not defined.
ROM CODE SUBMISSION
When submitting ROM code for the XA-G2, the following must be specified:
1. 16k byte user ROM data
2. ROM security bits.
3. Watchdog configuration
ADDRESS
CONTENT
BIT(S)
COMMENT
OOOOH to 3FFFH
DATA
7:0
User ROM Data
8020H
SEC
0
ROM Security Bit 1
8020H
SEC
1
8020H
SEC
3
1997 Mar 25
376
ROM Security Bit 2
o=enable security
1 =disable security
ROM Security Bit 3
o=enable security
1 =disable security
Preliminary specification
Philips Semiconductors
CMOS single-chip 16-bit microcontroller
XA-G2
+5V
AD-A7
VDD
P2
PO
PGM DATA
RST
+12.75V
P1.2
E7i/VPP
P1.3
ALEiPR'OG
P1.4
550115 PULSES TO GROUND
J5SEN
XA-G2
XTAL2
P1.1
P1.0
3.5-12MHz
XTAL1
AS-A14
P3.D-P3.6
Vss
SU00624A
Figure 31. Programming Configuration for XA-G2
1
ALEII'lmG:
i'IIl------------------
n
C
ALEfl5'R'O'G:
o
n~____~n~____~r--
n
~L._ _ _ _ _---I
10115 MIN
I
4
~I
5PULSES
I-
5OIlS±10
~I
n'----_IL
SU00609B
Figure 32. P'ROO Waveform
+5V
VDD
AD-A7
PO
P2
RST
PGMDATA
E7i/VPP
P1.2
ALEIPROO
P1.3
Pl.4
XA-G2
XTAL2
J5SEJir
P1.1
P1.0
XTAL1
P3.D-P3.6
AB-A14
vss
SU00625
Figure 33. Program Verification for XA-G2
1997 Mar 25
377
Preliminary specification
Philips Semiconductors
XA-G2
CMOS single-chip 16-bit microcontroller
EPROM PROGRAMMING AND VERIFICATION CHARACTERISTICS
Tamb
=21°C to +27°C, VDD =5V±5%, VSS = OV (See Figure 34)
PARAMETER
SYMBOL
Programming supply voltage
Vpp
MIN
MAX
UNIT
10.5
11.0
V
Ipp
Programming supply current
1/tCL
Oscillator frequency
tAVGL
Address setup to "J5ROO low
tGHAX
Address hold after"J5ROO
48tCL
tDVGL
Data setup to"J5ROO low
48tcL
tGHDX
Data hold after"J5ROO
48tCL
tEHSH
P2.7
tSHGL
Vpp setup to"J5ROO low
10
tGHSL
Vpp hold after"J5ROO
10
tGLGH
moo width
40
tAVQV
Address to data valid
tELQV
Ef\JABI"E low to data valid
tEHQZ
Data float after Ef\JABI"E
0
moo high to "PROO low
10
tGHGL
NOTE:
1. Not tested.
(Ef\Jj5J~[E)
3.5
50 1
mA
12
MHz
48tCL
high to Vpp
48tCL
Ils
IlS
60
Ils
48tCL
48tCL
PROGRAMMING"
48tCL
Ils
VERIFICATION"
ADDRESS
P2.o-P2.7
P3.o-P3.4
PORTO
PO.O- PO.7
DATA IN
DATA OUT
(00-07)
ALEIPROG - - - - - - -........
FA/Vpp
1
LOGIC 1
_ _ _ _ _J
LOGIC 1
P1.4
EI'IABIT
SU00588
NOTE:
FOR PROGRAMMING CONDITIONS SEE FIGURE 32.
FOR VERIFICATION CONDITIONS SEE FIGURE 33.
Figure 34. EPROM Programming and Verification
1997 Mar 25
378
Preliminary specification
Philips Semiconductors
XA-G3
CMOS single-chip 16-bit microcontroller
FAMILY DESCRIPTION
• Instruction set tailored for high level language support
The Philips Semiconductors XA (eXtended Architecture) family of
16-bit single-chip microcontrollers is powerful enough to easily
handle the requirements of high performance embedded
applications, yet inexpensive enough to compete in the market for
high-volume, low-cost applications.
• Multi-tasking and real-time executives that include up to 32
vectored interrupts, 16 software traps, segmented data memory,
and banked registers to support context switching
• Low power operation, which is intrinsic to the XA architecture,
includes power-down and idle modes.
The XA family provides an upward compatibility path for 80C51
users who need higher performance and 64k or more of program
memory. Existing 80C5.1 code can also easily be translated to run
on XA microcontrollers.
More detailed information on the core is available in the XA User
Guide.
The performance of the XA architecture supports the
comprehensive bit-oriented operations of the 80C51 while
incorporating support for multi-tasking operating systems and
high-level languages such as C. The speed of the XA architecture,
at 10 to 100 times that of the 80C51 , gives designers an easy path
to truly high performance embedded control.
SPECIFIC FEATURES OF THE XA-G3
• 20-bit address range, 1 megabyte each program and data space.
(Note that the XA architecture supports up to 24 bit addresses.)
• 2.7V to 5.5V operation (EPROM and OTP are 5V ± 5%)
The XA architecture supports:
• 32K bytes on-chip EPROM/ROM program memory
• Upward compatibility with the 80C51 architecture
.512 bytes of on-Chip data RAM
• 16-bit fully static CPU with a 24-bit program and data address
range
• Three counterltimers with enhanced features
(equivalent to 80C51 TO, T1, and T2)
• Eight 16-bit CPU registers each capable of performing all
arithmetic and logic operations as well as acting as memory
pointers. Operations may also be performed directly to memory.
• Watchdog timer
• Two enhanced UARTs
• Both 8-bit and 16-bit CPU registers, each capable of performing
all arithmetic and logic operations.
• Four 8-bit 1/0 ports with 4 programmable output configurations
• 44-pin PLCC and 44-pin LQFP packages
• An enhanced instruction set that includes bit intensive logic
operations and fast signed or unsigned 16 x 16 multiply and
32 116 divide
ORDERING INFORMATION
EPROM1
TEMPERATURE RANGE °C AND PACKAGE
ROMless
ROM
P51XAG30JB BD
P51XAG33JB BD
P51XAG37JB BD
OTP
P51 XAG30JB A
P51XAG33JB A
P51XAG37JB A
OTP
P51XAG37JB KA
P51XAG30JF BD
P51XAG33JF BD
P51XAG37JF BD
FREQ
(MHz)
DRAWING
NUMBER
25
SOT389-1
25
SOT187-2
UV
o to +70, Plastic Low Profile Quad Flat Pkg.
o to +70, Plastic Leaded Chip Carrier
o to +70, Ceramic Leaded Chip Carrier
25
1472A
OTP
-40 to +85, Plastic Low Profile Quad Flat Pkg.
25
SOT389-1
P51XAG30JF A
P51XAG33JF A
P51XAG37JF A
OTP
-40 to +85, Plastic Leaded Chip Carrier
25
SOT187-2
P51XAG30KB BD
P51 XAG33KB BD
P51XAG37KB BD
OTP
30
SOT389-1
P51 XAG30KB A
P51XAG33KB A
30
SOT187-2
30
1472A
P51 XAG37KB A
OTP
P51 XAG37KB KA
UV
o to +70, Plastic Low Profile Quad Flat Pkg.
o to +70, Plastic Leaded Chip Carrier
o to +70, Ceramic Leaded Chip Carrier
P51XAG30KF BD
P51 XAG33KF BD
P51 XAG37KF BD
OTP
-40 to +85, Plastic Low Profile Quad Flat Pkg.
30
SOT389-1
P51XAG30KF A
P51 XAG33KF A
P51 XAG37KF A
OTP
-40 to +85, Plastic Leaded Chip Carrier
30
SOT187-2
NOTE:
1. OTP = One Time Programmable EPROM. UV = Erasable EPROM.
1997 Mar25
379
Preliminary specification
Philips Semiconductors
CMOS single-chip 16-bit microcontroller
XA-G3
PIN CONFIGURATIONS
44-Pin PLCC Package
h
44-Pin LQFP Package
n
7C/
34
rs\
0
R4
:J 39
PLCC
:J 29
U
18
'-
P3.0/RxDO
NC
P3.1ffxDO
P3.2!11iIT6
P3.31f1\1TI
P3.4ffO
P3.5ff1/BUSW
P3.6tWR'L
P3.7/RO
XTAL2
XTAL1
Vss
=
23
/
~
~
12
22
28
Pin
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
RST
33
11=
U
Function
Vss
P1.0/AOIWRR
P1.1/A1
P1.2/A2
P1.3/A3
P1.4/RxD1
P1.5ffxD1
P1.6ff2
P1.7ff2EX
"=
LQFP
He
Pin
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
R
=1'0
1
Function
Voo
P2.0/A12D8
P2.1/A13D9
P2.2/A14D10
P2.3/A15D11
P2.4/A16D12
P2.5/A17D13
P2.6/A18D14
P2.7/A19D15
Function
P1.5ffxD1
P1.6ff2
P1.7ff2EX
Pin
1
2
Pin
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
RST
P3.0/RxDO
NC
P3.1ffxDO
P3.2111'ITO
P3.3t'1l'JTI
P3.4ffO
P3.5ff1/BUSW
P3.6/WR[
P3.7/RO
XTAL2
XTAL1
Vss
Voo
P2.0/A12D8
P2.1/A13D9
P2.2/A14D10
P2.3/A15D11
P2.4/A16/D12
J5Srn
ALEiI"ROG
NC
FAiVpplWAIT
PO.7/A11D7
PO.6/A10D6
PO.5/A9D5
PO.4/A8D4
PO.3/A7D3
PO.2/A6D2
PO.1/A5D1
PO.0/A4DO
Voo
10
11
12
13
14
15
16
17
18
19
20
21
22
SUOO525
Function
P2.5/A17D13
P2.6/A18D14
P2.7/A19D15
J5Srn
ALEfF!IiOO
NC
FAiVpplWAIT
PO.7/A11D7
PO.6/A10D6
PO.5/A9D5
PO.4/A8D4
PO.3/A7D3
PO.2/A6D2
PO.1/A5D1
PO.0/A4DO
Voo
Vss
P1.0/AOIWRR
P1.1/A1
P1.2iA2
P1.3/A3
P1.4/RxD1
SUOO580
LOGIC SYMBOL
Voo
Vss
-----
T2EX'
T2'
Tx D1
",0' ]
en
A3
A2
[3 en
A1
AOIWRR
~
l5iE
en
::l
CD
~
is
i=
~
RxDO_
TxDO_
iren[
~
WRC_
FID_
ffi
,
w
II:
o
ll'JTT_
~
...:
en
en
IN'TO_
TO_
T1/BUSW_
W
~
o
~
~
NOT AVAILABLE ON 40-PIN DIP PACKAGE
1997 Mar 25
SU00526
380
Preliminary specification
Philips Semiconductors
CMOS single-chip 16-bit microcontroller
XA-G3
BLOCK DIAGRAM
...
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - - - - - - - - < '-_ _ _DA_:r_A_IN_*_ _ _
UNMULTIPLEXED
ADDRESS _ _ _ _J
*
V
,,'--___--..J/
AO or A1-A3, A12-A19
OATA IN is either 00-07 or 00-015, depending on the bus width (8 or 16 bits).
Figure 19. External Data Memory Read Cycle (Non-ALE Cycle)
1997 Mar 25
402
DATA IN •
AO or A1-A3, A12-A19
SUOO70B
Preliminary specification
Philips Semiconductors
XA-G3
CMOS single-chip 16-bit microcontroller
ALE
"
I---
WF![orWRR
tLLAX
tAVLL
MULTIPLEXED
ADDRESS
AND DATA
)<
tWLWH
tLLWL
A4-A11 or A4-A15
d
~
/V
.-. !-.
DATA OUT *
tWHQX
X
-tAVWL-
I+tUAW~
UNMULnPLEXED
ADDRESS
*
)<
)K
AO or A1-A3, A12-A19
DATA OUT is either 00-07 or 00-015, depending on the bus width (8 or 16 bits).
SUOO584C
Figure 20. External Data Memory Write Cycle
ADDRESSBUS ________
J:><:~
___________________________________________________________~
"~
"v
WAIT _________________- J
f
BUS STROBE _ _ _ _ _ _ _ _
~.~
'--------------------------------------
~
'~I
t~ _ _ ~+~--------------------~---------------------------------------J
tWTL----+I
(The dashed line shows the strobe without WAIT.)
SUOO709A
Figure 210 WAIT Signal Timing
1997 Mar 25
403
Preliminary specification
Philips Semiconductors
XA-G3
CMOS single-chip 16-bit microcontroller
VOO-o·5
o. 7V OO
0. 2V OO-o·1
0.45V
tCHCL~
SU00842
Figure 22. External Clock Drive
>C
OO
V - o . 5 = X O. 2V oo+0.9
0. 2V oo-Q.l
---------
0.4SV
NOTE:
AC Inputs during testing are driven at Voo -o.S for a logic '1' and 0.4SV for a logic '0'.
Timing measurements are made at the SO% point of transitions.
SUOO703A
Figure 23. AC Testing Input/Output
VLOAO+D·1V
VLOAO----<
TIMING
REFERENCE
POINTS
VOL+O.1V
NOTE:
For timing purposes, a port is no longer floating when a 100mV change from load voltage occurs,
and begins to float when a 100mV change from the loaded VOHf'lOL level occurs. IOWIOL ~ ±20mA.
SUOOOII
Figure 24. Float Waveform
Voo
Voo
Voo
Voo
(NC)
XTAL2
(NC)
CLOCK SIGNAL
XTAL1
CLOCK SIGNAL
Vss
Vss
SU00591B
SUOO590B
Figure 25. 100 Test Condition, Active Mode
All other pins are disconnected
1997 Mar 25
Figure 26. 100 Test Condition, Idle Mode
All other pins are disconnected
404
Philips Semiconductors
Preliminary specification
CMOS single-chip 16-bit microcontroller
XA-G3
100
,----------r---------,---------,----------,---------,---------,
80
+----------+----------+----------1----------+---------+----------::-
MAX. 100
60 +----------r---------+----------ir----------t---~""'---;_-------::::;;oof TYPICAL 5.0V 100 (ACTIVE)
CURRENT (rnA)
40
+----------r---------+--------~~------~~~------;_--------~
ROM & ROM less
TYPICAL 3.0V 100 (ACTIVE)
20
I:~;~;~~~~1~~~~~t====[=~::r::==J
10
20
15
25
TYPICALloo(IDLE)
30
FREQUENCY (MHz)
SUOO844
Figure 27. iOO vs. Frequency
Valid only within frequency specification of the device under test.
VOO-{)·5 - - - - ~O.-7V-o-o'""\J
O.45V
0.2VOo-o.l
toHCL -
" -_ _"
toLC
I+----
tCL
SUOO608A
Figure 28. Clock Signal Waveform for 100 Tests in Active and Idle Modes
tcLCH = tcHCl = Sns
~9P
Voo
LAST
Voo ----<
EA
-
( N C ) - XTAl2
~ XTAL1
~
Vss
~~
SUOO585A
Figure 29. 100 Test Condition, Power Down Mode
All other pins are disconnected. Voo=2V to S.SV
1997 Mar 25
405
Preliminary specification
Philips Semiconductors
XA-G3
CMOS single-chip 16-bit microcontroller
Note that the ~pp pin must not be allowed to go above the
maximum specified Vpp level for any amount of time. Even a narrow
glitch above that voltage can cause permanent damage to the
device. The Vpp source should be well regulated and free of glitches
and overshoot.
EPROM CHARACTERISTICS
The XA·G37 Is programmed by using a modified Improved
Quick·Pulse Programmlng™ algorithm. This algorithm Is essentially
the same as that used by the later 80C51 family EPROM parts.
However different pins are used for many programming functions.
Program Verification
If security bits 2 and 3 have not been programmed, the on·chlp
program memory can be read out for program verification. The
address of the program memory locations to be read Is applied to
ports 2 and 3 as shown In Figure 33. The other pins are held at the
'Verify Code Data' levels indicated in Table 6. The contents of the
address location will be emitted on port o.
NOTE: The Vpp EPROM programming voltage for the XA·G37 Is
10.75V ± 0.25V. This Is less than the 12.75V used for 80C51
products. Care should be taken when programming the XA·G37 to
insure that the programming voitage (Vpp) is In the correct range.
Using a programming voltage of 12.75V may damage the part being
programmed. See Figure 30 for a circuit that you can use with a
programmer that has a 12.75V programming pulse that will allow
you to safely program the XA·G37.
12.75V
PROGRAMMER
r-01 ~~
02 ~~
03 ~~
Reading the Signature Bytes
The Signature bytes are read by the same procedure as a normal
verification of locations 030H, 031 H, and 060H except that P1.2 and
P1.3 need to be pulled to a logic low. The values are:
(030H) = 15H indicates manufactured by Philips
(031 H) = EAH Indicates XA architecture
(060H) = 01 H Indicates XA·G3 (non·Rev.)
04H Indicates XA·G3 (Rev. A)
+5V
:
XA·G37
R1
10K
ProgramNerlfy Algorithms
10.75V
vpp
Any algorithm In agreement with the conditions listed In Table 6, and
which satisfies the timing specifications, is suitable.
SU00843
Erasure Characteristics
Figure 30. XA·G37 Programming Voltage Adjustment Circuit
Erasure of the EPROM begins to occur when the chip is exposed to
light with wavelengths shorter than approximately 4,000 angstroms.
Since sunlight and fluorescent lighting have wavelengths in this
range, exposure to these light sources over an extended time (about
1 week in sunlight, or 3 years in room level fluorescent lighting)
could cause inadvertent erasure. For this and secondary effects,
It Is recommended that an opaque label be placed over the
window. For elevated temperature or environments where solvents
are being used, apply Kapton tape Fluorglas part number 2345-5, or
equivalent.
The XA·G3 contains three signature bytes that can be read and
used by an EPROM programming system to identify the device. The
signature bytes identify the device as an XA·G3 manufactured by
Philips.
Table 6 shows the logic levels for reading the signature byte, and for
programming the code memory and the security bits. The circuit
configuration and waveforms for quick· pulse programming are
shown in Figures 31. Figure 33 shows the circuit configuration for
normal code memory verification.
The recommended erasure procedure is exposure to ultraviolet light
(at 2537 angstroms) to an integrated dose of at least 15W-s/cm2 .
Exposing the EPROM to an ultraviolet lamp of 12,000IlW/cm2 rating
for 90 to 120 minutes, at a distance of about 1 inch, should be
sufficient.
Quick-Pulse Programming
The setup for microcontroller quick·pulse programming is shown in
Figure 31. Note that the XA·G3 is running with a 3.5 to 12MHz
oscillator. The reason the oscillator needs to be running is that the
device is executing internal address and program data transfers.
Erasure leaves the array in an all 1s state.
Security Bits
The address of the EPROM location to be programmed is applied to
ports 2 and 3, as shown in Figure 31. The code byte to be
programmed into that location is applied to port O. RST, P'SE1\I and
pins of port 1 specified in Table 6 are held at the 'Program Code
Data' levels indicated in Table 6. The ALEIJ5m:m' is pulsed low 5
times as shown in Figure 32.
With none of the security bits programmed the code in the program
memory can be verified. When only security bit 1 (see Table 6) is
programmed, MOVC instructions executed from external program
memory are disabled from fetching code bytes from the internal
memory. All further programming of the EPROM is disabled. When
security bits 1 and 2 are programmed, in addition to the above,
verify mode is disabled. When all three security bits are
programmed, all of the conditions above apply and all external
program memory execution is disabled. (See Table 7)
To program the security bits, repeat the 5 pulse programming
sequence using the 'Pgm Security Bit' levels. After one security bit is
programmed, further programming of the code memory and
encryption table is disabled. However, the other security bits can still
be programmed.
TMTrademark phrase of Intel Corporation.
1997 Mar 25
406
Preliminary specification
Philips Semiconductors
CMOS single-chip 16-bit microcontroller
XA-G3
Table 6. EPROM Programming Modes
RST
PSER
ALEIPlmG
~pp
P1.0
P1.1
P1.2
P1.3
P1.4
Read signature
0
0
1
1
0
0
0
0
0
Program code data
0
0
O·
Vpp
0
1
1
1
1
Verify code data
0
0
1
1
0
0
1
1
0
MODE
Pgm security bit 1
0
0
o·
Vpp
1
1
1
1
1
Pgm security bit 2
0
0
O·
Vpp
1
1
0
0
1
pgm security bit 3
0
0
O·
Vpp
1
0
1
0
1
Verify security bits
0
0
1
1
0
0
0
1
0
NOTES:
1. '0' = Valid low for that pin, '1' = valid high for that pin.
2. Vpp 10.7SV ±0.2SV.
3. Voo SV±100/0 during programming and verification.
* ALEI?ROO receives S programming pulses while Vpp is held at 10.7SV. Each programming pulse is low for SOilS (±1011S) and high for a
minimum of lOllS.
=
=
Table 7. Program Security Bits
PROGRAM LOCK BITS,
SBl
SB2
SB3
1
U
U
U
No Program Security features enabled.
PROTECTION DESCRIPTION
2
P
U
U
MOVC instructions executed from external program memory are disabled from fetching code bytes
from internal memory and further programming of the EPROM is disabled.
3
P
P
U
Same as 2, also verify is disabled.
4
P
P
P
Same as 3, external execution is disabled. Internal data RAM is not accessible.
NOTES:
1. P - programmed. U - unprogrammed.
2. Any other combination of the security bits is not defined.
ROM CODE SUBMISSION
When submitting ROM code for the XA-G3, the following must be specified:
1. 32k byte user ROM data
2. ROM security bits.
3. Watchdog configuration
ADDRESS
CONTENT
BIT(S)
COMMENT
OOOOH to 7FFFH
DATA
7:0
User ROM Data
8020H
SEC
0
ROM Security Bit 1
8020H
SEC
1
ROM Security Bit 2
o = enable security
1 =disable security
8020H
SEC
3
1997 Mar 2S
407
ROM Security Bit 3
o= enable security
1 =disable security
Preliminary specification
Philips Semiconductors
XA-G3
CMOS single-chip 16-bit microcontroller
+SV
Ao-A7
Voo
P2
PO
PGMOATA
11ST
+12.75V
P1.2
EiWpp
P1.3
ALEIPROO
P1.4
S SOj.l8 PULSES TO GROUND
T'SEN
XA·G3
XTAL2
P1.1
P1.0
3.S-12MHz
XTAL1
AB-A14
P3.o-P3.6
Vss
SU00586A
Figure 31. Programming Configuration for XA·G3
1
ALEIFRO'G'i
t·
S PULSES
n
C
n
~"""_ _ _ _---'
ALEII'ROG:
o
10j.lsMIN
I
---------------~.I
n ____
~
~
I·
n
~n~
____
~r__
50j.ls±10
SU00609B
Figure 32. 1'"R'O'G Waveform
+SV
VOO
Ao-A7
PO
P2
FIST
PGMOATA
EA/VPP
P1.2
ALEII'RO'G
P1.3
P1.4
XA·G3
XTAL2
~
P1.1
P1.0
XTAL1
P3.o-P3.6
AB-A14
vss
SU00587
Figure 33. Program Verification for XA·G3
1997 Mar 25
408
Preliminary specification
Philips Semiconductors
CMOS single-chip 16-bit microcontroller
XA-G3
EPROM PROGRAMMING AND VERIFICATION CHARACTERISTICS
Tamb
== 21°C to +27°C, VDD == SV±S%, VSS == OV (See Figure 34)
PARAMETER
SYMBOL
Vpp
Programming supply voltage
Ipp
Programming supply current
MIN
MAX
10.S
11.0
UNIT
V
SO 1
mA
12
MHz
I
1/tCL
Oscillator frequency
tAVGL
Address setup to
tGHAX
Address hold after PROO
48tCL
tDVGL
Data setup to PROO low
48tCL
tGHDX
Data hold after PROO
48tCL
tEHSH
P2.7 (Ef\JAB[E) high to Vpp
48tCL
tSHGL
Vpp setup to PROO low
10
~s
tGHSL
Vpp hold after PROO
10
~s
tGLGH
PROOwidth
40
tAVOV
Address to data valid
tELOV
Ef\JAB[E low to data valid
tEHOZ
Data float after Ef\JAB[E
0
tGHGL
PROO high to PROO low
10
3.S
'?ROO low
48tCL
60
~s
48tCL
48tCL
48tCL
~s
LOGIC 1
EAlV pp
Pl.4
ENA8[E
SU00588
NOTE:
FOR PROGRAMMING CONDITIONS SEE FIGURE 32.
FOR VERIFICATION CONDITIONS SEE FIGURE 33.
Figure 34. EPROM Programming and Verification
1997 Mar 2S
409
410
Philips Semiconductors
Section 5
Future Derivatives
CONTENTS
XA-C3
CMOS single-chip 16-bit microcontroller
with CAN/OeviceNet controller .................................. , 413
XA-S3
Single-chip i6-bit microcontroller .................................... 414
411
412
Advance information - Subject to change
Philips Semiconductors
CMOS single-chip 16-bit microcontroller
with CAN/DeviceNet controller
DESCRIPTION
Specific Features of the XA-C3
The XA-CAN device is a member of Philips' 80C51 XA (eXtended
Architecture) family of high performance i6-bit single-chip
microcontrollers, and is intended for industrial control applications.
• 2.7V to 5.5V operation
The XA-CAN device supports the DeviceNeFM /CAN Controller Area
Network (CAN) 2.08 .. It supports both 11-bit and 29-bit identifiers
(I D) at up to 1Mbitls data rate.
• 1024 bytes of on-Chip data RAM
XA-C3
• 32K bytes of on-Chip EPROM/ROM program memory
• CAN block supporting full CAN2.0B, with 11-/29-bit ID and up to
1Mbitls
The performance of the XA architecture supports the
comprehensive bit-oriented operations of the 80C51 while
incorporating support for multi-tasking operating systems and
high-level languages such as C. The speed of the XA architecture,
at 10 to 100 times that of the 80C51 , gives designers an easy path
to truly high performance embedded control, while maintaining great
flexibility to adapt software to specific requirements.
• Three standard counter/timers with enhanced features (equivalent
to 80C51 TO, T1, and T2) with outputs
• Watchdog timer with output
.1 UART
• Low voltage detect
• Three 8-bit I/O ports with 4 programmable output configurations
• EPROM/OTP versions can be programmed in circuit
• 25MHz operating frequency at 4.5 - 5.5V Vee over commercial
operating conditions; 16MHz at 2.7V - 3.6V Vee
• 40-pin DIP, 44-pin PLCC, and 44-pin QFP packages
BLOCK DIAGRAM
i - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --.
o
XA CPU Core
32K BYTES
ROM/EPROM
1024 BYTES
STATIC RAM
PORTO
PORT 1
~
____
PO_R_T_2____
LOW VOLTAGE
DETECT
~f::~--------I
,
e. ___________________________
~
________________________
,
!
SU00669A
DeviceNeFM is a trademark of Open DeviceNet Vendor ASSOCiation (OVDA).
1995 Nov 16
413
Advance Information - Subject to change
Philips Semiconductors
CMOS single-chip 16-bit microcontroller
XA-S3
GENERAL DESCRIPTION
• Watchdog timer.
The XA-S3 device is a member of Philips' 80C51 XA (eXtended
Architecture) family of high performance 16-bit single-chip
microcontrollers.
• 5-channel 16-bit Programmable Counter Array (PCA).
• 12C-bus serial I/O port with byte-oriented master and slave
functions. Supports the 100 kHz 12C operating mode at rates up to
400kHz.
The XA-S3 device combines many powerful peripherals on one
chip. With its high performance AID converter, timers/counters,
watchdog, Programmable Counter Array (PCA), 12C interface, dual
UARTs, and multiple general purpose I/O ports, it is suited for
general multipurpose high performance embedded control functions.
• Two enhanced UARTs with independent baud rates.
• Seven software interrupts.
• Active low reset output pin indicates all reset occurrences
(extemal reset, watchdog reset and the RESET instruction).
A reset source register allows program determination of the cause
of the most recent reset.
Specific features of the XA-S3
• 2.7V to 5.5V operation.
• 32K bytes of on-chip EPROM/ROM program memory.
• 1024 bytes of on-chip data RAM.
• 50 I/O pins (68-pin package) or 48 I/O pins (64-pin package),
each with 4 programmable output configurations.
• Supports off-chip addressing up to 16 megabytes (24 address
lines). A clock output reference is added to simplify external bus
interfacing.
• EPROM/OTP versions can be programmed in circuit (On-Board
Programming).
• 30 MHz operating frequency at 2.7 - S.SV Voo over commercial
operating conditions.
• High performance 8-channel 1O-bit AID converter with automatic
channel scan and repeated read functions. Completes a
conversion in 5 microseconds at 20 MHz (100 clocks per
conversion). Operates down to 3V.
• Power saving operating modes: Idle and Power-Down.
Wake-Up from power-down via an external interrupt is supported.
• Three standard counter/timers with enhanced features (same as
XA-G3 TO, n, and T2). All timers have a toggle output capability.
1997 Mar 12
• 68-pin PLCC package.
414
Philips Semiconductors
Advance information - Subject to change
CMOS single-chip 16-bit microcontroller
XA-S3
LOGIC SYMBOL
Voo
I
I
I
I
XTAL1
Vss
r r
a
T
~
XTAL2
0Q.
PiVoo 0 - - AV REF+ 0 - - AV REF- 0 - - PiVss 0 - - -
CLKOUT
ALE
~
PSrn
a:
RSTmJT
0Q.
RST
EA/WAIT
-----------
------- 1£
a:
WRR/AO_
A1_
A2_
A3_
RxDl_
TxDl_
0Q.
-
CEX3
CEX4
A20
A21
AID
INPUTS
_T2
_T2EX
A22
A23
a:
0
0Q.
Q.
Ul
::J
al
~
SCL_
~
-
RxDO_
0
z
<
Ul
Ul
w
TxDO_
TO_
CEX2
~
i=
a:
SDA_
1IiI'rn_
1NTf_
ECI
CEXO
CEXl
a:
t:?
a:
~
a:
o
Q.
0
0
<
0Q.
Tl/BUSW_
WRr_
RU_
SUOO847
1997 Mar 12
415
Advance information - Subject to change
Philips Semiconductors
CMOS single-chip 16-bit microcontroller
XA-S3
BLOCK DIAGRAM
,--------------------------1
I
I
1
XA CPU Core
1
1
I
1
Program
Memory
Bus
SFR
bus
1
1
Port 1
Port 2
Port 3
_1--L_....:P...:O~rt..:.6_.J
I
1
'I
L __________________________ I
SU00846
1997 Mar 12
416
Advance information - Subject to change
Philips Semiconductors
XA-S3
CMOS single-chip 16-bit microcontroller
PIN DESCRIPTIONS
MNEMONIC
PLCC68
NAME AND FUNCTION
TYPE
I
Ground: OV reference.
Voo
I
Power Supply: This is the power supply voltage for normal, idle, and power down operation.
PO.O-PO.7
110
Vss
Port 0: Port 0 is an S-bit 110 port with a user-configurable output type. Port 0 latches have 1s written to
them and are configured in the quasi-bidirectional mode during reset. The operation of port 0 pins as
inputs and outputs depends upon the port configuration selected. Each port pin is configured
independently. Refer to the section on I/O port configuration and the DC Electrical Characteristics for
details.
When the exterhal program/data bus is used, Port 0 becomes the multiplexed low datalinstruction byte
and address lines 4 through 11"
P1.0 - P1.7
I/O
Port 1: Port 1 is an S-bit I/O port with a user-configurable output type. Port 1 latches have 1s written to
them and are configured in the quaSi-bidirectional mode during reset. The operation of port 1 pins as
inputs and outputs depends upon the port configuration selected. Each port pin is configured
independently. Refer to the section on I/O port configuration and the DC Electrical Characteristics for
details.
Port 1 also provides various special functions as described below:
0
0
0
0
I
0
I
0
P2.0- P2.7
I/O
AOIWRH (P1.0)
Address bit 0 of the external address bus when the eternal data bus is
configured for an S-bit width. When the external data bus is configured for a
16-bit width, this pin becomes the high byte write strobe.
A1 (P1.1):
Address bit 1 of the external address bus.
A2 (P1.2):
Address bit 2 of the external address bus.
A3 (P1.3):
Address bit 3 of the external address bus.
RxD1 (P1.4):
TxD1 (P1.5):
SCL (P1.6):
Serial port 1 receiver input.
SDA(P1.7):
Serial port 1 transmitter output.
12C port serial clock output.
12C port serial data inpuVoutput.
Port 2: Port 2 is an S-bit I/O port with a user-configurable output type. Port 2 latches have 1s written to
them and are configured in the quasi-bidirectional mode during reset. The operation of port 2 pins as
inputs and outputs depends upon the port configuration selected. Each port pin is configured
independently. Refer to the sectin on I/O port configuration and the DC Electrical Characteristics for
details.
When the external program/data bus is used in 16-bit mode, Port 2 becomes the multiplexed high
datalinstruction byte and address lines 12 through 19. When the external data/address bus is used in
S-bit mode, the number of address lines that appear on Port 2 is user programmable in groups of
4 bits.
P3.0- P3.7
110
I
0
I
I
1997 Mar 12
Port 3: Port 3 is an S-bit I/O port with a user-configurable output type. Port 3 latches have 1s written to
them and are configured in the quasi-bidirectional mode during reset. The operation of port 3 pins as
inputs and outputs depends upon the port configuration selected. Each port pin is configured
independently. Refer to the section on i/O port configuration and the DC Electrical Characteristics for
details.
Port 3 also provides the various special functions as described below:
RxDO (P3.0):
Receiver input for serial port O.
TxDO (P3.1 ):
Transmitter output for serial port o.
mTO(P3.2):
rnTl (P3.3):
External interrupt 0 input.
External interrup 1 input.
110
TO (P3.4):
Timer/counter 0 external count input or overflow output.
I/O
T1 I BUSW (P3.5):
Timer/counter 1 external count input or overflow output. The value on this
pin is latched as an .external chip reset is completed and defines the default
external data bus.
0
0
WR[(P3.6):
All (P3.7):
External data memory low byte write strobe.
External data memory read strobe.
417
Advance information - Subject to change
Philips Semiconductors
XA-S3
CMOS single-chip 16-bit microcontroller
MNEMONIC
P4.0- P4.7
PLCCS8
TYPE
NAME AND FUNCTION
I/O
Port 4: Port 4 is an 8-bit I/O port with a user-configurable output type. Port 4 latches have 1s written to
them and are configured in the quasi-bidirectional mode during reset. The operation of Port 4 pins as
inputs and outputs depends upon the port configuration selected. Each port pin is configured
independently. Refer to the section on I/O port configuration and the DC Electrical Characteristics for
details.
I
110
I/O
110
I/O
I/O
6
0
P5.0 - P5.7
I/O
Port 4 also provides various special functions as described below:
ECI (P4.0):
PCA External clock input.
Capture/compare external I/O for PCA module O.
CEXO (P4.1):
CEX1 (P4.2):
CEX2 (P4.3):
Capture/compare external I/O for PCA module 1.
Capture/compare external I/O for PCA module 2.
CEX3 (P4.4):
Capture/compare external I/O for PCA module 3.
CEX4 (P4.S):
A20 (P4.6):
A21 (P4.7):
Capture/compare external I/O for PCA module 4.
Address bit 20 of the external address bus.
Address bit 21 of the external address bus.
Port S: Port 5 is an 8-bit I/O port with a user-configurable output type. Port 5 latches have 1s written to
them and are configured in the quasi-bidirectional mode during reset. The operation of Port 5 pins as
inputs and output depends upon the port configuration selected. Each port pin is configured
independently. Refer to the section on I/O port configuration and the DC Electrical Characteristics for
details.
Port 5 also provides various special functions as described below. Port 5 pins used as AID inputs must
be configured by the user to the high impedance mode.
I
ADO (PS.O):
AID channel 0 input.
I
AD1 (PS.1):
AID channel 1 input.
I
AD2 (PS.2):
I
AD3 (PS.3):
AD4 (PS.4):
AID channel 2 input.
AID channel 3 input.
I
I
I/O
I/O
P6.0- P6.7
I/O
0
0
ADS (PS.S):
ADSIT2 (PS.S):
AD7IT2EX (PS.7):
AID channel 4 input.
AID channel 5 input.
AID channel 6 input. Timer/counter 2 external count input or overflow
output.
AID channel 7 input. Timer/counter 2 reload/capture/direction control.
Port 6: Port 6 is an 8-bit i/O port with a user-configurable output type. Port 6 latches have 1s written to
them and are configured in the quasi-bidirectional mode during reset. The operation of Port 6 pins as
inputs and outputs depends upon the port configuration selected. Each port pin is configured
independently. Refer to the section on I/O port configuration and the DC Electrical Characteristics for
details.
Port 6 also provides special functions as described below:
A22(PS.0):
Address bit 22 of the external address bus.
A23 (P6.1):
Address bit 23 of the external address bus.
AVDD
I
AID Positive Power Supply.
AVSS
I
AID Negative Power Supply.
VREF+
I
AID Positive Reference Voltage.
VREF-
I
AID Negative Reference Voltage.
RST
I
Reset: A low on this pin resets the microcontroller, causing I/O ports and peripherals to take on their
default states, and the processor to begin execution at the address contained in the reset vector.
RSTOUT
0
Reset Out: This pin ouputs a low whenever the XA-S3 processor is reset for any reason. This includes
an external reset via the RST pin, watchdog reset, and the RESET instruction.
ALE/P"ROO
I/O
Address Latch Enable/Program Pulse: A high output on the ALE pin signals external circuitry to
latch the address portion of the multiplexed address/data bus. A pulse on ALE occurs only when it is
needed in order to process a bus cycle. During EPROM programming, this pin is used as the program
pulse input.
'J5"SEN
0
Program Store Enable: The read stobe for external program memory. When the microcontroller
accesses external program memory. ~ is driven low in order to enable memory devices. PSEf\J is
only active when external code accesses are performed.
1997 Mar 12
418
Philips Semiconductors
Advance information - Subject to change
CMOS single-chip 16-bit microcontroller
TYPE
NAME AND FUNCTION
r=A/WAITNpp
I
External Access/Bus WaitlProgramming Supply Voltage: The EA input determines whether the
internal program memory of the microcontroller is used for code execution. The value on the EA pin is
latched as the external reset input is released and applies during later execution. When latched as aO.
external program memory is used exclusively. When latched as a 1. internal program memory will be
used up to its limit. and external program memory used above that point. After reset is released, this
pin takes on the function of bus WAIT input. If WAIT is asserted high during an external bus access,
that cycle will be extended until WAIT is released. During EPROM programming. this pin is also the
programming supply voltage input.
XTAL1
I
Crystal 1: Input to the inverting amplifier used in the oscillator circuit and input to the internal clock
generator circuits.
XTAL2
I
Crystal 2: Output from the oscillator amplifier.
CLKOUT
0
MNEMONIC
1997 Mar 12
PLCC68
XA-S3
Clock Output: This pin outputs a buffered version of the internal CPU clock. The clock output may be
used in conjunction with the external bus to synchronize WAIT state generators. etc.
419
Philips Semiconductors
Advance information - Subject to change
CMOS single-chip 16-bit microcontroller
XA-S3
FUNCTIONAL DESCRIPTION
Clock Output
Details·of XA-S3 functions will be described in the following
sections.
The CLKOUT pin allows easier external bus interfacing in some
situations. This output is a buffered version of the clock used inside
of the CPU. The default is for CLKOUT to be on at reset, but it may
be turned off via the CLKD bit in the BCR register.
Analog to Digital converter
, The XA-S3 has an 8-channel, 1O-bit AID converter with 8 sets of
result registers, single scan and multiple scan' operating modes.
When 10 result bits are not needed, the AID may be set up to
perform 8-bit conversions at a higher speed than that required for
1O-bit results. The AID input range is limited to 0 to AVoo (3.3V
max.).'The AID inputs are on Port 5. When an AID conversion is not
in progress, port 5 pins may be read as digital inputs, like any other
port.
Reset
Active low reset input. The associated RSTOUT pin provides an
external indication via an active low output when an internal reset
occurs. The RSTOOT pin will be driven low when the R'ST pin is
driven low, when a Watchdog reset occurs or the RESET instruction
is executed. This signal may be used to inform other devices in a
system that the XA-S3 has been reset.
The reset source identification register (RSTSRC) indicates the
cause of the most recent XA reset. The cause may have been an
externally applied reset signal, \execution of the RESET instruction,
or a Watchdog reset.
12C Interface
The 12C interface on the XA-S3 is essentially the same as the
standard byte-style 12C interface found on devices such as the
8xC552.
Power Reduction Modes
XA-S3 Timer/Counters
The XA-S3 supports Idle and Power Down modes of power
reduction. The idle mode leaves some peripherals running in order
to allow them to activate the processor when an interrupt is
generated. The power down mode stops the oscillator in order to
absolutely minimize power. The processor can be made to exit
power down mode via a reset or one of the external interrupt inputs
(INTO, INT1, or the keyboard sense interrupt). This will occur if the
interrupt is enabled and its priority is higher than that defined by 1M3
through IMO. In power down mode, the power supply voltage may be
reduced to the RAM keep-alive voltage VRAM. This retains the RAM,
register, and SFR contents at the point where power down mode
was entered. Voo must be raised to within the operating range
before power down mode is exited.
The XA-S3 has three general purpose counter/timers, two of which
may also be used as baud rate generators for either or both of the
UARTs.
Timer 0 and 1
Same as the standard XA-G3 timer 0 and 1.
Timer 2
Same as the standard XA-G3 timer 2.
PCA
Standard 80C51 FC-style PCA counter/timer. The PCA is clocked by
TCLK in the same manner as the other timers. Each PCA module
has its own interrupt (in addition to the standard global PCA
interrupt).
INTERRUPTS
When the ECI input is used, the falling edge clocks the PCA
counter. The maximum rate for the counter in this mode on the XA is
Osc/4.
XA-S3 interrupt sources include the following:
Watchdog Timer
• Timer 0, 1, and 2 interrupts (3)
Standard XA-G3 watchdog timer. This watchdog timer always
comes up running at reset. The watchdog acts the same on
EPROM, ROM, and ROMless parts, as in the XA-G3.
• PCA: 1 global and 5 channel interrupts (6)
UARTs
• UART 0 transmitter and receiver interrupts (2)
• External interrupts 0 and 1 (2)
• AID interrupt (1)
Standard XA-G3 UARTO and UART1.
• UART 1 transmitter and receiver interrupts (2)
Clocking / Baud Rate Generation
• 12C interrupt (1)
Same as for the XA-G3.
• Software interrupts (7)
110 Port Output Configuration
Port output configurations are the same as for the XA-G3: open
drain,. quasi-bidirectional, push-pull, and off.
External Bus
The external bus will operate in the same manner as the XA-G3, but
all 24 address lines will be brought out to the outside world. This
allows for up to 16 Mbytes of code memory and 16 Mbytes of data
memory.
1997 Mar 12
420
Advance information - Subject to change
Philips Semiconductors
CMOS single-chip 16-bit microcontroller
XA-S3
EXCEPTIONITRAPS PRECEDENCE
VECTOR ADDRESS
ARBITRATION RANKING
Reset (h/w, watchdog, s/w)
0000-0003
o (High)
Breakpoint
0004-0007
1
Trace
OOOS-OOOB
1
Stack Overflow
OOOC-OOOF
1
Divide by 0
0010-0013
1
User RETI
0014-0017
1
TRAP 0-15 (software)
0040-007F
1
DESCRIPTION
EVENT INTERRUPTS
DESCRIPTION
FLAG BIT
VECTOR ADDRESS
ENABLE BIT
INTERRUPT
PRIORITY
ARBITRATION
RANKING
External Interrupt 0
lEO
00SO-OOS3
EXO
IPAO.3-0
2
Timer 0 Interrupt
TFO
00S4-00S7
ETO
IPAO.7-4
3
External Interrupt 1
lEi
OOSS-OOSB
EX1
IPA1.3-0
4
Timer 1 Interrupt
TF1
OOSC-OOSF
ET1
IPA1.7-4
5
Timer 2 Interrupt
TF2 (EXF2)
0090-0093
ET2
IPA2.3-0
6
PCA Interrupt
CCFO-CCF4,CF
0094-0097
EPC
IPA2.7-4
7
AID Interrupt
S
ADINT
009S-009B
EAD
IPA3.3-0
Serial Port 0 Rx
RLO
00AO-00A3
ERIO
IPA4.3-0
9
Serial Port 0 Tx
TI_O
00A4-00A7
ETIO
IPA4.7-4
10
Serial Port 1 Rx
RU
OOAS-OOAB
ERI1
IPA5.3-0
11
Serial Port 1 Tx
TU
OOAC-OOAF
ETI1
IPA5.7-4
12
PCA channel 0
CCFO
00CO-00C3
ECO
IPBO.3-0
17
PCA channel 1
CCF1
00C4-00C7
EC1
IPBO.7-4
is
PCA channel 2
CCF2
OOCS-OOCB
EC2
IPB1.3-0
19
PCA channel 3
CCF3
OOCC-OOCF
EC3
IPB1.7-4
20
PCA channel 4
CCF4
00DO-00D3
EC4
IPB2.3-0
21
SI
00D4-00D7
EI2
IPB2.7-4
22
12C Interrupt
SOFTWARE INTERRUPTS
FLAG BIT
VECTOR ADDRESS
ENABLE BIT
INTERRUPT PRIORITY
Software interrupt 1
DESCRIPTION
SWR1
0100-0103
SWE1
(fixed at 1)
Software Interrupt 2
SWR2
0104-0107
SWE2
(fixed at 2)
Software Interrupt 3
SWR3
01 OS-01 OB
SWE3
(fixed at 3)
Software interrupt 4
SWR4
01 OC-01 OF
SWE4
(fixed at 4)
Software Interrupt 5
SWR5
0110-0113
SWE5
(fixed at 5)
Software Interrupt 6
SWR6
0114-0117
SWE6
(fixed at 6)
Software Interrupt 7
SWR7
011S-011B
SWE7
(fixed at 7)
1997 Mar 12
421
422
Philips Semiconductors
Section 6
Application Notes
CONTENTS
AN700
Digital filtering using XA ............................................ 425
AN701
SP floating point math with XA ...................................... 430
AN702
High level language support in XA ................................... 453
AN703
XA benchmark versus the architectures 68000, 80C196, and 80C51 ...... 457
AN704
An upward migration path for the 80C51: the Philips XA architecture. . . . ..
AN705
XA benchmark vs. the MCS251 ..................................... 489
481
AN707
Programmable peripherals using the PSD311 with the Philips XA ........
AN708
Translating 8051 assembly code to XA ............................... 522
511
AN709
Reversing bits within a data byte on the XA ........................... 552
AN710
Implementing fuzzy logic control with the XA .......................... 555
AN711
IlC/OS for the Philips XA ........................................... 565
AN713
XA interrupts. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 578
AN96075
Using the XA FJiJWAIT pin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
AN96098
Interfacing 68000 family peripherals to the XA ......................... 619
AN96119
12C with the XA-G3 ................................................ 632
423
598
424
Application note
Philips Semiconductors
AN700
Digital filtering using XA
Author: Santanu Roy, MCa Applications Group, Sunnyvale, California
SUMMARY
sequences of numbers and with the transformation or processing of
such signal representations by numeric computational procedures.
In order to be considered a DSP microcontroller, a part must be able
to quickly multiply two values, and add the result to an accumulator
register. this is a minimum requirement. "Quickly" implies MAC
(Multiply and Accumulate). Typically, the multiply and accumulate
path operates on 16-bit values with a 32-bit result. Figure 1 shows a
typical Digital Signal Processing hardware used in digital filtering.
This report describes a method of implementation of FIR filters using
Philips XA microcontroller. Appended with this application note is a
generic routine that could be used to implement a N-point FIR filter.
INTRODUCTION
The term "digital filter" refers to the computational process or
algorithm by which a digital signal or sequence of numbers (acting
as input) is transformed into a second sequence of numbers termed
the output digital signal. Digital filters involve signals in the digital
domain (discrete-time signals) and are used extensively in
applications such as digital image processing, pattern recognition,
and spectral analysis.
Although XA currently does not have a hardware MAC unit, it is
quite suitable for some DSP applications, due to its relatively high
computational power, and high 1/0 throughput. This application note
is intended to demonstrate such DSP power of the XA through
implementation of FIR and IIR digital filters. It is to be noted, though,
that this application note is not intended as a learning tool for DSP.
It is assumed that the reader is familiar with DSP and filtering
basics.
Digital Signal Processing (DSP) is concerned with the
representation of signals (and information they contain) by
I
I
I
I
I
I
I
I
IL __ _
I
MAC
SU00506
Figure 1. Typical DSP Hardware
1996 Mar01
425
Philips Semiconductors
Application note
Digital filtering using XA
AN700
Filter Algorithms
• Read a 16-bit coefficient (pointed to by another register)
For a large variety of applications, digital filters are usually based on
the following relationship between the filter input sequence x(n) and
filter output sequence y(n);
• Increment the coefficient register pointer by 2
N
La
y(n) =
• Sign Multiply (16-bit) data and coefficient to yield a 32-bit result
M
k
x y(n - k) +
k=O
Lb
k
x x(n - k)
• Add the result to the contents of a 32-bit register pair for
accumulate.
(1)
k=O
This accumulator should be initialized to zero before calculating
each output. It is assumed that the algorithm cannot overflow the
accumulator, either by reducing significant bits of samples and/or
constants or the number of accumulations.
where ak and bk represent constant coefficients and Nand M
represent the number of input samples.
Equation (1) is referred to as a linear constant coefficient difference
equation. Two classes of filters can be represented by such
equations:
4. Finite Impulse Response (FIR) filters, and
All these above MAC operations take place in addition to a buffer
management routine that maintains an updated database for the
filters samples, and system coefficients.
5. Infinite Impulse Response (IIR) filters.
Buffer Management
This applications note describes the implementation of the FIR class
of digital filters on the XA.
In order to effectively perform the task of buffer management, the
processor should be able to quickly "shift" data (or pointers) in a
data array which contains a series of input samples. New data is
going in, and oldest sample is disposed off.
FIR Filters
FIR filters are preferred in lower order solutions, and since they do
not employ feedback (output values used in the calculation of newer
output values), they exhibit naturally bounded response. They are
simpler to implement, and require one RAM location and one
coefficient for each order.
There are few ways to maintain and manage this database. They
are as follows:
1. Linear Buffer
New Sample
For FIR filters, all of the ak in equation (1) is zero. Therefore (1)
reduces to:
x(n-1)
M
Lb
y(n) =
Increasing
Address
x(n-2)
k
x x(n - k)
(2)
k=O
Lost
k)
x(n-4)
Linear buffer management requires the data to physically move
down towards the oldest sample, then the newest sample is
written into the top (FIFO style).
N-1
L h(k) x x(n -
1
x(n-3)
As a result, the output of an FIR filter is simply a finite length
weighted sum of the present and previous inputs to the filter. If the
unit-sample response of the filter is denoted as h(n), then from (2), it
is seen that h(n) = b(n). Therefore, (2) is sometimes written as:
y(n) =
x(n)
2. Circular Buffer
(3)
k=O
where N =length of the filter =M+ 1.
x(n-1)
x(n)
Digital Filter Implementation
*1->
As described above, a digital filter (FIR or IIR) could then be
implemented by multiplying a vector of sampled Signals with another
vector of constants (coefficients) and adding the results to a register.
The vectors involved in the filter process are derived from
transformation of an S domain transfer function into the sampled Z
domain.
x(n-3)
<-*2
x(n-2)
*1 At the beginning of filter pass, input pointer points to the oldest
(n-4) sample, new sample is stored there.
*2 At the end of the filter pass, pointer now points to the next oldest
sample (n-3).
The Multiply-Accumulate (MAC) Function
The MAC speed applies both to finite impulse response (FIR) and
finite impulse response (IIR) filters. The complexity of the filter
response dictates the number MAC operations required per sample
period.
Circular buffer management requires a test to make sure a buffer
pointer increment does not move the pointer beyond the "tail" (end)
of the buffer. If so, the pointer must be reset to the "head"
(beginning) of the buffer.
A multiply-accumulate step performs the following:
Selecting one approach versus another depends mainly on the
overhead involved with this task over the plain Multiply-Accumulate
and loop control operations, and may vary based on the processor
architecture, storage access time and other factors.
• Read a 16-bit sample data (pointed to by a register)
• Increment the sample data pOinter by 2
1996 Mar01
x(n-4)
426
Application note
Philips Semiconductors
AN700
Digital filtering using XA
MAC Implementation on the XA
An efficient loop for memory mapped vectors is presented below.
The loop entry is at an even address, to reduce the fetch overhead
after branch to beginning of the loop. Arrays are accessed using the
indirect-autoincrement addressing mode .
. incld fir.h
MAC_LOOP:
mov.w
mov.w
mul.W
add
addc
djnz
R3,
R4,
R3,
R5,
R6,
[Rl+)
[R2+)
R4
R3
R4
RD,
MAC~OOP
read sample vector entry
read coefficient vector entry
multiply
accumulate into
a 32 bit register pair(R5:R6)
this serves as the RRP
;decrement loop counter and
;branch to MAC_LOOP
The loop contains 13 bytes and takes 32 clocks (including branch
penalty) per Iteration (1 .6fJ.S at 20MHz and 1.07fJ.S at 30.0MHz).
The following section analyzes the digital filter performance,
including initialization, 110, MAC operations and sample vector buffer
management.
An N-Point FIR Filter Implementation on XA
The FIR filter maintains a list of a fixed number N of recent samples.
At each Iteration, a new sample Is taken, replacing the oldest
sample on the list. This list represents a sampled vector. It Is then
multiplied by an N constant's vector to yield the current output.
As mentioned earlier, there are 2 register pointers fetching data
samples and coefficient and feeding it to the ALU for 16-bit signed
multiply with the 32-bit result being added to the MAC result register
pair (RRP). In addition, a buffer management routine updates the
sample data buffer each sample period.
The following sample codes show the mechanism for running filters
on successive samples. It reflects the Simplest data structures and
list management, to simulate an output of a high level complier.
Data Samples in Buffer
NOTE: Arrows indicate direction of data shift on each filter pass.
SUOO507
Figure 2. Buffer Management for FIR Filter
1996 Mar 01
427
Application note
Philips Semiconductors
Digital filtering using XA
AN700
FIR Algorithm in XZ
;Preliminary initialization for first filter pass:
.incldfir.h
Start_FIR:
mov RO, #N-1
N = number of entries in the list
= loop counter
compiler uses 2 pointers
mov R1, #Old_Entry
mov R2, #Old_Entry+2
Shft_Smpl:
mov.w [R1+] , [R2+]
djnz
RO, Shft_Smpl
mov
and
mov
RO, A2D
RO, #mask
New_Entry, RO
Mac init:
mov
RO, #N
Rl,
R2,
R5,
R6,
#Old_Entry
#Coef_Entry
R5
R6
MAC_LOOP:
mov.w
mov.w
mul.w
add
addc
djnz
R3,
R4,
R3,
R5,
R6,
RO,
[R1+]
[R2+]
R4
R3
R4
MAC_LOOP
ACC_corr:
asl
R5, #norm**
mov
mov
xor
xor
mov
DAC, R6
- SAMPLE FROM AID PORT
input from port
mask upper bits (for N-bit AID)
add to list
MULTIPLY ACCUMULATE
N = number of entries in the list
= loop counter
pointer to sample vector
pointer to coefficient vector
zero to accumulator
zero to accumulator
read sample from list to reg
read constant from list to reg
multiply
accumulate in RRP
complete 32 bit add
- NORMALIZE RESULT BY SHIFTING
correction for non-significant LSBs
for eight 10 bit samples and 16 bit
constants, #norm=3
i.e. take only most significant 29 bits of the result
[16+10 + 3 (for B iterations)]
- OUTPUT TO D2A PORT
send to DAC
A total of 62 bytes and 370 clocks for this FIR algorithm.
For N=8, 10 bit AID, 16 bit filter coefficients; 8, 12, 16 bits clock very similar performance.
Total time for an 8-point filter at 20 MHz is 19.0 microseconds and
12.7 microseconds at 30 MHz. This would translate to a maximum
sampling rate of 52 KHz at 20 MHz and 78 KHz at 30 MHz clock.
If this filter algorithm is interrupt driven, then additional 20 clocks
would be required for latency, which would then translate to 50 KHz
maximum sampling rate at 20 MHz and 75 KHz at 30 MHz. This
puts the XA In the bandwidth of Audio Signal Processing (44.1 KHz)
applications.
1996 Mar 01
NOTES:
1. The above FIR algorithms are assembled with "asmxa rev 1.4" ,
the first XA absolute assembler for verification. It is to be noted in
this context, that this assembler is a beta-site tool and still under
evaluation. The syntax used in the assembler might be subjected
to change. The functionality of the code is not checked at this
stage using any simulator or ICE.
2. It is possible in the above MAC operation to extend the length of
the accumulator to accommodate more iterations and higher
precision (greater than 10-bit AID) sample values with some
additional overhead, e.g:, using 'ADDC Rn, R6H", etc., after the
32-bit accumulate, where Rn is a byte-size register to increase
the length of the accumulator to accommodate more
accumulations and higher precision (greater than 1O-bit AID)
sample values.
428
Philips Semiconductors
Application note
Digital filtering using XA
AN700
Author's Note
without rewriting routines In assembly language. also, this is not the
ultimate performance for the XA architecture. The register banks
can be used to store coefficients and samples, resulting In slightly
faster execution time.
All addresses and constants assumed 16 bit for generality.
Performance is calculated for a work-aligned branch targets which is
mandated in the XA architecture for performance reasons.
Misalignment will result in addition of NOPs by the assembler
causing penalty in both code density and execution times. It is also
to be mentioned that this Is not the fastest executable code for the
XA. A good programmer can combine the two loops Into one, and
data can be kept in registers. For low order filter implementation,
code can be written in-line, and can utilize direct addressing mode
for samples array.
Author's Acknowledgement
The author recognizes the following Philips Semiconductors XA
team members for their review and Inputs on this article:
Greg Goodhue, Ori Mizrahi-Shalom, and Ata Khan.
References
XA User Guide - Philips Semiconductors
Digital Signal Processing - Rosenbaum
This code was written in a way that reflects minimum expected
optimization form a complier (local loop optimization only), and it
shows the expected speed for code written in a high level language,
1996 Mar 01
429
Application note
Philips Semiconductors
AN701
SP floating point math with XA
Author:
Santanu Roy, MCa Applications Group, Sunnyvale, California
IEEE SINGLE PRECISION FLOATING POINT
ARITHMETIC WITH XA
SIGN
i-bit
This application note is intended to implement Single Precision
Floating Point Arithmetic package using the new Philips
Semiconductors XA microcontrolJer. The goal is to have this
package as a part of the run-time math library for the XA when the
cross-compiler is developed. The package is based upon the IEEE
Standard for Binary Floating-Point Arithmetic (IEEE Std 754-1985).
This package, however, is not a conforming implementation of the
said standard. The differences between the XA implementation and
the standard are listed later in this report. Also, this package does
not include routines for conversion between Integers to Floating
Point and vice versa.
The significance of each of these fields is as follows:
1" SIGN - This i-bit field is the sign of the Mantissa. '0' indicates
a positive and '1' indicates a negative number.
2. EXPONENT - This is a 8-bit field. The width of this field
determines the range of the FP number. The exponent is
represented as a biased value with a bias of 127 decimal. The
bias value is added to exponents in order to keep them always
positive and is represented by
2n- 1 -1,
The following four standard Single Precision (SP) arithmetic
operations have been implemented in this package:
FPADD
FPSUB
FPMUL
FPDIV
where n =number of bits in the binary exponent.
Addition of two SP floating point numbers.
Subtraction of two SP floating pOint numbers.
Multiplication of two SP floating point numbers.
Division of two SP floating point numbers.
3. MANTISSA - This is a 23-bit field representing the fractional
part. The width of this field determines the precision for the FP
number. For normalized FP numbers (see below), a MSB of '1' is
assumed and not represented. Thus, for normalized numbers,
the value of the mantissa is 1.Mantissa. This provides an
effective precision of 24-bits for the mantissa.
The following section discusses the representation of FLP numbers.
Then the differences between the XA implementation and the IEEE
standard are described. This is followed by a description of the
algorithms used in the computations. Appendix A is a user reference
section for converting a floating point number into IEEE format and
Appendix B is a listing of the code.
If dealt with normalized numbers only (as the XA implementation
does), then the MSB of the Mantissa need not be explicitly
represented as per IEEE standard specification.The normalized
significand lies in the range shown below.
1.0 < Normalized Mantissa < 2.0
Note that this application note assumes that the reader is familiar
with the IEEE Binary Floating-Point standard.
Given the values of Sign, Exponent, and Mantissa, the value of
the FP number is obtained as follows:
IEEE Floating Point Formats
(I) If 0 < Exp < 255, then
The basic format sizes for floating-point numbers, 32 bits and 64
bits, were selected for efficient calculation of array elements In
byte-addressable memories. For the 32-bit format, precision was
deemed the most important criterion, hence the choice of radix 2
instead of octal or hexadecimal. Other characteristics include not
representing the leading slgnificand bit in normalized numbers, a
minimally acceptable exponent range which uses 8 bits, and
exponent bias Which allows the reciprocal of all normalized numbers
to be represented without overflow. For the 64-blt format, the main
consideration was range.
FP
=(-1 )SIGN x 2EXP - 127 x 1.MANTISSA
(ii) If Exp = 0, then FP = 0
(iii) If Exp = 255, and Mantissa =/= 0, then FP = Invalid Number
(NaN or Not a Number).
The above format for single precision binary FP numbers provides
for the representation in the range -3.4 x 1038 to -1.75 X 10-38 , 0,
and 1.75 x 10-38 to 3.4 x 1038 . The accuracy Is between 7 and 8
decimal digits.
Representation of FLP Number
Differences with the IEEE Standards
The IEEE binary floating point number is represented in the
following format:
FP =± Signlficand x BaseCharacteristic
The IEEE standard specifies a comprehensive list of operations and
representations for FLP numbers. Since an implementation that fully
conforms to this standard would lead to an excessive amount of
overhead, a number of features In the standard were omitted. This
section describes the differences between the Implemented package
and the standard.
The specification of a binary FP number involves two parts:
A Significand or Mantissa
and a Characteristic or Exponent.
1. Omission of -0 - The IEEE standard requires that both + and
- 0 be represented, and arithmetic carried out using both. The
implementation does not represent -0.
The Mantissa Is signed fixed point number and the Exponent is a
signed integer. Mantissa or Significand is that component of a binary
FLP number which consists of an explicit or implicit leading bit to the
left of its binary point and a fraction field to the right of the binary
point. Exponent signifies the power to which 2 is raised in .
determining the value of the represented number. Occasionally the
exponent is called the signed or unbiased exponent. The IEEE
standard specifies that a single precision Floating Point number
should be represented in 32 bits as shown in Figure 1.
1995 Jul28
MANTISSA
23-bits
Figure 1.
Introduction
1.
2.
3.
4.
EXPONENT
8-bits
2. Omission of Infinity arithmetic - The IEEE standard provides
for the representation of + and - infinity, and requires that valid
arithmetic operations be carried out on infinity.
3. Omission of Quiet NaN - The IEEE standard provides for both
Quiet and Signalling NaNs. A signalling NaN can be produced as
430
Application note
Philips Semiconductors
AN701
SP floating point math with XA
the result of overflow during an arithmetic operation. If the NaN Is
passed as input to further FLP routines, then these routines
would produce another NaN as output. The routines will also set
the Invalid Operation Flag, and call the user FLP error trap
routine at address FPTRAP.
Exponent Underflow-This occurs if the result of a computation Is
such that its exponent Is 0 or less.
Dlvide-by-zero-This exception occurs if the FLP divide routine is
called with F2 being O.
.
The package signals exceptions in 2 ways. First, a word at address
ERRFLG is maintained that registers the history of the exception
conditions. Bits 0-3 of this word are used for the same. .
4. Omission of denormallzed numbers - These are FLP
numbers with a biased exponent, E of zero and non-zero
mantissa F. Such denormalized numbers are useful in providing
gradual underflow to O. These are not represented in the XA
implementation. Instead, if the result of a computation cannot be
represented as a normalized number within the allowable
exponent range, then an underflow is signalled, the result is set
to 0, and the user FLP error trap routine at address FPTRAP is
called.
Bit 0 - Exponent overflow detect
Bit 1 - Exponent Underflow detect ERRFLG
Bit 2 - Illegal Operand detect
Bit 3 - Divide-by-o detect
ERRFLG
5. Omission of Inexact Result Exponent - The IEEE standard
requires that an Inexact Result Exception be signalled when the
round result of an operation is not exact, or it overflows without
an overflow trap. This feature is not provided.
DBZ
lOP
EUF
EOV
This bits are never cleared by the FLP package, and can be
examined by the user software to determine the exception
conditions that occurred during the course of a computation. If. it Is
the responsibility of the user software to Initialize this word before
calling any of the floating pOint routines.
6. Biased Rounding to Nearest - The IEEE standard requires
that rounding to the nearest be provided as the default rounding
mode. Further, the rounding Is required to be unbiased. The XA
implementation provides biased rounding to nearest only, e.g.,
suppose the result of an operation Is .b1 b2b3nnn and needs to
be rounded to 3 binary digits. Then if nnn is OYY, the round to
nearest result is .b1 b2b3. If nnn Is 1YY, with at least one of the
V's being 1, then the result is .b1 b2b3 + 0.001 , Finally, if nnn is
100, It is a tie situation. In such a case, the IEEE standard
requires that the rounded result be such that its LSB is O. The XA
implementation, on the other hand, will round the result In such a
case to .b1 b2b3 + 0.001.
The second method that the package uses to signal exceptions is to
call a user floating point exception handler whenever such
conditions occurs. The corresponding exception bit in ERRFLG is
set before calling the handler. The starting address of the handler
should be defined by the symbol FPTRAP.
Unpacked FLP Format
The IEEE standard FLP format described earlier Is very
cumbersome to deal with during computation. This Is primarily
because of splitting of the mantissa between the 2 words. The
subroutine in the package unpack the input IEEE FLP numbers into
an Internal representation, do the computations using this
representation, and finally pack the result into the IEElfformat
before returning to the calling program. The unpacking Is done by
the subroutine FUNPAK and the packing by the subroutine FPAK.
The unpacked format consists of 3 words and Is organized as
follows:
DESCRIPTION OF ALGORITHMS
General Considerations
The XA implementation of the SP floating point package consists of
a series of subroutines. The subroutines have been written and
tested using Microsoft C however, not been tested with the XA C
cross-compiler and also not optimized for code efficiency. The
executable could be run under DOS in any IBM compatible PC. It is
a menu driven routine that enables the user to select any of the 4
Floating Point routines. The menu also includes a "HELP" Item
designed to provide some standard SP floating point numbers, their
operations and results as a quick reference.
Unpacked FLP
Fn-Exponent (8-blt biased)
IFn-Sign (extended to 8-bits)
MS 16-blts of Mantissa (implicit 1 is present as MSB)
The Arithmetic subroutines that compute F1 (Op) F2, where Op is +,
-, *, or I expect that F1 and F2 are In IEEE format. Each of F1 and
L5 8-blts of Mantissa
IEight O's
F2 consists of two 16-blt words organized as follows:
Fn-HI : 5Ign(1) Biased exponent(7) MSB of Mantlssa(8)
Since all computations are carried out In this format, note that the
result Is actually known to 32 bits. This 32-blt mantissa is rounded to
24 bits before packed to the IEEE format.
Fn-LO : Least Significant word of Mantissa(16)
Exception Handling
Algorithms
The following types of exception can occur during the course of
computation.
All the arithmetic algorithms first check for easy cases when either
F1 or F2 is zero or a NaN. The result in these cases is immediately
available. The description of the algorithms below Is for those cases
when neither F1 or F2 Is 0 or a NaN. Also, in order to keep the
algorithm description simple, the check for underflow/overflow at the
various stages is not shown. The documentation in the program, the
flowcharts given below, and the theory as described in the
references should allow these programs to be easily maintained.
Invalid Operand-This exception occurs if one of the input is a
NaN.
Exponent Overflow-This occurs if the result of a computation is
such that its rounded result is finite and not an invalid result but its
exponent is too large to represent in the floating point format,
I.e .• exponent has a biased value of 255 or more.
1995 Jul28
431
Application note
Philips Semiconductors
SP floating point math with XA
AN701
FPADD AND FPSUB
FPDIV == FP1/FP2
Before a floating point add/subtract instruction is executed, the 2
operand~ in normalized form
The way a floating-point DIVIDE instruction is executed is analogous
to that of a Floating Point Multiply, except that mantissa
multiplication is replaced by mantissa division and the exponent
addition by exponent subtraction. Exponent overflow or underflow
may occur When true addition is performed on the 2 exponents of
opposite signs. The scheme must avoid the situation of having a
divisor which is smaller than dividend mantissa, including the special
case of a 0 divisor. With this constraint, the post normalization is
unnecessary in FLP division as long as pre-normalization was
conducted to avoid quotient overflow.
The processing steps are as follows:
1. Compare the 2 exponents.
2. Align the mantissas by ;equalizing their exponents.
3. Compute result sign as the XOR of the signs of the 2 numbers.
4. Add/Subtract the mantissas.
For suptract, FP2 is complemented and added with FP1 ,
i.e., FSUB = FP1 + (-FP2).
The processing steps are as follows:
1. Compare FP1_HI and FP2_HI.
If FP2_HI > FP1_HI, then go to step 3, else go to step 2.
5. Normalize the resulting sum/difference.
6. Pack the exponent, sign and mantissa in IEEE format and return.
FMULT
2. Shift right FP1 and FP1_EXP += 1.
3. Compute FP1_EXP - FP2_EXP + 127 to get C_EXP.
=FP1 * FP2
4. Compute FP1_SIGN XOR FP2_SIGN to get result sign,
Le., C_SIGN
Floating-point multiplication is accomplished by multiplying the
mantissas of the 2 operands and adding their corresponding
exponents. Exponent overflow or underflow may occur when true
addition is performed on 2 exponents of the same sign.
5. Compute FP1_HI x FP2_LO = M1_HI.M1_LO.
6. Divide M1_HI.M1_LO / FP2_HI = M2_HI (Quotient)
The processing steps are as follows:
7. Doa true subtract FP1_LO - M2_HI = M3_LO.
If result -ve then go to step 8 else FP1_HI-= 1 and go to step 8.
1. Add the 2 exponents and subtract 7FH (I EE bias "of 12710) to
yield the result exponent.
8. Divide FP1_HI.M3_LO / FP2_HI = C1_HI (Quotient) + R1
(remainder)
.
," Result"Exponent = FP1_EXP + FP:LEXP-127
9. Divide R1.0000 / FP2_HI = C1_LO (Quotient)
2. XOR the sign bits to get the result sign.
10.lf MSB of C1_HI = 1, then go to step 11, else shift left
C1_HI.C1_LO, C_EXP -= 1, and go to step 11.
Result Sign = FP1_SIGN XOR FP2_SIGN
3. Compute FP1_HI x FP2_HI = C1_HI.C1_LO.
11. Round CCHI.C1_LO to get C_HI.C_LO, go to step 12
4. Compute FP1_HI x FP2_LO = CO_HI.CO_LO.
12. Pack the exponent, sign and mantissa in IEEE format and return.
5. Add CO_HI + C1_LO = C2_LO.
If more than 16~bits, then C1_HI += 1.
6. CQmpu!eFP1_LO x FP2:-HI= C3_HI.C3_LO.
7. Add C3_HI + C2_LO = C4_LO.
If more than 16-blts, then C1_HI += 1.
8. Normalize mantissa. If MSB of C1_HI =/= 1,
then result exponent += 1 else left shift C1_HI.C4_LO.
9. Round C1_HI.C4_LO to get result mantissa.
10. Pack the exponent; sign and mantissa In IEEE format and return.
1995 Jul28
432
Application note
Philips Semiconductors
SP floating point math with XA
AN701
FPADD AND FPSUB
NO
O=SAME SIGN
1 =OPP. SIGN
NO
YES
RESULT MANTISSA = FP1MANT + FP2MANT
RESULT MANTISSA = FP1MANT - FP2MANT
NO
SU00508A
1995Jul28
433
Application note
Philips Semiconductors
SP floating pOint math with XA
AN701
FPMULT
YES
ROUND RESULT,
PACK IN IEEE FORMAT &
EXIT
SU00509
1995 Jul28
434
Philips Semiconductors
Application note
SP floating point math with XA
AN701
FPDIV
ROUND RESULT,
PACK IN IEEE FORMAT &
EXIT
SU0051 0
1995 Jul28
435
Philips Semiconductors
Application note
SP floating point math with XA
AN701
References
APPENDIX A
1. IEEE Draft 8.0 on A Proposed Standard for Binary Floating-point
Arithmetic, 1981
Conversion of Floating Point Numbers
In general IEEE FP
=+- mantissa X 2 exponent
2. K.Hwang, Computer Arithmetic, John-WI/eyand Sons, 1979
Format = Sign bit (1). Biased Exponent bits (8). Normalized
Mantissa bits (23), e.g., convert 1.0 to a 32-bit IEEE Floating Point:
3. Microprocessor System Design Concepts, Nlkltas A.
A/exandridls, Computer SC.Press, 1984
1 =1.0 X 2°;
Biased Exponent 0 + 127 127 7F Hex
The 24-bit normalized mantissa 100000000000000000000000;
Sign = positive = 0;
=
=
4. Microprocessors and Digital Systems, Doug/as V. Hall,
McGraw-Hili, 1980
=
=
So, IEEE 1.0 =0 0111111100000000000000000000000
which is 3f80 0000 hex & so on.
Some Floating Point Numbers are given below for
user reference:
=BF80 0000;
=3F80 0000
-0.25 =BE80 0000;
+0.25 =3EBO 0000
-1.0
+1.0
=
-0.50 BFOO 0000;
+0.50 =3FOO 0000
=
6.250 40C8 0000;
1.625 =3FDO 0000;
12.0 = 4140 0000
1995 Jul28
436
Application note
Philips Semiconductors
SP floating point math with XA
AN701
APPENDIX B
#include
#include "fpp.h"
void main (void)
unsigned int fprtn;
unsigned short j;
FILE *fp;
start:
while (1)
II clear RAM
for(j=O; j<6;j++)
{
trnp1 [ j 1 - 0;
trnp2 [j 1
0;
II Menu
printf("\n\n\n\n");
printf("
XA FLOATING POINT ARITHMETIC FUNCTION MENU\n") ;
printf("
-------------------------------------------\n") ;
printf ("\n") ;
printf("
A .............. Floating Point Add\n") ;
printf("
B ...... , ....... Floating Point Subtract \n") ;
printf("
C ....... " ..... Floating Point Multiply\n");
printf("
D .............. Floating Point Divide\n");
printf("
H .............. Help File\n");
printf("
J . . . . . . . . . . . . . . Error Register Status\n");
printf("
Q .............. Exit Menu\n\n\n\n\n");
printf("
==>") i
fprtn
= getche();
1* wait for user i/p *1
getch();
II wait for
printf("\n\n") ;
1* Select Floating Point Routine */
switch(fprtn)
{
case 'A'
case 'a'
printf ("Floating Point Addition in Progrss .... \n\n\n") ;
getnurn() ;
fpadd() ;
break;
1995 Jul28
437
Philips Semiconductors
Application note
SP floating point math with XA
AN701
case 'B'
case 'b'
printf("Floating Point Subtraction in Progrss .... \n\n\n");
printf("\n\n\n\n") ;
getnum() ;
fpsub() ;
break;
case 'C':
case 'c':
printf("Floating Point Multiplication in Progress .... \n\n\n");
printf("\n\n\n\n");
getnum() ;
fpmult () ;
break;
case '0':
case 'd':
printf("Floating Point Divide in Progress .... \n\n\n");
printf("\n\n\n\n");
getnum() ;
fpdiv() ;
break;
case 'H':
case 'h':
if( (fp = fopen("help","r")) == NULL)
printf("can't open flpdat for read\n");
fcopy(fp,stdout) ;
fclose (fp) ;
printf("Hit any key to continue ... ");
getch() ;
goto start;
case 'J':
case 'j':
show_err_reg();
printf("Hit any key to continue ... ");
getch () ;
goto start;
case 'Q':
case 'q':
printf("******Hit Ctrl+C to exit .... !! !!*******\n");
getch() ;
default :
*****************************************************\n
printf("
printf("
UNKNOWN COMMAND, GOODBYE!!
*\n");
*****************************************************\ nUl;
printf("
goto start;
H ):
1995 Jul28
438
Philips Semiconductors
Application note
SP floating point math with XA
/'O
AN701
Exception Handling Routines */
void divbyz (void)
ERRFLG 1= 8,
fp_Io = 0;
fp_hi = NANH;
fptrap() ;
return;
/'O
f* set the DIVBYO bit (#3) */
/* Return NaN *f
/*
exception handler 'O/
Illegal Operand - one of the numbers is a INVALID. 'O/
void fnan(void)
ERRFLG 1= 4;
fp_lo = NANL;
fp_hi = NANH;
fptrap () ;
return;
void undflw(void)
ERRFLG 1= 2,
fp_Io = 0;
fp_hi = 0;
fptrap() ;
return;
void ovflw (void)
/* set the NAN operand bit */
/* return NAN in fp_lo and fp_hi */
/* exponent underflow 'Of
/* set the exponent underflow bit */
/* clear FP */
/* exponent overflow */
ERRFLG 1= 1;
fp_lo = 0;
fp_hi '" NANH;
fptrap () ;
return;
/* set the exponent overflow bit */
/* Subroutine to check if a single preC1S1on FLP # stored in the
IEEE flp format in registers fp_Io and fp_hi is 'INVALID'
Returns 0 if number != INVALID and
Returns 1 if Number == INVALID
*/
unsigned int
fnanchk()
/* Subroutine to check if a SP floating point number is a NaN
Returns 1, if YES, and 0 if NOT */
long tmp;
tmp '" fp_hi;
tmp = tmp » 1;
i f (tmp > Oxfeff)
return 1;
return
1995Jul28
/* Shift left fp_hi by
/* feff + 1
= ffOO
/* biased exp >= 255
/* OK *1
439
*/
*/
& f =/= 0 */
Philips Semiconductors
Application note
SP floating pOint math with XA
AN701
}
/* Subroutine to check if a single precision FLP # stored in the
IEEE flp format in registers fp_lo and fp_hi is 'ZERO'
Returns 0 if number != and
Returns 1 if Number == 0
Note: fp "0" = 1.0 x 2 e -127 i.e if biased exp
0, fp
*/
char zchk (void)
unsigned long tmp;
tmp
fp_hi;
tmp
tmp «
1* Shift left fp_hi by 1 */
1;
if (tmp > OxOOff)
return 0;
return 1;
/* subroutine to unpack a SP IEEE formatted FP # and held in regs.fp_hi
and fp_lo.
The unpacked format occupies 3 words & is organized as
follows:
WORD2
WORD1
WORDO
eeeeeeee ssssssss
1mmmmmmm mmmmmmmm
mmmmmmmm 00000000
-> biased-exp.sign
16 MSB of Mantissa (m23
m16)
-> 8 LSB of Mantissa.zeros
e7:0 - 8-bit exponent in excess-127 format
s7:0 - sign bit -> OxOO = +ve, Oxff = -ve
m23:0 - normalized mantissa i.e 1.0000 ...
*/
II returns ptr. to a character array to fpadd
Ilpointer to the flp. array passed by fpadd
char* funpak(fparray)
int *fparray;
char sign;
unsigned short i= O,j
if(k=2) k=O;
else
k ++;
flpar [i]
0;
flpar[++i]
flpar[++i]
0;
II clear la-byte of fpO
fparray[j] & OxOOff; 1* fpO_hi = mO:m7 *1
(fparray[j++] & OxffOO) » 8; 1* fp1_1o = m8:m15 *1
flpar[++i) = fparray[j]
& Ox007f; /* m16:m22 */
flpar[ i l l = Ox80;
/* set bit7 -> normlz. bit */
sign = (fparray[j] & Ox8000) »
if (sign)
flpar[++i]
else
flpar [++il
1*
-ve number? *1
Oxff;
/* yes */
/* no */
OxOO;
flpar[++il = (fparray[jl & Ox7f80) »
return (flpar);
1995Jul28
15; 1* check sign bit *1
1* fp2_1o = 8 sign bits *1
7;
/**1
/* return the ptr to the array */
440
Philips Semiconductors
Application note
SP floating point math with XA
AN701
/* subroutine to pack a SP held in 3 words flparO:3 into IEEE format.
The packed format is stored in fp_hi & fp_lo as follows:
fp_hi
seeeeee ernrnrnrnrnrnrn
-> sign.biased-exp.7 MSBs of mantissa
fp_Io:
rnrnrnrnrnrnrnr rnrnrnrnrnrnrnr
-> 16 LSBs of Mantissa
Result Stored in tmp2[i); i=O:5
tmp2[O) = OxOO; tmp[l) = mO:m7; tmp[2] = m8:m15;
tmp[3) = 1.m16:m22; tmp(4) = sign7:0; tmp(5) = exp7:0
*/
void fpak(void)
int i=l;
unsigned int sign,tmpc;
long ltmp1,ltmp2;
fp_lo = tmp2[i++);
tmpc = tmp2[i++);
fp_lo
fp_lo I (tmpc«
fp_hi
ltmpl
ltmp1
/* get mO : m7 */
8);
/* get m8 :m15 */
tmp2 [i++] ;
(fp_hi & Ox007f);
ltmp1 « 16;
/* get 1.m22 :m16 */
/* mask
sign = tmp2[i++];
tmp2 [ i] ;
ltmp2 = ltmp2 « 23;
Itmp2 = Itmp2 I Itmp1;
shift */
/* save sign-bit(s)
/* exponent */
1 tmp2
if (sign)
ltmp2 = ltmp2
&
*/
Ox80000000;
printf("\n\nThe IEEE packed result is:");
printf (" %lx\n" , 1 tmp2) ;
1* This routine rounds up the 32-bit mantissa resulted from FP operations
to a 24-bit number */
void fround(void)
{
unsigned int i=3, ctmp;
long tmpl;
tmpl
tmpl
ctmp
tmpl
tmpl
ctmp
ctmp
tmp2[i--];
tmpl « 8;
tmp2[i--];
tmpll ctmp;
tmpl « 8;
tmp2 [i--];
tmp2[i] ;
/* l.m22: 16 * /
/* m15:8 */
/*
if(ctmp & Ox80)
m7: 0
*/
/* if bit 7 i not set in the LSB */
tmpl
Ox0100;
/* Increase next byte by 1 */
ctmp = tmp2 [5] ;
if{tmpl & Ox1000000)
/* carry out of MSB? */
{
tmpl = tmpl »
ctmp++;
1;
/* exp
exp+1 * /
if (ctmp > 255)
tmp2[5]
1995 Jul28
441
Oxff;
Application note
Philips Semiconductors
SP floating pOint math with XA
AN701
tmp2[1]
tmp2[2]
tmp2[3]
(tmpl & OxOOOOOOff):
(tmpl & OxOOOOffOO) »
(tmpl & OxOOffOOOO) »
/* User supplied FLP Trap Routine */
void fptrap(void)
printf ("\n\nException Occurance !!! \n\n")
i
printf("Error Flag Register = %x",ERRFLG);
/* User exception handler
*/
printf("\n The Error Flag Register Bit Map is as follows :"):
printf("\n --------------------------------------\n\n"):
printf("
---------------------------------------\n");
printf ("
I - I - I - I - I DBZ I lOP I EUF I EOV I \n") ;
printf("
---------------------------------------\n\n\n");
printf(" where DBZ
Divide by Zero exception\n");
printf("
lOP
NaN or Invlaid operand\n");
printf ("
EUF
Exponent Underflow\n");
printf (" and
EOV
Exponent Overflow\n\n\n"):
printf("The status of the register after the operation is :"):
printf ("Ox%x\n\n", ERRFLG) ;
/* FPADD - Floating Point Add
It is assumed two floating point numbers Fl &F2 are in IEEE format
Format :
Fn = fpnh (s.e7:0.m22:l6) + fpnl (m15:0)
In registers
*1
int fpadd()
1/
long dmant, flpml, flpm2, lnfp, tlong;
int *flpn, templ, temp2;
char dexp, i=O,j=O,k=5,t=O, expl, exp2:
expl
tmpl [k]
i
/* get exponent of 1st */
exp2
tmp2 [k] ;
/* get exponent of 2nd */
dexp
(expl - exp2);
printf("\n\n") ;
printf ("DEXP =
1995 Jul 28
/* difference in exponent */
%x\n", dexp);
442
8:
16:
Application note
Philips Semiconductors
SPfloating pOint math with XA
AN701
1* CASE 1: */
/ * flexp > f2exp * /
i f (dexp > 0 && dexp<23)
1/2
tmp = dexp;
/* if exp > 23, can't shift mantissa
more than 23-bits */
while (tmp--)
{
for(i=O; i<=3; i++)
(
tmp2[i) = tmp2[i) »
1;
}
}
i = 4;
tempI = tmpl[i) & OxOOff;
/* get the fpl sign byte */
printf("\nFPl SIGN BITS = %x", tempI);
temp2 = tmp2[i) & OxOOff;
/* get the fp2 sign byte */
printf("\nFP2 SIGN BITS = %x", temp2);
= 4;
rsign = (tmpl[i)
i
A
tmp2[i);
if(rsign != 0)
/* ex-or sign bits */
/* if different sign */
{ //44
printf (" \nFPs ARE OF DIFFERENT SIGNS! ! \n") ;
flpml
flpm2
getmant (0) ;
getmant(l);
dmant
flpml - flpm2;
if (flpml > flpm2)
/* Flman > F2man */
1/22
printf("\n") ;
printf("FPl MANTISSA GREATER THAN FP2 MNATISSA\n");
printf("\n\n") ;
tmp2[4) = tmpl[4);
rsign
tmpl [4) ;
/* result sign
sign of Fl */
/* stored in FP2 sign byte */
/* Shift left mantissa till MSB = 1 */
for(k=O; k <= 23
&& «dmant & Ox00800000) == 0); k++)
(
dmant = dmant « 1;
expl = expl - 1;
/* save result in tmp2[i) array */
tmp2[5)
tmp2[4)
tmp2[3)
tmp2[2)
tmp2[l)
1995Jul28
expl:
rsign;
(dmant & OxOOffOOOO) »
(dmant & OxOOOOffOO) »
(dmant & OxOOOOOOff);
443
16;
8;
Philips Semiconductors
Application note
SP floating point math with XA
AN701
printf ("RESULT EXPONENT : %x\n", expl);
printf("RESULT MANTISSA (NORMLZD) = %lx\n", dmant);
printf ("RESULT SIGN = %x\n", rsign & Oxl);
1* round the result *1
fpak() ;
fround();
1* Pak & leave *1
printf ("Hi t any key to continue ... ");
getch() ;
return 0;
} 1122
1* F2man
else if (flpml Flman
*1
{ 1123
printf(" FP2 MANTISSA GREATER THAN FPl MANTISSA \n");
dmant = -dmant; 1* 2'S COMPLEMENT *1
dmant++;
exp2 = tmp2 [5] ;
I * res. exp = F2. exp * I
rsign = tmp2[4];
tlong = dmant;
while(! (tlong & Ox800000»
{ dmant = dmant « 1;
tlong
dmant;
exp2--;
dmant
dmant & Oxffffff;
1* save result in tmp2[i] array */
tmp2[5]
tmp2[4]
tmp2[3]
tmp2[2]
tmp2[l]
rexp;
rsign;
(dmant & OxOOffOOOO) »
(dmant & OxOOOOffOO) »
(dmant & OxOOOOOOff) ;
16;
8;
printf("\n\n") ;
printf("THE RESULT MANTISSA (NORMLZD) IS = %lx\n",dmant);
printf("THE RESULT EXPONENT IS
%x\n", exp2);
printf("THE RESULT SIGN IS
%x\n", rsign & Oxl);
=
=
fround() ;
fpak() ;
printf ("Hi t any key to continue ... ");
getch() ;
return(O) ;
} //23
} ! I 44
else if(rsign
1995 Jul28
0) II same sign, so ex-OR is
444
Philips Semiconductors
Application note
SP floating point math with XA
AN701
{ 1155
printf (" \n") ;
printf ("FPs ARE OF SAME SIGN!! \n") ;
flpml
getmant(O);
flpm2
getmant(l);
dmant
flpml + flpm2;
rsign
tmpl[4];
rexp = expl;
tlong
dmant;
tlong = tlong & OxOl000000;11 check if carry set
i f (tlong)
dmant = dmant » 1;
rexp '" rexp + 1;
}
1* save result in tmp2[i] array * 1
tmp2[5]
tmp2[4]
tmp2[3]
tmp2[2]
tmp2[1]
rexp;
rsign;
(dmant & OxOOffOOOO) »
(dmant & OxOOOOffOO) »
(dmant & OxOOOOff) ;
16;
8;
printf (" \n \n") ;
printf("THE RESULT MANTISSA(NORMLZD) IS = %lx\n",dmant);
printf("THE RESULT EXPONENT IS = %x\n", rexp);
printf ("THE RESULT SIGN IS = %x\n", rsign & 1);
fround() ;
fpak() ;
1* pack in IEEE format *1
printf ("Hi t any key to continue ... ");
getch() ;
return(O) ;
} 1/55
} II 2
else if (dexp
>
23)
{ 1199
printf ("DIFFERENCE IN EXPONENT IS
for(i = 0; i<= 3; i++)
tmp2[i] = 0:
goto loop_here;
) 1199
else if (dexp < 0)
1995 Jul28
445
GREATER THAN 23 \n") ;
Philips Semiconductors
Application note
SP floating point math with XA
AN701
{/ /6
printf ("DIFFERENCE IN EXPONENT IS NEGETIVE\n");
printf ("FP2 EXPONENT GREATER THAN FPl EXPONENT\n");
tmp = -dexp ;
tmp++;
/* 2's complement */
printf ("2' s COMPLEMENT OF DEXP = %d\n", tmp);
if(tmp < 23)
while (tmp--)
{
forti = 0; i<= 3; i++)
{
tmpl[i] = tmpl[i] »
1;
}
goto loop_here;
else if(tmp > 23)
/* dexp > 23 */
for(i=O; i<= 3; i++)
tmpl[i] = 0;
goto loop_here;
/* Flmant
o
*/
//6
else if(dexp == 0)
printf ("FPs GOT SAME EXPONENT!! \n");
go to loop_here;
}
/* shift done */
/ /
/* Get the mantissa for both FP in 24-bit format */
long getmant(val)
unsigned short val;
long lnfp, flpm;
unsigned short i;
i= 1;
Infp
0;
flpm = 0;
i f (!val)
lnfp = tmpl [i] ;
flpm 1= (lnfp & OxOOOOOOff);
Infp
0;
i++i
Infp
tmpl [i] ;
Infp
Infp« 8;
flpm \= Infp & OxOOOOffOO;
Infp
0;
i++i
lnfp
tmpl[i];
lnfp
(lnfp« 16);
flpm \= (lnfp & OxOOffOOOO);
flpm = flpm & OxOOffffff;
printf (" \n FPl MANTISSA = %lx\n", flpm);
1995Jul28
446
Philips Semiconductors
Application note
SP floating point math with XA
AN701
else
i=l;
flpm
Infp
Infp
flpm
= 0;
= 0;
= tmp2[i++];
1= (lnfp & OxOOOOOOff);
Infp
Infp
Infp
flpm
= 0;
= tmp2[i++];
= (lnfp « 8);
1= (lnfp & OxOOOOffOO);
Infp
Infp
Infp
flpm
= 0;
= tmp2 [i] ;
= (lnfp « 16);
1= (lnfp & OxOOffOOOO);
flpm = (flpm & OxOOffffff);
printf (" FP2 MANTISSA = %lx\n", flpm);
return (flpm);
int fpsub()
{
unsigned char fp2_sign;
fp2_sign = tmp2[4];
fp2_sign = -fp2_sign;
tmp2[4] = fp2_sign;
fpadd() ;
void getnum ()
unsigned int fp[3], px;
unsigned short i,j,k;
printf("Type the lo-word of FP#l in IEEE format :");
scanf (" %x" ,&px) ;
i= 0;
fp[i] = *&px;
printf("Type the hi-word of FP#l in IEEE format :");
scanf ( "%x" ,&px) ;
fp(++i] = *&Px;
funpak(fp);
II pass the array ptr. to unpack routine
for(k=O,j=O; k<=5; j++,k++)
{
tmp1[k] = flpar[j];
}
printf (" \n") ;
i=O;
printf("\n\n") ;
printf("Type the lo-word of FP#2 in IEEE format :");
scanf ("%x". &px) ;
fp[i] = *&px;
1995 Jul28
447
Philips Semiconductors
Application note
SP floating point math with XA
AN701
printf("Type the hi-word of FP#2 in IEEE format :");
scanf ("%x" ,&px) ;
fp[++i) = *&px;
funpak ( fp) ;
for(k=O,j=O; k<=5; j++,k++)
{
tmp2[k) = flpar[j);
}
void fpmult ()
int fp1_exp,fp2_exp, res_sign;
unsigned int fp1_hi, fp1_lo, fp2_hi, fp2_10, tmp;
unsigned int cO_hi,cO_Io,c1_hi, c1_Io, c2_lo,c3_hi, c3_lo, c4_lo;
int res_exp;
long ltmp;
tmp1[5);
tmp2 [5) ;
(long) (fpl_exp + fp2_exp -127);
II
i f (res_exp < 0)
undflw() ;
II
result exponent
underf low
if (res_exp > 255)
ovflw() ;
res_sign = tmpl[4)
h
tmp = tmp1[3) « 8;
tmp = tmp & OxffOO;
tmp I", tmp1 [2) ;
tmp2[4);
II
XOR
1* l.m22:8
result sign
FP_HI*I
fp1_hi = tmp;
fp_hi = fpl_hi;
tmp = fnanchk();
i f (tmp)
fnan() ;
tmp'" tmp2[3) « 8;
tmp = tmp & OxffOO;
tmp I = tmp2 [2) ;
II
F1 is a NaN
1* l.m22:8
FP_LO *1
fp2_hi = tmp;
fp_hi = fp2_hi;
tmp '" fnanchk ( ) ;
i f (tmp)
fnan() ;
tmp
zchk();
II Check for F2
II
F2 is a NaN
o
i f (tmp)
printf("\nResult is
goto endprog; }
fpLhi;
1995Jul28
448
o
as Multiplier is O\n");
II
F2
o
Philips Semiconductors
Application note
SP floating point math with XA
tmp
zchk();
AN701
Ii Check for FI
i f (tmp) {
printf("\nResult is
goto endprog;
}
tmp = tmpl[l) « 8;
tmp = tmp & OxffOO;
tmp 1= tmpl [0] ;
o
as Mul tiplicand is 0 \n") ;
/* m7:0.0000 */
tmp = tmp2[l) « 8;
tmp = tmp & OxffOO;
tmp 1= tmp2 (0) ;
c1_hi = (ltmp & OxffffOOOO) »
cl_lo = ltmp & OxOOOOffff;
16;
ltmp = (long)fp1_hi * (long)fp2_lo;
cO_hi
(ltmp & OxffffOOOO) » 16;
cO_lo
ltmp &OxOOOOffff;
if(ltmp & OxlOOOO)
c1_hi++;
c2 10
ltmp
&
Oxffff;
ltmp = (long)fp1_10 * (long)fp2_hi;
c3_hi
(ltmp & OxffffOOOO) »
c3_10 = 1tmp & OxOOOOffff;
16;
if(ltmp & Ox10000)
cl_hi++;
c4 10
Itmp
1tmp
Itmp
ltmp
&
Oxffff;
c1_hi;
Itmp «8;
(ltmp & OxffffffOO)
! c4_10;
i f (! (c1_hi & Ox8000))
ltmp = Itmp « 1;
else
res_exp++;
if(res_exp
ovflw() ;
>
254)
/* save result in tmp2[i]
tmp2[5]
tmp2[4]
tmp2[3]
tmp2[2]
tmp2[l)
1995Jul28
array * /
res_exp;
res_sign;
(ltmp & OxOOffOOOO) »
(ltmp & OxOOOOffOO)
(ltmp & OxOOOOOOff);
449
16;
8;
//
Fl
Application note
Philips Semiconductors
SP floating pOint math with XA
AN701
printf("\n\n") ;
printf("RESULT EXPONENT: %x\n", res_exp);
printf ("RESULT MANTISSA (NORMLZD) = %lx\n", ltmp);
printf ("RESULT SIGN = %x\n", res_sign & 1);
fround() ;
1* final check of exponent *1
tmp
= tmp2 [5] ;
i f ( ! tmp)
undflw();
1* exponent underflow */
i f (tmp > 254)
ovflw() ;
fpak() ;
endprog:
printf ("Hit any key to continue .. :");
getch() ;
void fpdiv(void)
unsigned int tmp, fpl_hi, fp2_hi, fpl_lo, fp2_lo, cl_hi, c1_lo;
unsigned char i, c1_exp, cl_sign, fpl_sign, fp2_sign;
long ltmp, rem, lfpml, lfpm2, tmplng;
unsigned int ml_hi, ml_lo, m2_hi, m2_lo, m3_hi, m3_lo;
signed int fpl_exp, fp2_exp, dexp;
tmp
tmp
tmp
tmpl[3]« 8;
tmp & OxffOD;
1 = tmpl [2] ;
fpl_hi = tmp;
fp_hi = fpl_hi;
trop = fnanchk();
i f (tmp)
fnan() ;
tmp
tmp
tmp
1=
II Fl is a NaN
trop2[3]« 8;
tmp & DxffOD;
tmp2[2];
fp2_hi = tmp;
fp_hi = fp2_hi;
tmp
=
fnanchk();
if (trop)
fnan();
trop
= zchk();
II F2 is a NaN
II Check for F2
i f (tmp)
{
divbyz();
II F2 = 0
printf("\nException as a result of Division by O\n");
goto exit;
}
fp_hi = fpl_hi;
tmp = zchk();
/1 Check for Fl
i f (tmp)
0
II Result = D
{
printf("\nResult of Division of a zero Dividend is
goto exit;
}
1995Jul28
450
Application note
Philips Semiconductors
SP floating point math with XA
AN701
tmp = tmpl[l] « 8;
tmp = tmp & OxffOO;
tmp 1 = tmpl [0] ;
tmp = tmp2[1] « 8:
tmp = tmp & OxffOO;
tmp 1= tmp2[0];
lfpml
lfpml
lfpml
= fpl_hi;
= lfpml «
1= fpl_lo;
16;
lfpm2
lfpm2
lfpm2
= fp2_hi;
= lfpm2 «
1= fp2_lo;
16;
1* Exponent bits *1
fpl_exp
tmpl[5] ;
tmp2[5];
/* Sign bits
*1
fpl_sign
fp2_sign
tmpl [4];
tmp2 [4] ;
1* Ensure that fp2_hi > fpl_hi *1
lfpml » 1;
fpl_exp++;
}
1* else
good *1
(lfpml & OxffffOOOO) »
lfpml & OxOOOOffff;
dexp
(fpl_exp - fp2_exp);
16;
II difference in exponent (2's compl)
cl_exp = dexp + 127;
cl_sign = fpl_sign + fp2_sign;
(ltmp & OxffffOOOO) »
(ltmp & OxOOOOffff);
m2_hi = Itmp / (10ng)fp2_hi;
m3 10 = fpl_lo - m2_hi;
15;
II Quotient
if( m2_hi > fpl_lo)
II B = 0 i.e C = 1
fpl_hi--;
ltmp = (unsigned long)fpl_hi;
ltmp = ltmp « 16;
ltmp = ltmplm3_lo;
tmplng = Itmp;
1995Jul28
451
Philips Semiconductors
Application note
SP floating pOint math with XA
AN701
ltmp = ltmp I (unsigned long)fp2_hi;
II Quotient
c1_hi = ltmp & OxOOOOffff;
ltmp
tmplng;
ltmp = ltmp % (unsigned long)fp2_hi; II remainder
ltmp = ltmp « 16;
ltmp = ltmp & OxffffOOOO;
cl_lo = ltmp/(unsigned long)fp2_hi;
if(cl_hi & Ox8000)
cl_hi « 1;
cl_lo « 1;
c1_exp -= 1;
ltmp
ltmp
ltmp
cl_hi;
ltmp« 16;
ltmp I cl_lo;
1* save result in tmp2[i) array *1
c1_exp;
tmp2(5)
tmp2(4)
c1_sign;
tmp2(3)
(ltmp & OxffOOOOOO) »
tmp2(2)
(ltmp & OxOOffOOOO) »
tmp2[l)
(ltmp & OxOOOOffOO) »
tmp2[O)
ltmp & OxOOOOOOff;
24;
16;
8;
printf("\n\n") ;
printf ("RESULT EXPONENT : %x\n", cl_exp);
printf ("RESULT MANTISSA (NORMLZD) = %lx\n", ltmp);
printf ("RESULT SIGN = %x\n", c1_sign & 1);
fround() ;
1/ round up results in IEEE format
/* final check of exponent *1
tmp = tmp2 (5) ;
i f (! tmp)
undflw();
/* exponent underflow *1
else if (tmp > Oxfe)
ovflw;
1* exponent overflow *1
fpak();
II pack in IEEE format
exit:
printf ("Hi t any key to continue ... ");
getch() ;
void fcopy(FILE *ifp, FILE *ofp)
{
int C;
while «c=getc(ifp)) != EOF)
putc(c,ofp) ;
1995 Jul28
452
Philips Semiconductors
Application note
High level language support in XA
Author:
AN702
Santanu Roy, Philips Semiconductors, MCa Applications Group, Sunnyvale, California
-32,768 for signed and 0 to 65,536 for unsigned wordlinteger
constants, + 127 to -128 for Signed or 0 to 255 for unsigned
bytes/char.
Introduction
High Level Language (HLL) support is becoming a key feature in
modern day microcontroller architecture. The reason is highly
visible. It is easier to code a processor in a high-level platform than
in conventional assembly because it is portable, Le., it is not tied to
anyone machine. Also, the advantage of coding in a high-level
language is because it is modular and re-usable which speeds up
any code development process considerably.
For "short" qualifier, the range is +7 to -8 as used with instructions
MOVS and ADDS.
A "long" qualifier to integer is implemented by the compiler by
extending (signed/unsigned) the word to the next higher
add ress (+ 1). In addition to the above,
In recent years, C has been "the language" of choice for all
engineers. Thus almost all modern day microcontrollers are
designed with C-Ianguage support in mind. This article highlights
some of the architectural features of Philips XA microcontroller that
has been designed to support such languages specifically C.
Bit - This special data type is also supported to access the different
bit addressable space in the machine.
Note: All signed data are represented in 2's complement form in the
XA.
Supporting HLL
TYpe conversion
One of the tasks that an architect has to confront is the
determination of exactly what instructions should form the functional
instruction of a microcontroller to meet high-level language support.
An answer to this is to provide an operation code for each functional
operation in a high-level programming language. Thus operation
codes will exist for +, -, ., /. and so on. Special provision is made for
operation on arrays, and all operations that can be applied to data
types in a high-level language are directly supported in the
architecture. An instruction set ideally should contain only
instructions that are used in a HLL, and not implement any
non-functional instructions, Le., instruction that is not expressed as a
verb or operator in a high-level language. Thus "LOAD", "STORE",
and so on which are not statements made in high-level languages
are redundant and only adds to architectural overheads.
All operations are performed under natural data sizes, e.g., MULU.b
does a 8x8 unsigned multiply of 2 bytes, MULU.w does the same
but with 2 word-size operands. So when operands of different types
appear in an expression, they are converted to a common type by
the compiler, e.g., operation between a char (byte) and an integer
(word) is promoted to integer-integer, etc.
Arrays
XA supports addressing byte and word arrays in memory as
required by C or any HLL. Offset and auto-increment addressing
modes in XA allow easy access and manipulation of array elements.
Offsets are signed values of 8 or 16 bits and are used depending on
the size of the array.
An instruction word consists of a single op-code and an operand
address for each HLL variable involved in the operation. Op-codes
are symmetric in that they are applicable to any type of addressing
and any data type.
Static Variables
Static variables unlike automatic provide permanent storage in a
function. This means these variables are stored in memory rather
than being a part of run-time stack. A wide variety of memory
addressing modes are supported in the XA to provide easy access
to static variables in memory. In addition to several indirect
addressing modes (auto-increment offset) the XA supports direct
access to the first 1K of the memory space in each segment. This is
ideal for addressing static variables, and has found to generate
extremely dense code. A listing of operations to access static
variables is given below for reference:
Some general criteria for an ideal architecture could be:
1. Only one instruction should be executed for most common HLL
operators.
2. There should be only one memory reference for each referenced
operand.
3. There should be explicit addressing only for operands whose
location cannot be inferred by recent processing activity, and
address should be short.
Table 1_ Access to Static Variables
4. Instructions should be compact, and densely coded.
ADDRESSING MODES
The XA Architecture
Rd, direct
The XA is a register based machine. Hence most variables could be
stored in these fast storage registers for high code density and fast
execution. However, the beauty of the XA architecture is that, it is
optimized for internal memory as well for high throughput and code
denSity, e.g., a register-register ALU operation takes 2 bytes and 3
clocks and the same ALU operation between register-memory
(indirectly addressed) is 2 bytes and 4 clocks. So, a large set of
variables could be stored in memory with very little loss in
performance. Additionally, hooks like "burst mode", etc., are
provided to speed up external memory access as well.
direct, Rd
Rd, [Rs+]
[Rs+], Rd
Rd, [Rs+]
Rd, [Rs+Offset8/16]
[Rs+Offset8/16], Rd
direct, direct
Data Types and Sizes
[Rd], #immediate
XA directly supports the following basic data types as used in C:
direct, #immediate
character (char) - signed and unsigned bytes
integer (int) - signed and unsigned words
[Rd+], #immediate
Constants - Supported as byte/word (charlint) immediate data in the
instructions, e.g., ADD RO, #1234 etc. The range is +32,767 to
1995 Jul28
[Rd+], [Rs+]
453
Philips Semiconductors
Application note
High level language support in XA
AN702
Automatic/Dynamic Variables
The return instruction RET sets the new PC by popping the saved
PC off the stack.
Within a function, a typical compiler maintains a Frame Pointer (FP),
which is used to access function arguments and local automatic
variables. To call a function, a compiler pushes arguments onto the
stack in reverse order, (the PUSH instruction decrements the SP by
2 each time it is executed, calls the function, then increments the SP
by the number of bytes pushed. For instance, to call a function with
two one-word arguments, the XA-compiler generates code to do the
following:
PUSH arg2
PUSH arg1
CALL (subroutine)
ADDS SP,4
Because then:i are so many registers in XA (unlike 8051), any of
them could be assigned to hold the FP. Access to variables in the
stack space is easily achieved through the indirect-offset addressing
modes (signed 8 or 16) with respect to the stack pointer. In almost
all the cases the variables pushed onto the stack could be accessed
using only a signed 8-bit offset present in XA. The function
arguments and variables could be moved in and out of the stack in a
single PUSH/POP multiple instructions permitted in XA. In fact up to
8 words or 16 bytes of such information could be moved in and out
of the XA stack with one instruction, which increases code density to
a large extent during procedure calls and context switching. For
example, if register variables are in R1 ,R2,R3, and R4, a single
"PUSH R1 ,R2,R3,R4" instruction will be generated by the
XA-compiler. A corresponding function exit will have a "POP
R1.R2,R3,R4" for restoring the variables.
; (SP-=2)
; (SP-=2)
; (SP+=4)
arg2
All automatic class of variables will be allocated on run-time stack.
The XA has full complement of addreSSing modes on SP to handle
dynamic variables in the stack. Table 2 shows some of the XA
addressing modes that could be used for such access.
arg1
OO.PC23-16
PC15-O
FPoid
..
~
local #1
Table 2.
{~~
LOCAUAUTOMATIC
VARIABLES
-:::~
ANSI-C
XA
SP->Offset
R+Offset8/16
*SP
[R]
SP+
[R+]
Comments
-:::~
~
Pop
SU00596
Operators for HLL support
The CALL instruction pushes the current PC onto the stack.
Because all stack pushes are 16-bits in XA, any 8-bit function
argument is automatically promoted to word.
The structure for op-codes of an ideal architecture should be stated
in terms of number of operands required and the relationship
between the operands. The structure should be oriented toward
efficient coding of an instruction that will support programs written in
a HLL with minimum compilation. The XA instruction set is designed
to handle such efficiency as reflected in Table 3. The set of
instructions that supports the generallbasic addressing modes are
used to describe HLL support in this table.
Upon function entry, the compiler creates new stack and frame
pointers by computing:
PUSH FP (old)
FP (new) = SP
SP = SP - Framesize;
where uFramesize" is the space required for all local automatic
variables. If the frame size is odd, the compiler always rounds it up
to the next even number. If there are 2 arguments and 2 local
variables, then the frame size is 4 and the stack looks like this:
Table 3. Mapping of XA ALU Operations
to C Operators
FP+8 second argument
FP+6 first argument
FP+4 return address
FP+2 old FP
FP-O first local variables
FP-2 second local variable
FP-4 next free stack location (same as SP)
If a function argument is defined to be an 8-bit type, then only the
lower 8-bits of the value pushed by the caller are to inside the called
function.
XAOp-codes
+=, += + CO
ADD,ADDC
-=, -=-CO
SUB, SUBB
< , <= , == , >= , > , 1= (s/u)
CMP
&=,1=, II:
AND,OR,XOR
Data movement in C is given by U=" which is the "MOV" instruction in
XA. The MOV instruction not only has the generallbasic addressing
modes, it also has some additional addressing modes for C-code
optimization for memory transfer operations like direct-direct,
direct-indirect. indirect-autoincrement - indirect-autoincrement.
Upon function exit, the compiler restores the SP and FP to their
original value by executing the following:
SP= FP
POPFP
RET
1995Jul28
ANSI C Operator (op)
454
Application note
Philips Semiconductors
High level language support in XA
Table 4 of two operand case A
below.
AN702
=A op B or B =A op B is shown
Case 2:
IfA= Memory
where Memory = [R], direct, [R+], [R+Offset]
Table 4.
ANSIC
XA
C-operations
Equivalent XA-operations
Rop=R
R,R
R op= *R
R,[R]
R op= *R++
R.[R+]
R op= direct
R, direct
R op= R->offset
R, [R+ottset]
then Band C in A = B and A op= C could have the following
choices:
(i) Register i.e., Memory = Register and Memory op= Register
(ii) Immediate i.e., Memory = Immediate and Memoryop=
Immediate.
(iii) Memory i.e., Memory = Memory ([R+], and direct modes only)
forB
The above indicates that virtually all C operations involving two and
three operands could be very efficiently translated in XA assembly
code (in two operand cases, it is one-to-one) using a cross-compiler.
*R op= R
[R],R
*R++ op= R
[R++],R
NULL DETECT/STRING TERMINATOR
direct op= R
direct, R
R->offset op= R
[R+offset], R
Checking for "0" at the end of a string is natural in XA with the MOV
instruction. The Z flag is set whenever such a condition occurs. This
is especialfy important in string copy operations where the loop ends
whenever a end of string or '\0' occurs which is reflected in the
status flag "Z' in XA. The following lists such C-code and equivalent
XA instructions.
while ((c=getch()) != '\0')
Label:
MOV [R+], memory
buffer[i++J = c;
BNE
Label
R op= constant
R, #constant
*R op= constant
[R], #constant
*R++ op= constant
[R++]. #constant
direct op= constant
direct, #constant
R->offset op= constant
[R+offset], #constant
Coding Relational Operations
Performing relational evaluation between two operands A and B in
C-Ianguage involves fetching operands (a) in memory (b) in register
or (c) an immediate value, evaluating the condition and then taking
appropriate actions which typically involves a branch-if-true or
branch-if-false operations
The three operand cases A = B op C may regularly be translated as:
A=B;
Aop= C;
The operand(s) in memory again could be addressed as direct,
indirect, indirect-autoincrement, indirect-offset. etc. The XA provides
.
,
one-to-one translations of such operations.
exception to above is
*R++ = B op C is equivalent to
*R= B:
*R++ op = C;
Typically such C-statements are as follows:
=
Typical/Frequently used C-code A B op C involves operations that
will fetch operands from memory, register, and as immediate data
which is embedded in the instruction. The XA has the following
choices for operand placements for such three operand operations.
Case 1:
If A = register.
then Band C in A = B and A op= C could have the following choices
if (A cmp_op B)
{ body} 1* true */
CMP A, B
Bxx LABEL; branch if false
body
LABEL:
if (A cmp_op B)
{body1}
else
{body2}
CMPA, B
Bxx L 1 ; branch if false
body 1
JMPL2
L1:body2
L2:
while (A cmp_op B)
{ body}
L1: CMP A, B
Bxx L2 ; branch if false
body
JMPL1
L2:
(i) Register i.e .• R = Rand R op= R
(ii) Memory i.e., R = Memory and R op= Memory
where Memory = [R]. direct. [R+], [R+Offset]
(iii) Immediate i.e., R = Immediate and R op= Immediate
1995Jul28
455
Application note
Philips Semiconductors
AN702
.High level language support in XA
Coding Bitwise Operations
The subroutine code accesses variables using [R+offset] addressing
mode. The register is referred to as a Static Base Register or Frame
Pointer.
C provides 6 operators for bit manipulation. These are & (Logical
AND), I (Logical OR), " (Logical-XOR), « (Logical Shift-Left),
» (Logical Shift-right), and - (one's complement). There is
one-to-one equivalence in XA for such operation class:
(a)&-AND,
(b) I-OR, "-XOR,
(c) «-ASL,
(d) » - LSA, and
(e) - - CPL.
Since the application stack is separate from the interrupt stack,
there's no problem with interrupting the dynamic
allocation/de-allocation and application stack pOinter adjustments.
Floating Point Support
Although the XA does not have a floating point unit, it has special
instructions to provide an extensive support for floating point
operations. Instructions like NORM (normalize), SEXT (sign extend),
ASL, ASA (Arithmetic shifts) and status flag like "N" (sign), all aid in
floating point support. Floating point library routines implementing
(IEEE or ANSI) floating point provided with compilers could
extensively use such instructions for increased code density and
throughput in XA.
Compiler Optimization
Some special cases of Multiply and Divide where the multiplier and
divisor could be assumed to a power of 2, following translation could
be expected from the compiler during optimization which speeds up
code execution and make code denser.
Language extensions to XA could be written as the pre-processor
macros of the XA C-compiler as shown in Table 5.
Dynamic Code LinklRelocability
Table 5.
The XA allows for dynamic code linking through extensive use of
FCALL (Far Call 24-bit addressing). This makes code developed for
XA highly portable/relocatable in memory.
C-code
XA code
R *= R
R«= R
R *= Constant
R «= Constant
R/= R
R»=R
R 1= Constant
R »= Constant
Simple relocatable code however could use CALL rel16 and CALL
[R] addressing modes which is limited to 64K address.
System Interface
When used for RTOS, system mode with its protected features
could be extensively used for system management
routines/operating System service e.g., printf etc and application
task switching. This could be easily done in XA through a TRAP #
instruction set up by the compiler requesting system service by the
application task. In the event of task switching, a system service call
sets up the environment for the new task via the resource access
privileges of the task, application stack etc.
ROLC(R,A) - for rotate left through carry, ROL (R,R) and
ROL (R, constant) - for rotate lefts, etc. Same holds for ADDC and
SUBBalso.
Reentrancy
In a multi-tasking or nested interrupt environment, some system or
library subroutines may be activated dynamically. These subroutines
require duplication of the variable area of the subroutine per each
active copy, utilizing essentially dynamic memory allocation.
Author's Acknowledgement
The author recognizes the following Philips Semiconductor XA team
members for their review and inputs on this article:
Ata Khan, Ori Mizrahi-Shalom, and Frank Lee
The allocation of the dynamic area is done by a system service call.
The dynamic area is allocated either out of the reserved system
memory, when large memory exists in the system, or on the stack,
when memory is very limited. In the latter case, the stack pOinter is
adjusted, to reflect the extra bytes reserved. It will be readjusted just
prior to returning from the subroutine.
1995 Jul28
References:
XA User Guide - Philips Semiconductors
456
Application note
Philips Semiconductors
XA benchmark versus the architectures
68000, 80C196, and 80C51
Author:
AN703
Santanu Roy
BENCHMARK RESULTS AND CONCLUSIONS
BACKGROUND
A computer benchmark is a "program" that is used to determine
relative computer core performance by evaluating benchmark
execution time by that core. In the brainstorm on microcontrollers for
automotive applications, an assembler functional benchmark for
engine management, which is a typical example of embedded
high-end microcontrol, was created. This report gives worked out
routines of the functions if they were implemented in assembler
language of the compared controllers: Motorola 68000, Intel
80C196, Philips 80C552 and Philips XA. The total execution times of
a program "engine cycle" (engine stroke) are calculated and the
required program code is estimated for each controller.
Relative performance on a line
The table below presents the most important result of the assembler
benchmark evaluation. It pictures the relative performance of the
compared core instruction set on a scale where XA=1.0. Also
appended Is the performance charts-execution and code density of
all the processors.
Total exec.times/core(lJ.s) for all routines (with ·occurrences)
5,942
1,560
1089.24 402.6
PERFORMANCE
RATIO
Evaluation of performance in a High Level Language (HLL) like C
would be preferable, but it is difficult to realize as "the best"
compilers for all cores involved then should be used.
This document is generated based on the report number DPE88187.
It outlines code density and execution times of the XA, based on
most recent information. The execution times are given in terms of
both clock cycles and time units. Although XA can run at speed of
30 MHz @ 5.0 Volts, for sake of fairness, all cores are evaluated for
running at 16.00 MHz. This is reasonable for comparing the cores at
the same level of technology.
8051
68000
80C196
XA
8051
1.0
3.81
5.45
14.7
68000
0.34
1.0
1.43
3.85
80C196
0.18
0.7
1.0
2.7
XA
0.068
0.26
0.37
1.0
A separate section is included in this benchmark for "Bit
manipulation" function benchmark results only. This (bit-test) routine
is a stand alone one and should not be considered as a part of
engine management routine.
Table 1. XA instruction set execution times and byteslfunction
XA
FUNCTION
BYTES/FUNCTION
OC*
EXEC. TIME
/FUNCT.(lJ.s)
MPY
12
0.75
9
2
FDIV
4
3.94
15.8
18
ADD/SUB
50
0.38
19
4
CMP 24b
13
1.06
13.78
9
CAN 16b
40
0.563
22.52
5
INTPLIN
20
1.98
41.3
14
INTERR
10
6.1
61
41
BRANCH
10
XAtotals
including 20% statistics
1996 Mar01
OCCURRENCE
*TIMEIFUNCT.
153.1
335.51J.s
402.61J.s
457
Application note
Philips Semiconductors
XA benchmark versus the architectures
68000, 80C196, and 80C51
AN703
Table 2. 68000 instruction set execution times and bytes/function
68000
OC*
FUNCTION
EXEC. TIME
IFUNCT·(I1S )
OCCURRENCE
*TIMEIFUNCT.
BYTESIFUNCTION
MPY
12
4.4
52.S
2
FDIV
4
13.4
53.6
16
ADD/SUB
50
2.75
137.5
12
CMP24b
13
3.2
41.6
14
CAN 16b
40
2.7
108
14
INTPLIN
20
7.5
150
14
INTERR
10
21.9
219
92
BRANCH
10
68000 totals
including 20% statistics
537.5
: 1,300 I1s
: 1,560 I1s
Table 3. 80C196 instruction set execution times and bytes/function
80C196
FUNCTION
OC*
EXEC. TIME
IFUNCT·(I1S)
OCCURRENCE
*TIMEIFUNCT.
BYTES/FUNCTION
MPY
12
1.75
21
3
FDIV
4
9.5
38
19
ADD/SUB
50
1.25
62.5
7
CMP24b
13
4.25
55.2
14
CAN 16b
40
2.5
100
6
INTPLIN
20
6.4
128
18
INTERR
10
12.8
128
58
BRANCH
10
80C196 totals
including 20% statistics
375
: 907.7115
: 1,089.24115
Table 4. 8051 instruction set execution times and byteslfunction
8051
FUNCTION
OC*
EXEC. TIME
IFUNCT·(I1S)
OCCURRENCE
*TIMEIFUNCT.
BYTESIFUNCTION
MPY
12
37.5
450
58
FDIV
4
451.5
1806
96
ADD/SUB
50
7.5
375
19
CMP24b
13
9.98
129.74
22
CAN 16b
40
9
360
14
INTPLIN
20
25.8
516
20
INTERR
10
31.5
315
70
BRANCH
10
8051 totals
including 20% statistics
1996 Mar 01
1000
4,951.74 I1S
5,942J.lS
458
Application note
Philips Semiconductors
XA benchmark versus the architectures
68000, 80C196, and 80C51
Occurrences of overheads are based on
estimations
Table 5. Total benchmark execution time results
MICROCONTROLLER
CORE
XA
EXECUTION TIME
The assembler functional benchmark is not a full implementation of
a program. Arbitrary choosing location for storage of parameters in
register file or (external) memory, for instance, has for some
instruction set a considerable effect on the total execution time.
(~8)
402.6
68000
1560
80C196
1089.24
8051
5942
AN703
For the different core parameter storage is chosen where possible
using the core facilities to have minimum access overhead.
Occurrences of functions based on estimations
Occurrences is estimated on basis of experience of the automotive
group. In a real implementation of an engine controller accents may
shift. As most functions already include some "instruction mix", the
effect of changes In occurrences Is limited.
As the total activity has to be completed in one machine stroke of 2
ms, the XA, and the 80C196 will be able to meet the application
requirements. The 80C552 originally was assumed to complete the
functions over more than one stroke.
Functions are implemented in assembler, not in a
Best efficiency is of the XA and the 80C196. The 80C196 includes
3-parameter instructions that reduce the instruction count per
function and it has JB/JBN instructions. It also uses half-word
(1-byte) codes for frequently used instructions.
HLL like C
Control programs for embedded systems get larger, have to provide
more facilities and have to be realized in shorter development times.
The only way to do this is to program in a HLL like C. Efficient
C-Ianguage program implementation requires different features from
microcontrollers than assembly programs. Results of this assembler
benchmark evaluation therefore have a restricted value for ranking
microcontroller performances for future HLL applications.
The lower code efficiency of the 8051 instruction set can mainly be
explained by the "accumulator bottleneck" which is not present in
XA: most data has to be transported to and from the accumulator
be fore add/sub/cmp can be done, operations on words require 4
"MOV" instructions and 2 data execution instructions. The efficient
JB and JBN instructions compensate this for a great part.
Benchmark ranking on basis of HLL like C requires good
C-compilers of all the devices involved are needed. The quality of
the C-compilers really has to be the best there is: HLL
benchmarking measures not only the micro characteristics, but even
more the compiler ability to use these qualities. As these are not
available for all the micros evaluated, all routines are worked out
only in assembly.
BENCHMARK LIMITATIONS
Like all benchmarks, the automotive engine management assembler
functional benchmark has some weakness that limit validity of its
results.
1. Control in a special (automotive, engine) environment is
evaluated.
Routines may contain assembler implementation
errors
2. Occurrences of operation overheadS are based on estimations.
Assembler routine implementations are made after a short study of
the micro specifications and are not checked by assembling or
debugging in real hardware environment.
3. Occurrences of functions are based on estimations.
4. Functions are implemented in assembler, not in a HLL like C.
It can be rather safely said that a complete system setup and
program debug to correct errors would not lead to considerable
differences in performance results. Deviations in function
occurrences and overheads may have a more significant effect on
performance ratios.
5. Routines may contain assembler implementation errors.
6. All cores are evaluated at 16.0 MHz
Control in a special environment is evaluated
(automotive, engine)
All cores are evaluated at 16.0 MHz
The core performance evaluation is based on a single specialized
case. All benchmark implementations are fractions of the automotive
engine management PCB83C552 demonstration program.
A 16.0 MHz internal clock frequency seems a reasonable choice for
comparing the cores at the same level of technology.
It can be advocated that the automotive engine control task gives a
good example of a typical high demanding control environment,
where many >= 16 bit calculations have to be done.
1996 Mar01
459
Application note
Philips Semiconductors
XA benchmark versus the architectures
68000, 80C196, and 80C51
ASSEMBLER FUNCTIONAL BENCHMARK FOR
AUTOMOTIVE ENGINE MANAGEMENT
AN703
FUNCTION PARAMETER ALLOCATION
Most functions are very short in exec. time, so that the function
parameter data access method has great effect on the total time.
Thus it is to be considered carefully.
This benchmark is a functional benchmark: it is a collection of
functions to be executed in an automotive engine management
program. It would be preferable to implement the complete control '
program in assembler and evaluate it in a real hardware
environment, but this is not practical as every implementation
requires many man-months to realize.
Some core features a large register files (XA, 80C196) in which
variables can be stored, others with few registers (68000) have to
store all data in memory.
To implement the assembly functional benchmark for automotive
engine management correctly the "rules and details" described in
this section have to be followed carefully.
For the XAl80C196 processor, data stored in the lower part of
register file, or in SFRs for 110. can be accessed using "direcf'
addressing, but table data, used, e.g., for 3 bye compare, is stored
in "extemal memory".
The assembler functional benchmark embraces all activity to be
completed in 1 program cycle that corresponds with 1 engine stroke
of 2 ms. The benchmark execution time will be calculated as the
sum of the products of functions and their occurrence rates in 1
calculation cycle.
The 68000 assume data in memory (or memory mapped 110) as not
enough data registers are available. All 68000 memory data has to
be accessed using long-absolute addressing: 68000 short
addresses are relative to memory address 0000 and are therefore
not useful.
Branches are evaluated separately as "branch penalties" have
considerable effect of program execution efficiency. Estimated
(branch count)*(average branch time) is added to the function
execution times.
For more complex functions 16*16 multiply, Floating point division
and interpolation, data is assumed to be already in registers.
The relative estimated overhead for statistics does not contribute to
the evaluation of speed. performance ratios, but they have to be
considered when looking at the total execution time required /
engine stroke cycle. therefore the real total execution time is
multiplied with the statistics overhead factor (1.2*).
Parameters are assumed to be in registers, and the 32-bit result
written into a register pair.
NO.
FUNCTION DESCRIPTION
16x16 Signed Multiply
Divide (16:16) ''floating point"
The floating point division is entered with parameters in registers:
a divisor. a dividend and an "exponenr that determines the position
of the fraction point in the result.
OCCURRENCES
4
Compare (24)
13
Floating point binary 16/16 division is a function that is normally not
included in HLL compilers as it requires separate algorithms for
exponent control and accuracy is limited. For assembler control
algorithms, floating point division can be quite efficient as it is much
faster than normal "real" number calculations (where no "floating
point accelerator" hardware is available).
6
CANcmp/mov 10*8
80
Compare 24-bit variables
6
Linear Interpolation (8*8)
20
Note that 24-bit compare is very efficient for "real" 16-bit and 8-bit)
controllers, but for automotive engine timers, 24-bit seems a good
solution.
1
16x16 Multiply
2
Floating Point divide (16: 16)
4
3
Add/Subtract (24)
60
12
7
Interrupts
10
8
Program control branches
600
9
Statistics (20%)
1.2 *
Compare must give possibility to decide >, < or =. For 68000, and
80C196 instruction set LT, EQ and GT are included in the cc after
CMP.
CAN move and compares
For service of the CAN serial interface, it is esti~ted .that 40*
(2 byte compares + branch) have to be done. Devices with 16-bit
bus assumes word access. An average branch is included in the
CAN compare function.
1996 Mar 01
460
Application note
Philips Semiconductors
XA benchmark versus the architectures
68000, 80C196, and 80C51
AN703
important exception cases, MPY words and Floating Point Division
are handled in this benchmark separately.
Linear Interpolation (8*8)
The interpolation routine is entered with 3 register parameters:
1. Table position address
Most 16-bit cores use more pipeline stages so that taken branches
add branch time penalty for these CPU's due to pipeline flush. This
effect can be found in the branch execution time tables.
2. X fraction
3. Y fraction
More efficient data operations and pipeline penalty of the more
complex instruction set of 16-bit cores lead to considerable higher
relative time used for branch Instructions.
The routine first Interpolates using the X fraction the values of
F(x.x, y} between F(x,Y} .... V(x+1, y} and of F(x.x, y+1} between
F(x, y+ 1) .... F(x+ 1, y+ 1}. From F(x.x, y} and F(x.x, y+ 1} the value of
F(x.x, y.y} is interpolated using the fraction of y.
To Incorporate the influence of branches in the benchmark the
number of branches to be included must be estimated. For byte and
bit routines, branches occur more frequent. Average branch time of
25% may be a good guess. For the automotive engine management
benchmark that executes in approx. 5000/l1S (on 8051) results in
+/- 1250 /I1S or 625 branches. As a part of the branches already
taken account for in the compare functions the number of additional
program control branches is estimated 500 branches.
The table is organized as 16 linear arrays of 16 x-values, so that an
V(x,y) can be accessed with table origin address +x+16*y "Table
Position Address". In x-direction the interpolation can be done
between the "Table Position" value and next position (+1 ).
Interpolation in v-direction is done by looking at
"Table Position" + 16.
=
To estimate the average branch execution time, an estimated
relative occurrence of the branch types has to be made.
For linear interpolation time the 2-dimensional interpolation time and
byte count are divided by 3 to include some "overhead" into linear
interpolation.
Table 6. Estimated relative occurrence of the
branch types
Interrupts
The average interrupt routine overhead includes the following
stages:
a. Interrupt recognition and return
TYPE
ABSOLUTE
RELATIVE OCCURRENCE
b. 1 * (long) branch
Absolute Jumps
AJMP/JMP
20%
100
c. 2 * Jump (short) on bit
Subroutine calls
ACALUJSR
20%
100
d. 1 * call (long) and subroutine return
Jump on
condition (rei)
Bcc/Jcc
40%
200
Jump on bit (rei)
JB/JBN
20%
100
e. 2* set bit and 2 * clear bit
f. 5 * POP and 5 * PUSH (or move multiple)
[free 5 registers for local use]
g. 1 * mov #xxx, PST
Statistic Routine Overheads
Statistic routines are estimated as relative program overheads, only
to get an indication of the required total processing time in a real
engine management application. "Statistics" are mainly arithmetic
routines to determine table corrections. They use about 20% of the
total time.
Program Control Overheads
For a given algorithm, the Program Control Overheads consisting of
a number of decisions (branches) and subroutine calls is
independent of the instruction set used, except for cases where
functions can be replaced by complex instructions. The most
1996 Mar 01
461
Application note
Philips Semiconductors
XA benchmark versus the architectures
68000, 80C196, and 80C51
AN703
XA BENCHMARK RESULTS
The following analysis assumes worst case operation; At any point In time, only 2 bytes are available in the instruction Queue. An Instruction
longer than 2 bytes requires additional code read cycle.
APPENDIX 1
XA Function Implementations
XA reference: XA User's Manual 1994
16x16 Signed Multiply
Parameters are assumed to be in registers, and the 32-bit result written into a register pair. The MUL.w R,R is encoded in the XA instruction set
as a 2 byte instruction. The exact optimization for this instruction (such as skip over 1's and O's) has not been concluded at this point, and the
execution time may be data dependent and shorter than one outlined here.
The basic algorithm utilizes 2-blt Booth recoding. Instruction fetch and Decode time overlaps the execution of the preceding instruction (except
when following a taken branch), so it is ignored. The total execution time is either 11 or 12 clocks, including operand fetch and write back
(1 clock is dependent on critical path analysis).
A1.1:
16x16 Multiply
MUL.w
A1.2:
Byte.
2
RO, R1
Clock.
12 (0.75
IJS)
Floating Point 16x16 Divide:
The algorithm here follows the one outlined for the 80C196.
Arguments:
R4
R6
RO
Dividend GT or LT or EQ
9
A1.5:
17 (1.06 1lS)
CAN Move and Compare
Application:
For service of CAN (Controller Area Network) seriallntertace it is estimated that 40' (2 byte compares + branch) have to be done.
One parameter is in register, the other in internal memory. Again, minimum execution times are considered.
RO, memO
LABEL
CMP
Bxx
Bytes
3
average
5
A1.6:
Clocks
4
4.S
9 (0.563
~S)
Linear Interpolation
Arguments:
RO
R2
R4
R6
Table Base (assumed < 400 Hex)
Fraction 1
Fraction 2
Result
Bytes
Clocks
LIN_INT:
MOV
MOV
SUB
MULU.w
MOV.b
MOVS.b
ADD
ADD
MOV
MOV
SUB
MULU.w
MOV.b
MOVS.b
ADD
SUB
MULU.w
MOV.b
MOVS.b
ADD
R6, [RO+J
R1, [ROJ
R1, R6
R6, R2
R1H, R1L
R1L,#0
R6, R1
RO, #1S
R1, [RO+J
RS, [ROJ
RS, R1
RS, R2
R1H, R1L
R1L,#0
R1, RS
R1, R6
R1, R4
R1H,. R1L
R1L,#0
R6, R1
4
2
2
12
3
2
2
4
2
2
2
2
12
3
3
2
12
'2
95 (5.9'
RET
Linear Interpolation (2 dim. time I 3) • l' bytes, 1.98
1996 Mar 01
463
~S
~S)
Application note
Philips Semiconductors
XA benchmark versus the architectures
68000, 80C196, and 80C51
A1.7:
AN703
Interrupt Overhead
Note: Interrupt overhead, as defined in the benchmark, applies to performance calculations. It does not consider the interrupt latency
associated with completing the current instruction.
All transfers are to / from internal memory, all addresses are 16-bit long.
{
Saves 2 words on stack = 4 clks
Prefetching ISR = 3 clks
Overhead through Interrupt Controller = 3 clks (allow synch + avoid metastability)
Le., total 10 clks
}
=
Interrupt Accept/Return
rel16
JMP
bit, re18
Bxx
CALL
rel16
RET
SETB
bit
CLR
bit
PUSH
Rlist (5)
POP
Rlist (5)
MOV
PSWL, #dataB
PSWH, #data8
MOV
0/2
3x2
2x2
3
2
3x2
3x2
2
uncond. x
Branch on bit test x 2
Long Call (PZ assumed)
Subroutine return
Set bit x 2
Clear bit x 2
5 PUSH Multiple
5 POP Multiple
imm. byte to PSWL
needs 2 for 8-bit sfr
bus
4
4
41
A 1.8:
10+B
6x2
4.5x2
4
6
4x2
4x2
15
12
3
98 (6.1 I1S)
Program Overhead
Branches are assumed taken 70% of the time, all addresses are external. Code is assumed a run-time trace, code size cannot be calculated;
based on the same approach taken for 80C196, code size is 1400 bytes.
Long branch x 100
Call x 100 (Page 0)
Subroutine return x 100
Condl. short branch x 100
Bit test & branch x 100
JMP
re116
CALL
rel16
RET
Bxx
rel8
JB/JNBbit, re18
A1.9:
3xlOO
3x50
2xlOO
2x200
2xlOO
6 x
4 x
6 x
4.5
4.5
100
50
50
x 200
x 100
1400
2,450
(153.1 I1S)
XA TOTALS
XA
FUNCTION
OC·
EXEC. TIME
IFUNCT·(I1S )
OCCURRENCE
*TIMEIFUNCT.
BYTES/FUNCTION
MPY
12
0.75
9
2
FDIV
4
3.94
15.8
18
ADD/SUB
50
0.38
19
4
CMP24b
13
1.06
13.78
9
CAN 16b
40
0.563
22.52
5
INTPLIN
20
5.94
118.8
42
INTERR
10
6.1
61
41
BRANCH
10
153.1
Conclusion:
An assumption is made that XA code is in first 64K (PZ) as the 80196 has a 64K address space only.
1996 Mar 01
464
Philips Semiconductors
Application note
XA benchmark versus the architectures
68000, 80C196, and 80C51
AN703
APPENDIX 2
8051 Function Implementations
8051 reference: Single chip 8-bit microcontrollers PCB83C552
Users manual 1988
A2.1:
80C51 Multiply 16x16
The 80C51 core performs 8-bit multiply only. A 16x16 multiply has to be done by splitting X and Y into XH. XL and YH. YL so that:
P3 .. PO = (XH*256+XL)*(YH*256+YL) =
XH*YH*65536+(XH*YL+XL *YH)*256+XL *YL
Clocks
Bytes
MPY:
MOV
MOV
MOV
MOV
MOV
MOV
MUL
MOV
MOV
MOV
MOV
MUL
ADD
MOV
MOV
ADDC
XCH
MOV
MUL
ADD
MOV
MOV
ADDC
MOV
MOV
MOV
MUL
ADD
MOV
MOV
ADDC
MOV
Total
Rl,XH
R2,XL
R3,YH
R3,YL
A,R2
B,R4
AB
PO,A
A,R4
R4,B
B,Rl
A,B
A,R4
R4,A
A,B
A,#O
A,R2
B,R3
A,B
A,R4
Pl,A
A,B
A,R2
R2,A
A,R3
B,Rl
AB
A,R2
p2,A
A,B
A, #0
P3,A
2
1
1
3
;XL
,YL
4
, Lowest multiply result byte
;YL
; XL*YL upper byte (*256)
1
,XH
;XL*YL
4
1
;upper (Xl*YL) +lower (XH*YL) in R2
;XL upper (XH*YL) in R2
,YH
;XL*YH
4
1
1
1
1
1
2
1
1
4
1
1
1
50
58
= 50*12 = 600 clocks (37.5I1S @ 16.0 Mhz)
MPY 16x16 (MPY Bytes) 50 clocks = 37.511S / 58 bytes
50 clocks
8051
1996 Mar 01
465
Philips Semiconductors
Application note
XA benchmark versus the architectures
68000, 80C196, and 80C51
A2.2:
8051 Divide (16/16) "floating point"
Divide (R6. R7) (dividend) by (R4.R5) (divisor) with (RO) bits after the fraction point.
Alignment of MSBits of operand in R6.7 and R4.7 using RO as bit counter.
Clocks
Bytes
FDV:
INC
INC
MOV
MOV
CLR
CLR
MOV
JB
JNZ
MOV
JZ
RO
RO
R3,#0
R2,#0
C
FO
A,R4
ACC.7, L2
Ll
A,R5
LX
1
1
MOV
RCL
MOV
MOV
RCL
MOV
INC
JNB
A,R5
A
R5,A
A,R4
A
R4,A
RO
ACC.7, Ll
1
1
1
1
MOV
JB
A,R6
ACC.7, L6
MOV
RLC
MOV
MOV
RLC
MOV
DJNZ
AJMP
JNB
AJMP
A,R7
A
R7,A
A,R6
A
R6,A
RO, $+4
LX
ACC.7,L3
L6
MOV
RLC
MOV
MOV
RLC
MOV
JNC
MOV
MOV
SJMP
A,R3
A
R3,A
A,R2
A
R2,A
L5
R2,#OFFH
R3,#OFFH
LX
CLR
MOV
C
A, R7
RLC
MOV
MOV
RLC
MOV
JNC
MOV
A
R7,A
A,R6
A
R6,A
L5
FO,C
1
1
2
Ll:
1
1
L2:
1
3
L3:
1
1
1
1
2=0
2
2
3
L4:
1
1
2
1
1
1
1
1
2
1
1
1
L5:
1996 MarOi
1
1
1
1
1
1
466
AN703
Philips Semiconductors
Application note
XA benchmark versus the architectures
68000, 80C196, and 80C51
AN703
L6 :
CLR
MOV
SUBB
JNC
JNB
CPL
C
A,R7
A,R4
L7
FO,L8
C
1
1
1
2
2
MOV
MOV
MOV
R6,A
A, Rl
R7,A
1
1
CPL
DJNZ
MOV
ADD
MOV
MOV
ADD
MOV
C
RO,L4
A,R3
A,#O
R3,A
A,R2
A,#O
R2,A
1
2
3
L7:
L8:
1
1
1
1
1
1
LX:
RET
Total
96 bytes
13 branch instructions (=35 bytes== 36%)
Timing : 3 divide cases
subtracts
1. RO=OE, 8-bit/14 bit
-->
15-8+2=9
2. RO=08, 12-bit/14 bit
8-4+4=8
3. RO=10, 11-bit/12 bit
16-5+4=15
17+4*9+6*10+(15.5+10*31.5)+8=451.5 clocks = 338.6
shifts
8+2=9
4+4=8
5+5
~S
8051 UFDIV 16/16 (sub/sft) : 338.6 clocks = 451.5 ~s, 96 bytes.
A2.3:
8051 Add/Sub
Bytes
Clocks
ADS:
CLR
MOV
SUBB
MOV
MOV
SUBB
MOV
MOV
SUBB
MOV
C
A,XO
A,YO
ZO,A
A,X1
A,Y1
ZO,A
A,X2
A,#O
Z2,A
1
1
1
1
10
8051 ADD/SUB
19
in reg file 10 clocks = 7.5 ~s, 19 bytes
8051 CMP enabling JZ JNZ JC JNC
The 8051 decisions made with branches are one of these three:
JC
It
2
2
JC
2
JZ
eq
2
2
JC
2
JNZ
gt
2
2
8051 compare decision branches take average: 10/3 clocks => 2.5 ~s
1996 Mar 01
467
total
32 subtracts
17+11 shifts
average
11
6+4
Application note
Philips Semiconductors
XA benchmark versus the architectures
68000, 80C196, and 80C51
A2.4:
AN703
8051 CMP 3 byte compare
Bytes
Clocks
CM3:
CLR
MOV
SUBB
MOV
MOV
SUBB
ORL
MOV
SUBB
Orl
C
A,X2
A,Y2
RO,A
A,Xl
A,Yl
RO,A
A,X2
AY2
A,RO
Jcc
xxxx
8051 CMP
A2.5:
1
2
1
1
2
2
3.33
3.33
10
19
3 byte data in reg file 13.3 clocks
=9.975 its, 22.3 bytes
8051 2-byte CAN compares
Bytes
Clocks
CAN:
MOV
MOVX
CJNE
MOV
MOVX
CJNE
one compare src in X-RAM
DPTR,aXl
A, @DPTR
A,Yl
DPTR,aX2
A,@DPTR
A,Y2
one compare src in X-RAM
12
8051 CAN CMP XRAM/Direct
1996 Mar01
14
9 its, 14 bytes
468
Philips Semiconductors
Application note
XA benchmark versus the architectures
68000, 80C196, and 80C51
A2.6:
8051 2-dimensional interpolation
At the start registers are prepared
A
position in table (x+16*y)
DPTR
Start address of table (aligned at 256 byte 'boundary)
RO
Rl
x-fraction
: y-fraction
Result
ACC registers used : ACC,RO,Rl,R2,R4,R5,R6
Clock.
Byte.
INT:
DPL,A
MOV
ACALL GVAL
MOV
R4,A
MOV
A,DPL
A,#15
ADD
DPL,A
MOV
ACALL GVAL
MOV
REG6,R4
B,Rl
MOV
ACALL INTP
RET
;POS X,Y
GVAL:
MOVX A,@DPTR
MOV
R6,A
INC
DPL
MOVX A,@DPTR
B,RO
MOV
2
1
2
1
1
1
2
INTP:
CLR
CLR
SUBB
JNC
CPL
INC
SETB
SF
C
A,R6
INTi
A
A
SF
MUL
XCH
CLR
RRC
XCH
XCH
CLR
RRC
XCH
JB
ADDC
RET
A,B
A,B
1
2
1
2
1
INTi:
4
1
1
2
C
A
A,B
A,B
C
A
A,B
SF,INT2
A,R6
2
3
1
INT2:
XCH
SUBB
RET
A,R6
A,R6
2
2
1
TotaI2·dim. interpolation: 15+2*(8+24)+24=103 clocks = 77.25 f.1s, 59 bytes
8051 Linear interpolation: (2-dim. intp time 13) = 10313 =25.75 f.1s, 20 bytes
1996 Mar 01
469
AN703
Application note
Philips Semiconductors
XA benchmark versus the architectures
68000, 80C196, and 80C51
A2.7:
8051 Interrupt Overhead
a.
interrupt
RETI
AJMP 2*
2*
JB
ACALL
RET
SETB 2*
CLRB 2*
POP 5*
PUSH 5*
MOV 1*
b.
c.
d.
e.
f.
g.
Bytes
2
8051 Interrupt Overhead 42 clocks
A2.8:
Clocks
2 (vector)
1
4
2
2
2
2
10
10
1
4
4
10
10
42
46
=31.5 ~s
8051 Program Overhead
TYPE
OCCURRENCE
8051
LJMP/JMP
100
2
200
3
300
LCALUJSR
100
2
200
3
300
Jcc/Bcc
200
2
400
3
600
JB/JBN
100
2
200
3
300
total cylces
1000
750
~sec
A2.9:
BYTES
1500
8051 Totals
FUNCTION
OC*
8051
EXEC
*OC
1.MPY
12
37.5
450
2. FDIV
4
338.6
1354.4
3. ADD/SUB
50
7.5
375
4. CMP 24b
13
9.98
129.74
360
5. CAN 16b
40
9
6.INTPLIN
20
25.8
516
7.INTERR
10
31.5
315
8. BRANCH
10
8051 totals
including 20% statistics
1996 Mar 01
750
4250.14~
5,100.2~s
470
AN703
Philips Semiconductors
Application note
XA benchmark versus the architectures
68000, 80C196, and 80C51
APPENDIX 3
68000 implementations
68000 reference:
SC68000 microprocessor users manual
(Motorola copyright; Philips edition 12NC: 4822 873 30116)
A3.1:
68000 16x16 Multiply
The 68000 can use 1 with MUL and move a long word result.
MUL
total:
A3.2:
70
RO,R1
4.375 I.1S, 2bytes
Floating point division
(RO) Accuracy,
16:16
(R1)/(R2)
Byte.
R1 result
Clock.
FDV:
EXT.l
TST
BEQ
ASL
DlVU
BVC
R1
R2
L1
RO,R1
R2, R1
2
2
2
L2
4
10/8
32
140
10/8
L1:
MOVI
#-1, R1
L2:
16
RTS
total:
A3.3:
214 clocks or 13.375I.1s, 16 bytes
Add/Sub
Byte.
Clock.
ADDS:
MOV.l
ADD.l
A,RO
RO,C
20
48
total:
44 clocks or 2.75 I.1s, 12 bytes
A3.4:
Compares 24 (=32) bit
Byte.
Clock.
CMP1;
MOV.l
CMP.l
X,RO
20
22
Y, Rn
BLT/EQ/GT (av) 2
total:
A3.5:
51 clocks or 3.19I.1s, 14 bytes
CAN move and compares (16-bit)
Byte.
Clock.
CMPw:
MOV.w
CMP.w
Y,Rn
BLT/EQ/GT (av)
total:
16
X,RO
6
2
18
9
43 clocks or 2.69 I.1s, 14 bytes
1996Mar01
471
AN703
Philips Semiconductors
Application note
XA benchmark versus the architectures
68000, 80C196, and 80C51
A3.6:
2-dimensionallnterpolation
AO : table position. RO: fraction1. R1 : fraction 2, R2: result, R3, R4
Byte.
Clock.
CMPw:
MOV.w
ADDQ.1
MOV.1
SUB.w
MULu
ASR.1
ADD.w
ADD! .1
MOV.w
ADDQ.1
MOV.w
SUB.w
MULu
ASR.1
ADD.w
SUB.w
MULu
ASR.1
ADD.w
RTS
total:
(AO) , R2
U,AO
(AO) , R3
R2,R3
RO,R3
#8,R3
R3,R2
U5,AO
(AO) ,R3
#l,AO
(AO) ,R4
R3,R4
RO,R4
#8,R4
R4,R3
R2,R3
Rl,R3
#8,R3
R3,R2
4
74
28
4
4
8
4
74
28
4
4
40
22
4
16
362 clocks or 22.62 I1s, 42 bytes
Linear interpolation is 2-dim. interpolation /3 :
1-dim.lnterpolation 7.54118,14 bytes
A3.7:
68000 Interrupt Overhead
a.
interrupt
RET!
JMP 2*
BTST+BNE 2*
BSR
RTS
BSET/BCLR 4*
MOVEM 2* n=5
MOV!
#xx,CCR
h.
c.
d.
e.
f.
g.
Clocks
44
20
24
60
18
16
96
64
68000 INTerrupt overhead 350 clocks
1996 Mar 01
8
350
Bytes
4
24
16
24
12
4
92
=21.87 I1s,
92 bytes
472
AN703
Application note
Philips Semiconductors
XA benchmark versus the architectures
68000, 80C196, and 80C51
A3.8:
68000 Program Overhead
For the 68000, the JB/JBN branches have to be constructed:
Clock.
ABS.l,Rn
#bitmask.,Rn
rel.address
MOV.w
ANDI.w
BEQ/BNE
Byte.
12
8
10
6
4
total JB/JNB execution: 34 clocks, 12 bytes
Now the absolute (estimated) branch time can be calculated, taking the core difference in account.
TYPE
OCCURRENCE
68000
LJMP/JMP
100
12
1200
6
LCALUJSR
100
20
2000
8
800
Jcc/Bcc
200
10
2000
2
400
JB/JBN
100
34
3400
12
600
1200
8600
537.5
total cycles
flsac
A3.9:
BYTES
3000
68000 Totals
68000
FUNCTION
OC*
EXEC
*OC
1.MPY
12
4.4
52.8
2. FDIV
4
13.4
53.6
3. ADD/SUB
50
2.75
137.5
4. CMP 24b
13
3.2
41.6
5. CAN 16b
40
2.7
216
6.INTPLIN
20
7.5
150
7.INTERR
10
21.9
219
8. BRANCH
10
68000 totals
including 20% statistics
1996 Mar 01
537.5
1,300 fls
1,560 fl S
473
AN703
Philips Semiconductors
Application note
XA benchmark versus the architectures
68000, 80C196, and 80C51
APPENDIX 4
80C196 function implementations
80C196 reference:
Embedded control/erhandbook vol 11-16 bit
Copyright: Intel Corp.
A4.1:
80C196 Unsigned multiply P=X*Y (16x16)
total:
A4.2:
Bytes
3
RO,Rl
MUL
Clocks
28
1.75 !lS, 3 bytes
Floating point division
(RO) Accuracy,
(R4) / (R8)
16:16
R4 result
Bytes
Clocks
FDV:
EXT
AND
JE
SHLL
DlVU
2
3
JNV
R4
R8,#FFFF
Ll
R4,RO
R8,R4
L2
LD
R4,#FFFF
2
4
5
8/4
20
24
4/8
4
Ll:
L2:
RET
total:
A4.3:
11
76 clocks or 9.5 I1s, 19 bytes
Add/Sub
Bytes
Clocks
ADDS:
SUB
SUBB
total:
A4.4:
R5,Rl,R3
R4,RO,R2
4
10 clocks or 1.25 I1s, 7 bytes
80C196 "3-byte compare"
eMP
BNE
eMP
Rn,Yl
Ll
Rrn,Y2
Bytes
5
Clocks
9
4/8
Ll:
BLT/EQ/GT
Average total:
A4.5:
(av)
CAN move and compares (16-bit)
eMP
Rx,Y
BLT/EQ/GT (av)
total:
4/8
34 clocks or 4.25I1S, 14 bytes
Byte.
4
Clock.
9
15 clocks or 2.5 I1s, 6 bytes
1996 Mar 01
474
AN703
Philips Semiconductors
Application note
XA benchmark versus the architectures
68000, 80C196, and 80C51
A4.6:
80C196 2-dimensional interpolation using in-line linear interpolations
RO : table position, R2=fraction1, R4=fraction2, R6=result, RS, R10
Bytes
LD
LD
SUB
MULU
SHRAL
ADD
ADD
LD
LD
SUB
MULU
SHRAL
ADD
SUB
MULU
SHRAL
ADD
RET
total:
R6, [RO)+
R8, [RO)+
R8,R6
R8,R2
R8,#8
R6,R8
RO, #15
R8, [RO)+
R6, [ROJ
RI0,R8
RI0,R2
RI0,#8
R8,RI0
R8,R6
R8,R4
R8,#8
R6,R8
Clocks
14
15
4
6
4
3
5
4
14
15
4
4
14
15
4
14
153 clocks or 19.1 J.Ls, 53 bytes
Linear interpolation is 2-dim. interpolation 13 :
1-dim. interpolation 6.4 J.Ls, 18 bytes
A4.7
80C196 Interrupt Overhead
Clocks
a.
b.
c.
d.
e.
f.
g.
interrupt /RTE
LJMP 2*
JB
2*av.7
CALL/RTS
BSET/BCLR 4*
POP 5*
5*
PUSH
MOVI
#xx,CCR
4
16
10
10
4
205
58
SOC196 INTerrupt overhead 205 clocks
1996 Mar 01
Bytes
27
14
14
22
28
40
55
5
2
6
=12.S J.Ls,
58 bytes
475
AN703
Application note
Philips Semiconductors
XA benchmark versus the architectures
68000, 80C196, and 80C51
A4.8:
80C196 Program Overhead
TYPE
OCCURRENCE
68000
LJMP
100
7
BYTES
700
3
300
400
LCALLIRET
100
22
2200
4
Jcc/Bcc
200
7
1400
2
400
JB/JBN
100
7
700
3
300
6000
375
total cycles
Ilsec
80C196 totals
including 20% statistics
1400
958.11lS
1150 Ils
80C196
FUNCTION
OC·
EXEC
·OC
21
1.MPY
12
1.75
2. FDIV
4
9.5
38
3. ADD/SUB
50
1.25
62.5
4. CMP 24b
13
4.25
55.2
5. CAN 16b
40
1.88
150.4
6.INTPLIN
20
6.4
128
7.INTERR
10
12.8
8. BRANCH
10
1996 Mar 01
128
375
476
AN703
Application note
Philips Semiconductors
XA benchmark versus the architectures
68000, 80C196, and 80C51
AN703
BIT MANIPULATION
Copy a bit from one location to another in memory. Complement the bit in the new location
Note: Assumed that memory is on-chip and directly addressed.
Bit "x" of memO needs to be copied to bit "1' of mem1.
XA
CLR
ORL
MOV
C
c, Ibitm
bitn, C
clear Carry
comp1. bit and save in C
move memO.x -> mem1.y
4
9
12
(0. 75 I1S )
Intel 80C196
Note : States = clock (period)/ 2
Move complement of bit "m" to "n" in memory
R3
R4
RO
R1
R2
= memory byte having bit "m"
= memory byte having bit "n"
= Used as bit-mask register
= position of "m" in memO
= position of "n" in mem1
Bytes
LD
SHLB
RO, 1
RO, R2
NOTB
JBC
ANDB
RO
R3,bitm, L1
R4, RO
Load 1 in Reg
position of bit "n
in R2
complement
test bit "mil polarity
reset \\n" i f \'m" = 0
States
16
4
7
(av)
4
L1:
ORB
R4, RO
set "m" otherwise
either/or
14
31 (3_88 I1S)
Motorola 68000
L1:
BTST
BEQ
BCLR
bitm
L1
bitn
Test bit
Branch if reset
Test bit and clear (-m
BFSET
bitn
Test bit and set ( -m
Bytes
2
0) 2
1)
States
4
4
either/or
(0_88 I1S)
8
14
2
1
12
12
24
5
48 (3_0 I1S)
8051 Bit-test
MOV
CPL
MOV
1996 Mar 01
C, bitm
C
bitn, C
477
Application note
Philips Semiconductors
XA benchmark versus the architectures
68000, 80C196, and 80C51
AN703
XA CODE DENSITY RESULTS
Graph showing performance with respect to 6BOOO, and BOC196 cores normalized with respect to XA. The BOC51 is included just for reference.
XA
68000
80C19G
8051
1.5
MPY
0.B9
1.06
5.33
ADD/SUB
3
1.75
2.5
CMP24b
1.6
1.6
CAN 1Gb
2.B
1.2
1.5
INTPLIN
0.33
0.43
0.33
INTERR
2.24
1.41
1.71
FDIV
3.0
6BOOO
2.5
2.0
BOC196
~XA
m
1.5
6BOOO
[[I]
1.0
XA
~
~
~
~
F=
~
~
~
1==
~
~
1=
1=
1=
~
F=
~
F=
o
~
~
~
~
0.5
~
~
~
~
1=
~
~
~
~
MPY
~
1=
F=
~
FDIV
ADD/SUB
~
~
~
~
~
~
~
~
~
~
~
~
~
~
1==
l=:
1=
1=
~
~
1=
~
~
~
1=
1=
~
~
CMP 24b
CAN 16b
~
~
~
~
~
~
I
1=
~
INTPLIN
BOC196
r--
~
~
~
C:::
1=
r--
~
~
~
~
~
INTERR
SU00599A
1996 Mar 01
47B
Application note
Philips Semiconductors
XA benchmark versus the architectures
68000, 80C196, and 80C51
AN703
XA EXECUTION TIME RESULTS
Graph showing performance with respect to 68000, and 80C196 cores normalized with respect to XA. The 80C51 is included just for reference.
68000
80C196
8051
MPY
5.87
2.33
50
FDIV
3.4
2.41
86
3.3
19.74
XA
ADD/SUB
7.2
CMP24b
3.02
4
9.41
CAN 16b
4.8
4.44
15.98
INTPLIN
1.26
1.08
4.34
INTERR
3.6
2.1
5.16
8
68000
7
6
5
~XA
4
80C196
M
68000
[[I]
80C196
3
2
t--
XA
o
==
==
==
==
MPY
~
~
~
==
FDIV
~
1==
~
~
ADD/SUB
~
~
~
~
~
==
==
==
CMP 24b
CAN 16b
1==
~
1==
~
INTPLIN
==
==
==
==
t--
INTERR
SU00600A
1996 Mar 01
479
Application note
Philips Semiconductors
XA benchma'rk versus the architectures
68000, 80C196, and 80C51
BIT TEST BENCHMARK:
AN703
CODE DENSITY NORMALIZED WITH XA (=1.0)
The SOC51 is shown here only for reference.
XA
Code Density
68000
80C196
8051
0.S9
1.6
0.6
2,O~--------------------------------------------------_.
1.5
1---------------------------
1,Of----
1--------------1
I_
Code Dens",
0.51------
0'-----
XA
6S000
SOC196
SOC51
SU00601
BIT TEST BENCHMARK:
EXECUTION TIME NORMALIZED WITH XA (=1.0)
The SOC51 is shown here only for reference.
XA
Execution Time
68000
80C196
8051
1.2
5,2
4
6~-----------------------------------_.
5f-----------------41-----------------~---~
II Execution Time
3f----------------------
2r--------------------------If----0'-----
XA
6S000
SOC196
SOC51
SU00602
1996 Mar 01
4S0
Philips Semiconductors
Application note
An upward migration path for the 80C51:
the Philips XA architecture
AN704
Author: Greg Goodhue
The 80C51 is arguably the most used 8-bit microcontroller
architecture in the world, and a vast amount of public and private
c~de exists for this processor. The "XA" (Extended Architecture)
mlcrocontroller, developed by Philips Semiconductors, is a high
performance 16-bit processor that retains source code compatibility
with the original 80C51. By permitting simple translation of source
code, the XA allows existing 80C51 code to be re-used with a higher
performance 16-bit controller. This provides an upward mobility path
to a 16-bit controller for 80C51 users that has not previously existed,
while also bringing a low cost, high performance, general purpose
16-bit controller to the market. How can a modern 16-bit controller
provide compatibility with the venerable 80C51 without badly
compromising the architecture and performance?
register is a superset of the 80C51 instruction to add a register to
the accumulator. In such a case, there is no good argument to
duplicate the original instruction precisely.
An 80C51 "mode" on an otherwise totally new (and therefore
incompatible) processor was also considered. However, this
ap~roachwould result in having in effect 2 processors on one chip,
which would be confusing and not very cost effective. Mixing new,
more efficient code with existing 80C51 code would require
switching modes often, which would be very cumbersome and
potentially hazardous. If a mode switch was skipped by accident in
some seldom executed code sequence, the processor could
suddenly find itself executing code using the wrong instruction set!
HOW IS IT DONE?
DESIGN TRADEOFFS
The team that created the XA architecture at Philips followed several
rules in order to insure that 80C51 compatibility goals were met.
First, translation for all (or nearly all) 80C51 instructions would be
one to one. Multi-instruction combinations that could result in
problems if split by an interrupt or otherwise compromise the
integrity of the translation would be avoided. This has the effect of
producing a simple, straightforward, and easily checkable
translation.
Many tradeoffs must be made and considerations taken into account
when creating an upward compatible processor that must also be
high performance and low cost. Among the areas to be considered
~re the .processor's memory map and means of accessing memory,
Instruction set and methods of instruction execution, stack
operation, interrupts, and special features added to enhance
particular functions, such as multi-tasking, exception handling, and
debugging features.
Second, most 80C51 instructions should be a subset of new XA
instructions. If that is not possible or doesn't make sense in a
particular case, the original 80C51 instruction would be included
"as-is", even though it might not fit the basic XA architecture's
philosophy.
The goal of source code compatibility, rather than object code
compatibility, was adopted for a number of reasons. First, ~
upward compatibility with an existing processor is by definition
!mpossible if one of the goals of the new processor is to generally
Improve performance. By doing the same things in less time, the
time related attributes of previously written code change.
Third, XA register, code memory, data memory, and Special
Function Register addressing would be a superset of the 80C51
equivalents. The same idea applies to other features that are part of
the CPU.
Another consideration has to do with the fact that the 80C51 used all
but one of the 256 opcodes available with an 8-bit opcode field.
Adding more than a few new instructions or a new data type (such
as 16-bit operations) would result in a very inefficient instruction
encoding, and inefficient execution as well, for those new functions.
Finally, some compromises to these compatibility rules are allowed
in cases where keeping absolute compatibility would adversely
affect system cost, high level language support, or performance.
The cost (in engineering time) of dealing with any incompatibilities
must be kept to a minimum. Preferably, the issue should not even be
noticeable to most customers.
Creating a new instruction set that includes an exact copy of the
8?C51 instruction set as a subset would also be very inefficient,
since some subset of many new operations would act as duplicates
of 80C51 instructions. For instance, a more powerful ADD
instruction that can add any byte or word register to any other
1995 Apr 27
481
Philips Semiconductors
Application note
An upward migration path for the 80C51:
the Philips XA architecture
MEMORY MAPPING
AN704
implementation of the XA processor core at some point in the future
if and when aOCS1 compatibility is no longer required. Figure 2
shows the overlap of data memory and the register file in
compatibility mode. This shows only this one aspect of the XA
memory map, not a general view of the memory.
At the root of any potential compatibility between the XA and the
BOCS1 is the memory map. The XA takes a simple but effective
approach to this issue: its memory map is a superset of the BOCS1
memory map. Modes of addressing memory likewise duplicate the
modes available on the BOC51 , adds new modes, and enhances
some of the old ones.
In translating BOC51 source code to the XA, particular registers are
used to represent the accumulator (A) and the data pOinter (DPTR).
Although the XA can use any of the 14 general purpose byte
registers int he register file as an accumulator, the BOC51 has some
features that require the accumulator to be a specific byte register.
These are primarily the parity flag and a few special instructions that
intrinsically reference the accumulator in a way that could not be
generalized in the XA. The latter are, speCifically, instructions like:
JZ, JNZ, MOVC A,@A+DPTR, MOVC @A+PC, and JMP @A+DPTR.
Figure 1 shows the register file of the first XA derivative (the XA
architecture can support some additional registers not implemented
in the first part) and the registers used for BOCS1 translation.
1
20
1E
1C
SYSTEM STACK POINTER
1
R7
R7H
USER STACK
POINTER
R7L
R6
R6H
(80C51 DATA
POINTER)
R6L
R5
R4
R3
R5H
I",j
1A
R3H
GLOBAL
REGISTERS
R2H
R2L
I
R3L
I
R1L
.,
-----+-----R2H
I
R2L
-----+-----R1H
18
ROH
I
ROL
16
R3H
I
R3L
1--''''
10
~,.,.."
R2
R3H
REGISTER BANK 3
1------+-----14
R2H
I
R2L
-----+-----12
R1H
I
R1L
-----+------
R4L
(80C51 ACC)
R3L
_ _ _ _ _ _ _ _ _ _--1
~-----+------
R5L
R4H
(80C51 B REGISTER)
~
ROH
I
REGISTER BANK 2
ROL
~--------~--------~ ~
f.wM
E
R3H
I
R3L
~-----+-----R1
R1H
R1L
C
BANKED
REGISTERS
RO
ROH
ROL
A
R2H
I
R2L
R1H
I
R1L
-----+------
REGISTER BANK 1
~-----+------
;
ROH
I
ROL
R3H
I
R3L
,
-
RO THROUGH R7 ARE WORD REGISTERS.
EACH IS MADE UP OF 2 BYTE REGISTERS,
ROL THROUGH R7H.
-----+-----R2H
I
R2L
-----+-----R1H
I
R1L
-----+------
SU00592
Figure 1. XA Register File
I
ROH
ROL
L-________-L________
An alternate program status word (PSW) was created on the XA to
duplicate the BOC51 PSW and contains the P (parity) flag as well as
the F1 and Fa user defined flags that are not found in the native XA
PSw. The XA PSW, on the other hand, adds some new status flags
and system controls to expand its capabilities.
~
J
NOTES:
1) The addresses shown are the data memory addresses that
correspond to the register appearance in the XA data memory when
aOC51 compatibility mode is activated.
The XA register file duplicates the 4 banks of B bytes that are found
in the SOCS1. An BOCS1 compatibility mode determines whether
these locations appear both as registers and as the lower 32 bytes
of data memory as they do on the BOCS1 . The more standard
scheme of keeping the register file separate from the data memory
is the default on the XA. Besides being "cleaner", the separation of
the register file from data memory allows for a higher performance
1995 Apr 27
REGISTER BANK 0
2) This drawing represents a single XA data memory segment.
SU00593
Figure 2. XA Register File and Data Memory Overlap
4B2
Application note
Philips Semiconductors
An upward migration path for the BOC51 :
the Philips XA architecture
encoded into the instruction, the XA does not need to duplicate its
SFRs in exactly the same area or at the same specific addresses. In
order to simplify the memory map, expand the SFR space, and
expand the directly addressed data space, the XA defines a totally
separate SFR space that is not logically related to the rest of data
memory. To translate 80C51 source code, the original SFR ~ is
kept in the translated code, unless the name was changed for some
reason. In any case, as long as the reference is by name, a code
translator need not try to determine which SFR it is, or where it
belongs on a particular XA derivative. If 80C51 source code for
some reason references an SFR by its ~, a code translator
might attempt to look it up in an SFR map for the 80C51 derivative
to which the code was targeted.
A second aspect of XA memory addressing is also controlled by the
aforementioned 80C51 compatibility mode. In the XA, indirect
memory accesses normally make use of a i6-bit pointer register,
which may be any of the word registers in the register file. The
80C51. however, allows only the 2 single-byte registers RO and Ri
to used for indirect references. The XA is forced use the first 2
single-byte registers in the currently selected bank as byte pointers
rather than word pOinters when the 80C51 compatibility mode is
activated. Thus, translated 80C51 code typically must be run with
the compatibility mode activated.
The data memory map for a single XA data segment looks just like
the entire data memory map for an 80C51. This leads to the
possibility of using a single XA to perform the function of several
80C51s, with a separate data segment and code area allocated to a
task that was originally performed by one 80C51. The XA includes
hardware support for multi-tasking operation in order to allow for this
and other interesting possibilities.
A second mode control in the XA applies to 80C51 translated code,
although it may be used in pure XA applications as well. This is the
Page Zero, or PZ, mode. This mode forces the XA to only allow 64K
of address space in both the data and code memories. The purpose
is to reduce the overhead required to support the extra address
space if it is not needed, such as in "single-chip" systems that do not
use any off-chip data or program. Besides saving stack space for
24-bit subroutine and interrupt return addresses (reduced to 16 bits
in PZ mode), overall XA operation is faster by having smaller stack
pushes and pops. Since the 80C51 supported only 64K of code and
data space, translated 80C51 code will likely fit into the same
category.
The XA retains the direct and indirect addressing modes of the
80C51 , although both are greatly expanded in capability, as shown
in figure 3. The direct data addressing has been increased to use up
to 1K bytes of data memory. Indirect addressing is done in 64K byte
segments, for a total of up to 16 megabytes. Both types of
addressing seamlessly switch from internal to external data memory
wherever the boundary exists between the two for a particular chip.
In this manner, the processor stack may also be extended off-chip
up to nearly 64K bytes if necessary. Because of the seamless
internal to external memory transition, the XA would not normally
attempt off-chip data accesses at the low memory addresses that
correspond to the on-chip data RAM. For that reason, the 80C51
MOVX instruction is included on the XA in order to allow translated
code to run without changes in the external memory address map.
This works because MOVX always forces data to be read from
off-chip memory.
There are other changes in the processor stack on the XA, besides
the need to save 24 bits of return address when not running in the
Page Zero mode. First, a great deal of extra hardware in the
processor would be required to allow both byte and word pushes
and pops on the stack, especially since word operations could then
sometimes be mis-aligned from word address boundaries in the data
memory, so stack operations on the XA are always done in word
increments. Mis-aligned word operations, aside from being difficult
to implement, would be very inefficient, since they would have to be
split up into multiple byte operations. This means that translated
80C51 code run on the XA will tend to use somewhat more stack
space than it did originally. The automatic save of the PSW during
interrupts on the XA might also increase stack usage in some cases,
since a few 80C51 programs may have been able to omit saving the
PSW during interrupt processing.
FFFF (64K)
THE ENTIRE MEMORY IS - - - - . j
ADDRESSABLE
IN THE INDIRECT AND
THE INDIRECT WITH OFFSET
MODES
Secondly, the XA stack has been altered so that the direction of
growth is downward, conforming to the industry standard for stack
operation on 16-bit processors. There is also a necessary
relationship between the stack growth direction and the order in
which the bytes of a word are stored in memory for a processor that
is capable of stack relative addressing, as can be done with the XA.
This relationship required that the stack grow downward since data
on the' XA is stored in memory with the low order byte of a word at
the lower address (sometimes referred to as Little Endian storage
order).
OFF-CHIP
DATA MEMORY
THE DIRECT ADDRESSABLE
MODE LIMIT IS AT 1K (3FFh)
THE ON-CHIP/OFF-CHIP
DATA MEMORY BOUNDARY
VARIES FOR
DIFFERENT XA DERIVATIVES
AN704
----.j,--.-,"~"'-,~"""~,-,"".~
-----+-------1
ON-CHIP
DATA MEMORY
These differences in stack operation may require some changes to
be made by the user for any 80C51 source code translated to the
XA. In most cases, the change would be limited to choosing a
different starting address for the stack.
SU00576A
A look at interrupt processing presents some other issues for 80C51
Figure 3. XA Memory Addressing
compatibility. In order to allow more powerful handling of interrupts,
the XA has to make some compromises. Besides the previously
mentioned fact that the PSW is automatically saved on the stack,
which would have been done explicitly in 80C51 interrupt service
code, the return address on the stack is also different if Page Zero
mode is not active. So, any code written for the 80C51 which relied
On the 80C51 , the special function registers (SFRs) were mapped
into the direct address space starting at location 128, through the
end of that space at location 255. Since the 80C51 only allowed
SFR access by direct addresses, where the entire address is
1995 Apr 27
483
Application note
Philips Semiconductors
An upward migration path for the BOC51 :
the Philips XA architecture
AN704
must be added to any translated 80C51 program that makes use of
interrupts, and a reset vector entry must be created for all XA
programs.
in some manner on manipulating the return address on the stack, or
on the PSW not being saved and restored automatically, will require
modification. Both of these situations should be very rare. The
standard (non-Page Zero mode) XA interrupt stack frame is shown
in Figure 4.
A major enhancement to the XA is the addition of a general purpose
interrupt priority scheme that can support up to 15 levels, compared
to only 2 on standard 80C51 parts, and up to 4 on enhanced parts.
This addition, however, requires some changes in the way interrupt
priorities are handled. Two-priority interrupt systems on 80C51
derivatives used a single bit in a priority register to select the two
levels. Four-priority systems extended this to two bits, but in 2
different registers for each interrupt source. Extending that approach
to 15 levels would entail 4 bits in 4 different registers for each
interrupt source, which is getting a bit ridiculous. For the XA, a more
reasonable approach was taken: 4 bits in a single register control
the priority of each interrupt source. Priorities for 2 separate
interrupts are contained in each 8-bit priority register.
CPU FEATURES
Another difference in interrupt processing is that the XA uses a more
efficient and flexible vector table for interrupts and exceptions
instead of the fixed vector scheme of the 80C51. The vector table
must reside at the bottom of the code memory, since this is the only
region that is guaranteed to always exist in a system that uses
on-Chip ROM or EPROM for the program. Thus, during 80C51 code
translation, code found at the 80C51 interrupt service locations must
be moved to another location. Of course, an interrupt vector table
HIGHER MEMORY ADDRESSES
r-- I---"
r-~
(PREVIOUSLY STORED STACK DATA)
-
STACK POINTER PRIOR TO INTERRUPT
_
STACK POINTER AFTER INTERRUPT
LOWER 16·BITS OF PC
(RESERVED)
,
I
HIGH BYTE OF PC
SAVED psw VALUE
r-v
r-u
LOWER MEMORY ADDRESSES
SU00594
Figure 4. Standard Interrupt Stack Frame on the XA
1995 Apr 27
484
Application note
Philips Semiconductors
An upward migration path for the 80C51:
the Philips XA architecture
the XA can fetch as many as 16 bytes of code between ALE cycles.
The multiplexed address and data bus begins with the fifth address
line (A4), paired with the first data line (DO), and continues to the
width of the bus, either 8 or 16 bits. Above that will be more
always-driven address lines, if more are needed by the application.
Since the XA allows programming the number of address lines,
those above the multiplexed portion of the bus need not be driven by
the XA if they are not needed, leaving them free for other functions.
PERIPHERALS, ON AND OFF·CHIP
Another subject to look at is hardware compatibility. While complete
hardware compatibility with the 80C51 was not a primary goal during
the XA architecture development, hardware compatibility was
retained whenever possible and practical. This particularly concerns
peripheral devices such as UARTs, Timers, etc., and the processor's
external bus system.
In the case of peripherals that are the same as those customarily
found on the 80C5i , these have been made to function as close as
possible to the original, with some transparent enhancements such
as framing error detection, overrun detection, and break detection in
the UARTs. One exception to this general compatibility is that timer
mode 0 of the standard timers 0 and 1, which is the rarely used
8048 compatible timer mode, has been replaced with a much more
useful i6-bit auto-reload mode. In the future, further enhanced
peripheral functions will likely lead eventually to completely new
implementations that are not backward compatible with the 80C51.
These changes mean that an XA device may be made pin
compatible with a similar 80C51 derivative if the external bus is not
used. Small changes to the external hardware must be made if the
external bus is in use. Internally programmable bus cycle timing
control on the XA allows programming the duration of all of the bus
cycles, allowing nearly all memory and peripheral devices to be
used on the XA bus without the need for an external WAIT state
generator or any other additional circuitry.
Since there is no supposed relationship between the original
oscillator frequency of an 80C5i system and a similar XA system
using translated code, the exact relationship of peripheral speeds to
the oscillator need not be preserved. For more flexibility in timer
rates and therefore UART baud rates, the XA timers and some other
peripherals are operated from a special clock whose rate is user
programmable. The choices are the CPU clock divided by 4, 16, or
64, giving a wide range of uses. This function, like anything else in
an application that is time critical, will need to be visited by the user
when translated 80C51 code is used to drive XA peripherals.
INSTRUCTIONS REVISITED
The earlier mentioned goal of the XA to map nearly every 80C51
instruction to a Single XA instruction was met. Just one 80C51
instruction cannot be replaced by single XA instruction. That
instruction is XCHD (exchange digit), a seldom used 80C51
instruction. This unusual instruction exchanges the lower nibble of
the 80C51 accumulator with a nibble at an internal RAM address
pointed to by byte register RO or Ri. The XA would have required
additional special circuitry in order to support this operation. As a
result, it was decided to allow a multi-instruction sequence in this
case, since the instruction is rarely used. The sequence used to
replace XCHD is:
The standard XA external bus interface includes all of the familiar
80C51 bus Signals: ALE, "P'SEf\J, RO, WR', EA, the multiplexed
address and data bus, and address-only lines. However, some
additional signals have been added and changes have been made
in some of the details. For instance, the XA supports both 8-bit and
16-bit bus widths, using a second write Signal to distinguish byte
writes on a 16-bit bus. A WAIT line allows external circuitry to insert
wait states into bus cycles for slow peripherals or program
memories.
The largest change in the XA bus from the 80C51 is in the mapping
of the multiplexed address and data lines. The 80C51 has a
somewhat inefficient mapping that requires an ALE (Address Latch
Enable) cycle in order to latch the least Significant bits of an address
for §!l external bus cycles. This was not a concern for the 80C5i
due to its machine cycle timing, which allowed plenty of time for an
ALE pulse. For the XA, which has no extra cycles during instruction
execution, any extra strobes required on the bus during code
fetches will likely take away time that could be used to execute
instructions. As a result, the XA drives the 4 lower address lines
directly, and does not require them to be latched. This means that
1995 Apr 27
AN704
PUSH
R4H
; save temporary register.
MOV
R4H, (Ri)
; get second operand.
RR
R4H, #4
; swap one byte.
RR
R4L, #4
; swap second byte (the "An register).
RL
R4, #4
; swap word, result is swapped nibbles in A
and R4H.
MOV
(Ri), R4H
; store result.
POP
R4H
; restore temporary register.
Some additional code may be needed if an application requires this
sequence to be un-interruptable for some reason. All other 80C51
instructions translate one-to-one to XA instructions. Since the XA
instruction set and memory model are a superset of the 80C51 , and
since most mnemonics and names were kept the same, 80C51
code translated for the XA looks nearly the same as the original.
Some examples are shown below.
485
Application note
Philips Semiconductors
An upward migration path for the 80C51 :
the Philips XA architecture
AN704
Table 1. Examples of 80C51 to XA Source Code Translation
TYPE OF OPERATION
80C51 SOURCE CODE
Move immediate to SFR.
MOV
TCON,#OOh
MOV.B
TCON,#OOh
Move direct address to accumulator.
MOV
A,TstDat
MOV.B
R4L,TstDat
Move register to register.
MOV
R5,A
Arithmetic with 2 registers.
ADD
A,R1
ADD.B
R4L,ROH
Arithmetic with register and immediate.
SUBB
A,#'O'
SUBB.B R4L,#'O'
XA SOURCE CODE
Increment a register.
INC
RO
ADDS.B ROL,#1
Test a register.
CJNE
A,#'O',Cmd1
CJNE.B
R4L,#'O' ,Cmd1
Clear a bit.
CLR
RxFlag
CLR
RxFlag
Seta bit.
SETB
EX1
SETB
EX1
Testa bit.
JNB
RcvRdy, Wait
JNB
RcvRdy, Wait
Test
CALL
Test
Subroutine call.
ACALL
Subroutine return
RET
Push register onto stack.
PUSH
ACC
PUSH.B R4L
Pop register from stack.
POP
ACC
POP.B
RET
Details of instruction translation for the entire 80C51 instruction set
are available in the Philips XA User Guide.
lookup table that it is accessing may change. The solution is the
same as for JMP @A+DPTR: some user intervention to adjust the
table index.
One side effect of source code compatibility of the XA with the
80C51 is that the number of bytes required to encode some
instructions changes between the two processors. In most cases,
this is not a major concern, however it does raise issues with the
translated code for some situations. A simple example of this is that
a conditional branch could have the target address move out of
range when translated code is re-assembled. This should be a rare
occurrence since the range of short relative branches on the XA has
been doubled to 256 bytes forward or backward. The same issue
does not exist for farther jumps and calls since the XA extends that
range to beyond the entire 80C51 address range.
User intervention will also be needed in any case where the timing
of instructions in the original80C51 code is of importance. The XA
reduces the execution time of each instruction to the minimum
possible with its internal hardware implementation. Also, instructions
are normally fetched into a small queue prior to being needed to
continue execution, which can lend additional uncertainty to
execution times. The execution time of loops or the time between
particular instructions can be calculated and adjusted by the use of
NOPs, delay loops, or other means of matching timing. Also, any
variable execution timing of the same code due to it being entered in
different ways can be handled with certain coding techniques. An
example would be a loop that is entered by "falling through" the
preceding code on the first instance and branching back to be
repeated on subsequent occasions. The branch back takes extra
time not seen on the first entrance to the code due to the necessity
of "flushing" the queue on a branch. The solution in this case is to
add a branch instruction prior to the loop branching to the first
instruction of the loop. Then, each cycle through the loop acquires
the same timing. Of course, a simple source code translator cannot
sense such cases and attempt to deal with them automatically.
The precise length of a branch instruction is of concern in certain
cases, such as a table of jump instructions entered using the JMP
@A+DPTR instruction of the 80C51. The XA instruction set includes
this jump, but does not include a 2-byte replacement for the 80C51
AJMP instruction which is often used in jump tables. The user will
have to make small changes to the indexing into such a table if it is
translated to run on the XA.
A similar issue can arise for a translation of the 80C51 instruction
MOVC A,@A+PC, since the distance from this instruction to the
1995 Apr 27
R4L
486
Application note
Philips Semiconductors
An upward migration path for the 80C51:
the Philips XA architecture
AN704
AN EXAMPLE
As an example of translating 80C5i source code into XA source
code, an actual piece of 80C51 code from a working application was
taken and translated using the rules that were presented above. The
results of the simple one-to-one translation are shown below.
Table 2. Sample 80C51 Routines Translated for the XA
Original 80C51 source code:
Translated XA source code:
; Sets up UART and Timer (for baud rate generation), prints a string,
; and prints a hexadecimal value.
Start:
MOV
MOV
MOV
MOV
MOV
MOV
CLR
MOV
SETB
SCON,#42h
TMOD,#20h
TCON,#OOh
TL 1,#OFDh
TH1,#OFDh
A,PCON
ACC.7
PCON,A
TR1
; Set UART for 8-bit variable rate.
; Set Timer1 for 8-bit auto-reload.
; Stop timer 1 and clear flag.
; Set timer for 9600 baud @ 11.0592 MHz.
; Set reload register for same rate.
; Make sure SMOD bit in PCON is
; cleared for this baud rate.
MOV.B
MOV.B
MOV.B
MOV.B
MOV.B
MOV.B
CLR
MOV.B
SETB
SCON,#42h
TMOD,#20h
TCON,#OOh
TL1,#OFDh
TH1,#OFDh
R4L,PCON
R4L.7
PCON,R4L
TR1
MOV
ACALL
DPTR,#Msg1
Msg
; Send a stored message.
MOV.W
CALL
R6,#Msg1
Msg
MOV
ACALL
A,Pi
PrByte
; Send Port 1 value as hexadecimal.
MOV.B
CALL
R4L,P1
PrByte
PrByte:
PUSH.B
RL.B
CALL
CALL
POP.B
CALL
CALL
RET
ACC
R4L,#4
HexAsc
XmtByte
ACC
HexAsc
XmtByte
HexAsc:
AND.B
JNB
JB
JNB
ADD.B
ADD.B
RET
R4L,#OFH
R4L.3,NoAdj
R4L.2,Adj
R4L.1,NoAdj
R4L,#07H
R4L,#30H
Start:
; Start timer
.******************** ••• ************************
Subroutines
.***********************************************
; Print byte routine: print ACC contents as ASCII
; hexadecimal.
PrByte:
PUSH
SWAP
ACALL
ACALL
POP
ACALL
ACALL
RET
ACC
A
HexAsc
XmtByte
ACC
HexAsc
XmtByte
; Print nibble in ACC as ASCII hex.
; Hexadecimal to ASCII conversion routine.
; Converts a nibble to ASCII hex.
HexAsc:
Ad]:
NoAdj:
1995 Apr 27
ANL
JNB
JB
JNB
ADD
ADD
RET
A,#OFH
ACC.3,NoAdj
ACC.2,Adj
ACC.1,NoAdj
A,#07H
A,#30H
Adj:
NoAdj:
487
Application note
Philips Semiconductors
An upward migration path for the 80C51:
the Philips XA architecture
AN704
Translated XA source code:
Original 80C51 source code:
; Message string transmit routine.
PUSH
MOV
MOV
MOVC
CJNE
POP
RET
ACC
RO,#O
A,RO
A,@A+DPTR
A,#O,Send
ACC
Send:
ACALL
INC
SJMP
XmtByte
RO
MsgL
Msg1:
DB
DB
ODh,OAh,ODh,OAh
'Port 1 value =',0
Msg:
MsgL:
Msg:
; RO is character pointer (string
length is limited to 256 bytes).
; Get byte to send.
; End of string is indicated by a O.
; Send a character.
; Next character.
PUSH.B
MOV.B
MOV.B
MOVC.B
CJNE.B
POP.B
RET
ACC
ROL,#O
R4L,ROL
A,[A+DPTR]
R4L,#O,Send
ACC
Send:
CALL
ADDS.B
BR
XmtByte
ROL,#1
MsgL
Msg1:
DB
DB
ODh,OAh,ODh,OAh
'Port 1 value = ',0
XmtByte:
JNB
CLR
MOV.B
RET
TI,$
TI
SBUF,R4L
MsgL:
; Wait for UART ready, then send a byte.
XmtByte:
JNB
CLR
MOV
RET
TI,$
TI
SBUF,A
The translated XA code looks very much like the 80C51 source
code and can easily be read by anyone familiar with the original
program. Statistics for this example are shown in the following table.
Table 3. Statistics on Sample 80C51 to XA Code Translation
80C51 CODE
XA TRANSLATION
Bytes to encode
STATISTIC
107
151
- Includes NOPs added for branch alignment on XA.
Clocks to execute
840
212
- Raw execution time for instructions in code, without flow analysis.
Conditional branch times calculated as if half taken, half not
taken.
42 sec
10.6 sec
Time to execute
@
20 MHz
COMMENTS
- A 4x speed improvement for a simple translation with no
optimization.
SOME XA ENHANCEMENTS
THE UPWARD SPIRAL
The subject of this article has been how the new Philips XA
microcontroller architecture supports upward compatibility with the
80C51. The XA adds quite a bit to the equation beyond mere 80C51
compatibility, which has barely been touched upon here. In addition
to high performance and very compact instruction encoding, the XA
is specifically designed for high level language support for compilers
such as C, has many features to support multi-tasking, with
protected features and separate memory spaces, many 32-bit
operations in addition to general 16-bit arithmetic, and greatly
enhanced interrupt processing, to name a few. A complete
description of all of these features and many more may be found in
the XA User Guide and data sheets for specific parts.
Many openings have been left in the XA architecture for even more
enhancements in the future, such as full pipelining, complete 32-bit
operation support, or a faster peripheral bus. The XA is the
foundation of a new microcontroller derivative family in a manner
similar to the very popular 80C51 family. Many other advanced
microcontroller architectures have been brought to market since the
80C51 was designed years ago. But until now, none has allowed the
enormous quantities of 80C51 code that users have on file to be
re-used with minimal effort on a state-of-the-art 16-bit processor.
With the Philips XA, that is now possible, while getting the benefit of
a modern 16-bit processor with few compromises.
1995 Apr 27
488
Application note
Philips Semiconductors
AN705
XA benchmark vs. the MCS251
BENCHMARK RESULTS AND CONCLUSIONS
BACKGROUND
A computer benchmark is a "program" that is used to determine
relative computer core performance by evaluating benchmark
execution time of the core. In a brainstorm sessionon
microcontrollers for automotive applications, an assembler functional
benchmark for engine management, which is a typical example of
embedded high-end microcontral was created. This report
summarizes the functions implemented in assembler language of
the compared controllers: Intel MCS251 , and Philips XA. The total
execution times of a program "engine cycle" (engine stroke) are
calculated and the required program code is estimated for each
controller.
Relative performance on a line
The table below presents the most important result of the assembler
benchmark evaluation. It pictures the relative performance of the
compared core instruction set on a scale where XA=1.0. Also
appended is the performance charts-execution and code density of
all the processors.
Total exec.times/core(fls) for all routines (with *occurrences)
938.75
359.86
Performance
ratio
Evaluation of performance in a High Level Language (HLL) like C
would be preferable, but it is difficult to realize as "the best"
compilers for all cores involved then should be used.
MCS251
XA
MCS251
1.0
2.61
XA
0.383
1.0
This document outlines code density and execution times of the XA,
based on the most recent information. The execution times are
given in terms of both clock cycles and time units. Although the XA
can run at a much higher speed than the MCS251, for the sake of
fairness, both cores are evaluated running at 16.00 MHz. This is a
reasonable assumption for comparing the cores at the same level of
technology.
Because of the pipeline architectures of the MCS251 and the XA,
the benchmarks are run on actual silicon.
Table 1. XA instruction set execution times and byteslfunction
XA
FUNCTION
OC*
EXEC. TIME
/FUNCT·(flS)
OCCURRENCE
*TIMEIFUNCT.
BYTES/FUNCTION
MPY
12
0.75
9
2
FDIV
4
3.0
12
18
4
ADD/SUB
50
0.375
18.75
CMP 24b
13
1.25
16.25
9
CAN 16b
80
0.562
44.96
5
INTPLIN
20
2.04
40.8
42
BRANCH
XA totals
including 20% statistics
1
158.13
: 299.89 ,""S
: 359.86 fls
Table 2. MCS251 instruction set execution times and byteslfunction
MCS251
FUNCTION
OC*
EXEC. TIME
IFUNCT·(IlS)
OCCURRENCE
*TIMEIFUNCT.
BYTES/FUNCTION
MPY
12
1.53
18.36
2
FDIV
4
30.125
120.6
25
ADD/SUB
50
0.641
32.05
2
CMP 24b
13
3.375
43.88
12
CAN 16b
80
1.625
130
6
INTPLIN
20
6.12
122.4
60
BRANCH
MCS251 totals
including 20% statistics
1996 Feb 15
1
315.0
782.29 fls
938.75 Ils
489
Application note
Philips Semiconductors
AN705
XA benchmark VS. the MCS251
available for all the micros evaluated, all routines are worked out
only in assembly.
Table 3. Total benchmark execution time results
MICROCONTROLLER
CORE
EXECUTION TIME
(1-18 )
Philips XA-G3
359.86
Intel MCS251
938.75
All cores are evaluated at 16.0 MHz
A 16.0 MHz internal clock frequency seems a reasonable choice for
comparing the cores at the same level of technology:
Assembler functional benchmark for automotive
engine management
Benchmark limitations
This benchmark is a functional benchmark: it Is a collection of
functions to be executed in an automotive engine management
program. To implement the assembly functional benchmark for
automotive engine management correctly the "rules and details"
described in this section have to be followed carefully.
Like all benchmarks, the automotive engine management assembler
functional benchmark has some weakness that limit validity of its
results.
1. Control in a special (automotive, engine) environment is
evaluated.
The assembler functional benchmark embraces all activity to be
completed in 1 program cycle that corresponds with 1 engine stroke
of 2 ms. The benchmark execution time will be calculated as the
sum of the products of functions and their occurrence rates in 1
calculation cycle.
2. Occurrences of operation overheads are based on estimations.
3. Occurrences of functions are based on estimations.
4. Functions are implemented in assembler, not in a HLL like C.
5. Routines may contain assembler implementation errors.
Branches are evaluated separately as "branch penalties" have
considerable effect of program execution efficiency. Estimated
(branch count)*(average branch time) is added to the function
execution times.
6. Cores are evaluated at 16.0 MHz
Control in a special environment is evaluated
(automotive, engine)
The relative estimated overhead for statistics does not contribute to
the evaluation of speed performance ratios, but they have to be
considered when looking at the total execution time required /
engine stroke cycle. therefore the real total execution time is
multiplied with the statistics overhead factor (1.2*).
The core performance evaluation is based on a single specialized
case. All benchmark implementations are fractions of the automotive
engine management PCB83C552 demonstration program.
It can be advocated that the automotive engine control task gives a
good example of a typical high demanding control environment,
where many >= 16 bit calculations have to be done.
NO.
FUNCTION DESCRIPTION
OCCURRENCES
1
16x16 Multiply
2
Floating Point divide (16:16)
4
The assembler functional benchmark is not a full implementation of
a program. Arbitrary choosing location for storage of parameters in
register file or (external) memory, for instance, has for some
instruction set a considerable effect on the total execution time.
3
Add/Subtract (24)
50
4
Compare (24)
13
5
CAN cmp/mov 10*8
80
For the different core parameter storage is chosen where possible
using the core facilities to have minimum access overhead.
6
Linear Interpolation (8*8)
20
7
Program control branches
500
8
Statistics (20%)
1.2 *
Occurrences of overheads are based on
estimations
Occurrences of functions based on estimations
Occurrences is estimated on basis of experience of the automotive
group. In a real implementation of an engine controller accents may
shift. As most functions already include some "instruction mix", the
effect of changes in occurrences is limited.
Function Parameter Allocation
Most functions are very short in exec. time, so that the function
parameter data access method has great effect on the total time.
Thus it is to be considered carefully. Both XA and MCS251 SB have
register files in which variables can be stored.
Functions are implemented in assembler, not in a
HLL IikeC.
Control programs for embedded systems get larger, have to provide
more facilities and have to be realized in shorter development times.
The only way to do this is to program in a HLL like C. Efficient
C-Ianguage program implementation requires different features
from microcontrollers than assembly programs. Results of this
assembler benchmark evaluation therefore have a restricted value
for ranking microcontroller performances for future HLL applications.
For the XA and 251 SB processors, data is stored in the lower part of
register file, or in sfrs for I/O, can be accessed using
"direct"addressing, but table data, used e.g. for 3 byte compare, is
stored in "external memory". For more complex functions 16*16
multiply, Floating point division and interpolation, data is assumed to
be already in registers.
Benchmark ranking on basis of HLL like C requires good
of all the devices involved are needed. The quality of
the C-compilers really has to be the best there is : HLL
benchmarking measures not only the micro characteristics, but even
more the compiler ability to use these qualities. As these are not
16x16 Signed Multiply
~ompilers
1996 Feb 15
12
Parameters are assumed to be in registers, and the 32-bit result
written into a register pair.
490
Philips Semiconductors
Application note
XA benchmark VS. the MCS251
AN705
Divide (16:16) "floating point"
Program Control Overheads
The floating point division is entered with parameters in registers:
For a given algorithm, the "program control overhead" consisting of
a number of decisions (=branches) and subroutine calls is
independent of the instruction set used, except for cases where
functions can be replaced by complex instructions. The most
important exception cases, MPY words and Floating Point Division
are handled in this benchmark separately.
a divisor, a dividend and an "exponent" that determines the
position of the fraction point in the result.
Floating point binary 16/16 division Is a function that is normally not
included in HLL compilers as it requires separate algorithms for
exponent control and accuracy is limited. For assembler control
algorithms, floating point division can be quite efficient as it is much
faster than normal "real" number calculations (where no ''floating
point accelerator" hardware is available).
Most 16-blt cores use more pipeline stages so that taken branches
add branch time penalty for these CPU's due to pipeline flush. This
effect can be found in the branch execution time tables.
More efficient data operations and pipeline penalty of the more
complex Instruction set of 16-bit cores lead to considerable higher
relative time used for branch instructions.
Compare 24-bit variables
Note that 24-bit compare is very efficient for "real" 16-bit and 8-bit)
controllers, but for automotive engine timers, 24-bit seems a good
solution. Compare must give possibility to decide >, < or =. An
average branch is included in the function.
For service of the CAN serial interface, it is estimated that 40· (2
byte compares + branch) have to be done. Devices with 16-bit bus
assumes word access. An average branch is included in the CAN
compare function.
To incorporate the influence of branches in the benchmark the
number of branches to be included must be estimated. For byte and
bit routines, branches occur more frequent. Average branch time of
25% may be a good guess. For the automotive engine management
benchmark that executes in approx. 5000/~S (on 8051) results in
+/-1250 /~S or 625 branches. As a part of the branches already
taken account for in the compare functions the number of additional
program control branches is estimated 500 branches.
Linear Interpolation (8*8)
To estimate the average branch execution time, an estimated
relative occurrence of the branch types has to be made.
CAN move and compares
The interpolation routine is entered with 3 register parameters:
1. Table position address
Table 4. Estimated relative occurrence of the
branch types
2. X fraction
3. Y fraction
TYPE
The routine first interpolates using the X fraction the values of
F(x.x, y) between F(x,y) .... V(x+1, y) and of F(x.x, y+1) between
F(x, y+1) .... F(x+1, y+1). From F(x.x, y) and F(x.x, y+1) the value of
F(x.x, y.y) is interpolated using the fraction of y.
The table is organized as 16 linear arrays of 16 x-values, so that an
V(x,y) can be accessed with table origin address +x+ 16*y = ''Table
Position Address". In x-direction the interpolation can be done
between the ''Table Position" value and next position (+1).
Interpolation in y-direction is done by looking at ''Table Position" +
16.
Absolute Jumps
AJMP/JMP
20%
100
Subroutine calls
ACALUJSR
20%
100
Jump on
condition (rei)
Bcc/Jcc
40%
200
Jump on bit (rei)
JB/JBN
20%
100
Statistic Routine Overheads
Statistic routines are estimated as relative program overheads, only
to get an indication of the required total processing time in a real
engine management application. "Statistics" are mainly arithmetic
routines to determine table corrections. They use about 20% of the
total time.
For linear interpolation time the 2-dimensional interpolation time and
byte count are divided by 3 to include some "overhead" into linear
interpolation.
1996 Feb 15
ABSOLUTE
RELATIVE OCCURRENCE
491
Philips Semiconductors
Application note
XA benchmark vs. the MCS251
AN705
XA BENCHMARK RESULTS
The following analysis assumes worst case operation. At any point in time, only 2 bytes are available in the instruction Queue. An instruction
longer than 2 bytes requires additional code read cycle.
APPENDIX 1
XA Function Implementations
XA reference: XA User's Manual 1994 .
A1.1:
16x16 Signed Multiply
Parameters are assumed to be in registers, and the 32-bit result written into a register pair.
MUL.w
RO, R1
2 Bytes, 12 clocks
A1.2:
-->
0.75
i
result is in register pair R1:RO
~s
Floating Point 16x16 Divide:
;The floating point division is entered with parameters in registers:
;Arguments:
R4
R6
RO
Dividend (extend into R5 for 32 bits)
Divisor Mantissa
Divisor Exponent
FPDIV:
ADDS
BEQ
R6, # 0
L1
Add short format
divby Ochk - if z=1, go to L1
R5
R4, ROL
Sign extend into R5
13 position shifts (average)
DIV.d
BOV
RET
R4, R6
L1
Divide 32x16 signed
Branch on Overflow
Normal termination
MOVS
RET
R4, # -1
Overflow - Max Result
SGNXTD_AND_SHFT:
SEXT.W
ASL
DIV:
L1:
18 Bytes, 48 clocks •• > 3.0
A 1.3:
~s
Extended 32-bit subtract
R5:R4
R3:R2
SUB.w
SUBB.w
Minuend
Subtrahend
R4, R2
R5, R3
4 Bytes, 6 clocks •• > 0.375
1996 Feb 15
~s
492
Philips Semiconductors
Application note
XA benchmark VS. the MCS251
A1.4:
AN705
Compare 24·bit Variables
An average branch is included after compare.
The table data, used for 3 byte compare, is stored in "memory".
CMP:
CMP.B
BNE
R1L, R2L
L1
CMP. W
BGT
RO, mem1
LABELl
L1:
LABELl:
xx -> GT or LT or EQ
Bytes, 20 clocks (average - branch always taken and not taken) =-> 1.25
A1,5:
~s
CAN Compare and Move
Application: For service of CAN (Controller Area Network) serial Interface it is estimated that 80* (2 byte compares + branch) have to be
done. One parameter is in register, the other in internal memory.
CAN:
CMP
BGT
memO = $10H
RO, memO
LABEL
LABEL:
5 Bytes, 9 clocks (average) ==>
A1.6:
0.563
~s
Linear Interpolation
Arguments:
RO
R2
R4
R6
Table Base (assumed < 400 Hex)
Fraction 1
Fraction
Result
MOV
MOV
SUB
MULU.w
MOV.b
MOVS.b
ADD
ADD
MOV
MOV
SUB
MULU.w
MOV.b
MOVS.b
ADD
SUB
MULU.w
MOV.b
MOVS.b
ADD
RET
R2, [R5+]
RO, [R5]
RO, R2
R2, R6
ROH, ROL
ROL,#O
R2, R1
R5, #15
RO, [R5+]
R4, [R5]
R4, RO
R4, R6
ROH, ROL
ROL,#O
RO, R4
RO, R2
RO, R5
ROH, ROL
ROL,#O
R2, RO
2
2
2
2
42
42 Bytes, 98 clocks ==> 6.125 ~s
Linear Interpolation (2 d~. time I 3)
1996 Feb 15
42 bytes, 2.04
493
~s
Application note
Philips Semiconductors
AN705
XA benchmark VS. the MCS251
A 1.8:
Program Overhead
Branches are assumed taken 70% of the time, all addresses are
external. Code is assumed a run-time trace, code size cannot be
calculated,
TYPE
XA
OCCURRENCE
BYTES
100
6
600
3
300
CALL rel16
100
4
400
3
300
Bxx rel8
200
5,1
1020
2
400
JNB bit,rala
100
5.1
510
2
JMP
rel16
total cylcas
Ilsec
2,530
158.13
200
1,200
A 1.9: XA Totals
XA
FUNCTION
OC*
EXEC. TIME
IFUNCT.(lls)
MPY
12
0.75
9
2
FDIV
4
3.0
12
18
OCCURRENCE
*TIMEIFUNCT.
BYTES/FUNCTION
ADD/SUB
50
0.375
18.75
4
CMP 24b
13
1.25
16.25
16
CAN 16b
80
0.562
44.96
8
INTPLIN
20
2.04
40.8
14
BRANCH
1
158.3
1200
XA total/Jls:
including 20% statistics:
299.89 Ils
359.86 Ils
Note:
An assumption is made that XA code is in first 64K (PZ), that is, only 64K address space is used.
1996 Feb 15
494
Application note
Philips Semiconductors
XA benchmark vs. the MCS251
AN705
APPENDIX 2
MCS251 Implementations
MCS251 reference: "MCS251SB Embedded microcontroller users manual", February 1995.
All data are taken using the Kiel Development Board using a 251SB 16.0 MHz part.
A2.1:
MCS251SB 16x16 Multiply
;The MCS251 can do only unsigned multiply. So, there will be some overhead for testing
;the sign of the result.
MUL
RO,Rl
;Total: 2 bytes, 24 clocks ==> 1.5
A2.2:
Floating point division
Arguments;
WR4
WR6
WRO
~s
16:16
16-bit Dividend
16-bit Divisor Mantissa
Divisor Exponent
FPDIV:
ADD
JE
WR2, #0
L1
SGNXTD_AND_SHFT:
MOVS
WR6,R5
SHFT_LOOP:
SLL
DJNZ
WR4
DIVISION:
DIV
JB
RET
WR4,WR2
OV,L1
;NO ARITH SLL ?
;DOES 1 BIT AT A TIME
;IF OVFLW BIT IS SET
iNORMAL TERMN.
L1:
MOV
RET
WR4, #-1
Totals: 25 bytes, 482 clocks
A2.3:
=~>
30.125
~s
Minuend
Subtrahend
DRO,DR4
; Totals: 2 bytes, 10 clocks ==> 0.625
A2.4:
(not exc)
Add/Sub
ORO
DR4
SUB
OVFL - MAX RESULT
~s
Compares 24 (=32) bit
COMPARE:
MOV
MOV
CMP
JE
SJMP
CMP_EQUALS:
CMP_APPROX:
WRO,60H
WR2,50H
DRO,DR4
CMP_EQUALS
CMP_APPROX
; Totals: 12 bytes g
1996 Feb 15
imemory
; memory
54 clocks (branch average)
==> 2.375
495
~s
Philips Semiconductors
Application note
XA benchmark VS. the MCS251
A2.S:
CAN move and compares (16-bit)
COMPARE:
eMP
JNE
THERE:
WRO , memO
THERE
;memO = 40H
; 2 bytes 2 t! 8nt
1 Totals: 6 bytes, 10 clocks a=> 0.625
A2.6:
AN705
4 bytes, 6 clocks
~s
2-dimensional interpolation
;Arguments:
XARO
XAR2
XAR4
XAR6
XAR1
XARO
XARS
Table Base (assumed < 400 Hex)
Fraction 1
Fraction 2
Result
temporary1
temporary2
temporary3
WRO
Table Base (assumed < 400 Hex)
WR2
Fraction 1
WR4
Fraction 2
WR6
Result
temporary1 = XAR1
WR8
temporary2
WR10
XARO
WR12 = temporary3 = XARS
LIN_INT:
MOV
ADD
MOV
SUB
MUL
MOV
MOV
ADD
ADD
MOV
ADD
MOV
SUB
MUL
MOV
MOV
ADD
SUB
MUL
MOV
MOV
ADD
RET
WR6,@WR10
WR10, #2
WR8,@WR10
WR8,WR6
WR6,WR2
R2,R1
R1,#0
WR6, WR8
WR10, #15
WR8,@WR10
WR10, #2
WR12,@WR10
WR12,WR8
WR12,WR2
R2,R1
R1,#O
WR8,WR12
WR8,WR6
WR8,WR4
R2,R1
R1,#0
WR6,WR8
22
2
4
6
4
22
4
4
22
2
4
4
12
-->
Totals: 58 bytes, 274 clocks
17.125 ~s
Linear Interpolation (2 dtm. time I 3) - 60 bytes, 5.71 ~s
1996 Feb 15
496
Philips Semiconductors
Application note
XA benchmark vs. the MCS251
A2.7:
MCS251 Program Overhead
TYPE
OCCURRENCE
MCS251
100
8
LCALL addr16
100
JLE rei
JNB rei
addr16
LJMP
BYTES
800
4
18
1800
3
300
200
6.8
1360
2
400
100
10.8
1080
4
5040
315.0
total cylces
Ilsec
A2.8:
AN705
400
400
1500
MCS251 Totals
MCS251
FUNCTION
OC*
EXEC. TIME
IFUNCT·(IlS)
OCCURRENCE
*TIMEIFUNCT.
BYTES/FUNCTION
MPY
12
1.53
18.36
2
FDIV
4
30.125
120.6
25
ADD/SUB
50
0.641
32.05
2
CMP 24b
13
3.375
43.88
12
CAN 16b
80
1.625
130
6
INTPLN
20
6.12
122.4
60
BRANCH
MCS251 total/lls:
including 20% statistics:
1996 Feb 15
315.0
1
782.29 Ils
938.75 Ils
497
Application note
Philips Semiconductors
AN705
XA benchmark VS. the MCS251
EXECUTION TIME PERFORMANCE
Actual execution times/function
FUNCTIONS
XA
MULT
0.75
1.53 •
FPDIV
3
30.125
0.375
0.641
1.25
3.375
CAN CMP
0.562
1.625
INTPLN
2.04
6.12
158.13
315
SUB
CMP24 biT
OVERHEAD
*
251S8
Only for unsigned, extra overhead for sign needs to be added.
Normalized timings/function
FUNCTIONS
251SB
XA-G3
MULT
2.04
FPDIV
10.04
SUB
1.71
CMP24blT
2.7
CAN CMP
2.89
3
INTPLN
1.99
OVERHEAD
EXECU~ONBENCHMARK
12
251SB
10
8
§XA
6
m
251SB
4
2
XA
o
§
MULT
§
FPDIV
§
SUB
§
§
CMP24 bit
CANCMP
§
INTPLN
§
OVERHEAD
SU00690
1996 Feb 15
498
Application note
Philips Semiconductors
AN705
XA benchmark VS. the MCS251
BENCHMARK OF CODE DENSITY
Actual code density performance
FUNCTIONS
XA·G3
251SB
MULT
2
2
FPDIV
18
25
SUB
4
2
CMP24 biT
9
12
CAN CMP
5
6
INTPLN
42
60
XA·G3
251SB
Normalized w.r.t. XA
FUNCTIONS
MULT
1
FPDIV
1.39
SUB
0.5
CMP 24 biT
1.33
CAN CMP
1.2
INTPLN
1.43
CODE DENSITY BENCHMARK
1.6
1.4
2515B
1.2
XA
1.0
~
~
~
0.8
t::::=
0.6
~
a
Ell
~
~
XA
251SB
~
~
0.4
0.2
o
MULT
FPDIV
SUB
CMP 24 bit
CANCMP
INTPLN
SU00691
1996 Feb 15
499
Philips Semiconductors
Application note
XA benchmark VS. the MCS251
AN705
BM1.ASM
$include xa-g3.equ
$include bm.inc
;16x16 signed multiply
org SO
dw S8fOO,start
org S200
start:
setp_l5
MUL.w
RO, R1
rstp_15
br
start
;Totals
1996 Feb 15
2 Bytes, 12 clocks (0.75 uS)
500
Application note
Philips Semiconductors
XA benchmark VS. the MCS251
AN705
BM2.ASM
; $ listing_min
$include xa-g3.equ
$include bm. inc
org $0
dw $8fOO,start
Bytes
Clocks
org $200
;r6= divisor mantissa
;rO=divisor exponent
;r4=dividend (extended to r5 for 32-bits)
start;
movs.b
mov.b
mov.w
mov.w
call
br
r61,#2
rOl. #13
r4,#$200
r6,#$100
FPDIV
start
some value > 0
FPDIV:
setp_15
R6, # 0
ADDS
BEQ
L1
; Add short format
; divby 0 chk
if z=l, go to L1
SGNXTD_AND_SHFT:
SEXT.W R5
ASL
R4, ROL
Sign extend into R5
13 position shifts (average)
DIV:
R4, R6
DIV.d
BOV
rstp_15
L1
Divide 32x16 signed
Branch on Overflow
RET
L1:
MOVS
R4, # -1
rstp_15
RET
Overflow - Max Result
;Totals = 18 Bytes, 48 clocks (averages for branches) i.e 3.0 uS at 16.0 MHz
1996 Feb 15
501
Philips Semiconductors
Application note
XA benchmark VS. the MCS251
AN705
BM3.ASM
; $ listing_min
$include xa-g3.equ
$include bm. inc
org $0
dw S8fOO,start
Bytes
org $200
start:
MOV
MOV
MOV
MOV
R4,#$200
R5,#$210
R2,#$100
R3, #$110
;Extended 32-bit subtract
SUB
SUBB
R4, R2
R5, R3
rstp_15
br
start
;Totals= 4 Bytes and 6 clocks
1996 Feb 15
(0.375 uS) at 16.00 MHz
502
clocks
Application note
Philips Semiconductors
XA benchmark VS. the MCS251
AN705
BM4.ASM
$include xa-g3.equ
$ incl ude bm. inc
meml
equ
$20
org $0
dw $8fOO,start
;;Compare 24-bit Variables
Bytes
org $200
start:
mov
mov
mov
mov
R2L,#$40
meml,#$lOOO
RlL,#$50
RO,#$5000
one parameter is register
and one in memory
CMP:
setp_l5
CMP.B RlL, R2L
BNE
Ll
Ll:
CMP.W
BGT
RO, mem1
LABELl
average
LABELl:
xx -> GT or LT or EQ
rstp_15
br
start
;Totals= 9 Bytes and 20 clocks i.e 1.25 uS at 16.00 MHz
1996 Feb 15
503
Clocks
Application note
Philips Semiconductors
XA benchmark vs. the MCS251
AN705
BM5.ASM
$include xa-g3.equ
$include bm. inc
;Al.5
,CAN Move and Compare
;one parameter in register, the other in memory
memO
equ
$10
org $0
dw $8fOO,start
Bytes Clocks
org $200
start:
mov
mov
memO, #$100
RO,#$50
CMPR:
setp_15
CMP
RO, memO
BGT
LABEL
LABEL:
rstp_ 15
br
start
;Totals = 5 Bytes and 9 clocks (average for branches)
;or 0.563 uS at 16.00 MHz
1996 Feb 15
504
Application note
Philips Semiconductors
XA benchmark vs. the MCS251
AN705
BM6.ASM
Sinclude xa-g3.equ
$include bm.inc
mem1
equ
$20
org $0
dw $afOO,start
;Linear Interpolation
;Arguments:
R4
R6
RS
R2
Table Base (assumed < 400 Hex)
Fraction 1
Fraction
Result
org $200
start:
mov
movs
mov
mov
mov
mov.w
call
rstp_1S
br
r7,#$100
scr,#l
R5, #5120
R2,#$12F
R4,#$80
$120,#$4S
LIN_INT
;safe
ipage
start
LIN_ INT:
setp_1S
R2, [RS+]
MOV
MOV
RO, [RS]
SUB
RO, R2
MULU.w R2, R6
MOV.b
ROH, ROL
MOVS.b ROL,#O
ADD
R2, R1
ADD
RS, #1S
MOV
RO, [RS+]
MOV
R4, [RS]
R4, RO
SUB
MULU.w R4, R6
MOV.b
ROH, ROL
MOVS.b ROL,#O
ADD
RO, R4
SUB
RO, R2
MULU.w RO, RS
MOV.b
ROH, ROL
MOVS.b ROL,#O
ADD
R2, RO
RET
;Totals = 42 bytes and 98 clocks i.e 6.12S us at 16.00 MHz
;For 2-dim interpolation, exec. time = 6.13/3
2.04 us
=
1996 Feb 15
505
Philips Semiconductors
Application note
XA benchmark VS. the MCS251
AN705
BM1.AS1
$TITLE(bml.a51)
$INCLUDE (reg251sb.inc)
$INCLUDE (bm.inc)
?PR?BMI SEGMENT CODE
RSEG ?PR?BMI
16x16 '251 Multiply
test:
T_START
MUL
WRO,WR2
T_END
;stall:
sjmp
test
2 bytes, 24.5 clocks ==> 1.53 uS
;Totals:
END
1996 Feb 15
506
Philips Semiconductors
Application note
XA benchmark VS. the MCS251
AN705
BM2.AS1
$TITLE(bm2.a51)
$INCLUDE (reg251sb.inc)
SINCLUDE (bm.inc)
?PR?BM2 SEGMENT CODE
RSEG ?PR?BM2
251 Floating Point 16x16 Divide, 16:16
Note: the '251 may have a shift-by-n, but I can;t seem to find it!
If there is one, the '251 results would likely improve.
Arguments:
WR4
WR2
WRO
16-bit Dividend
16-bit Divisor Mantissa
Divisor Exponent
test:
mov
mov
mov
call
rO, #13
wr4,#200H
wr2,#100H
FPDIV
return here
stall:
jmp test
FPDIV:
wr2,#0
4
11
SGNXTD_AND_SHFT:
movs
wr6, r5
SHFT_LOOP:
sll
wr4
djnz
rO,SHFT_LOOP
DIVISION:
div
jb
T_END
ret
L1:
mov
wr4,wr2
OV,L1
;No arith sll ?
;does 1 bit at a time
:if ovflw bit is set
Normal termination
wr4,
#-1
Overflow - Max Result
T_END
ret
END
;Totals: 25 bytes, 482 clocks ==>
20.125 uS
;Note : The shift instructions are taking 10 clocks in the MCS251 part
;instead of 2 clocks as specified in the manual. No idea why!!!
;For sign divide in MCS 251, there will be a considerable overhead involved
1996 Feb 15
507
Philips Semiconductors
Application note
XA benchmark VS. the MCS251
AN705
BM3.A51
$TITLE (BM3.A51)
$INCLUDE (reg251sb.inc)
$INCLUDE (bm,inc)
?PR?BM3 SEGMENT CODE
RSEG ?PR?BM3
"
Extended 32-bit subtract
Z = X - Y
entry: DW(X) in DRO
DW(Y) in DR4
exit: DW(Z) in DRO
SUBTR:
T_START
SUB
DRO,DR4
T_END
sjmp
SUBTR
END
Totals: 2 bytes, 10.25 clocks ==> 0.641 uS at 16.00 MHz
BM4.A51
$TITLE (BM4.A51)
$INCLUDE (reg251sb.inc)
$INCLUDE (bm.inc)
?PR?BM4 SEGMENT CODE
RSEG ?PR?BM4
Compare 24-bit Variables
The '251 really uses fewer instruction for a 3 byte compare because it
test;
mov
mov
mov
mov
wr4,#4000H
wr6,#2000H
60H,wr6
50H,wr4
T_START
MOV
MOV
CMP
JE
SJMP
WRO,60H
WR2/50H
DRO,DR4
CMP_EQUALS
CMP_APPROX
compare:
Totals: 12 bytes, 54 clocks (average) ==> 3.375 uS
CMP_EQUALS:
CMP_APPROX;
T_END
sjmp
compare
END
1996 Feb 15
508
Philips Semiconductors
Application note
XA benchmark vs. the MCS251
AN705
BM5.A51
$INCLUDE (reg251sb.inc)
$INCLUDE (bm.inc)
?PR?BM5 SEGMENT CODE
RSEG ?PR?BM5
i CAN COMPARE
;1 parameter in register, the other in memory
test:
MOV
MOV
MOV
WRO,#2000H
WR4,#3000H
40H,WR4
compare:
T_START
WRO,40H
CMP
JNE
THERE
4
THERE:
end
Totals: 6 bytes, 26 clocks (average branches) ==> 1.625 uS at 16 MHz
1996 Feb 15
509
Philips Semiconductors
Application note
XA benchmark vs. the MCS251
AN705
BM6.A51
$INCLUDE (reg251sb.inc)
$INCLUDE (bm.inc)
?PR?BM6 SEGMENT CODE
RSEG ?PR?BM6
;;Linear Interpolation
;Arguments:
XARO
XAR2
XAR4
XAR6
XAR1
XARO
XAR5
Table Base (assumed < 400 Hex)
Fraction 1
Fraction 2
Result
temporary1
temporary2
temporary3
WRO
Table Base (assumed < 400 Hex)
WR2
Fraction 1
WR4
Fraction 2
WR6
Result
WRS
temporary1 = XAR1
WRlO
temporary2
XARO
WR12 = temporary3 = XAR5
test:
call
T_END
LIN_INT
return here
stall:
jmp test
LIN_INT:
T- START
MOV
ADD
WR6,@WRlO
WR10, #2
MOV
SUB
MUL
WRS,@WRlO
WRS, WR6
WR6,WR2
MOV
MOV
R2,Rl
Rl, #0
ADD
ADD
MOV
WR6, WRS
WRlO,#15
WRS,@WR10
4
ADD
WRlO,#2
4
MOV
SUB
MOL
MOV
MOV
ADD
SUB
MOL
MOV
MOV
ADD
RET
WR12,@WR10
WRl2,WRS
WR12,WR2
R2,R1
R1,#0
WRS,WRl2
WRS,WR6
WRS,WR4
R2,Rl
Rl,#O
WR6, WRS
3
4
;;
2
2
4
2
END
Totals:
1996 Feb 15
60 bytes, 294 clocks ==>1S.36 uS at 16.00 MHz
510
Application note
Philips Semiconductors
Programmable peripherals
using the PSD311 with the Philips XA
AN707
Author: Lane Hauck; with permission from WaferScale Incorporated.
©Copyright 1996 WaferScale Incorporated. This is a duplicate of WaferScale application note 045.
Introduction
and the positions and widths of the RD and WR signals. Given the
inherent speed of the XA and the capability to fine-tune its bus
timing, a word fetch using an S-bit external bus can be significantly
faster than other 16-bit CPUs that use a 16-bit external bus.
The Philips Semiconductors P51XA-G3 is the first of a new breed of
fast, inexpensive 16-bit processors designed for high performance,
high integration, and family growth. Although the P51XA (XA) family
is promoted as a modern version of the venerable 8-bit 8051, it
actually outperforms most of today's 16-bit embedded processors by
a wide margin.
But•.•
For all the reasons it makes sense to buy the "ROMless" version of
a CPU like the 8031 and attach a PSD chip for a lower system cost,
it likewise makes sense to use a PSO chip with the ROMless XA.
But there's a hitch. PS03XX chips expect to see the low 8 bits of
address and data multiplexed together, i.e., A07-Aoo. But the XA
uses a different multiplexing arrangement, as shown in Table 1.
The XA is available in the usual array of OTP, ROMless and mask
ROM versions so the cost/performance benefit that has made
WSI PS03XX chips attractive to embedded system designers
applies the to XA. A typical system can be built using the ROMless
version of the XA and a PS0311 for less cost than the OTP version
of the XA.
Table 1. Address-Data Multiplexing Schemes
Connection of a PS03XX to the XA is not straightforward, due to the
fact that the XA address and data lines are multiplexed in a manner
unlike all other CPU chips that the PSO family is designed to
support. This application note identifies the interface issues and
solves them one by one to achieve an efficient XA-PSO interface.
CONVENTIONAL
The WSI PS03XX devices can be used either with multiplexed
address/data buses or with separate address and data buses.
Multiplexed buses have the advantage that fewer PSO pins are
required for the CPU interface, leaving more PSO pins available for
general purpose system use. This application note addresses
multiplexed bus connection of the XA and the PS0311.
XA
A15
A15
A14
A14
A13
A13
A12
A12
A11
A11
07
A10
A10
06
A9
A9
05
The XA-PSD Marriage: Almost Perfect
A8
A8
04
The Philips XA designers took a radical departure from the 8051 bus
architecture by bringing out the address lines AQ-A2 on dedicated
pins. These addresses are not multiplexed, which means that they
do not require an ALE pulse to separate the address information
from the data information. This allows up to 16 byte fetches on an
8-bit external bus with only one ALE pulse - the address is latched,
the first byte is read or written, and then AO-A3 are incremented and
the subsequent bytes are accessed.
A7
07
A7
03
A6
06
A6
02
A5
05
A5
01
00
This non-multiplexing of AO-A3 also allows very quick access of
16-bit operands on an 8-bit bus, because the time required to fetch
the second byte can be as low as 20% of the normal ALE-R/W cycle
time. This innovative timing allows external 8-bit bus systems to run
nearly as fast as external 16-bit bus systems.
04
A4
03
A3
A2
02
A2
A1
01
A1
AO
00
AO
As illustrated in Table 1, data lines 00 - 07 are multiplexed with
A4 - A 11 on the XA, not with AQ-A 7 as the PSO devices expect.
The XA gives very precise control (via internal programmable
registers) of its bus timing. You can set the width of the ALE signal,
1996 Nov 04
A4
A3
511
Application note
Philips Semiconductors
Programmable peripherals
using the PSD311 with the Philips XA
AN707
standard XA HEX file will not work. For example, if the XA sends out
the address Ox1234, the EPROM location accessed within the
PSD311 will actually be Ox1423. To account for this, we need a
program that reads the XA HEX file, stores the data in memory in
address-scrambled order, and then writes a new HEX file with the
data residing at the scrambled addresses.
Basic Strategy
Given Table 1, how should the XA buses be connected to a PSD? In
principle, it is possible to scramble address and data lines, as long
as the scrambling is accounted for in the system design. For
example, if you scramble address lines connected to a RAM, the
scramble occurs for both writes and reads, so the effect is
transparent to the system. However, address scrambling is not
transparent in a device like a ROM that stores data at predetermined
locations. When a CPU sends out an address to fetch an interrupt
vector or execute one step of a program, it expects the data to be at
that absolute address, not somewhere else due to scrambled
address lines.
Appendix A is the source code for a C program to accomplish this
address translation. It was compiled on the Borland C++ compiler
Version 3.1 using the LARGE memory model. The SCRAMBLE.CPP
and SCRAMBLE.EXE files are available on the WSI BBS. The
source code is included in case you have any trouble running the
program - you can freely adapt it to suit your purposes or cater to
the whims of your particular C compiler.
The first interface consideration is that the XA data lines must be
connected to the corresponding PSD311 data lines. This dictates
that XA A4/DO-A11/D7 must be connected to PSD311 ADO-AD7 as
shown in the highlighted portion of Table 2.
To use the utility, place your XA HEX file and the SCRAMBLE.EXE
file in the same directory, and type "SCRAMBLE myfHe.hex" where
myfile.hex is the HEX file to be scrambled. The SCRAMBLE
program writes out a new file in address-scrambled order with the
same filename and the "HX2" extension - in this example,
myfile.HX2.
Table 2. XA-PSD311 Bus Connection
1/0 Port Control Registers
The PSD311 port control registers appear at byte offset 2-7 from a
programmable base address. The base address is set by the
equation you write for the CSIOP output in the Programmable
Address Decoder (PAD). If this base address is positioned at a 4
Kilobyte boundary, only the address lines A15-A12 participate in the
decoding. These addresses are not scrambled, so there is a direct
mapping of the equation you write for CSIOP and the memory space
which the block of I/O Port Control Registers inhabit.
The address lines that participate in selection of the 10 control
registers, CPU A2-AO, are scrambled: CPU AO is PSD AS, CPU Ai
is PSD A9, and CPU A2 is PSD Ai 0 (Table 2). Therefore the
register offsets are translated as shown in Table 3.
Table 3. 1/0 Port Register Mapping
CPU REGISTER OFFSET
As shown in Table 2, the upper four address lines A15-A12 are
connected straight across. Because the data lines D7-DO must line
up, the CPU address lines A11-A4 must be connected to the PSD
A7-AO. Then the remaining CPU lines A3-AO connect to PSD
A11-AS.
Ox20
3 (Port B Pin Register)
Ox30
4 (Port A Direction Register)
Ox40
5 (Port B Direction Register)
Ox50
6 (Port A Data Register)
Ox60
7 (Port B Data Register)
Ox70
Table 3 indicates that to access the Port A direction register, for
example, the byte at (BASE+Ox40) must be accessed. This might be
accomplished with the following XA code fragment, which sets PAO
and PA1 to outputs, and PA2-PA7 to inputs:
This address scramble must be accommodated for in the system
design. There are three areas to consider: the EPROM, the 10 port
control registers, and the RAM.
EPROM
XA code is usually supplied to a device programmer using a file
format called "Intel HEX", and files of this type generally have the
extension "HEX". A HEX file is supplied to the WSI PSDsoft
software, which combines it with PSD configuration information and
writes out a new hex file with an "OBJ" extension.
A standard HEX file associates data with absolute addresses.
Because of the address line scrambling shown in Table 2, a
1996 Nov 04
ACTUAL PSD ADDRESS
2 (Port A Pin Register)
512
Apins
Bpins
Adir
Bdir
PortA
PortB
BASE
equ
equ
equ
equ
equ
equ
equ
$20
$30
$40
$50
$60
$70
$COOO
mov
mov.b
rO, #BASE
[rO+Adirl, #00000011 b
; 1=out, O=in
Philips Semiconductors
Application note
Programmable peripherals
using the PSD311 with the Philips XA
AN707
XA
PSD311
~
A11/D7
1
AD7
Y
-0
~
,----
BUSW
Af5"&AI:E
A3
A11
-'SU00734
Figure 1. How to Convert A11D7 to A3D7
RAM
that the XA BUSW pin is tied low to support an 8-bit bus system at
power-on.
At first glance, it might appear that the PSD RAM is the easiest
portion of the PSD to accommodate the scrambled address lines.
After all, if the CPU writes to address XYZ, and unbeknownst to the
CPU, it instead writes to address ABC, when the CPU tries to
retrieve the data at XYZ it (again unknowingly) retrieves the data at
ABC, which is the correct data. In other words, as long as the same
scrambling occurs on a read-write device for both reads and writes,
everything is copacetic.
How do we develop the logic for driving the MUX select (S) Signal?
Using the PSD311 PAD, of course. If the RAM is to be positioned
within an 8K block, rather than the 32K block decoded by A 15 alone,
the other address lines A 14-A12 may be used in the mux control
equations. Appendix B is a PSDabellisting showing the mux select
signal as 'mux', which uses PBO. Appendix C is the PSDsoft
configuration file for the design.
A problem arises, however, because the connection shown in
Table 2 connects CPU A3 to PSD A 11, and CPU A 11 (actually
A11/D7) to PSD AD7. Why is this a problem? The RAM size in the
PSD is 2 kilobytes, requiring eleven CPU address lines AO-A 10. But
look where CPU A03 is connected - it's to PSD A 11, which is not
used in the RAM addressing. Therefore, as far as the PSD311 RAM
is concerned, it is missing CPU A03. Furthermore, the signal
connected to the PSD311 A7 pin, CPU A 11, is superfluous for RAM
access.
Figure 2 is a scope photo of ALE, WRITE, REAU and address line
AO. Figure 3 shows the timing for the MUX select signal. The
measurements for Figures 2 and 3 were taken using a 30 MHz XA
system, with the following bus timing parameters:
ALEW
WM1
WMO
OWA
OW
DRA
DR
CRA
CR
The net result is that if the connections are made exactly as shown
in Table 2, only half of the RAM would be addressable, and every
eight bytes would repeat! This would tend to make the software
people very unhappy, especially if they put data like the system
stack in the PSD RAM.
[1.5 clock ALE pulse]
[long write pulse]
[1 clock data hold time for write]
[5 clock ALE-WR cycle]
[4 clock WR cycle]
[4 clock ALE-RD cycle]
[4 clock RD cycle]
[4 clock ALE-PSEN cycle]
[4 clock PSEN cycle]
The XA listing in Appendix D gives the startup code that establishes
the above bus timing plus other chip configuration data, and then
runs a continuous loop to produce the waveforms shown in
Figures 2 and 3.
The solution is to change the CPU "A 11 ID7" signal to "A3/D7". This
change connects all eleven active CPU address lines AO-A 10 to all
eleven active PSD RAM address lines AD-Ai 0, albeit in scrambled
order (which is OK for a RAM). This is accomplished by the circuit
shown in Figure 1. A 15 is used as a RAM select signal to tell the
circuit when to do the A11-A3 swap. The Address swap should be
done for RAM accesses only, because A 11 is required for EPROM
addressing. In order to swap only the address and not the data
portion of the multiplexed A11/D7 Signal, the ALE signal is used as a
qualifier.
Figure 2 illustrates two consecutive XA bus cycles. In the first cycle,
the XA writes a 16-bit word by issuing two consecutive byte writes.
Notice that address AO changes from an odd address to an even
address midway through the cycle (between write pulses) and a
Single ALE pulse is issued for both byte writes. The PSD3XX family
devices work properly with the single ALE pulse because the
addresses A8-A 11, which are connected to XA addresses AD-A3,
are not latched in the PSD3XX. PSD devices (PSD4XXl5XX) that
latch all of the address lines would not work in this application, since
they would not pick up the address change on AO without a second
ALE pulse.
The QS3257 is a quad bi-directional multiplexor made by Quality
Semiconductor and others. In this circuit, A 15 is used as the RAM
chip select. When A 15 goes HI to select the RAM, the MUX
connects XA A3 to PSD311 AD7, but only for the ALE (address)
portion of the cycle. When ALE de-asserts, the MUX re-connects XA
A11/D7 to the PSD311 AD7 to connect the D7 signals together. The
mux must be bi-directional to allow read-write access on D7. Note
1996 Nov 04
1
1
3
3
2
3
2
3
Figure 3 shows the timing for the multiplexor select signal.
513
Application note
Philips Semiconductors
Programmable peripherals
using the PSD311 with the Philips XA
AN707
latched inside the PSD311 by the falling edge of ALE. The XA reads
the byte just before AO switches from LO to HI, which starts the
second RAM access cycle. (Remember that "AO" is actually AS in
the PSD311, which is not latched). The access time required for the
first byte read (mux-S LO to AO LO-HI transition) is about 100 nsec,
and the access time required for the second byte read (AO HI to "R[)
going HI) is about 120 nsec. Thus a PSD311-90 is a good choice for
this design.
Because the first cycle writes data to memory outside the PSD311
RAM (A 15=0), the mux select signal is high throughout the write
cycle. The second ALE pulse corresponds to a read operation from
RAM (A15=1). In this cycle the mux-S signal switches low, feeding
A3 into the AD7 pin in place of A11. A3 is latched by the falling edge
of ALE, the mux switches back to normal operation, and CPU D7 is
connected to PSD AD7 for the remainder of the read operation.
The "R[) and AO traces in Figure 2 illustrate the basic bus timing for
the PSD311. The PSD311 access time can be determined by
examining the read cycle which starts at the center division of the
scope diagram. The XA reads the first byte by issuing the address of
the first byte (AO=LO) and an ALE pulse. The RAM address is valid
about 10 nanoseconds after the mux-S signal switches LO (to
account for the 3257 mux switching time), and this address is
Ch1
lIB
5V
5V
Ch2
100ns
Performance
As the bus timing waveforms of Figures 2 and 3 demonstrate, an
S-bit bus connection of the Philips Semiconductors XA CPU and the
WSI PSD311 gives a very high performance system. Using fairly
conservative timing, a word (double byte) read or write takes
400 nanoseconds using the PSD311-30.
5V
M 100ns Ch2
\..
1.9V
SU00735
Figure 2. MUX Timing
ALE
DD-'I~~+H~H-~-H~~~~~~H++H~I
MUX-S
R2-'
AO
Ch1
l1li
5V
5V
Ch2
5V
M 100ns Ch1
J
3.4V
100ns
SU00736
Figure 3. Multiplexor Select Signal (MUX-S)
1996 Nov 04
514
Philips Semiconductors
Application note
Programmable peripherals
using the PSD311 with the Philips XA
AN707
Appendix A:
C Listing for SCRAMBLE Program
Scramble.cpp
9-12-95
Lane Hauck
This program is used to modify a standard Intel Hex file (.hex) so that it can be used to load a WaferScale PSD311 that is connected to a
Philips Semiconductors XA microprocessor. Because the XA does not multiplex AD7-ADO, but instead multiplexes A 11 D7-A4DO, the
addresses to the PSD311 must be scrambled for the data stored in the PSD311 ROM.
Typically the input hex file will be the output of a 51 XA linker.
The program reads an Intel hex file, scrambles addresses, and writes a new Intel hex file with an "hx2" extension.
Invoke with:
Outputs file:
scram .
"infile.hx2",
Scramble order:
A15 A14 A13 A12 A11 A10 A09 A08 A07 A06 A05 A04 A03 A02 A01 AOO
A15 A14 A13 A12 A07 A06 A05 A04 A03 A02 A01 AOO A11 A10 A09 A08
Hex ABCD becomes ADBC
Intel hex format:
(A) Data Record
: cc aaaa 00 [data] cs CR LF
cc
aaaa
00
data
cs
CR
LF
Colon
# data bytes (2 chars)
load addr (4 chars)
record type=data record
2 times cc chars
2's compl of checksum (binary values, not ASCII codes) includes cC,aaaa,OO,data
carriage ret
line feed
(B) End Record
: 00 aaaa 01 cs CR LF
00
aaaa
01
cs
Colon
no data bytes
program start address
indicates an END record
checksum of OO,aaaa,01
******************************************************************************************************* /
#include
#include
#include
#include
#include
#include
#define ROMSIZE 32768L
II PSD311 ROM size
II function prototypes
int
a2d(int a);
int
scramble(int inaddr) ;
II global variables
int huge inarray[ROMSIZE];
FILE
*out;
int main(int argc. char *argv[])
{
FILE
unsigned int
char
char
int
unsigned int
char
1996 Nov 04
·in;
pos,j,k,a.b.c,d,e,f,m,data;
outfilename[12];
*ptr;
ch;
count,addr,scradd,csum;
string[16]:
515
Philips Semiconductors
Application note
Programmable peripherals
using the PSD311 with the Philips XA
AN707
1/ check for two command line items: "scramble", outfilename
if (argc ! = 2)
(
printf(''\nERROR: Usage: SCRAMBLE outfile\n");
sound(100);
a little razz sound *f
delay(200);
nosoundO;
return 1;
}
r
r
open the file given in the command line *f
if ((in=fopen(argv[1j,"rt")) == NULL)
(
printf("Cannot open input file .. %s\n" ,argv[1]);
return 1;
}
printf("File-%s-openedl\n" ,argv[1]);
1/ open a file with input file name plus' .hx2' extension
strcpy(outfilename,argv[1]);
ptr=strchr(outfilename,'.');
pos=ptr-outfilename;
outfilename[++pos]='h';
outfilename[++posj='x';
outfilename[ ++pos)='2';
/I make a copy of filename
/I ptr -> '.'
II position of period
/I replace extension
if ((out=fopen(outfilename,"wt")) == NULL)
(
printf("Cannot open output file .. %s\n",outfilename);
return 1;
}
printf("File-%s-opened!\n" ,outfilename);
for 0=0; j=65 && x<=70) II A to F
x-=55;
II -65 makes it 0-5, -55 makes it 10-15
else
x-=48;
II "0" is ascii 48
return(x);
}
1996 Nov 04
517
Philips Semiconductors
Application note
Programmable peripherals
using the PSD311 with the Philips XA
AN707
Appendix B:
PSDAbel File for MUX Control Signal
module xa311
title 'xa311';
mux
pin 11;
"PSO
nAOOO
" PCQ-/CS8
pin 40;
ale,nRD,nWR
pin 13,22,2;
a15,a14,a13,a12,a11
pin 39,38,37,36,35;
esO,es1,es2,es3
node 140,141,142,143;
es4,es5,es6,es7
node 144,145,146,147;
rsO,csiop
node 124,125;
equations
=
=
=
=
esO
es1
es2
es3
es4
es5
es6
es7
rsO
csiop
la15 & la14 & la13 & la12;
la15 & la14 & la13 & a12;
la15 & la14 & a13 & la12 ;
la15 & la14 & a13 & a12;
la15 & a14 & la13 & la12;
la15 & a14 & la13 & a12;
la15 & a14 & a13 & la12;
la15 & a14 & a13 & a12;
a15 & la14 & la13 & la12;
= la15 & la14 & a13 & la12;
II
EPROM address map
=
=
=
=
=
mux = !(a15 & ale);
!nAOOO a15 & !a14 & a13 & !a12;
=
"RAM select
"IOCTL select
"a11-a3 mux control
"FPGA chip select
tesCvectors
([a 15,a14,a13,a12]-> [rsO,csiop,nAOOOJ)
[0, 0, 0, 0 )-> [0, 0, 1 );" nothing selected
[0, 0, 1, 0 ]-> [0, 1, 1 );" 10 at 2000
[1, 0, 0, 0 )-> [1, 0, 1 );" RAM at 8000
[1, 0, 1, 0 )-> [0, 0, 0);" FPGA at AOOO
tesCvectors
([a15,ale)-> [muxJ)
[0,0]->
[0, 1)->
[1, 0]->
[1, 1 ]->
[1);
[1];
[1);
[ 0 );
" mux low only for address (ALE) time
end xa311
1996 Nov 04
518
Application note
Philips Semiconductors
Programmable peripherals
using the PSD311 with the Philips XA
AN707
Appendix C:
PSDSoft Configuration File
WSI - PSDsoft Version 2.10
Output of PSD Configurations
.*.****************************************************.************************************************
PROJECT:
DEVICE:
====
Bus Interface
xa311
DATE:
PSD311 TIME:
====
Data bus width
AddresslData Mode
ALEIAS signal
ReadlWrlte signals
Memory space setting for EPROM
Security bit
Power-down capability
EPROM low power mode
Active-level of RESET signal
====
10/24/1995
18:31:39
Other Configurations
= 8-Bits
= Multiplexed
= Active High
= IWR,/RD,/PSEN
= Program space only (IPSEN)
= OFF
= OFF
= OFF
= LOW
====
Port A: ADDRESS/IO Mode
Pin
IOlAddress
CMOSIOP Output
PAO
10
CMOS
PA1
10
CMOS
PA2
10
CMOS
PA3
10
CMOS
PA4
10
CMOS
PA5
10
CMOS
PA6
10
CMOS
PA7
10
CMOS
Port B:
pin
PBO
PBi
PB2
PB3
PB4
PB5
PB6
PB7
1996 Nov 04
CMOS/OP Output
CMOS
CMOS
CMOS
CMOS
CMOS
CMOS
CMOS
CMOS
519
Philips Semiconductors
Application note
Programmable peripherals
using the PSD311 with the Philips XA
AN707
Appendix 0:
XA Listing for Figures 2 and 3
; RAMTEST.ASM
$Include xa-g3.equ
$pagewldth 132t
; PSD311 control registers
DORA
DDRB
PortA
PortB
PlnsA
PinsB
equ
equ
equ
equ
equ
equ
org
dw
$40
$50
$60
$70
$20
$30
o
$8fOO, Start
; System exceptions:
; Reset PSW, Reset vector
;===========================
; Begin initialization code.
;===========================
org
100
mov
R7,#$100
Start:
; initialize stack pointer
; SCR, System Configuration Register
76543210
0000
00
o
1
SCRval
equ
; reserved
; PT1 :PTO 00 for peri ph osc/4
; XA mode
; Page 0 mode, uses 16-bit addresses
=
00000001q
; WDCON, Watch Dog Timer Control Register
76543210
000
00
o
o
o
WDCONval equ
Prescaler divisor Is TCLK*32*2
reserved
WDRUN Is OFF
input bit WDTOF
reserved
OOOOOOOOq
; BCR, Bus Control Register
76543210
000
1
o
BCRval
equ
1996 Nov 04
001
00010001q
reserved
WAITD: disable EAlWAIT pin
Bus Disable OFF (bus enabled)
bc2:0 -> 8-bit data bus, 16-bit address bus
520
Application note
Philips Semiconductors
Programmable peripherals
using the PSD311 with the Philips XA
AN707
; Bus Timing Registers
;BTRH
BTRHval equ
76543210
11
11
11
10
11111110q
; DW=3 for 4 clock write-w/o-ALE cycle
; DWA=3 for 5 clock ALE-write cycle
; DR=3 for 4 clock read-w/o-ALE cycle
; DRA=2 for 4 clock ALE-read cycle
; BTRL
76543210
1
1
1
o
11
BTRLval equ
mov.b
mov.b
mov.b
mov.b
mov.b
mov.b
mov.b
10
11101110q
; WM1=1 for 2 clock write pulse
; WMO=1 for 1 clock write hold time
; ALEW=1 for 1.5 clock ALE width
; (reserved)
; CR=3 for 4 clock PSEN cycle
; CRA=2 for 4 clock ALE-PSEN cycle
scr,#SCRval
; (see above for bit assignments)
wdcon,#WDCONval; (see above for bit assignments)
wfeed1,#$a5
; Feed watchdog so new config takes effect.
wfeed2,#$5a
bcr,#BCRval
; (see above for bit assignments)
btrh,#BTRHval
; (see above for bit assignments)
btrl,#BTRLval
; (see above for bit assignments)
; Configure the 10 port drivers
mov.b
mov.b
mov.b
mov.b
mov.b
mov.b
mov.b
mov.b
pOcfga,#1111ii11q; Configure portO for bus(11)
pOcfgb,#1iiiiiiiq
pi cfga,#i1ii11ii q ; Configure p14-p17 for quasi-bidirec(i 0),
p1cfgb,#0000iiiiq; A3-AOforpush-pull (11).
p2cfga,#11i1i111q; Configure port2 for push-pull (11)
p2cfgb,#11i1i1iiq
p3cfga,#1111ii11 q ; Configure p35-p30 for quasi-bidirec(i 0),
p3cfgb,#11000000q; WR(p36), RD(p37) for push-pull (11).
; End of initialization, begin user code.
mov
mov
mov
mov.w
mov.w
br
wri:
r1,#$8000; RAM
r2,#$7000; not RAM
r3,#$00FF
[r2],r3
; word write to outside RAM
r3,[r1]
; word read from RAM
wr1
END
1996 Nov 04
521
Philips Semiconductors
Application note
Translating 8051 assembly code to XA
AN708
CONTENTS
1.
Introduction. . • • . • . • . . . • . • • . • • . • . • • • • . • • • • • . • • . • • 523
1.1
The questions you are probably asking
right now ................................. , 523
1.2
Overview of the translation process ........... 524
1.3 What you'll need ........................... 524
1.4
Preparation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 525
1.5
About the original application . . . . . . . . . . . . . . . .. 525
1.6 Translation decisions you must make. . . . . . . . .. 525
2.
The translation process. • • • . • • • • • . • • • • • . • • • • • • • • •
2.1
Starting translation:
Producing tentative XA source ...............
2.1.1
Systematic changes . . . .. . . . . . . . . . . ..
2.1.2 Translating.. . .. .. . . .. .. .. .. . .. .. ...
2.1.3
How the translator works ............ ,
2.1.4
Interpreting translator results .........
2.1.5 Systematic changes revisited .........
2.1.6 What you've got: '1entatlve XA source".
2.2
Continuing translation:
Producing structurally correct XA code. . . . . . . ..
2.2.1
XA startup vector (simple case) .. "....
2.2.2
XA startup and Interrupt vectors
(more complex case) ............... "
2.2.3 The XA stack .. .. .. . . .. . .. .. . .. .. ...
Basics.............................
The System Stack. . . . . .. . . . . . . . .. ...
The System Stack and Interrupts......
The User Stack .....................
Advanced Stack Issues ..............
2.2.4
Feeding the Watchdog . . . . . . . . . . . . . ..
2.2.5 Obligatory Hardware Initialization ..... ,
2.2.6
Disposing of Warning Messages ......
Details of Compatibility Instructions. . ..
2.3
The final step:
Generating debugged XA code . . . . . . . . . . . . . ..
3.
Special Topics .•••••.•••...••••.••••••.•••••...•
3.1
Trouble-making items .......................
3.2
Translating indirect references. . . . . . . . . . . . . . ..
3.2.1
Indirect reference failure .............
3.2.2
Recommendations for Indirect
References. . . . . . . . . . . . . . .. . . . . . . . ..
3.2.3
Picking a register for indirect
references .........................
1996 Dec 30
. 3.3
Translating "degenerate" 8051 source code ....
3.3.1
"Here" relative addressing .. ".........
3.3.2 Branch to "Here" ............... . . . ..
3.3.3 Branch to "Here+offsef' or "here-offset"
3.3.4
In-line strings . . . . . . . . . . . . . . . . . . . . . ..
3.3.5 General In-line args .................
3.3.6 Program Resets ....................
3.3.7 Compare trees. . . . . . . . . . . .. . .. . . . . ..
3.3.8 Code Table Fetches .................
3.3.9
Using the stack for vectored execution.
Translating ''untranslatable'' 8051 source. . . . . ..
3.4.1
PSW bit addressing .................
P2 addressing ......... '" ...... " ...
3.4.2
3.4.3 R7 use ............................
Wrap-up. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
Trouble checklist ...........................
Final Comments . . . . . . . . . . . . . . . . . . .. . . . . . ...
539
539
539
539
540
540
541
541
541
541
542
542
542
542
542
542
542
Appendix 1: Startup+lnterrupt Prototypes. • • • • • • . • • • . ••
543
527
3.4
527
527
527
528
528
529
529
3.5
3.6
3.7
530
531
Appendix 2: Compare/Branch Summary. • • • • • • • • • • • . • • • • 547
531
533
533
534
534
534
534
535
535
536
536
537
538
538
538
538
Example 1 ••••••••••••.••••..••..•.•..•••.•••••.••.••.
8051 CJNE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
XACJNE ........................................
XA CMP/Bxx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
548
548
548
548
Example 2 ••.••••.•••••••.••.•••••••••••••••••.•••••••
8051 CJNE ......................................
XA CJNE ........................................
XA CMP/Bxx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
549
549
549
549
Example 3 .••••.•••.••••••..••...•••....••..•.•••••.•.
8051 CJNE .... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
XA CJNE ........................................
XA CMP/Bxx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
550
550
550
550
Example 4 .•••.•..••••.•••••.•••.••••••.•••••••••••••.
8051 ............................ ................
XA CJNE ........................................
XA CMP/Bxx.................................. ...
551
551
551
551
538
538
522
Rev. 0.7
Application note
Philips Semiconductors
Translating 8051 assembly code to XA
AN708
difficult and you may be able to do a complete translation in a matter
of a few hours.
1. INTRODUCTION
What if ...
• You've been given the task of translating your company's flagship
80C51 application to XA; your manager gives you an XA data
manual and some diskettes-and until tomorrow to get it done?
Is translation automatic?
Not completely. While the XA does have an equivalent for every
8051 instruction, some code cannot be automatically translated.
You'll have to intervene manually.
• You're going to be translating lots and lots of 8051 code to XA
over the next few months, and you want to set up the most
effective system for doing so?
Is translation a single-pass process?
If you are really expert and you spend enough time, you can
probably translate simple to moderately complex applications in a
single pass. We don't generally recommend this approach, however,
especially when you are starting out. It's probably more productive
to iterate several times, using all the development tools available to
produce the most robust translation.
• You want to learn the XA architecture by translating an example
8051 application?
8051 SOURCE
XA SOURCE
Will XA code be bigger?
In alilikelyhood, it will be somewhat to significantly larger than the
original 8051 code. However, you'll be well-compensated by a
significant increase in generality and functionality -the XA
instructions are bigger, but they do more- so your XA code will be
much easier to maintain and expand.
Will XA code be faster?
Based on the same clock rate, XA code will execute significantly
faster than the 80C51 code.
SU00785
Figure 1.
What about 8051 and XA derivatives?
This application note is about translating "general" 8051 code to a
"generalized" XA. We'll look briefly at the essential peripheral
devices, like the UART and timers, but we're not going to look at
other subsystem-specific programs.
Relaxl Translating production 80C51 source code to debugged XA
code is very practical-although we cannot guarantee you'll make
your deadline-and this application note brings together the
information you'll need.
What about memory and I/O expansion?
We won't deal with specific memory and I/O issues, but we will
comment that the XA is flexible enough to deal with almost any kind
of memory and 1/0 interfaces. The only exception to this rule is
some very 8051-specific external interfacing which you'll very likely
need to re-engineer anyway.
We're going to generally assume that you're dealing with 80C51
source code you've never seen before.
We will also assume you're a reasonably skilled 80C51 programmer
and that you've already studied the basics of XA architecture.
We're also going to assume you're able to use Windows™ in
general, and you've familiarized yourself with the XA development
tools. Although using the simulator or emulator is a key part of
verifying your translations, teaching you to use these is beyond the
scope of this note.
What's the standard for 8051 code syntax?
The code translater expects the MetaLink ASM51 assembler syntax.
This assembler Is available for free on the Philips BBS, and it has
become the de-facto standard for 8051 and derivatives. If your 8051
source code is based on a different standard, we'll have some
suggestions.
Source code for the examples may be found on the Philips ftp site.
1.1
The questions you are probably asking
right now
What's special about translating your own 8051 code?
As you'll see below, we generally recommend that you deal with
mechanical translation issues first and worry about structural
changes later. If you're translating 8051 code that's very familiar to
you, it is very easy to get distracted by making structural changes
too early: you know the constraints of the original design and you'll
likely be eager to overcome them by using the significantly greater
freedom of the XA architecture.
How is this application note organized?
We're going to describe a stepwise procedure for translating 80C51
code to working XA code, concentrating mostly on
hardware-independent issues. Later on, we'll deal with some very
specific issues In detail (section 3: Special Topics), so we
recommend you read through all this material before starting to do
any translation work.
What Is the biggest difference between 8051 and XA afffecting
the translation process?
Most 8051 programmers building complex applications spend a
significant amount of time reconciling application requirements to
8051 architectural capabilities. When you translate this code to the
XA, you'll find many familiar architectural concepts but far fewer
constraints on them.
How long will it take to translate an 8051 application?
That depends on the application and the code. We've seen code
from experienced 8051 programmers who've used every
conceivable 8051 coding trick to squeeze out the last drop of
functionality. We expect this kind of 8051 code will be the most
difficult, especially when the code uses target hardware-specific
tricks. On the other hand, some 8051 code, especially small
applications designed to be easily maintainable, aren't particularly
.Windows Is a Iradmard of Microsoft. Inc.
1996 Dec 30
523
Philips Semiconductors
Application note
Translating 8051 assembly code to XA
8051 SOURCE
AN708
2
3
4
XASOURCE
XA SOURCE
XASOURCE
SU00786
Figure 20 Translation Process
1.2
Overview of the translation process
work with the translator, you'll have tentative XA source. You'll edit
and assemble the tentative XA source, you'll have structurally
correct XA source code. You'll run the simulator or emulator and edit
and reassemble until your application is proven.
Let's take a more detailed look at the overall translation process
(Figure 2). There are four distinct source versions:
1. The working 8051 source (a copy, not your original source, which
you must preserve).
In a few cases, especially with complex applications, you may find it
useful to return to an earlier source version. For example, you may
encounter some translation Issues while debugging your XA source
that are best handled by returning'to the working 8051 source and
repeating the intervening steps. Because of the number of source
versions in this process and the potential for returning to an earlier
step, we've found that careful organization of the translation process
can be very helpful.
2. A tentative translation of the original 8051 source into XA
assembly.
3. The structurally correct XA source.
4. The debugged XA source.
The method of producing each of these source versions is similar to
the standard program development cycle, with a single additional
step, as shown in Figure 3:
~~~~~~
_
I.
TRANSLATE,
OR ASSEMBLE,
OR EXECUTE
-
ERRORS?
~
1.3 What you'll need
Here's a checklist of what you need to get started translating your
8051 application to XA:
The XA Data Handbook (IC25 or its successor); especially
Section 2, Chapter 9 and AN704.
o
o An 8051 reference, preferably one that's familiar to you.
COMPLETE
o A Windows-based computer
o The Macraigor XA Development Environment, which includes a
SU00787
translator, an assembler, a simulator, and an optional single-chip
XA emulator.
Figure 3.
o The MetaLink ASM51 8051 assembler and its manual, both
available on the Philips BSS
We recommend that you first make a copy of your original 8051
source. We'll call this the ''working'' 8051 source. In some cases
we've found it convenient to make changes to this source, in
particular, when we've found ourselves re-running the translator
multiple times for particularly difficult source programs. Be sure to
protect your original 8051 source carefully; this is so important we'll
remind you to do so several times.
o Your favorite word processor and text utilities.
o Any and all documentation about the original application. An
You can see that the edit-assemble cycle and the
edit-assemble-execute is preceded by an edit-translate cycle. As we
will show below, this extra step is easy. After you complete your
o DeSign specs for your XA target, particularly the memory map.
1996 Dec 30
o Macraigor Development hardware is helpful, but optional
as-implemented memory map is invaluable. (If you don't have
one, we recommend you immediately prepare one by examining
the original source code).
524
Application note
Philips Semiconductors
AN708
Translating 8051 assembly code to XA
1.4
For example, we've been successful translating a moderately
complex application, TinyBASIC, without really attempting to
understand how the code works, rather, by just attending to the
mechanical translation details.
Preparation
Read this application note thoroughly. Section 3, "Special Topics"
describes some specific problems you may encounter, and you
should have these in mind from the start. Then scan through your
original 80C51 source to see how many potential translation issues
you can identify.
Ultimately, of course, it is up to you how much you need to know
about the original application before doing the translation. In the
ideal case, you already have full and clear documentation of your
application's algorithm (what it does) and the implementation (hOW it
does it). ,In practice, unfortunately, you may have to re-develop this
documentation or translate without it.
We recommend that you prepare by choosing a file labeling system
to distinguish among the original 8051 source, intermediate
translations. and the final XA source file. We have found the
following scheme to be useful:
app.asm
the original 80C51 source file (Not to be modified!)
tapp.asm
the working 80C51 source, which may be modified
tapp.1
an intermediate translation
1,6 Translation decisions you must make
Although the translator does a good job, there will be some grey
areas where you will have to decide about specific issues, and
possibly make manual changes to the translated code. Here are the
issues:
tapp.2
tapp.xa
Retaining or Replacing 80C51-like instructions
the current XA assembler source
The XA instruction set includes a number of instructions for
compatibility with 80C51 , even though the XA architecture provides
improved alternatives.
Note that the translator identifies 80C51 source files and activates
the 8051 to XA Translator option in the LANGUAGES menu
whenever you use a file with a ".asm" extension. The default
extension for translated files is ".xa". You may want to keep copies
of intermediate translations or originals.
Instructions like "JMP [A+DPTR]", for example, are supported in the
XA, but the full functionality may not translate directly. The translator
leaves a warning to mark each use of one of these instructions.
You'll either have to check each case carefully and make
adjustments to make sure the translated code will function correctly,
or replace the entire construction with one or more native XA
instructions.
Choose a method that is comfortable for you and that's consistent
with the size of the job. This seems like a trivial matter, but we've
found that a little extra bookkeeping care can make the translating
job much easier.
Second, we recommend that you make sure that all your tools are
installed and are functional before attempting translation:
In general, we recommend you replace these 80C51-style
instructions with native XA instructions whenever it is practical. We'll
give you more information about this issue in following sections.
1. Assemble your original source file with the Metalink assembler;
note its assembled size.
Recodlng obscure but functional 80C51-style coding
2. Assemble and simulate one of the examples that accompany the
XA tools.
There is an additional class of 80C51 instructions and constructions
that translate directly into XA instructions. These Instructions
generate no warning messages from the translator because the
resulting XA code, while often obscure, will function correctly. One
example is a common 80C51 compare-tree construction.
3. Translate one of the example 8051 files.
In other words, we suggest you are comfortable with, and sure of,
your tools before you start actual translation work.
1.5
We can't make a general recommendation in this case, but we'll
admit our bias towards recodlng into native XA code whenever
possible. The following sections will give you more information on
this issue.
About the original application
Note what we haven't suggested: a detailed examination of the
original application.
We're not sure this is necessary!
Using Native versus Compatibility Mode on the XA
Intense study of someone else's code can be so incredibly boring or
discouraging that you might balk at going through with the
translation. You'll have to determine in each case exactly how much
detailed knowledge of the application is actually necessary to do a
translation. As we've already mentioned, it almost all cases you
should start with a memory map of the original application, but it isn't
always necessary to have everything documented.
The XA System Configuration Register (SCR) CM bit controls the
8051 Compatibility Mode. At reset, SCR.CM is set to zero and the
XA operates in "native" XA mode. Setting SCR.CM to "1" makes the
XA register model and indirect register addressing mirrors the
80C51 model.
The effects of the CM bit setting are given in Table 1.
Table 1,
FEATURE
IN NATIVE MODE:
CM=O
IN COMPATIBILITY MODE:
CM=1
registers (RO, R1 .,,)
Accessible only as registers
Accessible as registers or as the first 32 bytes of data memory.
RO, R1 indirect addressing
uses 16-bit pointers: RO. R1
Uses 8-bit pointers: ROL, ROH
1996 Dec 30
525
Philips Semiconductors
Application note
Translating 8051 assembly code to XA
In other words, if you do nothing, the XA will operate in native mode.
The first 32 bytes of data memory will be accessible only as such
and won't be overlaid by registers. You'll be able to use rO and r1
(and any other register) as a 16-bit pOinter.
In practice, the deciding factor for choosing is, in our experience, the
degree of memory map rearrangement you do and the resulting
effects on indirect addressing In the application. Specifically: if your
XA memory map requires the use of 16-bit pOinters, you'll need to
use native mode.
If you insert an instruction that sets SCR.CM=1, translated code that
depends on the overlaid memory and register mapping shown in
Table 2 will continue to work, and both rO and r1 will function as 8 bit
indirect pOinters. This maintains "pure" code compatibility for
translation but effectively wastes 32 bytes of internal RAM data
memory.
Here's a list of factors to consider:
• USing compatability mode ....
- translated code is more likely to run correctly with minimal
manual intervention
- preserves register assignments
- preserves direct addressing to registers commonly used in
8051 programs
Table 2.
ORIGINAL
8051
REFERENCE
TRANSLATED
XA
REFERENCE
OVERLAID
DATA MEMORY
ADDRESS
RO (RBO)
ROI (RBO)
R1 (RBO)
ROh (RBO)
1
R2 (RBO)
R11 (RBO)
2
R3 (RBO)
R1h (RBO)
3
R7 (RBO)
R3h (RBO)
7
RO(RB1)
ROI (RB1)
8
• Using native mode ...
-
0
The System Configuration Register (SCR) PZ bit controls the XNs
Page 0 mode. At reset, SCR.PZ is set to "0" and the XA uses
standard 24-bit XA addressing. If SCR.PZ is set to "1", the XA
maintains only 16 bits of address data throughout.
...
•
R5 (RB3)
R2h (RB3)
29
R31 (RB3)
30
R7 (RB3)
R3h (RB3)
31
For XA targets implementing a memory space of 64K or less, using
Page 0 mode can result in some resource savings because the XA
will only PUSH and POP 16-bit values for subroutine calls and
returns, respectively, insread of 32-bits in standard operation. See
the XA User Guide sections 4.3.1 and 4.3.2 for more details
RB = Register Bank.
Your choice of 24-bit versus 16-bit addressing has no direct effect
on the translation process, but you should be generally aware of the
implications of each alternative. We've chosen to set Page 0 mode
in our start-up code example (Appendix 1).
NOTE: The setting of SCR.CM has no effect on instructions
labeled "... included for 80C51 compatibility", e.g., "JMP [A+DPTR]"
These instructions function as described in the XA User Guide no
matter what the setting of SCR.CM.
What are the pros and cons of compatability mode versus
native mode?
By design, enabling compatability mode produces the greatest
chance of translated code working with the least necessity of
manual intervention.
1996 Dec 30
is sometimes necessary due to changes In the memory map
supports cleaner, more efficient XA code
generally requires more manual changes to the translated code
frees up 32 bytes of on-chip RAM
Using 24·blt versus 16·bit ("Page 0") addressing
You can save some data and hardware resources if you choose
i6-bit addressing; clearly this option is available only to applications
with addressing requirements below 64K bytes.
...
R6 (RB3)
AN708
526
Application note
Philips Semiconductors
AN708
Translating 8051 assembly code to XA
2.
THE TRANSLATION PROCESS
8051 SOURCE
XA SOURCE
XASOURCE
XASOURCE
SU00788
Figure 4.
8051 SOURCE
SYSTEMATIC
CHANGES
TRANSLATION
XA SOURCE
TEXTOR
STREAM
EDITOR
~~
TRANSLATOR
SYST~~T0?R~~~NGES _ _ _ _N-'O_ _ _ _...... RUN TRANSLATOR _
YES
1. . ____--I~
_
/.
/'
XASOURCE
TRANSLATION
ERR10RS?
.
YES
EDIT 8051
SOURCE
SU00789A
Figure 5.
2.1
Starting translation:
Producing tentative XA source
may change during this process-and you'll lose valuable
information.
Let's get started by looking at the process of turning 8051 source
into tentative XA source code. Figure 5 tells the story. You'll edit,
translate, and repeat if necessary until the translator gives no error
messages. Don't worry about warnings placed in the translated
source code just yet.
2.1.1
2.1.2 Translating
Translating is the soul of simplicity: the XA Development
Environment recognizes any file with a ".asm" file as being possibly
8051 assembly source.
1. Open the source file (for example, "try. asm" )
Systematic changes
2. Select "Languages --> 8051 to XA Translator."
We've chosen the term "systematic changes" to describe anything
you might do to change the 8051 source overall.
3. Respond "Yes" or "No" as you prefer to the query "Include 8051
Code in Output?"
Do you need to make systematic changes at this stage? The answer
depends on the assembler you've been using, the complexity of the
code, and the degree to which special directives and other
assembler features are present in the source code.
4. The XA translator...
a. translates your file, leaving it unchanged,
b. makes a new XA source file with the same name and an
" . xa" extension ("try. xa"), and
c. automatically saves a copy of the XA source file.
At this point, we'll give you an easy answer that will serve for most
purposes: "no". Just go ahead and translate. You'll find out in
subsequent steps if this answer was right.
If you choose to include 8051 code in the translator output you'll see
the original 8051 instruction, commented out, adjacent to the
corresponding XA instruction. This can be very helpful in some
cases but the output file can be difficult to read.
We might as well remind you right now: Whatever you do, make
sure you keep a protected copy of your original 8051 source
code somewhere. It is all too easy to make modifications to the
original source file-as you will see, the working 8051 source file
1996 Dec 30
We recommend standardizing on the ".xa" extension for all XA
assembly source files to distinguish them clearly.
527
Application note
Philips Semiconductors
Translating 8051 assembly code to XA
2.1.3
AN708
How the translator works
The translator looks at each input source line individually. The
translator looks at each source line and attempts to identify it as
either a) translatable 8051 code or b) anything else.
2.1.4 Interpreting translator results
If the translator sees 80C51 code, it translates it according to the
rules described in Chapter 9 of the XA Usef Guide. The XA was
designed to have direct correspondences with 80C51 whenever
possible, and most of the translations are probably what you'd
expect. The register translations are so critical that we want to
restate them here (Figure 6).
The translator always inserts a line that controls the pagewidth, in
order to produce generally convenient displays within source and
listing windows:
In most cases, the translator will run without error, and you'll see an
open window with the translated source file. This file will contain
inserted lines and warnings.
$pagewidth 132t
If necessary, the translator inserts an "include" reference, as follows,
$include XA-G3.EQU
All other source lines-that is, anything other than translatable 8051
code-are passed through the translator and appear in the output
file unchanged.
so that any XA register or other reference it produced in translated
code is correctly resolved. (If no such references are made, this
"include" directive is omitted.) The default location of this file is the
PROGRAM subdirectory of the XA Development Tools. You may
want to use a different file-for example, for a different XA
derivative-or use your own copy of this file.
The translator doesn't attempt to "understand" what the code is
doing; in specific, it doesn't look at more than one source file line or
more than one actual instruction at a time. However, the translator
warns you when some specific mUlti-line constructs might go wrong
after translation.
SP
R7
R7H
R6
R6H
RS
R5H
R4
R4H
R3
R3H
R2
R2H
R1
R1H
RO
ROH
The translator inserts warnings adjacent to source lines that are
translated correctly, but which might not produce the desired results
without further intervention. We will take a look at resolving these
warnings later in this document.
R7L
The translator displays any serious errors in a standard dialog box.
What produces translator errors? In general, when the translator
encounters a source line containing what looks like translatable
8051 code, it attempts to do the translation. If the translator finds
something about the code that's not expected, it will flag an error for
this line.
R5L
Fortunately, translator errors are very rare and occur only if the
translator finds something entirely unexpected, like source code for
an entirely different processor. You'll have to take a look at each
error message and decide what to do about them on a case-by-case
basis. A large number of errors probably means something very
basic is wrong.
. . =80C51
SUOO790
Figure 6.
1996 Dec 30
528
Philips Semiconductors
Application note
Translating 8051 assembly code to XA
2.1.5
Systematic changes revisited
AN708
working source. Compare the syntax of your source to that
described in the XA Development environment ("Help" ~ "XA
Assembler).
Let's revisit the issue of systematic changes.
You'll need to make systematic changes to your original 8051
source file whenever there are consistent differences between your
source and the expectations of the XA Development Tools,
especially the translator.
• Include files
The translator doesn't handle all forms of "include" and mayor
may not pass through a given include file directive. It may be
practical in some cases to remove "include" instances and
insert the "include" file contents. Otherwise, you may change
the existing syntax in your working 8051 source file to one of
the alternatives accepted by the XA tools:
We have found that the easiest way to discover the need for
systematic changes is to proceed as if they are not necessary.
If you see significant numbers of similar translator warning
messages or XA assembler errors, consider changing your 8051
working source to avoid them.
#include file.ext
or
NOTE: We are suggesting you change the 8051 source file to
avoid problems downstream in the translation process. It is for this
reason that we use the label ''working 8051 source" and we remind
you to carefully preserve your original 8051 source file.
$include file.ext
and translate the files individually.
Once more we will remind you to keep a protected copy of the
80C51 original source!
If systematic changes are necessary, you may want to work outside
the XA Development Environment in order to use the familar, and
likely more advanced, features of your favorite text editor. We've
found using a UNIXTM-style stream editor such as sed or awk can
be very useful, especially in the case of large-scale syntax changes
to big source files. It is well beyond the scope of this application note
to describe such programs.
2,1.6
What you've got: "tentative XA source"
After you've taken care of translator warnings and any errors, the
output file you've got is "tentative" because:
• It doesn't have the proper XA startup vector or any other XA
interrupt vector.
We've found the following to require attention:
• It uses an 8051-style stack .
• 8051 Source code intended for some assembler other than
MetaLink
., It may contain warning messages.
If you discover large numbers of translation warnings due to
unrecognized directives, consider scanning your 8051 working
source for directives. Compare them to the XA Development
Environment Assembler (see "Help" ~ "XA Assembler"~
"Directives") and make indicated changes. Some directives
don't have equivalents in the XA tools; comment these out or
remove them.
• It might contain illegal or unrecognizable syntax with respect to
the XA assembler.
• No comments contain anything about XA implementation.
• If you chose to have 8051 instructions included in the output,
there are lots of lines you'll probably want to remove.
If you see large number of XA assembler errors due to syntax
errors, you may have to make significant changes to your
1996 Dec 30
We'll see how to resolve these problems in the next section.
529
Application note
Philips Semiconductors
AN708
Translating 8051 assembly code to XA
8051 SOURCE
XASOURCE
XASOURCE
XASOURCE
SU00791
Figure 7.
MANUAL
TRANSLATION
XASOURCE
TRANSLATION
XASOURCE
EDITOR
XASOURCE
XA ASSEMBLER
REQUIRED CHANGES;
v::1""
ASSEMBLY
TRANS:T:~RWARNINGS
i"UNXAASSEMBLE" -
s5B~6E
. .f--------------....J-
A
SU00792A
Figure 8.
2.2
Continuing translation:
Producing structurally correct XA code
Later on in this section we will offer a few comments on the
remaining issues of tentative XA source: resolving illegal or
unrecognizable XA syntax, adding comments about the XA
implementation, and removing 8051 instruction comments optionally
included by the translator.
The next step of translation, producing structurally correct XA code
from tentative XA code, is summarized in Figure 8.
The diagram Item "required changes; translator warnings" denotes
the following:
Although this application note is targeted to dealing with software
translation Issues, we'll also cover the key areas of hardware
preparation for real XA hardware. If you are just Simulating for now,
please feel free to maintain code for real hardware; it won't have any
effect on the simulator, and you'll be prepared for eventual use on a
realXA.
• Installing an XA startup vector and any other required XA interrupt
vectors.
• Implementing an XA stack.
• Removing or resolving warning messages.
1996 Dec 30
530
Philips Semiconductors
Application note
Translating 8051 assembly code to XA
2.2.1
AN708
XA startup vector (simple case)
Practiced 8051 programmers usually have a standard program template readily available. In its essence-ignoring interrupts-it looks
something like this:
org 0
ljmp
start
first executed instruction
org 040h
start:
SP,#stack_bottom
mov
; initialization code
If you've studied the XA, you know that the equivalent minimum startup looks like this:
org 0
dw
8FOOH
initial PSW
dw
start
reset interrupt vector
org 0120h
start:
SP,#stack_top
mov
; initialization code
(See Appendix 2 for a complete listing of a standard XA initialization template.)
As you can see, the XA startup is based on a pair of word vectors at the beginning of code memory, the first taken as the initial Program Status
Word (PSW) value, and the second as the initial Program Counter (PC). There is no way for the XA Development Environment translator to
automatically translate the 80C51 startup to the XA form, so you'll have to do it yourself: Replace the initial jump with two "dw" define words, the
first setting the initial PSW (8fOOH is the recommended default) and the second containing the address of the first instruction to execute.
Use this code as a guide for simple cases, such as evaluating code using the XA Development Environment XA simulator. The next section
discusses more complex cases. We'll take up the differences in stack initialization further below.
NOTE:
2.2.2
It may be useful to make these changes to your working 8051 source file, especially if you return to the translation step more than once.
XA startup and interrupt vectors (more complex case)
Practiced 8051 programmers usually have a vector template for simple applications that looks like the following:
CSEG
org 0
ljmp start
Reset Vector
org 03H
reti
EXT 0 interrupt: not used
org OBH
reti
Timer 0 interrupt: not used
org 13H
reti
EXTI interrupt: not used
org IBH
reti
Timer 1 interrupt: not used
org 23H
ljmp SerialISR
Serial port interrupt
org 40H
start:
mov
SP,#stack_bottom
; initialization code
(This example includes all the interrupt vectors on the core 80C51; derivates differ.)
1996 Dec 30
531
Philips Semiconductors
Application note
Translating 8051 assembly code to XA
AN708
Drawing again on the complete startup template given in Appendix 2, here's an expanded template that includes the key interrupt vectors for the
XA:
dw
dw
dw
dw
dw
dw
08fOOH,
08fOOH,
08fOOH,
08fOOH,
08fOOH,
08fOOH,
Start
BreakVec
TraceVec
StkOvfVec
DivOvec
URetiVec
org
040H
(TRAP 0-15 exceptions omitted)
org
dw
dw
dw
dw
dw
080H
08900H, ExtlntOVec
08900H, TimerOVec
08900, ExtlntlVec
08900H, TimerlVec
08900H, Timer2Vec
Event interrupts:
external interrupt
timer 0 interrupt
external interrupt
timer 1 interrupt
timer 2 interrupt
org
dw
dw
dw
dw
090H
08900H,
08900H,
08900H,
08900H,
Serial
Serial
Serial
Serial
org
0100H
(Software interrupts omitted)
org
00120H
Start of executable code area.
RxdOVec
TxdOVec
RxdlVec
TxdlVec
Reset PSW, vector
breakpoint PSW, vector
trace PSW, vector
stack overflow PSW, vector
divide by 0 PSW, vector
user reti PSW, vector
port 0 receive
port 0 transmit
port 1 receive
port
transmit
BreakVec:
TraceVec:
StkOvfVec:
DivOVec:
URetiVec:
ExtlntOVec:
TimerOVec:
ExtlntlVec:
TimerlVec:
Timer2Vec:
RxdOVec:
TxdOVec:
RxdlVec:
TxdlVec:
reti
Location to route interrupts/exceptions with no specific
handler code. This could prevent lockup particularly due
to an unexpected exception such as stack overflow if
there was no vector or handler whatsoever.
(labels for traps and software interrupts omitted)
i===================================================== =================
org
Beginning of initialization code.
Start:
mov
1996 Dec 30
R7, #0100H
System exception interrupts:
initialize stack pointer top
532
Philips Semiconductors
Application note
Translating 8051 assembly code to XA
For brevity, we've omitted the traps and software interrupts and their
corresponding labels for the "reti tie-off" found in the original, but
we'd encourage you to include them in all code destined for
execution on an actual XA target.
AN708
You should already know the differences between the 8051 and the
XA stacks:
• The 8051 stack grows upward, while the XA stack grows
downward.
The purpose of this comparison is to highlight the differences in
interrupt setup when translating an application between the 80C51
and the XA.
• The 8051 stack contains bytes, while the XA stack contains
words.
• The 8051 has only one stack, the XA has a System and a
User Stack.
We want you to notice that the XA provides extensive support of
exception, trap, and event interrupt mechanisms. Tying off unused
interrupts takes a lot more "bookkeeping", but you'll recognize that
this cost is well worthwhile when you start using these.
• The 8051 stack must be located in on-board memory, while the
XA System Stack must be in the first 64K of RAM, on-chip or off.
2.2.3 The XA stack
• The XA user stack may be located in any memory region.
We recommend that the first instruction executed in any XA
application be a stack initialization; even if this does no more than
duplicate the default initialization (completely sufficient for small test
programs).
Because 8051 stack space is generally at a premium, stack
al/ocation in 8051 applications is usually done with great care. With
any luck, your original 8051 application documentation will describe
the stack al/ocation in detail, including the expected "high-water
mark" of the maximum expected usage. If not, we encourage you to
spend a little time to study and characterize how the stack is
implemented.
Odds are that the translator will find an 80C51 stack initialization and
translate it, but you'll have to manually locate any such code and
replace it with XA-specific initialization, if for no other reason that the
byte-sized 80C51 stack initialization will be translated to a byte
operation; the translator doesn't handle SP as a special case.
Fortunately, stack allocation is much easier on the XA because
stack space and placement is much less restricted.
Converting from an 8051-style stack to an XA stack is fairly easy if
you understand all the issues. Let's take a look at them, in order of
increasing complexity:
in simple cases-with simple subroutine calls/returns and no
interrupts-you'll be able to transform the 8051 stack allocation to a
first approximation by using the following steps:
Basics
In all but the most trivial 8051 applications you'll most certainly see
an instruction like this
mov
1. Use only the System Stack.
2. Declare the top of the stack in the XA at a specific RAM address.
SP, #stackbottom
3. Allocate as many words in the XA as the original application
allocates bytes.
In other words, it may be entirely sufficient to use code like this:
ENDRAM
EQU OFFFFh
STACKSIZE
EQU 200h
ISTACKPTR
EQU ENDRAM-STACKSIZE - 1
. mov
1996 Dec 30
last cell
in bytes
initial value
SP,ISTACKPTR
recommended 1st initialization
533
Application note
Philips Semiconductors
AN708
Translating 8051 assembly code to XA
As the XA initializes the System Stack Pointer to 100H, that is,
within on-chip memory space for all XA devices, you may be able to
use the default setting for small applications. Even so, we
recommend that you explicitly document the stack allocation for the
translated application and explicitly set the stack pOinter. Please
also note that the XA provides a stack overflow exception if the
stack reaches 80H. It's often a good idea to add an interrupt handler
for this overflow exception so that your application can recover from
stack overflow.
The User Stack
What about the User Stack POinter? We recommend that you don't
worry about it for the purposes of the vast majority of translated
applications. Simply make sure that PSW.SM is always set. R7 will
always contain the System Stack Pointer.
Of course, the XA offers support for multitasking and, for this
purpose, you'll need to know how to use User and Supervisor Mode
functionality. See Chapter 5 of the XA User Manual, and look for
forthcoming applications notes on general multiasking support and
running multiple vlrtual8051's on a single XA.
That said, we'll warn you that more complex 8051 applications may
require considerably more special handling with respect to stack
operation translation. We'll take a look at the next more complex
case-handling interrupts-in a following section and then take a
look at special topics later on.
Advanced Stack Issues
Clever uses of the 8051 stack have been a key feature of that
architecture. We can think of a number of schemes you may have to
recognize and handle, as well as some XA-specific issues:
The System Stack
• Multiple 8051 Stacks
Some applications demand multiple stacks, and we've seen some
translation problems handling these. Fortunately, these generally
involve schemes in which registers other than the 8051 SP is
used for stack pOinters-we have generally seen the ·SP stack"
used only for interrupts In some applications-and so these can
be handled routinely.
We're going to assume that you're translating a single-threaded
8051 application to the XA for the purposes of this application note;
translating a multitasked 8051 application Is beyond the scope of
this application note.
In most cases, Philips recommends you operate the XA Initially in
System Mode (see the XA User Guide, section 4.2.4, for example)
and we'll extend that recommendation here to suggest that most
translated applications be operated entirely in System Mode.
• 16-bit 8051 Stacks
Likewise, some 8051 applications require 16 bit stacks, and the
ones we've seen also handle these outside the scope of the
hardware SP.
You set System Mode by setting the SM bit in the initial PSW. If you
do this, your application will have full access to all XA registers,
instructions, and memory spaces. Further, you'll have only one stack
and one stack pointer, and you can ignore any discussion of the
User Stack Pointer. R7 will always contain the System Stack
Pointer, which you can simply call "the stack pointer" or SP.
Throughout your code, you need to take care that no operation you
perform sets PSW.SM to zero.
• Special PSW handling within interrupt service routines (ISRs)
When you are translating an 8051 ISR, it is almost certain you'll
see a "PUSH PSW" somewhere near the beginning and a
matching "POP PSW'-or some equivalents-near the end.
Unlike the XA, 8051 interrupt processing doesn't automatically
save and restore the PSW value, and the vast majority of
applications will require that the foreground's PSW be unchanged
through interrupt service.
Interrupts add another level of complexity to the picture. When
handling interrupts you must "confirm" the System Mode setting of
PSW.SM by making sure that the new PSW portion of each interrupt
vector contains a value that will result in PSW.SM = 1. In other
words, to preserve System Mode, make sure that all values of PSW
specified in interrupt vectors leave PSW.SM=O.
However, it is remotely possible that an 8051 application breaks
this general rule and depends on an altered value of PSW on
return from an ISR.
Here's a somewhat contrived example: an application with no
arithmetic processing whatsoever and extreme storage
requirements might use the CY flag to indicate the completion of
some ISR-processed event to a foreground processing loop.
The System Stack and Interrupts
Let's review how interrupts are serviced: As you can see in the XA
User Manual, the address of the next instruction and PSW in force
at the instant of the interrupt are saved on the System Stack.
(All interrupts-exception interrupts, event interrupts, software
interrupts, and trap interrupts-use the System Stack exclusively.)
The new value of the Program Counter (PC) and the new PSW are
taken from the code-memory vector associated with that interrupt.
Normally, you'll use the RETI instruction at the conclusion of an
Interrupt service routine to restore the Interrupted program flow and
Program Status.
The translator can't detect this special method and certainly can't
defeat the standard interrupt processing peformed by the XA
hardware, saving and restoring the PSW, so you'll have to modify
the code manually to make this algorithm work. Fortunately, XA
storage Is likely to be much more plentiful and you'll probably be
able to use a much more conventional technique.
By the way, you can manually remove the PUSH/POP pair from
the translated code if you want.
Unlike the 8051, the XA PSW value is automatically saved any time
an Interrupt occurs, so it is unnecessary to save the PSW explicitly.
(This means you can save a few bytes In translated programs where
the original 8051 code did the save and restore by manually
removing the explicit PUSH PSW and POP PSW instructions.)
• Stacks extending over phYSical address boundaries
80C51 stacks necessarily reside within the IRAM memory space.
XA stacks may be In IRAM, In external RAM, or --as the stack
grows downward across the boundary-- in both. There is no
special consideration for the placement of the stack with respect
to the internal/external boundary, but you should be aware that
access speed may be different for the two types of memory.
As described in the XA User Guide, section 4.3.2, the amount of
information processed on the stack during interrupts varies between
the default 24-bit XA operation mode and the optional 16-bit Page 0
mode.
1996 Dec 30
534
Philips Semiconductors
Application note
Translating 8051 assembly code to XA
AN708
2.2.4 Feeding the Watchdog
There is one critical mechanism provided on the XA that has no equivalent in the basic 80C51 architecture (but is Implemented in some 80C51
derivatives): the watchdog timer. If you fail to pay attention to the watchdog timer-which Is activated automatically by a hardware reset-your
translated applications will crash mysteriouslyl
Fortunately, it is very easy to take care of the watchdog. For most developmental purposes, we recommend simply deactivating the entire
subsystem early in your XA initialization code. (Right after stack pointer initialization is a good place.) We will draw again from the complete
startup Initialization template In Appendix 1. The watchdog timer uses a special ''feeding'' sequence to enable any changes to its configuration:
wdoff:
mov.b
mov.b
mov.b
equ $00
wdcon, #wdoff
wfeedl,#$a5
wfeed2,#$5a
; WDCON value to turn off WD
Turn off watchdog timer.
Feed watchdog: use new config
This code sequence deactivates the watchdog subsystem and places it in a known state.
The watchdog mechanism is not implemented in the XA Tools simulator, and these Instructions will have no effect.
2.2.5
Obligatory Hardware Initialization
The XA contains a number of hardware initialization registers. (Namely, BCA, BTRH, BTRL, POCFGA, POCFGB, P1 CFGA, P1 CFGB, P2CFGA,
P2CFGB, P3CFGA. and P3CFGB.) The default power-up values of these are often sufficient to get your application running, but the defaults
won't work in every case, and we recommend that you consider initializating these registers as obligatory among the first instructions after reset.
You'll definitely need to use non-default values to speed up external memory access and to enable external RAM access when executing code
in internal code space.
Explaining how to set all these registers is well beyond the scope of this document, but we'll give a common example, taken from Appendix 1:
mov.b
mov.b
mov.b
mov.b
mov.b
mov.b
mov.b
mov.b
mov.b
mov.b
mov.b
bcr,#waitd+bus16+adr20
btrh,#dw5+dwa5+dr4+dra5
Set up bus configuration.
Config bus timing to longest
bus cycles
btrl, #wrpuls2+holdmin+ale05+cr4+cra5 ; short ALE, min data
hold.
pOcfga,#pcfga-pp
pOcfgb,#pcfgb-pp
plcfga,#plcfga_bus
plcfgb,#plcfgb_bus
p2cfga,#pcfgb-pp
p2cfgb,#pcfgb-pp
p3cfga,#p3cfga_bus
p3cfgb,#p3cfgb_bus
Configure portO types for bus.
Configure Pl for quasi-bidirec
except A3 -AO are push-pull.
Configure P2 types for bus.
Configure P3 for quasi-bidirect
except WR, RD are push-pull.
This won't have any effect on the XA simulator. See section 7.3 in the XA User Guide for more details.
1996 Dec 30
535
Philips Semiconductors
Application note
Translating 8051 assembly code to XA
2.2.6
Here are the details, along with alternatives for recoding Into native
XA instructions:
Disposing of Warning Messages
Warnings are written as comments to the output file. We recommend
resolving all warning messages before proceeding with the
translation process.
• JZlJNZ
JZlJNZ In the 80C51 uses the current contents of ACC -not the
result of a prior ALU operation-to determine whether the jump is
taken or not. This function is duplicated in the XA using the
translated ACC, R4L. Check the program logic to make sure that
the the value In R4L is valid at the time the JZlJNZ Is executed.
The majority of warnings are usually due to 8051 instructions that
translate directly Into XA "compatibility" instructions:
JZ/JNZ
JMP[A+DPTR]
XA native alternative: recode to use CMP followed by Bxx.
MOVC A, [A+PC]
• JMP[]
The JMP[A+DPTR] instruction, used for implementing jump or call
tables, depends on the length of each entry in the jump table.
Because the lengths of translated instructions in the tables are
likely to differ, the translated algorithm probably won't work without
further manual intervention.
MOV A, [A+DPTR]
MOVC A, [A+DPTR]
The resulting XA code may be obscure or non-functional, and the
translator flags this usage to warn you to check each instance. You'll
have to understand what the original code does to do this.
A second class of warning messages are generated for bit
references, since identities of bits-even those with identical
functions-are different on the 8051 and the XA. Some of these
problems will be Identified in a later stage by the XA assembler, but
you'll have to review all the bits referenced in the translated program
sooner or later. No matter what, we can't over-emphasize the rule
that's equally valid for 80C51 and XA coding:
XA native alternative: Implement a vector table instead, do an
indexed fetch followed by a jump-thru-register.
• MOVC A,[A+PC]
The MOVC A,[A+PC] instruction fetches a cOnstant byte out of
code memory. Since the algorithm depends on the length of this
instruction -one byte on the 80C51, and two bytes on the XAyou'll have to make an adjustment to make the translated code
work correctly.
"All SFR and bit references should be symbolic."
The first reason for this rule is that identically named SFRs and bits
may appear at different places in different 80C51 and XA variants.
Secondly, symbolic references receive some error-checking by the
assembler that can't be done with explicit numeric references.
XA native alternative: Use standard register-indirection or MOVC
to get bytes or words from data or code memory, respectively.
• MOV A,[A+DPTR] and MOVC A,[A+DPTR]
These instructions are used to fetch one of 256 bytes in a data- or
code-memory table, respectively. As long as the translated A,
R4L, and the translated DPTR, R6, contain the correct values,
algorithms implemented with this instruction should continue to
work In the XA.
Details of Compatibility Instructions
The XA "compatibility" instructions offer you the option of continuing
to use a number of highly-functional 80C51 instructions in your XA
code. To do so requires that you understand, in detail, any
differences that exist between the 80C51 and XA implementation of
the instructions, as well as the specifics of each implementation. You
may choose to adjust the code to continue to use these instructions,
or recode into native XA Instructions. (We generally recommend
recoding whenever practical.)
1996 Dec 30
AN708
XA native alternative: Use standard register-indirection or MOVC
to get bytes or words from data or code memory, respectively.
536
Philips Semiconductors
Application note
Translating 8051 assembly code to XA
8051 SOURCE
AN708
XASOURCE
XASOURCE
XASOURCE
SU00793
Figure 9.
XASOURCE
DEBUGGING
CHANGES
EDITOR
EXECUTION
VERIFICATION
XA SOURCE
XA ASSEMBLER
•
SIMULAf~~~ULATOR - - - - - - - - - - - - - - - - - _
..
XASOURCE
•
EXECUTION
v7I"
SU00794
Figure 10.
2.3 The final step:
Generating debugged XA code
Figure 10 describes the details.
The only difference for translated code is the very slight chance
you'll need to return to an early translation step to correct an
unforeseen systematic error in your code. We don't expect this to
happen except in extreme cases of specialized code.
There's good news at the final step: Transforming structurally
correct XA code into debugged XA is almost identical to the
standard native code-development cycle. You'll run the XA simulator
or XA emulator to verify your code, make corrections, re-assemble,
then re-verify, continuing until your program is proven. If you've been
careful during previous steps, you shouldn't have any
translation-specific problems here.
1996 Dec 30
As standard XA development techniques are covered by other
materials, we'll cut this section short and turn to special topics.
537
Philips Semiconductors
Application note
Translating 8051 assembly code to XA
3.
8-bit location.) The code uses the byte-size pointer in R1 to load
another 8-bit quantity to the accumulator.
SPECIAL TOPICS
We've translated a good deal of 80C51 code, ranging from short
functional snippets to applications of considerable size. In the
process, we're reminded of the wealth of programming tricks
developed over the years by 80C51 programmers to extract all
possible functionality from the architecture and to overcome
limitations of early tools.
In the XA version, an 8-bit pointer is fetched to the XA register
corresponding to 80C51 R1, namely ROH. For native mode, the
translation has already gone astray as no byte-length index registers
are implemented in the XA, and ROH isn't a proper Index register
anyway. The next instruct, an Indirect load, fetches through R1,
which is completely uninitialized by this sequence, so the translation
falls.
We've also seen a few cases where the 80C51 to XA Translator
needs a littie extra help.
In XA compatibility mode, byte-length pOinters are available, but
they are defined as the least-significant byte of either R1 or RO, so
the 8-bit pointer should be loaded to either ROl or R1 L. This
translated sequence effectively uses R1l, which is likewise
uninitialized, and the translation fails.
We've kept notes of these, and we'll share them with you-along
with our recommendations for fixes-in this section.
3.1
Trouble-making items
Here's a list from our notes of some potential troublespots. You may
want to scan your 80C51 and translated source code for these. Most
of these issues are covered in detail in this Application Note.
3.2.2 Recommendations for Indirect References
The most general solution is to search for all u@RO"and "@R1"
addressing in the 8051 code or all U[RO]" and U[R1]" references In
translated code. Note that translated code won't contain any
references like "[R2]" through U[R7]" Since no 8051 code generates
these. Although there are no useful changes you can make to the
8051 code prior to translating, you may be able to see better how
the code works in the original source, and it is a good idea to
consider how pOinters might be converted to words from bytes at the
most convenient level. Make sure to distinguish between true
byte-sized pOinters and word-size pointers used to access external
memory. Some 8051 programs keep word pointers in adjacent
registers or IRAM cells, but there's no guarantee, since we've seem
some that don't.
• 80C51-specific comments in translated code.
• 80C51-style Increments in XA that don't affect condition codes,
but possibly should.
• Any occurence of the [ ... +DPTR] operand.
• Any operation on the 80C51 PSW register.
• Any explicit push or pop.
• Over-terse console messages (due to extremely limited ROM size
in many 8051 applications).
• Multiply/Divide algorithms, which may translate and run correctly,
but very slowly if not re-written for the XA.
Don't forget that pointers are sometimes checked against limits, and
you'll need to convert the limit checking code as well. 8051 CJNE's
are translated to CJNE.B's. You may have to manually convert these
to CJNE'w's. It's probably a good idea to replace the CJNE tests
completely with CMP instruction followed by a conditional branch. In
the 8051, the CJNE was the only way to do a non-destructive test,
so it was overused-and possibly misused-in situations where a
limit might be reached or exceeded.
• Indirect references (@RO, @R1) in 80C51 code.
3.2 Translating indirect references
Indirect addressing doesn't always translate well from the 80C51 to
the XA since the 80C51 implements 8-bit indirection through RO or
R1, while the XA can do 16-bit indirection through any of RO thru R7.
For programs that are heavily dependent on the 80C51
implementation, you may consider setting SCR.CM to put the XA
into 80C51 "compatibility mode" in which XA RO and R1 function as
8 bit index registers.
3.2.3 Picking a register for indirect references
If you are manually modifying translated code-following our
recommendation to recode certain 80C51-specific
constructions-you may need to pick a new register for indirect
addressing. Here are some pointers:
In general, we recommend that you examine the issues carefully
and recode if necessary to use native 16-bit addressing whenever
possible. The increased generality of your code will almost always
pay back the effort.
3.2.1
In the most general case, you can't use XA registers RO through R3
for indirect addressing because it is possible that 8051 registers RO
through R7, which translate into byte registers in RO through R3,
namely: ROl, ROH, R1l, ... R3H, might contain useful data.
Indirect reference failure
In a few cases, the translator can produce XA code which won't
function correctly.
Of the group R4 through R7, R4 is best preserved for translated
code that assigns R4l as "ACC" and R7 is the Stack Pointer. The
chances are good that DPTR in the 8051 code was doing something
useful, so it's XA twin, R6, is busy.
For example, the XA translator translates the 8051 code sequence
MOV Rl,PTR
get a pointer from lRAM
MOV A,@Rl
load @ptr to ACC
That leaves R5 as a good candidate. (If R5 is also busy, then you'll
have to save a register temporarily; unless stack space is very
limited, the stack is as good as any place. Alternatively, you may
want to switch register banks if there are free registers in a different
bank.)
to
MOV.B ROH,PTR
; get a pointer from lRAM
MOV.E R4L, [Rl]
; load @ptr to ACC
In the 80C51 version, the IRAM location "PTR" contains an 8-bit
pOinter, which is fetched to R1, one of the two 80C51 index
registers. (The source of the pointer is not important; this example
would be equally valid if the value of Ri is loaded from any other
1996 Dec 30
AN708
Remember to consider that it is a standard practice in 8051 coding
to assign symbolic names to registers, so you may need to take
extra care to track register usage.
538
Application note
Philips Semiconductors
AN708
Translating 8051 assembly code to XA
Unlike the 8051, the XA cannot branch Oump) to an odd address. If
an labeled instruction prospectively occurs at an odd address, the
assembler inserts a NOP before any Jump target to place it at the
next even address. Without a label, however, the assembler can't
distinguish this instruction as a jump target, so the translator
generates a label when this construction is found. The generated
label is not very informative, appearing, for example, as follows:
3.3 Translating "degenerate" 8051 source code
This section discusses some "degenerate" 8051 programming
practices in this section. We use this term for some constructs
because they are very 8051-specific, developed over time by
programmers to make the most of the available tools and the 8051
architecture.
Most of these don't translate mechanically very well. You can
manually modify the code used in around this kind of code and get it
to work, but our experience indicates that it is often better to it
outright with maintainable, clear XA code. We'll show you how.
3.3.1
XA_ADJUST_0005:
JB
eventbitl,$
This guarantees that the assembler will even-align the target
instruction. We recommend that you substitute a better label, at
minimum; even better, consider replacing the "$" reference with the
full label.
"Here" relative addressing
Some typical 8051 source code includes branch instructions
resembling the following:
JB
JNB
RET
3.3.3 Branch to "here+offset" or "here-offset"
testbitl,$+3
testbit2,somewhere
i
It's a common 8051 practice to use knowledge of the the length of
instructions and the exact movement of the program counter during
Instructions to use specify branches in conditionals to a place "so
many bytes from here". Without careful documentation, the code Is
often incomprehensible. For example, this 80C51 fragment maps
alpha characters in the accumulator to upper case:
or whatever
Early 8051 assemblers had limited symbolic capacity and
encouraged such usage. This code should have been written
JB
JNB
xyz:
RET
testbitl,xyz
testbit2,somewhere
CJNE
JC
CJNE
JNC
ANL
The translator cannot perform this replacement mechanically, and
the XA assembler will not accept "here" relative constructs except in
specific cases, so we recommend that you correct the original 8051
source code by adding labels. It is a good idea to search 8051
source code for "$-" and "$+" and resolve all these before attempting
translation.
RET
This code won't translate. Even though it is obvious what this
segment does, it is not immediately obvious how it does it. (See also
"Compare Trees" in section 3.3.7.) To which instruction does the first
CJNE branch if the branch is not taken? If you keep this
construction, you'll have to figure this out.
Note: The translator will not translate operands like ".+3" and ".-6".
The period operator does not mean "here" in the XA assembly
language, where it is reserved for bit addressing constructions,
e.g., "SCR.PZ". The translator will emit an error message and leave
dot-based operands alone.
We recommended you recode this kind of construction in clear XA
code, for example as follows:
3.3.2 Branch to "Here"
CMP . B
BL
CMP . B
BG
AND.B
EXIT:
RET
A very typical 8051 source code construction looks like this:
JB
eventbitl,$
Of course, at the cost of inventing a label name, this code could
have been written
wait:
JB
1996 Dec 30
A,#'a',$+3
C_IN_l
A, #'z'+l, $+3
C_IN_l
A,#llOlllllB
eventbitl,wait
539
R4L, # ' a '
EXIT
R4L, # ' z '
C_IN_EXIT
R4L,#110lllllB
Application note
Philips Semiconductors
AN708
Translating 8051 assembly code to XA
3.3.4 In-line strings
label on the first instruction following the string. Eliminate the special
8051-equivalent "A+DPTR" form in favor of a straight indirect code
memory fetch, in the process eliminating the need to clear the
accumulator, and gaining an implicit autoincrement:
Some 8051 assembly programs follow the practice of embedding
strings within code sequences that use them. Often this is done
where a canned string is to be output to the console, but it may
occur in other contexts, for example in a Tiny BASIC interpreter,
where the BASIC commands are sought by successive code
routines and the compare strings are embedded in the code.
CALL
String_Out
DB
"This string goes to the console",
new_label:
NOP
The print string case might look like the following:
CALL
DB
NOP
String_Out
"This string goes to the console",O
; or whatever
String_Out:
POP.W R6
MOVC.B R4L,[R6+]
The subroutine "String_Ouf' obtains the string address from the
stack and outputs the string, in the process adjusting the stack value
to that of the following instruction -here a RET. A trailing null is often
used as a string delimiter. (Other schemes that delimit the string are
possible, for example, a leading byte count, or setting the 80h bit of
the final character, but these have no effect on the basic method.)
The code at String_Out usually starts out as follows:
Don't forget to remove the code that increments DPTR further below
in the output subroutine.
In XA native mode, on entry to String_Out, address bits 16 thru 23
will be in a word on the top of the stack. In some simple cases you
might be able to simply POP these and discard them, but resist the
temptation, since this won't always work if your code moves.
String_Out:
POP
DPH
POP
DPL
MOV
a,#O
A,@A+DPTR
MOVC
In general, it is best to remove this construction entirely so there will
be no mode or address dependence:
msgl:
DB "This string goes to the console",O
This method works on the 8051, and very efficiently, because it take
advantage of the fact that the CALL places a full 16-bit address on
the stack in a single instruction. Unfortunately, the 8051 has no
corresponding 16-bit pop to anywhere else but the Program Counter
(i.e., via the RET instruction). So the string pointer must be retrieved
and placed in DPTR, the most useful place for it, one byte at a time.
MOV
CALL
R6,#msgl
String_Out
String_Out:
MOVC.B R4L,[R6+)
The transiator transforms this code to
CALL
DB
NOP
a
When you make this conversion, you can forget about the alignment
issue, i.e. the need for a dummy label on the code following the
embedded string goes away. Of course, you'll have to invent some
labels for the strings and place them somewhere out of the code flow.
String_Out
"This string goes to the console",O
3.3.5 General In-line args
String_Out:
POP.B
DPH
POP.B
DPL
MOV.B
R4L, #0
MOVC.B A, [A+dptr]
We've seen strings placed in-line in 80C51 code in the previous
section and these at least have the somewhat redeeming value of
self·documentation. Imagine finding a code sequence like the
following:
STK_ER:
CALL AES_ER
DB OFH
which looks almost the same, but operates very differently. First, the
XA CALL places a 16·bit return address on the stack in page 0
mode. In native XA mode, CALL generates a 24-bit return address
in two 16-bit stack cells.
This is a bit mysterious, especially if the code following is of no
particular relevance. To make a long story short, the value 'OFH' is
an error number, and this routine handles stack errors in a Tiny
Basic interpreter. The routine AES_ER could retrieve the error
number by popping the presumptive return address into DPTR and
doing a MOVC.
When it comes to retrieving the string address, there are no 8·bit
stack operations on the XA, so an entire word is popped for each
byte POP. If the XA is in page 0 mode, this code will remove two .
16-bit words from the stack, one more than was pushed by the
CALL, causing a likely fatal stack imbalance as well as incorrect
data in DPTR. In native mode, this code will remove the two words
pushed by the CALL, leaving the stack in balance, but DPTR will
contain an incorrect value. In other words, this code won't work
when translated.
This is a good example of the lengths to which 8051 programmers
have gone to squeeze optimum performance from the architecture.
Since there are many more registers available in the XA, your
translated code couid simply move the er(or code into a free register
before calling AES_ER. The error code could even be pushed on
the stack:
What to do? The answer depends on your application.
ADDC
R7, #-2
MOV.B [R7),#OFH
If you are certain to use page 0 mode, the two byte POPs can be
replaced by a single word POP. This will keep the stack balanced
and retrieve the pOinter value correctly. The return will always be to
an even address, so assure that It is the correct one by placing a
1996 Dec 30
without involving any registers. Whatever you do, we advise you to
eliminate in-line arguments.
540
Application note
Philips Semiconductors
AN708
Translating 8051 assembly code to XA
3.3.6 Program Resets
5. This minimal form uses three register bytes
It is not uncommon to see an 8051 program instruction:
6. It's not easy to expand to use multiple indexes
JMP
OOOOH
Using native XA code is the alternative. Let's see what that looks
like in a similar case:
This will translate, but the result won't be correct since there's not an
executable instruction at O.
MOV. W Rn, #index
ADD. W Rn, #TABLE_BASE
MOVC. B RnL, [Rn+]
Better to use:
RESET
The 8051 construction
A,#'a',$+3
C_IN_l
A,#'z'+1,$+3
C_IN_l
• The table is in the current code page or through ES, which can
point anywhere in code space.
• You can use any registers for the index and table base.
• You can create tables up to 64K bytes long, maybe longer in
some situations.
works because the CJNE instruction performs a subtract and sets
the carry flag. This construction is the only way to "bin" numbers in
the 8051 using the accumulator only. But it is often very difficult to
understand.
• You can fetch bytes or words, and the autoincrement makes
longer fetches easy.
• This minimal form uses only two register bytes.
We recommend recoding to use successive XA compares and
branches.
• it's easy to expand to use multiple indexes.
Note that XA CJNE's don't include a form that allows comparing two
register arguments, and in the XA you'll likely have more working
values in registers.
3.3.8
3.3.9 USing the stack for vectored execution
A sequence of 2 pushes followed by a "ref' instruction in 80C51
source code means that a new execution address has been
calculated by some means; the only way to get it into the 80C51 PC
is through the stack, for example:
Code Table Fetches
To do table look ups returning bytes, it's common to see 8051 code
that does the following:
MOV
MOV
MOVC
A,#index
DPTR,#TABLE_BASE
A, [A+DPTR]
or calculated
push DPL
push DPH
ret
A <-- indexed byte value
This code sequence will work equally well on the XA, and may often
simply be retained after translation, assuming you can live with the
limitations:
This kind of construct is used when "JMP @A+DPTR" is insufficient,
for example, in the case of large or very sparse jump tables.
Although we've seen cases where the translated code works
correctly, it is both inefficient and obscure. We recommend recoding
to use jumps through an XA register.
1. The table is in the current code page
2. You must use the simulated DPTR (R6) and the simulated
accumulator, R4L
Threaded code requiring double-indirect jumps demands use of the
single XA instruction to replace the mass of 80C51 code required to
do this function.
3. The table can only be 256 bytes long
4. You can only conveniently fetch bytes this way
1996 Dec 30
RnL <-- indexed byte value
Note: we're re-using the same register for the sake of illustration,
which you may not want to do in all cases. Using native code has
the following advantages:
3.3.7 Compare trees
CJNE
JC
CJNE
JNC
or calculated
541
Philips Semiconductors
Application note
Translating 8051 assembly code to XA
AN708
3.4 Translating "untranslatable" 8051 source
3.5 Wrap-up
Before you use the translator to mechanically translate 8051 code,
you should be aware of a number of 8051 constructions that may
translate without error, but will simply not work.
We've designed the entire suite of XA Development Environment
tools-translator, assembler, simulator/debugger-to make the
process of translating 80C51 code to the XA to be as smooth as
possible.
There are also some limitations on source code that the translator
can handle, and it is best to manually or automatically scan your
source code for these and eliminate them before attempting to use
the translator.
3.4.1
With the exception in a few cases of the requirement to return to the
original source code and re-translate-which occurs only when
there's some systematic differences between the original source and
the requirements of the tools-the job is little different from any other
native development and debugging job.
PSW bit addressing
Some 8051 code takes advantage of the fact tnat PSW bits are
bit-addressable.
3.6 Trouble checklist
In trouble? Sometimes it is easy to lose perspective when you're
immersed in the details of a translation. Here's a checkist to help
you:
Have you read the entire application note and studied the special
topiCS?
None of these bits are addressable on the XA. This fact should be
mechanically demonstrated by the lack of BIT definitions in
"XA.EQU" (or its equivalent in your environment), but it is probably
better to take care of this kind of problem explicitly, since you'll have
to make some code changes right off the bat if you've got PSW bit
dependence.
3.4.2
o
o Have you organized your files and file-naming system to the
necessary degree?
P2 addressing
o Are you spending too much time understanding obscure 8051
On the 80C51 it was common for applications with external RAM
and ROM to use P2 addressing to address external RAM data
memory. This trick provides a second i6-bit memory pointer, albeit
an awkward one, for accessing external memory. Obviously, this
extremity is not necessary for the XA, which provides plenty of
memory pointer registers. We'll describe how to recognize this trick
and what to do about it.
constructs that would be better recoded into native XA code?
o Should your choice of Page 0 or compatability mode settings be
reconsidered?
o Are you using the simulator effectively?
o Are you using the correct (up-to-date, variant-specific) include
file (e.g., "XA-G3.equ")?
o Are you attempting to access external memory on an
development tool that only supports Single-chip operations?
o Are you using the symbolic register-naming capabilities of the
Here's what you'll see in the 80C51 source code:
A sixteen-bit pointer is divided into two bytes. The high-order byte is
written to port P2, while the low-order byte is written to or maintained
in RO or R1. This is followed by a MOVX to read or write a data byte
through the 16-bit pOinter.
assembler to the best advantage to translate code, by translating
functionality, then assigning a specific register?
(The trick: writes to the P2 SFR are gated to the external bus only
when this doesn't interfere with P2 addessing external program
memory. When the 8051 fetches an instruction from external
program memory, the contents of SFR P2 are ignored -but
retained- and the most significant byte of the program counter is
written to the external P2 physical pins. At all other times, the SFR
contents are output to the physical pins.)
o Are you re-editing translated code too often?
o Are you making piecemeal changes when systematic changes
are required?
o Would you be better off re-writing the application from scratch?
o Do have a case so special you need help from Philips
Applications?
To translate these references into XA external data memory
references:
3.7
2. Write the value formerly written into P2 into RnH
3. Write the value formerly written into RO or R1 into RnL
4. Perform a MOVX indexed by XA-Rn
To translate these references into plain old XA internal data
references-assuming there's enough internal RAM availablesubstitute a MOV for the MOVX. Note that the XA will do an external
memory access if the address exceeds the on-chip space.
3.4.3
R7 use
Just a reminder: the XA Stack Pointer is maintained in the XA
register R7; avoid the temptation to use R7 as a general register,
except in the unusual case that your application doesn't use the XA
stack.
1996 Dec 30
Final Comments
We've seen that 80C51 code varies enormously with respect to
quality, amount of documentation, dependence on architectural
''tricks'', and so on. Each translation will have its own flavor.
Ultimately, there's no substitute for experience, so we encourage to
you start with simple cases, take them through the process to
completion, and then start again with more difficult translation
problems.
1. Chose a word pOinter register, XA-Rn.
542
Philips Semiconductors
Application note
Translating 8051 assembly code to XA
APPENDIX 1:
AN708
STARTUP+INTERRUPT PROTOTYPES
The following code is a complete template for software startup, interrupt vectors, and hardware initialization. Extracts from this code are used in
several places in the text. You may obtain this code from the Philips BBS as file "XA-SKEL.ASM".
$pagewidth 132t
$listing_min
;======================================================================
; General purpose skeleton assembly file for the XA-G3
;======================================================================
This file may be used as a starting point to develop XA assembly
language applications. Many definitions are included to simplify XA
system initialization and to make the code more readable. The user
will need to adjust the initialization values to suit a specific
application. Some things to look at are: stack starting location,
system configuration (8051 compatibility mode; page 0 mode, and
peripheral timing), watchdog timer setup, bus configuration
and timing, and port configuration (especially as regards bus
operation) .
The default setup shown gives an XA with 8051 compatibility turned
off, page 0 mode on, peripheral timing set to clk/4, watchdog timer
turned off, the external bus configured to a 16-bit data width with 20
address lines, bus timing set to the longest cycles but a short ALE
and minimum data hold, ports; configured for quasi-bidirectional
mode except for the pins related to bus operation, which are set to
push-pull.
;======================================================================
Sinclude xa-g3.equ
Model file for the XA-G3
which defines all of the
Special Function Registers
and addressable bits.
$nolist
;======================================================================
Equates to for XA initialization and make setup code self-documenting:
System Configuration register (SCR) :
cmoff:
equ
$00
SCR value to turn off 8051 compatibility mode.
cmon:
equ
$02
SCR value to turn on 8051 compatibility mode.
pageOoff :
equ
$00
SCR value to turn off Page Zero mode.
pageOon:
equ
SOl
SCR value to turn on Page Zero mode.
time4:
equ
sOO
SCR value for timer rate
clk / 4.
equ
time16:
$04
SCR value for timer rate
clk / 16.
equ
time64:
$08
SCR value for timer rate
clk / 64.
; Watchdog timer configuration register (WDCON) :
wdoff:
equ
sOO
WDCON value to turn off watchdog timer.
wdon:
equ
$04
WDCON value to turn on watchdog timer.
wdpre64:
equ
$00
WDCON value for prescale
64
TCLK.
wdpre128 :
equ
S20
WDCON value for prescale
128 .. TCLK.
wdpre256:
equ
S40
WDCON value for prescale
256
TCLK.
wdpre512:
equ
S60
WDCON value for presca1e
512 .. TCLK.
wdpre1K:
equ
S80
WDCON value for prescale
1024
TCLK.
wdpre2K:
equ
WDCON value for prescale
SaO
2048
TCLK.
wdpre4K:
equ
ScO
WDCON value for prescale
4096
TCLK.
wdpre8K:
equ
$eO
WDCON value for prescale
8192
TCLK .
..
..
..
..
..
..
1996 Dec 30
543
Application note
Philips Semiconductors
Translating 8051 assembly code to XA
; Bus Configuration Register (BCR)
waitd:
equ
$10
bcr value
busd:
equ
$08
bcr value
bus8:
equ
$00
bcr value
busl6:
equ
$04
bcr value
adr12:
equ
$00
bcr value
adr16:
equ
$01
bcr value
adr20:
equ
$02
bcr value
to
to
to
to
to
to
to
activate Wait Disable.
activate Bus Disable.
set 8-bit bus.
set 16-bit bus.
set 12 address lines.
set 16 address lines.
set 20 address lines.
; Bus Timing Register High (BTRH):
equ
$00
data write cycle without ALE is
clocks.
dw2:
equ
$40
data write cycle without ALE is
clocks.
dw3:
equ
$80
data write cycle without ALE is 4 clocks.
dw4:
equ
$eO
dw5:
data write cycle without ALE is S clocks.
equ
$00
dwa2:
data write cycle with ALE is
clocks.
dwa3:
equ
$10
data write cycle with ALE is
clocks.
dwa4:
equ
$20
data write cycle with ALE is
clocks.
equ
$30
dwa5:
data write cycle with ALE is
clocks.
dr1 :
equ
$00
data read cycle without ALE is 1 clock.
dr2:
equ
$04
data read cycle without ALE is 2 clocks.
dr3:
equ
$08
data read cycle without ALE is 3 clocks.
dr4:
data read cycle without ALE is 4 clocks.
equ
SOC
equ
$00
dra2:
data read cycle with ALE is
clocks.
dra3:
equ
$01
data read cycle with ALE is
clocks.
dra4:
equ
$02
data read cycle with ALE is 4 clocks.
equ
$03
draS:
data read cycle with ALE is
clocks.
; Bus Timing Register Low (BTRL):
wrpuls1:
equ
$00
write pulse width is 1 clock.
wrpuls2:
equ
$80
write pulse width is 2 clocks.
holdmin:
equ
$00
data hold time is minimum.
holdlong:
equ
$40
data hold time is 1 clock.
aleOS:
equ
$0
ALE width is O.S clocks.
ale1S:
equ
$1
ALE width is 1.S clocks.
cr1:
equ
$00
data read cycle without ALE is
clock.
cr2:
equ
$04
data read cycle without ALE is
clocks.
cr3:
equ
$08
data read cycle without ALE is
clocks.
cr4:
equ
SOC
data read cycle without ALE is 4 clocks.
cra2:
equ
$00
data read cycle with ALE is
clocks.
cra3:
equ
$01
data read cycle with ALE is
clocks.
cra4:
equ
$02
data read cycle with ALE is
clocks.
craS:
equ
$03
data read cycle with ALE is
clocks.
; Port configuration registers (PnCFGA, PnCFGB):
pcfga-pp:
equ
$ff
port config reg a value for push-pull output.
pcfgb-pp:
equ
$ff
port config reg b value for push-pull output.
pcfga_qb:
equ
$ff
port config reg a value for quasi-bidirect
pcfgb_qb:
equ
$00
port config reg b value for quasi-bidirect
pcfga_od:
equ
$00
port config reg a value for open drain output.
pcfgb_od:
equ
$00
port config reg b value for open drain output.
pcfga_z:
equ
$00
port config reg a value for output off.
pcfgb_z:
equ
$ff
port config reg b value for output off.
p1cfga_bus: equ
$ff
port1 config reg a=quasi, but A3-AO=push-pull.
plcfgb_bus: equ
$Of
portl config reg b=quasi, but A3-AO=push-pull.
p3cfga_bus: equ
$ff
port3 config reg a=quasi, but RD,WR=push-pull.
p3cfgb-pus: equ
$cO
port3 config reg b=quasi, but RD,WR=push-pull.
$list
1996 Dec 30
544
AN708
Application note
Philips Semiconductors
AN708
Translating 8051 assembly code to XA
i======================================================================
Start code space:
org
dw
dw
dw
dw
dw
dw
0
S8fOO,
S8fOO,
$8fOO,
S8fOO,
$8fOO,
$8fOO,
Start
BreakVec
TraceVec
StkOvfVec
DivOVec
URetiVec
System exception interrupts:
Reset PSW, vector.
breakpoint PSW, vector.
trace PSW, vector.
stack overflow PSW, vector.
divide by
PSW, vector.
user reti PSW, vector.
org
dw
dw
dw
dw
dw
dw
dw
dw
dw
dw
dw
dw
dw
dw
dw
dw
$40
$8800,
$8800,
$8800,
$8800,
$8800,
$8800,
$8800,
S8800,
$8800,
$8800,
S8800,
$8800,
$8800,
$8800,
$8800,
$8800,
TrapOVec
Trap1Vec
Trap2Vec
Trap3Vec
Trap4Vec
Trap5Vec
Trap6Vec
Trap7Vec
Trap8Vec
Trap9Vec
Trap10Vec
Trap11Vec
Trap12Vec
Trap13Vec
Trap14Vec
Trap15Vec
TRAP
trap
trap
trap
trap
trap
trap
trap
trap
trap
trap
trap
trap
trap
trap
trap
trap
org
dw
dw
dw
dw
dw
org
dw
dw
dw
dw
$80
$8900,
$8900,
$8900,
$8900,
$8900,
$90
$8900,
$8900,
$8900,
$8900,
ExtIntOVec
TimerOVec
ExtInt1Vec
Timer1Vec
Timer2Vec
Event interrupts:
external interrupt 0.
timer
interrupt.
external interrupt 1.
timer
interrupt.
timer 2 interrupt.
RxdOVec
TxdOVec
Rxd1Vec
Txd1Vec
Serial
Serial
Serial
Serial
org
dw
dw
dw
dw
dw
dw
dw
$100
$8100,
$8200,
$8300,
$8400,
$8500,
$8600,
$8700,
SWI1Vec
SWI2Vec
SWI3Vec
SWI4Vec
SWI5Vec
SWI6Vec
SWI7Vec
Software interrupts:
SWIl
SWI2
SWI3
SWI4
SWI5
SWI6
SWI7
org
BreakVec:
TraceVec:
StkOvfVec:
DivOVec:
URetiVec:
TrapOVec:
Trap1Vec:
Trap2Vec:
Trap3Vec:
Trap4Vec:
Trap5Vec:
Trap6Vec:
Trap7Vec:
Trap8Vec:
$0120
1996 Dec 30
°
-
15 exceptions:
PSW, vector.
PSW, vector.
2 PSW, vector.
3 PSW, vector.
4 PSW, vector.
PSW, vector.
PSW, vector.
PSW, vector.
PSW, vector.
PSW, vector.
10 PSW, vector.
11 PSW, vector.
12 PSW, vector.
13 PSW, vector.
14 PSW, vector.
15 PSW, vector.
°
port
port
port
port
° receive.
transmit.
° receive.
transmit.
Start of executable code area.
545
Application note
Philips Semiconductors
AN708
Translating 8051 assembly code to XA
Trap9Vec:
TraplOVec:
TrapllVec:
Trap12Vec:
Trap13Vec:
Trap14Vec:
TraplSVec:
ExtlntOVec:
TimerOvec:
ExtlntlVec:
TimerlVec:
Timer2Vec:
RxdOVec:
TxdOVec:
RxdlVec:
TxdlVec:
SWI1Vec:
SWI2Vec:
SW!3Vec:
SWI4Vec:
SWISVec:
SWI6Vec:
SWI7Vec:
reti
Location to route interrupts/exceptions with no specific
handler code. This could prevent lockup particularly due
to an unexpected exception such as stack overflow if
there was no vector or handler whatsoever.
i===================================================== =================
; Beginning of initialization code.
Start:
mov
R7,
#$100
initialize stack pointer.
mov.b
scr,#cmoff+pageOon+time4
Set up chip configuration.
mov.b
mov.b
mov.b
wdcon,#wdoff
wfeedl,#$aS
wfeed2,#$Sa
Turn off watchdog timer.
Feed watchdog: use new config
mov.b
mov.b
bcr,#waitd+bus16+adr20
btrh,#dwS+dwaS+dr4+draS
mov.b
mov.b
mov.b
mov.b
mov.b
mov.b
mov.b
mov.b
mov.b
Set up bus configuration.
Config bus timing to longest
bus cycles
btrl,#wrpuls2+holdrnin+ale05+cr4+cra5 ; short ALE, min data
hold.
pOcfga,#pcfga-pp
pOcfgb,#pcfgb-pp
plcfga,#plcfga_bus
picfgb,#picfgb_bus
p2cfga,#pcfgb-pp
p2cfgb,#pcfgb-pp
p3cfga,#p3cfga_bus
p3cfgb,#p3cfgb_bus
Configure portO types for bus.
Configure Pi for quasi-bidirec
except A3 - AO are push-pull.
Configure P2 types for bus.
Configure P3 for quasi-bidirect
except WR, RD are push-pull.
End of initialization, begin user code.
end
1996 Dec 30
546
Philips Semiconductors
Application note
AN708
Translating 8051 assembly code to XA
APPENDIX 2: COMPARE/BRANCH SUMMARY
XA Compare/Branch Operations are summarized in the following tables:
Compare op:
(destination - source)
Comparison:
destination to source
CONDITION(S)
op
JUMP IF...
ALTERNATE: JUMP IF..•
BG
Bl
BCC
BCS
(CORZ) = 0
(CORZ)= 1
C=O
C=1
above, unsigned
below or equal, unsigned
above or equal, unsigned
below, unsigned
not below nor equal, unsigned
not above, unsigned
not below, unsigned
not above nor equal, unsigned
BGT
BGE
BlT
BlE
((N XOR V) OR Z) = 0
(N XORV)=O)
(N XORV) = 1
((N XOR V) OR Z) = 1
greater, signed
greater or equal, signed
less, signed
less or equal. signed
not less or equal, signed
not less, signed
not greater nor equal, signed
not greater, signed
BCS
BCC
BEQ
BNE
BOV
BNV
BPl
BMI
C=1
C=O
Z=1
z=o
V=1
V=O
N=O
N=1
carry
not carry
zero
not zero
overflow
not overflow
not sign
sign
XAFLAG
"z"
"C"
"V"
"N"
NOTE:
equal
not equal
positive
negative
MEANING
Zero Flag
Carry Flag
Overflow Flag
Sign Flag
XA PSW51.P is a bit-testable flag that indicates parity (=1 indicates even parity).
1996 Dec 30
547
Philips Semiconductors
Application note
Translating 8051 assembly code to XA
AN708
Following are some parallel examples of compare trees done first with 8051 CJNE operations, then with XA CJNE operations (directly
translated), and XA CMP Instructions followed by branches. These examples are illustrative and not intended to be exhaustive
EXAMPLE 1
8051 CJNE
CJNE
JMP
NOT_SAME:
JC
SRC_SMALLER:
dest,src,NOT_SAME
SAME
branch if dest
dest
source
DEST_SMALLER
dest
¢
¢
src
src
dest > src
JMP DONE
DEST_SMALLER:
dest < src
JMP DONE
SAME:
dest
source
DONE:
XA CJNE
CJNE
JMP
NOT_SAME:
BCS
SRC_SMALLER:
branch if dest ¢ src
dest
source
dest,src,NOT_SAME
SAME
dest *- src
dest > src
BR
DONE
dest < src
BR
DONE
SAME:
dest
source
XACMP/Bxx
CMP
BEQ
NOT_SAME:
BCS
SRC_SMALLER:
dest, src
SAME
compare dest to src
branch if dest
source
branch if dest < src
dest > src
BR
DONE
dest < src
BR
DONE
SAME;
dest
DONE:
1996 Dec 30
548
source
Application note
Philips Semiconductors
AN708
Translating 8051 assembly code to XA
EXAMPLE 2
8051 CJNE
CJNE
JMP
NOT_SAME:
JNC
DEST_SMALLER:
dest,src,NOT_SAME
SAME
JMP
SRC_SMALLER:
DONE
branch if dest
dest
source
¢
src
dest ;c src
dest < src
dest > src
JMP
DONE
SAME:
dest
source
DONE:
XACJNE
CJNE
JMP
NOT_SAME:
BCC
DEST_SMALLER:
dest, src , NOT_SAME
SAME
BR
SRC_SMALLER:
DONE
branch if dest ;c src
dest
source
dest ¢ src
dest < src
dest > src
BR
DONE
SAME:
dest
source
DONE:
XA CMP/Bxx
CMP
BEQ
NOT_SAME:
BCC
DEST_SMALLER:
dest, src
SAME
BR
SRC_SMALLER:
DONE
compare dest to src
branch if dest
source
branch if dest < src
dest < src
dest > src
BR DONE
SAME:
dest
DONE:
1996 Dec 30
549
source
Application note
Philips Semiconductors
AN708
Translating 8051 assembly code to XA
EXAMPLE 3
8051 CJNE
CJNE
JC
*
dest,src,GTE
DEST_SMALLER
branch if dest
src
dest¢src; branch if dest < src
GTE:
dest >= src
JMP
DEST_SMALLER:
DONE
dest < src
DONE:
XACJNE
CJNE
BCS
branch if dest ¢ src
dest¢src; branch if dest < src
dest, src, NOT_SAME
DEST_SMALLER
GTE:
dest >= src
BR
DEST_SMALLER:
DONE
dest < src
DONE:
XACMP/Bxx
eMP
BCS
dest, src
DEST_SMALLER
compare dest to src
branch if dest < src
GTE:
dest >= src
BR
DEST_SMALLER:
DONE
dest < src
DONE:
1996 Dec 30
550
Philips Semiconductors
Application note
Translating 8051 assembly code to XA
AN708
EXAMPLE 4
8051
CJNE
JNC
branch if dest :;o!: src
dest:;o!:srci branch i f dest > src
dest,src,LTE
SRC_SMALLER
LTE:
dest <= src
JM
SRC_ SMALLER:
DONE
dest > src
DONE:
XA CJNE
CJNE
BG
dest,src,LTE
SRC_SMALLER
branch i f dest :;o!: src
dest:;o!:src; branch i f dest > src
LTE:
dest <= src
BR
SRC_SMALLER:
DONE
dest >src
DONE:
XACMP/Bxx
CMP
BG
dest, src
SRC_SMALLER
compare dest to src
branch i f dest > src
LTE:
dest <= src
BR
SRC_SMALLER:
DONE
c1.est > src
DONE:
1996 Dec 30
551
Application note
Philips Semiconductors
AN709
Reversing bits within a data byte on the XA
Author:
Greg Goodhue, Microcontrol/er Product Planning, Philips Semiconductors, Sunnyvale, CA
while the lower nibble of the result consists of the reversed bits of
the upper nibble of the Initial value. The code example uses each
nibble of the Initial value as an Index Into the lookup table, which
provides a nibble of result data. The two partial results are then
combined to produce the complete result. This version uses 42
bytes for both the code and the lookup table, but requires only 42
XA clock periods to complete.
Implementing an algorithm to reverse the bits within a data byte Is
notorious for producing inefficient code on most processors. This
function can serve as a case study of how to trade off code size for
performance and shows some of the methods that might be
employed in similar types of data conversion situations.
Here four solutions are shown to implement the byte reverse
function. The first version (Listing 1) uses a very simple approach.
The result is produced by shifting a bit out of the Initial data value
and shifting the same bit back into the result value. This is repeated
in a loop for each bit. Since the two shift operations are done In
opposite directions, the result value is a bit reversal of the initial
value. This version is the smallest in size, using only 11 bytes.
However, it takes 128 XA clock periods to complete.
The final method shown (listing 4) uses a full lookup table to
produce the entire result very quickly. The initial data byte is used as
an Index into the lookup table and the value from the table is the
complete result byte. This method produces the result in only 12 XA
clocks. However, the code pius the lookup table occupies a fairly
large amount of code space: 264 bytes.
Listing 2 uses the same method as the first, but "unfolds" the loop to
eliminate the counting and branching overhead. What is left are the
instructions from the inside of the loop repeated eight times.
Unfolding the loop gives faster execution, 64 clocks in this case. The
code size grows somewhat to 16 bytes.
CONCLUSION
These examples show how code size may often be traded for
execution speed, or execution speed for code size, depending on an
application's requirements. This is summarized in Figure 1. Other
solutions to this particular algorithm are certainly possible and other
algorithms will likely have different types of solutions with different
resulting tradeoffs.
The third method (Listing 3) uses a partial lookup table to reverse
one nibble at a time and assemble the complete byte from two
lookup values. In a reversed byte, the upper nibble of the result
consists of the reversed bits of the lower nibble of the initial value,
300
250
200
150
100
50
LISTING 1
LISTING 2
LISTING 3
LISTING 4
SU00819
Figure 1. Tradeoff of code size to performance.
1996 Dec 09
552
Philips Semiconductors
Application note
Reversing bits within a data byte on the XA
LISTING 1
Listing 1) Smallest solution in terms of code space:
Enter with value to be reversed in ROL, result in ROH.
This works by shifting the register out in one direction and back in
the other.
count, #8
mov
elks
rrc
rOI,#l
loop:
elks
rIc
rOh,#l
4 elks
djnz
count, loop
8/5 elks
total time = 8*(4+4) + 7*8 + 3+5
128 clocks
LISTING 2
Listing 2) Solution 1 with the loop "unfolded".
Enter with value to be reversed in ROL, result in ROH.
This works by shifting the register out in one direction and back in
the other.
rre
rOI, #1
elks
rIc
rOh,#l
elks
rrc
rOI,#l
elks
rIc
rOh, #1
elks
rrc
rOI,#l
elks
rIc
rOh, #1
elks
rrc
rOI,#l
elks
rIc
rOh,#l
elks
rrc
rOl,#1
elks
rIc
rOh,#l
4 elks
rrc
rOI, #1
4 elks
rIc
rOh, #1
elks
rrc
rOI,#l
elks
rIc
rOh,#l
elks
rrc
rOl,#l
4 elks
rIc
rOh,#l
4 elks
total time = 8*(4+4) = 64 clocks
1996 Dec 09
553
AN709
Application note
Philips Semiconductors
Reversing bits within a data byte on the XA
AN709
LISTING 3
Listing 3) Fastest solution (without using a 256 byte lookup table):
Enter with value to reverse in R4L, result returned in ROL.
This works by reversing each nibble using a look up table and reversing
the two nibbles separately as part of the procedure.
mov
r6,#LUT1
3 elks
push
r4l
elks
and
r4l,#$Of
elks
move
a, [a+dptr)
elks
mov
rOl,r4l
elks
rOl,#4
rr
elks
pop
r4l
elks
r4l,#$fO
elks
and
r4l,#4
rr
elks
move
a, [a+dptr)
elks
or
rOl,r4l
elks
; this is a nibble reverse lookup table:
LUT1:
db
$00
db
$08
db
$04
db
SOC
$02
db
db
$OA
$06
db
db
$OE
$01
db
db
$09
db
$05
db
SOD
db
$03
db
SOB
$07
db
db
$OF
total time = 42 clocks
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
0000
1000
0100
1100
0010
1010
0110
1110
0001
1001
0101
1101
0011
=> 1011
=> 0111
=> 1111
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
LISTING 4
Listing 4) Fastest solution (using a 256 byte lookup table):
Enter with value to reverse in R4L, result returned in ROL.
mov
r6,#LUT2
elks
move
a, [a+dptr]
elks
mov
rOl, r4l
elks
; this is a byte reverse lookup table:
LUT2:
db
$00
db
$80
db
$40
db
$CO
total
1996 Dec 09
00000000
00000001
00000010
00000011
12 clocks
554
=>
=>
=>
=>
00000000
10000000
01000000
11000000
Application note
Philips Semiconductors
Implementing fuzzy logic control with the XA
AN710
Author: Zhimin Ding
networks, genetic algorithm and learning automata have proved to
be effective in many applications.
ABSTRACT
Most control applications involve the specification of a relationship
between sensor signals and actuator outputs. Fuzzy logic provides
an intuitive way to accomplish that. It allows the user to use
linguistic rules to specify a nonlinear mapping between sensor
signals and actuator outputs, thus provide a framework for
programing an embedded system. Using a multi-joint robot system
as a testbed, we implemented fuzzy logic on an 8051 compatible
16-bit microcontroller-the XA. The robot controlled by the XA
running the fuzzy logic algorithm is able to carry out a goal-directed
motor sequencing behavior. An 8XC552 is also used to directly
interface with the robot and communicate with the XA through 12C.
In addition to carrying out AOIPWM conversions, the '552 also
implements multiple loops of linear feedback for servo positioning
and compliance control. This application note will demonstrate the
implementation of Fuzzy Logic in an embedded control solution
using the Philips XA microcontroller.
In this application note, I will demonstrate the use of fuzzy logic in
the XA. With a two-joint robot system as the testbed, I will discuss
how to use fuzzy logic to tackle a specific control problem as well as
some general programming issues related to the XA. Instead of
exploring all the options that are out there, I will focus on one
effective solution in this application note to get the readers quickly
acquainted with the technique.
ROBUSTCONTROLOFA"BUG~UKE
ROBOT LEG
Figure 1 is a diagram of the robot leg. It is powered by two
gearmotors and it has a passive foot-like structure at the end of the
distal segment. We call the distal segment the "tibia", and the
proximal segment the "femur" after animals. The behavioral purpose
of this robot is to grab an object within the space it can reach. The
location of the object is unknown to the robot and changing
periodically. This is very similar to a situation when an insect walking
over a very rough terrain is trying to find an object (such as a tree
branch or twig) to grab onto as a foothold. In this deSign, range
senSing such as vision is not involved in the search of the object, as
is the case with insects. Insects have developed a behavior shown
in Figure 2 where they use their legs as probes to actively sense
where the object is and then establish a foothold onto it through a
Simple reflex [2]. The active senSing reflex makes the
"substrate-finding" behavior quite robust.
INTRODUCTION
Fuzzy logic was originally created as a mathematical model of
human thought. It is said that fuzzy logic is able to capture the
"vagueness" and "inexactness" of the concepts that we use for
reasoning. In the past few decades or so, the main area of success
with fuzzy logic has been in industry control. The application of fuzzy
logic allows us to specify the relationship between sensor inputs and
actuator outputs using "if...then ... " type of linguistic rules. A fuzzy
logic algorithm would be able to translate or interpolate these rules
into a nonlinear mapping between sensor input Signals and actuator
outputs for feedback control [1]. Fuzzy logic makes it easy for a
human designer to fine tune a control system through trial and error.
Together with some other approaches such as artificial neural
networks, genetic algorithm, etc., fuzzy logic is considered a useful
tool for non-model based control system design 1.
The robot is equipped with two potentiometers which give us angular
position readings for the two joints. On the two segments of the leg,
strain gauges are pasted as force or touch sensors. The two strain
gauges that are pasted near the junction of each actuator and the
corresponding leg segment give us indications of the output torque
of the two actuators. Three additional strain gauges are pasted
along the distal segment (the tibia). These strain gauge readings
can be decoded to determine where the touch between the leg and
a external object has occurred. One of the strain gauges is pasted at
the foot ankle region to signal foothold.
There are a number of software products available that would allow
the user to design a fuzzy controller interactively with a special
graphic user interface (GUI). These tools would usually generate C
codes which can to be modified to fit into a user target platform. If
you have to determine the parameters of your fuzzy logic control
system on trial-and-error basis, it is certainly desirable to have some
kind of graphic user interface so that you do not have to go into your
code and make modification here and there.
Our purpose of controlling this leg is to replicate the
"substrate-finding" behavior described above in a robust and reliable
fashion (Figure 2). The challenge of this control problem lies in the
fact that the pOSition and touch sensors do not passively tell where
the object is. The robot has to carry out active search movement to
find out where the object is. In such a case, there is no way to
linearly combine the sensor signals (or their derivatives and
integrations) to produce the desired motor movement as in PIO
control. It is therefore an ideal application for us to try out fuzzy
logic.
As the number of inputs to a control system increases, the number
of potential useful fuzzy rules increases dramatically and it becomes
increasingly desirable to use some kind of automated method for
rule synthesizing. There are a variety of such methods for doing this
and active research is being carried out in this area currently. For
example, the combination of fuzzy logic with artificial neural
1.
Non-model based design is a design that does not depend on a mathematical description of the plant dynamics.
1996 Dec 30
555
Application note
Philips Semiconductors
AN710
Implementing fuzzy logic control with the XA
BUILT IN POTENTIOMETERS
(ANGLE SENSOR)
r--------,
o
I
I
I
I
I
"FEMUR"
I
I
I
I
I
J
__
.
-m.m-J-,
~
~
~
L.~--r----.J
0
_____
SERVO MOTOR 1
/
STRAIN GAUGES
(STRESS SENSOR)
TOUCH SENSOR 2
----
TOUCH SENSOR 1
SIGN OF THE JOINT ANGLES
FOOT STRESS
SUOOB03
Figure 1. A two-Joint robot leg.
For each axis, there is a potentiometer for angle sensing and a pair of strain gauges to measure the output torque. Additionally, there are three
strain gauges on the tibia to measure the stress caused by touch or foot load. A third servo can be added to this leg to make It three degrees of
freedom.
.
1996 Dec 30
556
Philips Semiconductors
Application note
Implementing fuzzy logic control with the XA
AN710
a.
\
b.
SUOOB04
a.
b.
Figure 2. Digitized robot leg movement trajectories from the "substrate-finding" behavior.
The leg encounters an object during the downward sweep of a search cycle; once contact is made, the leg slips up until it just clears
the object and then comes back down to establish a foothold.
The leg encounters the object during the upward sweep of a search cycle. This is a typical nonlinear control problem because one
could not linearly combine the sensor signals and get the actuator output values as shown in the figure.
1996 Dec 30
557
Philips Semiconductors
Application note
Implementing fuzzy logic control with the XA
the fuzzy logic engine because of its higher arithmetics capability:
The XA reads "crisp" sensor values from the 8-bit microcontroller
through 12C interface and converts them into fuzzy membership
grades. These values are evaluated by a set of fuzzy rules
implemented in the XA in order to generate appropriate motor
commands which are sent back to the '552 through 12C. With 12C,
we can easily put multiple robot legs in the control system as shown
in Figure 3. For example, we can put together a six-legged hexapod
robot.
OUTLINE OF OUR APPROACH
As illustrated in Figure 3, two Philips microcontrollers on an 12C-bus
are used to control this robot. Firstly, an 8-bit 8XC552
microcontroller is used to Interface directly with the robot. In addition
to carrying out the necessary AID and PWM functions for sensor
and actuator interface, this 8-bit microcontroller also implements
position and force feedback to shape the actuator dynamics so It
becomes a position servo with proper compliance and damping
properties. This is very important because the compliance in the
actuators allows the robot to carry out contact based maneuvers
stably and reliably. Together with the sensors and actuators of the
robot leg, the 8XC552 implements ''virtual muscles" as seen from
the microcontroller at the upper level, which is the 16-bit XA
microcontroller running the fuzzy logic algorithm. I chose an XA as
In this application, the use of fuzzy logic and XA is not intended to
replace low level linear, classical control carried out with the
8XC552. Instead, I use fuzzy logic in an augmented and distributed
fashion. Fuzzy logic in XA and linear classical control in '552
function in parallel and contribute to different aspects of the control.
VDD
(NC)
XTAL2
ClK
XTAl1
AN710
VDD
VDD
(NC)
XTAL2
ClK
XTAl1
VDD
PWMO
PWM1
XA
VDD
'552 ADCO
ADC1
2.2Kx2
ADC2
PO.O/SCl
P1.61SCl
PO.21SDA
P1.7/SDA
ADC3
ADC4
Vss
I
I
I
I
I
I
I
ADCS
ADCS 14----.,,-< I - t - - - - - - ,
ADC7
(PORTS)
AV ss
vss
I
I
I
1-=
I
II
1--"1
I
I
AVref-
r-----"l
~-t--1
I
I
I
II
II
--
(---------il------Ji
1I
I
I
I
I
Ly:=====:::1
I
II
L __ -'
I
I
L _____ ..J
II I
II
II
II
II
II
II
I
MORE LEGS I
-))
/",--
v
SUOOBOB
Figure 3. A diagram of the robot control circuit.
We use two microcontrollers to Implement two levels of control. A 8XC552 is used to directly interface with the robot and carry out actuator level
control feedback. The XA is used here to carry out fuzzy logic algorithms to control the leg movement. The two microcontrollers communicate
with each other through an 12C bus. With 12C, we can easily put more than one robot leg in the same system.
1996 Dec 30
558
Philips Semiconductors
Application note
Implementing fuzzy logic control with the XA
THE IMPLEMENTATION OF FUZZY LOGIC
ALGORITHM IN XA
AN710
"if x is small and y is big", the strength of the rule is the smallest of
the truthfulness of the antecedents (if the relationship between the
two antecedents is an "or" instead of an "and", we would use the
largest value of the truthfulness of the antecedents).
In this section, I will explain some fuzzy logic related programming
issues. I first explain the algorithm itself by going through the basic
steps and then discuss how to implement the algorithm in the XA.
The last thing is to find out is the real value of the output z from rule
evaluation. Before we proceed, we need to define the membership
functions for z. For example, we can simply assign z = 5 to ''z is low"
and z = 200 to ''z is high". These membership functions are Impulse
functions and they are generally called "Singletons".
The first thing to do in a fuzzy logic control system is to translate a
real sensor signal value into fuzzy membership grades. This
procedure is called fuzzification. For example, if we have a sensor
input value x within the range of 0 to 255, we want to find out to
what extent is it "big" or "medium" or "small". We can assign three
functions corresponding to "big", "medium" and "small" to do the
translation. Those are called membership functions. As shown in
Figure 4, if x = 10, then "x is small" has a truth value of 0.9; "x is
medium" has a truth value of 0.2; "x is big" has a truth value of 0.1.
In other words, we are mapping the value of x = 10 into a triplet (0.9,
0.2,0.1).
To find out the precise (crisp) value of z according to the above
three rules, we simply calculate the weighted average of
z-singletons according to the strength of the three rules, therefore,
zI
x=10
= 5 * 0.9 + 200 * 0.2 + 5 * 0.1 == 38
0.9 + 0.2 + 0.1
(1)
What we have accomplished so far is to map x= 10 to z= 38.
According to the three rules, we can map every point of x in range
0-255 to some value of z as shown in Figure 5. Now the reader
might be wondering what difference does it make if we just
implement a look-up table to describe the relationship in Figure 5.
The answer is, for a one-dimensional sensor input, you can
implement exactly the same sensor to actuator mapping with a table
and possibly save code complexity and memory space. It is,
however, not so obvious how to implement multi-dimensional sensor
to actuator mapping with tables. Furthermore, the fuzzy logic
method allows the user to tune the system more easily. For
example, in order to change a mapping relationship between input
and output, for most people, it is more intuitive to change a set of
linguistic rules instead of an array of parameters in a table. 2
TRUTH VALUE
z
X=
255
10
SU00806
Figure 4. An illustration of the fuzzy membership functions.
For each xin the range of 0 to 255 (e.g., x=10), we can describe it
as degrees of being "small", "medium" and "big" by using the three
fuzzy membership functions.
The next thing to do at this point is to evaluate rules and find out
their strengths. Suppose we have these three rules that involve
inputx.
•
•
•
if x is small then z is low
if x is medium then z is high
if x is high then z is low
255
X
SUOOB07
Figure 5. The curve in this figure represent a mapping
relationship from xto z.
This relationship is interpolated from the above three fuzzy rules.
In this case, there is one "if ... " part in each rule, the strength of the
rule is simply the truthfulness of the "if ... " part, which is called the
antecedent. The truth values of the above three rules are 0.9, 0.2,
and 0.1, respectively. If there are two or more antecedents, as In
2.
An important point has to be stressed now before we go on. A mapping relationship implemented by fuzzy logic is no different from that Implemented by a mathematical function.
Such a relationship is clearly defined and fully deterministic. Once the input membership functions are defined. the process of translating rules into mapping functions is strictly conventional
algebra. The buzz word "fuzzy" is thus very misleading.
1996 Dec 30
559
Application note
Philips Semiconductors
Implementing fuzzy logic control with the XA
AN710
To implement the above algorithm In an XA, we need to consider the following issues. Since the membership functions do not usually change at
run time, I use arrays stored in the code memory space to represent input membership functions. With this approach, I will not lose membership
function information during power down. and also I can get membership functions of any shape. An easy way to choose the array size
(dimension) for membership functions is to let the array size equal to the resolution of the AD conversion. For example, with an 8-bit AJD input, I
use arrays of size 256 to represent input membership functions. Furthermore, I also use 8-bit unsigned integers to represent the membership
grades so that they go from 0 to 255 instead of 0 to 1. Suppose we have multiple input channels and for each channel, we divide the domain
into a number of clusters; the total number membership function would be the number of input channels times the number of clusters in each
input. For the example in Figure 4, we need three arrays or membership functions to characterize input x. In our robot application, we need a
total of 40 membership function arrays and that takes about 10K code memory space. 3
The following is an example that shows how to perform ''fuzzification''. It plugs input value x into the membership function array that stands for "x
is small". The XA instruction move A, [A+DPTR] (code memory access with indirect addressing with an offset) is used to access membership
function data. this is an 80C51 compatible instruction. In XA, A is mapped to R4L and DPTR is mapped to R6.
x
antecedent
db
Sff, $fd, Sf8, Sf 0,
;Membership function for "x is small".
data
data
10h
llh
:Input value x.
;The resultant truth value of the antecedent: "x is small".
;To find out the truth value of x being "small":
mov.w
r6,#x_small
;Indirect pointer.
mov.b
r4l,x
;Offset.
movc
A, [A+DPTRj
;Code memory access.
mov
antecedent,r41
;Return the result.
Once we have an appropriate way to implement membership functions, it is fairly straightforward to evaluate rules. In case there are multiple
antecedents in each rule, however, we need to additionally implement some kind of min() or max() function to evaluate "and", "or" relationships.
The following is a code example that implements the minO function for fuzzy rule evaluation
num_antecedents
equ
4
;Number of antecedents in a rule, e.g. 4.
antecedents
data
20h
;Truth values of the antecedents.
data
30h
;The resultant truth value of the rule.
;To evaluate the truth value of the rule with multiple antecedents:
loop:
proceed:
mov.w
rO,#antecedents :Index to antecedents.
mov.b
cmp
bl
mov.b
add
cmp
bcs
rll, [rO+)
rll, [rOj
proceed
rll, [rOj
rO, #1
rO,#antecedents+num_antecedents
loop
; Loop "num_antecedents" times.
3.
If cost of memory space is a concem, there are other ways to implement input membership functions. For example, we can specify a trapezoid membership function with a few key
parameters Instead of a 256 dimensional array. We have to then write a subroutine to map inputs into fuzzy membership grades according to these parameters.
1996 Dec 30
560
Application note
Philips Semiconductors
Implementing fuzzy logic control with the XA
AN710
The last part of fuzzy logic loop. the "defuzzification" process is most computationally expensive. As shown in equation (1). we need to perform
a series of 8x8 to 16-bit multiplications and a 32x16 to 16 division to get one final output value. This is to assume that our sensor values and
membership grades have 8-bit resolution. We need to use 32-bit (long) integer to represent the numerator of equation (1) and 16-bit integer to
represent the denominator. The following is an example of the defuzzification code segment.
;Number of rules, e.g. 4.
equ
singletons
data
10h
;The truth value of the rules (an array) .
data
20h
;The output singleton functions (an array);
data
21h
;The crisp output value.
;To perform the defuzzification process
loop:
mov.w
rO,#O
;Index to the rules.
mov.b
r1h,#O
;Clear the high order bits of r1.
mov.w
r4,#O
;Initialize low order bits of the numerator.
mov.w
r5,#O
;Initialize high order bits of the numerator.
mov.w
r6,#O
;Initialize the denominator.
mov.b
r1l, [rO+truth_rules]
mov.b
r21, [rO+singletons]
mulu.b
r2l,rll
;8x8=16 multiplication.
add.w
r4,r2
;r4 stores the numerator.
addc.w
r5,#O
;add carry to higher bits.
add.w
r6,r1
;calculate the denominator.
add.w
rO,#l
;increment the index.
cmp
bcs
loop
divu.d
r4, r6
mov.w
z, r4
;32/16 -> 16 unsigned division.
The above code segments serve as examples to illustrate how to efficiently use the XA instruction to perform the basic fuzzy logic operation.
One would still have to decide on how to encode rules and control the timing of the peripheral access. Most fuzzy logic controllers sample
sensor inputs and update actuator outputs synchronously at fix time intervals. The XA provides a number of internal timers which can be used
to control the timing of peripheral access.
1996 Dec 30
561
Application note
Philips Semiconductors
Implementing fuzzy logic control with the XA
AN710
properties. The torque signal from strain gauges is fed back to the
position command signal to form a compliance feedback loop. The
gain of the compliance loop determines the extent to which the
servo moves In response to external forces, thus establishing
compliant properties (see Figure 6, the outer loop). The dynamic
properties of the integrated sensor-actuator such as the compliance
and the damping ratio can be controlled by adjusting the variable
gains and low pass filter time constants in the compliance feedback
loop. With compliant robot joint actuators, we effectively added a
cushion between the robot and the objects it is in contact with and
therefore get a significant improvement in contact stability [3], [4].
With an adjustable joint compliance, the robot can serve as both a
contact based probe and an effector that is capable of exerting
forces and maintaining positional accuracy depending on the
behavior context.
IMPLEMENTATION OF A COMPLIANT ROBOT
ACTUATOR THROUGH SENSORY FEEDBACK IN
AN 8XC552
As stated earlier, we intend to use fuzzy logic in an augmented
fashion. In this application, the low level servo control can still be
. handled more easily with conventional linear feedback. In this
section, we focus on these low level implementation issues.
Specifically, we will discuss the Interface between the 8XC552 and
the sensors and actuators of the robot leg.
Most robot actuators use position feedback to implement a
closed-loop position servo. In order to achieve position accuracy,
those actuators are usually quite rigid. Although robots powered by
this kind of servo are usually able to make unconstrained movement
smoothly and quickly, they become unstable and behave erratically
upon contact with external objects [3]. With sufficient power, this
kind of robot could also be dangerous to human operators and
things around it. It is therefore often necessary to avoid any contact
situation. Animal and human muscles, on the other hand, are very
versatile due to the fact that they are usually compliant and more
importantly, the compliance can be actively controlled.
The 8XC552 carries out both position and force feedback. The
feedback loop is implemented in a timer interrupt service routine that
is called every 0.1 ms. After the 8XC552 completes the sensory
feedback function for the tuning of a compliant actuator dynamics, it
stores copies of all the sensor values in a buffer for access by the XA
through 12C to control the output angle and compliance of the robot
joint. The 8XC552 thus implements a compliant actuator with
electronically controllable compliance and presents itself as an 12C
slave to the XA.
Figure 6 illustrates the implementation of our robot actuator as a
"virtual muscle". I use a DC gearmotor as the core. Each motor is
integrated with a position sensor (potentiometer) and a feedback
circuit that acts as a position servo. Since the gear motor is
non-backdrivable, without the additional circuitry described below,
the servo system is quite rigid, that is to say, the output angle is
determined by the input command signal, and largely unaffected by
external torques acting on the joint. To achieve actuator properties
that resemble those of muscles, I add additional feedback pathways
through an 8XC552 to allow us to control compliance and damping
Notice that the feedback pathways implemented thus far are strictly
linear feedback loops that are intended for actuator control. This part
of the feedback can be done easily without fuzzy logic4 . On the
other hand, the control at this level has to be done in hard real time
to ensure dynamic stability.
INNER LOOP (POSITION SERVO)
OUTER LOOP (COMPLIANCE & DAMPING)
SU00805
Figure 6. An integrated sensor-actuator assembly for compliant robot joint actuation.
The active compliance is accomplished through stress feedback.
4.
It is possible to use fuzzy logic to make an exact linear feedback loop. but this approach would seem counter·productive.
1996 Dec 30
562
Application note
Philips Semiconductors
Implementing fuzzy logic control with the XA
.IF touch sensor 1 is negative-small
THEN femur output is negative-big
AND tibia output is negative-big.
Rule base generation
In this application, fuzzy logic is used to control the robot at higher
level, that is, the coordination between jOints in order to carry out
meaningful motion sequence. As mentioned earlier, the main
advantage of fuzzy logic is that the user can design a control system
based on intuition. There are, therefore, not many rules to follow to
generate the fuzzy logic rules. In this section, we discuss a few
techniques that we used in this specific application.
.IF touch sensor 2 is negative-small
THEN femur output is negative-big
AND tibia output is negative-big.
.IF tibia stress is negative-small
THEN femur output is negative-big
AND tibia output is negative-big.
In addition to the strain and position sensor inputs mentioned earlier,
a software generated timer signal implemented in XA is fed to the
fuzzy evaluator internally and this counts as another sensory input.
The timer counts from 0 to 255 repeatedly and they were clustered
into three fuzzy sets corresponding to the three phases of the leg
searching cycle, namely "start", "probe" and "retracf'. This is
necessary because the control of the leg involves the generation of
rhythmic movement in the absence of any specific sensor inputs.
The rhythmic movement ensures that the robot will engage in active
searching when it is not in touch with any object. The timer input
functions as a "central pattern generator".
.IF touch sensor 1 is positive-small
THEN femur output is negative-big
AND tibia output is zero.
.IF touch sensor 2 is positive-small
THEN femur output is negative-big
AND tibia output is zero.
.IF tibia stress is positive-small
THEN femur output is negative-big
AND tibia output is zero.
In addition to the soft timer, there are a total of 7 sensor inputs to
this system. Each of sensor values are clustered into 5 clusters. For
example, a quantity ranging from 0 to 255 can be characterized by
membership functions corresponding to, ''very small", "small",
"medium", "big", "very big". For each output, there could be as much
as 57 * 3 =234375 rules. It is obviously impossible for us to
manually try all the rules on ''trial-and-error'' basis. Notice that for
this system, the signals detected from the various sensors are highly
correlated. For example, when touch sensor 1 is Signaling positive,
touch sensor 2 is likely to signal positive also (but not vice versa). It
is therefore unnecessary to try a rule like
.IF femur angle is negative-big
and tibia angle is negative-big
THEN tibia output is positive-big.
(* The above rules are responsible for the retract movement when
the leg is in touch with an object in a way as shown in Figure 2.)
.IF foot stress is negative-small
THEN femur output is positive-small
AND tibia output is negative-small.
(* This rule is responsible for the foot to keep in contact with an
object by pressing onto it.)
.IF touch sensor 1 positive-big
AND touch sensor 2 negative-big
AND .. .
THEN .. .
Figure 2 gives the digitized trajectory plots of the "substrate finding"
behavior performed by our robot leg. When the robot leg is not in
contact with anything. it carries out a three-phased searching
movement. As soon as the leg touches an object. it would generate
reflexes as shown in Figure 2. For example, in Figure 2a, the tibia
would press against the object while Slipping upwards. As soon as
the tibia just clears the object, the robot will reposition the foot on to
the object and keep a pressure. If the substrate moves, the leg is
able to adjust promptly to maintain contact with the substrate due to
the jOint compliance. Even though there is no visual guidance, with
active sensing, the robot leg is able to find and grab onto any firm
object quite reliably.
because this situation does not exist.
By this analysis we can reduce the number of rules significantly.
Here are a set of rules that are used to give the performance shown
in Figure 2. Additional rules can be put in to make the leg more
versatile.
.IF tibia stress is zero
AND femur stress is zero
AND timer is start
THEN femur output is negative-small
AND tibia output is positive-big .
. IF tibia stress is zero
AND femur stress is zero
AND timer is probe
THEN femur output is positive-big
AND tibia output is negative-big .
. IF tibia stress is zero
AND femur stress is zero
AND timer is retract
THEN femur output is negative-big
AND tibia output is negative-big.
(* The above three rules are responsible for the generation of the
three phased search pattern when the leg is not in touch of
anything).
1996 Dec 30
AN710
563
Application note
Philips Semiconductors
Implementing fuzzy logic control with the XA
AN710
DISCUSSIONS
REFERENCES
The feedback pathways in a control system can often be
categorized into two classes, linear (e.g., PID control) and nonlinear,
and they often serve quite different purposes. In this application, the
linear feedback control loops are implemented to "tune" the robot
joint dynamics in some desired fashion, Le., position servo with
some compliance, whereas the nonlinear feedback control reflexes
are used to control the coordination between multiple robot joints in
order to aChieve a more concrete objective such as the requirement
for the robot to grab and hold onto an object. The linear feedback
algorithms are usually straightforward to implement but they
generally have high speed requirements for stability reasons.
Nonlinear feedbacks, on the other hand are usually computationally
more intensive due to the requirements for interpolation (fuzzy logic
algorithm does exactly that). This requirement will usually slow
things down a little bit. In this paradigm, the stability and robustness
of a system depends critically on the speed of the linear feedback
layer and is somewhat less sensitive to the speed of the fuzzy logic
loop. We envision that with our next generation of XA (XA-S3). We
can integrate all of these functions into one Chip. We will use the XA
multi-tasking capabilities so that we implement several layers of
feedback, some of which carry out simple, but fast servoing for
actuator control and the others running fuzzy logic for goal-directed
motor sequencing behavior.
[1] Castro, J.L., Fuzzy logic controllers are universal approximators.
IEEE transactions on system, man, and cybernetics, Vol. 25,
No.4, 629-635.
1996 Dec 30
[2] Bassler, U. (1991) Interruption of searching movements of partly
restrained front legs of stick insects, a model situation for the
start of a stance phase? Bioi. Cybern. 65, 507-514.
[3) Hogan, N. (1988) On the stability of manipulators performing
contact tasks. IEEE Journal of Robotics and Automation, vol. 4,
677-686.
[4] Ding, Z., Nelson, M.E. (1995) A neural controller for single-leg
substrate-finding: a first step toward agile locomotion in insects
and robots. In: Computation and Neural Systems 3
F. Eeckman and J.M. Bower, eds., Kluwer Academics Press.
[5) Data Handbook IC25: 16-bit BOC51XA Microcontrollers
(eXtended Architecture). Philips Semiconductors, 1996.
564
Application note
Philips Semiconductors
J.LC/OS for the Philips XA
AN711
Author: Jean J. Labrosse
An asynchronous event interrupts the microprocessor @. The
microprocessor services the interrupt @ which makes a high-priority
task ready for execution. Upon completion, the ISR invokes a
service provided by the kernel which decides to return to the
high-priority task instead of the low-priority task @. The high-priority
task executes to completion, unless it also gets interrupted ®. At the
end of the high-priority task, the kernel resumes the low-priority task
®. As you can see, the kernel ensures that time critical tasks are
performed first. Furthermore, execution of time critical tasks are
deterministic and are almost insensitive to code changes. In fact, in
many cases, you can add low-priority tasks without affecting the
responsiveness of you system to high-priority tasks. During normal
execution, a low-priority task can make a higher-priority task ready
for execution. At that pOint, the kernel immediately suspends
execution of the lower priority task in order to resume the higher
priority one.
SUMMARY
A real-time kernel is software that manages the time of a
microprocessor or microcontroller to ensure that all time critical
events are processed as efficiently as possible. This application note
describes how a real-time kernel, I1C/OS works with the Philips XA
microcontroller. The application note assumes that you are familiar
with the XA and the C programming language.
INTRODUCTION
A real-time kernel allows your project to be divided into multiple
independent elements called tasks. A task is a simple program
which competes for CPU time. With most real-time kernels, each
task is given a priority based on its importance. When you design a
product using a real-time kernel you split the work to be done into
tasks which are responsible for a portion of the problem. A real-time
kernel also provides valuable services to your application such as
time delays, system time, message passing, synchronization,
mutual-exclusion and more.
A real-time kernel basically performs two operations: Scheduling
and Context Switching. Scheduling is the process of determining
whether there is a higher priority task ready to run. When a
higher-priority task needs to be executed, the kernel must save all
the information needed to eventually resume the task that is being
suspended. The information saved is called the task context. The
task context generally consist of most, if not all, CPU registers.
When switching to a higher priority task, the kernel perform the
reverse process by loading the context of the new task into the CPU
so that the task can resume execution where it left off.
Most real-time kernels are preemptive. A preemptive kernel ensures
that the highest-priority task ready-to-run is always given control of
the CPU. When an ISR (Interrupt Service Routine) makes a
higher-priority task ready-to-run, the higher-priority task will be given
control of the CPU as soon as all nested interrupts complete. The
execution profile of a system designed using a preemptive kernel is
illustrated in Figure 1. As shown, a low-priority task is executing CD.
®
ISR
A~
ISR PRE·EMPTS TASK
®
j
ISR RETURNS TO HIGH·PRIORITY TASK
@
@
HIGH-PRIORITY TASK
TIME
•
SU00769
Figure 1.
1996 Sep 06
565
Philips Semiconductors
Application note
IlC/OS for the Philips XA
AN711
registers onto and from the stack, respectively. This feature makes
for a fast context switch because all seven registers (RO through R6)
can be saved and restored onto and from the stack In just 42 clock
cycles whereas it would take 70 clock cycles to perform the same
function with Individual PUSH and POP instructions.
THE PHILIPS XA AND REAL-TIME KERNELS
The XA has a number of interesting features which makes it
particularly well suited for real-time kernels.
When you use a kernel, each task requires its own stack space. The
size of the stack required for each task is application specific but
basically depends on function call nesting, allocation of local
variables for each function and the worst case interrupt
requirements. Unlike other processors, the XA provides two stack
spaces: a System Stack and a User Stack. The System Stack is
automatically used when processing interrupts and exceptions. The
User Stack is used by your application tasks for subroutine nesting
and storage of local variables. The most important benefit of using
two stacks is that you don't need to allocate extra space on the
stack of each task to accommodate for interrupt nesting. This
feature greatly reduces the amount of RAM needed in your product.
With the XA, the total amount of RAM needed just for stacks is given
by:
TotalRAMStack
= ISRStackMax +
Il C/0 S
IlC/OS (pronounced micro C OS) is a portable, ROMable,
preemptive, real-time, multitasking kernel and can manage up to 63
tasks. The internals of IlC/OS are described in my book called:
IlC/OS. The Rea/-Time Kernel [1]. The book also includes a floppy
disk containing all the source code. IlC/OS Is written in C for sake of
portability, however, microprocessor specific code is written in
assembly language. Assembly language and microprocessor
specific code is kept to a minimum. IlC/OS is comparable in
performance with many commercially available kernels. The
execution time for every service provided by IlC/OS (except one) is
both deterministic and constant. IlC/OS allows you to:
n
LTaskStack l
• Create and manage up to 63 tasks,
1.. 1
• Create and manage binary or counting semaphores,
The XA divide its 16 MBytes of data address Into 256 segments of
64 Kbytes. The stack for each task can be isolated from each other
by having them reside in their own segment. The XA protects each
stack by preventing a task from accessing another task's stack. This
feature can prevent an errant task from corrupting other tasks.
• Delay tasks for integral number of ticks,
• Lock/Unlock the scheduler,
• Change the priority of tasks,
Scheduling and task-switching can eat up valuable CPU time which
directly translates to overhead. A processor with an efficient
Instruction set such as that found on the XA helps reduce the time
spent performing scheduling and context switching. For instance,
the XA provides two instructions to PUSH and POP multiple
1996 Sep06
• Delete tasks,
• Suspend and resume tasks and,
• Send messages from an ISR or a task to other tasks.
566
Application note
Philips Semiconductors
IlC/OS for the Philips XA
AN711
note that you can locate a task's stack just about anywhere in the
XNs address space. This is accomplished by specifying the task's
top-of-stack through a constant (or a #define) as shown in the two
examples of Figure 5.
USING J.!C/OS
J.lC/OS requires that you call OSIni t () before you start using any
of the other services provided by J.lC/OS. After calling OSIni t ( )
you will need to create at least one task before you start multitasking
(I.e., before calling OSStart () ). All tasks managed by IlC/OS
needs to be created. You create a task by simply calling a service
provided by IlC/OS (described later). You need to create each task
in order to prepare them for multitasking. If you want. you can create
all your tasks before calling OSStart ( ) . Once multitasking starts,
IlC/OS will start executing the highest priority task that has been
created. You should note that interrupts will be enabled as soon as
the first task starts execution. Your main () function will thus look as
shown in Figure 2.
Here, I located task1's stack at the top of page 0 while task2s stack
will start at offset OxF700 of page 7 and grow downwards from there.
When locating stacks using constants, you must be careful that the
linker does not locate data at these memory locations. If needed,
you can also locate the stacks of multiple tasks in the same page
using the same technique.
OSTaskCrea te () returns a value back to its caller to notify it about
whether the task creation was successful or not. When a task is
created, J.lC/OS assigns a Task Control Block (TCB) to the task.
The TCB is used by J.lC/OS to store the priority of the task, the
current state of the task (ready, waiting for an event, delayed, etc.),
the current location of the task's top-of-stack and, other kernel
related data.
A task under IlC/OS must always be written as an infinite loop as
shown in Figure 3. When your task first executes, it will be passed
an argument (pdata) which can be made to point to task specific
data when the task is created. If you don't use this feature, you
should simply equate pda ta to pda ta as shown below to prevent
the compiler from generating a warning. Even though a task is an
infinite loop, it must not use up all of the CPU's time. To allow other
tasks to get a chance to execute, you have to write each task such
that the task either suspends itself until some amount of time
expires, wait for a semaphore, wait for a message from either
another task or an ISR or simply suspend itself indefinitely until
explicitly resumed by another task or an ISR. J.lC/OS provides
services to accomplish this.
Table i shows the function prototypes of the services provided by
J.lC/OS, V1.09. The prototypes are shown in tabular form for sake of
discussion. The actual prototype of OSTimeDly () for example is
actually:
void OSTimeDly(UWORD ticks);
You will notice that every function starts with the letters ·OS'. This
makes it easier for you to know that the function call is related to a
kernel service (I.e., an Operating System call). Also, the function
naming convention groups services by functions: 'OSTask .. .' are
task management functions, 'OSTime .. ,' are time management
functions, etc. Another item you should notice is that non-standard
data types are in upper-case: UBYTE, UWORD, ULONG and
OS_EVENT. UBYTE, UWORD and ULONG represent an
unsigned-byte (a-bit), an unsigned-word (16-bit), and an
unsigned-long (32-bit), respectively. OS_EVENT is a typedef'ed
data structure declared in UCOS.H and is used to hold information
related to semaphore, message mailboxes and message queues.
Your application will in fact have to declare storage for a painter to
this data structure as follows:
far OS_EVENT *MySem;
A task is created by calling the OSTaskCreate () function.
OSTaskCreate () requires four arguments as shown in the
function prototype of Figure 4.
task is a painter to the task you are creating. pda ta is a pointer to
an optional argument that you can pass to your task when it begins
execution. This feature allows you to write a generic task which is
personalized based on arguments passed to it. For example, you
can design a generic serial port driver task which gets passed a
pointer to a structure defining the ports parameters such as the
address of the port, its interrupt vector, the baud rate etc. pstk is a
painter to the task's top-of-stack. Finally, pr i 0 is the task's priority.
With IlC/OS, each task must have a unique priority. The smaller the
priority number, the more important the task is. In other words, a
task having a priority of 10 is more important than a task with a
priority of 20.
The 'far' attribute is specific to the HI-TECH compiler (described
later) and indicates that the pointer MySem will be able to access the
EVENT data structure which may be located in another bank.
OS=EVENT is used in the same capacity as the FILE data-type
used in standard C library. OSSemCreateO, OSMboxCreate () and
OSQCrea te () return a painter which is used to identify the
semaphore, mailbox or queue, respectively.
as
With J.lC/OS, each task can have a different stack size. This feature
greatly reduces the amount of RAM needed because a task with a
small stack requirement doesn't get penalized because another task
in your system requires a large amount of stack space. You should
1996 Sep 06
567
Application note
Philips Semiconductors
AN711
J-lC/OS for the Philips XA
void main(void)
/* Perform XA Initializations
OSInit() ;
/* Create at least one task by calling OSTaskCreate()
OSStart() ;
*/
*/
SU00770
Figure 2.
void UserTask(far void *pdata)
{
pdata = pdata;
*/
/* User task initialization
while (1) (
*/
/* User code goes here
/* You MUST invoke a service provided by j.LC/OS to: */
/*
a) Delay the task for 'n' ticks
*/
*/
b) Wait on a semaphore
/*
/*
c) Wait for a message from a task or an ISR */
/*
d) Suspend execution of this task
*/
SU00771
Figure 3.
UBYTE OSTaskCreate(void (*task) (far void *pd) ,
far void *pdata,
far void *pstk,
UBYTE prio) ;
SU00772
Figure 4.
UBYTE OSTaskCreate(task1, pdata1,
UBYTE OSTaskCreate(task2, pdata2,
(far void *)OxOOFFFE, prio1);
(far void *)Ox07F700, prio2);
SU00773
Figure 5.
1996 Sep 06
568
Application note
Philips Semiconductors
AN711
/-1C/OS for the Philips XA
Table 1. JlC/OS
V1.09
Philips XA Large Model
RETURN VALUE
ARGUMENT #2
ARGUMENT #1
FUNCTION NAME
ARGUMENT
ARGUMENT
#3
#4
CALLED
FROM ...
Initialization
-
-
-
mainO
-
-
mainO
void
OSInit
void
void
OSStart
void
UBYTE
OSTaskCreate
void (task)(far void *pd)
far void *pdata
far void *pstk
UBYTE prio
mainO or Task
UBYTE
OSTaskDel
UBYTE prio
-
-
Task
UBYTE prio
-
-
Task
-
Task or ISR
-
Task or ISR
-
Task
Task Management
UBYTE
OSTaskDelReq
UBYTE
OSTaskChangePrio
UBYTE
OSTaskSuspend
UBYTE prio
-
UBYTE
OSTaskResume
UBYTE prio
void
OSSchedLock
void
-
void
OSSchedUnlock
void
-
void
OSTimeDly
UWORDticks
-
UBYTE
OSTimeDlyResume
UBYTE prio
-
void
OSTimeSet
ULONG ticks
-
ULONG
OSTimeGet
void
-
-
-
Task
Task or ISR
Task or ISR
Time Management
Task
-
Task or ISR
-
Task or ISR
-
Task
Semaphore Management
far OS_EVENT *
OSSernCreate
UWORDvalue
-
-
UWORD
OSSemAccept
far OS_EVENT ·pevent
OSSernPost
far OS_EVENT "pevent
-
-
UBYTE
-
void
OSSemPend
far OS_EVENT *pevent
UWORD timeout
UBYTE *err
-
Task or ISR
Task
Task or ISR
Task or ISR
Task
Message Mailbox Management
far OS_EVENT *
OSMboxCreate
far void *msg
far void"
OSMboxAccept
far OS_EVENT ·pevent
-
UBYTE
OSMboxPost
far OS_EVENT ·pevent
far void *msg
-
far void'
OSMboxPend
far OS_EVENT *pavant
UWORD timeout
UBYTE *arr
-
Task
-
Task or ISR
Task
Task or ISR
Message Queue Management
far OS_EVENT *
OSQCreate
far void **start
UBYTE size
far void'
OSQAccept
far OS_EVENT 'pevant
-
UBYTE
OSQPost
far OS_EVENT *pavant
far void *msg
-
-
Task or ISR
far void *
OSQPend
far OS_EVENT *pavant
UWORD timeout
UBYTE *err
-
Task
-
-
-
ISR
Interrupt Management
void
OSIntEnter
void
void
OSIntExit
void
1996 Sap 06
569
-
ISR
Philips Semiconductors
Application note
J,lC/OS for the Philips XA
AN711
J.lC/OS also requires one of the 16 TRAP vectors In order to perform
a context switch. I decided to use TRAP #15 which is defined In the
C macro OS_TASK_SW ( ) . A context switch will force the XA Into
system mode and push the return address and the PSW onto the
system stack.
IlC/OS AND THE PHILIPS XA
J.lc/os (V1.09) was ported to the XA using the HI-TECH C XA tool
chain and the complete source code for both J.lC/OS and the port to
the XA's Large Memory Model are available from Philips
Semiconductors, Inc. The large memory model allows you to write
very large applications (up to 16 Mbytes of code) and access a lot of
data memory (up to 16 Mbytes). The XA port has been tested on the
Future Design, Inc. XTEND-G3 evaluation board and the test code
provided with the port is assumed to run on this target. The test
code can. however, be easily modified to support other
environments. The large model requires that your XTEND board has
at least two pages of data RAM. In other words, you must have
more than 64K bytes of RAM In the Xl>:s addressable data area.
This can be easily accomplished by replacing the two 32K bytes
data RAM chips with two 128K bytes chips.
As previously mentioned, you must prepare your tasks for
multitasking by calling OSTaskCreate () . OSTaskCreate ( )
builds the stack frame for the task being created as Illustrated In
Figure 6. DS:USP Indicates that once the task gets to execute, the
stack will be located In the bank selected by the DS register at an
offset supplied by the USP. You should note that pointers In the large
model are 32-blts but, only the least significant 24 bits are used.
OSTaskCreate () first sets up the stack to make it look as if your
task has just been called by another C function ,:;:
(IB;.;.:15=
..
" S P (00:B23 .. B16)
sSP (R7)
XA Registers
TCB
I I
L - ----(
L __
----I
"
PC (B15 .. BO)
PCJOO:B23 .. B16)
PSW
System Stack
(Page 0)
SU00775
Figure 7,
1996 Sap 06
572
Application note
Philips Semiconductors
JlC/OS for the Philips XA
AN711
CONTEXT SWITCHING WITH ~C/OS
Because ~C/OS is a preemptive kernel, it always executes the
highest priority task that is ready to run. As your tasks execute they
will eventually invoke a service provided by ~C/OS to either wait for
time to expire, wait on a semaphore or wait for a message from
another task or an ISA. A context switch will result when the
outcome of the service is such that the currently running task cannot
continue execution. For example, Figure 8 shows what happens
when a task decides to delay itself for a number of ticks. In CD, the
task calls oSTimeDly () which is a service provided by ~C/OS.
OSTimeDly () places the task in a list of tasks waiting for time to
expire @. Because the task is no longer able to execute, the
scheduler (OsSched () ) is invoked to find the next most important
task to run @. A context switch is performed by issuing a TRAP #15
instruction @. The function OSCtxSw () is written entirely in
assembly language because it directly manipulates XA registers. All
execution times are shown assuming a 24 MHz crystal and the large
model. The highest priority task executes at the completion of the
XP\s RETI instruction ®.
TCB CD before invoking OSCtxSw () which is done through the
TRAP #15 instruction. OSTCBCur already pOints to the TCB of the
task to suspend. The TRAP #15 instruction automatically pushes
the return address and the PSW onto the system stack @.
OSCtxSw () starts off by saving the remainder of the XP\s registers
onto the user stack@andthen, moves the saved PSW and PC from
the system stack to the user stack @. The final step in saving the
context of the task to be suspended is to store the top-of-stack into
the current task's TCB ®. The second half of the context switch
operation restores the context of the new task. This is performed in
the following four steps. First, the user stack pointer is loaded with
the new task's top-of-stack @. Second, the PC and PSW of the task
to resume is moved from the user stack to the system stack (f).
Third, the remainder of the XP\s registers are restored from the user
stack ®. Finally, a return from interrupt instruction (RETI) is
executed ® to retrieve the new task's PC and PSW from the system
stack which causes the new task to resume execution where it left
off. As shown in Figure 7, a context switch for the large model takes
only about 1 O~s at 24M Hz.
The work done by OSCtxSw () is illustrated in Figure 9. The
scheduler loads OSTCBHighRdy with the address of the new task's
Task calls OSTimeDlyO
m I~ _____ ~:______ ~L ____ _
c=rI --------------,----TASK SUSPENDED UNTIL TIME DELAY EXPIRES
+
~C/OS: OSTimeDlyO
®
@
~C/OS: OSSchedO
TRAP#15
~C/OS: OSCtxSwO
Next highest priority task
-
I
+@,
--~-----~------~~~
~
..._T~~E~:t!~~.__ j •••••1
__
_____
@
.....
,
25 115
20115
,
10115
I
TIME
SU00776
Figure 8.
1996 Sep 06
573
Application note
Philips Semiconductors
AN711
JlC/OS for the Philips XA
User Stack
(Page 'x')
HIGH Memory
R6
RS
R4
R3
R2
R1
RO
ES
SSEL
psw
PC (00:623 .. 616)
PC (61S .. 60)
User Stack
(Page 'y')
\
r
SSEL
I
I
I
I
I
@
I
1----------1
I
I
I
I
I
I
~I
'......
'). ............ """
r1
...... , •
I,
L
DS
USP(R7')·
SP (00:623 .. 616)
r
"1)
(
PSW
R2
R1
RO
ES
SSEL
PSW
PC (00:623 .. 616)
.. ;.
1\',
I-
I I
I L ~--....(
----1
PC (00:623 .. 616)
PSW
System Stack
(Page 0)
®1
I
I
I
I
I
I
r_JI
'\
PC (61S .. 60)
"
Low Priority
Task Control Block
(TCB)
R4
PC (61S .. 60)
, /
I,;;---l
@L_
R6
R3
~
I
I,
HIGH Memory
RS
I
I
I
J
I
SP (61S .. 60)
®
I
I
I
@l
OSTCBCur
I
I
I
1------1
I I I@
U,-c.=..;;s,--,-_~pc~_--,I)
I I I
SSP (R7)
I I I -+- 00
I I
XA Registers
I I I
1 I I
I
1
LOW Memory
(
I
I
I
ES
l
)..
I:
/
X
I I
1 I
LOW Memory
I I
I
II
OSTCBHighRdy
I I .---,----r-I----~---,I
I I ..
.
I®
I
I
l ... ~ I
r--~Q)
SP(61S .. 60)
, t--S-P~'(0-'-0:;:"';:6""'23=.. 6""'1-6)--1
001Bh-001Bh
001Ch-001Fh
-
0020h-0023h
-
0024h-0027h
-
002Bh-002Bh
002Ch-002Fh
0030h-0033h
0034h-0037h
-
003Bh-003Fh
NMI
009Ch-009Fh
1
6
Reset
OOOOh-0003h
0
(High)
7
always serviced immediately
aborts other exceptions
1997 Feb 10
584
Application note
Philips Semiconductors
AN713
XA interrupts
2.6.2. Trap Interrupts
Trap Interrupts are intended to support application-specific requirements, as a convenient mechanism to enter
globally used routines, and to allow transitions between User Mode and System Mode. TRAP 0 through TRAP 15
are defined and may be used as required by applications. Trap interrupts are generated by the TRAP instruction. A
trap interrupt will occur if and only if the instruction is executed, so there is no need for a precedence scheme with
respect to simultaneous traps. A trap acts like an immediate non-maskable interrupt, using a vector to call one of
several pieces of code that will be executed in System Mode. This may be used to obtain system services for
application code, such as altering the Data Segment register for example. Some XA development software and
Real Time Operating Systems may reserve certain Trap instructions for specific system functions. An example of
this would be the Hitech XA C compilers use of Trap 15 to access system services.
Traps - Non-Maskable
Description
Vector Address
Arbitration Ranking
Trap 0
004Q-0043h
1
Trap 1
0044-0047h
1
Trap 2
0048-004Bh
1
Trap 3
004C-004Fh
1
1
Trap 4
0050-0053h
Trap ~
0054-0057h
1
Trap 6
0058-005Bh
1
Trap 7
005C-005Fh
1
1
Trap 8
006Q-0063h
Trap 9
0064-0067h
1
Trap 10
0068-006Bh
1
Trap 11
006C-006Fh
1
Trap 12
0070-0073h
1
Trap 13
0074-0077h
1
Trap 14
0078-007Bh
1
Trap 15
007C-007Fh
1
Example of Trap Interrupt:
TRAP
#05
; generate Trap 5 Interrupt
; immediate branch to TRAP05 Interrupt Service Routine (non-maskable)
Example of ISR for a Trap Interrupt:
TRAP05:
. user code
RETI
Notice that the Execution Priority (IM3-IMO value) is not relevant since Traps are non-maskable. When the TRAP
instruction is executed the Trap Interrupt will always occur. No user action is required in the ISR to "clear" the Trap
before the RETI is executed.
1997 Feb 10
585
Application note
Philips Semiconductors
XA interrupts
AN713
2.6.3. Event Interrupts
On typical XA derivatives, event interrupts will arise from on-chip peripherals and from events detected on external
interrupt input pins. Event interrupts may be globally enabled/disabled via the EA bit in the Interrupt Enable register
(IE) and individually masked by specific bits in the IE register or registers. When an event interrupt for a peripheral
device is disabled but the peripheral is not turned off, the peripheral interrupt flag can still be set by the peripheral.
If the peripheral interrupt is re-enabled an interrupt will occur. An event interrupt that is enabled can only be
serviced when its Execution Priority is higher than that of the currently executing code. Event Interrupts have 16
priority levels that can be individually set in the Interrupt Priority (IPA) register for the appropriate interrupt source.
This allows tight control over the scheduling and occurrence of each maskable XA interrupt source. If more than
one event interrupt occurs at the same time, the higher priority setting will determine which one is serviced first. If
more than one interrupt is pending at the same priority level, a hardware precedence scheme is used to choose
the first to service. Consult the data sheet for a specific XA derivative for details on the hardware precedence
scheme or arbitration ranking.
Note that the PSW (including the Interrupt Mask or Execution Priority bits) is loaded from the interrupt vector table
when an event interrupt is serviced. Thus, the priority at which the ISR executes could be different from the priority
at which the interrupt occurred. Since the occurrence priority is determined by the IPA register setting for that
interrupt rather than by the PSW image in the vector table. Normally it is advisable to set the Execution Priority in
the interrupt vector to be the same as the IPA register setting that will be used in the code. If the Execution Priority
for any ISR is set lower than the Interrupt Priority for that interrupt, then that interrupt will interrupt itself
continuously and likely overflow the stack. This can occur since most event interrupts are still pending during part
of the ISA.
1997 Feb 10
586
Application note
Philips Semiconductors
XA interrupts
AN713
Event Interrupts - Maskable
Description
Flag Bit
Vector Address
Enable bit
Interrupt
Priority
Arbitration
Ranking
2
External interrupt 0
lEO
00BO-00B3h
EXO
IPAO.3-0
Timer 0 interrupt
TFO
00B4-00S7h
ETO
IPAO.7-4
3
External interrupt 1
IE1
OOBB-OOBBh
EX1
IPA1.3-0
4
Timer 1 interrupt
TF1
OOBC-OOBFh
ET1
IPA1.7-4
5
Timer 2 interrupt
TF2(EXF2)
0090-0093h
ET2
IPA2.3-0
6
ERIO
IPA4.7-4
7
0094-0097h
009S-009Bh
NMI (non-maskable)
009C-009Fh
1
Serial port 0 Rx
RI.O
Serial port 0 Tx
TI.O
00A4-00A7h
ETIO
IPAS. 3-0
B
Serial port 1 Rx
RI.1
OOAB-OOABh
ERI1
IPAS.3-0
9
Serial port 1 Tx
TI.1
OOAC-QOAFh
ETI1
IPAS. 7-4
10
00AO-00A3h
00BO-00B3h
00B4-00B7h
OOBB-OOBBh
OOBC-OOBFh
00Co-OOC3h
00C4-00C7h
OOCS-OOCBh
OOCC-OOCFh
00DO-00D3h
00D4-00D7h
OODS-QODBh
OODC-OODFh
00EO-00E3h
00E4-00E7h
OOEBh-OOEBh
OOEC-oOEFh
00FO-00F3h
00F4-00F7h
OOFS-DOFBh
OOFC-OOFFh
Notice that the vector address reserved for NMI is mapped into the Event Interrupt vector address space. This
should not cause NMI, which is a non-maskable Exception Interrupt, to be confused with the maskable Event
Interrupts. The NMI vector address is mapped into this space because NMI shares certain characteristics with the
External Interrupts. Both NMI and External Interrupts are generated by a signal on an external XA pin that is then
fed into the XA interrupt controller.
1997 Feb 10
587
Application note
Philips Semiconductors
XA interrupts
AN713
2.S.4. Software Interrupts
Software Interrupts act just like event interrupts, except that they are caused by software writing to an interrupt
request bit in an SFR. The standard XA implementation of the software interrupt mechanism provides 7 interrupts
that are associated with 2 SFRs. One SFR, the Software Interrupt Request register (SWR), contains 7 request bits
- one for each software interrupt. The second SFR is the Software Interrupt Enable register (SWE), containing one
enable bit for each software interrupt.
SWR (42Ah) - bit addressable
I
SWR7
SWRS
SWR5
SWR4
SWR3.
SWR2
SWR1
SWE2
SWE1
Software Interrupt Request
SWE (47Ah) - NOT bit addressable
I
SWE7
SWES
SWE4
SWE5
SWE3
Software Interrupt. Enable
Software interrupts have fixed interrupt priorities, one each at priorities 1- 7. These are shown in the table below.
Software interrupts are available in the XA Family Interrupt Structure but may not be present on all XA derivatives.
Consult the data sheet for a specific XA derivative for details on the availability of software interrupts.
Software Interrupts - Maskable
Description
Flag Bit
Vector Address
Enable Bit
Software interrupt 1
SWR1
0100-0103
SWE1
(fixed at 1)
Software interrupt 2
SWR2
0104-0107
SWE2
(fixed at 2)
Software interrupt 3
SWR3
0108-010B
SWE3
(fixed at 3)
Software interrupt 4
SWR4
01 OC-01 OF
SWE4
(fixed at 4)
Software interrupt 5
SWR5
0110-0113
SWE5
(fixed at 5)
Software interrupt 6
SWR6
0114-0117
SWE6
(fixed at 6)
Software interrupt 7
SWR7
0118-011 B
SWE7
(fixed at 7)
Interrupt Priority
Example of Software Interrupt:
OR.B
SWE, #01
SETB
SWR1
; enable Software Interrupt 1 indirectly
; since SWE not bit addressable!
; generate Software Interrupt 1
; branch to SWI1 Interrupt Service Routine if and only if the current Execution Priority (IM3-IMO) = 0
; if the Execution Priority of the running code is> 0, then SWI1 wiU NOT occur, but will remain pending
Example of ISR for a Software Interrupt:
SWI1:
CLR
SWR1
clear Software Interrupt 1
RETI
Notice that Software Interrupt 1 has a fixed priority of 1. This means that the IM3-IMO value would need to be 0
(Execution Priority of the current executing code equal 0) for this priority 1 interrupt to occur. Any IM3-IMO value
> 0 would block the Software Interrupt 1 from occurring. The SWR1 bit must be cleared by the user before exiting
the iSR or the Software Interrupt will re-occur.
1997 Feb 10
588
Application note
Philips Semiconductors
XA interrupts
AN713
It is also important to address the Software Interrupt Request bits by their bit addressable names and not by their
bit position in SWR since they are shifted (Le., SWR1 is SWR.O not SWR.1). Thus it is correct to use these
instructions:
SETB
CLR
; generate Software Interrupt 1
; clear Software Interrupt 1
SWR1
SWR1
but incorrect to use these instructions:
SETB
CLR
; actually would generate Software Interrupt 2
; actually would clear Software Interrupt 2
SWR.1
SWR.1
Since the Software Interrupt Enable register is NOT bit addressable it is wise to enable Software Interrupts as
shown below (paying close attention to the actual bit position of the desired enable bit):
OR.B
OR.B
OR.B
OR.B
OR.B
OR.B
OR.B
SWE,
SWE,
SWE,
SWE,
SWE,
SWE,
SWE,
#01H
#02H
#04H
#08H
#10H
#20H
#40H
; enable
; enable
; enable
; enable
; enable
; enable
; enable
Software
Software
Software
Software
Software
Software
Software
Interrupt 1 indirectly
Interrupt 2 indirectly
Interrupt 3 indirectly
Interrupt 4 indirectly
Interrupt 5 indirectly
Interrupt 6 indirectly
Interrupt 7 indirectly
Using the "OR" instruction allows the individual Software Interrupt to be enabled without affecting the setting of the
enable bits for any other Software Interrupts.
The primary purpose of the software interrupt mechanism is to provide an organized way in which portions of the
event interrupt routines may be executed at a lower priority level than the one at which the service routine began.
An example of this would be an event Interrupt Service Routine that has been given a very high priority in order to
respond quickly to some critical external event. This ISR has a relatively small portion of code that must be
executed immediately, and a larger portion of follow-up or "clean-up" code that does not need to be completed right
away (but does not need to wait until the main software loop). Overall system performance may be improved if the
lower priority portion of the ISR is actually executed at a lower priority level, allowing other more important
interrupts to be serviced.
If the high priority ISR simply lowers its execution priority at the point where it enters the follow-up code, by writing
a lower value to the 1M bits in the PSW, a situation called "priority inversion" could occur. Priority inversion
describes a case where code at a lower priority is executing while a higher priority routine is kept waiting. An
example of how this could occur by writing to the 1M bits follows, and is illustrated in Figure 2.
1997 Feb 10
589
Application note
Philips Semiconductors
AN713
XA interrupts
Level 10
interrupt
occurs
.,
Level 12
interrupt
occurs
,
,
,
,
,
Priority
lowered
1M =5
,
LevelS
interrupt
occurs
Return
to
level 5
,
,
,
,
,
0
0
,
,
,
t
I
I
,
,
0
I
0
,
I
,
,
MOV.b PSWH, xxx0101
,
I
Return
to
level 10
Return
to main
program
I
,
,
,
,
,
I
I
I
I
I
I
I
I
•
I
I.....--
Increasing Time
~
SU00849
Figure 2.
Priority Inversion (No Software Interrupts)
Suppose code is executing at level 0 and is interrupted by an event interrupt that runs at level 10. This is again
interrupted by a level 12 interrupt. The level 12 ISR completes a time-critical portion of its code and wants to lower
the priority of the remainder of its code (the non-time critical portion) in order to allowmore important interrupts to
occur. So, it writes to the 1M bits, setting the execution priority to 5. The ISR continues executing at level 5 until a
level 8 event interrupt occurs. The level 8 ISR runs to completion and returns to the level 5 ISR, which also runs to
completion. When the level 5 ISR completes, the previously interrupted level 10 ISR is reactivated and eventually
completes.
It can be seen in this example that lower priority ISR code executed and completed while higher priority code was
kept waiting on the stack. This is priority inversion.
In those cases where it is desirable to alter the priority level of part of an ISR, a software interrupt may be used to
accomplish this without risk of priority inversion. The ISR must first be split into 2 pieces: the high priority portion,
and the lower priority portion. The high priority portion remains associated with the original interrupt vector. The
lower priority portion is associated with the interrupt vector for a software interrupt, in this case Software Interrupt
5. At the completion of the high priority portion of the ISR, the code sets the request bit for software interrupt 5, and
then returns. The remainder of the ISR, now actually the ISR for software interrupt 5, executes when it becomes
the highest priority pending interrupt.
The diagram in Figure 3 shows the same sequence of events as in the example of priority inversion, except using
software interrupt 5 as just described. Note that the code now executes in the correct order (higher priority first).
1997 Feb 10
590
Application note
Philips Semiconductors
XA interrupts
15
14
13
AN713
Level 10
interrupt
occurs
Level 12
interrupt
occurs
Software
interrupt
5 issued,
return to
ievel10
12
'ii 11
~ 10
..I
~
'i:
0
'i:
c..
c
0
:s
(,)
C1)
><
w
LevelS
interrupt
occurs,
waits for
level 10
completion
Return
from
level 10,
levelS
interrupt
serviced
Return
from
levelS,
level 5
SW interrupt
serviced
Return
to Main
Program
t
9
8
7
6
High priority portion
of Leve! 12 ISR ends
with instructions:
SETS SWR5
RETI
5
4
3
Low priority (SWI 5)
portion of the original
Level 121SR
2
1
0
Increasing Time
-.
SUOO850
Figure 3. Correct Priority Execution with Software Interrupts
3.
XA-G3 INTERRUPT STRUCTURE
This section covers only the interrupts that are implemented on the XA-G3. Recall that not all interrupt options
covered in the XA Family Interrupt Structure are available in this first XA derivative product. Our focus here will be
on the actual XA-G3 Int~rrupts and any differences from the XA Family Interrupts. For details on XA-G3 interrupts
that are identical to the XA Family Interrupts please refer to the appropriate section in the "XA Family Interrupt
Structu re".
3.1. XA-G3 Interrupts
The XA-G3 defines four types of interrupts:
• Exception Interrupts - These are system level errors and other very important occurrences that include Stack
overflOW, Divide by 0, Breakpoint, Trace, User Mode RETI and Reset.
• Trap Interrupts - These are TRAP instructions, generally used to call system services in a multi-tasking system.
• Event Interrupts - These are peripheral interrupts from devices such as UARTs, timers, and external interrupt
inputs.
• Software Interrupts - These are equivalent to hardware event interrupts, but are requested only under software
control and have fixed priority levels.
Exception interrupts, trap interrupts, and software interrupts are generally standard for XA derivatives and are
detailed in the XA Family Interrupt Structure. Event Interrupts tend to be different on various XA derivatives and will
be explained in detail for the XA-G3.
The XA-G3 supports 38 vectored interrupt sources. These include 9 maskable Event Interrupts (for the various
XA-G3 peripherals), 7 Software Interrupts, 6 Exception Interrupts and 16 Traps.
The complete interrupt vector list for the XA-G3, including all 4 interrupt types, is shown in the following tables. The
tables include the address of the vector for each interrupt, the related priority register bits (if any), and the
arbitration ranking for that interrupt source. The arbitration ranking determines the order in which interrupts are
processed if more than one interrupt of the same priority occurs simultaneously.
1997 Feb 10
591
Application note
Philips Semiconductors
AN713
XA interrupts
3.2.
XA-G3 Interrupt Vectors
3.2.1.
Exception Interrupts
Exceptions - Non-Maskable
Vector Address
Arbitration Ranking
Service Precedence
Reset
000O-OO03h
o (High)
7
Breakpoint
0004-0007h
1
0
Trace
OOOS-OOOBh
1
1
Stack Overflow
OOOC-OOOFh
1
2
Divide-by-O
0010-0013h
1
3
User RETI
0014-0017h
1
4
Description
3.2.2. Trap Interrupts
Traps - Non-Maskable
Description
Arbitration Ranking
Vector Address
Trap 0
0040-0043h
1
Trap 1
0044-0047h
1
Trap 2
004S-004Bh
1
Trap 3
004C-004Fh
1
Trap 4
00SO-OOS3h
1
Trap S
00S4-00S7h
1
Trap 6
OOSS-oOSBh
1
Trap 7
OOSC-OOSFh
1
Trap S
0060-0063h
1
Trap 9
0064-0067h
1
Trap 10
006S-006Bh
1
Trap 11
006C-006Fh
1
Trap 12
0070-0073h
1
Trap 13
0074-0077h
1
Trap 14
007S-007Bh
1
Trap 15
007C-007Fh
1
1997 Feb 10
592
Application note
Philips Semiconductors
XA interrupts
3.2.3.
AN713
Event Interrupts
Event Interrupts - Maskable
Description
Flag Bit
Vector Address
Enable bit
Interrupt
Priority
Arbitration
Ranking
External interrupt 0
lEO
00SO-DOS3h
EXO
IPAO.2-0
2
Timer 0 interr{Jpt
TFO
OOS4-00S7h
ETO
IPAO.6-4
3
External interrupt 1
lEi
OOSS-DOSBh
EX1
IPA1.2-0
4
Timer 1 interrupt
TF1
OOSC-OOSFh
ET1
IPA1.6-4
5
Timer 2 interrupt
TF2(EXF2)
0090-0093h
ET2
IPA2.2-0
6
Serial port 0 Rx
RI.O
OOAD-00A3h
ERIO
IPA4.2-0
7
Serial port 0 Tx
TI.O
00A4-00A7h
ETIO
IPA4.6-4
S
Serial port 1 Rx
Rl.i
OOAS-OOABh
ERI1
IPA5.2-0
9
Serial port 1 Tx
TI.1
OOAC-OOAFh
ETI1
IPA5.6-4
10
3.2.4.
Software Interrupts
Software Interrupts - Maskable
Flag Bit
Vector Address
Enable Bit
Interrupt Priority
Software interrupt 1
Description
SWR1
01 0D-01 03h
SWE1
(fixed at 1)
Software interrupt 2
SWR2
01 04-D1 07h
SWE2
(fixed at 2)
Software interrupt 3
SWR3
01 OS-D1 OBh
SWE3
(fixed at 3)
Software interrupt 4
SWR4
010C-010Fh
SWE4
(fixed at 4)
Software interrupt 5
SWR5
011D-0113h
SWE5
(fixed at 5)
Software interrupt 6
SWR6
0114-0117h
SWE6
(fixed at 6)
Software interrupt 7
SWR7
011S-011 Bh
SWE7
(fixed at 7)
Arbitration ranking is only relevant when more than one interrupt (from the same category) is triggered at the same
time. For example, 2 exceptions or 2 event interrupts at the same time would use the arbitration ranking to
determine which interrupt source was serviced first. The interrupt with the lower arbitration ranking will be serviced
first, and thus has a higher priority. Since this simultaneous triggering is not possible for Traps or Software
Interrupts, these two interrupt categories do not require an arbitration ranking.
Since Exceptions and Traps are non-maskable they will always occur immediately and therefore do not require an
Interrupt Priority. Exceptions and Traps may be considered to have "infinite" priority.
1997 Feb 10
593
Philips Semiconductors
Application note
XA interrupts
3.3.
AN713
XA-G3 Event Interrupts
The 9 maskable Event Interrupts on the XA-G3 share a global interrupt enable bit (the EA bit in the IEL register)
and each also has a separate individual interrupt enable bit (in the IEH or IEL registers). Notice that the power-up
reset value for EA and each of the separate interrupt enable bits is O. This effectively disables each of the
maskable interrupts in two different places. For a maskable event interrupt to occur the global EA bit must be set to
"1" and the individual interrupt enable bit in the IEHlIEL register must be set for that particular interrupt source. The
interrupt enable bits were listed in the previous table of Event Interrupts along with their associated interrupt. As
shown below the interrupt enable bits are all bit addressable.
IEH (427h) - bit addressable
ETI1
ERI1
ETIO
ERIO
ETO
EXO
Interrupt Enable High Byte
IEL (426h) - bit addressable
I
EA
ET2
ET1
EX1
Interrupt Enable Low Byte
In the XA-G3 each event interrupt can be set to occur at 1 of 8 priority levels via bits in the Interrupt Priority (IPA)
registers, IPAQ-IPA5. The value 0 in the IPA field gives the interrupt priority 0, in effect, disabling the interrupt.
Since the IPAQ-IPA5 registers all have power-up reset values of 0, each of the event interrupts starts with a priority
of 0 and is thus disabled.
The XA-G3 differs slightly from the XA Family Interrupt Structure in the way that interrupt priority levels are set via
the IPA registers. Since only 3 of the 4 IPA register bits are implemented in the XA-G3, only 8 of the 16 possible
priority levels are available for each of the event interrupts. The value OOOOh in one nibble of the IPAQ-IPA5
register gives the interrupt priority 0, a value of 0001 h gives the interrupt a priority of 9, the value 001 Oh gives
priority 10, etc. The value 0111 h in one nibble of the IPAQ-IPA5 register gives the interrupt priority 15. Since the
MSB or 4th bit in each nibble of the IPAQ-IPA5 register is not implemented in the XA-G3, writing the value 0001 h
or 1001 h to the IPA register will yield the same results. The interrupt in question will be set to a priority level of 9 in
both cases. However, since the 4th bit in each nibble of the IPAQ-IPA5 register is not implemented it can not be
read back if written. If 1001 h is written to either nibble of the IPAQ-IPA5 register and then read back, the value
returned will be 0001 h.
On the XA-G3 the user may want to write any non-zero IPA value with the upper bit always set. This provides both
a reminder of the true interrupt priority and software compatibility with future XA derivatives.
1997 Feb 10
594
Application note
Philips Semiconductors
AN713
XA interrupts
IPAO(4AOh)
PTO
PXO
Priority Timer 0
Priority External 0
PT1
PX1
Priority Timer 1
Priority External 1
IPA1 (4A1h)
IPA2 (4A2h)
PT2
Reserved
Priority Timer 2
PTIO
PRIO
Priority Transmit 0
Priority Receive 0
IPA4(4A4h)
IPA5 (4A5h)
PTI1
PRI1
Priority Transmit 1
Priority Receive 1
SUOO851
Figure 4.
Interrupt Priority Registers IPAQ-IPA5
Since event interrupts in the XA-G3 only support 8 of the 16 priority levels available in the XA Family Interrupt
Structure, they can only have priorities of either 0 or 9-15. This means that Software Interrupts, with fixed priorities
of 1-7, can not be granted higher priority than any of the XA-G3 Event Interrupts.
Event interrupts in the XA-G3 can be grouped into three basic types:
1. Externallnterrupts
2.
Timer Interrupts
3.
Serial Port Interrupts
Let's take a detailed look at each type of event interrupt.
3.3.1. Externallnterrupts
External interrupts available on the XA-G3 are External Interrupt 0 and External Interrupt 1. These external
interrupts are controlled. by bits in the TCON register as shown below:
TCON (410h) - bit addressable
I
TF1
TR1
TFO
TRO
IE1
1T1
lEO
ITO
Timer/Counter Control
External interrupts can be either falling edge triggered or low level triggered. This is controlled by the Interrupt
Type Control bits 1T1I1TO. If 1T1I1TO is set to "1" then that interrupt will be set for falling edge trigger. If IT111TO is set
to "0" then that interrupt will be set for low level trigger. When an external interrupt is detected it will set the
Interrupt Edge Flag IE1I1EO. If the external interrupt is enabled the setting of this flag will generate an External
Interrupt 1 or External Interrupt o. The IE1/IEO flag will be cleared when the interrupt is processed or it can be
cleared by software at any time.
1997 Feb 10
595
Philips Semiconductors
Application note
XA interrupts
AN713
3.3.2. Timer Interrupts
Timer interrupts available on the XA-G3 are Timer 0 interrupt, Timer 1 interrupt and Timer 2 interrupt. Timer 0 and
Timer 1 interrupts are identical and are controlled by bits in the TCON register as shown below:
TCON (410h) - bit addressable
I
TF1
TR1
TRO
TFO
IE1
IT1
lEO
ITO
Timer/Counter Control
The timer is turned on by setting the Timer Run Control bit TR1ITRO to "1". The timer is turned off by setting the
Timer Run Control bit TR1ITRO to "0". When the timer/counter overflows it will set the Timer Overflow Flag
TF1ITFO. If the timer interrupt is enabled the setting of this flag will generate a Timer 0 Interrupt or a Timer 1
Interrupt. The TF1ITFO flag will be cleared when the interrupt is processed or it can be cleared by software at any
time.
Timer 2 on the XA-G3 has additional functional modes over Timer 0 and 1 that will not be discussed here. Timer 2
interrupts are controlled by bits in the T2CON register as shown below:
T2CON (418h) - bit addressable
TF2
EXF2
RClKO
TClKO
EXEN2
TR2
CIT2
CP/Rl2
Timer/Counter Control
Timer 2 is turned on by setting the Timer Run Control bit TR2 to "1". Timer 2 is turned off by setting the Timer Run
Control bit TR2 to "0". When the timer/counter overflows it will set the Timer 2 Overflow Flag TF2. If the timer 2
interrupt is enabled, the setting of this flag will generate a Timer 2 Interrupt. The TF2 flag will NOT be cleared when
the interrupt is processed so it must be cleared by software or the Timer 2 interrupt will reoccur. If RClK1/RClKO
or TClK1ITClKO are set to "1", then the Timer 2 overflow rate is being used as a baud rate clock source for
UARTO or UART1. In this case the TF2 flag will NOT be set when the timer/counter overflows.
If Timer 2 is enabled in external capture or reload mode, a negative transition on the T2EX pin will set the Timer 2
external flag EXF2. If the Timer 2 interrupt is enabled, the setting of the Timer 2 external flag EXF2 can also
generate a Timer 2 Interrupt. The EXF2 flag will NOT be cleared when the interrupt is processed so it must be
cleared by software or the Timer 2 interrupt will reoccur.
3.3.3. Serial Port Interrupts
The two Serial Ports on the XA-G3 are identical and are called Serial Port 0 and Serial Port 1. Each Serial Port has
two interrupts - one for the transmitter and one for the receiver. Notice that this is an enhancement over the Serial
Port on the 8051 (which had only a single shared interrupt for both the transmitter and receiver). This gives the
XA-G3 a total of four interrupts for the Serial Ports:
1.
Serial Port 0 Rx
2.
Serial Port 0 Tx
3.
Serial Port 1 Rx
4.
Serial Port 1 Tx
1997 Feb 10
596
Application note
Philips Semiconductors
XA interrupts
AN713
These Serial Port interrupts are controlled by bits in identical registers called SOCON and Sl CON. To avoid
confusion we will look only at SOCON as shown below:
SOCON (420h) - bit addressable
Serial Port 0 Control
The Serial Port 0 receiver is enabled by setting the Receiver Enable bit REN_O to "1". The Serial Port 0 receiver is
disabled by setting the Receiver Enable bit REN_O to "0". When a character is received by Serial Port 0 the
Receive Interrupt Flag RI_O will be set. If the Serial Port 0 Rx interrupt is enabled the setting of this flag will
generate a Serial Port 0 Rx Interrupt. The RCO flag will NOT be cleared when the interrupt is processed so it must
be cleared by software or the Serial Port 0 Rx interrupt will reoccur.
When a character is transmitted by Serial Port 0 the Transmit Interrupt Flag TI_O will be set. If the Serial Port 0 Tx
interrupt is enabled the setting of this flag will generate a Serial Port 0 Tx Interrupt. The TI_O flag will NOT be
cleared when the interrupt is processed so it must be cleared by software or the Serial Port 0 Tx interrupt will
reoccur.
Serial Port 0 also has a Status Interrupt flag STINTO that is contained in the Serial Port 0 Extended Status Register
(SOSTAT). If the STINTO flag is set to "1" the extended status flags are enabled and anyone of them can also
generate a Serial Port 0 Rx Interrupt by setting the RI_O flag. These extended status flags include Framing Error,
Overrun Error and Break Detect. Please refer to the XA-G3 data sheet for more details on these flags. The RI_O
flag will NOT be cleared when the interrupt is processed so it must be cleared by software or the Serial Port 0 Rx
interrupt will reoccur.
As mentioned earlier the function of the Serial Port 1 Interrupts is identical to the Serial Port 0 Interrupts and
therefore will not be covered here.
1997 Feb 10
597
Philips Semiconductors
Application note
Using the XA EAnlWAIT pin
AN96075
Author: Marco Kuystermans, Systems Laboratory Eindhoven, The Netherlands
ABSTRACT
The XA is the high speed 16-bit successor of the 80C51. To be able to use relatively slow (to the XA) 80C51
peripherals, a wait state generator is needed. The wait pin on the XA is multiplexed with the'E'A function and
therefore some precautions have to be taken. The behavior of this pin is different than on the 80C51, and users
must be careful using this pin.
SUMMARY
To limit the number of pins on the XA, some pins have multiple functions. EAlWAIT is one of them. During RESET,
the'E'A pin determines the memory configuraiton of the XA. If the XA runs the WAIT function takes over
functionality. To use both function, extra hardware is needed. This document describes how to construct this
hardware.
This document assumes that users are familiar with the XA and its bus interface.
y~
Purchase of Philips 12C components conveys a license under the Philips' 12C patent
to use the components in the 12C system provided the system conforms to the
12C specifications defined by Philips. This specification can be ordered using the
code 9398 393 40011.
CONTENTS
1. The XA EAlWAIT pin
1.1
1.2
1.3
1.4
Introduction
T:AlWAIT pin design considerations
Generating the EA signal
1.3.1
Generating EA using an RC network
1.3.2
Generating EA using XA reset behavior
1.3.3
Generating EA using a 0 flip-flop
1.3.4
T:AlWAIT lock up
Generating WAIT
1.4.1
The XA WAIT pin
1.4.2
Illegal WAIT configuration
1.4.3
Burst and non burst wait state generators
1.4.4
Generating NON burst mode WAIT states
1.4.4.1
Generating non burst WAIT IJsing one shot
1.4.4.2
Generating non burst WAIT using shift register
1.4.5
Burst mode wait state generation
1.4.5.1
Burst mode wait state generator using discrete logic
1.4.5.2
Burst mode wait state generator using CPLD
1.4.5.3 Combining one shot generator with burst detector
Known problems and solutions
1.4.6
2, Clock source
1997 Mar 17
598
Philips Semiconductors
Application note
Using the XA EAnIWAIT pin
1.
1.1
AN96075
THE XA EANIWAIT PIN
Introduction
The EAn (External Access) pin is used to configure the XA's memory configuration during reset.
After reset this PIN becomes a high active WAIT pin. The XA will run in external memory only mode
when EAn is held low DURING reset. When EAn is held high during reset, the XA will run in on-chip
or mixed memory mode.
During RESET all 1/0 pins are pulled high, however it depends on the logical level on the EAn pin if
it is a weak or a "strong" (low impedance) pull-up. The status of the EAn pin is immediately reflected
into the type of pull up, even during reset.
Unlike the 80C51 [2] the XA EAn pin cannot always be connected direct/yto Vdd or GND. If EAn is
connected to Vdd WAIT states will be inserted as soon as the XA accesses the external bus (but the
external bus only, because the WAIT pin only applies to the external bus).
The following table gives an overview of all possible WAIT/EAn combinations.
Table 1, Possible memory / WAIT combinations
WAIT needed
No WAIT needed
External onl
Mixed mode
Internal onl
Connect EAn to WAIT
generator
Connect EAn to GND
EAn circuit + WAIT
generator (1.3,1.4)
only EAn circuit
needed (1.3)
NOT APPLICABLE
Connect EAn to Vdd
In the following situations NO extra logic is needed:
If the XA must run in external mode only and NO wait states need to be generated; the EAnlWAIT pin can
be directly connected to ground.
When in external memory mode wait states are needed, the EAnlWAIT pin can be connected to the WAIT
state generator directly without extra logic. During reset ALL data strobes are high and consequently NO
wait signal will be generated (be absolutely sure that WAIT cycles are generated only as a result of a data
strobe, see 1 A)
In case the XA will run internal only, EAn can be connected to Vdd directly because no wait states can be
generated in this memory mode. Please be absolutely sure the XA is not accessing external memory in
this mode. The XA will enter an infinitive wait as soon as external memory is accessed. Setting the WAITD
(found in BCR, sfr address Ox46A, no bit address available [1]) bit can prevent this behaviour. This bit
disables the WAIT function completely.
In all other cases extra logic is needed described in the following sections.
1.2
EAnlWAIT pin deSign considerations.
Before the XA WAIT pin can be used, be aware of the following things:
The EAnIWAIT input pin has NO Smitt-trigger, this means that the rising and falling edges of WAIT
must be steep. If NOT, due to oscillation, the XA will generate unpredictable events, for example the
XA can generate a exceptions. This restriction rules out a wired logic solution, where both signals
are connected via an open drain to the EAnIWAIT pin. The slopes of this type 6f signals is not steep
enough to be used with the XA EAnIWAIT pin.
1997 Mar 17
599
Phiiips··Semiconductors
Application note
Using the XA EAnIWAIT pin
AN96075
A WAIT signal needs a holdtime and must be generated within a specified time, see Figure 1.
STROBE
\'---------
~:----t.1
WAIT
waittd
\'-----
Figure 1, WAIT hold time (2) and WAIT asserted after Strobe asserted (1)
Because XA data strobes (code read and data read/writes) lengths are individually programmable,
WAIT must be generated correspondingly [1]. It is impossible to generate WAIT states when the XA
bus controller is programmed as 1 clock cycle data reads without ALE. For most XA data cycles
WAIT needs to be generated at least 1 clock (plus 34ns) before the end of the strobe (decision
point). For code reads and wait cycles with strobes of one clock in length, WAIT may be generated
as late as 34ns before the end of the strobe (no extra clock).
It is allowed to generate a wait strobe before a data strobe is asserted. The following situation
however should be avoided:
avoid.td
STROBE
WAIT lEAn
\
I--
Figure 2, Too short WAIT hold time
Because of the combined WAIT and EAn "feature" this situation can occur when a application
initialises (see 1.3), as a result the XA can lock up.
1.3
Generating the EAn signal.
The XA samples the EAn pin at the rising edge of RESETn, however a hold time is needed (see
Figure 1). This hold time must be at least three clock cycles long. Therefore the EAn generating logic
mmhttd
I+ll
ItC=•••
RESETn - - - - - - ,
r---~+_---
'----_ _ _ _ _----'1
MODE • • • • • • • • •
Figure 3, Memory mode hold time
needs some delay. At 20MHz the hold time is 150ns, so just simply gating this signal with RESETn
will not do the job.
Absolute condition for proper operation of all EAn networks is that a "clean" RESETn is supplied to
the XA. The XA RESETn input is Smitt-triggered, so a normal RC network can be used to generate
the appropriate reset signal. However if a RESETn is constructed via an RC network and additional
logic, for example reset is generated by an other device, it is important to use Smitt-triggered logic. If
not, the additional logic can oscillate at the rising edge of RESETn. The XA does not tolerate this
oscillation on the RESETn pin, and can lock-up or initialises in the wrong memory mode.
1997 Mar 17
600
Philips Semiconductors
Application note
AN96075
Using the XA EAnIWAIT pin
1.3.1
Generating EAn using an RC network.
The easiest way of generating an appropriate EAn signal is using a simple RC network (Figure 4).
The RC loop is triggered at RESETn, holding the EAn signal for a certain period of time determined
by the RC time. It is very important to use Smitt-triggered logic due to the slow slopes.
U2A
U2B
U2C
At
'
EAn out
'-'"",-_...-'
--...
ASTn
UtA
.' . . . .
. '.~ EAn/WAIT pin
74HCT32
WA I TIre::::>-'
Figure 4, Generating EAn
The RC circuit can be calculated as follows:
I
Uth = Uo.e
RC
=> C=
t
R'ln(~:)
Uth = HCT14 Input threshold voltage [3].
Uo = HCT14 output voltage (5V) [3].
When Rln » R (e.g. 1k) and XA running @ 20MHz ( to
cycles before the first ALE is generated after RESET:
c=
=50ns), it will take a minimum of 7 clock
350ns
3
(0.9) => C,.. 200pF
10 ·In -
5
The minimum of 7 clocks applies when the XA is running external only (EAn =0). Using the EAn
circuit will force the XA to boot internally (EAn =1). Thus it will take longer before the first external
cycle is generated and consequently the value of the capacitor may be higher. Again, as stated in
section 1.1, the EAn circuit is not needed if absolutely NO external cycle will be generated (I.e. the
XA is executing internal only).
The jumper in 1.3.1 Figure 4 has been added to enable the user to choose between the two memory
modes. In case WAIT states are needed, the circuit can be combined with a WAIT state generator
via the OR gate. If there is no need for generating wait cycles, [EAn out] can be connected directly
to the XA EAnIWAIT pin (see Table 1).
The main advantage of this circuit is that it is very simple and exists of only one type of logic
(74HCT14 [3]). A disadvantage however is that this circuit can never be implemented in
programmable logic because a PLD is normally not equipped with Smitt-triggered inputs [5].
Therefore extra logic is needed something that you try to prevent with programmable logic.
In the next sections however alternative (C)PLD compatible solutions are presented.
1997 Mar 17
601
Application note
Philips Semiconductors
AN96075
Using the XA EAnIWAIT pin
1.3.2
Generating EAn using XA reset behaviour
ALE
PSENn
U1A
'.
to XA EAn/WAIT pin
....;::>
A19
A18
74HCT32
Figure 5, EAn generator using XA RESET state
During RESET all XA control, address and data pins are pulled high. Figure 6 shows that after reset
it takes some time before ALE will become low for the first time. This behaviour can be used to
T
l)OC~S/s
,
,
1
M
.A
.
,~
I
:
.
"
:
"" .....,
,
i'
,....-W
,
-
!'1V'"V
,
!
:
,
!
!NY
·1
;
.
!
r
i
!
C (13
.J
:.:: . 00
v
!
fv1
:)u .UI'lS
',/
\ ..
I..U V 6
~'>lov
"1996
11:02:52
Figure 6, RESETn and XA control line relationship, 3 = RSTn 14 = ALE
determine whether or not the XA is in reset state or not. This behaviour is based on the fact that an
external cycle will be performed, if not the XA runs fully internal and the EAn circuit is not needed.
Consequently EAnIWAIT can be connected to Vdd because WAIT only applies for the external bus
(see 1.1).
The ALE strobe can be used in combination with for example the PSENn strobe. Besides during
reset, ALE and PSENn are also high at the same time during an ALE cycle (I.e. address is available
1997 Mar 17
602
Philips Semiconductors
Application note
Using the XA EAnIWAIT pin
AN96075
on the address/data bus), consequently during this period also WAIT will be high. It is however
allowed to generate a WAIT strobe outside a data strobe, but in this case NO wait cycles will be
inserted,
To improve EMC behaviour it is desired to suppress these spurious WAIT strobes. This can be
achieved by ANDing ALE and PSENn with a couple address lines, e.g. A19 and A18. Of course if
the same address is used to decode chip selects, again this spurious wait will be generated (but now
less frequent). Figure 5 shows an implementation, more addresses can be decoded if a larger AND
gate is used.
If the Jumper is applied the XA will run on-chip (EAn high during reset), and consequently will cause
the I/O pins to be configured as quasi bi-directional. A weak internal pull-up will make the 1/0 pins
high. Therefore R1 in Figure 5 must have a relatively high value, so R1 > 10k.
A CPLD description of this circuit is relatively easy [4]:
WAIT
=
ALE & PSEN & A19 & ... & Ax + EAnIN;
Generating EAn using a 0 flip-flop
1.3.3
The final and most secure option is using a D flip-flop with asynchronous PRESET. During reset
(RSTn = 0) the D flip-flop is PRESET, the flip-flop is reset on the rising edge of the first ALE (data =
o clocked in), ALE is used as clock. The flip-flop will stay set as long as no exteral cycle is
performed. This means if the flip-flop has never been reset, no external cycle has been performed
(the XA runs fully internal), consequently the EAn circuit is not needed. In this case EAnlWAIT can
be connected to Vdd because WAIT only applies for the external bus (see 1.1).
U2A
74HCT74 JP1
RSTn
U1A
r-D-~""'---Q--;"'5,,--_-o
.
>--=-tCLK
~
Q
6
to XA EAn/WAIT pin
.-C:>
74HCT32
Vdd
Figure 7, Generating EAn using D-flip-flop
Jumper J1 is used to determine between internal/mixed or external memory mode. When jumper J1
is not applied, resistor R1 will pull down the XA EAnlWAIT pin or, if combined with a wait state
generator, one of the OR gate (U1A) inputs. This means that if jumper J1 is applied the XA
EAnlWAIT pin will be "0" at RESET, i.e. full external.
Jumper J1 and resistor R1 may both be removed if only on-chip memory mode is needed and no
selection between internal/external is required.
As described previously, the above described circuit can be discarded if the XA must run external
only. If NO wait states are needed, the EAn pin can be connected directly to GND without extra
logic. However if wait states are needed, EAnlWAIT can be connected to the WAIT state generator
without extra logic.
It is NOT important to buffer the RSTn signal with a Smitt-trigger because once the flip-flop has been
set, it will stay set, up to the rising edge of ALE
1997 Mar 17
603
Application note
Philips Semiconductors
Using the XA EAnIWAIT pin
AN96075
Tel<
C i'J C'v' i
QC)(i
°i °1 ; ()(); ;??
Figure 8, Generating EAn using RSTn and ALE
Figure 8 shows how EAn sets when RSTn is low and resets at the ALE rising edge. In this example
it takes more than 7 f..Ls before the first ALE strobe (= first external access, XA is running internal
because EAn is high) is generated (at 20M Hz). The reset falling edge is not displayed, because the
reset strobe has a length of several milli seconds. Due to the resolution of the digital storage scope
displaying both edges of reset will prevent the sampling of the first ALE and will consequently not be
displayed.
Many designs use programmable logic to connect a microcontroller to peripherals and generate chip
selects. The schematic shown in Figure 7 can also be implemented in a PLD. The following XPLA
designer equations show it is very easy to implement the above described Dflip-flop solution in a
(C)PLD:
pin 4;
/* use clock pin, see PZ5032 data sheet */
node istype 'reg';
equations
ea.pr
ea.clk
ea.d
1997 Mar 17
!RSTN;
ALE_eLK;
0;
604
Philips Semiconductors
Application note
Using the XA EAnIWAIT pin
1.3.4
AN96075
EAnIWAIT lock up
As mentioned in section 1.2 some EAnIWAIT situations can lock-up the XA. In this section an
example will show how an EAnIWAIT signal can lock-up the XA. Figure 9 shows a problem causing
design and should therefore not be used with any XA project. The transparent latch (U2A & U2B) is
SET during RESETn and is reset at the first external access (datastrobes WRHn, WRLn, PSEN or
ROn). The problem is EAnIWAIT is still high when the first data strobe is generated. This situation is
similar as displayed in Figure 2 (section 1.2); the WAIT hold time is too short and can lock-up the
XA. It depends on the propagation delay of the circuit how long it takes before EAnIWAIT is negated
after the first data strobe is generated. When using HCT logic the propagation delay for the NAND
gate (Figure 9) is 9ns [3].
U2A
RSTn
U1A
,
WAIT in
JP'T1" .
c=>- " " - - " - ,
, t o XA EAn/WAIT pin
-c:::>
EAn o u t ·
~~~~T~~
10k
WRHn
WRLn
PSENn
ROn
74HCT21
Figure 9, problem generating EAn solution
1997 Mar 17
605
•.
ea_ille.dsn
Application note
Philips Semiconductors
AN96075
Using the XA EAnIWAIT pin
1.4
1.4.1
Generating WAIT
The XA WAIT pin
With the WAIT pin it is possible to stretch an external XA bus cycle. However the WAIT pin has no influence on
code running from on-chip memory. When WAIT is asserted wait states will be inserted as soon as the XA
accesses the external bus (that is asserting RDn, PSENn, WRLn and/or WRHn). The WAIT pin is therefore a
part of the bus controller and not the core. When wait states are inserted the bus controller will halt the core up
to the point WAIT will be negated again. In the mean time also NO internal activity takes place, because WAIT
will only be granted in sequence. If not, the following erroneously situation can occur; The XA is executing code
internally, at certain pOint data is needed from the external databus, e.g. to make a go no-go decision. If during
this external access a wait signal is generated the external bus will be stretched, thus postponing the data fetch.
Wrong decisions can be made if the XA continues to execute the internal code without waiting for the necessary
external data.
It is possible to overrule the WAIT pin by setting bit WAITD in the SCR (sfr address Ox46A [1]) register.
The XA WAIT pin is not bi-directional and therefore the XA cannot halt external peripherals like on the 68000. It
is however possible to use the 68000's DTACKn with the XA, please refer to application note AN96098 [7].
1.4.2
Illegal WAIT configuration
The XA itself can never generate a WAIT strobe. When one ore more XA data strobes are
connected via an invertor to the XA WAIT input (Figure 10), the XA will latch-up as soon as it tries to
Figure 10, Illegal WAIT construction
access external memory. This is caused because when a WAIT is asserted during a data strobe, the
strobe will be stretched as long as this WAIT signal is asserted. This mechanism however can never
negate the WAIT signal again, because it is stretched by the same signal. This is the reason why an
external WAIT state generator needs to be build.
1997 Mar 17
606
Philips Semiconductors
Application note
Using the XA EAnlWAIT pin
1.4.3
AN96075
Burst and non burst wait state generators
XA code and data reads can be performed during a so called burst mode. In this mode one of the 3
(4 for 8 bit data bus) non-multiplexed LSB address lines can change without asserting ALE and
without negating PSENn or RDn (see Figure 11). This burst mode is transparent and cannot be
controlled by the user and/or programmer.
ALE
~~----------------------------------------------
PSEN
ADDRESS
I
AD·BUS
I
.
~
1-----t4---j
__________________________________~I____~r--
...
3
X
12
X
f-tl-j
.12 .
X
f-tl-j
L.jt5
~
I
X
-tl-j
X
-ItS
WAIT
t2
X
-tl-j
X
L.jt6
..
..
f--u-j
X
-ItS
X
L.j1S
Figure 11, burst (code) read
Non bust mode wait state generators can therefore only be used in situations where no burst is generated by
the XA, i.e. 16 bit write cycles. Or if the connected peripheral Is only accessed one byte or word at the time. In
all other cases a burst mode walt state generator is needed.
Generating NON burst mode WAIT states
1.4.4
Generating non burst WAIT using one shot
Several XA wait state implementations are available, the easiest solution is using a one shot
generator (Figure 12). Looking at the schematic you can see that the WAIT signal is only generated
AFTER a data strobe (i.e. RDNIWRLIWRH/PSEN) is asserted. The data strobe will also trigger the
one shot generator, generating a pulse with a length determined by the RC time. By ORing the
strobe with a CSn signal you can select which device needs WAIT states.
+5V
DATASTROBE
CHIP SELECT
WAIT
RESETr>-------...J
EAn In
>---------------------I
L ....
Figure 12: Wait state generator using one shot
The WAIT duration is always a whole number of clocks, therefore the RC time is not very critical
except at turn over stages. The number of wait states can be made selectable when R1 is replaced
by an adjustable resistor.
1997 Mar 17
607
1
Application note
Philips Semiconductors
AN96075
Using the XA EAnIWAIT pin
Generating non burst WAIT using shift register
A shift register offers a more reliable way of generating wait states. Figure 13 shows you a shift
register implementation. This circuit only generates a WAIT signal during a datastrobe. The shift
WRln
WRH nL ...... ------·····---L~_ ~
ClK
CSn
Figure 13: Wait state generator using shift register
register master reset is released when one of the data strobes is asserted AND Chip Select is low.
The chip select input has bee included to make it possible to insert WAIT states for particular
devices. The WAIT output will immediately become high and ones (A and B input are one) are
shifted into the shift register after a data strobe is asserted.
Counting will continue until the selected (by for example a jumper) shift register output becomes
high. Consequently the WAIT signal will be negated and the XA will continue by negating its strobe
resulting in clearing the shift register.
To save logic in contrast with all other WAiT/EAn designs in this design for "EAn in" a NOR is used
instead of an OR.
The circuit above serves as an example, more solutions are of course available [6].
1.4.5
Burst mode wait state generation
The XA burst mode can cause several problems: firstly NO WAITs are inserted when one of the
address lines changes, consequently the burst cycle is too fast for the connected peripheral.
Secondly, depending how the wait state generator is constructed, waits can be inserted endlessly
because the hardware expects a datastrobe.
To solve this problem besides the PSENn and RDn strobes also the address lines A1-A3 (in 8 bit
databus mode AO-A3) must be monitored. So if PSENn is asserted AND the WAIT cycle has ended,
new wait states need to be inserted if one of the non multiplexed addresslines change
PSENn H->L
WAIT H->L & PSEN = L
If AO-A3 H<->L & PSENn
1997 Mar 17
L
=> WAIT = 1
=> monitor AO-A3
=> WAIT = 1
608
Application note
Philips Semiconductors
AN96075
Using the XA EAnIWAIT pin
Burst mode wait state generator using discrete logic
Figure 14 shows the same shift register used in Figure 13. The magnitude comparator U1
(74HCT85) is the heart of this design. If no data strobe is generated (Le. RDn = PSENn = WRLn =
WRHn = 1) the comparator's A=B output will be zero, because the 74HCT85 A3 input is low and the
ClK
C'>,·- - - - - - - - - - - - - . , . : - ; - - - - - - ,
~~ F·····~···'Sa===_======·~··..1t1·Q··
~~l!
AO
........-0
.......•-0
~ ~~B
~:~
°LL...--'-----"--'4
~74=HC=T85,---'
R1
WRLn
WRHn
ROn
PSENn
..l ....···C>WAIT
CSn
EAn in
Figure 14, wait state generator with address monitor
B3 input is high. During this state the shift register is a-synchronously cleared, consequently ALL
74HCT164 outputs (QA to QH) are low. When QA is zero the 74HCT573 latch enable input (C) is
high and therefore transparent for address lines A 1 to A3. If one or two (both the WRLn and WRHn
can be asserted simultaneously) strobes are asserted, the 74HCT85's A=B output will become HIGH
because now both A3 and B3 are low. The shift register will start to shift in ones and QA will be high
after one clock cycle. When QA is high the 74HCT573 latch enable will be low (C=O) and the current
address is latched in. A wait signal will be generated as soon as both CSn and one or more XA data
strobes are low up to the point the selected (by jumper) will be become high.
When during a PSENn or RDn strobe (no burst is generated in case of a 16bit write cycle) one or
more addresses change (A 1.. A3). the comparator's A=B output will be low again and resets the shift
register. Consequently QA will also be low and the latch (74HCT573) will be transparent again.
Immediately the A=B output will become high and the shift register starts to shift. Because ALL shift
register outputs are low after the 74HCT164 is cleared, a NEW wait cycle will be generated.
Burst mode wait state generator using CPLD
The circuit described in the previous section can also be constructed by using a Philips
Semiconductors CPLD (e.g. PZ5032 [5]). The XPLA [4] module displayed below is based on Figure
14, except the shift register has been replaced by a counter. This results in less nodes, three in
stead of eight.
Module
!
BURSTMODE_WAITSTATE
** ** ** 'It * ** 'It
'It 'It
* ** **'It ** ** * 'It * * * * ** ** 11:* ** **** 'It **'It * ** * **'/t *** ** *** ** /
1* this waitstate generator has a FIXED number of wait states *1
1* Please change {number_of_wait} by required value
1997 Mar 17
609
*1
Philips Semiconductors
Application note
Using the XA EAnIWAIT pin
AN96075
1'* '* '* '* * '* '* '* * '* '* '* '* '* '* '* ** '* '* '* ** '* '* * * ** ** ** * '* ** '* '* '* '* * ** * * 1t *** ** ** ** '* ** '* ** /
Title
'wait state generator for the XA'
CLOCK
pin;
/* clock signal from XA oscillator *1
RST
node;
1 * internal counter reset * /
PSEN
pin;
1* program data strobe input * /
WAIT
pin istype 'reg_d';
/* WAIT signal output */
1* Alternative see section 1.4.6:
WAIT
pin; *1
WRL
pin;
/ * write low strobe input * 1
WRH
pin;
/* write high strobe input * /
RDN
pin;
1* data read strobe input * /
pin;
CSN
/
pin;
EAN_IN
"
chip select input *1
/* XA memory mode pin input *1
node;
1* Alternative see section 1.4.6:
bit3 .. bitO
wait_is_true
node istype 'reg_d'; "I
node istype 'reg';
1* Up counter register bits
= (bit3 .. bitO);
count
a2 .. aO
I" Up counter register
pin;
I
compa = [a2 .. aO] ;
*1
*/
* address sense pins "/
1* address sense register
*1
ie
node;
/. latch enable, used internal only* 1
latch3 .. latchl
node istype 'com';
/ * latched in address * /
latchinout = [latch3 .. latchl] ;
/ * address latch register "I
1* i f XA is used in 8 bit mode please add latchO *1
/ ** ****'ft***** **** *** **** ** ************** ** ******* ** **** ******* /
equations
le
=
(count
==
0);
latchinout = (le
1997 Mar 17
&
1 * latch is open when count is zero * /
compa) # (latchinout
&
lle);
1* latch in current a3-al*1
610
Philips Semiconductors
Application note
Using the XA EAnIWAIT pin
RST
(PSEN & RDN & WRL & WRH)
AN96075
# (compa != latchinout);
/* do not
count when no strobe is asserted * /
count.CLK = CLOCK;
count.AR = RST;
/ * do not count more than 7 * /
count.d = count.q + (count < 7);
/* Alternative, Add this line. see section 1.4.6: wait_is_true.CLK = CLOCK; */
wait_is_true = (count < (number_ot_wait))
WAIT. CLK = CLOCK;
& (! CSN) ;
/* Alternative see section 1.4.6
WAIT = ((! PSEN # !WRL # !RDN # !WRH) & wait_is_true) # EAN_IN;
end;
On the next page a simulation can be found, the {numbecoCwait} is 6.
1997 Mar 17
611
remove this line */
Philips Semiconductors
Application note
Using the XA EAnIWAIT pin
~
U
a
..J
u
Z
W
(J)
a...
AN96075
..J
a:::
3:
I
a:::
3:
Z
o
a:::
Z
(J)
U
Z
H
zl
lSI
a:
a:
612
f-
H
a:
3:
a:
w
Figure 15, CPLD simulated with number of waitstate
1997 Mar 17
C\J
a:
=6
Application note
Philips Semiconductors
AN96075
Using the XA EAnIWAIT pin
The following oscilloscope picture shows that when one or more addresses change, and PSENn or ROn is low,
a WAIT will be generated. In the picture 1 represents the data strobe, 3 and 4 are Ai and A2, and 2 is WAIT
Tel<
T I
~,
l~i
~!lH=llJ=:J ~ ~.
l~J
!l-_J
t-:J r::;:-- .:,-:'
...... "(" ......
n In
~
2 ••
L
!
i·
.
'chlu'S:o-OV' .
en3
~5.
..
; :
!~·tJ······. . . ··~·~~~···'IF'Flt'~!'·F1]
:W~hUH···········~·······\
(,hZ' ':)':Cli:r\/u" "S.T'·S'CijTi·s'···"\f;raUi·,u·thl··'
00 \/
.. 6 f'J 0 v
"
Figure 16, Oscilloscope picture with 1
1'5"
=PSENn, 3 =Ai, 4 =A2 and 2 =WAIT
out. Please notice the abandoned cycle on the right hand side of the picture. When a cycle is abandoned the
data strobe will be negated again. The WAIT circuit does NOT generate a WAIT when none of the data strobes
is asserted.
Combining one shot generator with burst detector
As an alternative for the burst mode wait state generator with shift register a burst mode wait generator with a
one shot generator is displayed. In fact Figure 17 is a combination of Figure 12 and Figure 14 where the shift
register is replaced by the one shot generator. This needs some minor changes in the burst mode detector
because the one shot can not generate a short pulse to open the input latch. In this design the opening and
closing of the latch is achieved by an OR gate which is connected to the comparator's A > 8 and A < 8 output.
This wayan A :t:- 8 signal is constructed, and is high when no strobe (PSENn, ROn, WRHn or WRLn) is
generated because input A3 is low and input 83 is high. When A :t:- 8 is high the input latch will be transparent.
When a datastrobe is generated both inputs A3 and 83 are low and consequently A = 8 will become high (and
of course A :t:- 8 low) resulting in closing the address input latch. The one shot generator will be triggered on the
positive edge of A =8 and thus generating a WAIT.
After WAIT is negated (determined by the one shot generator RC time), the XA will continue running. In a burst
mode cycle the data strobe will not be negated, instead one or more of the addresses (A3:1) will alter. The
address change will make A :t:- 8 high again and consequently the latch will be opened triggering the one shot
1997 Mar 17
613
Philips Semiconductors
Application note
Using the XA EAnIWAIT pin
AN96075
generator. When the latch is transparent the new address will also be available on the comparator's B2:0 input
and thus making A#- B low, resulting inclosing the latch.
At the end of the cycle when the data strobe is negated, A#- B will be high and the latch transparent.
In this design the chip select input is connected to the comparator's A > B input. If chip select is not asserted
(Le. CSn =1), the A =B output will be low and therefore NO waitcycles will be generated.
+5V
Al
A2
AO
A1
A2
A3
t=lt===~
A3
:: i r 1 14
lOOp
CEXT
..•15-. REXTICEXT
I
2
.•.... i1
74HCT123
WRLn
WRHn
U4A
A
B
CLR
WAIT
74HCT32
c->-----''-I
~~~Nn F~=::i~==/
CSn
RESET
EAn in
Figure 17, burst mode wait state generator with one shot
1.4.6
Known problems and solutions
The CPLD counter used in section 1.4.5 has one drawback, it can generate spikes. For example the
equation count < 7 generates a spike at the 4th clock. Going from 3 to 4 :
Q11 (3) -> 1U(spike 7) -> 100(4)
To prevent this problem WAIT has been constructed around a D flip-flop (see XPLA listing section
1.4.5 [4,5]) . It is however NOT guaranteed that this construction always will function. The XA and
CPLD are both clocked on the same source, in some situations it can take up to a clock period
before a WAIT is generated. An XA data strobe is generated at the rising edge of CLOCK (although
this cannot be guaranteed), just the next rising edge will clock the connected logic resulting in WAIT
being asserted. This delay can be a problem, for example when the XA write strobe length has been
programmed as one clock cycle. In that case the wait signal must be generated at least at tx = 1* tc 34ns. Where tc is the length of the current strobe, this means that wait must be generated 34ns
before the end of the strobe.
When the (CPLD [4,5]) logic generates a wait after one clock (minus 17ns, I.e. internal XA delay
between rising edge input clock and falling edge strobe) it will be too late and WAIT will not be
sampled. See Figure 18 for an oscilloscope picture, this picture shows that the wait signal is 23ns
late:
tl = 34 - (tpxa - tpl) => tl = 23ns (tl = time late, tpxa propagation delay XA, tpi propagation delay logiC) This
situation occurs when BTRL (Bus Timing Register Low) contains Ox6F [1].
1997 Mar 17
614
Application note
Philips Semiconductors
AN96075
Using the XA EAnIWAIT pin
PM3394B
CLOCK
wtnJtJt9JtftftFtJrrtlt
-
...
~....
-
WAIT~.~
L._""".~~ lpxa
WRL
~
- T~
i
i
2-
-
tpl
= 11ns
ii
~. Jx=)4ns '.
._ .._). <0-
5.00 V=
=CH2 5.00 V=
~CHl
=~~,3, ~:9P v,~
WAIT should have
been generated here
STOP
Alt1'
I;17',~ ~9Pp~~, ~;.,9.4<;lv, ,c,lt 2 -;-"
,=
Figure 18, WAIT generated too late
Please note: although the number_oCwait in this design was 6, WAIT is only high for ONE clock
period. This is caused because the counter is cleared in case NO strobe is asserted.
This problem can be solved in two ways, the first method is using !CLOCK in stead of CLOCK. Now
WAIT will be asserted at the falling edge in stead of the rising edge, resulting in a delay of half a
clock cycle plus logic (invertor) propagation delay_
Also this solution can provoke problems, caused by the internal XA delay between clock and the
data strobe falling edge (tpxJ This delay is constant (at least not depending on the clock frequency)
and is around 17ns. The wait strobe must be generated after an XA data strobe is asserted,
otherwise an extra clock cycle will be inserted before WAIT will be generated. So:
0.5 * tc = 17ns - 6ns ==> tc = 22ns
Resulting in a maximum frequency of 45MHz, the maximum operating frequency of the XA is
currently 30M Hz, therefore this solution can be used without restrictions. Please notice, the logic
propagation delay can compensate tpxa -
1997 Mar 17
615
Application note
Philips Semiconductors
Using the XA EAnIWAIT pin
AN96075
The second solution can be found in the CPLD equations. In stead of using clocked logic, combinatorial logic
can be used instead to generate WAIT. The XPLA source need to be adapted (see comment in CPLD source,
lOOns
SOns
I I I
1SOns
I I I
I I I I I
200ns
1
I
I
CLOCK
!CLOCK
STROBE - - - - - - - - - - ;
clckrel.td
MtPII
WAITt
~tPll
----------------~_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ __ _
WAITL
'I
Figure 19, relation between strobe/wait/clock
section 1.4.5) to realise this implementation.
In the new equations the WAIT signal is generated immediate (minus propagation delay logic) after a data
strobe is asserted. Because the relationship between the supplied clock and the XA core clock will never be
Ons, the length of the WAIT strobe is not a exact number of clocks. In stead it can be up to one clock longer
than defined. In case of using CLOCK:
tOxt 'a2
=tc - tpxa
In case of using the inverted CLOCK:
t Oxt'.1
=0.5 " tc - (tpxa - tpclk)
if to < (tpxa - tpclk) then:
t Oxt 'a2 1.5 " to - (t px• - tpclk)
to,.".
= time making wait strobe longer
tc
=clock period
=time difference between rising edge clock and falling edge strobe
=time difference between CLOCK and !CLOCK
tpxa
tPClk
tp,,& tpl2
= logic propagation delay
Because tpl1 and tpl2 are both propagation delays caused by the same logic, that cancels both signals in the wait
strobe length formula.
tpxa and tPClk are both measured and serve as an indication, the exact value can vary (influenced by temperature
and supply voltage).
The next chapter (2) describes how to supply a clock source.
1997 Mar 17
616
Philips Semiconductors
Application note
Using the XA EAnIWAIT pin
2.
AN96075
CLOCK SOURCE
Some designs in the previous sections need a CLOCK. Unfortunately the XA does not have a CLOCK output,
so a core CLOCK reference is not available. Of course the XA XTAL2 output can be used, but this signal and
the core clock are not in phase.
Several ways are available to offer a CLOCK source to external devices. The most common way is using a
normal crystal and supplying CLOCK by XTAL2 (see Figure 20). Please be aware that extracting the CLOCK
signal from this pin will raise the capacitive load (input capacitance CPLD is 8pF) on the XTAL2 pin, this can be
corrected by lowering the capacitor (C2) normally found on the XTAL2 pin.
U1
C1
+d
3S
EA/Vpp/WAIT
XTAL1
2D
20
10
A4DO/PO.O
A5D1/PO.1
A6D2/PO.2
A7D3/PO.3
A8D4/PO.4
A9DS/PO.S
A 1 OD6/PO.6
A11D7/PO.7
XTAL2
,
RST
CLOCK
14
Figure 20, Clock source using XTAL
A better clock is supplied when using an XO (crystal oscillator) device. Advantage of these type of oscillator is
the square wave output. An external CLOCK can be supplied in two ways, connecting the XO output to both the
XA XTAL 1 input and CPLD or other logic (Figure 21).
U1
+5V
35
Vdd
CLOCK
8
21
EAlVppJWAIT
XTAL1
A4DO/PO.O
ASD1/PO.1
A6D2/PO.2
A7D3JPO.3
A8D4/PO.4
XTAL2
GND
-
nc
XO
CLOCK
A9D5/PO.5
A10D6/PO.6
A11D7/PO.7
RST
14
Figure 21, Clock source using XO
The other way is less conventional, the XO output is connected to the XA XTAL 1 input, the XA XTAL2 output,
normally dangling when using an external clock source, is connected to the CPLD or other logic. For both
configurations, crystal or XO, XTAL2 is used to supply CLOCK, so in designs where crystals can be exchanged
with XO's and vice-versa no jumpers are needed. Secondly the XTAL2 output is inverted, so the XA itself can
provide a !CLOCK source (see section 1.4.6). XTAL2 can be used where a !CLOCK signal is needed, and
therefore logic can be saved.
1997 Mar 17
617
Philips Semiconductors
Application note
Using the XA EAnIWAIT pin
AN96075
U1
+5V
35
X1
14
Vdd
CLOCK
8
21
EAlVpp/WAIT
XTAL1
C1
20
7
-
GND
XTAL2
nc
XO
A4DO/PO.0
A5D1/PO.1
A6D2/PO.2
A7D3/PO.3
A8D4/PO.4
A9D5/PO.5
A 1 OD6/PO.6
r')7/PO.7
RS'"
_
CLOCK
14
-
Figure 22, Clock source using XO and XTAL2 output
The CLOCK lines should be as short as possible to improve EMC behaviour and supplying a clean CLOCK to
the peripherals.
REFERENCES
[1]
16-bit 80CS1XA Microcontrol/ers (eXtended Architecture) Data Handbook IC2S, Philips Semiconductors
[2]
80CS1-based 8-bit Microcontrol/ers Data Handbook IC20, Philips Semiconductors
[3]
High speed CMOS Logic Family Data Handbook IC06, Philips Semiconductors
[4]
XPLA Designer version 2.1 User's Manual
[5]
PZS032 32 macrocel/ CPLD datasheet, Philips Semiconductors
[6]
Electronic Circuits, Design and Applications, U. Tietsche, Ch. Schenk Springerverlag, ISBN 3-540-50608-X
[7]
Application note AN96098, Interfacing 68000 family peripherals to the XA, M. Kuystermans, PS-SLE 1996.
1997 Mar 17
618
Product specification
Philips Semiconductors
Interfacing 68000 family peripherals to the XA
AN96098
Author: Marco Kuystermans, Systems Laboratory Eindhoven, The Netherlands
ABSTRACT
The XA is not limited to interface to 80XX compatible peripherals. By using some glue logic, or a PLD if available,
the XA can be interfaced to a 68000 compatible peripheral. Using the 68000 DTACKn signal enables the use of
slow 68000 peripherals without the need of an external WAIT state generator.
SUMMARY
Many peripherals with a 68000 compatible interface are on the market. This document shows that these 68000
peripherals can be interfaced to the XA vel}' easily. This means that an XA user is not limited to an XA compatible
peripheral in his XA design.
Several interfacing aspects are covered: normal interfacing, interrupt interfacing, and bus arbitration.
This document assumes that users are familiar with the XA and its bus interface.
Purchase of Philips 12C components conveys a license under the Philips' 12C patent
to use the components in the 12C system provided the system conforms to the
12C specifications defined by Philips. This specification can be ordered using the
code 9398 393 40011.
CONTENTS
1. How to interface 68000 family peripherals to the XA
1.1
1.2
1.3
1.4
1.5
2.
Introduction
1.1.1
General remarks
Differences between an 80XX and 68000 bus
Using DTACKn to Generate an XA compatible WAIT signal
1.3.1
Generating 68000 bus signals
1.3.2
68000 DTACKn signal
1.3.3
Generating the XA WAIT signal
1.3.4
General remarks
68000 Interrupt mechanism
68000 bus arbitration with the XA
Example, Interfacing the PCF8584 to the XA
2.1.1
2.1.2
1996 Oct 25
PCF8584 to XA implementation
Usage
619
Philips Semiconductors
Product specification
Interfacing 68000 family peripherals to the XA
1.
AN96098
HOW TO INTERFACE 68000 FAMILY PERIPHERALS TO THE XA
1.1
introduction
The Philips Semiconductors XA is a 16 bit high speed microcontroller with an 80XX compatible bus
(found on e.g. an 8051 or 8048 with separate read and write strobes). This means that popular
periherals with an 80XX compatible bus can be used with the XA.
This documents shows that besides 80XX peripherals also peripherals with a 68000 bus can be used.
Extra advantage is that the 68000's DTACKn output is extremely suitable to generate an XA WAIT
strobe. The main advantage of using this DTACKn output is that a full handshake is available
(synchronous) and consequently NO external wait state generator is needed.
1.1 .1
General remarks:
• Because the XA wait mechanisme is rather complex, this document is NOT intended for the starting
XA user, instead some fundemental knowledge about the XA is needed .
• In this documed is assumed that the nessecary address latches are provided (2 x 74HCT573), i.e. a
demultiplexed bus is used:
U2
U1
e-2§...
EAlVpp/wAIT
~
XTAL1
~
XTAL2
A4DO/PO.0
ASD1/PO.1
A6D2/PO.2
A7D3/PO.3
A8D4/POA
A9DS/PO.S
43
A4 )()
4
39
A
!~ ~r.: ~}
~ ~ ~g~~:g:~
A12D8/P2.0
y~
"',
'~ ~~
V>
/
~
P3.41T0
A16D12/P2.4
[3--1-'- P3.5IT1/BUSW A17D13/P2.5
WRHn 2
A18D14/P2.6
Ai
3
P1.0/AOi\iiiRH A19D1S/P2.7
~
~ ~~:~~~~
~
~
g....Jl.
P1.4/RxDi
P1.SlTxD1
~~ :~~~EX
4
-!';
~R
loll
6
A'
r.:
r.:
7
37
A
Inc-:
Inc-:
8
36
A
n7
11 ri'i
9
loll
~~
I~
2~
,..
11
AII='
~ ~~:~~~ ~1~g1~E~j ~~ ;~. ~
~
;
19
1-R
03l~
04
05
06
g~
15
14
13
10
/
12
11
/
/
C
U3
2 ';;;"::;;'---. 19
~ D1
01
if!
4 g~
02
17
~i
w~~~;:~.i~ ~~:::n-~-~ I\.~
~:gg:~~"6 J--1.Le
g~
01
02
~ 7~:CT573
)/
30
PSEN 33 A. rALE/PROG ~
D1
D2
D3
D4
DS
D6
~ g~ g~ ~i
I\.
I\.
~----------------~
AI 1':
8
D6
D7
06
07
13
,,~
11
D8
08
12
A
Io...i
p::::> A4-A19
~
~------------------------------------~---------------------------~~.~C=>~~~~5
C
~L.0";,,,C_ _--1
XAG37
-:-
Figure 1, demultiplexed XA bus
1996 Oct 25
620
74HCT573
t::S~~t~
c::::> PSENn
V~RDn
Product specification
Philips Semiconductors
AN96098
Interfacing 68000 family peripherals to the XA
1.2
Differences between an 80XX and 68000 bus
A 68000 bus compatible peripheral has a significantly different interface than a 80XX bus type
peripheral. 68000 and 80XX bus interfaces consists of several different control signals (see Table 1):
Table 1, Microcontrol/er control signals
.,
-
--
Data strobes
"68.k. c.Q!!JpatipJ8_..
peripheral
.... XA c:,ompatible
. " _. . .... 80XX c:,ompatible
peripheral
2+ direction:
peripheral
2:WRn+ROn
RlWn>*(UPSh+ . I,..DSn)
asn
Chip select
CSn
-~~-~----'"-~---. --~--~--~~----';--.-~~--,~~~,....-..;.--~~~~~~~~
Handshake
PTACKn
NotavaUable
Code strobe
Not available
PSENn
Both 68000 and 80XX peripherals use data strobes to read or write data. An 80XX peripheral has
separate read and write strobes (see Figure 3), a 68000 peripheral uses a data strobe (only indicating a
data transfer, not the direction, see Figure 2) AND a RlWn signal to indicate a READ (RIWn = 1) or a
WRITE (RlWn = 0) cycle. At both the 68000 and 80XX data strobes' rising edges data will (write) or
must (read) be valid.
L:J
RIWN
7
(U/L)OSN
/
ASN
\
A 1-A23
/
c=J---{
}---c=J
00-015
CSn
\
/
Figure 2, 68000 bus
ALE
~
RON
\
WRxN
J
AO
I
~ A~-A:l9
A1-A3
I
X
r----\
QA T A
A1-A3
CSn
Figure 3, 80XX bus
1996 Oct 25
CJ
,- 621
X
X
Philips Semiconductors
Product specification
Interfacing 68000 family peripherals to the XA
AN96098
Normally an 80XX chipselect (not) signal is generated by decoding addresses after the address
latches. To avoid spikes on this signal (addresses can change during ALE = 1) the CSn signal should
be gated with ALE. A 68000 chipselect can be constructed by decoding addresses and gating it with
the Address Strobe (ASn) signal generated by the 68000.
Some 8 bit wide 68000 compatible peripherals do not have separate Data Strobe and Chip Select
inputs. On these peripherals the Data strobe and Chip Select are multiplexed to one signal. In this
document a multiplexed DSn (data strobe) and CSn (chip select strobe). will be called CSn.
Real 16 bit wide 68000 peripherals have two Data strobes; UDSn (upper data strobe) and LDSn (lower
data strobe) and consequently need a Chip Select (not) input.
Both the XA and 68000 are 16 bit microcontrollers. Therefore address line a has no meaning and is on
the 68000 decoded to UDSn (AO =0, little endianl) and LDSn (AO =1). On the XA AO is decoded to
WRLn (AO = 0, big endian!) and WRHn (AO = 1). On the XA no separate read low and high are
available. All read cycles (except if the XA bus is configured as 8bit) are 16 bit, if only 8bits are needed
the upper or lower 8 bits are discarded.
The following pictures show how to convert XA strobes to 8 bit or 16 bit 68000 peripherals.
WRl..nr::::.:~·:-J-r\~_-'~I-ROn
C>_·············L-J
C'>RlWn
J----[=---..
_ _ _ _ _--Ic::>osn (not mUhlplexed)
- - - - - - - c : : > c s n (not muhlplexed)
--D
esn[:::.:·.~>------"--
C:>CSn (Multiplexed)
Figure 4, converting XA to 68000 strobes (8 bit)
:l..n
C>_·_- ._. . . . . . 1\........._ . . . . . .. . .
. . .r----"LOSn
~
--
WRHn C::::~:---l------I--
o
o
Orl
·. ·········------c::~·uOSn
coro
\O~
Q)
.j.l~
'--__·_·_O············----·-·-.. .C::>RlWn
•.-i P,
..Q'.-i
~
\0 Q)
rlp,
esnC:.:.:'>----------------lC>cSn
Figure 5, converting XA to 68000 strobes (16 bit)
Please be aware that a 68000 peripheral has no separate data and program memory area, instead a
lineair memory space is available with mixed memory. It is up to the user to decide in which XA
memory area the 68000 peripheral is located.
Because on the XA it is not possible to write to program memory, writing is always performed via the
XA data write strobe (WRHn and/or WRLn). Writing is achieved through the XA's data and extra
segment (OS & ES, see XA user's guide [1 D. Reads can be executed in both data (ROn strobe via ES
& OS) and program memory (PSENn via Program counter or Code segment).
In Figure 4 and Figure 5 ROn can be replaced by PSENn. If PSENn is used to read data from a 68000
peripheral, consequently MOVC must be used.
1996 Oct 25
622
Product specification
Philips Semiconductors
Interfacing 68000 family peripherals to the XA
1.3
AN96098
Using DTACKn to Generate an XA compatible WAIT signal
1.3.1
Generating 68000 bus signals
Figure 6 shows the signals from both the XA and a 68000 peripheral combined. First of all a 68000
compatible data strobe needs to be constructed composed from XA signals. The easiest way to
accomplish this is to combine the RDn or WRLnIWRHn strobes with a chip select (decoded addresses,
or the most simple solution only one address line). Figure 6 shows the generated 68000 CSn strobe (or
LDSn in case of real 16 bit wide 68000 peripherals because in this example WRLn is used). t2 in Figure
6 indicates the propagation delay of the decoding circuit.
ALE(XA)
WRLn(XA)
_ _ _ _- - o J
- - - - - - - - - - - - , \ L -_ _ _ _ _ _ _ _. - - J
~ ~2
A[Q-3](XA)~.=============:c~========t~=======-===========j(=============
A[4-19]D[O-16](XA) :
D15
==l
CSn(generated) - - - - - - - - - - - - - - - : ,
DTACKn(68k)
------------+-L-1--------,\\.----------lr--
WAIT(generated)
---------------~
_ _ _ _ _ _ _ ~_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ~_ _ _ _ _ _ _ _ _ _
~A)'_I
Figure 6, 68000 and XA signals combined
The XA's WRLnIWRHn signal can be used to generated the 68000's RIWn Signal. In case of a 16 bit
wide 68000 peripheral BOTH WRLn and WRHn need to be monitored to generate the RIWn Signal.
68000 peripherals with an 8 bit wide data bus can be connected to either D8:15 (using only WRHn) or
to DO:7 (using only WRLn).
Please note that some 68000 peripherals do not allow t2 (RIWn set-up to CS low) to be Ons, for
example the PCF8584 needs t2 to be 10ns or higher. You need to use an address line to generate a
RIWn signal (see figure 1, Ax(XA)), if the decoding logic propagation delay is shorter than the required
time t2. A drawback to this solution is reading and writing is not possible on the same address.
1.3.2
68000 DTACKn signal.
A 68000 peripheral generates a DTACKn to provide a real handshake between the mlcrocontroller and
its peripheral. DTACKn indicates when the peripheral is ready to receive data (in case of a write cycle),
or when the microcontroller can expect valid data on the databus, placed on the bus by a peripheral.
This DTACKn can be used to generate an XA compatible WAIT signal
1.3.3
Generating the XA WAIT signal.
An XA WAIT signal must be asserted immediately after (minimal 34ns before end of strobe, i.e. the
rising edge) a read (PSENn or RDn) or write (WRLn or WRHn) strobe is asserted. The XA will ONLY
insert waitstates after the XA databus is stable up to the point the WAIT signal is de-asserted. A WAIT
1996 Oct 25
623
Philips Semiconductors
Product specification
Interfacing 68000 family peripherals to the XA
AN96098
signal has no effect if it is asserted outside a data strobe. It is however allowed to generate a WAIT
signal before a data strobe is asserted, but will only be active after this strobe is asserted.
After a CSn (LDSn) strobe has been generated the device's DTACKn signal is high until the device is
ready to receive. During this high period the XA must generate wait cycles, see t3 in Figure 6. So the
equation for the WAIT signal (t3) is: /CSn * DTACKn.
There are several ways to construct a XA WAIT signal from a DTACKn signal, discrete or via a PLA.
The following schematic (Figure 7) shows a discrete implementation for 8 bit wide peripherals.
~------------------------------~~>~n
l
WRLnC>· ..............
C>-
RDn
t----~,__---------------I
.........> OSn (not multiplexed)
, CSn (not multiplexed)
cSn (Multiplexed)
CSnC=~~----------~----~
. . .+
~OTACKn
WNT
~~
Figure 7, discrete solution (8 bit wide 68000 peripheral)
or if LDSn and UDSn are needed (16 bit peripheral):
ROn
WRLn
...............------+----1
L::)--1'"---+------l
~n ~--+-~+-----~
?LDSn
----+--+-----l····..··. . .,·uOSn
1----------+--+---1.........> RlWn
WRHn
C)- . . . . . . . . . . . . . . . . . . . . . . . "
Figure 8, Discrete solution 16 bit peripheral
1996 Oct 25
624
.
--c> RlWn
Philips Semiconductors
Product specification
Interfacing 68000 family peripherals to the XA
AN96098
Table 2, Figure 8 WAIT truth table
Table 3, Figure 8 data strobe thruth table
Table for both UDSn and LDSn
x = NOT VALID
You can also use a PLA if one is present (see Figure 9):
8 bit 68k
16 bit 68k
PLA
r···A(ie--ii)····-----·······--·-······
r'-~-'---'--.L......-.J""""'"
XA
XA
Figure 9, PLA plus XA plus 68000
The PLA must have the following equations (multiplexed DSn and CSn, e.g. SC68C562):
= 1«Ax * .. * Ay) * I(WRLn *
=
+ ICSn * OTACKn
ROn)
*
(Ia)
CSn
( Ib)
WAIT
IALE)
(Ic)
R/Wn = WRLn (R/Wn directly connected to WRLn)
The dots represent other funtions to drive the WAIT pin (see general remarks 1.3.4)
Non multiplexed 8 bit 68k peripheral (e.g. ST 68HC901):
1«Ax * .. * Ay) *
* ROn)
(2a)
CSn =
(2b)
OSn = I(WRLn
1996 Oct 25
IALE)
625
Product specification
Philips Semiconductors
Interfacing 68000 family peripherals to the XA
(2c)
(2d)
AN96098
WAIT =
+ ICSn * IOSn * OTACKn
R/Wn =WRLn (R/Wn directly connected to WRLn)
In case of 16 bit wide 68000 peripherals, where separate UDSn and LDSn strobes are needed (e.g.
SCC66470 video and system controller);
( 3a )
LOSn =' I( WRLn * ROn)
( 3b )
UOSn = I( WRHn * ROn)
(3c)
R/Wn = WRHn * WRLn
(3d)
CSn = 1«Ax * ..• Ay) • IALE)
(3e)
WAIT = .. + I(LOSn * UDSn) * DTACKn * ICSn
The (generated) RIWn, LDSn and UDSn signals are available for ALL 68000 peripherals. The DTACKn
signal is generated by a 68000 peripheral. All 68000 DTACKn pins are open drain outputs and
connected together as wired OR. The only device specific signal is CSn and therefore ALL CSn signals
need to be monitored if a corresponding WAIT signal needs to be generated for that particular device:
(~a)
CSln = 1«Ax * .. * Ay) * IALE)
(% )
CS2n = I( (Ax * .. * Ay) * IALE)
(~c)
WAIT = .,. + I(LDSn * UDSn) * DTACKn * (/CSln + ICS2n)
1.3.4
General remarks:
• The XA WAIT pin is combined with the EAn (external access) function. This pin is sampled at the
rising edge of RESET, therefore in functions 1b, 2e and 3c an extra EAn term needs to be added. An
example, however beyond the scope of this document, can be: EAn = ALE * WRLn * RDN *
EAmode. During RESET ALL XA pins are high, this effect is used to generate EAn or not (depending
on EAmode, e.g. a jumper). Of course WAIT strobes will be generated during ALE = 1, but as stated
in this paragraph WAIT strobes outside a data strobe will not put the XA in WAIT mode.
• ALL chip select lines are decoded address lines ANDed with IALE, this prevents generating spikes
on the CSn lines while addresses are not stable (ALE = 1).
• Please be sure the WAIT pin is not overridden by the WAIT disable bit.
1996 Oct 25
626
Product specification
Philips Semiconductors
Interfacing 68000 family peripherals to the XA
1.4
AN96098
68000 Interrupt mechanism
When using a 68000 peripheral, consequently the 68000 interrupt mechanism is used. This means that
the XA has to generate an IACKn to this peripheral. It is not allowed to assert the CSn and IACKn
strobes at the same time, the IACKn is (so to say) also a Chip Select.
A way of generating a IACKn is decoding an interrupt vector address and combining it with a read
strobe (more or less an alternative Chip Select, compare with 1 a), e.g. with a PLA:
(5) IACKn
= 1((Ax *
*
Ay)
*
IROn
*
IALE)
Ax to Ay must be an other address now than the address in the previous paragraph, so CSn address
for normal data accesses IACKn address
So to generate an IACKn (example via Extra Segment
( 8a )
ES, #xxh
(8b)
MOV. b
R2, #yyyyh
yyyy
( 8e )
OR . b
SSEL, #f2l'-th
a I i gns ES to R2
( 8d )
MOV . b
R3, [R2
( 8e )
JMP
[ R3
xx
=ES):
MOV . b
1
(add r esses A I 9 - A I 8 )
=
=
(addresses A 15 - Af2l)
R3 ho I ds pe r i phe r a I' s vee to r
1
Generating an IACKn can also be achieved via a code read if the full code range is not used:
(7)
IACKn
= 1((Ax *
*
Ay)
*
IPSENn
*
IALE)
Using PSENn to generate IACKn enables the use of the same address as the CSn address (with
ROn), it is now a code space address. An interrupt acknowledge can have the following construction
(example via Code Segment = CS):
(8a)
MOV b
es,
( 8b )
MOV . b
R2, #yyyyh
#xxh
( 8e )
OR . b
SSEL, #f2l'-th
( 8d )
Move b
R3, [R2
( 8e )
JMP
[ R3 ]
1
xx
=
(addresses AI9 - A18)
yyyy = (addresses AI5 - Af2l)
a I i gns CS to R2
R3 holds peripheral's vector
Notes:
• If XA code is running internal exclusively (within the on board EPROM) and only one peripheral
needs an IACKn, NO address decoding is needed and PSENn can be connected to IACKn directly.
• Please be sure xx:yyyy in formula 8a and 8b is above the XA internal memory range, in case of the
P51XAG37 xx:yyyy > OxOO:7FFF
1996 Oct 25
627
Product specification
Philips Semiconductors
AN96098
Interfacing 68000 family peripherals to the XA
1.5
68000 bus arbitration with the XA
Missing on the XA is a bus arbitration scheme. If the XA had an ONCE mode, i.e. a pin that forces aU
pins to float, it would have been very easy to implement. It is however possible to construct 68000 bus
arbitration with discrete components. This XA bus arbitration scheme will also utilise the XA WAIT pin.
During a bus arbitration cycle a WAIT signal will halt the XA.
RDre::::::.-
M1
CSnC=::
BGACKrC,>---''
---,"'-'-"
BRnC::::~
PSEN,{''''''''-:''
WAIT
r=E>---
-8-
)1\)
,
~fO
Jl
»»»»»»»».....
()) .....
"'''''''''INTlCI'l
~ :;.:, :'bl ~F.- :;.~
r
,
a,
'lP>
QO
~>BGn
M6
M5
.,
M2
•........•....
O'lC}1~VlfIJ
74HCT245
OlOlOltllOlOlOlOl
Ol~(l)(11l>(.lN~
~.~
U200
jj
P(JI ~p~
:
fx>
:
»»»»»»»»
~~
U3 00
()l'l(l)(11l>Y>N~
0
~~~~ r->
00000000
1XI~(l)(11"'Y>N~
U~
J~
00
0
~~
CD-..JOHTI.,f:I.(,,)I\) ......
74HCT573
00000000
(l)-.J(l)tnl>(.lN-
00000000
IXI-.JOlO1.1>(.lN~
~r~
L~p ~~ o;~I a;~
~~~L
fnPir
,""
B"". . . .
OATA",,~
~c;;
i'la;~
74HCT573
U1
,J:.(,,)I\)-~IJ)N~
...,1....1....,1.
-<-<-<-<-<-<-<-<
l>(.lI\l~.I>Y>I\l~
r
~
Buffered ADDRESS bUs j
v
~~~ IXIP> l>~
»»»»»»»»
1\)1\)1\)1\) ....................
1\)(\)(\)1'\) .....
t(~
"
,
74HCT244
74HCT245
i-'~ C;;~
N~
(j)(j)
UE
00000000
OlOlOlOlOlOlOltll
(l)~(l)(11l>(.lN~
I~l
o~
f»tn~ Pr->
~~ ~.~
'v
~tn~}~~
~~r~
I
i
~1
Control SignalJ
\I
Figure 10 .. Bus arbitration on XA
A device that requests the bus asserts the BRn (bus request) strobe. The master device must return a
BGn (Bus Grand) strobe when the master is ready. After the slave has received the BGn signal it starts
the bus arbitration cycle by asserting BGACKn. During this strobe the slave device must have complete
access to the (shared) memory, therefore the XA is on hold and its signals must float. As stated NO
ONCE pin is available therefore the XA memory bus must be buffered.
Due to the XA multiplexed address/databus structure latches are needed to demultiplex. The latches
have an Output Enable (OEn) input, connecting this input to WAIT will float the address bus when the
XA is in WAIT.
The only thing missing is the non-floating databus, the not multiplexed address lines A3 to A1 and the
control signals ROn, WRLn, WRHn and PSENn. The databus can be made floating by using a bi-
1996 Oct 25
628
Philips Semiconductors
Product specification
Interfacing 68000 family peripherals to the XA
AN96098
directional buffer. Writing or reading is indicated by the direction (DIA) signal. If DIA=1 a write is
indicated else a read. A DIA signal is constructed by ANDing both write strobes (WALn and WAHn).
A3 to A 1 and the control signals only need an output buffer (with Output Enable control). Figure 10
shows a solution with discrete components.
BRn
BGn
'--___~r-
BGACKn
Figure 11, Bus arbitration timing diagram
The XA must generate a BGn signal. This signal is constructed by monitoring the ADn, WALn, WAHn
and PSENn strobes. If one of these strobes is asserted AND a BAn is pending a BGn is generated up
to the point the slave device is negating the BAn,
Figure 11 shows that in principle BGn must be asserted longer than BAn. In the 68000 specification
BGACKn asserted to BGn negated is min. 1,5 and max, 3.5 clocks. BGACKn asserted to BAn negated
min. 20ns max. 1.5 clocks. This shows that BAn and BGn can be negated at the same time. Figure 10
shows that in fact BGn is negated after BAn has been negated and some propagation delay should be
considered.
The WAIT signal is generated during BAn or BGACKn asserted, but only if one of the XA control
strobes is asserted AND the XA reads at the bus "request enable address". This bus request enable
address is a decoded dedicated address. Just using the RDn without decoding address can cause the
following problem: If during a "normal" XA read a Bus Request occurs (for the bus request signal is
generated aynchronously), WAIT can be generated to late for the XA to sample. The bus however will
float when both BAn and RDn strobe are generated. If during this situation the XA is not in WAIT mode,
unpredictable things can occur. BRn is connected to one of the two XA external interrupts inputs
(lNTOn or INT1 n) to be sure the XA will access external memory when a bus request is pending. The
bus arbitration cycle will only continue after the XA has accessed external memory.
The glue logic (Figure 10) can be replaced by a PLA and combined with other functions. The bus
arbitration WAIT signal is constructed as follows:
(9)
WAIT =
+
I(ROn * WRLn * WRHn * PSEN) * (Ax *
* Ay) * I(BRn * BGACKn)
The Bus Grand (BGn) is assembled as follows (output to slave);
(10)
BGn
=
1(( ROn * WRLn * WRHn * PSEN) * (Ax *
* Ay)
+
BRn)
The following instructions must be part of the interrupt routine to generate a BGn and put the XA in
wait:
(1Ia)
(lib)
( I Ie)
( lid)
( I Ie)
MOV b
MOV b
OR.b
MOV b
RETI
ES. #xxh
R2, #yyyyh
SSEL. #0%
R3. [R2J
xx = (addresses AI9 - A18)
yyyy = (addresses AI5 - A0)
a I igns ES to R2
read to generate BGn
return from interrupt
The XA interrupt latency determines the time it takes for the XA to generate BGn after BAn asserted.
1996 Oct 25
629
Philips Semiconductors
Product specification
Interfacing 68000 family peripherals to the XA
2.
AN96098
EXAMPLE, INTERFACING THE PCF8584 TO THE XA
Interfacing the PCF8584 (See IC12 [2]) to microcontrollers can cause serious problems. Causes for
these problems are: The Interface Mode Control, the interface the PCF8584 will run in is determined by
the first write cycle to this peripheral. Secondly it is a relatively (to the XA) SLOW device. In contrast
this example shows that it is in fact quite easy to interface the PCF8584 to the XA.
2.1.1
PCF8584 to XA implementation
In "80C51" mode the PCF8584 needs write and read strobes longer than 250nS, the XA can generate
read strobes with a maximum length of 4 times the oscillator clock period, a XA write strobe is even
shorter, its length is max. 2 clock periods. This means when the XA is running at 8MHz the write strobe
will match the PCF8584 write strobe specification. Running the XA on higher frequencies than 8MHz
will cause the need of an external wait state generator.
It is however possible to use the PCF8584 WITHOUT the use of an external wait state generator on
every XA clock (up to the maximum XA clock). Using the PCF8584 in 68000 mode will do the trick.
Using the PCF8584 in 68000 mode:
1.
RlWn asserted before CSn (t2) needs to be 10ns or higher. This time is needed to enable the
PCF8584 to decode a 80C51 or 68k bus mode (it is by the way the only 68k peripheral that does
not allow t2 to be Ons). If the decoding logic is too fast an address is needed as RIWn strobe
instead of WRLn or WRHn.
2.
The first PCF8584 cycle needs to be a write cycle, this cycle determines the bus mode the
PCF8584. In contrast of getting the PCF8584 in 80C51 mode, it is allowed to have write or read
cycles to other peripherals first. Having a read cycle from the XA first will put the PCF8584 in
80C51 mode, thus not asserting the OTACKn signal (it is now the ROn input) and therefore
causing the XA to be in a endless WAIT.
3.
When an address line is used to generate a RIWn signal, reading and writing is not performed on
the same address.
4.
Excessive accesses to the PCF8584 will slow down the entire application, so using the PCF8584
in time critical applications in polling mode should be avoided.
The following picture shows an actual hardcopy of all signals used to connect the XA to a PCF8584.
Please note that the OT ACKn rising edge has the shape of an exponential function:
this is caused by the open drain (wired OR) structure of this pin (pull up resistor R and parasitic
capacitance C).
1996 Oct 25
630
Product specification
Philips Semiconductors
Interfacing 68000 family peripherals to the XA
AN96098
PM3384, FLUKE & PHILIPS
ch : d = 423ns
T _
V=t 1.88/+3.43
WAIT
WRn
DTACKn
.3:
CH1 5.00 V=
CH2 5.00 V=
CH3 5 ..Qq
Y-=,
A~ T M1~2,5,O,n,s ,~~9n~,
,,
Figure 12, Scope hardcopy
2.1.2
Usage.
Please be sure the first cycle to the PCF8584 is a write cycle.
If using an address line as RIWn strobe, writing to the PCF8584 must be performed on an other
address than reading from the PCF8584 (e.g. if A 15 is used):
Reading PCF8584 address 0:
( I 2a )
MOV . b
ES, #I2IFh
( I 2b )
MOV . b
R2, #8121121121h
add r ess line A I 5
( 12c )
OR.b
SSEL, #121%
a I i gns ES to R2
( 12d)
MOV.b
R3L, [R2J
Result is stored in R3L
=
I
Writing to PCF8584 address 0:
( I 3a )
MOV . b
ES, #I2IFh
(13b)
MOV.b
R2, #l21l21l21l21h
address line AI5
( 13c)
OR. b
SSEL, #121%
a I i gns ES to R2
( 13d)
MOV. b
[ R2 J, #data8
data8 written to
=
PCF858~
APPENDIX 1 REFERENCES
[2]
16-bit 80C51 XA Microcontrollers -
Data Handbook IC25
[3]
12C Peripherals
Data Handbook IC12
[4]
80C51 based 8-bit Microcontrollers
Data Handbook IC20
[5]
The 68000 microprocessor
Michalel A. Miller
1996 Oct 25
631
121
Application note
Philips Semiconductors
12C with the XA-G3
Author:
AN96119
Paul Seerden, Systems Laboratory Eindhoven, The Netherlands
ABSTRACT
This report describes how to implement 12C functionality (single master), if you're using the Philips XA-Gx
microcontrol/er. Elaborated driver routines (written in C) are given for two alternative solutions:
- Software emulation using two port pins ('bit-banging1.
- Using the PCx8584 12C-bus control/er.
SUMMARY
This application note demonstrates the implementation of 12C functionality using the 16-bit XA-G3 microcontrol/er
from Philips Semiconductors.
The note contains two main parts:
- An implementation using the Philips PCx8584 12C-bus controller (Interrupt driven).
- An implemenation by software emulation of the bus using 2 110 port pins (polling, 'bit-banging').
Not only the driver software is given. This note also contains a set of (example) interface routines and a small
demo application program. All together, it offers the user a quick start in writing a complete 12C system application
(single master).
Purchase of Philips 12C components conveys a license under the Philips' 12C patent
to use the components in the 12C system provided the system conforms to the
12C specifications defined by Philips. This specification can be ordered using the
code 9398 39340011.
CONTENTS
1. Introduction..................................... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1
1.2
1.3
633
References. , ............. , ............. , ..... , ........ , ........ , .. , . , .......... , . , ... , . , . . . . .
BBS and WWW ....... , .. , .. , .. , ......... , .... ,., .................... ,., ..... ,., .... ,., .. , .. ,.
File overview ......... , ... , ................... , ... , . , ..... , , , ..... , . , , . , . , .. , , ...... , , , . , , .... ,
634
634
634
2. Functional description .....................................................................
635
2.1
2.2
2.3
2.4
2.5
2.6
The 1,2C bus format , ... , . , . , . , , .... , .. , .. , ............... , ........ , ................... , . . . . . . . . .
Input definition .............................................. , ................ , . . . . . . . . . . .. . . . ..
Output definition ....................................... ,." ..... , ........ , .................... ;
Performance ... , .... , ................... , ............ , .......... , ...•....... , . , ... , .... , ... , . .
Error handling ................. , ..... ,"., ..... "., .... , ....... " .... , .. " .. ,.,., ........ ,......
Hardware requirements, .. , ........ , ..... , ..... , , . , ... , .. , .. , , ..... , ...... , ..... , ... , , . , .. , , , . . .
635
635
636
636
636
636
3. External interface .....•...•.................•.................•.....•...•...•. ~ . . . . . . • • . • . .
637
3.1
3,2
External data interface ....... , ........ , ......... , , .... , .. , , . , .. , .... , , , ...... , ...... , ... , .... , . .
External function interfaces, .... , ... , . , ....... , , , , . , , , ... , ....... , ...... , .. , , . . . . . . . . . . . . . . . . . . . .
637
637
4. Driver operation ...•...................................•.....••....•...........•.....•.•...
639
4.1
4.2
Bit-banging driver .............. , ..... , ............ , .............. , .... , , .. , ................ , . , .
PCx8584 driver ..................... , ............ , . , ... , .... , .... , .... , . , ............ , ...... , . .
640
641
5. Demo program ............................................................................
642
Appendices .......................... " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . • . . . . . . . . . . . . . . . . . . . . . . . . . .
643
Appendix I
Appendix II
Appendix III
Appendix IV
Appendix V
Appendix VI
January 1997
12CINTFC.C .. , ... , ................... , ......... "., ... ,',."." .... " ........ ,.,....
12CBITS.C , .... , .................... , .... , ........... , , .. , , , , .... , , , , . , , , .. , , , .. , .. , ,
12C8584.C ., ............... , ..... , ........... , .. , ....... , ........... , ... ,. ,',' ., .... ,.
12CDEMO.C , .. , ...... , ..................... , ..... , .......................... ,.......
12CEXPRT,H , ... , .... , .......... , ............... , ... , , , .. , , , , . , . , . , , .. , , . , . , , .. , , , . , ,
12CDRIVR.H .,', ... , .... ,', ........ " ... , .... ,., ..... ,", ...... ',', .... , .. ,., .. ".....
632
643
647
652
655
657
658
Application note
Philips Semiconductors
12C with the XA-G3
AN96119
1. INTRODUCTION
This report describes 12C driver software, in C, for the XA microcontroller. This driver software is the interface
between application software and the (hardware) 12C device(s). These devices conform to the serial bus interface
protocol specification as described in the 12C reference manual.
The 12C bus consists of two wires carrying information between the devices connected to the bus. Each device has
its own adddress. It can act as a master or as a slave during a data transfer. A master is the device that initiates
the data transfer and generates the clock signals needed for the transfer. At that time, any addressed device is
considered a slave. The 12C bnus is a multi-master bus. This means that more than one device capable of
controlling the bus can be connected to it. However, the driver software given in this application note only supports
(single) master transfers.
Chapter 2 gives a functional description of the driver program.
Chapter 3 describes the software structure and all driver interface functions ('callable' by the application).
Chapter 4 describes the low level hardware dependent driver software and is split into one general part and two
sections. The first section describes a software emulated 12C bus driver ('bit-banging') using two 110 port pins. The
other section describes an interrupt driven PCF8584 driver. The PCF8584 is a Philips integrated circuit to be used
as a separate 12C bus controller.
Chapter 5 is a short description of the example application program (demo.c and i2cintfc.c).
DEMO.C
APPLICATION SOFTWARE
INTERFACE FUNCTIONS
external interface (Chapter 3)
12CINTFC.C
external interface (Chapter 3)
12C8ITS.C
12C8584.C
'BIT BANGING' driver
PCx8584 driver
Polling (P1.4 and 1.5 used)
Interrupt driven (external Int.O used)
Figure 1. Overview of software layers and modules
January 1997
633
Application note
Philips Semiconductors
12C with the XA-G3
1.1
AN96119
References
Ordering Info
Description
Used references:
The 12C-bus specification
939835810011
The 12C-bus and how to use it
939839340011
Application report PCF8584 12C-bus controller MAR 93
seeBBS/WWW
Specification 12C driver (J. Reitsma)
C routines for the PCx8584
AN95068
12CBITS.ASM (by G. Goodhue)
seeBBS/WWW
Used development and test tools:
Hi-Tech C XA complier (version 7.60)
http://www.htsoft.com
Philips Microcore SiXA evaluation board
FDI XTEND board
XTEND-G3
Philips 12C-bus evaluation board
OM1016
Philips Logic Analyzer with 12C-bus support package PF8681
PM3580/PM3585
1.2
BBS and WWW
This application note (with C source files) is available for downloading from the Philips Bulletin Board Systems and
from the world wide web. It is packed in the self extracting PC DOS file: 12CXAG3.EXE.
To better serve our customers, Philips maintains a microcontroller bulletin board. This system is open to all callers,
it operates 24 hours a day, and can be accessed with modems up to 28800 bps. The telephone number is:
European Bulletin Board, telephone number: +31 402721102.
Internet access:
Philips Semiconductors WWW:
http://www.semiconductors.philips.com
1.3 File overview
the driver package contains the following files:
12CBITS.C
The driver part for 'bit-banging" 12C.
12C8584.C
The PCF8584 drive for master transfers, containing initialization and state handling. This
module also contains address definitions of hardware registers of the PCx8584. The user
should adapt these definitions to his own system environment (address map).
12CDRIVR.H
This module (include file) contains definitions of local data types and constants, and is used
only by the driver package.
12CINTFC.C
This module contains example application interface functions to perform a master transfer.
In this module, some often-used message protocols are implemented. Furthermore, it shows
examples of error handlin, like: time-outs (software loops), retries and error messages. The
user must adapt these funtions to his own system needs and environment.
12CEXPRT.H
This module (include file) contains definitions of all 'global' contants, function prototypes,
data tyes and structures needed by the user (application). Include this file in the user
application source files.
January 1997
634
Application note
Philips Semiconductors
12C with the XA-G3
DEMO.C
AN96119
This program uses the driver package to implement a simple application on the Microcore 6
demo / evaluation board. This board contains a PCx8584 12C-bus controller, a PCF8583 real
time clock and a PCF8574 I/O exapander with connections to 4 LEOs. The program runs the
LEOs every second.
All driver software programs are tested as thoroughly as time permitted; however, Philips cannot guarantee that
they are flawless in all applications.
2.
2.1
FUNCTIONAL DESCRIPTION
The 12C bus format
An 12C transfer is initiated with the generation of a start condition. This condition will set the bus busy. After that, a
message is transferred that consists of an address and a number of data bytes. This 12C message may be followed
either by a stop condition or a repeated start condition. A stop condition will release the bus mastership. A
repeated start offers the possibility to send/receive more than one message to/from the same or different devices,
while retaining bus mastership. Stop and (repeated) start conditions can only be generated in master mode.
Data and addresses are transferred in eight bit bytes, starting with the most significant bit. During the 9th clock
pulse, follwing the data byte, the receiver must send an acknowledge bit to the transmitter. The clock speed is
normally 100kHz. Clock pulses may be stretched (for timing causes) by the slave.
A start condition is always followed by a 7-bit slave address and a RIW direction bit.
General format and explanation of an 12C message:
I
1 s 1 SLV_W 1 A 1SUB 1 A 1 s 1 SLV_R 1A 1 Dl 1 A D21
S
: (re)Start condition
A
: Acknowledge on last byte
N
: No Acknowledge on last byte
p
: Stop condition
SLV_W
: Slave address and Write bit
SLV_R
: Slave address and Read bit
SUB
: Sub-address
01 ... On
: Block of data bytes
01.1 ... 01.m
: First block of data bytes
On.1,..On.m
: nth block of data bytes
2.2
AI· ...... ·1 AI
Input definition
Inputs (applicaiton's view) to the driver are:
• The number of messages to exchange (transfer)
• The slave address of the 12C device for each message
• The data direction (read/write) for all messages
• The number of bytes in each message
• In case of a write message: The data bytes to be written to the slave.
January 1997
635
Dn
1 Nip 1
Application note
Philips Semiconductors
12C with the XA-G3
AN96119
2.3 Output definition
Outputs (application's view) from the driver are:
• Status information (success or error code)
• Number of messages actually transferred (not the requested number of messages in case of an error)
• For each read message: The data bytes read from the slave.
2.4 Performance
The default maximum speed of the 12C-bus is 100 KHz. With the XA-Gx running at 16 MHz or higher, it's possible
to reach this speed using the 'bit-banging' driver. However, it is important to minimize the delay time between
successive data bytes, because this delay determines the effective speed of the bus.
The maximum speed of the PCF8584 is limited to 90 KHz.
Software emulation ('bit-banging') of the bus is a heavy load for the XA processor. That's why systems that have to
do more time critical tasks better apply the interrupt driven PCF8584 solution.
2.5
Error handling
A transfer 'status' is passed every time the 'transfer ready' function is called by the driver. It's up to the user to
handle time outs, retries or all kind of other possible errors. Simple examples of these (no operating system, and
no hardware timers) are shown in the file 12CINTFC.C
2.6
Hardware requirements
Bit-bang driver:
The bus requires open-drain device outputs to drive the bus. In fact, all port pins of the XA-Gx are programmable
to open-drain outputs. In our example, external memory is connected to port PO and P2. So, we have chosen to
use P1.4 as SDA pin and P1.5 as SCL pin. To change this (for example to P1.6 and P1.7, like at the C51
derivative), adjust the include file 12CDRIVR.H. The code size of the emulation driver in this application note is
approximately 800 bytes (Hi-Tech compiler V7.60). The driver is tested and tuned for an XA-G3 running at 20 MHz.
PCx8584 driver:
Selection of either an Intel or Motorola bus interface is achieved by detection of the first WR - CS signal sequence
(see data sheet). This driver assumes that previously the right interface is selected (after power-up). The driver
uses external interrupt 0 input. To change the base-address (OxFOOOO) of the PCF8584 edit the file 12C8584.C.
In our example, a 3.6864 MHz clock is connected to the PCF8584.
January 1997
636
Application note
Philips Semiconductors
12C with the XA-G3
3.
AN96119
EXTERNAL (APPLICATION) INTERFACE
This chapter describes the external interface of the driver towards the application. The C-coded external interface
definitions are in the include file 12CEXPRT.H.
The applicaiton's view on the 12C bus is quite simple: The applicaiton can send messages to an 12C device.
Also, the applicaiton must be able to exchange a group of messages, optionally addressed to different devices,
without losing bus mastership. Retaining the bus is needed to guarantee atomic operations.
3.1
External data interface
All parameters affected by an 12C master transfer are logically grouped within two data structures. The user fills
these structures and then calls the interface function to perform a transfer. The data structures are listed below.
typedef struct
{
BYTE
nrMessages;
**p_message;
/* total number of messages
/* ptr to array of ptrs to message parameter blocks
*/
*/
} 12C_TRANSFER;
The structure 12C_TRANSFER contains the common parameters for an 12C transfer. The driver keeps a local copy
of these parameters and leaves the contents of the structure unchanged. So, in many applications the structure
only needs to be filled once.
After finishing the actual transfer, a 'transfer ready' function is called. The driver status and the number of
messages done, are passed to this function.
The structure contains a pointer (p_message) to an array with pointers to the structure 12C_MESSAGE:
typedef struct
{
BYTE
BYTE
BYTE
} 12C_MESSAGE;
address;
nrBytes;
*buf;
/* The 12C slave device address
/* number of bytes to read or write
/* pointer to data array
*/
*/
*/
The direction of the transfer (read or write) is determined by the lowest bit of the slave address;
write = 0 and read = 1. This bit must be (re)set by the application.
The array but must contain data supplied by the application in case of a write transfer. The user should notice that
checking to ensure that the buffer pointed to by but is at least nrBytes in length, cannot be done by the driver.
In case of a read transfer, the array is filled by the driver. If you want to use but as a string, a terminating NULL
should be added at the end. It is the user's responsibility to ensure that the buffer, pointed to by buf, is large
enough to receive nrBytes bytes.
3.2
External function interfaces
This seciton gives a description of the only two 'callable' interface funcitons in the both 12C driver modules.
First, the initialization function (/2C-lnitialize) is explained. This function directly programs the 12C interface
hardware and is part of the low level driver software. It must be called only once after 'reset', but before any
transfer function is executed. After that, the interface function used to actually perform a transfer (/2C_ Transfe/) is
explained.
January 1997
637
Application note
Philips Semiconductors
12C with the XA-G3
AN96119
void 12C_lnitia/ize(BYTE speed)
Initialize the 12C-bus driver part. Must be called once after RESET.
'Bit Bang':
Port pins P1.3 (SCl) and P1.4 (SDA) are programmed to be used as open-drain output pins.
BYTE speed
Dummy parameter. Not used.
PCx8584:
Hardware 12C registers of the PCx8584 interface will be programmed.
Used constants (parameters) are defined in the file 12CDRIVR.H.
BYTE speed
Contents for clock register S2 (bit rate of 12C-bus).
void 12C_ Transfer(12C_ TRANSFER *p, void (*proc)(BYTE status, BYTE msgsDone))
Start a synchronous 12C transfer. When the transfer is completed, with or without an error, call the function proc,
passing the transfer status and the number of messages successfully transferred.
12C_TRANSFER *p
A pointer to the structure describing the 12C messages to be transferred.
void (*proc(status, msgsDone)) A pointer to the function to be called when the transfer is completed.
BYTE msgsDone
BYTE status
January 1997
Number of message successfully transferred.
one of: 12C_OK
Transfer ended No Errors
12C_BUSY
J2C busy, so wait
12C_ERR
General error
12C_NO_DATA
err: No data message block
12C_NACK_ON_DATA
err: No ack on data in block
12C_NACK_ON_ADDRESS err: No ack of slave
12C_TIME_OUT
err: Time out occurred
638
Philips Semiconductors
Application note
12 C with the XA-G3
4.
AN96119
DRIVER OPERATION
After completing a transfer the function readyProc in the application (or interface) is called.
After completing the transmission or reception of each byte (address or data), a state handler is called, either by
interrupt (PCx8584) or by software ('bit-banging'). This handler can be in one of the following states:
ST_IDLE
The state handler does not expect any bus activity.
ST_AWAIT_ACK
The driver has sent the slave address and waits for an acknowledge.
ST_RECEIVING
The handler is receiving bytes, and there is still more than one expected.
ST_RECV_LAST
The handler is waiting for the last byte to receive.
ST_SENDING
The handler is busy sending bytes to a device.
Figure 2 shows the state transition diagram. A transition will occur on initiation of a transfer by the application and
on each 12C-bus event (state change). The transitions are:
A transfer is initiated. Send the slave address for the first write
message.
A transfer is initiated. A message is to be received from a slave
device. The micro transmits the slave address.
At least one byte to send. Send the next byte. Or no more bytes to
send, send repeated start and slave address of next message to
write.
ST_SENDING
-t
ST_IDLE
No more bytes to send, no more messages.
ST_SENDING
-t
ST_AWAIT_ACK
No more bytes to send, send repeated start and slave address of
next message is to be received.
More than 1 byte is to be received. Wait for and acknowledge next
byte.
ST_AWAIT_ACK
-t
ST_RECV_LAST
Only one byte to receive, send no acknowledge on last byte.
ST_RECEIVING
-t
ST_RECEIVING
More than one byte to receive. Read received byte.
ST_RECEIVING
-t
ST_RECV_LAST
Only one byte left to receive, send no acknowledge on it.
ST_RECV_LAST -t ST_IDLE
Last byte read, send stop. No more messages. Call ReadyProc
and give status.
Last byte read, send repeated start and slave address of next
(write) message.
Last byte read, send repeated start and slave address of next
(read) message.
January 1997
639
Application note
Philips Semiconductors
12 C with the XA-G3
AN96119
I
I
ST_IDLE
no more
me ssages
send STOP
I
first message
START condition
send ADDR + RD
first message
START condition
send ADDR + WR
ST_SENDING
I
Next message
START condition
Send ADDR + RD
I
ST_AWAIT_ACK
read byte
ACK
next byte
read byte
NACK
next byte
Next message
START condition
send ADDR + WR
I
I
ST_RECEIVING
read byte
NACK
next byte
I
nomore
messages
send STOP
Next message
START condition
send ADDR + RD
ST_RECV_LAST
I
Figure 2. State transition diagram of the master state handler
4.1
Bit-banging driver
The XA-Gx derivative does not incorporate on-chip 12C hardware. However, 12C functionality can be achieved by
software emulation. The file 12CBITS.C (Appendix II) performs two main tasks: handling complete transfers that
consist of one or more messages (described above, see Figure 2), and the software emulation task. The emulation
task consists of: bus monitoring and control, master sending/receiving of bytes conform to the 12C protocol.
The following macro and functions are designed for master 12C-bus control:
delay
Macro for delay loop of about 1 microsecond. Needs to be tuned (in application note done for
20MHz XA). This delay is needed to insure minimum high and low clock times on the bus.
Also, the hold and setup times for START and STOP conditions are met with this macro. To
optimize the speed, the software (generated by the compiler) delay is measured and
included in the total delay times.
SCLHighO
Function to release (send high) the SCL pin and wait for any clock stretching peripheral
devices. At this point, if requested, the user can build in time-outs.
PutByte()
Function that sends one byte of data to a slave device. After that, it checks if slave did
acknowledge.
GetByteO
Function to receive one data byte from an addressed slave. and after that it sends
(no )acknowledge.
GenerateStart()
Function to generate and 12C (repeated)START condition and send slave address for a
message read/write.
GenerateStopO
Function to generate an 12C STOP condition, releasing the bus. It also calls the function
readyProc to signal the driver is finished, and pass the status of the transfer.
January 1997
640
Application note
Philips Semiconductors
AN96119
12C with the XA-G3
4.2
PCx8584 driver
The PCx8584 logic provides a serial interiace that meets the 12C-bus specification and supports all master transfer
modes from and to the bus.
A microcontroller/processor interiaces to the PCx8584 via five hardware registers: SO (data read/write register),
SO' (own address register), S1 (control/status register), S2 (clock register), and S3 (interrupt vector register).
Selection of either an Intel or Motorola bus interiace, achieved by detection of the first WR - CS Signal sequence is
outside the scope of this application note, as well as the insertion of wait states needed to meet the constraints of
the XA - PCF8584 bus timing. More information about the hardware interface can be found in the Philips
Semiconductors application note, AN96098: Interfacing 68000 family peripherals to the XA.
Bus speed
The speed of the 12C-bus is controlled by clock register S2 of the PCx8584. This register provides a prescaler that
can be programmed to select one of five different clock rates, externally connected to pin 1 of the PCx8584.
Furthermore, it provides a selection of four different 12C-bus SCL frequencies, ranging up to 90 KHz. The value for
register S2 is passed as a parameter during initialization of the driver. To select the correct initialization values,
refer the the datasheet or the Application Report of the PCx8584.
Interrupt
In this applicaiton note we assume that the interrupt output of the PCF8584 is connected to external interrupt 0
input of the XA. In the initialization function, this interrupt is enabled, its priority is set as well as the general
interrupt enable flag. Furthermore, a 'soft' interrupt vector is filled to point to the right interrupt handler. This is only
done for debugging purposes. In a 'real' application, this should be replaced by a ROM vector.
After completing the transmission or reception of each byte (address or data), the PIN flag in the control/status
register of the PCF8584 is reset to O. This will send an interrupt to the XA (EXO) and the interrupt service (state)
handler will be called (see Figure 2).
If a transfer is started, the driver interiace function returns immediately. At the end of the transfer, together with the
generation of a STOP condition, the driver calls a function, passing the transfer status. A pointer to this function
was given by the applicaiton at the time the transfer was applied for. It is up to the user to write this function and to
determine the actions that have to be done (see for example, the function 12cReady in module 12CINTFC.C).
January 1997
641
Application note
Philips Semiconductors
12C with the XA-G3
AN96119
5. DEMO PROGRAM
The modules OEMO.C and 12CINTFC.C use either one of the drivers to implement a simple application on a
Microcore 6 demo I evaluation board. They are intended as examples to show how to use the driver routines.
The Microcore 6 board contains a PCx858412C-bus controller, a PCF8583 real time clock and a PCF8574 lID
expander with connections to 4 LEOs. the demo program runs the LEOs every second.
The module 12CINTFC.C gives an example of how to implement a few basic transfer functions (see also previous
SLE 12C driver application notes). These functions allow you to communicate with most of the available 12C devices
and serve as a layer between your application and the driver software. This layered approach allows support for
new devices (microcontrollers) without re-writing the high-level (device-independent) code. The given examples
are:
void 12C_Write(12C_MESSAGE *msg)
void 12C_WriteRepWrite(12C_MESSAGE *msg1, 12C_MESSAGE *msg2)
void 12C_WriteRepRead(12C_MESSAGE *msg1, 12C_MESSAGE *msg2)
void 12C_Read(12C_MESSAGE *msg)
void 12C_ReadRepRead(12C_MESSAGE *msg1, 12C_MESSAGE *msg2)
void 12C_ReadRepWrite(12C_MESSAGE *msg1, 12C-MESSAGE *msg2)
Furthermore, the module 12CINTFC.C contains the functions StartTransfer, in which the actual call to the driver
program is done, and the function 12cReady, which is called by the driver after the completion of a transfer. The
flag drvStatus is used to test/check the state of a transfer.
In the StartTransferfunction a software time-out loop is programmed. Inside this time-out loop the
MainStateHandler is called if the driver is in polling mode and the status register PIN flag is set.
If a transfer has failed (error or time-out) the StartTransferfunction prints an error message (using standard lID
redirection, like the printf() function) and it does a retry of the transfer. However, if the maximum number of retries
are reached, and exception interrupt (Trap #14) is generated to give a fatal error message.
January 1997
642
Application note
Philips Semiconductors
12C with the XA-G3
AN96119
APPENDICES
Appendix I
12CINTFC.C
1***************************************************** **********************************/
/~
/~
/*
/*
Name of module
Language
Name
Description
/*
/*
/*
/*
I2CINTFC.C
*/
*/
C
P.H. Seerden
External interface to the PCx8584 I2C driver
routines. This module contains the **EXAMPLE**
interface functions, used by the application to
do I2C master-mode transfers.
*/
*/
*/
*/
*/
*/
/~
*/
(C) Copyright 1996 Philips Semiconductors B.V.
*/
/*
/***************************************************************************************/
*/
/*
/*
History:
*/
*/
*/
*/
/*
/*
96-11-25
P.H. Seerden
Initial version
/*
/***************************************************************************************/
#include "i2cexprt.h"
#include "i2cdrivr.h"
extern void PrintString(code char *s);
code
code
code
code
code
code
char
char
char
char
char
char
retryexp []
bufempty[]
nackdata[ ]
nackaddr[]
timedout []
unknowst []
/* to send messages out using UART
*/
"retry counter expired\n";
"buffer empty\n" ;
"no ack on data\n";
"no ack on address\n";
"time-out\n";
"unknown status\n";
static BYTE drvStatus;
/* Status returned by driver
static I2C_MESSAGE
static I2C_TRANSFER
/* pointer to an array of (2)
*p_iicMsg[2]
iicTfr;
*/
I2C mess */
static void 12cReady(BYTE status, BYTE msgsDone)
/***********************************************
* Input(s)
status
Status of
msgsDone
Number of
* Output(s)
None.
* Returns
None.
* Description: Signal the completion
passed (as parameter)
drivers state handler
the driver at completion time
messages completed by the driver
of an I2C transfer. This function is
to the driver and called by the
(I).
****************************************************** *********************************1
drvStatus = status;
January 1997
643
Application note
Philips Semiconductors
12 C with the XA-G3
AN96119
8tatic void StartTran8fer(void)
1******************************
* Input(s)
* Output(s)
None.
statusfield of 12C_TRANSFER contains the driver status:
12C_OK
Transfer was successful.
12C_TIME_OUT
Timeout occurred
Otherwise
Some error occurred.
* Returns
None.
* Description: Start 12C transfer and wait (with t.imeout) until the
driver has completed the transfer(s).
***************************************************************************************/
LONG timeOut;
BYTE retries = 0;
do
{
drvStatus = 12C_BUSY;
12C_Transfer(&iicTfr, 12cReady);
timeOut = 0;
while (drvStatus
{
if (++timeOut
drvStatus
if (retries
==
>
60000)
12C_TIME_OUT;
6)
{
PrintString(retryexp) ;
asm("trap #14");
/* fatal error ! So, ..
/* escape to debug monitor
else
retries++;
switch (drvStatus)
case 12C_OK
case 12C_NO_DATA
case 12C_NACK_ON_DATA
case 12C_NACK_ON_ADDRESS
case 12C_TIME_OUT
default
while (drvStatus
January 1997
!=
break
PrintString(bufempty) i
PrintString(nackdata) ;
PrintString(nackaddr) ;
PrintString(timedout);
PrintString(unknowst) ;
12C_OK);
644
break;
break;
break;
break;
break;
*/
*/
Application note
Philips Semiconductors
12C with the XA-G3
AN96119
/**********~********************
* Input(s)
* Returns
* Description:
* PROTOCOL
I2C message
msg
None.
Write a message to a slave device.
...
***************************************************************************************/
iicTfr.nrMessages = 1;
iicTfr.p_message
p_iicMsg;
p_iicMsg[O] = msg;
StartTransfer() ;
void 12C_WriteRepWrite(I2C_MESSAGE *msgl, 12C_MESSAGE *msg2)
/*********************************************************
msg1
first I2C message
msg2
second I2C message
* Returns
None.
* Description: Writes two messages to different slave devices separated
by a repeated start condition.
...
" PROTOCOL
...
" Input(s)
***************************************************************************************/
iicTfr.nrMessages = 2;
iicTfr.p.message
p_iicMsg;
p_iicMsg[O]
msg1;
p_iicMsg[1] = msg2;
StartTransfer() ;
void 12C_WriteRepRead(I2C_MESSAGE *msgl, 12C_MESSAGE *msg2)
/**********************************************************
* Input(s)
msg1
msg2
first I2C message
second I2C message
* Returns
None.
* Description: A message is sent and received to/from two different
* PROTOCOL
slave devices, separated by a repeat start condition.
...
...
***************************************************************************************/
iicTfr.nrMessages = 2;
iicTfr.p_message
p_iicMsg;
p_iicMsg[Ol
msg1;
p_iicMsg[1] = msg2;
StartTransfer() ;
void 12C_Read(I2C_MESSAGE *msg)
/******************************
" Input(s)
* Returns
* Description:
* PROTOCOL
msg
I2C message
None.
Read a message from a slave device.
...
***************************************************************************************/
iicTfr.nrMessages = 1;
iicTfr.p_message
p_iicMsg;
p_iicMsg[O] = msg;
StartTransfer();
January 1997
645
Philips Semiconductors
Application note
12C with the XA-G3
void I2C_Re.dRepRe.d(I2C_MESSAGB
AN96119
*~gl,
I2C_MESSAGB *mag2)
/*********************************************************
* Input{s)
msgl
first I2C message
msg2
second I2C message
None.
* Returns
* Description: Two messages are read from two different slave devices,
separated by a repeated start condition.
* PROTOCOL
.. ,,
...
****************************************************** *********************************1
iicTfr.nrMessages = 2;
iicTfr.p_message
p_iicMsg;
p_iicMsg[O]
msgl;
p_iicMsg[lj = msg2;
StartTransfer{)
i
void I2C_Re.dRepWrite(I2C_MESSAGB *magl, I2C_MESSAGE *mag2)
/**********************************************************
* Input(s)
msgl
first I2C message
msg2
second I2C message
* Returns
None.
* Description: A block data is received from a slave device, and also
a{nother) block data is send to another slave device
both blocks are separated by a repeated start.
* PROTOCOL
...
...
***************************************************************************************/
iicTfr.mrNessages = 2;
iicTfr.p_message
p_iicMsg;
p_iicMsg[O]
msgl;
p_iicMsg[l] = msg2;
StartTransfer() ;
January 1997
646
Application note
Philips Semiconductors
12C with the XA-G3
Appendix II
AN96119
12CBITS.C
1***************************************************** **********************/
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
Name of module
Language
Name
Description
I2CBITS.C
C
P.H. Seerden
Driver part for XA-G3 I2C 'bit-bang' code.
*/
*/
*/
*/
*/
Pl.4 and Pl.5 are used for SCL and.SDA.
*/
Everything between one Start and Stop condition is called a TRANSFER. */
*/
One transfer consists of one or more MESSAGEs.
*/
MESSAGEs are separated by Repeated Staarts.
*/
To start a transfer call function "I2C_Transfer".
*/
(C) Copyright 1996 Philips Semiconductors B.V.
*/
*/
/***************************************************************************/
/*
/*
*/
History:
*/
*/
*/
*/
/*
1*
96-11-25
P.H. Seerden
Initial version
/*
/***************************************************************************/
#include
#include "i2cexprt.h"
#include "i2cdrivr.h"
static I2C_TRANSFER *tfr;
static I2C-MESSAGE *msg;
static
static
static
static
static
/*
/*
/*
/*
/*
/*
void (*readyProc)
BYTE mssgCount;
BYTE dataCount;
BYTE state;
bit noAck;
/* Ptr to active transfer block
/* ptr to active message block
(BYTE,BYTE);
/* proc. to call if transfer ended
/* Number of messages sent
/* nr of bytes of current message
/* state of the I2C driver
about 1 us delay time at 20 MHz.
Used to insure minimum high and low clock times on the I2C bus.
This macro must be tuned for the actual oscillator frequency used.
Other parameters involved:
XA bus timing (BTRH and BTRL)
required I2C bus speed (normal or fast)
performance of compiler generated code
#define
January 1997
delay
asm("
asm("
asm("
asm("
asm("
asm("
asm("
asm("
nop")
nop")
nap")
nap")
nap")
nop")
nop")
nap")
;
;
;
;
;
;
;
647
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
Application note
Philips Semiconductors
12 C with the XA-G3
AN96119
static void SCLHigh(void)
I*****~******************
* Input(s)
* Returns
* Description
none.
none.
Sends SCL pin high and wait for any clock stretching
peripherals.
************************************************~***** *********************/
SCL = 1;
while (!SCL)
delay;
static void PutByte(BYTE i)
/**************************
* Input(s)
i
byte to be transmitted.
* Returns
: None.
* Description: Sends one byte of data to a slave device.
***************************************************************************/
BYTE
n;
for (n-Ox80; n!=O; n=n»I)
SDA = (i & n)
SCLHigh() ;
delay;
SCL = 0;
delay;
II
? 1 : 0;
delay;
SDA = 1;
SCLHigh() ;
noAck = SDA;
SCL = 0;
1* make SCL high and check for stretching *1
*1
/* extra delay needed
1* not needed, enough delay in sw loop
*1
1* extra delay needed (1 us)
*1
1* release data line for acknowledge
*1
1* make SCL high and check for stretching *1
/* check acknowledge
*1
static BYTE GetByte(void)
/************************
" Input(s)
None.
* Returns
: received byte.
* Description : Receive one byte of an addressed slave.
***************************************************************************/
BYTE
n, i;
for (n=O; n<8; n++)
SCLHigh();
i = i I SDA;
SCL = 0;
delay;
i = i«I;
SDA
noAck;
SCLHigh() ;
SCL = 0;
SDA = 1;
return i;
January 1997
I
* read 8 bits
*1
1* make SCL high and check for stretching */
1* make SCL high and check for stretching
648
*/
Application note
Philips Semiconductors
12 C with the XA-G3
AN96119
static void Generatestart(voidl
/**~***************************
* Input(s)
None.
* Returns
: None.
* Description: Generate a start condition, and send slave address.
***************************************************************************/
SCL = 1;
SDA = 1;
noAck
FALSE;
i f (SCL
&&
/* needed for repeated start
SDA)
*/
/* clear no ack status flag
*/
/* both lines high ??
*/
{
SDA = 0;
delay;
delay;
delay;
SCL = 0;
PutByte(msg->address) ;
/* hold time start condition min. 4 us
*/
else
readyProc(I2C_ERR, mssgCount);
/* Signal driver is finished
*/
static void GenerateStop(BYTE status)
1************************************
* Input(s)
status
status of the driver.
* Returns
: None.
* Description: Generate a stop condition, releasing the bus.
*********************************************~******** *********************/
SDA = 0;
SCLHigh() ;
SDA = 1;
state = ST_IDLE;
readyProc(status, mssgCount;
January 1997
/* make seL high and check for stretching */
/* stop condition setup time min. 4 us
*/
/* Signal driver is finished
649
*/
Philips Semiconductors
Application note
12C with the XA-G3
AN96119
void StateHandler(void)
1**********************
* Input(s)
None.
* Returns
: None.
* Description: Master mode state handler for 12C bus.
****************************************************** *****~***************/
switch (state)
{
case ST_SENDING
if (noAck)
GenerateStop{I2C_NACK_ON_DATA) ;
else
if (dataCount < msg->nrBytes)
putByte (msg-->buf [dataCount++] ) ;
else
/* sent next byte
*/
{
if (msgCount < tfr->nrMessages)
{
=
dataCount
0;
msg = tfr->p_message[mssgCount++];
state = (msg->address & 1) ? ST_AWAIT_ACK
GenerateStart() ;
else
GenerateStop(I2C_OK) ;
i*
transfer ready
*/
break;
case ST AWAIT_ACK :
i f (noAck)
GenerateStop(I2C_NACK_ON_ADDRESS) ;
else
if (msg->nrBytes == 1)
{
noAck
state
TRUE;
ST_RECV_LAST;
/* clear ACK
*/
else
state
ST_RECEIVING;
break;
case ST_REEIVING
msg->buf[dataCount++] = GetByte();
if (dataCount + 1
msg->nrBytes)
==
{
noAck
state
TRUE;
ST_RECV_LAST;
/* clear ACK
*/
break;
case ST RECV_LAST :
msg->buf[dataCount] = GetByte();
if (mssgCountnrMessages)
{
dataCount = 0;
msg = tfr->p_message[mssgCount++];
state = (msg->address & 1) ? ST_AWAIT_ACK
GenerateStart() ;
else
GenerateStop(I2C_OK) ;
break;
case ST_IDLE
break;
default :
GenerateStop(I2C_ERR);
break;
January 1997
/* transfer ready
/* impossible
/* just to be sure
650
*/
*/
*/
Application note
Philips Semiconductors
12C with the XA-G3
AN96119
void I2C_Transfer(I2C_TRANSFER *p, void (*proc)(BYTE, BYTE»
!***********************************************************
* Input{s)
p
proc
address of I2C transfer parameter block.
procedure to call when trnasfer completed,
with the driver status passed as parameter.
* Output(s)
None.
None.
* Description: Start an I2C transfer, containing 1 or more messages. The
application must leave the transfer parameter block
untouched until the ready procedure is called.
* Returns
***************************************************************************/
tfr = p,
readyProc
proc,
1,
mssgCount
dataCount
0;
msg = tfr->p_message[O];
/* first message
*/
state = (msg->address & 10
GenerateStart();
while (state != ST_IDLE)
StateHandler{) ;
void I2C_Initialize(BYTE dum)
/****************************
state = ST_IDLE;
P1CFGA
P1CFGB
January 1997
P1CFGA & Oxcf;
P1CFGB & Oxcf;
/*P1.4 and P1.5 as open drain ports
651
*/
Application note
Philips Semiconductors
12C with the XA-G3
Appendix III
AN96119
12C8584.C
/**********************************************~****** ***********************/
/*
/*
/*
/*
Name of module
Language
Name
Description
I2C8584.C
*/
C
*/
*/
*/
*/
P.H. Seerden
Interrupt driven driver for the XA-Gx and the
PCx8584 I2C bus controller.
/*
/*
*/
/*
/*
/*
/*
Uses external interrupt 0 of the XA.
*/
Everything between one Start and stop condition is called a TRANSFER. */
One transfer consists of the one or more MESSAGEs.
*/
To start a transfer call function "I2C_Transfer".
*/
*/
/*
;*
(C) Copyright 1996 Philips Semiconductors B.V.
*/
*/
/*
1***************************************************** ***********************/
/*
/*
History:
/*
/*
96-11-25
*J
*/
*/
P.H. Seerden
'OJ
Initial version
1*
*J
/****************************************************************************/
#include
#include "i2cexprt.h"
#include "i2cdrivr.h"
/***'O'*******'O'O****CHANGE ADDRESSES FOR OTHER APPLICATIONS******************/
#define BYTE_AT (x)
(*(far unsigned char*)x)
J*
AR_8584
VR_8584
CL_8584
DR_8584
BYTE_AT (OxFOOOO)
BYTE_AT (OxFOOOO)
BYTE_AT (OxFOOOO)
BYTE_AT (OxFOOOO)
/*
/*
/*
/*
#define CR_8584
#define CS_8584
BYTE_AT (OxF0002)
BYTE_AT (OxF0002)
/* Control Register
/* CntrlJStatus Reg
#define
#define
#define
#define
Address Register
Vector Register
Clock Register
Data Register
ESO ESl ES2
0
0
0
1
0
0
0
1
x
x
x
x
*/
'O/
*/
*/
*/
*/
*/
/****************************************************************************/
static I2C_TRANSFER *tfr;
static I2C_MESSAGE *msg;
/* Ptr to active transfer block
/* ptr to active message block
*/
*/
static
static
static
static
/* proc. to call i f transfer ended
/* Number of messages sent
J* nr of bytes of current message
J'O state of the I2C driver
*/
*/
*/
void
BYTE
BYTE
BYTE
(*readyproc) (BYTE/BYTE);
mssgCount;
dataCount;
state;
'O/
static void GenerateStop(BYTE status)
/************************************
* Input(s)
* Output(s)
* Returns
* Description
status
status of the driver.
driver status to the upper layer.
none.
Generate a stop condition.
****************************************************************************/
PIN_MASK
ST_IDLE;
I
ESO_MASK
readyProc(status, mssgCount);
January 1997
I
STO_MASK lACK_MASK;
/'O
Signal driver is finished
652
*/
Application note
Philips Semiconductors
12C with the XA-G3
AN96119
interrupt void X2C_Xnterrupt(void)
I****~w***************************
* Input(s)
* Output(s)
* Returns
* Description
none.
none.
none.
Interrupt handler for PCF8584 into at external int 0 pin.
****************************************************************************/
switch (state)
{
case ST_SENDING
if (CS_8584 & LRB_MASK)
GenerateStop(I2C_NACK_ON_DATA) ;
else
if (dataCount < msg->nrBytes)
DR_8584 = msg->buf[dataCount++];
else
/* sent next byte
*/
{
if (mssgCount < tfr->nrMessages)
{
dataCount = 0;
msg = tfr->p_message[msgCount++];
state = (msg->address & 1) ? ST_AWAIT_ACK
CS_8584
ESO_MASK I STA_MASK lACK_MASK;
DR_8584 = msg->address;
else
GenerateStop(I2C_OK) ;
/* transfer ready
*/
/* clear ACK
*/
state = ST_RECEIVING;
dummy = DR_8584;
/* start generation of clock pulses
for the first byte to read
*/
break;
case ST_AWAIT_ACK :
if (CS_8584 & LRB_MASK)
GenerateStop(I2C_NACK_ON_ADDRESS);
else
{
BYTE dummy;
if (msg->nrBytes
==
1)
{
CS_8584 = ESO_MASK;
state
ST_RECV_LAST;
else
break;
case ST_RECEIVING
if (dataCount + 2
==
msg->nrBytes)
{
CS_8584
ESO_MASK;
state = ST_RECV_LAST;
}
/* clear ACK
*/
=
msg->buf[dataCount++j
DR_8584;
break;
case ST_RECV_LAST :
if (mssgCount < tfr->nrMessages)
{
msg->buf[dataCount] = DR_8584;
dataCount = 0;
msg = tfr->p_message[mssgCount++];
state = (msg->address & 1) ? ST AWAIT ACK
CS_8584
ESO_MASK I STA_MASK I-ACK_MASK;
DR_8584 = msg->address;
else
{
GenerateStop(I2C_OK) ;
msg->buf[dataCount)
DR_8584;
break;
default :
GenerateStop(I2C_ERR);
break;
January 1997
/* transfer ready
/* impossible
/* just to be sure
653
*/
*/
*/
Application note
Philips Semiconductors
12C with the XA-G3
AN96119
void 12C_Transfer(I2C_TRANSFER *p, void (*proc)(BYTE, BYTE))
1***************************************************** ******
* Input(s)
p
proc
address of I2C transfer parameter block.
procedure to call when transfer completed.
with the driver status passed as parameter.
* Output(s)
None.
* Returns
None.
* Description: Start an I2C transfer, containing 1 or more messages. The
application must leave the transfer parameter block
untouched until the ready procedure is called.
***************************************************************************/
tfr = p;
readyProc
proc;
mssgCount
0;
dataCount
0;
msg = tfr->p_message[mssgCount++);
state
CS_8584
DR_8584
(msg->address & 1) ? ST_AWAIT_ACK
ESO_MASK I STA_MASK lACK_MASK;
msg->address;
ST_SENDING;
/* generate start */
void 12C_Initialize(BYTE speed)
/******************************
* Input(s)
speed
clock register value for bus speed.
None.
None.
* Returns
* Description: Initialize the PCF8584.
* Output(s)
***************************************************************************/
ST_IDLE;
NULL;
state
readyProc
AR_8584
CR_8584
CL_8584
Ox26;
Ox20;
speed;
/* dummy own slave address
/* write clock register
*/
*/
/* for Microcore 6 and XTEND,
*/
now fill the secondary vector table with the right interrupt vector
#asm
mov.w r2,#680h
mov.w rO,#_I2C_Interrupt&(0+65535)
mov.w r1,#seg _I2C_Interrupt
mov.w [r2+),rO
mov.w [r2),r1
#endasm
*/
/*
/* set serial interface ON
IPAO = IPAO
EXO = 1;
EA = 1;
January 1997
I
*/
7;
/* General interrupt enable
654
*/
Philips Semiconductors
Application note
\2C with the XA-G3
Appendix IV
AN96119
12CDEMO.C
i~***********************************************~**** **********************/
/"
/*
/*
/*
Name of module
Program language
Name
Description
DEMO.C
C
P.H. Seerden
XA-Gx I2C driver test (PCF8584 + bit bang)
Runs on MICROCORE 6
Read time from the real time clock chip PCF8583.
run leds connected to PCF8574 every second.
/*
/*
/*
/*
/*
(C) Copyright 1996 Philips Semiconductors B.V.
*/
*/
*/
*/
*/
*/
*/
*/
*/
/*
*/
/***************************************************************************/
/*
/*
*/
*/
*/
*/
History:
/*
/*
96-11-25
P.H. Seerden
Initial version
/*
*/
/***************************************************************************/
!tinclude "i2cexprt.h
!tdefine
!tdefine
!tdefine
!tdefine
PCF8574_WR
PCF8574_RD
PCF8583 _WR
PCF8583 - RD
static BYTE
static BYTE
Ox40
Ox41
OxAO
OxAl
/* i2c address I/O poort write */
/* i2c address I/O poort read
/* i2c address Clock
/* i2c address Clock
*/
*/
*/
rtcBuf[1] ;
iopBuf[1] ;
static I2C_MESSAGE
static I2C_MESSAGE
static I2C_MESSAGE
rtcMsg1;
rtcMsg2;
iopMsg;
static void Init(void)
{
I2C_Initialize(OxlO) ;
rtcMsg1.address
rtcMsg1.buf
rtcMsg1.nrBytes
rtcMsg2.address
rtcMsg2.buf
rtcMsg2.nrBytes
/* for PCF8584,
4.43MHz and SCL
PCF8583_WR;
rtcBuf;
1;
PCF8583_RD;
rtcBuf;
1;
iopMsg.address
PCF8574_WR;
iopMsg.buf
iopBuf;
iopMsg.nrBytes
1;
iopBuf[O] = Oxff;
I2C_Write(&iopMsg) ;
January 1997
655
90KHz
*/
Philips Semiconductors
Application note
12 C with the XA-G3
AN96119
void main (void)
{
BYTE
oldseconds,port;
Init () ;
oldseconds
0;
port = Oxf7;
while (1)
{
rtcBuf[O) = 2;
12C_WriteRepRead(&rtcMsgl, &rtcMsg2);
/* read seconds
*/
if (rtcBus(O) != oldseconds)
/* one second passesed ?
*/
{
oldseconds = rtcBuf[O];
switch (port)
case Oxf7:
case Oxfb:
case Oxfd:
case Oxfe:
default:
port
Oxfe;
port
Oxf7;
port
Oxfb;
port
Oxfd;
break;
break;
break;
break;
break;
}
iopBuf(O)
port;
12C_Write(&iopMsg) ;
January 1997
656
Application note
Philips Semiconductors
12C with the XA-G3
Appendix V
AN96119
12CEXPRT.H
/***************************************************** **********************1
1*
/*
I*
I*
/*
/*
/*
I *
1*
Name of module
I2CEXPRT.H
Language
: C
Name
P. H. Seerden
Description
This module consists of a number of exported
declarations of the I2C driver package. Include
this module in your source file if you want to
make use of one of the interface functions of the
package.
(C) Copyright 1996 Philips Semiconductors B.V.
/*
/*
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
/*********************************************~******* **********************/
1*
*/
/*
History:
1*
/*
96-11-25
*/
*/
P.H. Seerden
Initial version
*/
/*
*/
/***************************************************************************/
typedef unsigned char
typedef unsigned short
typedef unsigned long
BYTE
WORD
LONG
typedef struct
{
BYTE
address;
BYTE
nrBytes;
BYTE
*buf;
I2C_MESSAGE;
/* slave address to sent/receive message
/* number of bytes in message buffer
/* pointer to application message buffer
*/
*/
*/
typedef struct
{
BYTE
nrMessages;
I2C_MESSAGE **p_message;
I2C_TRANSFER;
/* number of message in one transfer */
/* pointer to pointer to message
*/
/***************************************************************************/
/*
EXPORTED
DATA
DECLARATIONS
*/
1***************************************************** **********************/
#define FALSE
#define TRUE
#define I2C_WR
#define I2C_RD
/**** Status Errors ****/
#define
#define
#define
#define
#define
#define
#define
I2C_OK
I2C_BUSY
I2C_ERR
I2C_NO_DATA
I2C_NACK_ON_DATA
I2C_NACK_ON_ADDRESS
I2C_TIME_OUT
o
1
2
3
4
5
6
/*
/*
/*
/*
/*
/*
/*
transfer ended No Errors
transfer busy
err: general error
err: No data in block
err: No ack on data
err: No ack on address
err: Time out occurred
*/
*/
*/
*/
*/
*/
*/
/*********************************~******************* **********************/
1*
I N T E R F ACE
FUN C T ION
PRO TOT Y PES
*/
/***************************************************************************/
extern void I2C_Initialixe(BYTE speed);
extern
extern
extern
extern
extern
extern
void
void
void
void
void
void
January 1997
I2C_Write(I2C_MESSAGE *msg);
I2C_WriteRepWrite(I2C_MESSAGE *msgl, I2C_MESSAGE *msg2);
I2C_WriteRepRead(I2C_MESSAGE *msgl, I2C_MESSAGE *msg2);
I2C_Read(I2C_MESSAGE *msg);
I2C_ReadRepRead(I2C_MESSAGE *msgl, I2C_MESSAGE *msg2);
I2C_ReadRepWrite(I2C_MESSAGE *msgl, I2C_MESSAGE *msg2);
657
Philips Semiconductors
Application note
12C with the XA-G3
AN96119
12CDRIVR.H
Appendix VI
/***************************************************************************/
/*
/*
/*
/*
Name of module
Language
Name
Description
1*
I2CDRIVR.H
*/
C
*/
*/
*/
*/
P.H. Seerden
This module contains a number of 'local'
declarations for the XA-Gx I2C driver package.
/*
*/
(C) Copyright 1996 Philips Semiconductors B.V.
/*
/*
*/
*/
/***************************************************************************/
/*
1*
1*
History:
1*
96-11-25
P.H. Seerden
*/
*/
*/
*/
Initial version
/*
*/
/***************************************************************************/
static bit
static bit
SDA
SCL
@
@
Ox38C
Ox28D;
#define
#define
#define
#define
#define
ST_IDLE
ST_SENDING
ST_AWAI T_ACK
ST_RECEIVING
ST_RECV_LAST
2
3
4
#define
#define
#define
#define
ACK_MASK
STO_MASK
STA_MASK
ESO_MASK
OxOl
Ox02
Ox04
Ox48
#define
#define
#define
#define
#define
#define
#define
BB_MASK
LAB_MASK
AAS_MASK
LRB_MASK
BER_MASK
STS_MASK
PIN_MASK
OxOl
Ox02
Ox04
Ox08
Oxl0
Ox20
Ox80
1 * port Plo 4
1 * port Pl. 5
1
1* also interrupt enable
extern void I2C_Transfer(I2C_TRANSFER *p, void (*proc) (BYTE, BYTE»;
January 1997
*/
*/
658
*/
Philips Semiconductors
Section 7
Development Support Tools
CONTENTS
660
XA tools linecard
Advin Systems Inc.
Aisys Ltd.
PILOT-U40 Universal Programmer .......................... 661
DriveWayTM-XA Device Drivers Code Generation Tool . . . . . . . . . . . . . . . . . ..
662
Archimedes Software, Inc. IDE-8051XA Archimedes Integrated Development
Environment (IDE) for 8051XA ......................... ..................... 663
Ashling Microsystems Ltd.
Ultra·51XA Microprocessor Development System.......
665
BP Microsystems
BP-1200 Universal Device Programmer................. ... .................. 670
BP-21 00 Concurrent Programming System™ ................................. 676
BP-41 00 Automated Programming System ................................... 678
BSOlTasking
Total Development Solution for the Philips 51 XA Architecture. . . . . . . . ..
680
CEIBO
DS-XA In-Circuit Emulator ................................................. 682
XA Software Tools ........................................................ 686
CMX Company
CMX-RTXTM, CMX-TINy+TM, CMX-TINyTM Real-Time Multi-Tasking Operating System
for Microprocessors and Microcomputers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
The CMX-TINy+TM RTOS Kernel............ ................................
CMX PCProto-RTXTM ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
The CMXTracker™ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
The CMXBug™ Debugger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
Data 1/0 Corp.
692
693
694
695
696
ProMaster 2500 Automated Handling System. . . . . . . . . . . . . . . . . . . . .. 697
EDI Corporation
Accessories for 8051·Architecture Devices ...................... 698
Embedded System Products, Inc.
3 different configurations .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
RTXCTM V3.2 Library contents ..............................................
RTXCTM V3.2 Kernel services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
RTXCTM Real-Time Kernel..................................................
RTXCio™ InpuVOutput Subsystem ..........................................
RTXCfile™ MS-DOS Compatible File Manager. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
699
700
701
703
707
709
Emulation Technology, Inc.
711
Future Designs, Inc.
XA Microcontroller Development Tools .. . . . . . . . . . . . . ..
XTEND, XA Trainer & Expandable Narrative Design. . . . . . . . . .. 713
HI-TECH Software HI-TECH C Compiler for the Philips XA microcontroller
- technical specifications ............................ ; . . . . . . . . . . . . . . . . . . . . ..
Hiware
715
Hi-Cross Development System ......................................... 719
Logical Systems Corp.
Nohau Corp.
51XA-G3 Programming Adapters ........................ 720
EMUL 51XA In-Circuit Emulators for the P51XA Family...............
721
Philips Semiconductors
P51XA Development Board... .... ................................. ........ 728
80C51XA Software Development Tools...................................... 730
Signum Systems Corp.
System General
Universal In-Circuit Emulator for 8051/31 Series ........... 732
Universal Device Programmers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 734
659
Philips Semiconductors
XA tools Ii necard
Telephone/Contact
Product
Europe
North America
C Compilers
Archimedes
1-206-822-6300
Mary Sorensen
SW
41.61.331.7151
Claude Vonlanthen
CMXCompany
1-508-872-7675
Charles Behrmann
US
1-508-872-7675
Charles Behrmann
C-51XA
Hi-Tech XAC
Hi-Tech
1-207-236-9055
Avocet - T. Taylor
UK
44.1.932.829460
Computer Solutions
Hi-Tech C (XA)
Pantasoft
1-314-830-4084
Roly Schwartzman
GE
49.6151.27505
M. Kimron
C-XA
Tasking
1-617-320-9400
Vaughn Orchard
US
1-617-320-9400
Vaughn Orchard
C-Compiler
Ultra2000-XA
Emulators (including Debuggers)
Ashling
1-508-366-3220
Bob Labadini
IR
353.61.334466
Micheal Healy
Ceibo
1-314-830-4084
Roly Schwartzman
GE
49.6151.27505
M. Kimron
DS-XA
Nohau
1-408-866-1820
Jim Straub
SW
46.40.922425
Mikael Johnsson
EMUL51XA-PC
Archimedes
1-206-822-6300
Mary Sorensen
SW
41.61.331.7151
Claude Vonlanthen
A-51XA
Ashling
1-508-366-3220
Bob Labadini
IR
353.61.334466
Micheal Healy
SDS-XA
Pantasoft
1-314-830-4084
Roly Schwartzman
GE
49.6151.27505
M. Kimron
ASM-XA
Cross Assemblers
Philips/Macraigor*
1-408-991-51 XA MotiKama
US
1.408.991.5192
Moti Kama
Mcgtool
Tasking
1-617-320-9400
Vaughn Orchard
US
1-617-320-9400
Vaughn Orchard
C-Compiler
Real-Time Operating Systems
CMX Company
1-508-872-7675
Charles Behrmann
US
1.508.872.7675
Charles Behrmann
CMX-RTX
Embedded
System Products
1-713-561-9990
Ron Hodge
US
1.713.516.9990
Ron Hodge
RTXC
R&D Publications
1-913-841-1631
Customer Service
US
1.913.841.1631
Customer Service
Labrosse MCU/OS
Simulators & Software Generation Tools
Aisys
1-800-397-7922
Customer Service
IL
972.3.9226860
Oren Katz
DriveWay-XA
Archimedes
1-206-822-6300
Mary Sorensen
SW
41.61.331.7151
Claude Vonlanthen
SimCASE-51XA
Pantasoft
1-314-830-4084
Roly Schwartzman
GE
49.6151.27505
M. Kimron
DEBUG-XA
Philips/Macraigor*
1-408-991-51XA Moti Kama
US
1.408.991.5192
Moti Kama
Mcgtool
1-408-991-51XA Mike Thompson
US
1.408.991.5192
Mike Thompson
Mcgtool
CMX (Hi-Tech)
1-508-872-7675
Charles Behrmann
UK
44.1.932.829460
Charles Behrmann
XADEV
Future Designs
1-205-830-4116
Mark Hall
US
1-205-830-4116
Mark Hall
XTEND-G3
Philips/Macraigor
1-408-991-51 XA MotiKama
US
1.408.991.5192
Moti Kama
P51XA-DBE SD
BP-1200
Translators (80C51-to-XA)
Philips/Macraigor*
Development Kits
EPROM Programmers
BP Microsystems
1-800-225-2102
Sales Department
US
1.713.688.4600
Sales Department
Ceibo
1-314-830-4084
Roly Schwartzman
GE
49.6151.27505
M. Kimron
MP-51
Data 1/0 Corp.
1-800-247-5700
Tech Help Desk
BE
32.1.638.0808
Roland Appeltants
UniSite
EDICorp
1-702-735-4997
Milos Krejcik
US
1.702.735.4997
Milos Krejcik
44PG/44PL
Logical Systems
1-315-478-0722
Lynn Burko
US
1.315.478.0722
Lynn Burko
PA-XG3FC-44
Adapters & Sockets
*
The Philips cross assembler, simulator, and translator are available on the Philips FTP site at ftp://ftp.philipsMCU.com/pub.
File name XA-TOOLS.ZIP
1997 Mar 21
660
ADVIN SYSTEMS INC.
PILOT-U40
PILOT-U40
Universal Programmer
• All members of the Philips XA family
of microcontrollers, as well as
EPROMs, PALs, etc., are supported
• Controlled by IBM PCs/Notebooks or
compatibles
•
Standard parallel printer port interface,
no PC slot required
Product Information
PILOT-U40 is the most cost-effective and reliable
solution for programming the Philips XA family of
microcontrollers, as well as other micros, memories and
logic devices. It comes standard with all the software for
supporting the different types of devices. Software is
versatile and rich in features, yet designed for ease of use
and fast operation. Batch/macro features allow easy setup of
repeatedly used sequences and provide straight forward
operation by production personnel. Software updates are
free via BBS lines.
Since PILOT-U40 connects to IBM PCs through
standard parallel ports, no time-consuming downloading is
needed and no special PC interface card is required either.
The power supply is built-in and automatically adjusts to
110-240 AC, convenient for international operations.
Advin Systems, Inc. has been a dependable and
responsive supplier of reliable programming instruments for
over eight years. It is recognized by major IC manufacturers
as a producer of high quality programmers. Please call now
to see how we can serve your needs.
• Powerful, flexible and friendly
software
• Free lifetime software updates via high
speed BBS
• Industrial quality
• Approved by major semiconductor
manufacturers
Ordering Information
PILOT-U40: Includes interface cable, software,
manual, 1 year warranty, 30-day money-back satisfaction
guarantee. PLCC, SOIC, PGA, QFP modules are optional.
Contact Information
Advin Systems Incorporated
1050-L East Duane Avenue
Sunnyvale, CA 94086
Tel: (800) 627-2456
Tel: (408) 243-7000
Fax: (408) 736-2503
SAdvin
661
DriveWayTM-XA
DriveWayTM-XA
Device Drivers
Code Generation Tool
=Iusl)ll
file
Drlveway-x.<.- SERIALC
Edit
Yiew
Window
Help
col
I,,;;,'.
TrafflcUghtControner
-Ill B051-XA-G3
,6-
~lnterruptControlier
~]
SERIALC
' I·'~
, •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••. 1-
f/PortO
,
~port2
Spec1f.l.~:1 'l'1W! l.t thO!I."f! u new data 11'1 the uuro buffer.
•••••••• - •••• -••••••••••••••••••••••••••••••••••••••••••••••••
tlfPort3
b.1.tUAkTt"Jh t eltudy\vQid,
-It Port 1- Eight Bit Output- Eight BltOutpu1:
rUlleTI(.o)/: UU'lODataftudy
~erReductionl
-i:. SystemConfiguratlon-XAMode-64K(16
RIV~J.lJe =
~ SystemConflglnlt
• Generates complete Device Drivers in
'C' source code
If
• ~ Tlmer/Counter 0 - Timer - 1b-blt Auto-Rei
+
TlmerlCounter 1 Baud Rate for UART _I I
¥
RtO;
{:~~.':\I~~
returr.
(
R.IVt.l.u~;
U Timer/Counter 2
- ~ UARTO - UART - Polling· No Parity
•
•
•
•
•
Generates initialization routines
Generates your 'main' template
Generates complete test functions
Includes Interactive Data Sheet (IDS)
Runs under MS-Windows
Ii TxCompleted
•
UARTOOataReady
•
rUN':TIONIUAf.
III UARTOGetByte
TRA~TXT
SE!.H
ForHelp,pressF1
Product Information
• Shortens time to market
• Reduces product development costs
DriveWay-XA is an automatic application code
generator that supports Philips 8051-XA microcontrollers. It
is an easy-to-use Windows-based software tool that
produces tested and documented 'C' source code to control
8051-XA on-chip peripherals.
Aisys provides a series of DriveWay products which
support a variety of popular microcontrollers. These
DriveWay products address the need of embedded system
designers for full hardware and software integration of
on-chip peripherals. DriveWay is a revolutionary class of
tools for developing device drivers which produces tested
and documented 'C' code to control on-chip peripherals.
DriveWay eliminates the tedious coding of peripheral
functions and the need to learn the internals of each
supported chip. This results in a shorter time to market,
reduced product development costs, and higher-quality
code.
DriveWay also provides on-line Interactive Data Sheet
(IDS) which provides hypertext data describing the chip,
peripherals, modes, registers and pins that you need to
program and can be used as a simpler kind of chip data
handbook.
• Improves code quality
• Eliminates the need to learn chip internals
Visit Aisys at
http://www.aisys-usa.com
USA
Aisys
One Washington Street
Wellesley Hills, MA 02181
Tel: 800-397-7922
Fax: 800-625-5525
Other
Aisys Ltd.
Science & Technology Park
16 Basel St., P.O.B. 10041
Petach-Tikva 49001, Israel
Tel: +972-3-922-6860
Fax: +972-3-922-6863
Email: dw_xa@aisys.co.il
Ordering Information
Call us for a detailed data sheet and free demo disk.
662
663
TECHNICAL OVERVIEW
Archimedes IDE-8051XA unlocks theJull power oJ the new Philips 8051XA microcontroller.
The IDE-8051XA toolset includes an ANSI C compiler optimizedJor the 8051XA, a library
manager, linkerllocator, editor and make utilities as well as an 8051 XA macro-assembler.
Archimedes SimCASE 8051XA Simulator/ C & ASM debugger provides
comprehensive C and assembly debugging via the built-in 8051XA
simulator and third party in-circuit emulators.
Archimedes IDE-8051XA ANSI
C Compiler.
Archimedes SimCASE 8051 XA
Simulator/C & ASM debugger.
The Archimedes ANSI standard C compiler optimized for
the 8051XA architecture forms the core of the
IDE-8051XA tool-set.
Archimedes 8051XA SimCASE Simulator/ C & ASM
debugger permits fast and reliable debugging at source
level. The IDE-8051XA debugger interfaces directly with
the built-in 8051XA simulator and with popular in-circuit
emulators.
C Compiler Feature Overview:
• Size and speed optimizations
SimCASE Feature Overview:
• Full simulation of the 8051XA CPU.
• Comprehensive C Source & ASM debugging
• Multiple debug windows
• Execution Profiler
• Code coverage function marks executed program code
• Position independent code
• Flexible memory models
• Reentrancy
• Interrupts in C
• In-line assembly
• Unlimited source code size
• Floating point operations support both IEEE 32 bit
single and IEEE 64 bit double precision
Hosts & System Requirement:
386 or higher
4MB RAM or higher
Windows 3.1IMS-DOS 5.0 or higher
• Static data initialized at run-time
• C libraries support advanced math including
trigonometric, exponential and logarithmic functions
Ordering Information:
Archimedes Software offers an unconditional 30-day
money back guarantee on all products.
To place an order: Call Archimedes Software Sales Dept. at:
1-800-338-1453
or order on-line at:
http://www.archimedesinc.com/devtools
ARCHIMEDES
30fTWAftf.
Archimedes Software, Inc. 303 Parkplace Center #125, Kirkland, WA 80033 FAX: (206) 822-8632.
664
Ultra-51XA Microprocessor Development Systems for Philips XA Microcontrollers
Ashling's u/tra-51XA Microprocessor Development System for Philips 80C51XA Microcontrol/ers
Ashling's Ultra-51 XA Microprocessor Development System provides a complete development
environment for the Philips XA Microcontroller family, hosted under Windows.
Features of Ashling's Ultra-SlXA Microprocessor Development systems include:
• Real-time in-circuit emulator for all Philips 80C51XA derivatives; full-speed, non-intrusive emulation
• Real-time, DSP-based Performance Analysis and Code Coverage systems for Software Quality Assurance
• Source-Level Debugging for 80C51XA programs, under Windows™ and Windows® hosts
• Single ICE probe emulates XA in ROM, EPROM and External Memory modes
• Hardware break-before-execute breakpoints throughout the XA's Code and Xdata address ranges
• Stand-alone system, complete with power supply; interchangeable probes for all XA derivatives/packages
• Integrated Development Environment for Philips 80C51XA under Windows
• IS09001-Certified Supplier; Ashling Microsystems Ltd. is certified to EN ISO 9001
665
Ashling Ultra-51XA Emulator Specification
In-Circuit Emulator
Power Supply
Ashling Ultra-51XA real-time in-circuit emulator for all
Philips XA derivatives, in single-chip and expanded modes.
Up to 50 MHz clocks; support for Bus Wait State operation.
Stand-alone In-Circuit Emulator with standard serial or
network connection to PC. Supplied with 230V 50Hz or
115V 60Hz or 100V 50Hz power unit.
Emulation Memory
Device Support
256K emulator code memory and 256KB emulator data
memory as standard. Memory expansion options up to
16MB Code and 16MB Xdata memory. 8- and 16-bit bus
widths supported. Mapping to target or emulator memory
with 256-byte resolution.
Triggering
80C5IXA-G3 and all 8051XA derivatives. Software control
of emulation mode, voltage and derivative. Probes are
available for all device packages.
In-Circuit probes are available for all XA device packages
and derivatives.
Six multiple event recognisers; symbolic, binary, or hex.
Trigger on boolean combinations of events; Trigger on
address and/or data or range(s). Prescaling to 65535.
Pre/Center/Post trace triggers. Savenoad trigger definition
files. Modify trigger on-the-fly.
Emulation Modes
Trace display
The Ultra-51XA In-Circuit Emulator provides real-time
emulation in both Single-Chip and Expanded modes, using
a single ICE probe. Target voltages in the range 2.7 - 5 Volts
are supported; the emulation voltage can be set at 3.0, 3.3V
or 5.0V, or can track the target system voltage throughout
the range.
32K frames by 96 bits with variable trace length;
expandable to 5I2K frames. Display signals in
cycle-by-cycle, hex, symbolic disassembly or source code.
Full real-time tracing of address, data, ports, control and
external buses. Savenoad trace display. Compare trace
against reference trace.
Emulation Probes
Upgrade Path
All Ultra-51 XA systems can easily be field-upgraded to a different processor type. Ashling's Development Support
Co-operation Agreement with Philips ensures that a full range of development-support tools is provided for each
new XA derivative introduced by Philips. New Ashling probes are regularly introduced for new standard
microcontrollers and microcontroller-based ASICs from Philips.
Development Support for Philips 8051 derivatives
In addition to the Ultra-51 XA Development System, Ashling supplies the CTS51 In-Circuit Emulator for the entire
Philips 8051 microcontroller family. Developed with the co-operation of Philips Semiconductors, the CTS51
In-Circuit Emulator and PathFinder-51 for Windows Source-Level Debugger supports all Philips 8051 derivatives,
including the 83C855-family Smart-Card Microcontrollers, the low-cost 87C751-series, the 83CE598-series
automotive controllers, the SAA5296-series teletext microcontrollers and the 83CL434-series consumer
microcontrollers.
IS09001 Certification; Quality Management System
Ashling Microsystems Ltd. operates a company-wide Quality Management System, formally certified to the
IS09001 international standard (NSAI Registration No. M619). This certification applies to all of Ashling's product
development, manufacturing and customer-support activities.
I.S. EN ISO 9001
Registration No. M619
666
+(
$trepY(GzHsg. "10 ihration$"):
for (i ttY' = 1; itl'r' ( : HI; i ter++)
+(
fIJ
,
C{ld~
"
Tr!lce Ports
!N do program 1e till99
(
(
+<
+<
29>
+<
+<
39)
31>
count : 0;
for (iCount = 0; iCount
fllil9s[iCountJ • TRUE;
for (iCount : 0; iCount
(=
IH initialize pri.e counter H/
SIZE; iCount++)
1M set all f1
<= SIZE: iCount++)
This PathFinder for Windows screen shows the source program and disassembled code, and the contents of
on-chip RAM, Registers and System Stack for an BOC51XA program.
Windows Source-Level Debugger
Ashling's Pathfinder for Windows source-level debugger for C and Assembler provides up to 20 display-windows,
controlled by mouse, menu-bar, command-line, accelerator keys or button-bar. Features include automatic
synchronisation of Source-Code, Traced Executed Source Code, Disassembled Code Memory, Port Activity and
Code Coverage windows; on-chip RAM, External Data Memory, Special Function Registers, Status, System Stack,
User-Stack and Variables windows. All popular XA Compilers and Assemblers are supported.
Integrated Development Environment
WinIDEAS, the Windows Integrated Development Environment allows you to edit, compile, assemble, simulate,
debug, download and execute code on your Philips XA microcontrolier target system in the Windows™
environment throughout. WinlDEAS provides a uniform, flexible and extensible windows interface for Editing,
C Compiling, Assembling, Linking, In-circuit emulation, Performance Analysis, Code Coverage Measurement and
Software Validation reporting on 80C51 XA Microcontrolier projects.
667
p"Ihl,"d(', >:.A 101 .......
",",,>'!,
I
r
I
r--r-~~rrFFr;~~jt ~F
191>
( 192)
( 193)
+( 194)
( 195)
+( 196) u
( 197)
( 198)
+( 199)
+( 200)
+( 201)
+(
count--;
inc_dlllOrd(r.SUb_counter[6]):
Ashling's System Execution Analyser (SEA-XA) option is a DSP-based, high-speed measurement system for
performance-critical or safety-critical embedded applications using the XA microcontroller and its derivatives. It is
non-intrusive and non-statistical, and measures all events accurately and continuously.
Software Quality Assurance Tools: Real-Time Performance Analysis
The System Execution Analyser (SEA-XA) is a built-in, DSP-based option for Ashling's Ultra-51 XA Microprocessor
Development System. The SEA provides real-time, non-intrusive, non-statistical Performance Analysis, Code
Coverage and Report Generation. The SEA also provides symbolic function-trace, time-stamping, timing analysis
and software verification. You can measure maximum, minimum and average execution times, execution counts
and percentage code execution at Source or Assembly level.
Software Quality Assurance Tools: Real-Time Code Coverage
Ashling's CTMS-XA Code Test Management System option for the Ultra-51 XA Emulator measures 80C51 XA code
execution in real-time throughout a test session. It maps tested and untested code; identifies all tested,
partially-tested or untested C source statements and assembler instructions; generates formal, annotated test
reports; identifies redundant code; and provides a formal measurement of test completeness.
668
Ashling's International Distributors
AUSTRALIA:
Metromatics Pty. Ltd.
Tel:
07-3585155
Fax:
07-2541440
AUSTRIA:
Ashling Mikrosysteme
Tel:
+49-8233-32681
Fax:
+49-8233-32682
BELGIUM:
Air Parts Electronics
Tel:
02241 6460
Fax:
02241 8130
FRANCE:
Ashling Microsystemes sari
Tel:
(1) 46.66.27.50
Fax:
(1) 46.74.99.88
GERMANY:
Ashling Mikrosysteme
Tel:
08233/32681
Fax:
08233/32682
GREECE:
Pantech D.D.C.
Tel:
031-608850
Fax:
031-608851
HUNGARY:
Vanguard Kft.
Tel:
(1) 1751849
Fax:
(1) 1751849
IRELAND:
Ashling Microsystems Ltd
Tel:
061-334466
Fax:
061-334477
ISRAEL:
ROT Ltd.
Tel:
03-6450745
Fax:
03-6478908
ITALY:
All-Data s.r.1.
Tel:
02-66015566
Fax:
02-66015577
KOREA:
DaSan Technology
Tel:
(02) 511 9846
Fax:
(02) 511 9845
MALAYSIA:
Quality Power Sdn Bhd
Tel:
(04) 8266552
Fax:
(04) 8266552
NETHERLANDS:
Air Parts b.v.
Tel:
0172-422455
Fax:
0172-421022
SINGAPORE:
Flash Technology Pte. Ltd.
Tel:
+652920233
Fax:
+652928433
SPAIN:
Sistemas Jasper s.1.
Tel:
(1) 8038526
Fax:
(1) 804 1623
SWEDEN:
Ferner Elektronik AB
Tel:
08-7608360
Fax:
08-7608341
SWITZERLAND:
Litronic AG
Tel:
061 421 3201
Fax:
061 421 1802
TAIWAN:
Chinatech Corp.
Tel:
029160977
Fax:
029126641
TURKEY:
MOS Engineering
Tel:
02125771691
Fax:
02126128824
U.K.:
Ashling Microsystems Ltd.
Tel:
(01256) 811998
Fax:
(01256) 811761
U.S.A.:
Orion Intruments, Inc.
Tel:
(800) 729 7700
Fax:
(408) 7470688
Ashling Microsystems Ltd.
National Technological Park
Limerick
Ireland.
Tel: +35:3--61-334466
Fax: +353-61-334477
Email: ashling@iol.ie
sales@oritools.com
Ashling Microsystems Ltd.
Intec 2, Studio 9
Wade Road, Basingstoke
Hants. RG24 8NE, UK
Tel: (01256) 811998
Fax: (01256) 811761
Ashling Microsystemes sari
2, rue Alexis de Tocqueville
Parc d' Activites Antony 2
92183 ANTONY - France.
Tel: (1) 46.66.27.50
Fax: (1)46.74.99.88
Email: ash-frQworldnet.sct.fr
669
Ashling Mikrosysteme
Brunnenweg 4
86415 Mering
Germany.
Tel: 08233-32681
Fax: 08233-32682
Orion Instruments Inc.
1376 Borregas Avenue
Sunnyvale
CA 94089-1004, USA.
Tel: (800) 729 7700
Fax: (408) 7470688
BP MICROSYSTEMS
I
I
I
I
I
0
I
,
I
~
I
I
I
I
I
t
---I
1--I
I
I
I
I
I
I
I
I
I
I
~
I
~
I
0
I
I
I
I
I
I
I
I
I
I
I
---I
1---
,
I
rI
I
~
I
I
I
I
I
I
I
I
I
--..I
UNIVERSAL DEVICE 'PROGRAMMER
670
BP-1200
The BP-1200 uses the newest
technology to satisfy the programming
requirements of both engineering and
• New technology provides price and perform~nce
breakthrough
production users at a reasonable price.
Leading the competition in devices
• Supports virtually every programmable device
supported, performance, ease of use,
• Supports all device technologies up to 240 pins
• Supports DIP, LCC, PGA, PLCC, QFP, SOIC, and
TSOP devices directly
and cost of ownership, the BP-1200 is
clearly the best choice for demanding
• Autohandler interface available for production
applications
users. the ability to program almost
• Fastest universal programmer available
every programmable device, including
• User-friendly software runs on PC
the fastest and largest PLDs and
• Backed by unmatched customer service
memories available, gives engineers
• Field upgradable to grow with your requirements
the freedom to choose the optimum
device for new designs. Helping to get
products to market faster, the BP-1200 connects directly to an engineer's PC,
saving many valuable hours during product development by speeding up the
program-and-test cycle. For production, the BP-1200's ease-of-use, high yields,
high speed, and reliability increase efficiency and eliminate headaches in either
an autohandler or a manual production environment. Best of all, the BP-1200 can
be upgraded to meet your future requirements through expandable hardware that
can support advanced devices with up to 240 pins, and through free software
updated available twenty-four hours a day from our electronic bulletin board
system. Algorithms are released approximately every six weeks for new device
support and immediately for bug fixes. Enhanced software is available to support
engineering, QC, and production applications that go beyond mainstream
requirements. Our achievement in bringing customers the highest quality
programming system at a fair price is unparalleled. The BP-1200's concept is
simple: the Best Programmer available at any price.
671
programmed in circuit, to make the BP-1200 as
advanced as possible. We work closely with major
semiconductor manufacturers as they develop new
devices to keep abreast of future programming trends.
this helps us release software updates concurrently with
the introduction of new devices. These software updates
are available at all times on our electronic Bulletin
Board System.
BP-1200
DEVICE SUPPORT
The BP-1200 supports virtually every
programmable device available today. All technologies
are supported, including bipolar, CMOS, BiCMOS,
MOS, ECL, and hybrids. All packages are supported,
including DIP, LCC, PGA, PLCC, QFP, SOIC, and
TSOP. All device families are supported, including
PLD, FPGA, EPROM, EEPROM, PROM, flash
EPROM, microcontrollers, and special function devices.
The BP-1200 directly supports many devices not fully
supported by competing programmers, including
high-pin-count PLDs, FPGAs, 4 and 5 ns bipolar PALs,
3.5ns CMOS PALs, microcontrollers (including
Motorola), NS AIM PALs, and ECL PALs. To see what
devices the BP-1200 supports, be sure to obtain the
current device list from BP Microsystems because it is
updated so often.
SOFTWARE FEATURES
Easy to use for both novices and experts, BP
Microsystems' highly acclaimed control software is
versatile, powerful, and intuitive. Some of its features
include a simple two-level menu structure, FI help at all
times, and automatic file loading, Automatic package
selection allows you to change the programming socket
without having to power down or change the software
configuration. since the entire software package consists
of a single .EXE file, companies with many users on a
network can upgrade quickly by replacing a single file.
The system is so easy to use that numerous first-time
users have reported programming their first chip within
five minutes of opening the shipping carton.
Socket modules are interchangeable to allow
switching between device package types. A 48-pin DIP
socket is standard; other types of sockets are optional. A
universal PLCC socket supports all 20- to 84-pin PLCC
devices using either particle interconnect technology or
long metal spring contacts. Standard test sockets are also
available for LCC, PGA, PLCC, QFP, SOIC, and TSOP.
FUTURE DEVICES
For many people, the most valuable feature a
programmer can have is its ability to support the newest
devices. The BP-1200 has an innovative new design
intended for tomorrow's fastest CMOS technology so it
wm give high programming yields and proper test
results even as semiconductor makers push the limits of
silicon and packaging technology. The BP-1200
improves your competitiveness by letting you take
advantage of new devices as soon as they become
available, giving you access to the fastest, densest, and
cheapest devices. The BP-1200 is the first programmer
that is expandable to program and test devices with up
to 240 pins. Only with a true high~pin-count
programmer will you be able to fully test these advanced
devices in order to verify your design and identify
defects such as ESD damage or bent leads before
soldering the part into a board. The BP-1200's capacity
can grow with your needs, unlike competing
programmers with no upgrade path beyond 84 pins.
Sophisticated functions are also easy to perform on
the BP-1200. You can program aPLCC part using a DIP
JEDEC file without changing the software
configuration. (It will automatically translate 24-pin DIP
vectors to 28-pin PLCC vectors or vice-versa.) Macros
can be recorded to eliminate operator errors or to
automate any sequence of commands, then played back
interactively or from the DOS command line (allowing
batch file or make file operation). Special chip
functions, such as encryption, programmable chip
enable polarity, etc. can be easily selected using the
Device/Configure command.
BP Microsystems has considered the requirements
of future devices, such as EPROMs beyond 64 megabits,
PLDs with JTAG testing, and devices that will be
The optional Advanced Feature Software takes the
BP-1200 a step beyond competing programmers by
672
Advancing the state of the art, the BP-1200 offers
the fastest programming times on most devices.
Programming small EPROMs and PALs in one or two
seconds may sound like a luxury, but when your designs
require large FPGAs and memories, you will appreciate
erasing and programming an 8 MB flash EPROM in
under two minutes. To achieve this level of
performance, the BP-1200 uses an 80286 CPU with a
proprietary hardware accelerator.
providing special features for production, QC, and
engineering. Included is the autohandler interface for
high-volume programming. Also, users can put serial
numbers or other information into EPROMs
automatically. Verify and functional test Vee voltages
can be set or swept to find device margins. Updates to
the Advanced Feature Software are available through a
support contract.
The BP-1200 connects to any PC's standard parallel
printer port so it is both portable and fast. Users on the
go may choose to use a notebook computer or just plug
into any available Pc. Since the programmer is
controlled directly by your PC, you can load files
directly from your hard disk or network in seconds,
eliminating the slow task of downloading your file to the
programmer before you can program. (To program the
8Mb EPROM mentioned above, most competing
programmers require a serial download because a floppy
will not hold the file. Their download times are at least 3
minutes at 115 Kbps or 36 minutes at 9600 bps.) Also,
the programmer utilizes your PC's memory, so you
won't have to buy expensive RAM upgrades for the
programmer.
HARDWARE FEATURES
The BP-1200's state-of-the-art performance is
based on solid modular hardware and innovative
techniques to provide the highest performance. The
BP-1200 can support up to 240 pin devices by using up
to 48 analog pin drivers that can generate accurate
waveforms to program virtually any device, plus 192
inexpensive digital pin drivers. This unique architecture
allows us to keep the price of the BP-1200 well below
the competition. the BP-1200 can be configured with 32,
40,48,84, 144, or 240 pin drivers, depending on your
needs. If you need to upgrade in the field, a screwdriver
is all that is required to install additional pin drivers.
673
very high, primarily because of the clean signals and
low ground bounce that this simple interface allows.
To help ensure reliable programming and the quick
diagnosis of problems, the BP-1200 automatically
performs many test and protection functions. When you
place a part in the socket, every pin is tested for proper
continuity. Any pin that is not connected is listed on the
screen so you can straighten bent pins easily. The
BP-1200 protects any device in the socket from damage
caused by a power failure. During operation, each pin
driver is continuously monitored and calibrated by a
special supervisory circuit. After programming, both
verify and test passes are performed at high and low
Vee to guarantee an operating margin. The built-in self
test will verify correct operation of the pin drivers,
power supply, CPU, memory, and communications.
If automating your EPROM programming sounds
enticing, the BP-1200 is just the programmer you need.
It can program many EPROMs in a few seconds,
making it more economical than dedicating an operator
to a gang programmer.
The supervisor/operator mode provides a simple
method to configure the programmer and let an operator
program or verify parts without the risk of inadvertently
modifying the data, loading the wrong file, or forgetting
to configure an option. A supervisor password permits
full access to the programmer's powerful software at
any time.
FUNCTIONAL TEST
SUPPORT
The BP-1200 was carefully designed to enable
trouble-free test vector operation. Ground bounce,
which limits many programmers' ability to test
high-speed parts and achieve high programming yields.
is carefully controlled on the BP-1200, improving both
test results and programming yields. Short DUT trace
lengths, excellent grounds at the socket, and fast rise and
fall times (1.5ns) allow programming and testing the
fastest CMOS parts without trouble. Since the device is
provided with uncompromised operating conditions at
all times, it is not necessary to have the plethora of
complicated software switches that competing
programmers require.
BP Microsystems, the second largest independent
maker of device programmers in the U.S., provides
support thatis second to none. We do everything we can
to keep your cost of ownership as low as possible by
providing free phone support and free software updates
and by continuing to support every programmer we have
ever made.
You can speak directly to a knowledgeable technician
at our factory by calling our technical support line
(toll-free within the U.S., 8 am-6 pm CST). Most
problems are solved with a single phone call and
perhaps a free software update. Outside the U.S., BP
Microsystems' local representatives also provide
technical support.
Testing asynchronous designs and synchronous
designs with multiple clocks is made possible by
switching multiple pins simultaneously. Unlike many
competing programmers, the BP-1200 can apply two
clocks or an entire test vector simultaneously,
eliminating a common source of confusion and errors.
Free software updates are available for the standard
software through our bulletin board system (BBS),
allowing you to program most new devices without any
further investment. The BBS is updated about every six
weeks for new device releases, and immediately for bug
fixes. All popular high speed modem standards are
supported up to 23,000 bps.
PRODUCTION
A support contract is also available .. The contract
provides a loaner unit, available to you overnight, and
pays for repairs to your programmer. Software updates
will also be mailed to you monthly, including updates to
the optional Advanced Feature Software.
The optional Advanced Feature Software includes
autohandler interface software, serialization capability,
supervisor/operator modes, and other features that make
production programming easy. Even without an
auto handler, large quantities of devices can be
programmed efficiently because of the BP-1200's high
speed and yields. Autohandler interfaces are available
for Exatron, MeT, and other handlers. Because of its
small size, the BP-1200 can be attached directly to the
handler's contactor without a cable or additional
interface card. Programming yields have proven to be
BP Microsystems' commitment to service is
unparalleled. We still support every programmer we
have ever made. We even add new devices and software
features to programmers that were discontinued years
ago and give away updates to these programmers. We
know that only a happy customer will be a repeat
customer.
674
COMPUTER
SPECI FICATIONS
Operating System: MSDOS or compatible (Windows
or OS/2 optional)
Port: parallel printer port (standard, bi-directional, or
enhanced)
Memory: 520K available minimum (EMS optional,
will improve performance on large files)
Disk: 1.2M or 1.44M floppy, hard disk or network
recommended
SOFTWARE
File Types: binary, Intel, JEDEC, Motorola, POF,
straight hex, hex-space, Tekhex, Extended Tekhex,
and others
File Size: limited by hard disk
Test Vectors: limited by hard disk
Device Commands: blank, check sum, compare,
options, program, test, verify
Features: data editor, revision history, session
logging, on-line help, device and algorithm
information
Installation: automatic (just copy the file to your hard
disk)
CPU:
8088 to Pentium
PROGRAMMING TIMES
27C64: 1.2s
27COIOA: 8.8s
GAL22VIOB: 2.5s (2.8s with 1000 vectors)
MACH230: 4.8s
MC68HC811E2: 29s
HARDWARE
Times are somewhat dependent on computer speed.
CPU: 80286, 16MHz, with proprietary hardware
accelerator
RAM: does not limit device or file size
Calibration: automatic self-calibration
Diagnostics: pin continuity test, RAM, ROM, CPU,
pin drivers, power supply, communications, cable,
calibration, timing, ADC, DAC
Communications: Centronicx parallel, up to 1Mbps
STANDARD ACCESSORIES
software disk including entire device library
user manual
power cable
data cable
SM48D (48 pin DIP socket module)
PIN DRIVERS
Analog & Digital: up to 48, located on 6 circuit boards
Digital: up to 192, located in small chassis on front of
BP-1200
Voltage: 0 - 25.00V, 25mV steps
Current: 0 -lA in 1mA steps
Slew rate: 0.001 to 2500V/!ls
Timing: Oils - Ills, ±llls, ±0.01 %
Clocks: 1MHz to 16MHz, any pin
Protection: overcurrent shutdown, power failure
shutdown
Independence: each analog pin may be set to a
different voltage
OPTIONS
Pin Drivers: 32, 40, 48, 84, 144, or 240
Socket Modules: Universal PLCC, standard PLCC,
PGA, QFP, SOIC, TSOP, LCC
Software: Advanced Feature Software
Support: service contract
Features and specifications subject to change without notice.
BP~
GENERAL
Size: 24cm Lx 17.5m D x 12.7cm H;
9.5" L x 7" D x 5" H
Mass: 2.7kg; 6lbs
Power: 90-260VAC, 47-63 Hz, 80 VA,
lEC inlet connector for worldwide use
Maintenance: none required
1000 North Post Oak Road, Suite 225
Houston, TX 77055-7237 /
Phone: (713)688-4600 or (800)225-2102
Fax: (713)688-0920
Internet: sales@bpmicro.com
675
BP-2100 Concurrent Programming System™
THE ULTIMATE PARALLEL PROGRAMMER
The BP-2100 Concurrent Programming System is the ultimate parallel device programmer, capable of concurrently
programming 4-16 complex devices. Because it is a concurrent programmer, the system starts programming each device
as soon as the device is inserted. When the last socket is filled, the first device will be complete and the process begins again,
keeping your operator or autohandler in perpetual motion. The programming electronics are based on our proven BP-1200
design, so programming is speedy, reliable, and independent on each socket.
The system supports over 7000 devices including the ability to vector test the latest high pin count FPGAs. Being a true
universal programmer, you can program virtually any device that fits in the sockets you own. For example, the universal
PLCC socket supports over 2500 different devices, unlike the expensive family-specific socket rails used by conventional
parallel programmers. The control software is updated eight times per year to provide you with the latest device support.
The BP-21 00 has many features to meet the requirements of real-world production facilities. The BP-21 OO's fault tolerant
architecture allow the system to continue production even if one of the sockets or boards should fail. Depending on your
needs, the system can be used manually, or automated with an advanced autohandlerllaser marker capable of handling fine
pitch SMDs tray-to-tray. Design files and job statistics can be stored on a file server to meet your document control and
SPC requirements. The BP-2100 is the first programmer c~pable of programming hundreds of thousands of fine-pitch
SMDs, FPGAs, CPLDs, flash memories, and complex microcontrollers month after month.
• Supports over 7000 devices -
many times more than any other parallel programmer
• Supports DIP, PLCC, QFP, PGA, SOIC, TSOP, LCC, SDIP, PCMCIA, and SIMM devices
• Over fifty socket configurations available today
• A single Universal PLCC socket supports over
2500 devices
• Full vector test and continuity test up to 240 pins
• Programs 600+/hour Altera CPLDs, Motorola
and Microchip microcontrollers, and Intel and
AMD flash memories
• LAN connection possible
• More cost effective than other solutions
• Can program 200,000 parts/month
• Fully automated solution available to minimize device handling
• Manual solution available to minimize investment
BP MICROSYSTEMS
676
Operator Mode: the software may be configured to
allow only loading jobs to help eliminate the
possibility of an inadvertent setup mistake
Job loading: a user defined job may be chosen from a
list of user-defined part numbers
File loading: automatic file type identification; no
download time because programmer is PC controlled;
supports Intel, JEDEC, Motorola S-record, POF,
straight hex, hex-space, Tekhex, and other file
formats
Device Selection: intelligent device selector allows
you to type as little Or as much of the part number as
you like then choose from a list of devices matching
your description
Algorithms: only manufacturer approved or certified
algorithms are used; BP Microsystems has an
excellent record of being first to provide certified
algorithms for new devices. Custom algorithms are
available at additional costs.
Algorithm Updates: algorithm changes and algorithm
updates are available free of charge. Additional
algorithms available by subscription
Programming Yield: assured by independent
universal pin drivers on each socket, short distance
from pin drivers to device, and accuracy of
waveforms
Devices Supported: PROM, EPROM, EEPROM,
Flash EEPROM, microcontrollers, SPLD, CPLD,
FPGA
SPECI FICATIONS
SOFTWARE
File Types: binary, Intel, JEDEC, Motorola, POP,
straight hex, hex-space, Tekhex, Extended Tekhex,
and others
Device Commands: blank, check sum, compare,
options, program, test, verify
Features: data editor, revision history, session
logging, on-line help, device and algorithm
information
HARDWARE
Included System Controller: 340 MB Hard Drive,
486 CPU, VGA monitor, keyboard
Calibration: automatic self-calibration
Diagnostics: pin continuity test, RAM, ROM, CPU,
pin drivers, power supply, communications, cable,
calibration, timing, ADC, DAC
Memory: up to 264 MB DRAM (really!)
Pin Controllers: up to 16 80286 CPUs
Programming Sockets: 4,6,8,12, or 16
User Interface: 3 LEDs (pass, fail, active) and
1 start switch per socket
PIN DRIVERS
Quantity: 84 or 240 per socket, up to 3840
Voltage: 0 - 25.00V in 25m V steps
Current: 0 - lA in ImA steps
Slew rate: 0.001 to 2500V/j..I.s
Timing: Ij..l.s - Is, +lj..1.s, +0.01 %
Clocks: IMHz to 16MHz, any pin
Protection: overcurrent shutdown, power failure
shutdown
Independence: pin drivers and waveform generators
are fully independent and concurrent on each socket
Test Vectors: supported on PLDs up to 240 pins
Continuity Test: each pin, including Vee, ground,
and signal pins, may be tested before every
programming operation
Protection: overcurrent shutdown; power failure
shutdown; ESD protection, reverse insertion, banana
jack for ESD wrist straps
Options: Available Socket Modules include Universal
PLCC, standard PLCC, PGA, SOIC, QFP, TSOP,
LCC, SDIP, PCMCIA, SIMM. System is upgradeable
to add additional sockets
GENERAL
Power: 90-260VAC, 47-63 Hz, 1.2 KVA,
IEC inlet connector for worldwide use
Mass: up to 90 lbs. (40 kg)
Maintenance: replace work sockets as required
Features and specifications subject to change without notice.
BP~
STANDARD ACCESSORIES
1000 North Post Oak Road, Suite 225
Houston, TX 77055-7237
Phone: (713)688-4600 or (800)225-2102
Fax: (713)688-0920
Internet: sales@bpmicro.com
software disk
user manual
power cable
data cable
48 pin DIP socket module
677
BP-4100 Automated Programming System
The First Universal Automated Programming System
• Tube-to-tube or tray-to-tray operation
• Programs and marks in a single operation
• Throughput of up to 1440 devices per hour
• Programs Flash memories, FPGAs, CPLDs, and microcontrollers
• Handles PLCC, SOlC, TSOP and fine pitch QFP to 208 pins
• Leads touched only once during programming and marking
• Vision centering compensates for component variation
• Accurate placement virtually eliminates component lead damage
• Glass encoder scales guarantee accuracy even after millions of cycles
• Software setup reduces changeover time
• Very few moving parts for high reliability
The BP-4100 meets the rigorous demands of real-world programming centers with state-of-the-art performance and field-proven
technology. The BP-41 00 is the first automated programming system capable of programming fine pitch (20 mil or 0.5 mm) QFP and
TSOP surface-mount programmable integrated circuits including Flash memories, antifuse FPGAs, CPLDs, and microcontrollers.
The BP-4100's throughput, accuracy, and flexibility make the system more economical to operate than either conventional
autohandlers or manual gang programmers. Service, training, and upgrades are available from over twenty field service locations
worldwide. BP Microsystems stands behind every BP-4100 with unparalleled support.
BP MICROSYSTEMS
678
PROGRAMMING SYSTEM
SPECI FICATIONS
Architecture: Concurrent Programming System with
independent universal programmer at each site
Devices Supported: PROM, EPROM, EEPROM, flash
EEPROM, microcontrollers, SPLD, CPLD, FPGA
Technologies Supported: TTL, CMOS, ECL, BiCMOS,
Flash, EPROM, EEPROM, fuse, anti-fuse, (including
FPGAs)
Included System Controller: 340 MB Hard Drive, 486 CPU,
VGA monitor, keyboard
Calibration: automatic self-calibration
Diagnostics: pin continuity test, RAM, ROM, CPU, pin
drivers, power supply, communications. cable, calibration,
timing, ADC, DAC. actuator, leakage current
Memory: up to 181 MB DRAM (5I2KB to 16.5 MB per site)
Pin Controllers: one 80286 CPU with hardware accelerator
per site
Programming sites: up to 11
Pin Drivers: 84 or 240 per socket, up to 2640 total
Independence: pin drivers and waveform generators are fully
independent and concurrent on each site
File Type: binary, Intel, JEDEC, Motorola, POF, straight hex,
hex-space. TEKHEX. Extended Tekhex. and others
Device Commands: blank check sum, compare, options,
program, test, verify
Features: graphic display of job status, 10bMaster control
software. data editor, revision history, session logging,
on-line help, device and algorithm information
PICK AND PLACE SYSTEM
Maximum Programming Rate: 1440 CPH
Component Processing Range: 8-pin SOIC to 208-pin QFP
Placement Accuracy: ±O.0024" (0.06mm)
Placement Repeatability: ±0.0012" (O.03mm)
Placement Force: 0-600 grams positional control
Dimensions: length 42" (106.6cm), width with laser 63"
(l60.2cm), width without laser 42" (l06.6cm), and height
with light tower 72" (l82.8cm)
Shipping Dimensions: length 48" (l22cm), width 48"
(122cm), and height 69" (175cm)
Shipping Weight: 1700 lbs. (771 kg)
POSITIONING SYSTEM
x-v Drive System: high-performance stepper motor-driven
precision belt
X-Y Encoder Type: linear glass scale
X-V Axis Resolution: 0.0005" (0.OI27mm)
X-V Axis Repeatability: ±O.OOI" (O.025mm)
X-V Accuracy: ±O.00I5" (O.038mm)
X-V Axis Maximum Velocity: 80 in/sec (203.2cmls)
X Axis Acceleration: 48.3 ftls/s (14.7 mls/s)
Y Axis Acceleration: 32.2 ftls/s (9.8 mls/s)
Z Drive System: high-performance stepper motor-driven ball
spline
Z Axis Resolution: ±O.OO I" (0.025mm)
Z Axis Repeatability: ±0.00I5" (O.038mm)
Theta Drive System: precision stepper motor-driven
anti-backlash twin gear assembly
Theta Axis Resolution: 0.015°
Theta Axis Repeatability: ±O.02°
BP-4100 Throughput
Programming Time
SYSTEM REQUIREMENTS
VISION SYSTEMS
Air Pressure: 80 psi (5.56 bars)
Air Flow: 8.1 SCFM (203 lImin)
Operational Temperature Range: 55° to 90°F (13°-32°C)
Relative Humidity: 30 - 90%
Floor Space: length 60" (152.4cm) and width 75" (190.5cm)
Input Line Voltage: 100-240 VAC
Input Line Frequency: 50/60 Hz
Power Consumption: 2.4 KVA
On-the-fly Component Centering System: Standard
LaserAlign
Type: side illuminated profile measurement
Field of View: 1.1"
Minimum Lead Pitch: 0.025" (O.635mm)
Downward Vision System: Standard Vu3
Lighting Type: LED array
Light Level Adjust: automatic software control
Upward Vision System: Optional Vu6
Processing Type: ICOS MVS 256 gray level pattern
recognition system
Lighting type: LED array
Light Level Adjust: automatic software control
Optics Type: Telecentric
Field of View: IS' (38.1 mm)
Multiple Field of View: Standard (components larger than
1.3" [33mmD
Processing Time Per View; 1-3 seconds typical
Features and specifications subject to change without notice.
BP~
1000 North Post Oak Road, Suite 225
Houston, TX 77055-7237
Phone: (713 )688-4600 or (800)225-2102
Fax: (713)688-0920
Internet: sales@bpmicro.com
679
BSO/TASKING
I
Total Development Solution for
the Philips 51XA Architecture
Introduction
• C level access to the special function registers
The 51XA software development toolset is the first
professional and state-of-the-art XA programming package
available on numerous host platforms. The toolset consists
of:
• C compiler (ANSI-C)
• Built-in function expansion capability for efficient use
of certain XA instructions
• Generates flow-graph information for overlaying
linker
• Complete ANSI-C libraries in source and runtime
libraries tuned for the 51XA
• Assembler and Macro-preprocessor
• LinkerlLocator with BSOITASKING's unique
architecture description language
• CrossView Debugger (Windows and text style)
The CrossView Debugger
Cross View is our high level language debugger designed to
deliver functionality that will reduce the time spent testing
and debugging. It combines the flexibility of the C language
with the control of code execution found in assembly
language debugging. Cross View brings the full power of
Microsoft and X Windows to the debugging environment by
displaying and updating the most critical execution data in
an organized way.
The 51 XA Toolset
The BSOITASKING software development toolset for the
Philips 51XA provides a complete and cost effective
solution for programming all variants of the 51XA family of
microcontrollers.
The C Compiler
The XA compiler is designed and build specifically for the
51XA microcontroller family. this means you get a very
efficient compiler that takes full advantage of the
microcontroller's architecture without violating the ANSI
standard:
Simulator
The simulator environment allows you to test, debug and
monitor the performance of code in a known and repeatable
environment independent of target hardware. All Cross View
features are available to you, so you can test code before
target hardware is available.
• Bit addressable memory
• Full ANSI C compiler to ensure early error detection
• All members ofthe 51XA architecture supported
Migration from 8051 to XA
• Extensive optimization for very efficient code
One of the key features of the toolset is easy migration from
8051 to XA. Migration features of the BSOITASKING
toolset include:
• Easy C51 source migration from 8051 to XA
• Supports various memory models for optimal code
generation characteristics
• Most 8051 specific features are supported
• Interrupt functions in C
• Tested with8051 and XA test suites
• Different pointer sizes for better code density and
higher execution speed
• Extensive migration guidelines in documentation
• In-line assembly
• Special utility to convert existing BSO/TASKING
LINK51 control files
• IEEE754 single and double precision floating point
• Compatibility mode supported in Assembler
680
Code wright lets you
define project
environments with a set
of commands (compile,
assemble, make, debug,
etc.) for each type of file or project; so the files associated
with your 51XA project will automatically use the
BSOffASKING tools (compiler, assembler, make,
debugger, etc.). Codewright understands the error messages
generated by the compiler and assembler, and shows you
where the errors are, so you can fix them quickly.
Interfacing to Version Control is easy. Codewright has an
interface for checking in your changes, checking out a file
for review or locking a revision you plan to change. You can
use the default commands, specify your own, or use the
interface to PVCS® we provide.
Cooperation with 3rd Parties
Working with other suppliers of products for the 51XA
gives us the opportunity to improve the tools that we
deliver. We cooperate with different hardware
manufacturers for Emulators and evaluation boards, and
with software manufacturers for Real Time Kernels, Device
Drivers and Code Generation tools. Our extensive
cooperation ensures you have access to the tools you need
to be most productive.
Availability
the 51XA development tools will be available on:
PC
SUN SPARC
HP9000
DEC Alpha
The Programming Environment EDETM
EDE BSOffASKING's Embedded Development
Environment is a package of program building, editing,
code generation and debugging tools that provides:
• Accessible push-button control over a variety of
development tasks spread over many tools
• Tight integration of tools enabling a rapid
edit-compile-debug process that leads to higher
productivity by automating repetitive tasks.
Customer Support
Purchasing BSOffASKING products marks the beginning
of a long term relationship. We are dedicated to providing
quality products and support worldwide. This support
includes program quality control, product update service
and support personnel to answer questions by telephone, fax
or email. A 90 day maintenance plan is included with the
purchase of BSO/TASKING products and entitles the
customer to enhancements and improvements as well as
individual response to problems. Annual maintenance
contracts are available at the end of the 90 day maintenance
plan. This extremely valuable service, in return for a small
annual fee, provides the user with all program
enhancements released during the period of the program
maintenance agreement, and assures response to all problem
reports submitted by the user.
To achieve all this, we have
integrated Codewright™
from Premia®, in EDE.
Code wright is the leading
professional editor and
blends a command shell
with powerful productivity
tools and MS-Windows™ resources. EDE also includes the
following components:
You can reach us on CompuServe: GO TASKING
or contact us at:
BSOffASKING US
1 800 458 8276
TASKING Netherlands
+31 334558584
TASKING Germany
+49 7152 22090
TASKING Italy
+ 39 2 6698 2207
Nihon TASKING Japan +81 353890721
BSOffASKING UK
+44 1252510014
• C Interface Generator
•
•
•
•
Make
Librarian
Object code report writer
Cross reference report writer
• Formatters
• Converters
Products listed are the trademarks of their respective holders.
BSOfTASKING retains the right to make changes to the specification at any time without
notice. Contact your local sales office to obtain the latest information.
BSOfTASKING assumes no responsibility for any errors which may appear in this
document.
© 1996. TASKING Software BV
January 30,1996
Code wright is more than a language sensitive editor, it is a
complete environment which gives you direct access to the
tools and features you need to be your most productive.
681
In-Circuit Emulator for Philips XA Microcontrollers
FEATURES
• Real-Time and Transparent In-Circuit Emulator
• Hardware and Conditional Breakpoints
• 3.3V and 5V Microcontroller Emulation
• Source Level Debugger for Assembler and C
• Maximum Frequency of 30MHz
• On-line Assembler and Disassembler
• 32K to 1 M of Internal Memory
• MS-Windows Debugger
• 32K to 128K Trace Memory and Logic Analyzer
• Serially linked to IBM PC at 115 KBaud
682
CEIBO DS-XA In-Circuit Emulator
DESCRIPTION
Ceibo DS-XA is a real-time in-circuit emulator dedicated to the Philips XA family of microcontrollers. It is
serially linked to a PC or compatible host at 115 KBaud and carries out a transparent emulation on the
target microcontroller. DS-XA supports the low-voltage and 5 Volt XA derivatives. The emulator uses
Philips' bond-out emulation technology. Its software includes Source Level Debugger for Assembler and
C, Performance Analyzer, On-line Assembler and Disassembler, Conditional Breakpoints, a Software
Simulator and many other features. The Debugger runs under MS-Windows and supports full C and
Assembler expression evaluation. DS-XA accepts files generated by Ceibo PantaSoft C-Compiler and
Assembler and other available compilers with IEEE-695 format. From your Assembler or C Source Code
Screen you can run the program in real-time, specify a breakpoint, redefine the Program Counter,
execute a line step or an assembly instruction, open a watch window to display variables, display the
trace memory, registers and data. The number of windows that may be displayed is not limited. Systems
are supplied with 32K to 1 MBytes of Internal Memory with mapping capabilities, Hardware Breakpoints,
32K to 128K Real-Time Trace Memory and Logic Analyzer with external test points, and Personality
Probe for P51 XAG3 microcontrollers. DS-XA emulates every XA derivative in the complete voltage and
frequency range specified by the microcontroller. The minimum frequency is determined by the emulated
chip characteristics, while maximum frequency is up to 30M Hz.
SPECIFICATIONS
Emulation Memory
DS-XA provides 32 KBytes to 1 MByte of internal memory with software mapping capabilities.
Hardware Breakpoints
Breakpoints allow real-time program execution until an opcode is executed at a specified address.
Breakpoints on data read or write and an AND/OR combination of two external signals are also
implemented.
Conditional Breakpoints
A complete set of conditional breakpoints permit halting program emulation on code addresses, source
code lines, access to external and on-chip memory, port and register contents.
Software Analyzer
A 64 KByte buffer is used to record any software and hardware events of your program, such as
executed code, memory accesses, port and internal register states, external or on-Chip data memory
contents and more.
Languages and File Formats
DS-XA accepts files with IEEE-695 and Intel Hex format. Assemblers and high-level languages such as
Ceibo PantaSoft ASM-XA and C-XA are fully supported.
683
CEIBO DS-XA In-Circuit Emulator
Source Level Debugger
Ceibo Debug-XA Windows Debugger is a complete Source Level Debugger that includes commands
which allow the user to get all the information necessary for testing the programs and hardware in
real-time. The commands permit setting breakpoints on high-level language lines, adding a watch
window with the symbols and variables of interest, modifying variables, displaying floating point values,
showing the trace buffer, executing assembly steps and many more useful functions.
Personality Probes
DS-XAuses Philips' bond-out microcontrollers for hardware and software emulation. The selection of a
different XA derivative is made by replacing the probe or changing the software'setup. The Personality
Probes run at the frequency of the crystal on them or from the clock source supplied by the user
hardware. Therefore, the same probe may be adapted to your frequency requirements. The minimum
and maximum frequencies are determined by the emulated chip characteristics, while the emulator
maximum frequency is 30MHz.
Trace and Logic Analyzer
The 32 KByte to 128 KByte Trace Memory is used to record the microprocessor activities. Eight lines are
user selectable test points. Trigger inputs and conditions are available for starting and stopping the trace
recording. The trace buffer can be viewed in disassembled instructions or high level language lines
embedded with the related instructions.
Performance Analyzer
This useful function checks the trace buffer and provides time statistics on modules and procedures as a
percentage of the total execution time.
Host Characteristics
IBM PC or compatible systems with 2 MBytes of RAM and one RS-232 Port.
Input Power
SVDC/1.SA.
Mechanical Dimensions
26mm x 151mm x 195mm (1" x 6" x 7").
Items Supplied as Standard
In-Circuit Emulator with 32 KBytes of Internal Memory. Personality Probe for P51 XAG3. 32 KByte Trace
Memory. Ceibo Debug-XA for Windows. User's Manual. RS-232 cable. Power Supply.
Options
1 MByte of Internal Memory. 128K Trace Memory. Personality Probes and adapters for different
microcontrollers and packages.
684
CEIBO DS-XA In-Circuit Emulator
WARRANTY
TWO-YEAR WARRANTY ON ALL CEIBO PRODUCTS.
ADDRESSES
For more information, contact us today:
Toll free: (U.S.A. and Canada) 1-800-833-4084
Email: 100274.2131@compuserve.com
Compuserve: 100274,2131
Internet: ceibo@trendline.co.il
CEIBO USA
CEIBO DEUTSCHLAND
CEIBO ISRAEL
TEL: 314-830-4084
FAX: 314-830-4083
7 Edgestone Court
Florissant, MO 63033
TEL: 06155-61005
FAX: 06155-61009
Hausweg 1a
0-64347 Griesheim
TEL: 972-9-555387
FAX: 972-9-553297
32 Maskit St.
46120 Herzelia
Brazil
Tel: 453-5588
Fax: 441-5563
India
Tel: 91-80-3323029
Fax: 91-80-3325615
Spain
Tel: 91-5477006
Fax: 91-5478226
Belgium
Tel: 32-3-2327295
Fax: 32-3-2324116
Italy
South Africa
Tel: 27-11-8877879
Fax: 27-11-8872051
Colombia
Tel: 345-8713
Fax: 57-1-3458712
Korea
Tel: 822-783-8655
Fax: 822-783-8653
Sweden
Tel: 0589-19250
Fax: 0589-16153
Denmark
Tel: 45-44-538444
Fax: 45-44-539444
Norway
Tel: 053-763000
Fax: 053-765339
Taiwan
Tel: 886-2-9160977
Fax: 886-2-9126641
France
Tel: 1-30660136
Fax: 1-34820039
Poland
Tel: 022-7556983
Fax: 022-7555878
Thailand
Tel: 662-472-1976
Fax: 662-466-5227
Holland
Tel: 05357-33333
Fax: 05357-33240
Singapore
Tel: 65-7446873
Fax: 65-7445971
United Kingdom
Tel: 01332-332651
Fax: 01332-360922
Tel: 051-727252
Fax: 051-727151
Ordering Information
Part No.: Call (800) 833-4084
Product and Company names are trademarks of their respective organizations.
685
Software Tools for Philips XA Microcontrollers
FEATURES
• ANSI Standard C Cross Compiler
• Extended Keywords Specific to the XA
• XA Macro Assembler
• Full Floating Point Support
• XA Lauker and Locator
• Direct C Interrupt Handling
• C Source-Level-Simulator/Debugger
• Built-In C and Assembler Optimizer
• Full MS-Windows Interface
• Direct Interface to In-Circuit Emulator
686
CEIBO XA Software Tools
PANTASOFT C-XA - COMPILER
C-XA is an ANSI C compiler with extensions designed to support XA special features. The compiler is
compatible with other ANSI C compilers. C-XA Compiler is designed to make the code faster and more
compact by using the special chip features. C-XA can support multi-tasking programs.
C-XA special features permit the user direct access from C source to the XA chip. The features also
include direct access to the interrupt mechanism, as well as access to the XA SFRs as variables.
C-XA supports 9 different data types including floating point variables, and bit variables. The C compiler
comes with a variety of the most frequently used C Library functions associated with embedded systems.
Some of the low-level functions, like those which handle I/O, are provided with source code. The
Compiler may be used with in-line assembler instructions for direct access to XA resources. A six-level
optimizer is also available to achieve the best results.
II
687
CEIBO XA Software Tools
PANTASOFT ASM-XA MACRO ASSEMBLER
The ASM-XA Macro Assembler translates an XA Macro Assembly Language program into relocatable
object code. The Macro Assembler includes commands and directives specially designed to fit the XA
architecture.
ASM-XA processes the input file and executes macro definitions, assembly directives and commands.
The Macro Assembler provides the user with a spectrum of options ranging from test repetition to
conditional assembly.
The object code generated by the Assembler includes information about the symbols and lines used in
the source file. It has been specially designed to facilitate easy translation of code from the 8051
Assembler. ASM-XA is integrated into a modern graphic interface, which paves the way to invoke tasks
desired for a complete development environment.
688
CEIBO XA Software Tools
PANTASOFT LlNK-XA LINKER
UNK-XA Linker supports complete linkage, relocation and format generation for producing absolute
object code. UNK-XA accesses only the requested modules in the library and combines them in the
absolute object code. The PUS Librarian utility maintains the libraries.
The Linker can combine object files created by the C-XA Compiler and ASM-XA Macro Assembler into
one absolute file, as well as find the necessary objects from libraries created by the PUS Librarian.
UNK-XA can create the absolute file in several output formats, including Intel HEX and IEEE-695.
The Linker generates a detailed map file including information about the location of segments and
symbols.
689
CEIBO XA Software Tools
DEBUG-XA DEBUGGER
DEBUG-XA is a Source-Level Debugger/Simulator for the XA architecture. The program enables fast and
reliable debugging at source-level for C-XA and ASM-XA.
The Simulator/Debugger for the C-XA compiler is fully source-level and controls the program flow in HLL
or Assembler. The debugger operates with or without an in-circuit emulator. The user can inspect
variables using the watch window and set breakpoints in the source code.
DEBUG-XA also includes an on-line assembler which the user can invoke to change the executable code
during the debugging session.
DEBUG-XA is wholly based on a Windows platform, so it may be used in a multi-tasking and
multi-window application.
690
CEIBO XA Software Tools
CUSTOMER SUPPORT
A two-year maintenance plan is included with the purchase of Ceibo XA software products and entitles
the customer to enhancements and improvements as well as individual response to problems.
ADDRESSES
For more information, contact us today:
Toll free: (U.S.A. and Canada) 1-800-833-4084
Email: 100274.2131@compuserve.com
Compuserve: 100274,2131
Internet: ceibo@trendline.co.il
CEIBO USA
CEIBO DEUTSCHLAND
CEIBO ISRAEL
TEL: 314-830-4084
FAX: 314-830-4083
7 Edgestone Court
Florissant, MO 63033
TEL: 06155-61005
FAX: 06155-61009
Hausweg 1a
D-64347 Griesheim
TEL: 972-9-555387
FAX: 972-9-553297
32 Maskit St.
46120 Herzelia
Brazil
Tel: 453-5588
Fax: 441-5563
India
Tel: 91-80-3323029
Fax: 91-80-3325615
Spain
Tel: 91-5477006
Fax: 91-5478226
Belgium
Tel: 32-3-2327295
Fax: 32-3-2324116
Italy
South Africa
Tel: 27-11-8877879
Fax: 27-11-8872051
Colombia
Tel: 345-8713
Fax: 57-1-3458712
Korea
Tel: 822-783-8655
Fax: 822-783-8653
Sweden
Tel: 0589-19250
Fax: 0589-16153
Denmark
Tel: 45-44-538444
Fax: 45-44-539444
Norway
Tel: 053-763000
Fax: 053-765339
Taiwan
Tel: 886-2-9160977
Fax: 886-2-9126641
France
Tel: 1-30660136
Fax: 1-34820039
Poland
Tel: 022-7556983
Fax: 022-7555878
Thailand
Tel: 662-472-1976
Fax: 662-466-5227
Holland
Tel: 05357-33333
Fax: 05357-33240
Singapore
Tel: 65-7446873
Fax: 65-7445971
United Kingdom
Tel: 01332-332651
Fax: 01332-360922
Tel: 051-727252
Fax: 051-727151
Ordering Information
Part No.: Call (800) 833-4084
Product and Company names are trademarks of their respective organizations.
691
CMX COMPANY
CMX-RTXTM, CMX-TINY+TM, CMX-TINyTM
Real-Time Multi-Tasking
Operating System for
Microprocessors and
Microcomputers
•
No royalties on embedded code
•
All source code supplied
•
Extremely fast context switch times
•
Very low interrupt latency times
•
Several "C" vendors supported
•
Scheduler and interrupt handler written in
assembly for speed and optimization
•
All CMX functions contained in library
•
User configurable
•
Task management
•
Event management
•
Timer management
•
Message management
•
Circular queue management
•
Resource management
•
Fixed block memory management
•
Specialized U ART management
•
Automatic power down management
•
Full pre-emption and ability to also have
cooperative and time slice scheduling
.1."
Most
8/16/32 bit
Embedded
Microcomputers
and Microprocessors
Supported
Product Information
The CMX-RTXTM Real-time multi-tasking operating
system is a ''full featured" powerful kernel, which provides
the user with a rich set of functions. Over 65 functions are
available to the user. CMX allows nested interrupts, with the
ability of interrupts to use many of the CMX functions. True
pre-emptive scheduling is provided. Both the ROM and RAM
sizes needed by the CMX-RTX RTOS are very small. Join
companies using CMX such as HP, Xerox, Ford Motor Co.,
AT&T, Kenwood Corp., Optimay, Temic Telefunken, Philips,
Ericsson and many more, to see how CMX can enhance
your embedded design.
The CMXBug™ debugger, which is included for FREE
with CMX-RTX, provides the user the ability to view and
modify different aspects of the CMX multi-tasking operating
system environment, while the user's application code is
running.
CMXTracker™ add on module for CMX-RTX allows
the user the ability to log chronologically in real-time, the
tasks' execution flow, capturing when a task is executing,
the CMX functions called and their parameters, interrupts
using CMX functions and the CMX system TICK within the
CMX-RTX environment, while the user's application code is
running.
CMX is also a distributor of C compilers for
many microcomputers and microprocessors.
Contact Information
CMXCompany
5 Grant st. Ste. C
Framingham, MA 01701
Tel: (508) 872-7675
Fax: (508) 620-6828
E-mail: cmx@cmx.com
WWW: http://www.cmx.com
CMX
COMPANY
692
CMX
COMPANY
5 Grant Street. Suite C • Framingham, MA 01701 USA
Phone: (508) 872-7675 • Fax: (508) 620-6828 • Email: cmx@cmx.com
The CMX-TINy+TM RTOS Kernel
The CMX-TINY+ Real-Time Multi-Tasking Operating System is a "Tiny Plus" kernel for those processors that have
a fair amount of RAM, embedded on the processor's silicon (approximately 648 bytes and up). This allows the user
to develop their application code and have it run under a RTOS, using just the RAM that the processor provides. The
CMX-TINY + does NOT need any external RAM, regardless of whether the processor can support the use of external
RAM or not. The code size of the CMX-TINY+ is also very small, thus allowing the processor's on-board ROM, to
support both the user application code and the CMX-TINY+ code in most cases. This kernel, based on a scaled down
CMX CMX-RTXTM, retains the most frequently used functions and associated functionality. The CMX-TINY + will
become available to most processors that have this type of architecture. True preemptive scheduling is provided, with
cooperative scheduling also available, if needed.
CMX-TINY + Functions
TASK MANAGEMENT
TIMER MANAGEMENT
*'
*'
*'
*'
*'
*'
*'
*'
*'
*'
*'
*'
*'
*'
*'
*'
*'
*'
*
Create a task.
Start a task.
Wake a task.
Remove a task.
End a task.
Change a task's priority.
Remove a task and create a new task.
Remove a task, create and start a new task.
Suspend a task, with time out provision.
Terminate a task early.
Do a cooperative scheduling.
Raise the privilege.
*- Lower the privilege.
Create a cyclic timer.
Start a cyclic timer.
Stop a cyclic timer.
Restart a cyclic timer.
Change a cyclic timer event parameters.
Restart a cyclic timer, with new initial time period.
Restart a cyclic timer, with new cyclic time period.
MESSAGE MANAGEMENT
*'
*'
*'
*'
Task may get a message.
Task may send a message, with time out provision.
Task may wait for message, with time out provision.
Change a mailbox event parameters.
EVENT MANAGEMENT
*
*
*
SYSTEM MANAGEMENT
Set an event.
Reset an event.
Task may wait for event, with time our provision.
*'
*
*'
*'
*
*
*'
RESOURCE MANAGEMENT
*'
*'
*'
Task may get a resource.
Task may release a resource.
Task may reserve a resource, with timeout provision.
Initialize CMX.
EnterCMX.
Enter CMX interrupt handler.
Exit CMX interrupt handler.
Enable interrupts.
Disable interrupts.
Automatic low power mode.
Very fast CONTEXT SWITCH times and Low ROMIRAM requirements.
All SOURCE CODE supplied and NO ROYALTIES.
Call or fax, for pricing, supported processors and with any questions that you may have. CMX will be constantly adding new processors and
"c" vendors that the CMX -TINY + RTOS will support. Please let us know what processor you may be working with, that would benefit from
the use of the true preemptive CMX-TINY + RTOS.
3/15/95 - Content subject to change without notice.
693
CMX
COMPANY
5 Grant Street. Suite C • Framingham, MA 01701 USA
Phone: (508) 872·7675 • Fax: (508) 620-6828 • Email: cmx@cmx.com
CMX PCProto-RTXTM
The CMX PCProto-RTXTM Real-Time Multi-Tasking Operating Systemis basically the CMX·RTXTM RTOS ported
specifically to work with the PC and its environment. This allows any 80x86 based PC to be used as a development
platform, regardless of their target processor.
PCProto·RTX allows the user to write, develop and test
their application code using the sophisticated and
enhanced tools that are available for the PC, such as the
tools offered by Borland and Microsoft. Because many
programmers are familiar with and have used the PC,
this allows them to get their application code up and
running faster than possibly working with the target
cross compiler and processor. Also, the enhanced
capabilities that the PC tools provide are usmi.lly better
than the tools tha,t are available for the target processor.
All features that are supplied with 'CMX·RTX are included within the PCProto·RTX. The functions allow the user
to control task scheduling, task management, timer management, event management, message management, memory
management, resource and semaphore management, queue management, system management and DART
management.
CMX allows nested interrupts, with the ability of an interrupts to use some of the CMX functions. True preemptive
scheduling is provided, with cooperative scheduling and timeslicing available, if needed. Both tasks and interrupts,
can cause a context switch, thus allowing a higher priority task that is able to run, to immediately become the running
task.
All source code is included. Call, Fax, or Email us with any additional questions that you may have.
3/15/95 - Content subject to change without notice.
694
CMX
COMPANY
5 Grant Street. Suite C • Framingham, MA 01701 USA
Phone: (508) 872-7675 • Fax: (508) 620-6828 • Email: cmx@cmx.com
The CMXTracker™
The CMX CMXTracker™ provides the user the ability to log chronologically in real-time, the tasks' execution flow,
capturing when a task is executing, the CMX functions called and their parameters, interrupts using CMX functions
and the CMX system TICK within the CMX-RTXTM real-time multitasking operating system environment, while the
user's application code is running. Displaying of the log is performed by CMXTracker, which runs as a task, usually
being the highest priority task. In most cases, one of the target processor UART channel(s) is used as the input/output
device. A simple terminal or CPU with a keyboard is all that is required to use CMXTracker.
When the user enables the CMXTracker task, it will send a menu to the screen. The user may then select one of many
prompts, allowing the user to view the chronologically ordered log, reset the log, resume running of application code
and possibly change some aspects of the log, such as "autowake" CMXTracker after a certain number of entries. When
the CMXTracker task is running, it prohibits other tasks from running, stopping the task timers and cyclic timers and
also disables interrupts from calling the CMX functions, so as the application code will "freeze" within the CMX RTOS
environment.
CMXTracker allows the user to view the log at the
beginning or end, paging down or up, viewing the
exact execution of the tasks. Also what CMX
functions were called with their parameters and
results returned (such as the message sent or recei ved,
event bits set, timed out, etc.) and interrupts, with the
CMX system TICK being a "timeline" stamp.
CMXTracker allows the user to "single step" one
system TICK, thus allowing normal activity to occur
for one system TICK, with CMXTracker resuming
after this "single step". The user can also set the
desired number of system TICKS that CMXTracker
will wait, allowing normal activity, before it ag'ain
resumes. This is a very powerful and helpful feature.
CMXTracker is now available for use with the CMX CMX-RTXTM package, for most processors and vendors that
CMX supports. All source code is included.
Call, Fax, or Email us with any additional questions that you may have.
3/15/95 - Content subject to change without notice.
695
CMX
COMPANY
5 Grant Street. SuiteC • Framingham, MA 01701 USA
Phone: (508) 872-7675. Fax: (508) 620-6828. Email: cmx@cmx.com
The CMXBug™ Debugger
The CMX CMXBug™ debugger provides the user the ability to view and modify different aspects of the CMX
multi-tasking operating system environment, while the user's application code is running. CMXBug runs as a task,
usually being the highest priority task. In most cases, one of the target processor UART channel(s) is used as the
input/output device. A simple terminal or CPU with a keyboard is all that is needed to use CMXBug.
When the user enables the CMXBus task, it will send a
menu to the screen. The user may then select one of
many prompts,allowing the user to view and possibly
change many aspects of the CMX OS environment.
When the. CMXBug task is running, it prohibits other
tasks from running and also freezes the task timers and
cyclic timers, so as the user will get an accurate picture
of the "current state" of the CMX OS environment.
CMXBug allows the user to "single step" one system
TICK, thus allowing normal activity to occur for one
system TICK, with CMXBug resuming after this
"single step". Also the user can set the number of system
TICKS that CMXBug will wait, allowing normal
activity, before it again resumes. This is a very powerful
and helpful feature.
CMXBug allows the user access to most of the CMX OS features, such as: Tasks, Cyclic timers, Resources, Mailboxes,
Queues, Stacks, the system TICK and TIMES LICE scales, etc. For example, you may view a task, which shows its
ciIrrent state (ready, waiting on what, the time remaining, etc.), its current priority, its starting address, the events
associated with the task, the task's stack address and maximum usage, etc. Also, you may start a task, wake a task that
was waiting on some entity, stop a task, etc.
CMXBug also allows the user information pertaining to each task percentage of RUNNING time, to the total. This
enables the user to obtain an accurate picture of each task, in relation to all tasks. It also shows the amount of time,
that the processor is "IDLE" with no task running. This allows the user a very powerful insight as to how the processor
time is being spent.
CMXBug is now available for FREE, with the CMX CMX-RTXTM package, for most processors/vendors that CMX
supports. All source code is included. .
Call, Fax, or Email us with any additional questions that you may have.
~/l5/95
- Content subject to chooge without notice.
696
DATA 1/0 CORPORATION
ProMaster 2500
ProMaster 2500
Automated Handling
System
• Programs, tests, labels, and sorts in a
single-pass, tube-to-tube operation
• Pick-and-place device transport
protects SMT and other devices against
physical damage
• Changeovers from one package style to
another can be done in two minutes or
less- no tools or special skills are
required
Product Information
Data I/O@'s ProMaster@ 2500 is a fully integrated,
automated system for handling, programming, testing,
sorting, and labeling programmable devices.
Providing universal support for devices in DIP
packages up to 32 pins, PLCC packages up to 84 pins, and
300-through 525-mil SOIC packages with 14-44 pins, the
ProMaster 2500 programs, labels, and sorts as many as 550
devices per hour. Its state-of-the-art pick-and-place handling
technology minimizes damage to delicate surface-mount
devices for safe, high-yield SMT production. Automated
tube-to-tube processing also eliminates human error and
device damage, and minimizes any electrostatic (ESD)
damage caused by human handling.
From input to output, the ProM aster 2500 is designed
for flexibility. The pick-and-place head rotates devices, so
programming and labeling proceed without interruption
regardless of device orientation in the tubes. A high-density:
dot matrix printer quickly prints and applies device labels,
available in a wide variety of materials and sizes, in one swift
and precise operation. Quick and easy changeovers
dramatically reduce downtime and also enhance flexibility for
just-In-time manufacturing.
Data I/O offers a complete line of programmer
products for programmable ICs, including the UniSite™ and
3900 programming systems, the PSXTM Parallel Gang/Set
programming systems, and the ProMaster Automated
Handling Systems.
• Fully grounded device-contact surfaces
guard against ESD damage
• Entire system is approved by
semiconductor manufacturers to ensure
highest programming yields and
reliability
• Pin electronics, based on industrystandard Data 1/0 programmers, ensure
optimum signal fidelity and superior
yields
Contact Information
Data I/O Corporation
10525 Willows Road N.E.
P.O. Box 97046
Redmond, WA 98073-9746
Tel: (800) 332-8246
Tel: (206) 881-6444
Fax: (206) 869-7423
697
EDI Corporation
Modular R&D Interconnect System™
Accessories for 8051-Architecture Devices
App1
Description
Basic Adapter P/N2
E
40-DIP to 44-PLCC
40D/44PL-8051
E
40-DIP to 44-QFP, 2-piece surface mount
40D/44QF31-TOP-8051 with 44QF31-SD
E
44-PGA to 44-QFP, 2-piece surface mount
44PG/44QF31-TOP with 44QF31-SD
E
44-PLCC to 44-QFP, 2-piece surface mount
44PU44QF31-TOP with 44QF31-SD
80C39, 80C49, 8XC54. 8XC528,
8XC852, 8XCL41 0
E
44-PGA to 44-PLCC
44PG/44PL
E
40-DIP to 44-PLCC
40D/44PL-8051
E
44-PGA to 44-PLCC
44PG/44PL
80C51XA
E
40-DIP to 44-PLCC
44PGl44PL
83C055 & 87C055
E
40-DIP to 42-Shrink DIP
40D/42SD6-83C055
8XC552, 8XC562 & 8XC592
E
68-PGA to 80-QFP, 2-piece surface mount
68PG/80QFR31-TOP-8XC552
E
68-PLCC to 80-QFP, 2-piece surface mount
68PU80QFR31-TOP-8XC552
83C751
E
24-DIP to 28-PLCC
24D3/28PL-751
83C752 & 87C752
E
28-PGA to 28-PLCC
28PG/PL
8XCE654
E
40-DIP to 44-QFP, 2-piece surface mount
40D/44QF31-TOP-8051 with 44QF31-SD
E
44PGA to 44-QFP, 2-piece surface mount
44PG/44QF31-TOP with 44QF31-SD
E
44-PLCC to 44-QFP, 2-piece surface mount
44PU44QF31-TOP with 44QF31-SD
E
40-DIP to 44-QFP, 2 piece surface mount
40D/44QF31-TOP-8051 with 44QF31-SD
E
44-PGA to 44-QFP. 2 piece surface mount
44PG/44QF31-TOP with 44QF31-SD
E
44-PLCC to 44-QFP, 2-piece surface mount
44PU44QF31-TOP with 44QF31-SD
E
40-DIP to 40-VSOP, 2 piece surface mount
40DNS30-TOP with 40VS30-SD
E
64-DIP to 64-Shrink DIP, with solder tail pins
64D9/SD7-S
E
64-Shrink DIP to 64-QFP, 2-piece surface mount
64SD7/QF39-TOP-83CL 167 with
64QF39-SD
E
68-PGA to 64-QFP, 2-piece surface mount
68PG/64QF39-TOP-83CL 167 with
64-QF39-SD
E
68-PLCC to 64-QFP, 2-piece surface mount
68PU64QF39-TOP-83CL 167 with
64QF39-SD
E
68-PGA to 64~QFP, 2~piece surface mount
68PG/64QF39-TOP-83CL580 with
64QF39-SD
E
68-PLCC to 64-QFP, 2-piece surface mount
68PU64QF39-TOP-83CL580 with
64QF39-SD
Device
8031AH, 8052AH, 80C32, 8051AH,
8XC51 FA, 8XC51FB, 8XC51FC,
80C52, 87C52, 8XC504, 8XC524,
8XC575, 8XC576, 8XC652, 8XC654,
& 80C851
80CL31/51
P83CL 167/168, P83CL267/268
83CL580
8XL51FAlFB
85CL001
E
68-PGA to 56-VSOP, 2-piece surface mount
68PG/56VS_-TOP-83CL580
E
68-PLCC to 56-VSOP, 2-piece surface mount
68PU56VS _-TOP-83CL580
E
40-DIP to 44-LCC, 2-piece surface mount
40D/44LC-TOP-8051
E
40-DIP to 44-QFP, 2-piece surface mount
40D/44QF31-TOP-8051 with 44QF31-SD
E
44-PGA to 44-QFP, 2-piece surface mount
44PG/44QF31-TOP with 44QF31-SD
E
44-PLCC to 44-QFP, 2-piece surface mount
44PU44QF31-TOP with 44QF31-SD
E
84-PGA to 84-PLCC
84PG/PL
Notes:
1. Applications: E emulators, U upgrade.
2. Programming adapters for 8051 architecture devices can be found in the programming accessory section of the EDI catalog.
Adapters are available with monitoring posts for logic analyzers.
=
=
• ED! Corp. • 2611 Highland Drive. Las Vegas, NV 89109. Tel:7021735-4997. Fax: 7021735-8339.
698
E
..
~l'.~a
m.",~ticft7Tnc.
3 DIFFERENT CONFIGURATIONS
An RTXC license is not expensive. Different applications need different levels of
kernel services.
RTXC, the Real Time eXecutive in C takes that into
consideration by offering three different, but compatible, configurations at three
different, yet affordable, prices. The Basic Library, RTXC/BL, contains 36 kernel
services. Our Advanced Library, RTXC/AL, is a power packed bargain with 55
kernel services. And finally, there is RTXC/EL, the Extended Library, which
contains all 72 services.
What if the RTXC library has more services than your application uses? You
can easily configure RTXC to contain only those kernel services needed by your
application. You keep the kernel lean and save memory space that may be used
for your application code.
You may decide after licensing a Basic or Advanced Library that you want to use
the additional services offered by a Library with more services. Don't think
you're stranded. We offer our customers a liberal upgrade policy that protects
your software investment. Simply pay the difference between the two license
fees plus a small upgrade charge and you have all the power of the new library
available for your application.
The API is the same across all ports and bindings, so devote your team's time to
code development on your application by using the standard for real-time
kernels, RTXC. See how easy it is to make the transition to RTXC with its short
learning curve and ease of use. You'll see how to reduce programming time,
increase reliability and performance, and get to the market faster. That's the
heart of the matter.
To get more information on RTXC, RTXCio, or RTXCfile just take a minute to
call or fax us today.
10450 Stancliff, Suite 110
Houston, Texas 77099-4383
699
Phone: 713/561-9990
Fax: 713/561-9980
RTXC V3.2 LIBRARY CONTENTS
E
..
m""~Lc'71nc.
~1.~a
a - RTXC aasic Library ...................................... 36 Services
A - RTXC Advanced Library ............................... 55 Services
E - RTXC Extended Li
................................ 72 Services
KS_block
a A E
KS_deftask
a A E
KS_ defpriority
B A E
KS_defslice
a A E
KS_deftask_arg
A E
KS_delay
a A E
KS_execute
a A E
KS_inqpriority
E
KS_inqslice
E
KS_inqtask
E
KS_inqtask_arg
A E
KS_resume
a A E
KS_suspend
a A E
KS_alloc_part
Semaphore Services
KS_defmboxsema
A E
KS_defqsema
A E
KS_inqsema
E
KS_pend
B A E
KS_pendm
E
KS_signal
a A E
KS_signalm
E
KS_wait
KS_allocw
A E
KS_create_part
A E
KS_defpart
a A E
KS_free
a A E
KS_free_part
a A E
KS_inqmap
A E
KS_defres
A E
a A E
KS_waitm
A E
KS_waitt
E
KS_inqres
Message Services
KS_lock
a A E
KS_ack
a A E
KS_unblock
a A E
KS_lockt
KS_receive
B A E
KS_yield
a A E
KS_lockw
KS_receivet
E
KS_receivew
:":tllml~',iM.'II.Qlmm
KS_alloc_timer
a A E
KS_elapse
KS_free_timer
H::::,::::m,::1
A E
E
KS_restarCtimer
E
KS_send
E
KS_sendw
A E
KS_defqueue
KS_starCtimer
a A E
a A E
KS_dequeuet
a A E
KS_deftime
AE
AE
AE
KS_inqtime
a
E
a A E
E
KS_dequeuew
A E
KS_enqueue
a A E
KS_enqueuet
E
KS_enqueuew
KS_ISRalioc
a A E
KS_ISRexit
a A E
KS_ISRsignal
a A E
KS_ISRtick
B A E
A E
KS_inqqueue
E
KS_purgequeue
10450 Stancliff, Suite 110
KS_unlock
KS_user
Queue Services
KS_stop_timer
E
A E
a A E
KS_sendt
KS_dequeue
A E
a A E
A E
a A E
KS_inqtimer
E
KS_alloct
KS_terminate
1:1:
a A E
Houston, Texas 77099-4383
700
A E
Phone: 713/561-9990
Fax: 713/561-9980
E
RTXC V3.2 KERNEL SERVICES
~J.~a d
m""~Lc':rnc.
KS_terminate(task)
KS_alloct(map,ticks)
KS_alloc_task( )
Terminate operation of task.
Dynamically allocate a TCB from pool of Free
TCBs.
Same as allocwO but, limit duration of wait to a
period of ticks.
KS_unblock(start,end)
Unblocks range of tasks from start through end.
KS_block(start, end)
KS_allocw(map)
Same as anoc() but, if map is empty, wait until
memory available.
Blocks range of tasks from start to end.
Yield control of the CPU to another task at same
priority.
KS_ defpriority(task,priority)
KS_create_part(body_address,
blksize,numblks)
Change the priority of task to priority.
Allocate a dynamic Memory Partition and define
the location of tts RAM at body_address with
numblks number of blocks of size b1ksize.
Return its identifier if allocation is successful or
NULL if not.
KS_defslice(task,ticks)
Define time-slice time quantum of task to ticks.
KS_deftask(task,priority,stack_addr,
stack_ size, entry_ address)
Define attributes of dynamically created task
running at priority to be started at entry_address
and having a stack of stack_size bytes located
at stack_addr.
KS _defres(resource,resattr)
Define the priority inversion handling attribute,
resattr, for resource.
KS _inqres(resource)
Inquire about the current owner of resource.
KS _Iock(resource)
KS_deftask_arg(task,address)
Define the address of task's Environment
Arguments structure.
KS_ delay(task, ticks)
Block task for a period of time specified by ticks.
Unblock task when delay expires.
KS_execute(task)
Make task READY for execution beginning at its
starting address.
KS_inqpriority(task)
Inquire on task's priority.
Free the memory block at address to specified
map.
KS_free(map,address)
KS_lockt(resource,ticks)
KS_free_part(map)
Same as KS_lockw( ) but limit duration of wait
to period of ticks.
Free the dynamically allocated Memory Partition
whose identifier is map.
KS_lockw(resource)
KS_inqmap(map)
Same as KS_lock( ) but if resource is BUSY,
requesting task waits until resource becomes
available.
Returns the memory block size of map.
1.,1,.,1::,1'101111'11.1:
Release exclusive ownership of resource.
Get time-slice time quantum for task.
'::il
KS_ISRalloc(map)
From an Interrupt service routine, allocate a
block of memory from map and return Its
address. Return NULL if map is empty.
Get task number of Current Task.
KS_alloc(map)
Get address of task's Environment structure.
KS_ISRexit(address, sema)
Allocate a block of memory from map and return
its address. Return NULL if map is empty.
KS_resume(task)
KS_alloc_part( )
Resume suspended task. unless otherwise
blocked.
Allocate a dynamic Memory Partition and return
its identifier. Return NULL if none available.
KS_suspend(task)
Exit an interrupt service routine whose
interrupted context frame is located at address
and Signal sema if specified.
KS_ISRsignal(sema)
Signal sema from an interrupt service routine.
KS_ISRtick( )
Suspend operation of task.
10450 Stancliff, Suite 110
Define attributes of an existing or dynamically
allocated map with RAM beginning at
body_address with numblks number of blocks
of size blksize.
Acquire exclusive use of resource. If ownership
of resource achieved, return to requesting task.
If resource is BUSY, return value indicating the
lock operation was not performed.
KS_unlock(resource)
KS_inqslice(task)
KS_defpart(map,body_address,
blksize,numblks)
Announce a timer Interrupt (tick) to system.
Houston, Texas 77099-4383
701
Phone: 713/561-9990
Fax: 713/561-9980
Semaphore Services
Associate a semaphore with the Not_Empty
condition of mailbox.
Return number of entries currently in queue.
KS_receivew(mailbox,task)
the
given
condition on queue.
KS_inqsema(sema)
Returns current state of semaphore.
KSJ)8nd(semaphore)
Send message asynchronously at specified
priority to maUbox. Associate semaphore with
acknowledgement signal.
KS_sendt(mailbox,message,priority,
semaphore, ticks)
Same as KS_sendw( ) but waiting period is
limited by duration ticks.
Set semaphore to a PENDING state.
KS-pendm(semaphore_'ist)
Set multiple semaphores as specified in
semaphore_Hstto PENDING state.
KS_sendw(mailbox,message,priority
semaphore)
Send message synchronously. Same as
KS_send( ) but wait on semaphore for
acknowledgement.
KS_signal(semaphore)
Signal semaphore that associated event has
occurred.
Queue Services
KS_signalm(semaphore_'ist)
KS_defqueue(queue, width, depth,
body, count)
Signal multiple semaphores as specified in
semaphore_Nst that a particular event has
occurred.
Define width, depth, queue body address and
currenlslze of queue.
KS_wait(semaphore)
Requesting task waits for occurrence of event
associated with semaphore.
KS_dequeue(queue,destination)
Get data from queue and store it at destination
address.
KS_dequeuet( queue, destination,
ticks)
Requesting task waits for occurrence of an
event associated with any semaphore found in
semaphore_Hst (logical OR condition).
KS_waitt(semaphore,ticks)
Same as KS_walt( ) but duration of wait limited
to a period defined by ticks.
Purge queue of all entries.
Same as KS_,ecelve( ) but if maHbox empty,
walt until a message is sent to maHbox.
KS_send(mailbox,message,priority,
semaphore)
KS_defqsema(queue,sema,
conditiOn)
semaphore with
KS_inqqueue(queue)
Same as KS_,ecelvew( ) but period of waiting
is limited by duration ticks.
KS_purgequeue(queue)
KS_defmboxsema(mailbox, sema)
Associate
KS_receivet(mailbox, task, ticks)
Same as KS_dequeuew( ) but duration of wait
is limited by period defined by ticks.
I:::
Hll mWW1:i:i : I fI. .lll• • •iI.iI:llllllilllllli!llllllllJlllll
KS_alloc_timer( )
Allocate a general purpose timer and return its
address.
KS_elapse(countet)
Return the elapsed time between two events.
KS_free_timer(timet)
Free the general purpose timer.
KS_inqtimer(timet)
Get amount of time remaining on timer.
KS_restarCtimer(timer,period,
cyclic-P6rio d)
Reset and restart the active timer with a
initial perlod and an optional cycHcJ»rIod.
new
KS_starCtimer(timer,period,
cyclic-P6riod,semaphore)
Start the specified timer giving it an initial period
and an optional cyclic-P'fiod. Associate
semaphore with expiration of the initial period or
cycHc-P'rlod.
KS_stop_timer(timet)
Stop the specified active timer and remove it
from the active timer list.
I:l !: :·!': : '}E>lllllllllfll·lilllll.!!!II:IllIll:m mH,l w:1
KS_dequeuew(queue,destination)
Same as KS_dequeue( ) but if queue is
EMPTY, wait until operation can be completed.
KS_deftime(Date_ Time)
Define current date and time-of..cfay.
KS_enqueue(queue, source)
KS_inqtime( )
Put data at source address into queue.
Get the current date and time-of..cfay.
KS_ack(message)
KS_ enqueuet(queue, source, ticks)
KS_user(funcfion, argumenCIist)
Acknowledge receipt or processing of message.
Same as KS_enqueuew() but limit duration of
wait to period defined by ticks.
User defined function is called by the standard
RTXC KS protocol and address of argumenllst
passed to it.
Message Services
KS_receive(mailbox,task)
Receive next message from any sender (or from
a specifIC sender defined by task) in mailbox
and return message address. If mailbox is
empty, retum NULL.
KS_enqueuew(queue, source)
Same as KS_enqueue() but if queue is FULL,
wait until there is room in queue to complete the
operation.
702
Product
Description
Real-Time Kernel
What is RTXC?
RTXC is a flexible, field-proven,
multitasking real-time kernel for
use in a wide variety of embedded
applications on a broad range of
microprocessors, microcontrollers,
and DSP processors.
It is written primarily in C
and features a single Application
Programming Interface for all
supported processors. The result
is a configurable, powerful
multitasking architecture that
helps you get your job done
and preserves your software
investment.
What's in RTXC?
RTXC, like all multitasking
real-time kernels, manages tasks
and time, synchronizes with
events, and permits transferal of
data between tasks. But RTXC
goes beyond basic requirements
through its extensive set of
understandable kernel services,
each operating on one of seven
classes of kernel object. In addition to the fundamental requirements, RTXC also contains kernel
services for RAM management
and exclusive access to any entity.
703
Tasks
In RTXC, tasks are the main
operational elements of the
application. Because different
tasks have different relative
importance, RTXC supports a task
prior-itization design permitting
both static and dynamically
variable values. Tasks may be
predefined during system generation or dynamically defined at
runtime.
RTXC supports a scheduling
policy that permits tasks to gain
control of the CPU in different
manners. Preemptive scheduling
ensures that the highest priority
task in a ready state is in control
of the CPU. If several tasks share
the same priority, they may be
scheduled in a round-robin
fashion. Time-sliced scheduling is
also available within a given
priority and each task may be
given its own time quantum.
Semaphores
Semaphores are event synchronization objects in RTXC. Semaphores support both internal and
external events through a unified
event processing design. Tasks
may synchronize with an event by
waiting on a semaphore, consuming no CPU time while doing so.
A waiting task will resume when
the event occurs and the associated semaphore is signaled. RTXC
kernel services provide for single
and multiple event handling.
FIFO Queues
FIFO Queues permit tasks to
pass data from one to another in
chronological order. All Queues
are defined globally and may have
multiple producers and multiple
consumers. Various queue conditions such as Full, Empty, and
NocEmpty can be associated with
Applications
er~~;k~;$~~1~i,,'l:.\~;{l:{~1t'~~~~-&II!_
,.,
'.
,
Automotive
,
....
",
!
~
~j
Telecommunications
Avionics
~
Office machines
Medical and scientific equipment
,"
Robotics
"
,
'
Process monitoring and control
'",
""
semaphores to provide rapid and
deterministic handling for mUltiple
queues without polling.
Messages
and Mailboxes
Messages and Mailboxes give
RTXC users a prioritized means
of passing data between tasks.
Mailboxes are globally declared
and a task may use none, one,
or many. Any task may send
messages to any Mailbox, synchronously or asynchronously, and any
task may receive Messages from
any Mailbox. Semaphores may be
coupled with Mailboxes for use in
serving multiple Mailboxes
without the need for periodic
polling.
Timers
One-shot and periodic time
durations are managed by RTXC's
Timer kernel object class. Expiration of a timed period is an event
associated with a semaphore.
RTXC's design for managing timer
updates is very efficient requiring
a fixed overhead regardless of the
number of active timers.
704
"
'"
:,"",.",,,,
"":);
:'<,"':.. ;q,".
Memory Partitions
RTXC manages RAM through a
partitioning design using Memory
partition kernel objects. Memory
Partitions prevent RAM fragmentation that can occur when multiple tasks randomly allocate and
free blocks of RAM from the
system heap. Memory Partitions
may be statically defined during
system generation or created
dynamically at runtime.
Resources
The need to ensure exclusive
access to some entity in a realtime system gives rise to the
RTXC Resource kernel object.
A task can gain ownership of an
entity, real or logical, and use it '
exclusively. When the task
completes its use of the entity, it
relinquishes ownership to permit
other tasks to gain control of the
entity. RTXC options provide a
convenient way to handle priority
inversion in which a low priority
task owns a Resource needed by
a high priority task.
Interrupt
Management
RTXC provides a generalized
design for servicing interrupts in
an efficient yet flexible manner
achieving minimum interrupt
latency and maximum responsiveness. Special kernel services may
be called from an interrupt service
routine to perform such functions
as event signaling, buffer allocation, and ISR exit.
System
Configuration Utility
RTXCgen is an interactive program used to define the kernel
objects needed for the application.
Objects are defined in a simple
interactive dialogue with the
program. When all definitions are
complete, RTXCgen produces
C source code of the kernel
objects. The result is error free
system generation. RTXCgen is
a standard part of the RTXC
distribution.
System Level
Debug Task
During the debugging phase,
RTXCbug may be employed as
a task to examine the interaction
between the application tasks and
RTXC. RTXCbug remains
blocked and consumes no CPU
time until invoked by the process
or by operator intervention. When
in use, RTXCbug displays coherent snapshots of the various
classes of kernel objects showing
current states and relationships
with other objects. There is also
support for some direct operator
intervention. RTXCbug is provided with all RTXC distributions.
705
'AdIClil'iortal:So1ft¥IfGI'e Product. from' '
iiJdMKlCllecI·!!iVJII'8II11 "~rOd~~,I~~.'·.
Embedded System Products, Inc.
10450 Stancliff, Suite 110
Houston, Texas 77099-4383
Phone: 713/561-9990
Fax: 713/561-9980
email: sales@esphou.com
All product names mentioned are the trademark or registered trademark of their respective manufacturers. Copyright@ 1995, Embedded System Products, Inc. All Rights Reserved.
706
Product
Description
Input/Output Subsystem
RTXCio is a device independent
input/output subsystem that
pennits application tasks to make
direct requests to any supported
device. Multiple tasks may access
the same device and a single task
may access multiple devices.
RTXCio also supports both
synchronous and asynchronous
input/output operations.
Because it is written in C,
RTXCio can be used in any
system using RTXC without
regard to the target processor.
In combination with RTXCfile,
RTXCio acts as an interface
between file manager and drivers
for file oriented devices.
Device
Independence
All RTXCio operations are
inherently device independent
because they reference logical
channels instead of physical
devices. RTXCio's Application
Program Interface provides a set
of services that have the same
fonn regardless of the device
being used. The result is application code that is more portable and
easier to test and debug.
Multitasking
RTXCio operates in, and is fully
compatible with, the multitasking
environment managed by RTXC.
RTXCio functions are reentrant
and execute on the same thread as
the calling task.
Multiple
Device Support
There are no limitations as to the
type or number of devices that
RTXCio can support. Multiple as
well as single port devices are
supported via RTXCio's channel
oriented I/O architecture.
Synchronous &
Asynchronous I/O
In embedded systems, time can be
critical and RTXCio recognizes
that need by providing two basic
input/output modes: asynchronous and synchronous. Asynchronous I/O pennits a time conscious
task to continue its application
while the device controller is
processing its I/O request.
RTXCio also pennits timed
asynchronous mode requests.
Synchronous I/O supports
those applications where the task
must wait for the completion of
an I/O request. RTXCio returns
707
the device completion status
so that the requesting task can
detennine how to proceed.
Synchronous I/O requests
nonnally complete when the
requested operation is finished.
RTXCio also pennits time
limited synchronous mode
requests.
Drivers
RTXCio includes a functional
sample driver. This is a virtual
driver which you can use to
develop your application while
your device driver is being
developed.
If you choose to write your
own driver or drivers, RTXCio has
a standardized architectural
scheme, and an entire section of
its User's Manual dedicated to
assisting you in doing so.
On the other hand, device
drivers may be separately licensed
from Embedded System Products.
As with RTXCio, such drivers
include full source code.
Factory development of
custom device drivers is also
available on a fee basis. Call for
details.
Functions
RTXCio performs five basic
inputloutput,functions similar to
those found in expensive operating system environments. Table 1
shows each function and its
associated I/O mode.
Portability
RTXCio is written in C and is
fully integrated with RTXC. As
such it is processor independent
and, thus, highly portable. Device
drivers, however, are generally
associated with a particular
device controller and may not
be portable.
Distribution
RTXCio is distributed in source
code form and is royalty-free.
Embedded System Products, Inc.
10450 Stancliff, Suite 110
Houston, Texas 77099-4383
Phone: 713/561-9990
Fax: 713/561-9980
email: sales@esphou.com
All product names mentioned are the trademark or registered trademark of their respective manufacturers. Copyright Ie) 1995, Embedded System Products, Inc. All Rights Reserved.
708
~
-.~
Product
Description
J4..~~
MS-DOS· Compatible
File Manager
RTXCfile is a MS-DOS
compatible file management
subsystem for RTXC-based
systems. RTXCfile is written in
C following the standard ANSI C
protocall for file services and can
be used on any system using
RTXC without regard to the
target processor.
Because RTXCfile uses RTXCio
to perform input/output requests,
RTXCfile can be used with hard
disks, floppy disks, PCMCIA
memory cards, RAM disks or
any device suitable for file
oriented storage.
MS-DOS
Compatibility
RTXCfile's compatibility with
MS-DOS file formats assures
portability of data files exported
from or imported to your system.
The RTXCfile Application
Program Interface provides a
powerful set of services for file
and directory manipulation for
use with RTXC-based
applications.
Multitasking
RTXCfile supports and operates
in the multitasking architecture of
RTXC. Each task has its own
specific logical device
environment in which both single
and multiple devices are
permitted. RTXCfile not only
supports concurrent file requests
on a device by all tasks, but also
permits any task to use more than
one logical device.
Reentrant
Because it is compatible with the
RTXC multitasking architecture
including preemptive scheduling
of tasks, RTXCfile is reentrant.
Thus, a higher priority task may
preempt the file service request of
a lower priority task and still
successfully perform its own file
management operation.
Reentrancy preserves the
integrity of the priority scheme
while conserving time as well.
Each task using RTXCfile
maintains its own path including
active logical device and current
working directory. File requests
omitting specification of a path
will default to the task's current
working directory.
709
Device
Independence
RTXCfile requires RTXCio in
order to perform input/output
operations needed for file
management. Use ofRTXCio
allows RTXCfile to be device
independent and easily
supportive of any device suitable
for file oriented storage.
Data Integrity
RTXCfile recognizes that all
data written to files is potentially
vital and provides services to
guarantee its integrity. Whether
the data is written to one or more
files on a device, RTXCfile
allows file flushing and device
synchronization to force the
immediate writing of buffered
data to the storage medium.
Portability
RTXCfile is written in C and is
fully integrated with RTXC and
RTXCio. It can operate on any
processor without regard to byte
ordering.
Functions
RTXCfile performs all of the file
management and input/output
services necessary to support MSDOS compatibility. Table 1 shows
each function.
Distribution
RTXCfile is distributed royaltyfree in source code form. A RAM
disk driver is included in the
RTXCfile distribution.
Embedded System Products, Int.
10450 Stancliff, Suite 110
Houston, Texas 77099-4383
Phone: 713/561-9990
Fax: 7131561-9980
email: sales@esphou.com
All product names mentioned are the trademark or registered trademark of their respective manufacturers. Copyright © 1995, Embedded System Products, Inc. All Rights Reserved.
710
EMULATION TECHNOLOGY, INC.
Interconnect Solutions and PC Based Instrumentation
XA Microcontroller Development Tools
Development Tools
ET-iCXA - Development Board
ET-iCXA - In-Circuit Emulator
ET-ASM-XA - Assembler
ET-C-XA - C Compiler
ET-CONV-XA - 8051 Code Converter
ET-DEBUG-XA - Software Simulator
ET-MP-51 - Programmer
ET-ASM-XA -
Macro Assembler and Linker
The ET-ASM-XA assembler translates XA assembly language program into relocatable object code. The XA assembly
language includes commands and directives specially designed to fit the XA architecture.
The two main tools of the package are assembler and linker programs. The linker enables the user to work with a number
of modules and to locate the necessary segments. The ET-ASM-XA produces debug information that includes SYMB, LINE
and FILE, and many more symbols.
The package also includes several utilities that convert from object code into Hex format. The assembler supports the XA
special features like system and user modes, register banking and others.
The ET-ASM-XA assembler is integrated into a modern graphic interface that allows it to be used in a complete development
environment.
ET-CONV-XA -
8051 Code Converter
The ET-CONV-XA converts assembly source and object code written for the 8051 to ET-ASM-XA. The ET-CONV-XA
utilities make it possible to use code written in C, PLM or Assembler for the 8051 microcontroller and to adapt it to the XA
architecture.
The CONY program first passes over the source file written for the 8051. It then translates the source file into ET-ASM-XA
source file. In case of a conflict, the user will be asked by the program to select the right option. If the available code is
different from the assembly source, the program converts the object file generated by high-level languages or assemblers
into an ASCII file with all the possible assembly information.
ET-C-XA -
C Compiler
The ET-C-XA is an ANSI C compiler with an extension designed to support XA special features. The compiler is compatible
with other ANSI C compilers. The ET-C-XA is designed to make the code faster and smaller by using the special chip
features. The ET-C-XA can support multi-tasking programs.
The system features ANSI C compatible, exception handling mechanism, interrupt handling mechanism, floating point
variables, in-line assembler, extended C keyword for XA special architecture, special functions for checking memory
integrity and more.
2344 Walsh Avenue, Bldg. F, Santa Clara, CA 95051
711
USA
Tel: (408)982-0660
Fax: (408)982-0664
EMULATION TECHNOLOGY, INC.
Interconnect Solutions and PC Based Instrumentation
DB-XA -
Development Board
DB-XA is a development board dedicated to all Philips XA microcontroller derivatives. It is serially linked to PC/XT/AT
or compatible systems and can emulate the microcontroller using either the built-in clock oscillator or any other clock source
connected to the microcontroller.
The system emulates the microcontroller in ROMless mode. A two microcontroller architecture leaves the serial port for
user applications.
The software includes a Source Level Debugger for C and Assembler, On-line Assembler and Disassembler, Software Trace,
Conditional Breakpoints and many other features. All the debugger functions run under DOS and Windows operating
systems.
The code memory permits downloading and modifying of user's programs. Mapping the data memory to a target circuit or
to the system is possible. Breakpoints allow real time execution until an opcode is executed at a specified address or line
of the source code. All 110 lines are easily accessed and may be connected to the on-board switches and LEOs when trying
out a specific idea. The system is supplied with a User's Manual, software, emulation cable and a power supply.
DS-XA - In-Circuit Emulator
This system is a real-time, fully transparent in-circuit emulator with 1 MByte mappable internal memory, 16M hardware
breakpoints and real-time trace with trigger capabilities. The system emulates any XA derivatives in all the frequency ranges
of the microcontroller.
ET-DEBUG-XA - Software Simulator
The ET-OEBUG-XA is a source level debugger for the XA architecture. The ET-DEBUG-XA enables fast and reliable
program debugging at source level for ET-C-XA and ET-ASM-XA.
The ET-DEBUG-XA can execute your code on a target emulator or high-speed simulator. The software enables the user to
follow and control code execution. The user can examine and change the data and the code.
ET-MP-51 -
Programmer
All the necessary adapters and programming algorithms are added to the Et-MP-51 Programmer to support all the EPROM
based XA derivatives.
2344 Walsh Avenue, Bldg. F, Santa Clara, CA 95051
712
USA
Tel: (408)982-0660
Fax: (408)982-0664
FDI
Future Designs, Inc.
XTEND
XA
Trainer &
Expandable
Narrative
Design
The XTEND, XA Trainer and Expandable Narrative Design, is designed
to provide the user with a stable hardware and software platform for
application development with the XA-G3. In many cases, the XTEND
may serve as a quick prototype for the actual user application. With
the on-board prototype area or optional expansion boards, the user
can quickly and easily get a new customized design running with the
XA-G3.
Features
1.
2.
Philips XA-G3 microcontroller socket
for 44-pin PLCC supporting both
internal and external code execution
128KB standard FLASH ROM code
space, expandable to 256KB (dual
sockets for 16-bit access)
3.
Code Space supports EPROM,
FLASH (5V), NVSRAM, or SRAM
4.
64KB Standard High-Speed Data
Space SRAM, expandable to 256KB
(dual sockets for 16-bit access)
5.
6.
On-board speaker for tone generation
7.
Interface for character type LCD
modules with 16 character LCD
included
8.
60-pin expansion header for full
expansion capability
9.
9 VDC input with on-board 5V
regulator, UL-approved power supply
included
10. 5.25" x 7.25" 2-layer PCB with full
silkscreen information
Two OB-9 RS232 serial
communications ports with optional
hardware handshake & RS232 cable
and OB25 adapter included
11. 2.5" x 1" wire-wrap area on-board
12. Four TTL user inputs via double-row
header
713
FDI
Future Designs, Inc.
13. Two user input push buttons
14. Eight TTL user outputs via single-row
header
15. Users manual and schematics
included
16. Optional 12C interface/monitor
17. Planned Future Expansion Boards
include:
• 12C expansion board with LCD,
keypad, and realtime clock
• Prototype board with 'Pad-per-hole'
area
• Virtually any type may be custom
designed
19. Internal XA-G3 monitor supporting:
• Serial host communication
• Register dump/modify
• External data memory dump/modify
• External code memory load (from
RS232)
• Code disassembly
• Execute code with up to 4 user
defined breakpoints
• Single-step through user code
20. CMX evaluation package
CMX RTOS XA demo for XTEND
CMX RTOS demo for the PC
HiTech XA C Compiler demo
18. Example routines for applications:
• XA-G3 initialization and setup
routines
• Serial port drivers
• Timer/Counter drivers
• Watchdog Timer routines
• Interrupt routines
• 8051 to XA translation examples
Ordering Information
.
Part Number: XTEND-G3
Price: $249.00 (USD) complete
Warranty: 30-day money back
guarantee
Availability: Stock
(205) 830-4116 Information
(800) 278-0293 Sales
(205) 830-9421 FAX
e-mail teamfdi@aol.com
Future Designs, Inc.
P.O. Box 7362
Huntsville, AL 35807
Kit Contents
714
-----
+l1-TECHa
so
r
T
W"
HI-TECH C (XA) Product Brief
R
[
HI-TECH C Complier for the Ph!lips XA microcontrolier - technical specifications
HI-TECH Software's range of ANSI C embedded
development systems now includes a product targeted
specifically at Philips Semiconductors' XA (eXtended
.
Architecture) microcontroller.
Key features of the XA development system include:
• Full ANSI C language supported
• Optimized code generation
• Full use of XA features and architecture
• Choice of memory models to suit differing
applications
All standard data structures are available, including struct,
union and arrays. Structures may contain bitfields of up to
16 bits.
The compiler uses the XA stack for storage of automatic
variables, so that functions are fully reentrant.
A full ANSI compatible library is provided, except for file
handling functions. The library does include console 110
functions like printf() and scanf() which operate via simple
serial port drivers in.cluded in the library, or through other
user-supplied functions. Full library source code is
provided to allow modification of this or other functions.
• Enhanced features including bit data type and
interrupt functions
Enhanced Features
• Integrated development environment with project
management facilities
• IEEE floating point with full maths library
To maximize the effectiveness of C on the XA
microcontroller, HI-TECH C offers some enhanced
features, implemented in a manner which is in keeping with
the sty Ie of the ANSI C standard.
• Macro assembler included
Bit Variables
• Fully featured linker and librarian allow effective
development of large projects
To allow access to the XA's bit handling functions the
compiler implements bit variables. These are allocated in
the bit addressable memory area (or may be mapped onto
bit-addressable SFR's) and will be accessed with
appropriate XA bit handling instructions.
• Run-time library source code included.
System Requirements
Absolute Variables
HI-TECH C is available to run under MS-DOS, where it
requires at least a 286 processor with 512k of conventional
memory and 2MB of extended memory. It is also available
for Unix systems running SunOs or Solatis on Sparc
processors, or generic 386 Unix on 386 or higher
processors.
ANSIIISO C Language
HI-TECH C for the XA implements the ANSIIISO standard
for the C programming language. All data types are
supported and have sizes and arithmetic properties as
follows:
int
16 bits - signed and unsigned int available
char
8 bits - plain char is signed, signed char and
unsigned char also available.
short
same an int
long
32 bits in signed and unsigned versions
float
32 bit IEEE floating point format - sign bit plus
8 bits of exponent plus 24 bits of mantissa.
double
same as float by default; 64 bit IEEE format
available with compile time option.
SFR and other absolute variables may be defined with the
absolute variable facility, e.g., the power control register
PCON is defined as follows:
unsigned char peON @Ox404;
This defines the size, data type and address of the port. The
compiler will not allocate space, but will use the specified
address when accessing the variable. A header file is
provided which defines the standard XA SFRs.
Interrupt Functions
Interrupt functions may be written completely in C by
using the interrupt function feature. A function declared
interrupt will contain code to save and restore any registers
used, and will return with an appropriate reti instruction.
Macros are provided to initialize and manage interrupt
vectors, and enable and disable interrupts.
Near and Far Variables
To allow the programmer control over placement of
variables, the keywords near andfar are used to specify that
a variable will be located in the on-board (directly
addressable) RAM or in the indirectly addressable RAM
respectively.
715
HI-TECH C Complier for the Philips XA microcontroller - technical specifications (cant,)·
Non-Volatile RAM
Advanced Optimization
Variables whose value is retained by battery-backed RAM
when the microcontroller is turned off or reset can be
defined with the persistent qualifier. Variables qualified
persistent are allocated in a separate memory area, the
address of which may be used-specified, and are not
cleared to zero on startup like ordinary variables. Library
functions are provided to initialize and validate the
persistent memory area.
HI-TECH C for the XA implements many compile-time
optimization techniques to produce the smallest, fastest
code possible. Some of the optimizations performed
include:
Memory Models
Because of the XA's Harvard architecture (separate RAM
and ROM address spaces) and its ability to access memory
in 64K segments, trade-offs are required between memory
addressability and code size. To allow these trade-offs to be
tuned to a particular application, three memory models are
provided.
small
medium
large
This model is designed for applications using
less than 64K of code, and only directly
addressable (on-board) RAM. Function calls
use 16 bit addressing, and initialized data is
stored in ROM rather than RAM.
For applications using larger amounts of RAM,
the medium model will give similar code
efficiency to the small model at the expense of
higher RAM usage. This model will use both
directly and indirectly addressable RAM.
Where more than 64K code is required, the
large model should be used. It uses 24 bit
addressing to call functions, so that multiple
64K banks of code can be implemented in a
transparent fashion.
In all memory models, the far and near keywords may be
used to control RAM usage. In the large model, interrupt
functions are automatically placed in bank 0 since interrupt
vectors provide only a 16 bit address.
IEEE Floating Point
The compiler implements IEEE 32 and 64 bit floating point
arithmetic. The 32 float format has a range of ±lo±38 and
a precision of approximately 7 decimal digits. The 64 bit
t10at format has a range of ± 1O±308 and a precision of
approximately 15 decimal digits. The floating point maths
library includes the standard trigonometric, exponential,
logarithmic and hyperbolic functions.
• Constant folding - constant expressions (including
floating point) are evaluated at compile time.
• Strength reduction - multiplication is reduced to
shifting and adding where possible.
• Expression reordering - expressions are reordered and
associative operators grouped to minimize complexity.
• Dynamic register allocation - registers are allocated
to variables and temporaries based on function-wide
analysis of variable usage.
• Common code elimination - where separate pieces of
code produce common sequences, they are merged.
• Register parameters - function parameters are passed
in registers where possible.
The set of optimizations performed is tuneable at compile
time to allow trade-offs between compile time and code
quality.
Macro Assembler Included
A full featured macro assembler is included with the
compiler. This may be used to write separate assembler
modules for use with C programs, or to write stand-alone
assembler programs. Assembler code can also be
embedded in-line in C modules. The compiler produces
assembler code, and an assembled listing may be requested
to allow inspection of the generated code.
Linker and Librarian
HI-TECH C includes a complete object code linker and
librarian. This allows a large project to be split into
multiple modules, thus making maintenance and
recompilation easier. The linker combines a number of
object modules, merging program code, data, etc.,
according to user-specified addresses of RAM and ROM.
The librarian allows object libraries to be built and
maintained. The linker will extract from a library only
those modules that satisfy currently unresolved external
references. This allows a library to be used to hold multiple
routines, not all of which may be used in anyone project.
The linker produc.es a link map which provides information
on code and data addresses and sizes for individual
modules and the entire program.
716
HI-TECH C Complier for the Philips XA microcontroller - technical specifications (cont.)
Integrated Development Environment
Sample Code
The MS-DOS version of the HI-TECH C compiler includes
an integrated development environment which provides a
number of facilities to speed firmware development These
facilities include:
The following code was generatedfrom a C source module
by the compiler.
psect text,class=CODE
global_init_uart
signat_init_uart,24
init uart:
iserial.c: 10: TL1 = RTL1
-10&OxFFi
mov.b r01,#-10
mov.b 0456h,r01
mov.b 0452h,r01
iserial.c: 11: TH1 = RTH1
-10 » 8;
movs.br01,#-1
mov.b 0457h,r01
mov.b 0453h,r01
;serial.c: 12: TR1 = 1;
setb 0286h
;serial.c: 13: SOCON = Ox52;
mov.b 0420h,#052h
;seria1.c: 14: }
ret
global-putch
signat-putch,4152
param _c assigned to r31 on entry
-putch:
iserial.c: 19: if ( ! RO EN)
jb
0304h,13
iserial.c: 20: init_uart();
call _init_uart
13:
;serial.c: 21: if(c == '\n')
cmp.b r31,#OAh
bne18
iserial.c: 22: while(!TIO)
15:
jnb 0301h,15
iserial.c: 24: SOBUF = '\r';
mov.b 0460h,#ODh
;serial.c: 25: TIO = Oi
clr 0301h
; s er i a 1. c: 2 6: }
iserial.c: 27: while(!TIO)
18:
jnb 0301h,18
;serial.c: 29: SOBUF = Ci
mov.b 0460h,r31
iserial.c: 30: TIO = Oi
clr 0301h
i serial. c: 31: }
ret
end
• Text editor, implementing WordStar compatible and
MS-Windows compatible key commands.
• C syntax colour coding.
• Compilation and linking control with automatic
dependency analysis.
• Error reporting, with automatic location of errors, and
automatic correction where possible, plus detailed
error message explanation.
• Project management - a set of C and assembler source
files, object files and libraries are defined with
memory addresses, etc.
• String search across files.
• Multi-radix calculator.
• Summary memory usage map after project build.
• Library creation.
• Fully mouse and keyboard driven.
• User-defined commands for interfacing to external
utilities such as EPROM programmers.
The integrated environment runs under MS-DOS,
MS-Windows and Windows NT. There is also a command
line driver provided. The Unix hosted compiler provides
the command line driver only.
717
HI-TECH C Complier for the Philips XA microcontroller - technical specifications (cont.)
Contacting HI-TECH Software
Telephone:
+61 733005011
Fax:
+61 733005246
BBS:
+61 733005235
E-Mail:
hi tech @hitech.com.au
WWW:
http://www.hitech.com.au
FTP:
ftp.hitech.com.au
Postal:
PO Box 103
ALDERLEY QLD 4051
AUSTRALIA
HI-TECH Resellers Worldwide
Reseller
Country
Telephone
Fax
E-Mail
Australia
HI-TECH Software
(07) 3300 5011
(07) 3300 5246
hitech@hitech.com.au
USA
CMXCo.
508872 7675
5086206828
cmx@cmx.com
Avocet Systems Inc.
2072369055
2072366713
avocet@midcoast.com
Japan
Shoshin Corp.
(03) 32705921
(03) 3245 0369
tokamoto@shoshin.co.jp
UK
Pentica Systems
(01734) 792 101
(01734) 774 081
Nohau UK Ltd.
(01962) 733 140
(01962) 735 408
Denmark
Digitek Instruments
+4543424742
+4543424743
Italy
Grifo
051 892052
051 893661
Switzerland
Traco Electronic
+41 1 2842911
+41 1 201 1168
Ireland
Ashling Microsystems
+41 1 201 1168
France
Convergie
+35361 334477
100265.705 @compuserve.com
ashling@iol.ie
+33 1 47890938
Emulations
+33 1 6941 2801
+33 1 60192950
Germany
Reichmann Microcomputer
71565635
71565141
Sweden
LinSoft AB
13 111588
13 152429
718
100533.2535@compuserve.com
·
HIWARE
Hi-Cross
Hi-Cross
Development System
Complete, Integrated Development
Environment for the Philips XA Family
.. Compiler for ANSI C
.. HLI -assembler
Compiler
.. Smart linker
Optimizing ANSI-C compilers, based on the latest
compiler technology.
.. Interactive real-time cross-debugger
HLI-Assembler
High-Level Inline Assembler allows use of variables
and parameters of the HLL directly in the assembly
instructions .
.. (ROM Monitor)
.. Emulator support
Macro Assembler
.. CPU simulator with simulator-debugger
"HI-ASM" is a stand-alone macro assembler. It allows
conditional assembly, assembler include files, listings with
location, code, source, fixups. "HI·ASM" can also be used
together with the compiler. Assembler modules can be
mixed with C modules. Assembler routines can be called
from C functions and vice versa .
.. Editor (PC only)
.. Librarian
Interactive Real-Time Cross-Debugger
.. Make-utility (PC only)
Debugging on source and assembler level. Display,
zoom, modification of variables, registers, memory,
break-points, trace, single step, etc. Monitor can be adapted
to any target system. Several emulators are supported.
.. Utility for EPROM programmer
.. Decoder/HLI -generator
CPU Simulator with Simulator-Debugger
Simulates the target processor instruction set,
registers, memory. Allows the use of most cross-debugger
functions without hardware.
.. ANSI C library
.. Macro assembler
Fuzzy Logic Tool
This product "HI-FLAG" introduces many new
functions for Fuzzy development: Graphical, interactive user
interface. Mixing fuzzy objects with non-fuzzy functions.
Debugging allows to inspect variables or parameters,
various 2- and 3-dimensional graphic displays, online and
while the system is running. The tool can be embedded into
the HI-CROSS environment.
Contact Information
Hiware
Europe:
Tel: +41 61 331 7151
Fax: +41 61 331 1054
USA:
Archimedes Software Inc.
Tel: (206) 822 6300
Fax: (206) 822 8632
Supported Platforms
PC (Windows 3.x), SUN SPARC (Motif).
HIWARE
Supported Emulators
Nohau.
719
51XA-G3 Programming Adapters
• Program 5iXA-:G3 chips on
your current programmer
• Transition 5iXA-G3 devices
into your B05i-FC products
Programming adapters allow programming of 51XA-G3
chips on 8051-FC programmers
PA-XAG3FC-PD
Prototyping adapters accept PLCC or QFP devices and
plug into an emulator's production socket.
Adapters from Logical systems make it easy for embedded
designers to make the transition to the 51XA-G3. The
adapters user high-quality Yamaichi and Enplas sockets.
They are modular and the sockets and plugs can easily be
replaced if damage occurs. They are priced at $65-$165.
30 days satisfaction guaranteed, unlimited free tech support.
PA44-QP
Adapter
Socket
SlXA-G3
Package
Adapter
Footprint
Adapter
Purpose
Logical Systems
Part Number
PA-XAG3FC-PD
44 pin PLCC
Auto-eject
40 DIP 8051-FC
Programming
44 pin PLCC
LiddedZIF
40 DIP 8051-FC
Programming
PA-XAG3FC-PDZ
44 pin PLCC
44 PLCC Plug
40 DIP 8051-FC
Proto typing
Proto typing
PA-G3PIFCP
44 pin PLCC
Production
Production
PA-G3PIFCD
44 pin QFP
LiddedZIF
40 DIP 8051-FC
Programming
PA-XAG3FC-QD
44 pin QFP
LiddedZIF
44 PLCC Plug 51XA-G3
Proto typing
PA44-QP
•
Logical Systems Corporation
P.O. Box 6184
Syracuse, NY 13217-6184 USA
LOGICAL
Tel: (315) 478-0722
Fax: (315)479-6753
SYSTEMS
720
722
723
724
-:J14~
a
"':312.
-311, '
-309,
3BO:- fea2
2F6:
2F8:
balO
-368,
-306.
-304,
3A4:
3A8:
fba8
-300.
Fe55
9alIJ0002
2FA:
'BaOl
-299,
2FC:
e9000018
-297 ~
-295,
'aoo:. B52001ec
304:,9908021 e·"
-293,
-292,
-288.;.
--286, .
-284,
-282.-280,
-279.
3.08:
11228
30A;
fbOc
feOb
fe.OF
324:
33C:
35C:
3SE:
3A2:
3AII:
feOO
Fe21
aal1
9a7110002
-'277 •
3AG:
fba8
-273,
,-272,
-'1,70,
-268
2FA:
8aOl
2FC:
e90000'I.B
300:
852.001ec
304:
725
726
727
P51
Development Board
The P51XADEMO supports the new 16-bit XA-G3
microcontroller from Philips. It provides the user with
an integrated hardware/software development tool,
allowing early verification of the prototype hardware and
system software.
P51XADEMO features
mm Fully emulates the XA-G3 in single-chip mode
" Does not Support external program
memory modes
Allows external RAM for data storage
$
II
mw
~-----------------------,
Integrated development environment for
MS WindowsTM 3.1
!
I
" Source code editor
.. XA macro assembler
,. Translator (8051 to XA)
" Source code debug
I
I
I
I
XA-G3
Emulation
Device
!~-----.I
RAM
I
Program:
Memory
I
I
I
\----------- ...!
'--,.----' I
I
I
I
,
Allows single stepping or real-time execution
r----',!"-"----,
!
,
I
!l@
~
87C451
Controller
32K of emulation RAM for user program
I
,I
___ ....._----------------'-,!
Allows display and/or modification of:
.. Registers, stack (user and supervisor)
~
:
PC, PSW
" Data variables by name
.. Source, listing, disassembly
Philips
Semiconductors
728
PHILIPS
The P51 XADEMO is a development tool that supports the
XA-G3 microcontroller. The emulator will run a user program in real-time, and allow full source code debugging,
including reading and writing all registers, RAM memory
locations and SFRs. The emulator is limited to debugging
only single-chip resources. The software included is a
Microsoft Windows-based integrated development environment. It consists of an editor, translator (8051 to XA),
assembler, simulator, debugger and emulator interface. The
translator is optimized to read· an input file that is compatible with the Metalink ASM51 assembler. Each line of
the file is converted to an equivalent line of XA code.
Pseudo-ops and directives are translated appropriately. The
XA assembler is an absolute macro assembler. A debug file
can be produced that is a superset of the IEEE 695
Circuit Board
Standard PC
RS-232
PC Host
MS Windows
d
.•.
User
Target
Cable ...
",
.,?,.
XA Single-Chip Mode
In-Circuit Emulator
standard. The emulator and simulator interface are built
into the development environment. Among the windows
available are the user's source code and listing file, Watch
Points, Breakpoints, Registers, CPU values, and SFRs. Any
values in these windows may be modified by the user.
Emulator Processors
The emulator has two microcontrollers. One is the emulation version of the
XA-G3. The other is an 80C451 which communicates with the host
computer and emulation device.
Host Characteristics
An IBM AT or compatible system running MS Windows 3.1 or later, one
AS-232 port available for emulator communication.
Assembler
The included macro assembler uses factory-specified mnemonics. It is an
absolute assembler and produces listing, debug (superset of IEEE 695),
hex and error files.
The emulator uses an on-board TIL-type canned oscillator to run the XA
emulation chip. The oscillator supplied with the emulator operates the XA at
20MHz. The user may replace this with another canned oscillator or crystal
to run at any desired speed up to 20MHz.
Emulation Restrictions
• The user's code may not use the Trace or Breakpoint
interrupts or vectors
• Eight words of system stack are used by the emulator
• Debug restricted to on-Chip code and data
Six months limited warranty, parts and labor.
Transiator
The included translator will read ASM51 or similar assembly language source
and output XA source. code. The translation is done on a line-by-line basis
and is an aid in porting code between the 8051 family and the XA.
Emulator interface
The emulator interface allows full source code and symbolic debugging of
assembler or compatible high-level languages. The interface reads in either
hex Object code or a superset of IEEE 695 debug file for symbolic and
source information.
All variables may be displayed by name and type. The user may choose
between hex, ASCII, and decimal displays in most windows.
Items :Supplied
The emulator comes as a complete package including the development
board/emulator, emulation cable with 25-pin host adapter, 120/220 volt
power supply, quick-start guide and documentation on line.
fh·,d."rj,nn
information
Part No. P51XADEMOSD
Order No. 9352-448-40112
for more information call your
Office or:
North America: Call 1-408-991-51 XA (5192)
IDea!
The user may specify up to ten breakpoints. These are used during real-time
emulation. Breakpoints are not inserted during single stepping.
729
Europe: Fax 31-40-2724825
Asia: Fax 852-2811-9173
80CSIXA
Software Development Tools
Software development tools for the XA
Philips provides standard software development tools for the XA family of microcontrollers. These software tools make up the
core elements of an integrated development environment urider Microsoft Windows. All three tools also work und~r DOS. They
consist of a cross-assembler. an assembly language translator. and an architectural software simulator.
The cross-assembler provides a standard environment for XA programming. The translator allows 80C51 code to be ported to
the XA. The software simulator acts as an immediately available test-bed for fresh code and provides several levels of errors and
warnings.
All three of these tools operate on a PC under Windows or DOS. The programs include hooks for use with development tools
from third-party vendors. including cross-assemblers. cross-compilers. and performance profilers.
The assembler/translator/simulator package is available free-of-charge from Philips. along with ensuing releases and updates. via a
bulletin board system (800-451-6644). Each program incudes context-sensitive help and on-line documentation.
r1,1$00
;start
p1ou.w ~1+.,1$00
;clear
MiIiM WI.IIMiNil-Iid".
ret
; Set up registers
initJeg:
P1ou.b r1L,1$56
p1ou.w r2,1$1234
ret
;set counter
;for sys init
Start of Plain loop
0117
HOP
0118 start:
call
0118
call
0118
011E
jPlP
0121
0122
0122
HOP
ADDED FOR WORD AL I GHMEH'
init iraPl
init:::reg
Plain
; ** ADDED FOR WORD ALIGHMEK
start
©1994 Macraigor Systems, Inc.
Philips
Semiconductors
PHILIPS
730
Standard XA Assembler
•
Functions as an absolute assembler
•
Supports macro development
•
Available under Windows and DOS (real and protected modes)
•
Defines factory-standard mnemonics
•
Imposes no limit on size of source or object code files
•
Supports a superset of IEEE 69S debug format
•
Provides numerous directives for source code listing
•
Outputs standard object files, list, and error files; compatible with various programmer's editors
•
Provides well-documented output files
•
Includes comprehensive, context-sensitive, on-line help
80CSI Assembly Code Translator
•
Accepts standard SOCSI code (Intel and MetaLink)
•
Supports all SOCSI derivatives
•
Available under Windows and DOS (real and protected modes)
•
Allows fast and efficient porting of SOCS I code libraries to the standard XA environment
•
Non-invasive direct translation (one XA instruction for each SOCSI instruction)
•
Flags NOPs, and problems associated with timing and code size along with possible optimization opportunities
•
Provides multiple levels ofwarnings, errors, and hints
•
Provides one-to-one listing of SOCSI input and resulting XA code
•
Provides well-documented output files including SOCSI and XA source code listings; preserves labels and comments
XA Software Simulator
•
Architectural simulator; covers CPU, one timer, and internal memory
•
Available under Windows and DOS (protected mode)
•
Supports numerous breakpoints, error highlighting, and cycle counting
•
Resettable cycle counter allows simple timing analysis
•
Provides hooks to support performance profiling of source code
•
Reads superset of IEEE 69S debug file format
•
Supports source-level debug for third party compilers
For more information call, 1·800·447.1500, ext. 1 143
98-8080-820-0 I
©1994 Philips Electronics North America Corporation. Printed in U.S.A., SP802 IIIOM/SRIII 294
731
USP-Sl Key Features
• Memory display or edit while your
code is executing in real-time
• View the trace during execution
• HLL Debug for C-51 and PUM-5l
• Pass-point to monitor internal RAM,
variables, and registers while running
• Real-time transparent emulation up
to 40 MHz
• 32K Frame by 80-bit execution trace
buffer with time stamp
• In-line symbolic assembler and
disassembler
• Up to 256K of emulation overlay
program RAM with bank switching
• Memory map in 256 byte blocks
• Up to 256K of real-time hardware
breakpoints
• Three complex events for trace,
sample trace, or break
• Two l6-bit pass counters
• 8 Level hardware event sequencer
• 8 Channel user logic state analyzer
• External trigger input and outputs
• Performance analysis histogram
• Wide range of uP pods to emulate most
8051 family members
• Windowed and command line user
interface
• 115 K-baud serial download, (64K
program downloads in 14 sec.)
User Interface
Designed to work with DOS, IBM-AT,
386/486 compatible computers, the
window/menu user interface gives you:
• ~op-up windows for source, registers
program, SFR's, trace, stack, setup,
symbols, locals, and variables watch
• HLL windows for C-5l and PL/M-5l
for source level debugging
• You may define your own watch
window for complex variables like
arrays and structures
• 132 by 60 Display, EGA, VGA
• Full screen edit with mouse support
• User defined SFR window
• Extensive macro program support
• You can define, save, and recall trigger
setups, breakpoints, trace, and complex
events to or from disk
• Locals window displays all local
variables automatically
Complex Events
A complex event is a set of conditions
that may be used to qualify emulation
breakpoints, event sequencer, or trace
filtering in real time. The system has
three complex event triggers available
that may be used for the following:
• 256K Address breakpoints induding
within and outside address ranges
• 16-Bit data pattern with less than,
greater than, equal, not equal, and
don't care combinations.
• Qualify on RD, WR, Int, instruction
fetch, and operand read
• External input with programmable
trigger polarity
All events may be count qualified or
delayed by two l6-bit pass counters.
Events also work with the eight level
sequencer to trigger from any setof
events or pass count condition.
Breakpoints
Breakpoints are used to stop user
program execution while preserving the
current program status. They may be
combinations of:
• Register values and internal RAM
• Addresses and address ranges
• Complex events
• Pass counts
• Sequenced events
• Trace buffer full
• External trigger input
Trace Buffer
The system trace buffer is a high speed
RAM that captures activity of the
microprocessor intenial bus and pins in
real time. A trace start/stop switch
allows you to filter unwanted information
from the captured data. The trace will
store up to 32K samples, (80 bit frames),
comprised of the following:
• Address Bus
• Data Bus
• Control signals
• I/O Pins
• Time Stamp
• User logic state input, (8 bits)
The trace may be started and stopped
by any combination of:
• Complex events
• Pass counts
• Event sequences
• Gocommand
• Trace full condition
The trace buffer also has a frame counter
to stop tracing after a specified number of
frames have been captured. This means
you may capture as much as 32K of small
program fragments at full target speed.
The trace contents can be viewed during
program execution without stopping
or slowing down the prototype
microcontroller.
Made and supported in the U.S.A.
SIGNUM SYSTEMS CORP., 171 E. Thousand Oaks Blvd., Thousand Oaks, CA 91360
Corp tel: (805) 371-4608. FAX (415) 371-4610. EMail Attmail!Signum. Sales tel: (415) 903-2220. FAX (415) 903-2221
732
Model USP-Sl
SPECIFICATIONS
Mfrs.
Target Processors
In-Circuit Pod
All
8031 80C32 80CSI FA
80C IS4 • 20/30/40 MHz
80C31/328XCSI/S2
8SCIS4· 16 MHz
80C321 • 16 MHz
80SIS - 80S3S· 12 MHz
80CS3S • 16 MHz
80CIS2JA/JB/JC/JD· 16 MHz
80CSIGB· 16 MHz
8SC154· 30 MHz
8XC552 • 16/20/24 MHz
8XC562 • 16/20/24 MHz
8X652/654 • 24 MHz
8XC4SI·16MHz
8XC85 I • 16 MHz
80C552 • 16/24 MH~
80C562 • 16/24 MHz
80C652/6S4 • 16/24 MHz
8XC75 I • 16 MHz
80C851 • 16 MHz
80C515A· 18 MHz
80C517 - 80C537 • 12 MHz
80C517A· 18 MHz
CSOI ·40 MHz
80CS37 • 12 MHz
K246· 16 MHz
POD31
All
AMD
AMD-Siemens
AMD Siemens
Intel
Intel
OKI
Philips/Signetics
Philips/Signetics
Philips/Signetics
Philips/Signetics
Philips/Signetics
Philips/Signetics
Philips/Signetics
Philips/Signetics
Philips/Signetics
Philips/Signetics
Siemens
Siemens
Siemens
Siemens
Siemens
Silicon Systems
In-Circuit Emulators
Maximum emulation speed
USP-51
USP-51-30
USP-51-40
USP-51-SS
Size
Operating temperature
Storage temperature
Operating humidity
Max. Emulation Program Memory
Program Memory Mapping
Data Memory Mapping
Pass counters
Trace Buffer
Event Time Stamp
Sequencer
User probe
PODSI
POD321
PODSIS
PODS3S
PODIS2
PODS 1GB
PODI54
PODXSS2
PODX562
PODX652
POD4S1
PODX85I
PODSS2
POD562
POD652
POD75 I
POD8S
POD515A
POD517
POD517A
PODSOI
PODS37
POD246
Host interface
File uploadldownloadformat
20 MHz
30 MHz
40 MHz
30 MHz (Silicon Systems)
260 x 260 x 64 mm
Oto 40 C
-1Ot065C
Oto 90%
256K
256 byte boundary
256 byte boundary
2 each, 16 bit
32 Kframes by 80 bits
32 bits, 100 ns resolution
8 level hardware
8 channel logic input
1 trigger input with gate
6 trigger outputs (Events,
Pass Counters, Sequencer)
Asynchronous RS-232C,
9600-115Kbaud, XONIXOFF
Intel HEXIAOMF, 2400AD,
Archimedes, BSOITasking,
Franklin, Keil
Main menu line
Source window
Status window
SFR window
Locals window
Macro &
command line
background
Real-time Trace
Message line
USP-Sl Screen Example
171 E. Thousand Oaks Blvd
Thousand Oaks, CA 91360
Tel: (805) 371-4608
FAX: (805) 371-4610
EMail: AHmail!Signum
733
800 EI Camino Real
Mountain View, CA 94040
Tel: (415) 903-2220
FAX: (415) 903-2221
SYSTEM GENERAL
Universal Device Programmers
SG Family of Universal
Device Programmers
* Full range of programming support
for Low Voltage devices from all
manufacturers
* Engineering and Production
Programmers for EPROMs,
EEPROMs, FLASH EPROMs,
PROMs, Microcontrollers, PLDs,
EPLDs, PALs, GALs, PEELs,
FPLAs, FPGAs, etc.
* Stand-alone & PC-remote Programmers
* AC/DC Parametric testing to provide
leakage test for ESD
* Unique patented Features Auto-sense
and Turbo-mapping provide extremely
high throughput and optimize yield
* Patented pin-driver technology
* Fully certified by most major
Semiconductor manufacturers
* Programmer of choice by many of
the IC Distributors at their
"Value-Added Programming Centers"
* Interface to automated handling
equipment
* Responsive, reliable technical support
* Lifetime Free SW Updates Available
Via BBS
System General has been manufacturing Device Programmers since 1985. In 1989 we began delivering IC Manufacturer approved solutions to the U.S. Market. Having become
the Number 1 Programmer Manufacturer in Asia, we are now
considered one of the "Big 3" programmer manufacturers in
the world by the Semi-Houses. We have been meeting high
volume requirements in harsh environments since inception.
Every programmer we make must pass a rigid burn-in procedure before being shipped out.
We offer a full range of programming solutions, so one is
bound to be the ideal fit for your application. Whether you are
a design engineer working on the most basic EPROM or PLD
development, or a manufacturing engineer with a high volume
requirement for programming Memory or Logic devices, we
have a very cost effective solution for you. We have also been
known to custom design our software to customer requirements.
SG's excellent device support and technical support are
widely renowned in the semiconductor industry. In most cases
we will be the first programmer manufacturer to support a new
device release. IC Manufacturer certification means that all the
Semi-Houses have SG test units to help support our customers. Our customer references are the best in the business!
Every System General programmer comes standard with
our easy-to-use DOS-based control SW, all the cabling you
need to get started, and an anti-static ground strap.
Call System General to find out more about the programmers that are fast becoming THE NEW industry standard!
Contact:
SYSTEM GENERAL CORPORATION
1603 A South Main Street
Milpitas, CA 95035
Phone: 1-800-967-4 PRO (1-800-967-4776)
(408) 263-6667
Fax:
(408) 262-9220
r=
Ordering information (See reverse)
SYSTEM
~GENERAL
734
APRO
Single socket Memory Programmer
$ 895.00
APRO·
As above. includes CMOS EPLDs
$t 295.00
Turpro-1
Universal IC-Programmer (Level 1)
$1695.00
Turpro-1/FX
Universal Production Programmer (Level 1)
$2495.00
Turpro-832
Gang EPROM Programmer
$1995.00
Turpro-832
(Set) Gang/Set EPROM Programmer
$2695.00
Turpro-840
Gang/Set EPROM/Micro Programmer
$3995.00
r=
SYSTEM
L::I GENERAL
P.O. Box 361898, Milpitas, CA 95036-1898 U.S.A.
Tel: 408-263-6667/Fax: 408-262-9220/1-800-967-4776
TURPRO-I/TX
TURPRO-832
• Universal programmer plus DC
parametric tester for Memory and
logic devices
• Unique leakage current test to
ensure device quality
• Interface to Unix, Apple, NEC under
VT100 modem mode
• High Speed pin driver for future High
Speed PlD.
• Universal Memory Gang/Set
Programmer, 8 at a Time
• Supports 24, 28 & 32 Pin Devices in
DIP/PlCC
• Stand-Alone and/or Computer
Remote Via RS232C From PC
• Parallel Port Fde Downloads for
High Speed Transfer
• Full Editor in Remote
• Device Auto-ID, Easy-To·Use
TURPRO-I/FX
• Universal Production Pin· Driven IC
Programmer
• Drop-in Replacement for Data I/O
Handler Interface
• Supports all Device Technologies
and Packages to 84 Pins and
beyond
• Vector Tests PlDs to 44 Pins
• Parallel Port File Downloads for
High Speed Transfer
TURPRO-I
• Universal Engineering Pin· Driven IC
Programmer
• Drop-In Replacement for Data I/O
• Supporls All Device Technologies
and Packages to 84 Pins and
beyond
• Vector Test PlDs to 44 Pins
APRO
TURPRO-840
• U'niversal Engineering Memory/
Micro Programmer
• Supports 24, 28, 32, 40 & 44 Pin
Devices In DIP/PlCC
• Computer Remote Via RS232C
From PC at 115.2K Baud
• Full Editor
• Device Auto-ID, Easy· To-Use
• Only $895. Optional EPlD Support
for $1,295
• Universal Memory/Micro Gang/Set
Programmer. 8 at a Time
• Supports 24, 28. 32. 40 & 44 Pin
Devices in DIP/PlCC
• Stand-Alone and/or Computer
Remote Via RS232C From PC
• Parallel Port File Downloads for
High Speed Transfer
• Full Editor in Remote
• Device Auto-ID. Easy·To·Use
System General Product
Comparison Chart
T-832
APRO
GANG
SET
T-840
T-1
T-1/FX
Programmer User Interface:
Standalone Programmi ng Operat ions
Must have PC to Operate
RS232 for Computer Remote Control
PC Interface Software
Parallel Port for High Speed Transfer
Operates with Device Handler
No
Yes
Yes
Yes
No
No
Yes
Yes
Yes
No
No
No
Opt
Opt
Opt
No
No
Yes
Yes
Yes
No
Yes
Yes
Yes
No
Yes
Yes
Yes
Yes
No
No
Yes
Yes
Yes
Yes
Yes
8 MEG
Yes
Yes
Yes
No
No
No
Yes
N/A
Yes
Yes
No
Yes
Opt
No
8 MEG
8 MEG
256K
8 MEG
Yes
N/A
N/A
Yes
lEVII
Yes
No
No
No
Yes
Yes
lEVII
Yes
No
No
No
Yes
Yes
No
No
No
No
No
Yes
N/A
No
No
No
No
No
No
Opt
Opt
No
No
No
No
No
No
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
N/A
Yes
No
No
No
No
No
Yes
Yes
Yes
No
lEV II
lEV I
lEV II
lEVlII
Yes
N/A
Yes
Yes
lEV II
lEV I
lEVII
lEVIII
Yes
Yes
Yes
Yes
Yes
$895
N/A
Yes
Yes
Yes
Yes
$1995
$ 700
Yes
Yes
Yes
Yes
$2695
Yes
Yes
Yes
Yes
$3995
N/A
N/A
Yes
Yes
No
Yes
$1695
$600 EA
Yes
Yes
Yes
Yes
$2495
$800 EA
Programmer Device Support:
Standard on-board RAM (Bits)
E/EPROMs (24,28 & 32-pin DIP)
FLASH EPROMS to 32-pi n DIP
EPROMs 40-pi n, 16bi t-wi de
GANG ElEPROMs to 32-pi n DIP
'SET" E/EPROMs to 32-pi n DIP
GANG/SET Meomori es to 40-pi n DIP
h
Sequent i a 1 'SET Programmi ng
40-pi n (! nte 1) Mi cros
Motorol a Mi cros
Bi pol ar RPOMs to 24-pi n DIP
PLDs to 28-pi n 0 I P
PLDs to 40-pi n DIP
PLDs to 84-pi n (& beyond)
Single PLCC Device Options
GANG PLCC E/EPROM Opt ions
Yes
No
Yes
Yes
No
N/A
Programmer Architecture:
Pi n Dri ver Archi tecture
Turbo Ma ppi ng Techno logy
Fast EPROM Programmi ng Speeds
Auto Sense Feature
Programmer Price:
Level Upgrade
Call Us Now For Turnkey Solutions
735
736
Philips Semiconductors
Section 8
Package Information
CONTENTS
Soldering. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
739
LQFP44:
plastic low profile quad flat package;
44 leads; body 10 x 10 x 1.4 mm ...................... SOT389-1
741
PLCC44:
plastic leaded chip carrier; 44 leads ................... SOT187-2
742
44-pin CerQuad J-Send (K) Package .................. 1472A .........
743
TQFP44:
plastic thin quad flat package;
44 leads; body 10 x 10 x 1.0 mm ...................... SOT376-1
744
LQFP64:
plastic low profile quad flat package; 64 leads;
body 10 x 10 x 1.4 mm .............................. SOT314-2
745
PLCC68:
plastic leaded chip carrier; 68 leads ................... SOT188-2
746
PLCC68:
plastic leaded chip carrier; 68 leads; pedestal ........... SOT188-3
747
737
738
Philips Semiconductors
Soldering
Package information
SURFACE MOUNTED PACKAGES
INTRODUCTION
There is no soldering method that is ideal for all IC packages. Wave
soldering is often preferred when though-hole and surface mounted
components are mixed on one printed-circuit board. However, wave
soldering is not always suitable for surface mounted ICs, or for
printed-circuits with high population densities. In these situations
reflow soldering is often used.
Table 2. Types of surface mounted packages
TYPE
This text gives a very brief insight to a complex technology. A more
in-depth account of soldering ICs can be found in our "Ie Package
Oatabook" (order code 9398 652 90011).
THROUGH-HOLE MOUNTED PACKAGES
Table 1. Types of through-hole mounted packages
DESCRIPTION
TYPE
DIP
plastic dual in-line package
SDIP
plastic shrink dual in-line package
HDIP
plastic heat-dissipating dual in-line package
DBS
plastic dual in-line bent from a single in-line package
SIL
plastic single in-line package
SO
SSOP
plastic shrink small outline package
TSSOP
plastic thin shrink small outline package
VSO
plastic very small outline package
QFP
plastic quad flat package
LQFP
plastic low profile quad flat package
SQFP
plastic shrink quad flat package
TQFP
plastic thin quad flat package
PLCC
plastic leaded chip carrier
Reflow soldering
Reflow soldering techniques are suitable for all SMD packages,
ease of soldering varies with the type of package as indicated in
Table 3.
The choice of heating method may be indluenced by larger plastic
packages (QFP or PLCC with 44 leads, or more). If infrared or vapor
phase heating is used and the large packages are not absolutely dry
(less than 0.1 % moisture content by weight), vaporization of the
small amount of moisture in them can cause cracking of the plastic
body. For more information on moisture prevention, refer to the
Drypack chapter in our "Quality Reference Manual"
(order code 9398 510 63011).
Soldering by dipping or wave
The maximum permissible temperature of the solder is 260°C;
solder at this temperature must not be in contact with the joint for
more than 5 seconds. The total contact time of successive solder
waves must not exceed 5 seconds.
The device may be mounted to the seating plane, but the
temperature of the plastic body must not exceed the specified
maximum storage temperature (T519 max). If the printed-circuit board
has been pre-heated, forced cooling may be necessary immediately
after soldering to keep the temperature within the permissible limit.
Reflow soldering requires solder paste (a suspension of fine solder
particles, flux and binding agent) to be applied to the printed-circuit
board by screen printing, stenciling or pressure-syringe dispensing
before package placement.
Several techniques exist for reflowing; for example, thermal
conduction by heated belt. Dwell times vary between 50 and
300 seconds depending on heating method. Typical reflow
temperatures range from 215 to 250°C.
Repairing soldered joints
Apply a low voltage soldering iron (less than 24V) to the lead(s) of
the package, below the seating plane or not more than 2mm above
it. If the temperature of the soldering iron bit is less than 300°C it
may remain in contact for up to 10 seconds. If the bit temperature is
between 300 and 400°C, contact may be up to 5 seconds.
Version: 1.0 - 1995 Jun 22
DESCRIPTION
plastic small outline package
Preheating is necessary to dry the paste and evaporate the binding
agent. Preheating duration: 45 minutes at 45°C.
739
Philips Semiconductors
Package information
Soldering
Table 3. Suitability of surface mounted packages for various soldering methods
Rating from 'a' to 'd': 'a' indicates most suitable (soldering is not difficult); 'd' indicates least suitable (soldering is achievable with difficulty).
REFlOW METHOD
TYPE
INFRARED
HOT BELT
HOT GAS
VAPOR PHASE
RESISTANCE
DOUBLE WAVE
METHOD
SO
a
a
a
a
d
a
SSOP
a
a
a
c
d
c
TSSOP
b
b
b
c
d
d
VSO
b
b
a
b
a
b
OFP
b
b
a
c
a
c
LOFP
b
b
a
c
d
d
SOFP
b
b
a
c
d
d
TOFP
b
b
a
c
d
d
PLCC
c
b
b
d
d
b
Wave soldering
During placement and before soldering, the package must be fixed
with a droplet of adhesive. The adhesive can be applied by screen
printing, pin transfer or syringe dispensing. The package can be
soldered after the adhesive is cured.
Wave soldering is not recommended for SSOP, TSSOP, OFP,
LOFP, SQFP or TOFP packages. This is because of the likelihood of
solder bridging due to closely-spaced leads and th'e possibility of
incomplete solder penetration in multi-lead devices.
Maximum permissible solder temperature is 260°C, and maximum
duration of package immersion in solder is 10 seconds, if cooled to
less than 150°C within 6 seconds. Typical dwell time is 4 seconds at
250°C.
If wave soldering cannot be avoided, the following conditions must
be observed:
• A double-wave (a turbulent wave with high upward pressure
A mildly-activated flux will eliminate the need for removal of
corrosive residues in most applications.
followed by a smooth laminar wave) soldering technique should
be used.
• For SSOP, TSSOP and VSO packages, the longitudinal axis of
the package footprint must be parallel to the solder flow and must
incorporate solder theives at the downstream end.
Repairing soldered joints
Fix the component by first soldering two diagonally-opposite end
leads. Use only a low voltage soldering iron (less than 24V) applied
to the flat part of the lead. Contact time must be limited to
10 seconds at up to 300°C. When using a dedicated tool, all other
leads can be soldered in one operation within 2 to 5 seconds at
between 270 and 320°C.
• For OFP, LOFP and TOFP packages, the footprint must be at and
angle of 45° to the board direction and must incorporate solder
thieves downstream and at the side corners.
Even with these conditions, only consider wave soldering for the
following package types:
• SO
·VSO
• PLCC
• SSOP only with body width 4.4mm, e.g., SSOP16 (SOT369-1)
or SSOP20 (SOT266-1).
• OFP except OFP52 (SOT379-1), OFP100 (SOT317-1, SOT317-2
and SOT382-1) and OFP160 (SOT322-1); these are not suitable
for wave soldering.
• LOFP except LOFP32 (SOT401-1), LOFP48 (SOT313-1,
SOT313-2), LOFP64 (SOT314-2), LOFP80 (SOT315-1); these
are not suitable for wave soldering.
• TOFP except TOFP64 (SOT357-1), TOFP80 (SOT375-1) and
TOFP100 (SOT386-1); these are not suitable for wave soldering.
SOFP are not suitable for wave soldering.
Version: 1.0 - 1995 Jun 22
740
Philips Semiconductors
Package outlines
LQFP44:
SOT389-1
plastic low profile quad flat package; 44 leads; body 10 x 10 x 1.4 mm
231!1
33
i
34
--t:::J::::3I-- - - - -
+ ----
--lEEl--
E HE
~-------HD------~'-;~~~~
o
2.5
I " , ! I"
5 mm
t, I
scale
DIMENSIONS (mm are the original dimensions)
UNIT
mm
A
max.
A1
A2
1.60
0.15
0.05
1.45
1.35
A3
bp
c
0.25
0.45
0.30
0.20
0.12
E(1)
0(1)
e
Ho
HE
12.15 12.15
10.10 10.10
9.90 9.90 0.80 11.85 11.85
L
Lp
Q
1.0
0.75
0.45
0.70
0.57
v
0.20
w
0.20
y
0.10
Zo(1) ZE(1)
e
1.14
0.85
7°
0°
1.14
0.85
Note
1. Plastic or metal protrusions of 0.25 mm maximum per side are not included.
OUTLINE
VERSION
SOT389-1
1995 Dec 19
REFERENCES
IEC
I
I
JEDEC
I
EIAJ
I
I
I
741
EUROPEAN
PROJECTION
£3-$
ISSUE DATE
95-12-19
Philips Semiconductors
Package outlines
PLCC44:
50T187-2
plastic leaded chip carrier; 44 leads
I
-----+----pin 1 index
I
I
I
I
'-"------0-------+1--1
,4--------Ho-------~~§I~~D
5
10mm
I
I
scale
DIMENSIONS (millimetre dimensions are derived from the original inch dimensions)
UNIT
A
mm
4.57
4.19
Al
min.
0.51
A3
A4
max.
bp
bl
0.25
3.05
0.53
0.33
0.81
0.66
0.180
inches
0.Q1
0.165 0.020
0(1)
E(l)
e
eO
16.66 16.66
1.27
16.51 16.51
0.021 0.032 0.656 0.656
0.12
0.05
0.013 0.026 0.650 0.650
eE
Ho
HE
k
16.00 16.00 17.65 17.65 1.22
14.99 14.99 17.40 17.40 1.07
kl
max.
Lp
v
w
y
0.51
1.44
1.02
0.18
0.18
0.10
ZO(l) ZE(l)
max. max.
2.16
~
2.16
0.630 0.630 0.695 0.695 0.048
0.057
0.020
0.007 0.007 0.004 0.085 0.085
0.590 0.590 0.685 0.685 0.042
0.040
45°
Note
1. Plastic or metal protrusions of 0.01 inches maximum per side are not included.
REFERENCES
OUTLINE
VERSION
IEC
80T187·2
112El0
1995 Feb 25
I
I
JEDEC
MO-047AC
I
EIAJ
I
I
I
742
EUROPEAN
PROJECTION
-E3~
ISSUE DATE
~
95-02-25
1-"
~
<0
<0
-....I
I\)
"'Tl
C1>
0I\)
CD
I~
I\)
l>
:I>
a
(]I
~
3.05 (0.120)
2.29 (0.090)
ftL
=)1_
0.38 (0.015)
&
0.51 (O.02)X45 0
&
NOTES:
1. All dimensions and tolerances to conform
to ANSI Y14.5-1982.
~
UV window is optional.
J:J
~
Dimensions do not include glass protrusion.
Glass protrusion to be 0.005 inches maximum
on each side.
4. Controlling dimension millimeters.
5. All dimensions and tolerances include
lead trim offset and lead plating finish.
&
~
~
-t.
Z
o
m
Backside solder relief is optional and
dimensions are for reference only.
o
c:
l>
C
C-
o,
m
z
c
:g
;g
o
"m
l>
G')
0.73 ± 0.08 (0.029 ± 0.003)
~
c.u
45°TYP.
4 PLACES
,
0.076 (0.003) MIN.
-.L
n
1.02 ± 0.25 (0.040 ± 0.010)
SEE DETAILA
SEATING
PLANE
0.508 (0.020) R MIN.
I--- 0.482 (0.019 ± 0.002)
DETAIL A
TYP. ALL SIDES
mm/(inch)
DETAIL B
mm/(inch)
\)
"1J
~
-6'
(')
U>
7'
3
o·
0>
0>
CO
CD
o
C
!::to
:::J
CD
en
U>
C1>
o
::J
a.
c::
no
en
Philips Semiconductors
Package outlines
TQFP44:
SOT376·1
plastic thin quad flat package; 44 leads; body 10 x 10 x 1.0 mm
+di (( bJ4
HHH
er
H H
m-u )) \6
I
I
I
I
I
I
~~-----+-----I
I
~--------------HD---------------"~-L-L~~
o
,
I
2.5
I
5mm
,
,
I
scale
DIMENSIONS (mm are the original dimensions)
UNIT
A
max.
Al
A2
A3
bp
c
0(1)
E(l)
e
mm
1.2
0.15
0.05
1.05
0.95
0.25
0.45
0.30
0.18
0.12
10.1
9.9
10.1
9.9
0.8
Ho
HE
12.15 12.15
11.85 11.85
I-
I-p
Q
v
w
y
1.0
0.75
0.45
0.50
0.36
0.2
0.2
0.1
Zo(l) ZE(l)
1.2
0.8
1.2
0.8
e
7°
0°
Note
1. Plastic or metal protrusions of 0.25 mm maximum per side are not included.
OUTLINE
VERSION
SOT376-1
1996 Apr02
REFERENCES
IEC
I
I
JEDEC
I
EIAJ
I
I
I
744
EUROPEAN
PROJECTION
E3~
ISSUE DATE
~
96-04-02
Philips Semiconductors
Package outlines
LQFP64:
SOT314-2
plastic low profile quad flat package; 64 leads; body 10 x 10 x 1.4 mm
48
49
----------~I~~B
1-----------HD----------~~~~~I-v@~IB~1
o
2.5
5 mm
....o.......Jw'
L . . '. ., . . .. . . . . . . . . . . . . . . .L . . '. . . . . . . . .
scale
DIMENSIONS (mm are the original dimensions)
UNIT
A
max.
Al
A2
A3
bp
c
0(1)
E(l)
e
mm
1.60
0.20
0.05
1.45
1.35
0.25
0.27
0.17
0.18
0.12
10.1
9.9
10.1
9.9
0.5
Ho
HE
12.15 12.15
11.85 11.85
L
Lp
Q
v
w
y
1.0
0.75
0.45
0.69
0.59
0.2
0.12
0.1
ZO(l) ZE(l)
e
1.45
1.05
7°
0°
1.45
1.05
Note
1. Plastic or metal protrusions of 0.25 mm maximum per side are not included.
OUTLINE
VERSION
50T314-2
1995 Dec 19
REFERENCES
IEC
I
I
JEDEC
I
EIAJ
I
I
I
745
EUROPEAN
PROJECTION
-E3@
ISSUE DATE
~
95-12-19
Philips Semiconductors
Package outlines
PLCC68:
SOT188-2
plastic leaded chip carrier; 68 leads
1
I
1
I
_ _ _ _ _ _ 1_ _ _ _ _ _ _
I
1
I
1
I
1
~--------------D---------------.~
~-----------HD------------~~~~~
5
10mm
!
,
I
scale
DIMENSIONS (millimetre dimensions are derived from the original inch dimensions)
UNIT
A
A1
min.
A3
A4
max.
bp
b1
mm
4.57
4.19
0.51
0.25
3.30
0.53
0.33
0.81
0.66
inches
0.180
0,01
0.165 0.020
0(1)
E(1)
e
eo
eE
Ho
HE
24.33 24.33
23.62 23.62 25.27 25.27
1.27
24.13 24.13
22.61 22.61 25.02 25.02
k
k1
max.
Lp
v
w
y
1.22
1.07
0.51
1.44
1.02
0.18
0.18
0.10
ZO(1) ZE(1)
max. max.
2.16
~
2.16
0.930 0.930 0.995 0.995 0.048
0.057
0.021 0.032 0.958 0.958
0.13 0.013 0.026 0.950 0.950 0.05 0.890 0.890 0.985 0.985 0.042 0.020 0.040 0.007 0.007 0.004 0.085 0.085
45°
Note
1. Plastic or metal protrusions of 0.01 inches maximum per side are not included.
OUTLINE
VERSION
SOT188-2
1995 Mar 11
REFERENCES
IEC
I
JEDEC
112E10
I
MO-047AC
I
EIAJ
I
I
I
746
EUROPEAN
PROJECTION
E3
ISSUE DATE
~
95-03-11
Philips Semiconductors
Package outlines
PLCC68:
SOT188-3
plastic leaded chip carrier; 68 leads; pedestal
€:n~n~
uu
uu
•
1-----.0 j ------1
60
44 _ _ _ •
eE
~
A
1
_1_
"" ......
I
1
/
....... ,
I
"- \.
/
\
/
E>---t - -- -
I
\
--1- - - - - -
I
pi~ 1 index
I
\
\.
I
1
"- ,
.......
-1-- -
I
-...,---
......
I
"" /
I
1 4 1 - - - - - - - - - D --------~M-l
14---------------HD--------------~
5
,
10mm
I
,
I
scale
DIMENSIONS (millimetre dimensions are derived from the original inch dimensions)
UNIT
A
mm
4.57
4.19
A1
min.
0.13
A3
0.25
A4
max.
bp
b1
3.05
0.53
0.33
0.81
0.66
0(1)
E(1)
e
eO
24.33 24.33
1.27
24.13 24.13
eE
Ho
HE
23.62 23.62 25.27 25.27
22.61 22.61 25.02 25.02
k
1.22
1.07
£IJ
15.34
15.19
Lp
v
w
y
1.44
1.02
0.18
0.18
0.10
ZO(1) ZE(1)
13
max. max.
2.06
2.06
45°
0.180
inches
0.165 0.005
0.01
0.12
0.021 0.032 0.958 0.958
0.05
0.013 0.026 0.950 0.950
0.930 0.930 0.995 0.995 0.048 0.604 0.057
0.007 0.007 0.004 0.081 0.081
0.890 0.890 0.985 0.985 0.042 0.598 0.040
Note
1. Plastic or metal protrusions of 0.01 inches maximum per side are not included.
REFERENCES
OUTLINE
VERSION
IEC
SOT188-3
112E10
1995 Feb 25
I
I
JEDEC
MO·047AE
I
EIAJ
I
I
I
747
EUROPEAN
PROJECTION
-E3
ISSUE DATE
~
95-02-25
748
Philips Semiconductors
Section 9
Data Handbook System
749
Philips Semiconductors
Data handbook system
DATA HANDBOOK SYSTEM
Discrete Semiconductors
Philips Semiconductors data handbooks contain all pertinent
data available at the time of publication and each is revised
and reissued regularly.
Book
Title
SC01
Small-signal and Medium-power Diodes
SC02
Power Diodes
SC03
Thyristors and Triacs
SC04
Small-signal Transistors
SC05
Video Transistors and Modules for Monitors
SC06
High-voltage and Switching NPN Power
Transistors
SC07
Small-signal Field-effect Transistors
Loose data sheets are sent to subscribers to keep them
up-to-date on additions or alterations made during the
lifetime of a data handbook.
Catalogs are available for selected product ranges (some
catalogs are also on floppy discs).
Our data handbook titles are listed here.
Integrated Circuits
Book
Title
IC01
Semiconductors for Radio and Audio Systems
IC02
Semiconductors for Television and Video Systems
IC03
Semiconductors for Wired Telecom Systems
IC04
HE4000B Logic Family CMOS
IC05
Advanced Low-power Schottky (ALS) Logic
IC06
SCOSa
RF Power Transistors for HF and VHF
SCOSb
RF Power Transistors for UHF
SC09
RF Power Modules and Transistors for Mobile
Phones
SC13a
Power MaS Transistors
including TOPFETs and IGBTs
High-speed CMOS Logic Family
SC13b
Small-signal and Medium-power MaS Transistors
IC11
General-purpose/Linear ICs
SC14
RF Wideband Transistors
IC12
12C Peripherals
SC15
Microwave Transistors (new version planned)
IC13
Programmable Logic Devices (PLD)
SC16
Wideband Hybrid IC Modules
IC14
S04S-based S-bit Microcontrollers
SC17
Semiconductor Sensors
IC15
FAST TTL Logic Series
Professional Components
PC06
IC16
CMOS ICs for Clocks and Watches
IC17
Semiconductors for Wireless Communications
IC1S
Semiconductors for In-Car Electronics
IC19
ICs for Data Communications
IC20
SOC51-based S-bit Microcontrollers
IC22
Multimedia ICs
IC23
BiCMOS Bus Interface Logic
IC24
Low Voltage CMOS & BiCMOS Logic
IC25
16-bit SOC51XA Microcontrollers
(eXtended Architecture)
IC26
IC Package Databook
IC27
Complex Programmable Logic Devices
1997 Mar27
Circulators and Isolators
MORE INFORMATION FROM PHILIPS SEMICONDUCTORS?
For more information about Philips Semiconductors data
handbooks, catalogs and subscriptions, contact your nearest
Philips Semiconductors national organization, select from
the address list on the back cover of this handbook.
Product specialists are at your service and inquiries are
answered promptly.
750
Philips Semiconductors
Data handbook system
MORE INFORMATION FROM PHILIPS
COMPONENTS?
For more information contact your nearest Philips
Components national organizaiton shown in the following list.
OVERVIEW OF PHILIPS COMPONENTS
DATA HANDBOOKS
Our sister product division, Philips Components, also has a
comprehensive data handbook system to support their
products. Their data handbook titles are listed here.
Argentina: BUENOS AIRES, Tel. (01) 786 7635, Fax. (01) 786 9367.
Australia: NORTH RYDE, Tel. (02) 98054455, Fax. (02) 98054466.
Austria: WIEN, Tel. (01) 601 011241, Fax. (01) 601011211.
Belarus: MINSK, Tel. (5172) 200 915, Fax. (5172) 200773.
Benelux: EINDHOVEN, Tel. (+31 40) 2783 749, Fax. (+31 40) 2788 399.
Brazil: SAO PAULO, Tel. (011) 8212333, Fax (011) 8291849.
Canada: SCARBOROUGH, Tel. (0416) 292 5161, Fax. (0416) 754 6248.
China: SHANGHAI, Tel. (021) 6485 0600, Fax. (021) 6485 5615.
Columbia: BOGOTA, Tel. (01) 3458713, Fax (01) 345 8712.
Denmark: COPENHAGEN, Tel. (32) 883 333, Fax. (31) 571 949.
Finland: ESPOO, Tel. 9 (0)-615 800, Fax. 9 (0)·615 80510.
France: SURESNES, Tel. (01) 4099 6161, Fax, (01) 4099 6427.
Germany: HAMBURG, Tel. (040) 2489-0, Fax. (040) 24891400.
Greece: TAVROS, Tel. (01) 4894 339/(01) 4894 239, Fax. (01) 4814 240.
Hong Kong: KOWLOON, Tel. 2784 3000, Fax. 2784 3003.
India: BOMBAY, Tel. (022) 4938 541, Fax. (022) 4938 722.
Indonesia: JAKARTA, Tel. (021) 520 1122, Fax. (021) 520 5189.
Ireland: DUBLIN, Tel. (01) 7640203, Fax. (01) 76 40 210.
Israel: TEL AVIV, Tel (03) 6450444, Fax. (03) 6491 007.
Italy: MILANO, Tel. (02) 6752 2531, Fax. (02) 67522557.
Japan: TOKYO, Tel. (03) 3740 5028, Fax. (03) 3740 0580.
Korea (Republic of): SEOUL, Tel. (02) 7091472, Fax. (02) 7091480.
Malaysia: PULAU PINANG, Tel. (04) 657 0055, Fax. (04) 656 5951.
Mexico: EL PASO, Tel. (915) 7724020, Fax. (915) 7724332.
New Zealand: AUKLAND, Tel. (09) 8494160, Fax. (09) 849 7811.
Norway: OSLO, Tel. (22) 748000, Fax (22) 748341.
Pakistan: KARACHI, Tel. (021) 5874641-49, Fax. (021) 577 035/(021) 5874546.
Philippines: MANILA, Tel. (02) 816 6380, Fax. (02) 817 3474.
Poland: WARSZAWA, Tel. (022) 612 2594, Fax. (022) 6122327.
Portugal: LlNDA-A-VELHA, Tel. (01) 416 3160/416 3333,
Fax. (01) 416 3174/416 3366.
Russia: MOSCOW, Tel (095) 247 9124, Fax. (095) 247 9132.
Singapore: SINGAPORE, Tel. 3502000, Fax. 3551758.
South Africa: JOHANNESBURG, Tel. (011) 470 5911, Fax. (011) 470 5494.
Spain: BARCELONA, Tel. (93) 301 63 12, Fax. (93) 301 4243.
Sweden: STOCKHOLM, Tel. (+46) 86322000, Fax. (+46) 8 632 2745.
Switzerland: ZORICH, Tel. (01) 488 2211, Fax. (01) 48177 30.
Taiwan: TAIPEI, Tel. (02) 3887666, Fax. (02) 382 4382.
Thailand: BANGKOK, Tel. (02) 745 4090, Fax. (02) 398 0793.
Turkey: ISTANBUL, Tel. (0212) 279 2770, Fax. (0212) 282 6707.
Ukraine: KIEV, Tel (044) 268 7327, Fax. (044) 268 6323.
United Kingdom: DORKING, Tel. (01306) 512000, Fax. (01306) 512 345.
United States:
• JUPITER, FL, Tel. (561) 745 3300, Fax. (561) 745 3600.
• ANN ARBOR, MI, Tel. (313) 996 9400, Fax. (313) 761 2776.
• SAUGERTIES, NY, Tel. (914) 246 2811, Fax (914) 246 0487.
Uruguay: MONTEVIDEO, Tel. (02) 704 044, Fax (02) 920 601.
Display Components
Book
Title
DC01
Colour Television Tubes
DC02
Monochrome Monitor Tubes and Deflection Units
DC03
Television Tuners, Coaxial Aerial Input
Assemblies
DC04
Colour Monitor Tubes
DC05
Flyback Transformers, Mains Transformers and
General-purpose FXC Assemblies
Magnetic Products
MA01
Soft Ferrites
MA03
Piezoelectric Ceramics
Specialty Ferrites
MA04
Dry-reed Switches
Passive Components
PA01
Electrolytic CapaCitors
PA02
Varistors, Thermistors and Sensors
PA03
Potentiometers
PA04
Variable Capacitors
PA05
Film Capacitors
PA06
Ceramic Capacitors
PA08
Fixed Resistors
PA10
Quartz Crystals
PA11
Quartz Oscillators
For all other countries apply to:
Philips Components.
Marketing Communications,
P.O. Box 218,
5600 MD, EINDHOVEN, The Netherlands
Fax. +31-40-2724547.
1997 Mar 27
751
Philips Semiconductors
North American Sales Offices, Representatives
and Distributors
PHILIPS
SEMICONDUCTORS
811 East Arques Avenue
P.O. Box 3409
Sunnyvale, CA 94088-3409
ALABAMA
Huntsville
Philips Semiconductors
Phone: (205) 464-0111
(205) 464-9101
Elcom, Inc.
Phone: (205) 830-4001
ARIZONA
Scottsdale
Thom Luke Sales, Inc.
Phone: (602) 451-5400
TemR e
P ilips Semiconductors
Phone: (602) 820-2225
CALIFORNIA
Calabasas
Philips Semiconductors
Phone: (818) 880-6304
Centaur Corporation
Phone: (818) 878-5800
Irvine
Philips Semiconductors
Phone: (714) 453-0770
Centaur Corporation
Phone: (714) 261-2123
Loomis
B.A.E. Sales, Inc.
Phone: (916) 652-6777
San Diego
Philips Semiconductors
Phone: (619) 560-0242
San Jose
B.A.E. Sales, Inc.
Phone: (408) 452-8133
Sunnyvale
Philips Semiconductors
Phone: (408) 991-3737
COLORADO
Englewood
Philips Semiconductors
Phone: (303) 792-9011
Thom Luke Sales, Inc.
Phone: (303) 649-9717
CONNECTICUT
Wallingford
JEBCO
Phone: (203) 265-1318
FLORIDA
Clearwater
Conley and Assoc., Inc.
Phone: (813) 572-8895
Oviedo
Conley and Assoc., Inc.
Phone: (407) 365-3283
ILLINOIS
Itasca
Philips Semiconductors
Phone: (708) 250-0050
Schaumburg
Micro-Tex, Inc.
Phone: (708) 885-8200
INDIANA
Indianapolis
Mohrfield Marketing, Inc.
Phone: (317) 546-6969
Kokomo
Philips Semiconductors
Phone: (765) 459-5355
MARYLAND
Columbia
Third Wave Solutions, Inc.
Phone: (410) 290-5990
MASSACHUSETTS
Chelmsford
JEBCO
Phone: (508) 256-5800
Westford
Philips Semiconductors
Phone: (508) 692-6211
MICHIGAN
Novi
Philips Semiconductors
Phone: (810) 347-1700
Mohrfield Marketing, Inc.
Phone: (810) 380-8100
MINNESOTA
Bloomington
High Technology Sales
Phone: (612) 844-9933
MISSOURI
Bridgeton
Centech, Inc.
Phone: (314) 291-4230
Raytown
Centech, Inc.
Phone: (816) 358-8100
NEW JERSEY
Toms River
Philips Semiconductors
Phone (908) 505-1200
(908) 240-1479
NEW YORK
Ithaca
Bob Dean, Inc.
Phone: (607) 257-0007
Rockville Centre
S-J Associates
Phone: (516) 536-4242
Wappingers Falls
Philips Semiconductors
Phone: (914) 297-4074
Bob Dean, Inc.
Phone: (914) 297-6406
Charlotte
Elcom,. Inc.
Phone: (704) 543-1229
Raleigh
Elcom, Inc.
Phone: (919) 743-5200
OHIO
Columbus
Great Lakes Group, Inc.
Phone: (614) 885-6700
Kettering
Great Lakes Group, Inc.
Phone: (513) 298-7322
Solon
Great Lakes Group, Inc.
Phone: (216) 349-2700
OREGON
Beaverton
Philips Semiconductors
Phone: (503) 627-0110
Western Technical Sales
Phone: (503) 644-8860
PENNSYLVANIA
Erie
S-J Associates, Inc.
Phone: (216) 888-7004
Hatboro
Delta Technical Sales, Inc.
Phone: (215) 957-0600
Pittsburgh
S-J Associates, Inc.
Phone: (216) 349-2700
TENNESSEE
Dandridge
Philips Semiconductors
Phone: (615) 397-5053
TEXAS
Austin
Philips Semiconductors
Phone: (512) 339-9945
OM Associates
Phone: (512) 794-9971
Houston
Philips Semiconductors
Phone: (281) 999-1316
OM Associates
Phone: (713) 376-6400
Richardson
Philips Semiconductors
Phone: (972) 644-1610
(972) 705-9555
OM Associates
Phone: (972) 690-6746
UTAH
Salt Lake City
Electrodyne
Phone: (801) 264-8050
Waukesha
Micro-Tex, Inc.
Phone: (414) 542-5352
CANADA
PHILIPS
SEMICONDUCTORS
CANADA, LTD.
Calgary, Alberta
Philips Semiconductors!
Components, Inc.
Phone: (403) 735-6233
Tech-Trek, Ltd.
Phone: (403) 241-1719
Kanata, Ontario
Philips Semiconductors
Phone: (613) 599-8720
Tech-Trek, Ltd.
Phone: (613) 599-8787
Montreal, Quebec
Philips Semiconductors!
Components, Inc.
Phone: (514) 956-2134
Mississauga, Ontario
Tech-Trek, Ltd.
Phone: (416) 238-0366
Richmond, B.C.
Tech-Trek, Ltd.
Phone: (604) 276-8735
Scarborough, Ontario
Philips Semiconductors!
Components, Ltd.
(416) 292-5161
Ville St. Laurent, Quebec
Tech-Trek, Ltd.
Phone: (514) 337-7540
MEXICO
Anzures Section
Philips Components
Phone: +9-5 (800)234-7381
EIPaso,TX
Philips Components
Phone: (915) 775-4020
PUERTO RICO
Caguas
Mectron Group
Phone: (809) 746-3522
DISTRIBUTORS
Contact one of our
local distributors:
Allied Electronics
Anthem Electronics
Arrow/Schweber Electronics
Future Electronics
Hamilton Hallmark
Marshall Industries
Newark Electronics
Penstock
Richardson Electronics
Zeus Electronics
WASHINGTON
GEORGIA
NORTH CAROLINA
Bellevue
Western Technical Sales
Phone: (206) 641-3900
Norcross
Elcom, Inc.
Phone: (770) 447-8200
Cary
Philips Semiconductors
Phono (919) 462 1332
Spokane
Western Technical Sales
Phone: (509) 922-7600
(C)Philips Electronics North America Corporation 1~)(ll Prrnllld inlJ.S.A.
WISCONSIN
04/04/97
Philips Semiconductors - a worldwide company
Argentina: see South America
Australia: 34 Waterloo Road, NORTH RYDE, NSW 2113,
Tel. +61 298054455, Fax. +61 298054466
Austria: Computerstr. 6, A-1101 WIEN, P.O. Box 213,
Tel. +43 1 60101, Fax. +431 601011210
Belarus: Hotel Minsk Business Center, Bid. 3, r. 1211, Volodarski Str. 6,
220050 MINSK, Tel. +375 172200733, Fax. +375 172 200 773
Belgium: see The Netherlands
Brazil: see South America
Bulgaria: Philips Bulgaria Ltd., Energoproject, 15th floor,
51 James Bourchier Blvd., 1407 SOFIA,
Tel. +359 2 689 211, Fax. +3592689102
Canada: PHILIPS SEMICONDUCTORS/COMPONENTS,
Tel. +1 8002347381
ChinaiHong Kong: 501 Hong Kong Industrial Technology Centre,
72 Tat Chee Avenue, Kowloon Tong, HONG KONG,
Tel. +85223197888, Fax. +852 2319 7700
Colombia: see South America
Czech Republic: see Austria
Denmark: Prags Boulevard 80, PB 1919, DK-2300 COPENHAGEN S,
Tel. +45 32 88 2636, Fax. +4531 570044
Finland: Sinikalliontie 3, FIN-02630 ESPOO,
Tel. +358 9 615800, Fax. +358 9 61580920
France: 4 Rue du Port-aux-Vins, BP317, 92156 SURESNES Cedex,
Tel. +331 40996161, Fax. +33140996427
Germany: Hammerbrookstra~e 69, D-20097 HAMBURG,
Tel. +494023 53 60, Fax. +4940 23 536 300
Greece: No. 15, 25th March Street, GR 17778 TAVROS/ATHENS,
Tel. +30 14894339/239, Fax. +30 14814240
Hungary: see Austria
India: Philips INDIA Ltd., Shivsagar Estate, A Block, Dr. Annie Besant Rd.,
Worli, MUMBAI400 018, Tel. +91 224938 541, Fax. +91 224938 722
Indonesia: see Singapore
Ireland: Newstead, Clonskeagh, DUBLIN 14,
Tel. +353 1 7640 000, Fax. +353 1 7640200
Israel: RAPAC Electronics, 7 Kehilat Saloniki St, PO Box 18053,
TEL AVIV 61180, Tel. +972 3 645 0444, Fax. +972 3 649 1007
Italy: PHILIPS SEMICONDUCTORS, Piazza IV Novembre 3,
20124 MILANO, Tel. +39 2 6752 2531, Fax. +3926752 2557
Japan: Philips Bldg. 13-37, Kohnan 2-chome, Minato-ku, TOKYO 108,
Tel. +81 337405130, Fax. +81 337405077
Korea: Philips House, 260-199 Itaewon-dong, Yongsan-ku, SEOUL,
Tel. +82 2 7091412, Fax. +8227091415
Malaysia: No. 76 Jalan Universiti, 46200 PETALING JAYA, SELANGOR,
Tel. +6037505214, Fax. +6037574880
Mexico: 5900 Gateway East, Suite 200, EL PASO, TEXAS 79905,
Tel. +9-5 800 234 7381
Middle East: see Italy
Netherlands: Postbus 90050, 5600 PB EINDHOVEN, Bldg. VB,
Tel. +31 402782785, Fax. +31 402788399
New Zealand: 2 Wagener Place, C.P.O. Box 1041, AUCKLAND,
Tel. +6498494160, Fax. +64 9 849 7811
Norway: Box 1, Manglerud 0612, OSLO,
Tel. +4722748000, Fax. +4722748341
Philippines: Philips Semiconductors Philippines Inc.,
106 Valero St. Salcedo Village, P.O. Box 2108 MCC, MAKATI,
Metro MANILA, Tel. +6328166380, Fax. +63 2 8173474
Poland: UI. Lukiska 10, PL 04-123 WARSZAWA,
Tel. +48226122831, Fax. +48226122327
Portugal: see Spain
Romania: see Italy
Russia: Philips Russia, UI. Usatcheva 35A, 119048 MOSCOW,
Tel. +70957556918, Fax +7 095 755 6919
Singapore: Lorong 1, Toa Payoh, SINGAPORE 1231,
Tel. +65350 2538, Fax. +65251 6500
Slovakia: see Austria
Slovenia: see Italy
South Africa: SA PHILIPS Ply Ltd., 195-215 Main Road Martindale,
2092 JOHANNESBURG, P.O. Box 7430, Johannesburg 2000,
Tel. +27114705911, Fax. +2711 4705494
South America: Rua do Rocio 220, 5th Floor, Suite 51,
04552-903 Sao Paulo, SAO PAULO-SP, Brazil,
Tel. +5511 821 2333, Fax. +5511 8291849
Spain: Balmes 22, 08007 BARCELONA,
Tel. +343301 6312, Fax. +343 301 4107
Sweden: Kottbygatan 7, Akalla. S-16485 STOCKHOLM,
Tel. +46 8 632 2000, Fax. +4686322745
Switzerland: Allmendstrasse 140, CH-8027 ZORICH,
Tel. +4114882686, Fax. +411 481 7730
Taiwan: Philips Semiconductors, 6F, No. 96, Chien Kuo N. Rd., Sec. 1,
TAIPEI, Taiwan, Tel. +886221342865, Fax. +886221342874
Thailand: PHILIPS ELECTRONICS (THAILAND) Ltd.,
209/2 Sanpavuth-Bangna Road Prakanong, BANGKOK 10260,
Tel. +66 2 745 4090, Fax. +6623980793
Turkey: Talatpasa Cad. No.5, 80640 GOLTEPElISTANBUL,
Tel. +90 212 279 2770, Fax. +90 212 282 6707
Ukraine: PHILIPS UKRAINE, 4 Patrice Lumumbastr., Building B, Floor 7,
252042 KIEV, Tel. +38044 264 2776, Fax. +38044 268 0461
United Kingdom: Philips Semiconductors Ltd., 276 Bath Road, Hayes,
MIDDLESEX UB3 5BX, Tel. +44 181 7305000, Fax. +44 181 7548421
United States: 811 East Arques Avenue, SUNNYVALE, CA 94088-3409,
Tel. +1 8002347381
Uruguay: see South America
Vietnam: see Singapore
Yugoslavia: PHILIPS, Trg N. Pasica 5/v, 11000 BEOGRAD,
Tel. +38111 625344, Fax. +38111 635777
For all other countries apply to: Philips Semiconductors, Marketing and Sales Communications,
Building BE,p, P.O. Box 218,5600 MD EINDHOVEN, The Netherlands, Fax. +31 40 27 24825
Internet: http://www.semiconductors.philips.com
SCH54
©Philips Electronics N.V. 1997
All rights are reserved. Reproduction in whole or in part is prohibited without the prior written consent of the copyright owner.
The information presented in this document does not form part of any quotation or contract, is believed to be accurate and reliable and may be changed
without notice. No liability will be accepted by the publisher for any consequence of its use. Publication thereof does not convey nor imply any license under
patent- or industrial or intellectual property rights.
Printed in the USA
457057/35M/CR3/pp752
Date of release: 05-97
Document order number:
9397-750 -{)1784
Source Exif Data:
File Type : PDF File Type Extension : pdf MIME Type : application/pdf PDF Version : 1.3 Linearized : No XMP Toolkit : Adobe XMP Core 4.2.1-c041 52.342996, 2008/05/07-21:37:19 Create Date : 2017:07:27 14:48:11-08:00 Modify Date : 2017:07:27 15:10:31-07:00 Metadata Date : 2017:07:27 15:10:31-07:00 Producer : Adobe Acrobat 9.0 Paper Capture Plug-in Format : application/pdf Document ID : uuid:b5c2d73d-6704-8d43-947b-c05f4af79be6 Instance ID : uuid:d64ea293-c88a-2449-a972-71999a5c4ac8 Page Layout : SinglePage Page Mode : UseNone Page Count : 762EXIF Metadata provided by EXIF.tools