Table of Contents

1. Introduction

1.1 Features and Specifications Rabbit 3000
1.2 Summary of Rabbit 3000 Advantages
1.3 Differences Rabbit 3000 vs. Rabbit 2000

2. Rabbit 3000 Design Features

2.1 The Rabbit 8-bit Processor vs. Other Processors
2.2 Overview of On-Chip Peripherals and Features
2.2.1 5 V Tolerant Inputs
2.2.2 Serial Ports
2.2.3 System Clock
2.2.4 32.768 kHz Oscillator Input
2.2.5 Parallel I/O
2.2.6 Slave Port
2.2.7 Auxiliary I/O Bus
2.2.8 Timers
2.2.9 Input Capture Channels
2.2.10 Quadrature Decoder Inputs
2.2.11 Pulse Width Modulation Outputs
2.2.12 Spread Spectrum Clock
2.2.13 Separate Core and I/O Power Pins
2.3 Design Standards
2.3.1 Programming Port
2.3.2 Standard BIOS
2.4 Dynamic C Support for the Rabbit

3. Details on Rabbit Microprocessor Features

3.1 Processor Registers
3.2 Memory Mapping
3.2.1 Extended Code Space
3.2.2 Separate I and D Space - Extending Data Memory
3.2.3 Using the Stack Segment for Data Storage
3.2.4 Practical Memory Considerations
3.3 Instruction Set Outline
3.3.1 Load Immediate Data to a Register
3.3.2 Load or Store Data from or to a Constant Address
3.3.3 Load or Store Data Using an Index Register
3.3.4 Register-to-Register Move
3.3.5 Register Exchanges
3.3.6 Push and Pop Instructions
3.3.7 16-bit Arithmetic and Logical Ops
3.3.8 Input/Output Instructions
3.4 How to Do It in Assembly Language--Tips and Tricks
3.4.1 Zero HL in 4 Clocks
3.4.2 Exchanges Not Directly Implemented
3.4.3 Manipulation of Boolean Variables
3.4.4 Comparisons of Integers
3.4.5 Atomic Moves from Memory to I/O Space
3.5 Interrupt Structure
3.5.1 Interrupt Priority
3.5.2 Multiple External Interrupting Devices
3.5.3 Privileged Instructions, Critical Sections and Semaphores
3.5.4 Critical Sections
3.5.5 Semaphores Using Bit B,(HL)
3.5.6 Computed Long Calls and Jumps

4. Rabbit Capabilities

4.1 Precisely Timed Output Pulses
4.1.1 Pulse Width Modulation to Reduce Relay Power
4.2 Open-Drain Outputs Used for Key Scan
4.3 Cold Boot
4.4 The Slave Port
4.4.1 Slave Rabbit As A Protocol UART

5. Pin Assignments and Functions

5.1 LQFP Package
5.1.1 Pinout
5.1.2 Mechanical Dimensions and Land Pattern
5.2 Ball Grid Array Package
5.2.1 Pinout
5.2.2 Mechanical Dimensions and Land Pattern
5.3 Rabbit Pin Descriptions
5.4 Bus Timing
5.5 Description of Pins with Alternate Functions
5.6 DC Characteristics
5.7 I/O Buffer Sourcing and Sinking Limit

6. Rabbit Internal I/O Registers

6.1 Default Values for all the Peripheral Control Registers

7. Miscellaneous Functions

7.1 Processor Identification
7.2 Rabbit Oscillators and Clocks
7.3 Clock Doubler
7.4 Clock Spectrum Spreader
7.5 Chip Select Options for Low Power
7.6 Output Pins CLK, STATUS, /WDTOUT, /BUFEN
7.7 Time/Date Clock (Real-Time Clock)
7.8 Watchdog Timer
7.9 System Reset
7.10 Rabbit Interrupt Structure
7.10.1 External Interrupts
7.10.2 Interrupt Vectors: INT0 - EIR,0x00/INT1 - EIR,0x08
7.11 Bootstrap Operation
7.12 Pulse Width Modulator
7.13 Input Capture
7.14 Quadrature Decoder

8. Memory Interface and Mapping

8.1 Interface for Static Memory Chips
8.2 Memory Mapping Overview
8.3 Memory-Mapping Unit
8.4 Memory Interface Unit
8.5 Memory Bank Control Registers
8.5.1 Optional A16, A19 Inversions by Segment (/CS1 Enable)
8.6 Allocation of Extended Code and Data
8.7 Instruction and Data Space Support
8.8 How the Compiler Compiles to Memory

9. Parallel Ports

9.1 Parallel Port A
9.2 Parallel Port B
9.3 Parallel Port C
9.4 Parallel Port D
9.5 Parallel Port E
9.6 Parallel Port F
9.6.1 Using Parallel Port A and Parallel Port F
9.7 Parallel Port G

10. I/O Bank Control Registers

11. Timers

11.1 Timer A
11.1.1 Timer A I/O Registers
11.1.2 Practical Use of Timer A
11.2 Timer B
11.2.1 Using Timer B

12. Rabbit Serial Ports

12.1 Serial Port Register Layout
12.2 Serial Port Registers
12.3 Serial Port Interrupt
12.4 Transmit Serial Data Timing
12.5 Receive Serial Data Timing
12.6 Clocked Serial Ports
12.7 Clocked Serial Timing
12.7.1 Clocked Serial Timing With Internal Clock
12.7.2 Clocked Serial Timing with External Clock
12.8 Synchronous Communications on Ports E and F
12.9 Serial Port Software Suggestions
12.9.1 Controlling an RS-485 Driver and Receiver
12.9.2 Transmitting Dummy Characters
12.9.3 Transmitting and Detecting a Break
12.9.4 Using A Serial Port to Generate a Periodic Interrupt
12.9.5 Extra Stop Bits, Sending Parity, 9th Bit Communication Schemes
12.9.6 Parity, Extra Stop Bits with 7-Data-Bit Characters
12.9.7 Parity, Extra Stop Bits with 8-Data-Bit Characters
12.9.8 Supporting 9th Bit Communication Protocols
12.9.9 Rabbit-Only Master/Slave Protocol
12.9.10 Data Framing/Modbus

13. Rabbit Slave Port

13.1 Hardware Design of Slave Port Interconnection
13.2 Slave Port Registers
13.3 Applications and Communications Protocols for Slaves
13.3.1 Slave Applications
13.3.2 Master-Slave Messaging Protocol

14. Rabbit 3000 Clocks

14.1 Low-Power Design

15. EMI Control

15.1 Power Supply Connections and Board Layout
15.2 Using the Clock Spectrum Spreader

16. AC Timing Specifications

16.1 Memory Access Time
16.2 I/O Access Time
16.3 Further Discussion of Bus and Clock Timing
16.4 Maximum Clock Speeds
16.5 Power and Current Consumption
16.6 Current Consumption Mechanisms
16.7 Sleepy Mode Current Consumption
16.8 Memory Current Consumption
16.9 Battery-Backed Clock Current Consumption
16.10 Reduced-Power External Main Oscillator

17. Rabbit BIOS and Virtual Driver

17.1 The BIOS
17.1.1 BIOS Services
17.1.2 BIOS Assumptions
17.2 Virtual Driver
17.2.1 Periodic Interrupt
17.2.2 Watchdog Timer Support

18. Other Rabbit Software

18.1 Power Management Support
18.2 Reading and Writing I/O Registers
18.2.1 Using Assembly Language
18.2.2 Using Library Functions
18.3 Shadow Registers
18.3.1 Updating Shadow Registers
18.3.2 Interrupt While Updating Registers
18.3.3 Write-only Registers Without Shadow Registers
18.4 Timer and Clock Usage

19. Rabbit Instructions

19.1 Load Immediate Data
19.2 Load & Store to Immediate Address
19.3 8-bit Indexed Load and Store
19.4 16-bit Indexed Loads and Stores
19.5 16-bit Load and Store 20-bit Address
19.6 Register to Register Moves
19.7 Exchange Instructions
19.8 Stack Manipulation Instructions
19.9 16-bit Arithmetic and Logical Ops
19.10 8-bit Arithmetic and Logical Ops
19.11 8-bit Bit Set, Reset and Test
19.12 8-bit Increment and Decrement
19.13 8-bit Fast A Register Operations
19.14 8-bit Shifts and Rotates
19.15 Instruction Prefixes
19.16 Block Move Instructions
19.17 Control Instructions - Jumps and Calls
19.18 Miscellaneous Instructions
19.19 Privileged Instructions

20. Differences Rabbit vs. Z80/Z180 Instructions

21. Instructions in Alphabetical Order With Binary Encoding

Appendix A. The Rabbit Programming Port

A.1 Use of the Programming Port as a Diagnostic/Setup Port
A.2 Alternate Programming Port
A.3 Suggested Rabbit Crystal Frequencies

Appendix B. Rabbit 3000 Revisions

B.1 Discussion of Fixes and Improvements
B.1.1 Rabbit Internal I/O Registers
B.1.2 Peripheral and ISR Address
B.1.3 Revision-Level ID Register
B.1.4 System/User Mode
B.1.5 Memory Protection
B.1.6 Stack Protection
B.1.7 RAM Segment Relocation
B.1.8 Secondary Watchdog Timer
B.1.9 New Opcodes
B.1.10 Expanded I/O Memory Addressing
B.1.11 External I/O Improvements
B.1.12 Short Chip Select Timing for Writes
B.1.13 Pulse Width Modulator Improvements
B.1.14 Quadrature Decoder Improvements
B.2 Pins with Alternate Functions

Appendix C. System/User Mode

C.1 System/User Mode Opcodes
C.2 System/User Mode Registers
C.3 Interrupts
C.3.1 Peripheral Interrupt Prioritization
C.4 Using the System/User Mode
C.4.1 Memory Protection Only
C.4.2 Mixed System/User Mode Operation
C.4.3 Complete Operating System

Appendix D. Rabbit 3000A Internal I/O Registers

Index