- •CONTENTS
- •FIGURES
- •TABLES
- •1.1 Manual Contents
- •1.2 Notational Conventions and Terminology
- •1.3 Related Documents
- •1.4 Application Support Services
- •2.1 Typical Applications
- •2.2 Microcontroller Features
- •2.3 Functional Overview
- •2.3.1 Core
- •2.3.1.3 Register File
- •2.3.2 Memory Controller
- •2.4 Internal Timing
- •2.4.1 Clock and Power Management Logic
- •2.4.2 Internal Timing
- •2.4.2.1 Clock Failure Detection Logic
- •2.4.2.2 External Timing
- •2.4.2.3 Power Management Options
- •2.4.3 Internal Memory
- •2.4.4 Serial Debug Unit
- •2.4.5 Interrupt Service
- •2.5 Internal Peripherals
- •2.5.1 I/O Ports
- •2.5.2 Serial I/O (SIO) Port
- •2.5.3 Synchronous Serial I/O (SSIO) Port
- •2.5.4 Event Processor Array (EPA) and Timer/Counters
- •2.5.7 Stack Overflow Module
- •2.5.8 Watchdog Timer
- •2.6 Special Operating Modes
- •2.7 Chip Configuration Registers
- •3.1 Overview of the Instruction Set
- •3.1.1 BIT Operands
- •3.1.2 BYTE Operands
- •3.1.4 WORD Operands
- •3.1.5 INTEGER Operands
- •3.1.9 Converting Operands
- •3.1.10 Conditional Jumps
- •3.1.11 Floating-Point Operations
- •3.1.12 Extended Instructions
- •3.2 Addressing Modes
- •3.2.1 Direct Addressing
- •3.2.2 Immediate Addressing
- •3.2.3 Indirect Addressing
- •3.2.3.1 Extended Indirect Addressing
- •3.2.3.2 Indirect Addressing with Autoincrement
- •3.2.3.3 Extended Indirect Addressing with Autoincrement
- •3.2.3.4 Indirect Addressing with the Stack Pointer
- •3.2.4 Indexed Addressing
- •3.2.4.3 Extended Indexed Addressing
- •3.2.4.4 Zero-indexed Addressing
- •3.3 Considerations for Crossing Page Boundaries
- •3.4 Software Protection Features and Guidelines
- •4.1 Memory Map Overview
- •4.2 Memory Partitions
- •4.2.1 External Memory
- •4.2.2 Internal ROM
- •4.2.2.1 Program Memory in Page FFH
- •4.2.2.3 Reserved Memory Locations
- •4.2.2.4 Interrupt, PIH, and PTS Vectors
- •4.2.2.5 Chip Configuration Bytes
- •4.2.3 Internal RAM (Code RAM)
- •4.2.4.2 Peripheral SFRs
- •4.2.5 Register File
- •4.2.5.2 Stack Pointer (SP)
- •4.3 Windowing
- •4.3.1 Selecting a Window
- •4.3.2 Addressing a Location Through a Window
- •4.3.2.4 Unsupported Locations Windowing Example
- •4.3.2.5 Using the Linker Locator to Set Up a Window
- •4.3.3 Windowing and Addressing Modes
- •4.4 Controlling Read Access to the Internal ROM
- •4.5 Remapping Internal ROM
- •5.1 Functional Overview
- •5.2 Stack Operations
- •5.3 Stack Overflow Module Registers
- •5.4 Programming the Stack Overflow Module
- •5.4.1 Initializing the Stack Pointer
- •5.4.2 Enabling the Stack Overflow Module and Specifying Stack Boundaries
- •6.1 Overview of the Interrupt Control Circuitry
- •6.2 Interrupt Signals and Registers
- •6.3 Interrupt Sources, Priorities, and Vector Addresses
- •6.3.1 PIH Interrupt Sources, Priorities, and Vector Addresses
- •6.3.1.1 Using Software to Provide the Vector Address
- •6.3.1.2 Providing the Vector Address in Response to a CPU Request
- •6.3.2 Special Interrupts
- •6.3.2.1 Unimplemented Opcode
- •6.3.2.2 Software Trap
- •6.3.2.4 Stack Overflow
- •6.3.3 External Interrupt Signal
- •6.3.4 Shared Interrupt Requests
- •6.4 Interrupt Latency
- •6.4.1 Situations that Increase Interrupt Latency
- •6.4.2 Calculating Latency
- •6.4.2.2 PTS Interrupt Latency
- •6.5 Programming the Interrupts
- •6.5.1 Modifying Interrupt Priorities
- •6.5.2 Determining the Source of an Interrupt
- •6.6 Initializing the PTS Control Blocks
- •6.6.1 Specifying the PTS Count
- •6.6.2 Selecting the PTS Mode
- •6.6.3 Single Transfer Mode
- •6.6.4 Block Transfer Mode
- •6.6.5 Dummy Mode
- •7.1 I/O Ports Overview
- •7.2 Configuring the Port Pins
- •7.2.2 Configuring Ports 3 and 4 (Address/Data Bus)
- •7.2.3 Port Configuration Example
- •7.3.1 Address and Data Signals (Ports 3, 4, and EPORT)
- •7.3.1.1 EPORT Status During Reset, CCB Fetch, Idle, Powerdown, and Hold
- •7.3.5 External Interrupt Signal (Port 2)
- •7.3.6 PWM Signals (Port 11)
- •7.3.7 Serial I/O Port Signals (Ports 2 and 7)
- •7.3.8 Special Operating Mode Signal (Port 5 Pin 7)
- •7.3.9 Synchronous Serial I/O Port Signals (Port 10)
- •7.4 I/O Port Internal Structures
- •7.4.3 Internal Structure for Ports 3 and 4 (Address/Data Bus)
- •8.1 Serial I/O (SIO) Port Functional Overview
- •8.2 Serial I/O Port Signals and Registers
- •8.3 Serial Port Modes
- •8.3.1 Synchronous Mode (Mode 0)
- •8.3.2 Asynchronous Modes (Modes 1, 2, and 3)
- •8.3.2.1 Mode 1
- •8.3.2.2 Mode 2
- •8.3.2.3 Mode 3
- •8.3.2.4 Multiprocessor Communications
- •8.4 Programming the Serial Port
- •8.4.1 Configuring the Serial Port Pins
- •8.4.2 Programming the Control Register
- •8.4.3 Programming the Baud Rate and Clock Source
- •8.4.4 Enabling the Serial Port Interrupts
- •8.4.5 Determining Serial Port Status
- •CHAPTER 9 Synchronous Serial I/O (SSIO) Port
- •9.1 SSIO Port Overview
- •9.1.1 Standard Mode
- •9.1.2 Duplex Mode
- •9.2 SSIO pORT sIGNALS AND rEGISTERS
- •9.3 ssio Port Operation
- •9.3.1 Transmitting and Receiving Data
- •9.3.1.1 Normal Transfers (All Modes)
- •9.3.1.2 Handshaking Transfers (Standard Mode Only)
- •9.4 Programming the SSIO Port
- •9.4.1 Configuring the SSIO Port Pins
- •9.4.2 Configuring the SSIO Registers
- •9.4.2.1 The SSIO Baud (SSIO_BAUD) Register
- •9.4.2.3 The SSIO 0 Clock (SSIO0_CLK) Register
- •9.4.2.4 The SSIO 1 Clock (SSIO1_CLK) Register
- •9.4.3 Enabling the SSIO Interrupts
- •9.5 Programming Considerations
- •9.5.2 Standard Mode Considerations
- •9.5.3 Duplex Mode Considerations
- •10.1 PWM FUNCTIONAL OVERVIEW
- •10.2 PWM Signals and Registers
- •10.3 pwm operation
- •10.4 Programming the Frequency and Period
- •10.5 Programming the Duty Cycle
- •10.5.1 Sample Calculations
- •10.5.2 Reading the Current Value of the Down-counter
- •10.5.3 Enabling the PWM Outputs
- •10.5.4 Generating Analog Outputs
- •11.1 EPA Functional Overview
- •11.2 EPA and Timer/Counter Signals and Registers
- •11.3 Timer/Counter Functional Overview
- •11.3.1 Timer Multiplexing on the Time Bus
- •11.4 EPA Channel Functional Overview
- •11.4.1 Operating in Input Capture Mode
- •11.4.2 Operating in Output Compare Mode
- •11.4.3 Operating in Compare Mode with the Output/Simulcapture Channels
- •11.4.4 Generating a 32-bit Time Value
- •11.4.5 Controlling a Pair of Adjacent Pins
- •11.5 Programming the EPA and Timer/Counters
- •11.5.1 Configuring the EPA and Timer/Counter Signals
- •11.5.2 Programming the Timers
- •11.5.3 Programming the Capture/Compare Channels
- •11.5.4 Programming the Compare-only (Output/Simulcapture) Channels
- •11.6 Enabling the EPA Interrupts
- •11.7 Determining Event Status
- •CHAPTER 12 Analog-to-digital (A/D) Converter
- •12.1 A/D Converter Functional Overview
- •12.2 A/D Converter Signals and Registers
- •12.3 A/D Converter Operation
- •12.4 Programming the A/D Converter
- •12.4.1 Programming the A/D Test Register
- •12.4.2 Programming the A/D Result Register (for Threshold Detection Only)
- •12.4.3 Programming the A/D Time Register
- •12.4.4 Programming the A/D Command Register
- •12.4.5 Programming the A/D Scan Register
- •12.4.6 Enabling the A/D Interrupt
- •12.5 Determining A/D Status and Conversion Results
- •12.6 Design Considerations
- •12.6.1 Designing External Interface Circuitry
- •12.6.1.1 Minimizing the Effect of High Input Source Resistance
- •12.6.1.2 Suggested A/D Input Circuit
- •12.6.1.3 Analog Ground and Reference Voltages
- •12.6.2 Understanding A/D Conversion Errors
- •CHAPTER 13 Minimum Hardware Considerations
- •13.1 Minimum Connections
- •13.1.1 Unused Inputs
- •13.1.2 I/O Port Pin Connections
- •13.2 Applying and Removing Power
- •13.3 Noise Protection Tips
- •13.4 The On-chip Oscillator Circuitry
- •13.5 Using an External Clock Source
- •13.6 Resetting the Microcontroller
- •13.6.1 Generating an External Reset
- •13.6.2 Issuing the Reset (RST) Instruction
- •13.6.3 Issuing an Illegal IDLPD Key Operand
- •13.6.4 Enabling the Watchdog Timer
- •13.6.5 Detecting Clock Failure
- •13.7 Identifying the Reset Source
- •14.1 Special Operating Mode Signals and Registers
- •14.2 Reducing Power Consumption
- •14.3 Idle Mode
- •14.3.1 Enabling and Disabling Idle Mode
- •14.3.2 Entering and Exiting Idle Mode
- •14.4 Powerdown Mode
- •14.4.1 Enabling and Disabling Powerdown Mode
- •14.4.2 Entering Powerdown Mode
- •14.4.3 Exiting Powerdown Mode
- •14.4.3.1 Generating a Hardware Reset
- •14.4.3.2 Asserting the External Interrupt Signal
- •14.4.3.3 Selecting an External Capacitor
- •14.5 ONCE Mode
- •CHAPTER 15 Interfacing with External Memory
- •15.1 Internal and External Addresses
- •15.2 External Memory Interface Signals and Registers
- •15.3 The Chip-select Unit
- •15.3.1 Defining Chip-select Address Ranges
- •15.3.2 Controlling Bus Parameters
- •15.3.3 Chip-select Unit Initial Conditions
- •15.3.4 Programming the Chip-select Registers
- •15.3.5 Example of a Chip-select Setup
- •15.4 Chip Configuration Registers and Chip Configuration Bytes
- •15.5 Bus Width and Multiplexing
- •15.5.1 A 16-bit Example System
- •15.5.2 16-bit Bus Timings
- •15.5.3 8-bit Bus Timings
- •15.5.4 Comparison of Multiplexed and Demultiplexed Buses
- •15.6 Wait States (Ready Control)
- •15.7 Bus-hold Protocol
- •15.7.1 Enabling the Bus-hold Protocol
- •15.7.2 Disabling the Bus-hold Protocol
- •15.7.3 Hold Latency
- •15.7.4 Regaining Bus Control
- •15.8 Write-control Modes
- •15.9 System Bus AC Timing Specifications
- •15.9.1 Deferred Bus-cycle Mode
- •15.9.2 Explanation of AC Symbols
- •15.9.3 AC Timing Definitions
- •16.1 Serial Debug Unit (SDU) Functional Overview
- •16.2 SDU Signals and Registers
- •16.3 SDU Operation
- •16.3.1 SDU State Machine
- •16.3.2 Code RAM Access State Machine
- •16.3.3 Minimizing Latency
- •16.4 Code RAM Access
- •16.4.1 Code RAM Data Transfer
- •16.4.2 Code RAM Access Instructions
- •16.4.3 Code RAM Data Transfer Example
- •16.5 SDU Interface Connector
- •17.1 Signals and Registers
- •17.2 Memory Protection Options
- •17.3 Entering Test-ROM Routines
- •17.3.1 Power-up and Power-down Sequences
- •17.4 ROM-dump Routine and Circuit
- •17.5 Serial Port Mode Routine
- •17.5.1 Serial Port RISM
- •17.5.2 Serial Port Mode Circuit
- •17.6 SDU RISM Execution Routine
- •17.6.1 SDU RISM Data Transfer
- •17.6.1.1 SDU RISM Data Transfer Before
- •17.6.1.2 SDU RISM Data Transfer After
- •17.6.2 SDU RISM Execution Circuit
- •17.7 RISM Command Descriptions
- •17.8 Executing Programs from Register RAM
- •17.9 RISM Command Examples
- •17.9.1 Serial Port Mode RISM Read Command Example
- •17.9.2 Serial Port Mode RISM Write Command Example
- •17.9.3 SDU RISM Execution Write Command Example
- •17.9.4 SDU RISM Execution Go Command Example
- •B.1 Functional Groupings of Signals
- •B.2 Signal Descriptions
- •B.3 Default Conditions
SERIAL DEBUG UNIT
16.4 CODE RAM ACCESS
Communication to the code RAM through the SDU is accomplished using a limited SSIO format configuration with an additional handshaking operation. (Refer to Table 16-1 on page 16-2 for a description of the four pins required to interface to the SDU.) The SSIO of the SDU module has no master function. It can function only as a slave, allowing communication over a serial link in a bidirectional, single-byte transfer mode. All data transfers must be initiated by the clock source of an external master. Figure 16-5 illustrates a possible interface scheme using an 8XC196Kx SSIO master to control the 8XC196EA SDU slave.
|
SC0 |
CRDCLK |
|
SD0 |
CRIN |
8XC196Kx |
|
83C196EA |
(Master) |
SC1 |
(Slave) |
|
SD1 |
CROUT |
|
Px.x |
CRBUSY# |
A3304-01
Figure 16-5. SDU Master/Slave Configuration
Figure 16-6 shows the standard 8-bit data-in (DIx) and data-out (DOx) transfer frame. The MSB is sent first, followed by another seven bits before the handshaking is asserted. Handshaking prevents a data underflow or overflow from occurring at the slave. The code RAM busy (CRBUSY#) signal serves this purpose for the slave. The CRBUSY# signal activates automatically one to two state times after the rising edge of the code RAM clock (CRDCLK) edge corresponding to the last data bit of the transmitted 8-bit packet. Each data bit is sampled and latched on the rising edge of CRDCLK.
CRDCLK
CRIN |
MSB DI6 |
DI5 |
DI4 |
DI3 |
DI2 |
DI1 |
DI0 |
CROUT |
MSB DO6 |
DO5 |
DO4 |
DO3 |
DO2 |
DO1 |
DO0 |
CRBUSY#
A3305-01
Figure 16-6. SDU Transmit/Receive Timings
16-7
8XC196EA USER’S MANUAL
16.4.1 Code RAM Data Transfer
The serial transfer of data frames using the SDU must be initiated by an external master device. The structure of a code RAM data transfer must be an eight-bit command byte followed by a specific number of bytes. The command instruction register, SDU_COM, specifies the data length.
Traffic control across the serial link is maintained by the handshaking pin, CRBUSY#. The SDU asserts the CRBUSY# signal to indicate that it is processing a command. The CRBUSY# signal toggles low for a few (three or fewer) states after every eight-bit command and data frame. This allows the state machine time to decode the command and to determine the register destination of a particular byte. (Refer to “Code RAM Data Transfer Example” on page 16-12 for a detailed example of the code RAM message structure.)
16.4.2 Code RAM Access Instructions
Figure 16-7 describes the SDU command byte, and Table 16-3 describes the code RAM access instructions.
SDU_COM
The serial debug unit command byte (SDU_COM) register specifies the instruction, the transfer direction, and the data size (byte or word). The command byte must precede each data frame string in the serial transfer.
7 |
|
|
|
|
|
|
|
|
|
0 |
SB |
SDU_INT |
MS3 |
|
MS2 |
|
MS1 |
MS0 |
W/R# |
|
B/W# |
|
|
|
|
|
|
|
|
|
|
|
Bit |
Bit |
|
|
|
|
Function |
|
|
|
|
Number |
Mnemonic |
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
7 |
SB |
Start Bit |
|
|
|
|
|
|
|
|
|
|
Clear this bit to indicate a valid command byte for synchronization. |
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
6 |
SDU_INT |
SDU Interrupt |
|
|
|
|
|
|
|
This bit is used to generate an interrupt to the CPU.
0 = disable interrupt
1 = enable interrupt
5:2 |
MS3:0 |
Mode Select |
These bits specify which instruction the SDU will execute. Refer to Table 16-3 for the complete set of instructions.
Figure 16-7. Serial Debug Unit Command Byte (SDU_COM) Register
16-8
SERIAL DEBUG UNIT
SDU_COM
The serial debug unit command byte (SDU_COM) register specifies the instruction, the transfer direction, and the data size (byte or word). The command byte must precede each data frame string in the serial transfer.
7 |
|
|
|
|
|
|
|
|
|
|
0 |
SB |
SDU_INT |
MS3 |
|
MS2 |
|
|
MS1 |
|
MS0 |
W/R# |
B/W# |
|
|
|
|
|
|
|
|
|
|
|
|
Bit |
Bit |
|
|
|
|
|
Function |
|
|
||
Number |
Mnemonic |
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
1 |
W/R# |
Write/Read |
|
|
|
|
|
|
|
|
|
|
|
This bit specifies the transfer direction. |
|
|
|
||||||
|
|
0 = read data from code RAM |
|
|
|
||||||
|
|
1 = write data to code RAM |
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
0 |
B/W# |
Byte/Word |
|
|
|
|
|
|
|
|
This bit specifies the data transfer size.
0 = word
1 = byte
Figure 16-7. Serial Debug Unit Command Byte (SDU_COM) Register (Continued)
16-9
8XC196EA USER’S MANUAL
|
|
|
|
Table 16-3. Code RAM Access Instructions |
|
|
|
|
|
||
|
Mode Select† |
|
Instruction |
||
MS3 |
MS2 |
MS1 |
MS0 |
||
|
|||||
|
|
|
|
|
|
0 |
0 |
0 |
0 |
Reset SDU |
|
|
|
|
|
The reset SDU instruction resets all the SDU circuitry and reinitializes all the |
|
|
|
|
|
registers to their default value. |
|
|
|
|
|
If the SDU was left in an unknown state and your application is attempting to |
|
|
|
|
|
re-establish communication with the SDU, the master must send it a |
|
|
|
|
|
synchronization sequence. The synchronization sequence consists of six |
|
|
|
|
|
consecutive command bytes containing the reset SDU instruction 01111111B |
|
|
|
|
|
(7FH). This six-command sequence resynchronizes the SDU, regardless of its |
|
|
|
|
|
last state. |
|
|
|
|
|
The reset SDU instruction will not reset the microcontroller CPU. |
|
|
|
|
|
|
|
0 |
0 |
0 |
1 |
Code RAM Address Access |
|
|
|
|
|
The code RAM address access instruction allows access to the code RAM |
|
|
|
|
|
address access (CR_ADDR) register. This instruction, in conjunction with the |
|
|
|
|
|
16-bit CR_ADDR register, is used to set up the address for the code RAM |
|
|
|
|
|
access. |
|
|
|
|
|
|
|
0 |
1 |
0 |
0 |
Code RAM Data Access |
|
|
|
|
|
The code RAM data access instruction allows access to the code RAM data |
|
|
|
|
|
access (CR_DATA) register. This instruction, in conjunction with the 16-bit |
|
|
|
|
|
CR_DATA register, is used for data transfers to and from the code RAM. |
|
|
|
|
|
|
|
0 |
1 |
0 |
1 |
Breakpoint Address Access |
|
|
|
|
|
The breakpoint address access instruction is used to write to the breakpoint |
|
|
|
|
|
address access (BP_ADDR) register. This instruction, in conjunction with the |
|
|
|
|
|
24-bit BP_ADDR register, is used to specify the address for inserting a |
|
|
|
|
|
hardware breakpoint. |
|
|
|
|
|
|
|
0 |
1 |
1 |
0 |
Breakpoint Enable |
|
|
|
|
|
The breakpoint enable instruction enables immediate breakpoint generation |
|
|
|
|
|
when the address on the internal extended memory address bus (EMAB) |
|
|
|
|
|
matches the value in BP_ADDR. |
|
|
|
|
|
The breakpoint logic (Figure 16-8) includes a comparator that resides on the |
|
|
|
|
|
EMAB. If the breakpoint instruction has been programmed, the breakpoint |
|
|
|
|
|
logic compares the address on the bus with the address in the BP_ADDR |
|
|
|
|
|
register. A match sets an internal flag that exists as a ninth bit in the |
|
|
|
|
|
instruction queue. When the flagged instruction is transferred from the |
|
|
|
|
|
instruction queue into the instruction register, the CPU executes a TRAP |
|
|
|
|
|
instruction and vectors to the TRAP interrupt service routine at FF2010H (see |
|
|
|
|
|
“Breakpoint Logic Block Diagram” on page 16-11). |
|
|
|
|
|
|
|
0 |
1 |
1 |
1 |
Breakpoint Disable |
|
|
|
|
|
The breakpoint disable instruction disables the breakpoint generation. |
|
|
|
|
|
|
† All other bit combinations are reserved
16-10
SERIAL DEBUG UNIT
Table 16-3. Code RAM Access Instructions (Continued)
|
Mode Select† |
|
Instruction |
||
MS3 |
MS2 |
MS1 |
MS0 |
||
|
|||||
|
|
|
|
|
|
1 |
0 |
1 |
0 |
SDU Idle (NOP) |
|
|
|
|
|
The idle instruction puts the SDU into an idle state, causing it to wait for |
|
|
|
|
|
another instruction without performing any operation. The idle instruction is |
|
|
|
|
|
primarily used to write the high byte of data after a word read. |
|
|
|
|
|
For example, if during a word read operation a command byte is shifted in, the |
|
|
|
|
|
SDU can shift out only eight bits, which is assumed to be the high data byte. |
|
|
|
|
|
Eight additional clocks are required to shift out another data frame. To read |
|
|
|
|
|
out the next data byte, which is the low data byte, without issuing a new |
|
|
|
|
|
command, use the idle instruction. |
|
|
|
|
|
|
|
1 |
1 |
1 |
1 |
Reset SDU |
|
|
|
|
|
The reset SDU instruction resets all the SDU circuitry and reinitializes all the |
|
|
|
|
|
registers to their default value. |
|
|
|
|
|
If the SDU was left in an unknown state and your application is attempting to |
|
|
|
|
|
re-establish communication with the SDU, the master must send it a |
|
|
|
|
|
synchronization sequence. The synchronization sequence consists of six |
|
|
|
|
|
consecutive command bytes containing the reset SDU instruction 01111111B |
|
|
|
|
|
(7FH). This six-command sequence resynchronizes the SDU, regardless of its |
|
|
|
|
|
last state. |
|
|
|
|
|
The reset SDU instruction will not reset the microcontroller CPU. |
|
|
|
|
|
|
† All other bit combinations are reserved
|
BP_ADDR (24) |
|
|
|
|
1 |
Instruction Queue (9) |
Extended Memory Address Bus (24) |
Address Value (24) |
Set Break |
TRAP |
|
|
||
|
|
Logic |
MUX |
|
Comparator |
Instruction Register (8) |
|
|
|
||
|
|
|
A3317-01 |
Figure 16-8. Breakpoint Logic Block Diagram
16-11