0
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心
发布
  • 发文章

  • 发资料

  • 发帖

  • 提问

  • 发视频

创作活动
MAXQ2000-RFX+

MAXQ2000-RFX+

  • 厂商:

    AD(亚德诺)

  • 封装:

    LQFP100

  • 描述:

    IC MCU 16BIT 64KB FLASH 100LQFP

  • 数据手册
  • 价格&库存
MAXQ2000-RFX+ 数据手册
MAXQ FAMILY USER’S GUIDE Program Memory Data Memory IR Instruction Decoder Source Destination IP DP SP 1:16 16:1 ALU I/O I/O Functional Diagrams I/O Note: The MAXQ Family User's Guide should be used in conjunction with the data sheet(s) for MAXQ microcontrollers. Pin Configurations appear at end of data sheet. Functional Diagrams continued at end of data sheet. UCSP is a trademark of Maxim Integrated Products, Inc. For pricing, delivery, and ordering information, please contact Maxim Direct at 1-888-629-4642, or visit Maxim’s website at www.maximintegrated.com. Rev: 6; 9/08 MAXQ Family User’s Guide TABLE OF CONTENTS SECTION 1: Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1-1 SECTION 2: Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2-1 SECTION 3: Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3-1 SECTION 4: System Register Descriptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4-1 SECTION 5: Peripheral Register Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5-1 SECTION 6: General-Purpose I/O Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-1 SECTION 7: Timer/Counter Timer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7-1 SECTION 8: Timer/Counter 1 Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8-1 SECTION 9: Timer/Counter 2 Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-1 SECTION 10: Serial I/O Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10-1 SECTION 11: Serial Peripheral Interface (SPI Module) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11-1 SECTION 12: Hardware Multiplier Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12-1 SECTION 13: 1-Wire Bus Master . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13-1 SECTION 14: Real-Time Clock Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14-1 SECTION 15: Test Access Port (TAP) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15-1 SECTION 16: In-Circuit Debug Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16-1 SECTION 17: In-System Programming (JTAG) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17-1 SECTION 18: MAXQ Family Instruction Set Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18-1 REVISION HISTORY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Rev-1 Maxim Integrated 2 MAXQ Family User’s Guide SECTION 1: OVERVIEW This section contains the following information: 1.1 Instruction Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1-2 1.2 Harvard Memory Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1-2 1.3 Register Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1-2 1.4 MAXQ10 and MAXQ20 Microcontrollers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1-3 1-1 Maxim Integrated MAXQ Family User’s Guide SECTION 1: OVERVIEW The MAXQ® family of 16-bit reduced instruction set computing (RISC) microcontrollers is targeted toward low-cost, low-power, embedded-application designs. The flexible, modular architecture design used in these microcontrollers allows development of targeted designs for specific applications with minimal effort. Microcontrollers in the MAXQ family provide many different combinations of program memory, data memory, and peripherals while supporting a common feature set. This shared functionality provides maximum reusability for hardware and software systems developed using these microcontrollers. 1.1 Instruction Set All MAXQ microcontrollers share a common instruction set, with all instructions a fixed 16 bits in length. A register-based, transporttriggered architecture allows all instructions to be coded as simple transfer operations. All instructions reduce to either writing an immediate value to a destination register or memory location or moving data between registers and/or memory locations. This simple top-level instruction decoding allows all instructions to be executed in a single cycle. Since all CPU operations are performed on registers only, any new functionality can be added by simply adding new register modules. The simple instruction set also provides maximum flexibility for code optimization by a compiler. 1.2 Harvard Memory Architecture Program memory, data memory, and register space on MAXQ microcontrollers are separate from one another, and are each accessed by a separate bus. This type of memory architecture (known as a Harvard architecture) has some advantages. First, the word lengths can be different for different types of memory. Program memory must be 16 bits wide to accommodate the instruction word size, but system and peripheral registers can be 8 bits wide or 16 bits wide as needed. Since data memory is not required to store program code, its width may also vary and could conceivably be targeted for a specific application. Also, since data memory is accessed by the CPU only through appropriate registers, it is possible for register modules to access memory entirely independent from the main processor, providing the framework for direct memory-access operations. It is also possible to have more than one type of data memory, each accessed through a different register set. 1.3 Register Set Since all functions in the MAXQ family are accessed through registers, common functionality is provided through a common register set. Many of these registers provide the equivalent of higher level op codes by directly accessing the arithmetic logic unit (ALU), the loop counter registers, and the data pointer registers. Others, such as the interrupt registers, provide common control and configuration functions that are equivalent across all MAXQ microcontrollers. The common register set, also known as the System Registers, includes the following: • ALU access and control registers, including working accumulator registers and the processor status flags • Two Data Pointers and a Frame Pointer for data memory access • Auto-decrementing Loop Counters for fast, compact looping • Instruction Pointer and other branching control access points • Stack Pointer and an access point to the 16-bit-wide dedicated hardware stack • Interrupt vector, identification, and masking registers Peripherals and other features that can vary among MAXQ microcontroller devices are accessed through Peripheral registers. These registers, grouped into register modules, provide such additional functionality as: • Universal Asynchronous Receiver/Transmitter (UART) Serial Ports • High-Speed Timers and Counters • Serial Peripheral Interface (SPI™) ports • Hardware Multiplier MAXQ is a registered trademark of Maxim Integrated Products, Inc. SPI is a trademark of Motorola, Inc. Maxim Integrated 1-2 MAXQ Family User’s Guide • Real-Time Clock • 1-Wire® Bus Master • General-Purpose Digital I/O Ports 1.4 MAXQ10 and MAXQ20 Microcontrollers This user’s guide covers both the 8-bit MAXQ10 and 16-bit MAXQ20 microcontrollers. The primary difference between the MAXQ10 and MAXQ20 implementations is the width of the internal data bus and ALU. The MAXQ10 design implements an 8-bit internal data bus and ALU, while the MAXQ20 design implements a 16-bit internal data bus and ALU. This difference is most evident when comparing the instruction set, and more specifically, those operations that involve the ALU and accumulators. The registers on the MAXQ10 and MAXQ20 can be either 8 bits or 16 bits wide. 1-Wire is a registered trademark of Dallas Semiconductor Corp. 1-3 Maxim Integrated MAXQ Family User’s Guide SECTION 2: ARCHITECTURE This section contains the following information: 2.1 Instruction Decoding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2-4 2.2 Register Space . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2-5 2.3 Memory Organization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2-6 2.3.1 Program Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2-6 2.3.2 Utility ROM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2-6 2.3.3 Data Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2-6 2.3.4 Stack Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2-7 2.4 Pseudo-Von Neumann Memory Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2-7 2.5 Pseudo-Von Neumann Memory Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2-9 2.6 Data Alignment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2-10 2.6.1 Memory Management Unit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2-10 2.7 Clock Generation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2-13 2.7.1 Internal Ring Oscillator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2-14 2.7.2 External Clock (Crystal/Resonator) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2-14 2.7.3 External Clock (Direct Input) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2-14 2.7.4 External RC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2-15 2.7.5 Internal System Clock Generation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2-15 2.8 Interrupts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2-16 2.8.1 Servicing Interrupts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2-16 2.8.2 Interrupt System Operation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2-16 2.8.3 Synchronous vs. Asynchronous Interrupt Sources . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2-17 2.8.4 Interrupt Prioritization by Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2-18 2.8.5 Interrupt Exception Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2-18 2.9 Operating Modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2-18 2.9.1 Reset Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2-18 2.9.1.1 Power-On/Brownout Reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2-18 2.9.1.2 External Reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2-19 2.9.1.3 Watchdog Timer Reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2-19 2.9.1.4 Internal System Reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2-19 2-1 Maxim Integrated MAXQ Family User’s Guide 2.9.2 Power Management Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2-19 2.9.2.1 Switchback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2-20 2.9.3 Stop Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2-20 LIST OF FIGURES Figure 2-1. MAXQ Transport-Triggered Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2-3 Figure 2-2. Instruction Word Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2-4 Figure 2-3. Pseudo Von Neumann Memory Map (MAXQ10 Default) . . . . . . . . . . . . . . . . . . . . . .2-8 Figure 2-4. Pseudo Von Neumann Memory Map (MAXQ20 Default) . . . . . . . . . . . . . . . . . . . . . .2-9 Figure 2-5. CDA Functions (Word Access Mode) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2-11 Figure 2-6. CDA Functions (Byte Access Mode) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2-12 Figure 2-7. MAXQ Clock Sources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2-13 Figure 2-8. On-Chip Crystal Oscillator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2-15 Figure 2-9. RC Relaxation Oscillator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2-15 Figure 2-10. MAXQ Interrupt Source Hierarchy Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2-17 LIST OF TABLES Table 2-1. Register-to-Register Transfer Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2-5 Table 2-2. System Clock Rate Control Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2-15 Maxim Integrated 2-2 MAXQ Family User’s Guide SECTION 2: ARCHITECTURE The MAXQ architecture is designed to be modular and expandable. Top-level instruction decoding is extremely simple and based on transfers to and from registers. The registers are organized into functional modules, which are in turn divided into the System Register and Peripheral Register groups. Figure 2-1 illustrates the modular architecture and the basic transport possibilities. CLOCK CONTROL, WATCHDOG TIMER AND POWER MONITOR DATA MEMORY PROGRAM MEMORY STACK MEMORY CKCN SP WDCN MEMORY MANAGEMENT UNIT (MMU) IC SC INTERRUPT LOGIC ADDRESS GENERATION IC IP DATA POINTERS MUX DP[0], DP[1] FP = (BP + OFFS) IMR LOOP COUNTERS IIR LC[η] DPC BOOLEAN VARIABLE MANIPULATION SYSTEM MODULES/ REGISTERS ACCUMULATORS (16) AP INSTRUCTION DECODE APC PSF (SRC, DST TRANSPORT DETERMINATION) src dst dst src PERIPHERAL MODULES/REGISTERS UART AND SPI TIMERS/ COUNTERS GENERALPURPOSE I/O MAXQ PRODUCT SPECIFIC MODULES (MULTIPLY ACCUMULATE UNIT, ADC, DAC, PWM, ETC.) Figure 2-1. MAXQ Transport-Triggered Architecture 2-3 Maxim Integrated MAXQ Family User’s Guide Memory access from the MAXQ is based on a Harvard architecture with separate address spaces for program and data memory. The simple instruction set and transport-triggered architecture allow the MAXQ to run in a nonpipelined execution mode where each instruction can be fetched from memory, decoded, and executed in a single clock cycle. Data memory is accessed through one of three data pointer registers. Two of these data pointers, DP[0] and DP[1], are stand-alone 16-bit pointers. The third data pointer, FP, is composed of a 16-bit base pointer (BP) and an 8-bit offset register (OFFS). All three pointers support post-increment/decrement functionality for read operations and pre-increment/decrement for write operations. For the Frame Pointer (FP=BP[Offs]), the increment/decrement operation is executed on the OFFS register and does not affect the base pointer (BP). Stack functionality is provided by dedicated memory with a 16-bit width and a typical depth of 8 (although this varies dependent upon the MAXQ product). An on-chip memory management unit (MMU) is accessible through system registers to allow logical remapping of physical program and data spaces, and thus facilitates in-system programming and fast access to data tables, arrays, and constants physically located in program memory. 2.1 Instruction Decoding Every MAXQ instruction is encoded as a single 16-bit word according to the format in Figure 2-2. FORMAT f d d DESTINATION d d d d d s s s SOURCE s s s s s Figure 2-2. Instruction Word Format Bit 15 (f) indicates the format for the source field of the instruction as follows: • If f equals 0, the instruction is an immediate source instruction, and the source field represents an immediate 8-bit value. • If f equals 1, the instruction is a register source instruction, and the source field represents the register that the source value will be read from. Bits 0 to 7 (ssssssss) represent the source for the transfer. Depending on the value of the format field, this can either be an immediate value or a source register. If this field represents a register, the lower four bits contain the module specifier and the upper four bits contain the register index in that module. Bits 8 to 14 (ddddddd) represent the destination for the transfer. This value always represents a destination register, with the lower four bits containing the module specifier and the upper three bits containing the register sub-index within that module. Since the source field is 8 bits wide and 4 bits are required to specify the module, any one of 16 registers in that module may be specified as a source. However, the destination field has one less bit, which means that only eight registers in a module can be specified as a destination in a single-cycle instruction. While the asymmetry between source and destination fields of the op code may initially be considered a limitation, this space can be used effectively. Firstly, since read-only registers will never be specified as destinations, they can be placed in the second eight locations in a module to give single-cycle read access. Secondly, there are often critical control or configuration bits associated with system and certain peripheral modules where limited write access is beneficial (e.g., watchdog-timer enable and reset bits). By placing such bits in one of the upper 24 registers of a module, this write protection is added in a way that is virtually transparent to the assembly source code. Anytime that it is necessary to directly select one of the upper 24 registers as a destination, the prefix register PFX is used to supply the extra destination bits. This prefix register write is inserted automatically by the assembler and requires one additional execution cycle. The MAXQ architecture is transport-triggered. This means that writing to or reading from certain register locations will also cause side effects to occur. These side effects form the basis for the higher level op codes defined by the assembler, such as ADDC, OR, JUMP, and so on. While these op codes are actually implemented as MOVE instructions between certain register locations, the encoding is handled by the assembler and need not be a concern to the programmer. The registers defined in the System Register and Peripheral Register maps operate as described in the documentation; the unused "empty" locations are the ones used for these special cases. The MAXQ instruction set is designed to be highly orthogonal. All arithmetic and logical operations that use two registers can use any register along with the accumulator. Data can be transferred between any two registers in a single instruction. Maxim Integrated 2-4 MAXQ Family User’s Guide 2.2 Register Space The MAXQ architecture provides a total of 16 register modules. Each of these modules contains 32 registers. The first eight registers in each module may be read from or written to in a single cycle; the second eight registers may be read from in a single cycle and written to in two cycles (by using the prefix register PFX); the last sixteen registers may be read or written in two cycles (always requiring use of the prefix register PFX). Registers may be either 8 or 16 bits in length. Within a register, any number of bits can be implemented; bits not implemented are fixed at zero. Data transfers between registers of different sizes are handled as shown in Table 2-1. • If the source and destination registers are both 8 bits wide, data is transferred bit to bit accordingly. • If the source register is 8 bits wide and the destination register is 16 bits wide, the data from the source register is transferred into the lower 8 bits of the destination register. The upper 8 bits of the destination register are set to the current value of the prefix register; this value is normally zero, but it can be set to a different value by the previous instruction if needed. The prefix register reverts back to zero after one cycle, so this must be done by the instruction immediately before the one that will be using the value. • If the source register is 16 bits wide and the destination register is 8 bits wide, the lower 8 bits of the source are transferred to the destination register. • If both registers are 16 bits wide, data is copied bit to bit. Table 2-1. Register-to-Register Transfer Operations SOURCE REGISTER SIZE (BITS) DESTINATION REGISTER SIZE (BITS) PREFIX SET? 8 8 8 16 16 8 16 16 8 16 — No Yes — No DESTINATION SET TO VALUE HIGH 8 BITS LOW 8 BITS Source [7:0] 00h Source [7:0] Prefix [7:0] Source [7:0] Source [7:0] Source [15:8] Source [7:0] The above rules apply to all data movements between defined registers. Data transfer to/from undefined register locations has the following behavior: • If the destination is an undefined register, the MOVE is a dummy operation but may trigger an underlying operation according to the source register (e.g., @DP[n]--). • If the destination is a defined register and the source is undefined, the source data for the transfer will depend upon the source module width. If the source is from a module containing 8-bit or 8-bit and 16-bit source registers, the source data will be equal to the prefix data concatenated with 00h. If the source is from a module containing only 16-bit source registers, 0000h source data is used for the transfer. The 16 available register modules are broken up into two different groups. The low six modules (specifiers 0h through 5h) are known as the Peripheral Register modules, while the high 10 modules (specifiers 6h to Fh) are known as the System Register modules. These groupings are descriptive only, as there is no difference between accessing the two register groups from a programming perspective. The System Registers define basic functionality that remains the same across all products based on the MAXQ architecture. This includes all register locations that are used to implement higher level op codes as well as the following common system features. • ALU (MAXQ10: 8 bit; MAXQ20: 16 bit) and associated status flags (zero, equals, carry, sign, overflow) • Eight working accumulator registers (MAXQ10: 8 bit width; MAXQ20: 16 bit width), along with associated control registers • Instruction pointer • Registers for interrupt control, handling, and identification • Auto-decrementing Loop Counters for fast, compact looping • Two Data Pointer registers and a Frame Pointer for data memory access The Peripheral Registers define additional functionality that may be included by different products based on the MAXQ architecture. This functionality is broken up into discrete modules so that only the features that are required for a given product need to be included. Since the Peripheral Registers add functionality outside of the common MAXQ system architecture, they are not used to implement op codes. 2-5 Maxim Integrated MAXQ Family User’s Guide 2.3 Memory Organization Beyond the internal register space, memory on the MAXQ microcontroller is organized according to a Harvard architecture, with a separate address space and bus for program memory and data memory. Stack memory is also separate and is accessed through a dedicated register set. To provide additional memory map flexibility, an MMU allows data memory space to be mapped into a predefined program memory segment, thus affording the possibility of code execution from data memory. Additionally, program memory space can be made accessible as data space, allowing access to constant data stored in program memory. 2.3.1 Program Memory Program memory begins at address x0000h and is contiguous through the internal program memory. The actual size of the on-chip program memory available for user application is product dependent. Given a 16-bit program address bus, the maximum program space is 64kWords. Since the codewords are 16 bits, the program memory is therefore a 64k x 16 linear space. Program memory is accessed directly by the program fetching unit and is addressed by the Instruction Pointer register. From an implementation perspective, system interrupts and branching instructions simply change the contents of the Instruction Pointer and force the op code fetch from a new program location. The Instruction Pointer is direct read/write accessible by the user software; write access to the Instruction Pointer will force program flow to the new address on the next cycle following the write. The content of the Instruction Pointer will be incremented by 1 automatically after each fetch operation. The Instruction Pointer defaults to 8000h, which is the starting address of the utility ROM. The default IP setting of 8000h is assigned to allow initial in-system programming to be accomplished with utility ROM code assistance. The utility ROM code interrogates a specific register bit in order to decide whether to execute in-system programming or jump immediately to user code starting at 0000h. The user code reset vector should always be stored in the lowest bytes of the program memory. The program memory is normally implemented using nonvolatile memory, e.g., ROM, EEPROM, or Flash. ROM memory technology requires program code to be masked into the ROM during chip fabrication; no write access to program memory is available. EEPROM and Flash provide in-system programming capability but both technologies require that the memory targeted for the write operation be unprogrammed (erased). The utility ROM provides routines to carry out the necessary operations (erase, write, verify) on these nonvolatile memories. 2.3.2 Utility ROM A utility ROM is normally placed in the upper 32kWord program memory space starting at address 8000h. This utility ROM potentially provides the following system utility functions: • Reset vector • Bootstrap function for system initialization • In-application programming • In-circuit debug Following each reset, the processor automatically starts execution at address 8000h in the utility ROM, allowing ROM code to perform any necessary system support functions. Next, the System Programming Enable (SPE) bit is examined to determine whether system programming should commence or whether that code should be bypassed, instead forcing execution to vector to the start of user program code. When the SPE bit is set to logic 1, the processor will execute the prescribed Bootstrap Loader mode program that resides in utility ROM. The SPE bit defaults to 0. To enter the Bootstrap Loader mode, the SPE bit can be set to 1 during reset via the JTAG interface. When in-system programming is complete, the Bootstrap Loader can clear the SPE bit and reset the device such that the insystem programming routine is subsequently bypassed. 2.3.3 Data Memory On-chip data memory begins at address x0000h and is contiguous through the internal data memory. The actual size of the on-chip data memory available for the user application is product dependent. Data memory is accessed via indirect register addressing through a Data Pointer (@DP[n]) or Frame Pointer (@BP[Offs]). The Data Pointer is used as one of the operands in a MOVE instruction. If the Data Pointer is used as source, the core performs a Load operation that reads data from the data memory location addressed by the Data Pointer. If the Data Pointer is used as destination, the core executes a Store operation that writes data to the data memory location addressed by the Data Pointer. The Data Pointer can be directly accessed by the user software. The core incorporates two 16-bit Data Pointers (DP[0] and DP[1]) to support data memory accessing. All Data Pointers support indirect addressing mode and indirect addressing with auto-increment or auto-decrement. Data Pointers DP[0] and DP[1] can be used as Maxim Integrated 2-6 MAXQ Family User’s Guide post increment/decrement source pointers by a MOVE instruction or pre increment/decrement destination pointers by a MOVE instruction. Using Data Pointer indirectly with "++" will automatically increase the content of the active Data Pointer by 1 immediately following the execution of read data transfer (@DP[n]++) or immediately preceding the execution of a write operation (@++DP[n]). Using Data Pointer indirectly with "--" will decrease the content of the active Data Pointer by 1 immediately following the execution of read data transfer (@DP[n]--) or immediately preceding the execution of a write operation (@--DP[n]). The Frame Pointer (BP[Offs]) is formed by 16-bit unsigned addition of Frame Pointer Base Register (BP) and Frame Pointer Offset Register (Offs). Frame Pointer can be used as a post increment/decrement source pointer by a MOVE instruction or as a pre increment/decrement destination pointer. Using Frame Pointer indirectly with "++" (@BP[++Offs] for a write or @BP[Offs++] for a read) will automatically increase the content of the Frame Pointer Offset by 1 immediately before or after the execution of data transfer depending upon whether it is used as a destination or source pointer respectively. Using Frame Pointer indirectly with "--" (@BP[--Offs] for a write or @BP[Offs--] for a read) will decrease the content of the Frame Pointer Offset by 1 immediately before/after execution of data transfer depending upon whether it is used as a destination or source pointer respectively. Note that the increment/decrement function affects the content of the Offs register only, while the contents of the BP register remain unaffected by the borrow/carry out from the Offs register. A data memory cycle contains only one system clock period to support fast internal execution. This allows read or write operations on SRAM to be completed in one clock cycle. Data memory mapping and access control are handled by the MMU. Read/write access to the data memory can be in word or in byte. 2.3.4 Stack Memory A 16-bit wide on-chip stack is provided by the MAXQ for storage of program return addresses and general-purpose use. The stack is used automatically by the processor when the CALL, RET, and RETI instructions are executed and when an interrupt is serviced; it can also be used explicitly to store and retrieve data by using the @SP- - source, @++SP destination, or the PUSH, POP, and POPI instructions. The POPI instruction acts identically to the POP instruction except that it additionally clears the INS bit. The width of the stack is 16 bits to accommodate the instruction pointer size. The stack depth may vary between product implementations. As the stack pointer register SP is used to hold the index of the top of the stack, the maximum size of the stack allowed for a MAXQ product is defined by the number of bits defined in the SP register (e.g., 3 bits for stack depth of 8, 4 bits for stack depth of 16). On reset, the stack pointer SP initializes to the top of the stack (e.g. 07h for an 8-word stack, 0Fh for a 16-word stack). The CALL, PUSH, and interrupt vectoring operations increment SP and then store a value at @SP. The RET, RETI, POP, and POPI operations retrieve the value at @SP and then decrement SP. As with the other RAM-based modules, the stack memory is initialized to indeterminate values upon reset or power-up. Stack memory is dedicated for stack operations only and cannot be accessed through program or data address spaces. 2.4 Pseudo-Von Neumann Memory Mapping The MAXQ supports a pseudo-Von Neumann memory structure that can merge program and data into a linear memory map. This is accomplished by mapping the data memory into the program space or mapping program memory segment into the data space. Program memory from x0000h to x7FFFh is the normal user code segment, followed by the utility ROM segment. The uppermost part of the 64kWord memory is the logical area for data memory when accessed as a code segment. The program memory is logically divided into four program pages: • P0 contains the lower 16kWords, • P1 contains the second 16kWords, • P2 contains the third 16kWords, and • P3 contains the fourth 16kWords. By default, P2 and P3 are not accessible for program execution until they are explicitly activated by the user software. The Upper Program Access (UPA) bit must be set to logic 1 to activate P2 and P3. Once UPA is set, P2 and P3 will occupy the upper half of the 64kWord program space. In this configuration (UPA = 1), the utility ROM cannot be accessed at program memory and the physical data memory cannot be accessed logically in program space. The logical mapping of physical program memory page(s) into data space depends upon two factors: physical memory currently in use for program execution; and word/byte data memory access selection. If execution is from the utility ROM, physical program memory page(s) can logically be mapped to the upper half of data memory space. If logical data memory is used for execution, physical program memory page(s) can logically be mapped to the lower half of data memory space. If byte access mode is selected, only one 2-7 Maxim Integrated MAXQ Family User’s Guide page (16kWords) may be logically mapped, as just defined, to either the upper or lower half of data memory. If word access mode is selected, two pages (32kWords total) may be logically mapped to data memory. To avoid memory overlapping in the byte access mode, the physical data memory should be confined to the address range x0000h to x3FFFh in word mode. The selection of physical memory page or pages to be logically mapped to data space is determined by the Code Access Bits (CDA1:0): CDA1:0 SELECTED PAGE IN BYTE MODE SELECTED PAGE IN WORD MODE 00 01 10 11 P0 P1 P2 P3 P0 and P1 P0 and P1 P2 and P3 P2 and P3 Figure 2-3 and Figure 2-4 summarize the default memory maps for this memory structure. The primary difference lies in the reset default settings for the data pointer Word/Byte Mode Select (WBSn) bits. The WBSn bits of the MAXQ10 default to byte access mode (WBSn = 0), while the MAXQ20 WBSn bits default to word access mode (WBSn = 1). MAXQ10 MEMORY MAP (DEFAULT CONDITION) PROGRAM MEMORY 15 DATA MEMORY 0 7 0 xFFFF xFFFF LOGICAL SPACE LOGICAL SPACE xA000 UTILITY ROM x8000 x8000 PHYSICAL PROGRAM (P1) PHYSICAL DATA PHYSICAL PROGRAM (P0) x0000 x0000 Figure 2-3. Pseudo Von Neumann Memory Map (MAXQ10 Default) Maxim Integrated 2-8 MAXQ Family User’s Guide MAXQ20 MEMORY MAP (DEFAULT CONDITION, UPA = 0) PROGRAM MEMORY 15 MAXQ20 MEMORY MAP (UPA = 1, CDA IS DON’T CARE) PROGRAM MEMORY DATA MEMORY 0 15 0 LOGICAL SPACE 0 15 xFFFF xFFFF DATA MEMORY 0 15 xFFFF xFFFF LOGICAL SPACE P3 PHYSICAL PROGRAM (P3) Physical Program (P0) P2 xA000 PHYSICAL PROGRAM (P2) UTILITY ROM x8000 x8000 PHYSICAL PROGRAM (P1) LOGICAL UTILITY ROM x8000 x8000 PHYSICAL PROGRAM (P1) LOGICAL SPACE LOGICAL SPACE x4000 PHYSICAL PROGRAM (P0) x4000 PHYSICAL PROGRAM (P0) PHYSICAL DATA x0000 x0000 PHYSICAL DATA x0000 x0000 Figure 2-4. Pseudo Von Neumann Memory Map (MAXQ20 Default) 2.5 Pseudo-Von Neumann Memory Access The pseudo-Von Neumann memory mapping is straightforward if there is no memory overlapping among the program, utility ROM, and data memory segments. However, for applications requiring large-size program memory, the paging scheme can be used to selectively activate those overlapped memory segments. The UPA bit can be used to activate the upper half of the physical program code (P2 and P3) for program execution. When accessing the program memory as data, the CDA bits can be used to select one of the four program pages as needed. Full data memory access to any of the four physical program memory pages is based on the assumption that the maximum physical data memory is in the range of 16k x 16. The other restriction for accessing the pseudo-Von Neumann map is that when program execution is in a particular memory segment, the same memory segment cannot be simultaneously be accessed as data. When executing from the lower 32k program space (P0 and P1): • The upper half of the code segment (P2 and P3) is accessible as program if the UPA bit is set to 1. • The physical data memory is available for accessing as a code segment with offset at xA000h if the UPA bit is 0. • Load and Store operations addressed to physical data memory are executed as normal. • The utility ROM can be read as data, starting at x8000h of the data space. When executing from the utility ROM (only allowable when UPA = 0): • The lower 32k program space (P0 and P1) functions as normal program memory. • The upper half of the code segment (P2 and P3) is not accessible as program (since UPA = 0). • The physical data memory is available for accessing as a code segment with offset at xA000h. • Load and Store operations addressed to physical data memory are executed as normal. • One page (byte access mode) or two pages (word access mode) can be accessed as data with offset at x8000h as determined by the CDA1:0 bits. 2-9 Maxim Integrated MAXQ Family User’s Guide When executing from the data memory (only allowable when UPA = 0): • Program flows freely between the lower 32k user code (P0 and P1) and the utility ROM segment. • The upper half of the code segment (P2 and P3) is not accessible as program (since UPA = 0). • The utility ROM can be accessed as data with offset at x8000h. • One page (byte access mode) or two pages (word access mode) can be accessed as data with offset at x0000h as determined by the CDA1:0 bits. 2.6 Data Alignment To support merged program and data memory operation while maintaining efficiency on memory space usage, the data memory must be able to support both byte-wide and word-wide accessing. Data is aligned in data memory as word, but the effective data address is resolved to bytes. This data alignment allows direct program fetching in its native word size while maintaining accessibility at the byte level. It is important to realize that this accessibility requires strict word alignment. All executable words must align to an even address in byte mode. Care must be taken when updating the code segment in the unified data memory space as misalignment of words will likely result in loss of program execution control. Worst yet, this situation may not be detected if the watchdog timer is also disabled. Data memory is organized as two byte-wide memory banks with common word address decode but two 8-bit data buses. The data memory will always be read as a complete word, independent of operation, whether program fetch or data access. The program decoder always uses the full 16-bit word, whereas the data access can utilize a word or an individual byte. In byte mode, data pointer hardware reads out the word containing the selected byte using the effective data word address pointer (the least significant bit of the byte data pointer is not initially used). Then, the least significant data pointer bit functions as the byte select that is used to place the target byte to the data path. For write access, data pointer hardware addresses a particular word using the effective data word address while the least significant bit selects the corresponding data bank for write, leaving the contents of the another memory bank unaffected. 2.6.1 Memory Management Unit Memory allocation and accessing control for program and data memory can be managed by the memory management unit (MMU). A single memory management unit option is discussed in this User Guide, however the memory management unit implementation for any given product depends upon the type and amount of memory addressable by the device. Users should consult the individual product data sheet(s) and/or user’s guide supplement(s) for detailed information. Although supporting less than the maximum addressable program and data memory segments, the MMU implementation presented provides a high degree of programming and access control flexibility. It supports the following: • User program memory up to 32k x 16 (up to 64k x 16 with inclusion of UPA bit). • Utility ROM up to 8k x 16. • Data memory SRAM up to 16k x 16. • In-system and in-application programming of embedded EEPROM, Flash, or SRAM memories. • Access to any of the three memory areas (SRAM, code memory, utility ROM) using the data memory pointers. • Execution from any of the three memory areas (SRAM, code memory, factory written and tested utility-ROM routines). Given these capabilities, the following rules apply to the memory map: • A particular memory segment cannot be simultaneously accessed as both program and data. • The offset address is xA000h when logically mapping data memory into the program space. • The offset for logically mapping the utility ROM into the data memory space is x8000h. • Program memory: - The lower half of the program memory (P0 and P1) is always accessible, starting at x0000h. - The upper half of the program memory (P2 and P3) must be activated by setting the UPA bit to 1 when accessing for code execution, starting at x8000h. - Setting the UPA bit to 1 disallows access to the utility ROM and logical data memory as program. Maxim Integrated 2-10 MAXQ Family User’s Guide MAXQ20 MEMORY MAP (UPA = 0, EXECUTING FROM UTILITY ROM) PROGRAM MEMORY 15 DATA MEMORY 0 15 0 xFFFF LOGICAL SPACE P3 LOGICAL DATA P2 xA000 UTILITY ROM CDA1 = 1 x8000 x8000 PHYSICAL PROGRAM (P1) x4000 A1 PHYSICAL PROGRAM (P0) =0 CD PHYSICAL DATA x0000 x0000 MAXQ20 MEMORY MAP (UPA = 0, EXECUTING FROM LOGICAL DATA MEMORY) PROGRAM MEMORY 15 DATA MEMORY 0 0 15 xFFFF xFFFF LOGICAL SPACE P3 LOGICAL SPACE LOGICAL DATA MEMORY P2 xA000 LOGICAL UTILITY ROM UTILITY ROM x8000 x8000 A1 CD PHYSICAL PROGRAM (P1) =1 PHYSICAL PROGRAM (P0) x0000 CDA1 = 0 x0000 Figure 2-5. CDA Functions (Word Access Mode) 2-11 Maxim Integrated MAXQ Family User’s Guide EXECUTING FROM UTILITY ROM (UPA = 0, ONLY P1, P2 PRESENT) PROGRAM MEMORY 15 DATA MEMORY 0 7 0 xFFFF xFFFF LOGICAL SPACE LOGICAL DATA MEMORY xA000 UTILITY ROM x8000 x8000 0=1 CDA PHYSICAL PROGRAM (P1) PHYSICAL DATA A0 =0 CD PHYSICAL PROGRAM (P0) x0000 x0000 EXECUTING FROM LOGICAL DATA MEMORY (UPA = 0, ONLY P1, P2 PRESENT) PROGRAM MEMORY 15 DATA MEMORY 7 0 0 xFFFF xFFFF LOGICAL SPACE LOGICAL SPACE LOGICAL DATA MEMORY xA000 UTILITY ROM x8000 x8000 PHYSICAL PROGRAM (P1) CDA PHYSICAL PROGRAM (P0) x0000 0=1 CDA0 = 0 x0000 Figure 2-6. CDA Functions (Byte Access Mode) Maxim Integrated 2-12 MAXQ Family User’s Guide - Physical program memory pages (P0, P1, P2, P3) are logically mapped into data space based upon the memory segment currently being used for execution, selection of byte/word access mode, and CDA1:0 bit settings (described under Pseudo Von Neumann Memory Map and Pseudo Von Neumann Memory Access.) • Data memory - Access can be either word or byte. - All 16 data pointer address bits are significant in either access mode (word or byte.) 2.7 Clock Generation All functional modules in the MAXQ are synchronized to a single system clock. The internal clock circuitry generates the system clock from one of four possible sources: • Internal ring oscillator • Internal oscillator, using an external crystal or resonator • Internal relaxation oscillator, using an external RC • External clock signal POWER-ON RESET RESET RWT STOP RESET DOG XDOG STARTUP TIMER XT/RC RESET WATCHDOG TIMER WATCHDOG RESET WATCHDOG INTERRUPT XDOG DONE RC IN OSC IN ENABLE HF CRYSTAL MAXQ RC OSCILLATOR POWER-ON RESET CLOCK DIVIDER ENABLE GLITCH-FREE MUX ENABLE GLITCH-FREE MUX STOP CLOCK GENERATION SYSTEM CLOCK RING OSC DIV 1 DIV 2 DIV 4 DIV 8 PMM ENABLE SWB INTERRUPT/SERIAL PORT RESET SELECTOR DEFAULT RING SELECT STOP RGSL RGMD XDOG DONE Figure 2-7. MAXQ Clock Sources 2-13 Maxim Integrated MAXQ Family User’s Guide The external clock and crystal are mutually exclusive since they are input via the same clock pin. The basic clock source selection is made through two bits: RGSL and XT/RC. The RGSL bit controls selection of the internal ring oscillator for system clock generation. When RGSL = 1, the internal ring oscillator is used for system clock generation. The RGSL bit is read/write accessible at any time and defaults to logic 0 on power-on reset only, allowing the internal ring oscillator to be used for system clock generation until the crystal warmup completes or until user code selects the XTAL1 pin configuration corresponding to an external RC (XT/RC =0). The XT/RC bit is writable only when the internal ring oscillator is explicitly selected for system clock generation (RGSL=1). The user code then must disable the internal ring oscillator (RGSL = 0) for the XT/RC elected clock source to take effect. Since RGSL and XT/RC reside in the same register, an external clock source selection can be made in the same instruction as the ring oscillator is disabled. Once the ring oscillator is disabled, RGSL = 0, the RGMD bit can be used to assess when the switchover to the source defined by XT/RC has occurred. The external RC clock selection (XT/RC =0) requires a 4-cycle count before it can be used, while the external crystal/resonator or external clock selection (XT/RC = 1) requires a 65,536-cycle count before it can be used. Requiring some type of warmup period for both external clock possibilities (crystal or RC) also serves as protection against an errant change of the XT/RC bit that produces a mismatch of XTAL1, XTAL2 pin function and external clock circuitry. Each time code execution must start or restart (as may be the case when exiting stop mode) using the external clock source, the following sequence occurs: • Reset the crystal warmup counter, and • Allow the required warmup delay: - 65,536 external clock cycles if XT/RC = 1 and exiting from stop mode - four external clock cycles if XT/RC = 0 • During the warmup sequence, code execution may commence from the internal ring oscillator provided that one is present in the given MAXQ device. The user code may detect when the automatic switchover from the internal ring oscillator to the selected XT/RC source occurs by polling the RGMD status bit. If the RGSL bit is returned to logic 1 state (internal ring selection) while a warmup is in progress, the crystal amplifier or RC oscillator shuts down and the warmup process terminates. 2.7.1 Internal Ring Oscillator The MAXQ microcontroller can source its main clock directly from an internal ring oscillator. The ring frequency varies over process, temperature, and supply voltage. For synchronization and timing purposes, the ring oscillator resets anytime it is selected for use as the primary system clock. The ring oscillator clock is divided down according to the PMME, CD1:0 bit selections just the same as the external non-ring clock possibilities. There is a four-cycle warmup delay associated with the internal ring oscillator when the system is going through a power-on reset or returning from the Stop mode. 2.7.2 External Clock (Crystal/Resonator) An external quartz crystal or a ceramic resonator can be connected from XTAL1 to XTAL2 as the device determining the frequency, as illustrated in Figure 2-8. The fundamental mode of the crystal operates as inductive reactance in parallel resonance with external capacitance to the crystal. Crystal specifications, operating temperature, operating voltage, and parasitic capacitance must be considered when designing the internal oscillator. To further reduce the effects of external noise, a guard ring can be placed around the oscillator circuitry. Pins XTAL1 and XTAL2 are protected by clamping devices against on-chip electrostatic discharge. These clamping devices are diodes parasitic to the feedback resistor Rf in the inverter circuit of the oscillator. The inverter circuit is presented as a NAND gate, which can disable clock generation in STOP mode or if the internal ring oscillator is explicitly selected for use (i.e., RGSL = 1). Noise at XTAL1 and XTAL2 can adversely affect on-chip clock timing. It is good design practice to place the crystal and capacitors near the oscillator circuitry and connect to XTAL1, XTAL2, and ground with direct shot trace. The typical values of external capacitors vary with the type of crystal used and should be initially selected based on the load capacitance as suggested by the crystal manufacturer. For cost-sensitive applications, a ceramic resonator can be used instead of a crystal. Using the ceramic resonator may require a different circuit configuration and capacitance value. 2.7.3 External Clock (Direct Input) The MAXQ CPU can also obtain the system clock signal directly from an external clock source. In this configuration, the clock generation circuitry is driven directly by an external clock. To operate the core from an external clock, connect the clock source to the XTAL1 pin and leave the XTAL2 pin floating. The clock source should be driven through a CMOS driver. If the clock driver is a TTL gate, its output must be connected to VCC through a pullup Maxim Integrated 2-14 MAXQ Family User’s Guide resistor to ensure a satisfactory logic level for active clock pulses. To minimize system noise on the clock circuitry, the external clock source must meet the maximum rise and fall times and the minimum high and low times specified for the clock source. The external noise can affect clock generation circuit if these parameters do not meet the specification. 2.7.4 External RC For timing-insensitive applications, the external RC option offers additional cost savings. The RC oscillator frequency is a function of the supply voltage, external resistor (Rext) and capacitor (Cext) values and tolerances, and the operating temperature. In addition to this, the oscillator frequency varies from unit to unit due to normal process parameter variation. Figure 2-9 shows how the external RC combination is connected to the MAXQ microcontroller. VCC MAXQ VCC VCC XTAL1 RF MAXQ REXT CLOCK CIRCUITRY STOP OR RGSL XTAL1 CEXT CLOCK CIRCUITRY STOP OR RGSL XTAL2 XTAL2 C1 C2 INTERNAL CIRCUIT INTERNAL CIRCUIT Figure 2-9. RC Relaxation Oscillator Figure 2-8. On-Chip Crystal Oscillator 2.7.5 Internal System Clock Generation The internal system clock is derived from the currently selected oscillator input. By default, one system clock cycle is generated per oscillator cycle, but the number of oscillator cycles per system clock can also be increased by setting the Power Management Mode Enable (PMME) bit and the Clock Divide Control (CD[1:0]) register bits per Table 2-2. Table 2-2. System Clock Rate Control Settings PMME 0 0 0 0 1 2-15 CD[1:0] 00 01 10 11 xx CYCLES PER CLOCK 1 (default) 2 4 8 256 Maxim Integrated MAXQ Family User’s Guide 2.8 Interrupts The MAXQ provides a single, programmable interrupt vector (IV) that can be used to handle internal and external interrupts. Interrupts can be generated from system level sources (e.g., watchdog timer) or by sources associated with the peripheral modules included in the specific MAXQ microcontroller. Only one interrupt can be handled at a time, and all interrupts naturally have the same priority. A programmable interrupt mask register allows software-controlled prioritization and nesting of high-priority interrupts. 2.8.1 Servicing Interrupts For the MAXQ to service an interrupt, interrupts must be enabled globally, modularly, and locally. The Interrupt Global Enable (IGE) bit located in the Interrupt Control (IC) register acts as a global interrupt mask. This bit defaults to 0, and it must be set to 1 before any interrupt takes place. The local interrupt-enable bit for a particular source is in one of the peripheral registers associated with that peripheral module, or in a system register for any system interrupt source. Between the global and local enables are intermediate per-module and system interrupt mask bits. These mask bits reside in the Interrupt Mask system register. By implementing intermediate per-module masking capability in a single register, interrupt sources spanning multiple modules can be selectively enabled/disabled in a single instruction. This promotes a simple, fast, and user-definable interrupt prioritization scheme. The interrupt source-enable hierarchy is illustrated in Figure 2-10. When an interrupt condition occurs, its individual flag is set, even if the interrupt source is disabled at the local, module, or global level. Interrupt flags must be cleared within the user interrupt routine to avoid repeated interrupts from the same source. Since all interrupts vector to the address contained in the Interrupt Vector (IV) register, the Interrupt Identification Register (IIR) may be used by the interrupt service routine to determine the module source of an interrupt. The IIR contains a bit flag for each peripheral module and one flag associated with all system interrupts; if the bit for a module is set, then an interrupt is pending that was initiated by that module. If a module is capable of generating interrupts for different reasons, then peripheral register bits inside the module provide a means to differentiate among interrupt sources. The Interrupt Vector (IV) register provides the location of the interrupt service routine. It may be set to any location within program memory. The IV register defaults to 0000h on reset or power-up, so if it is not changed to a different address, the user program must determine whether a jump to 0000h came from a reset or interrupt source. 2.8.2 Interrupt System Operation The interrupt handler hardware responds to any interrupt event when it is enabled. An interrupt event occurs when an interrupt flag is set. All interrupt requests are sampled at the rising edge of the clock and can be serviced by the processor one clock cycle later, assuming the request does not hit the interrupt exception window. The one-cycle stall between detection and acknowledgement/servicing is due to the fact that the current instruction may also be accessing the stack. For this reason, the CPU must allow the current instruction to complete before pushing the stack and vectoring to IV. If an interrupt exception window is generated by the currently executing instruction, the following instruction must be executed, so the interrupt service routine will be delayed an additional cycle. Interrupt operation in the MAXQ CPU is essentially a state machine generated long CALL instruction. When the interrupt handler services an interrupt, it temporarily takes control of the CPU to perform the following sequence of actions: 1) The next instruction fetch from program memory is cancelled. 2) The return address is pushed on to the stack. 3) The INS bit is set to 1 to prevent recursive interrupt calls. 4) The instruction pointer is set to the location of the interrupt service routine (contained in the Interrupt Vector register). 5) The CPU begins executing the interrupt service routine. Once the interrupt service routine completes, it should use the RETI instruction to return to the main program. Execution of RETI involves the following sequence of actions: 1) The return address is popped off the stack. 2) The INS bit is cleared to 0 to re-enable interrupt handling. 3) The instruction pointer is set to the return address that was popped off the stack. 4) The CPU continues execution of the main program. Pending interrupt requests will not interrupt an RETI instruction; a new interrupt will be serviced after first being acknowledged in the execution cycle which follows the RETI instruction and then after the standard one stall cycle of interrupt latency. This means there will be at least two cycles between back-to-back interrupts. Maxim Integrated 2-16 MAXQ Family User’s Guide SYSTEM MODULES WATCHDOG EWDI (LOCAL ENABLE) IMS (SYSTEM ENABLE) GPI/O MODULE INT0 ƒ INT1 ƒ IT0 IMx (MODULE ENABLE) INT2 INT3 INT4 ƒ INS (INTERRUPT IN SERVICE) ƒ INTERRUPT VECTOR INT5 IT1 IGE (GLOBAL ENABLE) EX0-EX5 (LOCAL ENABLES) TIMER/COUNTER MODULE TF0 TF1 EXF1 ET0, ET1 (LOCAL ENABLES) IMx (MODULE ENABLE) SERIAL I/O MODULE RI TI SPIC ROVR WCOL MODF ESI, ESPII (LOCAL ENABLES) IMx (MODULE ENABLE) NOTE: ONLY A FEW OF THE MANY POSSIBLE MAXQ PERIPHERAL MODULES ARE SHOWN IN THIS INTERRUPT HIERARCHY FIGURE. PLEASE REFERENCE THE CORRESPONDING DATA SHEET FOR INTERRUPT FLAG AND ENABLE BITS SPECIFIC TO A GIVEN DEVICE. Figure 2-10. MAXQ Interrupt Source Hierarchy Example 2.8.3 Synchronous vs. Asynchronous Interrupt Sources Interrupt sources can be classified as either asynchronous or synchronous. All internal interrupts are synchronous interrupts. An internal interrupt is directly routed to the interrupt handler that can be recognized in one cycle. All external interrupts are asynchronous interrupts by nature. When the device is not in Stop Mode, asynchronous interrupt sources are passed through a 3-clock sampling/glitch filter circuit before being routed to the interrupt handler. The sampling/glitch filter circuit is running on the undivided source clock (i.e., before PMME, CD1:0-controlled clock divide) such that the number of system clocks required to recognize an asynchronous interrupt request depends upon the system clock divide ratio: • if the system clock divide ratio is 1, the interrupt request is recognized after 3 system clock; 2-17 Maxim Integrated MAXQ Family User’s Guide • if the system clock divide ratio is 2, the interrupt request is recognized after 2 system clock; • if the system clock divide ratio is 4 or greater, the interrupt request is recognized after 1 system clock; An interrupt request with a pulse width less than three undivided clock cycles is not recognized. Note that the granularity of interrupt source is at module level. Synchronous interrupts and sampled asynchronous interrupts assigned to the same module product a single interrupt to the interrupt handler. External interrupts, when enabled, can be used as switchback sources from power management mode. There is no latency associated with the switchback because the circuit is being clocked by an undivided clock source versus the divide-by-256 system clock. For the same reason, there is no latency for other switchback sources that do not qualify as interrupt sources. 2.8.4 Interrupt Prioritization by Software All interrupt sources of the MAXQ microcontroller naturally have the same priority. However, when CPU operation vectors to the programmed Interrupt Vector address, the order in which potential interrupt sources are interrogated is left entirely up to the user, as this often depends upon the system design and application requirements. The Interrupt Mask system register provides the ability to knowingly block interrupts from modules considered to be of lesser priority and manually re-enable the interrupt servicing by the CPU (by setting INS = 0). Using this procedure, a given interrupt service routine can continue executing, only to be interrupted by higher priority interrupts. An example demonstrating this software prioritization is provided in the Handling Interrupts section of Section 3: Programming. 2.8.5 Interrupt Exception Window An interrupt exception window is a noninterruptable execution cycle. During this cycle, the interrupt handler does not respond to any interrupt requests. All interrupts that would normally be serviced during an interrupt exception window are delayed until the next execution cycle. Interrupt exception windows are used when two or more instructions must be executed consecutively without any delays in between. Currently, there is a single condition in the MAXQ microcontroller that causes an interrupt exception window: activation of the prefix (PFX) register. When the prefix register is activated by writing a value to it, it retains that value only for the next clock cycle. For the prefix value to be used properly by the next instruction, the instruction that sets the prefix value and the instruction that uses it must always be executed back to back. Therefore, writing to the PFX register causes an interrupt exception window on the next cycle. If an interrupt occurs during an interrupt exception window, an additional latency of one cycle in the interrupt handling will be caused as the interrupt will not be serviced until the next cycle. 2.9 Operating Modes In addition to the standard program execution mode, there are three other operating modes for the MAXQ. During Reset Mode, the processor is temporarily halted by an external or internal reset source. During Power Management Mode, the processor executes instructions at a reduced clock rate to decrease power consumption. Stop Mode halts execution and all internal clocks to save power until an external stimulus indicates that processing should be resumed. 2.9.1 Reset Mode When the MAXQ microcontroller is in Reset Mode, no instruction execution or other system or peripheral operations occur, and all input/output pins return to default states. Once the condition that caused the reset (whether internal or external) is removed, the processor begins executing code at address 8000h. There are four different sources that can cause the MAXQ to enter Reset Mode: • Power-On/Brownout Reset • External Reset • Watchdog Timer Reset • Internal System Reset 2.9.1.1 Power-On/Brownout Reset An on-chip power-on reset (POR) circuit is provided to ensure proper initialization on internal device states. The power-on reset circuit provides a minimum power-on-reset delay sufficient to accomplish this initialization. For fast VDD supply rise times, the MAXQ device will, at a minimum, be held in reset for the power-on reset delay when initially powered up. For slow VDD supply rise times, the MAXQ device will be held in reset until VDD is above the power-on-reset voltage threshold. The minimum POR delay and POR voltage threshold can differ depending upon MAXQ device. Refer to the device data sheet(s) for specifics. Maxim Integrated 2-18 MAXQ Family User’s Guide Certain MAXQ devices may also incorporate brownout detection capability. For these devices, an on-chip precision reference and comparator monitor the supply voltage VDD to ensure that it is within acceptable limits. If VDD is below the power-fail level, the power monitor initiates a reset condition. This can occur either when the MAXQ is first powered up when the VDD supply is above the POR voltage threshold, or when VDD drops out of tolerance from an acceptable level. In either case, the reset condition is maintained until VDD rises above the reset level VRST. Once VDD > VRST, execution may resume following any necessary clock warmup delay. When the processor exits from the power-on/brownout reset state, the POR bit in the Watchdog Control Register (WDCN) is set to 1 and can only be cleared by software. The user software can examine the POR bit following a reset to determine whether the reset was caused by a power-on reset or by another source. 2.9.1.2 External Reset During normal operation, the MAXQ device is placed into external reset mode by holding the RST pin at logic 0 for at least four clock cycles. If MAXQ device is in the low-power Stop mode (i.e., system clock is not active), the RST pin becomes an asynchronous source, forcing the reset state immediately after being taken to logic 0. Once the MAXQ enters Reset mode, it remains in reset as long as the RST pin is held at logic 0. After the RST pin returns to logic 1, the processor exits the reset state within four clock cycles and begins program execution at address 8000h. For many MAXQ devices, the RST pin is an output as well as an input. If a reset condition is caused by another source (such as a brownout reset, watchdog, or internal reset), an output reset pulse is generated at the RST pin for as long as the MAXQ remains in reset. If the RST pin is connected to an RC reset circuit or a similar circuit, it may not be able to drive the output reset signal. However, if this occurs it does not affect the internal reset condition. 2.9.1.3 Watchdog Timer Reset The watchdog timer is a programmable hardware timer that can be set to reset the processor in the case of a software lockup or other unrecoverable error. Once the watchdog is enabled in this manner, the processor must reset the watchdog timer periodically to avoid a reset. If the processor does not reset the watchdog timer before it elapses, the watchdog will initiate a reset state. If the watchdog resets the processor, it remains in reset, and holds the RST pin low, for four clock cycles. Once the reset condition is removed, the processor will begin executing program code at address 8000h. When a reset occurs due to a watchdog timeout, the Watchdog Timer Reset flag in the WDCN register is set to 1 and can only be cleared by software. User software can examine this bit following a reset to determine if that reset was caused by a watchdog timeout. 2.9.1.4 Internal System Reset MAXQ devices may incorporate functions that logically warrant the ability to generate an internal system reset. This reset generation capability is assessed by MAXQ function based upon its expected use. In-system programming is a prime example of functionality that benefits by having the ability to reset the device. The exact in-system programming protocol is somewhat device and interface specific, however, it is expected that, upon completion of in-system programming, many users want the ability to reset the system. This internal (software-triggered) reset generation capability is possible following in-system programming. 2.9.2 Power Management Mode There are two major sources of power dissipation in CMOS circuitry. The first is static dissipation caused by continuous leakage current. The second is dynamic dissipation caused by transient switching current required to charge and discharge load capacitors, as well as short circuit current produced by momentary connections between VDD and ground during gate switching. Usually, it is the dynamic switching power dissipation that dominates the total power consumption, and this power dissipation (PD) for a CMOS circuit can be calculated in terms of load capacitance (CL), power-supply voltage (VDD) and operating frequency (f) as: PD = CL x VDD2 x f Capacitance and supply voltage are technology dependent and relatively fixed. However, the operating frequency determines the clock rate, and the required clock rate may be different from application to application depending on the amount of processing power required. If an external crystal or oscillator is being used, the operating frequency can be adjusted by changing external components. However, it may be the case that a single application may require maximum processing power at some times and very little at others. Power Management mode allows an application to reduce its clock frequency, and therefore its power consumption, under software control. Power Management Mode is invoked by setting the PMME bit to 1. Once this bit has been set, one system clock cycle will occur every 256 oscillator cycles. All operations continue as normal in this mode, but at the reduced clock rate. Power Management Mode can be deactivated by clearing the PMME bit to 0; the PMME bit will also be cleared automatically to 0 by any reset condition. 2-19 Maxim Integrated MAXQ Family User’s Guide The PMME bit may not be set to 1 if any potential switchback source is active. Attempts to set the PMME bit under these conditions result in a no-op. 2.9.2.1 Switchback When Power Management Mode is active, the MAXQ operates at a reduced clock rate. Although execution continues as normal, peripherals that base their timing on the system clock such as the UART module and the SPI module may be unable to operate normally or at a high enough speed for proper application response. Additionally, interrupt latency is greatly increased. The Switchback feature is used to allow a processor running under Power Management Mode to switch back to normal mode quickly under certain conditions that require rapid response. Switchback is enabled by setting the SWB bit to 1. If Switchback is enabled, a processor running under Power Management Mode automatically clears the PMME bit to 0 and returns to normal mode when any of the following conditions occur: • An external interrupt condition occurs on an INTx pin and the corresponding external interrupt is enabled. • An active-low transition occurs on the UART serial receive-input line (modes 1, 2, and 3) and data reception is enabled. • The SBUF register is written to send an outgoing byte through the UART and transmission is enabled. • The SPIB register is written in master mode (STBY = 1) to send an outgoing character through the SPI module and transmission is enabled. • The SPI module’s SSEL signal is asserted in slave mode. • Time-of-Day and Subsecond interval alarms from the RTC when enabled. • Active debug mode is entered either by break point match or issuance of the 'Debug' command from background mode. 2.9.3 Stop Mode When the MAXQ is in Stop Mode, the CPU system clock is stopped, and all processing activity is halted. All on-chip peripherals requiring the system clock are also stopped. Power consumption in Stop Mode is at the lowest possible level and is basically limited to static leakage current. Stop Mode is entered by setting the STOP bit to 1. The processor enters Stop Mode immediately once the instruction that sets the STOP bit is executed. The MAXQ exits Stop Mode when any of the following conditions occur: • An external interrupt condition occurs on one of the INTx pins and the corresponding external interrupt is enabled. After the interrupt returns, execution resumes after the stop point. • An external reset signal is applied to the RST pin. After the reset signal is removed, execution resumes at 8000h as it would after any reset state. In some MAXQ devices, the brownout voltage detection circuitry can be disabled during Stop Mode, so a power-fail condition does not cause a reset as it would under normal conditions. Once the processor exits Stop Mode, it resumes execution as follows: • If the RGSL bit is set to 0, the clock source selected by the XT/RC bit is enabled so that it may warm up/stabilize. During the warmup period, the internal ring oscillator may be used for execution. The clock source switches from the ring oscillator to the XT/RC source automatically once the warmup completes. The RGMD bit can be read by the processor to determine when the switch from the ring oscillator to the XT/RC source has occurred. • If the RGSL bit is set to 1, the internal ring oscillator will be used to resume execution and the XT/RC selected clock source will remain disabled. Maxim Integrated 2-20 MAXQ Family User’s Guide SECTION 3: PROGRAMMING This section contains the following information: 3.1 Addressing Modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3-3 3.2 Prefixing Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3-3 3.3 Reading and Writing Registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3-4 3.3.1 Loading an 8-Bit Register With an Immediate Value . . . . . . . . . . . . . . . . . . . . . . . . . . .3-4 3.3.2 Loading a 16-Bit Register With a 16-Bit Immediate Value . . . . . . . . . . . . . . . . . . . . . . .3-4 3.3.3 Moving Values Between Registers of the Same Size . . . . . . . . . . . . . . . . . . . . . . . . . . .3-4 3.3.4 Moving Values Between Registers of Different Sizes . . . . . . . . . . . . . . . . . . . . . . . . . . .3-4 3.4 Reading and Writing Register Bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3-6 3.5 Using the Arithmetic and Logic Unit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3-6 3.5.1 Selecting the Active Accumulator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3-6 3.5.2 Enabling Auto-Increment and Auto-Decrement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3-6 3.5.3 ALU Operations Using the Active Accumulator and a Source . . . . . . . . . . . . . . . . . . .3-8 3.5.4 ALU Operations Using Only the Active Accumulator . . . . . . . . . . . . . . . . . . . . . . . . . . .3-9 3.5.5 ALU Bit Operations Using Only the Active Accumulator . . . . . . . . . . . . . . . . . . . . . . . .3-9 3.5.6 MAXQ10 Example: Adding Two 4-Byte Numbers Using Auto-Increment . . . . . . . . . . .3-9 3.5.7 MAXQ20 Example: Adding Two 4-Byte Numbers Using Auto-Increment . . . . . . . . . . .3-10 3.6 Processor Status Flag Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3-10 3.6.1 Sign Flag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3-10 3.6.2 Zero Flag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3-10 3.6.3 Equals Flag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3-10 3.6.4 Carry Flag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3-10 3.6.5 Overflow Flag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3-11 3.7 Controlling Program Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3-11 3.7.1 Obtaining the Next Execution Address . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3-11 3.7.2 Unconditional Jumps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3-12 3.7.3 Conditional Jumps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3-12 3.7.4 Calling Subroutines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3-12 3.7.5 Looping Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3-12 3.7.6 Conditional Returns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3-13 3-1 Maxim Integrated MAXQ Family User’s Guide 3.8 Handling Interrupts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3-13 3.8.1 Conditional Return from Interrupt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3-14 3.9 Accessing the Stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3-15 3.10 Accessing Data Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3-15 3.11 Using the Watchdog Timer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3-17 LIST OF FIGURES Figure 3-1. Watchdog Timer Block Diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3-18 LIST OF TABLES Table 3-1. Accumulator Pointer Control Register Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3-7 Table 3-2. Watchdog Timer Register Control Bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3-17 Table 3-3. Watchdog Timeout Period Selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3-19 Table 3-4. System Register Map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3-19 Table 3-5. System Register Bit Map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3-20 Table 3-6. System Register Bit Reset Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3-21 Maxim Integrated 3-2 MAXQ Family User’s Guide SECTION 3: PROGRAMMING The following section provides a programming overview of the MAXQ. For full details on the instruction set, as well as System Register and Peripheral Register detailed bit descriptions, see the appropriate sections in this user’s guide. 3.1 Addressing Modes The instruction set for the MAXQ provides three different addressing modes: direct, indirect, and immediate. The direct addressing mode can be used to specify either source or destination registers, such as: move push add A[0], A[1] A[0] A[1] ; copy accumulator 1 to accumulator 0 ; push accumulator 0 on the stack ; add accumulator 1 to the active accumulator Direct addressing is also used to specify addressable bits within registers. move C, Acc.0 move PO0.3, #1 ; copy bit zero of the active accumulator ; to the carry flag ; set bit three of port 0 Output register Indirect addressing, in which a register contains a source or destination address, is used only in a few cases. move @DP[0], A[0] move A[0], @SP-- ; copy accumulator 0 to the data memory ; location pointed to by data pointer 0 ; where @SP-- is used to pop the data pointed to ; by the stack pointer register Immediate addressing is used to provide values to be directly loaded into registers or used as operands. move A[0], #10h ; set accumulator 1 to 10h/16d 3.2 Prefixing Operations All instructions on the MAXQ are 16 bits long and execute in a single cycle. However, some operations require more data than can be specified in a single cycle or require that high-order register-index bits be set to achieve the desired transfer. In these cases, the prefix register module PFX is loaded with temporary data and/or required register index bits to be used by the following instruction. The PFX module only holds loaded data for a single cycle before it clears to zero. Instruction prefixing is required for the following operations, which effectively makes them two-cycle operations: • When providing a 16-bit immediate value for an operation (e.g., loading a 16-bit register, ALU operation, supplying an absolute program branch destination), the PFX module must be loaded in the previous cycle with the high byte of the 16-bit immediate value unless that high byte is zero. One exception to this rule is when supplying an absolute branch destination to 00xxh. In this case, PFX still must be written with 00h. Otherwise, the branch instruction would be considered a relative one instead of the desired absolute branch. • When selecting registers with indexes greater than 07h within a module as destinations for a transfer or registers with indexes greater than 0Fh within a module as sources, the PFX[n] register must be loaded in the previous cycle. This can be combined with the previous item. Generally, prefixing operations can be inserted automatically by the assembler as needed, so that (for example) move DP[0], #1234h actually assembles as move PFX[0], #12h move DP[0], #34h However, the operation move DP[0], #0055h does not require a prefixing operation even though the register DP[0] is 16-bit. This is because the prefix value defaults to zero, so the line move is not required. 3-3 PFX[0], #00h Maxim Integrated MAXQ Family User’s Guide 3.3 Reading and Writing Registers All functions in the MAXQ are accessed through registers, either directly or indirectly. This section discusses loading registers with immediate values and transferring values between registers of the same size and different sizes. 3.3.1 Loading an 8-Bit Register With an Immediate Value Any writeable 8-bit register with a sub-index from 0h to 7h within its module can be loaded with an immediate value in a single cycle using the MOVE instruction. move AP, #05h ; load accumulator pointer register with 5 hex Writeable 8-bit registers with sub-indexes 8h and higher can be loaded with an immediate value using MOVE as well, but an additional cycle is required to set the prefix value for the destination. move WDCN, #33h ; assembles to: ; move PFX[2], #00h move (WDCN-80h), #33h 3.3.2 Loading a 16-Bit Register With a 16-Bit Immediate Value Any writeable 16-bit register with a sub-index from 0h to 07h can be loaded with an immediate value in a single cycle if the high byte of that immediate value is zero. move LC[0], #0010h ; prefix defaults to zero for high byte If the high byte of that immediate value is not zero or if the 16-bit destination sub-index is greater than 7h, an extra cycle is required to load the prefix value for the high byte and/or the high-order register index bits. move LC[0], #0110h move A[8], #0034h ; ; ; ; ; ; high byte #00h assembles to: move PFX[0], #01h move LC[0], #10h destination sub-index > 7h assembles to: move PFX[2], #00h move (A[8]-80h), #34h 3.3.3 Moving Values Between Registers of the Same Size Moving data between same-size registers can be done in a single-cycle MOVE if the destination register’s index is from 0h to 7h and the source register index is between 0h and Fh. move A[0], A[8] ; copy accumulator 8 to accumulator 0 move LC[0], LC[1] ; copy loop counter 1 to loop counter 0 If the destination register’s index is greater than 7h or if the source register index is greater than Fh, prefixing is required. move A[15], A[0] ; assembles to: ; move PFX[2], #00h move (A[15]-80h), A[0] 3.3.4 Moving Values Between Registers of Different Sizes Before covering some transfer scenarios that might arise, a special register must be introduced that will be used in many of these cases. The 16-bit General Register (GR) is expressly provided for performing byte singulation of 16-bit words. The high and low bytes of GR are individually accessible in the GRH and GRL registers respectively. A read-only GRS register makes a byte-swapped version of GR accessible and the GRXL register provides a sign-extended version of GRL. 8-bit destination ← low byte (16-bit source) The simplest transfer possibility would be loading an 8-bit register with the low byte of a 16-bit register. This transfer does not require use of GR and requires a prefix only if the destination or source register are outside of the single cycle write or read regions, 0–7h and 0–Fh, respectively. move move move Maxim Integrated OFFS, LC[0] IMR, @DP[1] WDCN, LC[0] ; copy the low byte of LC[0] to the OFFS register ; copy the low byte @DP[1] to the IMR register ; assembles to: move PFX[2], #00h ; move (WDCON-80h), LC[0] 3-4 MAXQ Family User’s Guide 8-bit destination ← high byte (16-bit source) If, however, we needed to load an 8-bit register with the high byte of a 16-bit source, it would be best to use the GR register. Transferring the 16-bit source to the GR register adds a single cycle. move move GR, LC[0] IC, GRH ; move LC[0] to the GR register ; copy the high byte into the IC register 16-bit destination ← concatenation (8-bit source, 8-bit source) Two 8-bit source registers can be concatenated and stored into a 16-bit destination by using the prefix register to hold the high-order byte for the concatenated transfer. An additional cycle may be required if either source byte register index is greater than 0Fh or the 16-bit destination is greater than 07h. move move move move move PFX[0], IC @++SP, AP ; load high order source byte IC into PFX ; store @DP[0] the concatenation of IC:AP PFX[1], #00h PFX[3], high dst, low ; 16-bit destination sub-index: dst=08h ; 8-bit source sub-indexes: ; high=10h, low=11h ; ; PFX=00:high ; dst=high:low Low (16-bit destination) ← 8-bit source To modify only the low byte of a given 16-bit destination, the 16-bit register should be moved into the GR register such that the high byte can be singulated and the low byte written exclusively. An additional cycle is required if the destination index is greater than 0Fh. move move move GR, DP[0] PFX[0], GRH DP[0], #20h move move move move PFX[1], #00h GR, dst PFX[5], GRH dst, src ; ; ; ; ; ; ; ; ; move DP[0] to the GR register get the high byte of DP[0] via GRH store the new DP[0] value 16-bit destination sub-index: dst=10h 8-bit source sub-index: src=11h read dst word to the GR register get the high byte of dst via GRH store the new dst value High (16-bit destination) ← 8-bit source To modify only the high byte of a given 16-bit destination, the 16-bit register should be moved into the GR register such that the low byte can be singulated and the high byte can be written exclusively. Additional cycles are required if the destination index is greater than 0Fh or if the source index is greater than 0Fh. move move move GR, DP[0] PFX[0], #20h DP[0], GRL ; ; ; ; ; ; ; move DP[0] to the GR register get the high byte of DP[0] via GRH store the new DP[0] value 16-bit destination sub-index: dst=10h 8-bit source sub-index: src=11h move PFX[1], #00h move GR, dst read dst word to the GR register move PFX[1], #00h move PFX[4], src ; get the new src byte move dst, GRL ; store the new dst value If the high byte needs to be cleared to 00h, the operation can be shortened by transferring only the GRL byte to the 16-bit destination (example follows): move move 3-5 GR, DP[0] DP[0], GRL ; move DP[0] to the GR register ; store the new DP[0] value, 00h used for high byte Maxim Integrated MAXQ Family User’s Guide 3.4 Reading and Writing Register Bits The MOVE instruction can also be used to directly set or clear any one of the lowest 8 bits of a peripheral register in module 0h-5h or a system register in module 8h. The set or clear operation will not affect the upper byte of a 16-bit register that is the target of the set or clear operation. If a set or clear instruction is used on a destination register that does not support this type of operation, the register high byte will be written with the prefix data and the low byte will be written with the bit mask (i.e. all 0’s with a single 1 for the set bit operation or all ones with a single 0 for the clear bit operation). Register bits can be set or cleared individually using the MOVE instruction as follows. move IGE, #1 ; set IGE (Interrupt Global Enable) bit move APC.6, #0 ; clear IDS bit (APC.6) As with other instructions, prefixing is required to select destination registers beyond index 07h. The MOVE instruction may also be used to transfer any one of the lowest 8 bits from a register source or any bit of the active accumulator (Acc) to the Carry flag. There is no restriction on the source register module for the ‘MOVE C, src.bit’ instruction. move C, IIR.3 ; copy IIR.3 to Carry move C, Acc.7 ; copy Acc.7 to Carry Prefixing is required to select source registers beyond index 15h. 3.5 Using the Arithmetic and Logic Unit The MAXQ provides either an 8-bit (MAXQ10) or 16-bit (MAXQ20) ALU, which allows operations to be performed between the active accumulator and any other register. The default ALU configuration provides eight accumulator registers that are also either 8-bit (MAXQ10) or 16-bit (MAXQ20) wide, of which any one may be selected as the active accumulator. Many MAXQ devices will be equipped with 16 working accumulators. 3.5.1 Selecting the Active Accumulator Any of the 16 accumulator registers A[0] through A[15] may be selected as the active accumulator by setting the low four bits of the Accumulator Pointer Register (AP) to the index of the accumulator register you want to select. move AP, #01h ; select A[1] as the active accumulator move AP, #0Fh ; select A[15] as the active accumulator The current active accumulator can be accessed as the Acc register, which is also the register used as the implicit destination for all arithmetic and logical operations. move A[0], #55h move move AP, #00h Acc, #55h ; set A[0] = 55 hex (MAXQ10) ; = 0055 hex (MAXQ20) ; select A[0] as active accumulator ; set A[0] = 55 hex (MAXQ10) ; = 0055 hex (MAXQ20) 3.5.2 Enabling Auto-Increment and Auto-Decrement The accumulator pointer AP can be set to automatically increment or decrement after each arithmetic or logical operation. This is useful for operations involving a number of accumulator registers, such as adding or subtracting two multibyte integers. If auto-increment/decrement is enabled, the AP register increments or decrements after any of the following operations: • ADD src (Add source to active accumulator) • ADDC src (Add source to active accumulator with carry) • SUB src (Subtract source from active accumulator) • SUBB src (Subtract source from active accumulator with borrow) • AND src (Logical AND active accumulator with source) • OR src (Logical OR active accumulator with source) • XOR src (Logical XOR active accumulator with source) • CPL (Bit-wise complement active accumulator) • NEG (Negate active accumulator) Maxim Integrated 3-6 MAXQ Family User’s Guide • SLA (Arithmetic shift left on active accumulator) • SLA2 (Arithmetic shift left active accumulator two bit positions) • SLA4 (Arithmetic shift left active accumulator four bit positions) • SRA (Arithmetic shift right on active accumulator) • SRA2 (Arithmetic shift right active accumulator two bit positions) • SRA4 (Arithmetic shift right active accumulator four bit positions) • RL (Rotate active accumulator left) • RLC (Rotate active accumulator left through Carry flag) • RR (Rotate active accumulator right) • RRC (Rotate active accumulator right through Carry flag) • SR (Logical shift active accumulator right) • MOVE Acc, src (Copy data from source to active accumulator) • MOVE dst, Acc (Copy data from active accumulator to destination) • MOVE Acc, Acc (Recirculation of active accumulator contents) • XCHN (Exchange nibbles within each byte of active accumulator) (MAXQ20 Only) • XCH (Exchange active accumulator bytes) The active accumulator may not be the source in any instruction where it is also the implicit destination. There is an additional notation that can be used to refer to the active accumulator for the instruction "MOVE dst, Acc." If the instruction is instead written as "MOVE dst, A[AP]," the source value is still the active accumulator, but no AP auto-increment or auto-decrement function will take place, even if this function is enabled. Note that the active accumulator may not be the destination for the MOVE dst, A[AP] instruction (i.e. MOVE Acc, A[AP] is prohibited). So, the two instructions move A[7], Acc move A[7], A[AP] are equivalent, except that the first instruction triggers auto-inc/dec (if it is enabled), while the second one will never do so. The Accumulator Pointer Control Register (APC) controls the automatic-increment/decrement mode as well as selects the range of bits (modulo) in the AP register that will be incremented or decremented. There are nine different unique settings for the APC register, as listed in Table 3-1. Table 3-1. Accumulator Pointer Control Register Settings 3-7 APC.2 (MOD2) APC.1 (MOD1) APC.0 (MOD0) APC.6 (IDS) APC 0 0 0 0 0 0 0 1 1 0 0 0 1 1 1 1 0 0 0 1 1 0 0 1 1 0 0 X 0 1 0 1 0 1 0 1 00h 01h 41h 02h 42h 03h 43h 04h 44h AUTO INCREMENT/DECREMENT SETTING No auto-increment/decrement (default mode) Increment bit 0 of AP (modulo 2) Decrement bit 0 of AP (modulo 2) Increment bits [1:0] of AP (modulo 4) Decrement bits [1:0] of AP (modulo 4) Increment bits [2:0] of AP (modulo 8) Decrement bits [2:0] of AP (modulo 8) Increment all 4 bits of AP (modulo 16) Decrement all 4 bits of AP (modulo 16) Maxim Integrated MAXQ Family User’s Guide For the modulo increment or decrement operation, the selected range of bits in AP are incremented or decremented. However, if these bits roll over or under, they simply wrap around without affecting the remaining bits in the accumulator pointer. So, the operations can be defined as follows: • Increment modulo 2: AP = AP[3:1] + ((AP[0] + 1) mod 2) • Decrement modulo 2: AP = AP[3:1] + ((AP[0] - 1) mod 2) • Increment modulo 4: AP = AP[3:2] + ((AP[1:0] + 1) mod 4) • Decrement modulo 4: AP = AP[3:2] + ((AP[1:0] - 1) mod 4) • Increment modulo 8: AP = AP[3] + ((AP[2:0] + 1) mod 8) • Decrement modulo 8: AP = AP[3] + ((AP[2:0] - 1) mod 8) • Increment modulo 16: AP = (AP + 1) mod 16 • Decrement modulo 16: AP = (AP - 1) mod 16 For this example, assume that all 16 accumulator registers are initially set to zero. move move AP, #02h APC, #02h add add add add add #01h #02h #03h #04h #05h ; select A[2] as active accumulator ; auto-increment AP[1:0] modulo 4 ; AP A[0]* A[1]* A[2]* A[3]* ; 02 0000 0000 0000 0000 ; 03 0000 0000 0001 0000 ; 00 0000 0000 0001 0002 ; 01 0003 0000 0001 0002 ; 02 0003 0004 0001 0002 ; 03 0003 0004 0006 0002 ; ; *the upper #00h byte of each accumulator ; is only present on the MAXQ20 device 3.5.3 ALU Operations Using the Active Accumulator and a Source The following arithmetic and logical operations can use any register or immediate value as a source. The active accumulator Acc is always used as the second operand and the implicit destination. Also, Acc may not be used as the source for any of these operations. add addc A[4] #32h sub subb cmp A[15] A[1] #00h and or A[0] #55h xor A[1] Maxim Integrated ; ; ; ; ; ; ; ; ; ; ; Acc = Acc + A[4] Acc = Acc + 32h + Carry (MAXQ10) Acc = Acc + 0032h + Carry (MAXQ20) Acc = Acc – A[15] Acc = Acc – A[1] - Carry If (Acc == 00h), set Equals flag (MAXQ10) If (Acc == 0000h), set Equals flag (MAXQ20) Acc = Acc AND A[0] Acc = Acc OR #55h (MAXQ10) Acc = Acc OR #0055h (MAXQ20) Acc = Acc XOR A[1] 3-8 MAXQ Family User’s Guide 3.5.4 ALU Operations Using Only the Active Accumulator The following arithmetic and logical operations operate only on the active accumulator. cpl neg rl rlc rr rrc sla sla2 sla4 sr sra sra2 sra4 xchn xch (MAXQ20 only) ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; Acc = NOT Acc Acc = (NOT Acc) + 1 Rotate accumulator left (not using Carry) Rotate accumulator left through Carry Rotate accumulator right (not using Carry) Rotate accumulator right through Carry Shift accumulator left arithmetically once Shift accumulator left arithmetically twice Shift accumulator left arithmetically four times Shift accumulator right, set Carry to Acc.0, set Acc.7 to zero (MAXQ10) set Acc.15 to zero (MAXQ20) Shift accumulator right arithmetically once Shift accumulator right arithmetically twice Shift accumulator right arithmetically four times Swap low and high nibbles of each Acc byte Swap low byte and high byte of Acc 3.5.5 ALU Bit Operations Using Only the Active Accumulator The following operations operate on single bits of the current active accumulator in conjunction with the Carry flag. Any of these operations may use an Acc bit from 0 to 7 (for MAXQ10) or from 0 to 15 (for MAXQ20). move C, Acc.0 ; copy bit 0 of accumulator to Carry move Acc.5, C ; copy Carry to bit 5 of accumulator and Acc.3 ; Acc.3 = Acc.3 AND Carry or Acc.0 ; Acc.0 = Acc.0 OR Carry xor Acc.1 ; Acc.1 = Acc.1 OR Carry None of the above bit operations cause the auto-increment, auto-decrement, or modulo operations defined by the accumulator pointer control (APC) register. 3.5.6 MAXQ10 Example: Adding Two 4-Byte Numbers Using Auto-Increment move A[0], #78h ; First number – 12345678h move A[1], #56h move A[2], #34h move A[3], #12h move A[4], #0AAh ; Second number – 0AAAAAAAh move A[5], #0AAh move A[6], #0AAh move A[7], #0Ah move AP, #00h ; A[0] is active accumulator move APC, #02h ; Increment low two bits mod 4 add A[4] ; A[0] = 78h + AAh = 22h + Carry addc A[5] ; A[1] = 56h + AAh + 1 = 01h + Carry addc A[6] ; A[2] = 34h + AAh + 1 = DFh addc A[7] ; A[3] = 12h + 0Ah = 1Ch ; 12345678h + 0AAAAAAAh = 1CDF0122h 3-9 Maxim Integrated MAXQ Family User’s Guide 3.5.7 MAXQ20 Example: Adding Two 4-Byte Numbers Using Auto-Increment move A[0], #5678h ; First number – 12345678h move A[1], #1234h move A[2], #0AAAAh ; Second number – 0AAAAAAAh move A[3], #0AAAh move APC, #81h ; Active Acc = A[0], increment low bit = mod 2 add A[2] ; A[0] = 5678h + AAAAh = 0122h + Carry addc A[3] ; A[1] = 1234h + AAAh + 1 = 1CDFh ; 12345678h + 0AAAAAAAh = 1CDF0122h 3.6 Processor Status Flag Operations The Processor Status Flag (PSF) register contains five flags that are used to indicate and store the results of arithmetic and logical operations, four of which can also be used for conditional program branching. 3.6.1 Sign Flag The Sign flag (PSF.6) reflects the current state of the high bit of the active accumulator (Acc.7 for the MAXQ10 or Acc.15 for the MAXQ20). If signed arithmetic is being used, this flag indicates whether the value in the accumulator is positive or negative. Since the Sign flag is a dynamic reflection of the high bit of the active accumulator, any instruction that changes the value in the active accumulator can potentially change the value of the Sign flag. Also, any instruction that changes which accumulator is the active one (including AP auto-increment/decrement) can also change the Sign flag. The following operation uses the Sign flag: • JUMP S, src (Jump if Sign flag is set) 3.6.2 Zero Flag The Zero flag (PSF.7) is a dynamic flag that reflects the current state of the active accumulator Acc. If all bits in the active accumulator are zero, the Zero flag equals 1. Otherwise, it equals 0. Since the Zero flag is a dynamic reflection of (Acc = 0), any instruction that changes the value in the active accumulator can potentially change the value of the Zero flag. Also, any instruction that changes which accumulator is the active one (including AP auto-increment/decrement) can also change the Zero flag. The following operations use the Zero flag: • JUMP Z, src (Jump if Zero flag is set) • JUMP NZ, src (Jump if Zero flag is cleared) 3.6.3 Equals Flag The Equals flag (PSF.0) is a static flag set by the CMP instruction. When the source given to the CMP instruction is equal to the active accumulator, the Equals flag is set to 1. When the source is different from the active accumulator, the Equals flag is cleared to 0. The following instructions use the value of the Equals flag. Please note that the ‘src’ for the JUMP E/NE instructions must be immediate. • JUMP E, src (Jump if Equals flag is set) • JUMP NE, src (Jump if Equals flag is cleared) In addition to the CMP instruction, any instruction using PSF as the destination can alter the Equals flag. 3.6.4 Carry Flag The Carry flag (PSF.1) is a static flag indicating that a carry or borrow bit resulted from the last ADD/ADDC or SUB/SUBB operation. Unlike the other status flags, it can be set or cleared explicitly and is also used as a generic bit operand by many other instructions. The following instructions can alter the Carry flag: • ADD src (Add source to active accumulator) • ADDC src (Add source and Carry to active accumulator) • SUB src (Subtract source from active accumulator) • SUBB src (Subtract source and Carry from active accumulator) Maxim Integrated 3-10 MAXQ Family User’s Guide • SLA, SLA2, SLA4 (Arithmetic shift left active accumulator) • SRA, SRA2, SRA4 (Arithmetic shift right active accumulator) • SR (Shift active accumulator right) • RLC/RRC (Rotate active accumulator left / right through Carry) • MOVE C, Acc. (Set Carry to selected active accumulator bit) • MOVE C, #i (Explicitly set, i = 1, or clear, i = 0, the Carry flag) • CPL C (Complement Carry) • AND Acc. • OR Acc. • XOR Acc. • MOVE C, src. (Copy bit addressable register bit to Carry) • any instruction using PSF as the destination The following instructions use the value of the Carry flag: • ADDC src (Add source and Carry to active accumulator) • SUBB src (Subtract source and Carry from active accumulator) • RLC/RRC (Rotate active accumulator left/right through Carry) • CPL C (Complement Carry) • MOVE Acc., C (Set selected active accumulator bit to Carry) • AND Acc. (Carry = Carry AND selected active accumulator bit) • OR Acc. (Carry = Carry OR selected active accumulator bit) • XOR Acc. (Carry = Carry XOR selected active accumulator bit) • JUMP C, src (Jump if Carry flag is set) • JUMP NC, src (Jump if Carry flag is cleared) 3.6.5 Overflow Flag The Overflow flag (PSF.2) is a static flag indicating that the carry or borrow bit (Carry status Flag) resulting from the last ADD/ADDC or SUB/SUBB operation but did not match the carry or borrow of the high order bit of the active accumulator. The overflow flag is useful when performing signed arithmetic operations. The following instructions can alter the Overflow flag: • ADD src (Add source to active accumulator) • ADDC src (Add source and Carry to active accumulator) • SUB src (Subtract source from active accumulator) • SUBB src (Subtract source and Carry from active accumulator) 3.7 Controlling Program Flow The MAXQ provides several options to control program flow and branching. Jumps may be unconditional, conditional, relative, or absolute. Subroutine calls store the return address on the hardware stack for later return. Built-in counters and address registers are provided to control looping operations. 3.7.1 Obtaining the Next Execution Address The address of the next instruction to be executed can be read at any time by reading the Instruction Pointer (IP) register. This can be particularly useful for initializing loops. Note that the value returned is actually the address of the current instruction plus 1, so this will be the address of the next instruction executed as long as the current instruction does not cause a jump. 3-11 Maxim Integrated MAXQ Family User’s Guide 3.7.2 Unconditional Jumps An unconditional jump can be relative (IP +127/-128 words) or absolute (to anywhere in program space). Relative jumps must use an 8-bit immediate operand, such as Label1: ... jump Label1 ; must be within +127/-128 words of the JUMP Absolute jumps can use a 16-bit immediate operand, a 16-bit register, or an 8-bit register. jump LongJump ; assembles to: move PFX[0], #high(LongJump) ; jump #low(LongJump) jump DP[0] ; absolute jump to the address in DP[0] If an 8-bit register is used as the jump destination, the prefix value is used as the high byte of the address and the register is used as the low byte. 3.7.3 Conditional Jumps Conditional jumps transfer program execution based on the value of one of the status flags (C, E, Z, S). Except where noted for JUMP E and JUMP NE, the absolute and relative operands allowed are the same as for the unconditional JUMP command. jump c, Label1 jump nc, LongJump jump z, LC[0] jump jump jump jump JUMP E and JUMP ; jump to ; jump to ; jump to ; Zero nz, Label1 ; jump to s, A[2] ; jump to e, Label1 ; jump to ne, Label1 ; jump to NE may only use immediate destinations. Label1 if Carry is set LongJump if Carry is not set 16-bit register destination if is set Label1 if Zero is not set (Acc0) A[2] if Sign flag is set Label1 if Equal is set Label1 if Equal is cleared 3.7.4 Calling Subroutines The CALL instruction works the same as the unconditional JUMP, except that the next execution address is pushed on the stack before transferring program execution to the branch address. The RET instruction is used to return from a normal call, and RETI is used to return from an interrupt handler routine. call Label1 call LongCall call LC[0] LongCall: ret ; ; ; ; ; if Label1 is relative, assembles to : call #immediate assembles to: move PFX[0], #high(LongCall) call #low(LongCall) call to address in LC[0] ; return from subroutine 3.7.5 Looping Operations Looping over a section of code can be performed by using the conditional jump instructions. However, there is built-in functionality, in the form of the ‘DJNZ LC[n], src’ instruction, to support faster, more compact looping code with separate loop counters. The 16-bit registers LC[0], and LC[1] are used to store these loop counts. The ‘DJNZ LC[n], src’ instruction automatically decrements the associated loop counter register and jumps to the loop address specified by src if the loop counter has not reached 0. To initialize a loop, set the LC[n] register to the count you wish to use before entering the loop’s main body. The desired loop address should be supplied in the src operand of the ‘DJNZ LC[n], src’ instruction. When the supplied loop address is relative (+127/-128 words) to the DJNZ LC[n] instruction, as is typically the case, the assembler automatically calculates the relative offset and inserts this immediate value in the object code. move LoopTop: call djnz Maxim Integrated LC[1], #10h LoopSub LC[1], LoopTop ; loop 16 times ; loop addr relative to djnz LC[n],src instruction ; decrement LC[1] and jump if nonzero 3-12 MAXQ Family User’s Guide When the supplied loop address is outside the relative jump range, the prefix register (PFX[0]) is used to supply the high byte of the loop address as required. move LoopTop: call ... djnz LC[1], #10h LoopSub ; loop 16 times ; loop addr not relative to djnz LC[n],src ; decrement LC[1] and jump if nonzero ; assembles to: move PFX[0], #high(LoopTop) ; djnz LC[1], #low(LoopTop) If loop execution speed is critical and a relative jump cannot be used, one might consider preloading an internal 16-bit register with the src loop address for the ‘DJNZ LC[n], src’ loop. This ensures that the prefix register will not be needed to supply the loop address and always yields the fastest execution of the DJNZ instruction. move LC[1], LoopTop LC[0], #LoopTop ; using LC[0] as address holding register ; assembles to: move PFX[0], #high(LoopTop) ; move LC[0], #low(LoopTop) ; loop 16 times move LC[1], #10h ... LoopTop: ; loop address not relative to djnz LC[n],src call LoopSub ... djnz LC[1], LC[0] ; decrement LC[1] and jump if nonzero If opting to preload the loop address to an internal 16-bit register, the most time and code efficient means is by performing the load in the instruction just prior to the top of the loop: move move LoopTop: ... LC[1], #10h LC[0], IP ; Set loop counter to 16 ; Set loop address to the next address ; loop addr not relative to djnz LC[n],src 3.7.6 Conditional Returns Similar to the conditional jumps, the MAXQ microcontroller also supports a set of conditional return operations. Based upon the value of one of the status flags, the CPU can conditionally pop the stack and begin execution at the address popped from the stack. If the condition is not true, the conditional return instruction does not pop the stack and does not change the instruction pointer. The following conditional return operations are supported: RET RET RET RET RET C NC Z NZ S ; ; ; ; ; if if if if if C=1, a RET is executed C=0, a RET is executed Z=1 (Acc=00h), a RET is executed Z=0 (Acc00h), a RET is executed S=1, a RET is executed 3.8 Handling Interrupts Handling interrupts in the MAXQ is a three-part process. First, the location of the interrupt handling routine must be set by writing the address to the 16-bit Interrupt Vector (IV) register. This register defaults to 0000h on reset, but this will usually not be the desired location since this will often be the location of reset/power-up code. move ; move PFX[0], #high(IntHandler) ; move IV, #low(IntHandler) ; PFX[0] write not needed if IntHandler addr=00xxh Next, the interrupt must be enabled. For any interrupts to be handled, the IGE bit in the Interrupt and Control register (IC) must first be set to 1. Next, the interrupt itself must be enabled at the module level and locally within the module itself. The module interrupt enable is located in the Interrupt Mask register, while the location of the local interrupt enable will vary depending on the module in which the interrupt source is located. 3-13 IV, IntHandler Maxim Integrated MAXQ Family User’s Guide Once the interrupt handler receives the interrupt, the Interrupt in Service (INS) bit will be set by hardware to block further interrupts, and execution control is transferred to the interrupt service routine. Within the interrupt service routine, the source of the interrupt must be determined. Since all interrupts go to the same interrupt service routine, the Interrupt Identification Register (IIR) must be examined to determine which module initiated the interrupt. For example, the II0 (IIR.0) bit will be set if there is a pending interrupt from module 0. These bits cannot be cleared directly; instead, the appropriate bit flag in the module must be cleared once the interrupt is handled. INS is set automatically on entry to the interrupt handler and cleared automatically on exit (RETI). IntHandler: push PSF ; save C since used in identification process move C, IIR.X ; check highest priority flag in IIR jump C, ISR_X ; if IIR.X is set, interrupt from module X move C, IIR.Y ; check next highest priority int source jump C, ISR_Y ; if IIR.Y is set, interrupt from module Y ... ISR_X: ... reti To support high priority interrupts while servicing another interrupt source, the IMR register may be used to create a user-defined prioritization. The IMR mask register should not be utilized when the highest priority interrupt is being serviced because the highest priority interrupt should never be interrupted. This is default condition when a hardware branch is made the Interrupt Vector address (INS is set to 1 by hardware and all other interrupt sources are blocked). The code below demonstrates how to use IMR to allow other interrupts. ISR_Z: pop PSF ; restore PSF push IMR ; save current interrupt mask move IMR, #int_mask ; new mask to allow only higher priority ints move INS, #0 ; re-enable interrupts ... (interrupt servicing code) ... pop IMR ; restore previous interrupt mask ret ; back to code or lower priority interrupt Please note that configuring a given IMR register mask bit to '0' only prevents interrupt conditions from the corresponding module or system from generating an interrupt request. Configuring an IMR mask bit to '0' does not prevent the corresponding IIR system or module identification flag from being set. This means that when using the IMR mask register functionality to block interrupts, there may be cases when both the mask (IMR.x) and identifier (IIR.x) bits should be considered when determining if the corresponding peripheral should be serviced. 3.8.1 Conditional Return from Interrupt Similar to the conditional returns, the MAXQ microcontroller also supports a set of conditional return from interrupt operations. Based upon the value of one of the status flags, the CPU can conditionally pop the stack, clear the INS bit to 0, and begin execution at the address popped from the stack. If the condition is not true, the conditional return from interrupt instruction leaves the INS bit unchanged, does not pop the stack and does not change the instruction pointer. The following conditional return from interrupt operations are supported: RETI RETI RETI RETI RETI Maxim Integrated C NC Z NZ S ; ; ; ; ; if if if if if C=1, a RETI is executed C=0, a RETI is executed Z=1 (Acc=00h), a RETI is executed Z=0 (Acc00h), a RETI is executed S=1, a RETI is executed 3-14 MAXQ Family User’s Guide 3.9 Accessing the Stack The hardware stack is used automatically by the CALL, RET and RETI instructions, but it can also be used explicitly to store and retrieve data. All values stored on the stack are 16 bits wide. The PUSH instruction increments the stack pointer SP and then stores a value on the stack. When pushing a 16-bit value onto the stack, the entire value is stored. However, when pushing an 8-bit value onto the stack, the high byte stored on the stack comes from the prefix register. The @++SP stack access mnemonic is the associated destination specifier that generates this push behavior, thus the following two instruction sequences are equivalent: move push PFX[0], IC PSF ; stored on stack: IC:PSF move PFX[0], IC move @++SP, PSF ; stored on stack: IC:PSF The POP instruction removes a value from the stack and then decrements the stack pointer. The @SP-- stack access mnemonic is the associated source specifier that generates this behavior, thus the following two instructions are equivalent: pop PSF move PSF, @SP-The POPI instruction is equivalent to the POP instruction but additionally clears the INS bit to 0. Thus, the following two instructions would be equivalent: popi IP reti The @SP-- mnemonic can be used by the MAXQ microcontroller so that stack values may be used directly by ALU operations (e.g. ADD src, XOR src, etc.) without requiring that the value be first popped into an intermediate register or accumulator. add @SP-; sum the last three words pushed onto the stack add @SP-; with Acc, disregarding overflow add @SP-The stack pointer SP can be set explicitly, however only those least significant bits needed to represent the stack depth for the associated MAXQ device are used. For a MAXQ device that has a stack depth of 16 words, only the lowest four bits are used and setting SP to 0Fh will return it to its reset state. Since the stack is 16 bits wide, it is possible to store two 8-bit register values on it in a single location. This allows more efficient use of the stack if it is being used to save and restore registers at the start and end of a subroutine. SubOne: move push ... pop move move ret PFX[0], IC PSF ; store IC:PSF on the stack GR IC, GRH PSF, GRL ; 16-bit register ; IC was stored as high byte ; PSF was stored as low byte 3.10 Accessing Data Memory Data memory is accessed through the data pointer registers DP[0] and DP[1] or the Frame Pointer BP[Offs]. Once one of these registers is set to a location in data memory, that location can be read or written as follows, using the mnemonic @DP[0], @DP[1] or @BP[OFFS] as a source or destination. move DP[0], #0000h ; set pointer to location 0000h move A[0], @DP[0] ; read from data memory move @DP[0], #55h ; write to data memory Either of the data pointers may be post-incremented or post-decremented following any read or may be pre-incremented or pre-decremented before any write access by using the following syntax. move move move move 3-15 A[0], @DP[0]++ @++DP[0], A[1] A[5], @DP[1]-@--DP[1], #00h ; ; ; ; increment increment decrement decrement DP[0] DP[0] DP[1] DP[1] after read before write after read before write Maxim Integrated MAXQ Family User’s Guide The Frame Pointer (BP[OFFS]) is actually composed of a base pointer (BP) and an offset from the base pointer (OFFS). For the frame pointer, the offset register (OFFS) is the target of any increment or decrement operation. The base pointer (BP) is unaffected by increment and decrement operations on the Frame Pointer. Similar to DP[n], the OFFS register may be pre-incremented/decremented when writing to data memory and may be post-incremented/decremented when reading from data memory. move A[0], @BP[OFFS--] ; decrement OFFS after read move @BP[++OFFS], A[1] ; increment OFFS before write All three data pointers support both byte and word access to data memory. Each data pointer has its own word/byte select (WBSn) special-function register bit to control the access mode associated with the data pointer. These three register bits (WBS2, which controls BP[Offs] access; WBS1, which controls DP[1] access; and WBS0, which controls DP[0] access) reside in the Data Pointer Control (DPC) register. When a given WBSn control bit is configured to 1, the associated pointer is operated in the word access mode. When the WBSn bit is configured to 0, the pointer is operated in the byte access mode. Word access mode allows addressing of 64kWords of memory while byte access mode allows addressing of 64kBytes of memory. Each data pointer (DP[n]) and Frame Pointer base (BP) register is actually implemented internally as a 17-bit register (e.g., 16:0). The Frame Pointer offset register (OFFS) is implemented internally as a 9-bit register (e.g., 8:0). The WBSn bit for the respective pointer controls whether the highest 16 bits (16:1) of the pointer are in use, as is the case for word mode (WBSn = 1) or whether the lowest 16 bits (15:0) are in use, as will be the case for byte mode (WBSn = 0). The WBS2 bit also controls whether the high 8 bits (8:1) of the offset register are in use (WBS2 = 1) or the low 8 bits (7:0) are used (WBS2 = 0). All data pointer register reads, writes, auto-increment/decrement operations occur with respect to the current WBSn selection. Data pointer increment and decrement operations only affect those bits specific to the current word or byte addressing mode (e.g., incrementing a byte mode data pointer from FFFFh does not carry into the internal high order bit that is utilized only for word mode data pointer access). Switching from byte to word access mode or vice versa does not alter the data pointer contents. Therefore, it is important to maintain the consistency of data pointer address value within the given access mode. move move DPC, #0 DP[0], #2345h ; DP[0] in byte mode ; DP[0]=2345h (byte mode) ; internal bits 15:0 loaded move DPC, #4 ; DP[0] in word mode move DP[0], #2345h ; DP[0]=2345h (word mode) ; internal bits 16:1 loaded move DPC, #0 ; DP[0] in byte mode move GR, DP[0] ; GR = 468Bh (looking at bits 15:0) The three pointers share a single read/write port on the data memory and thus, the user must knowingly activate a desired pointer before using it for data memory read operations. This can be done explicitly using the data pointer select bits (SDPS1:0; DPC.1:0), or implicitly by writing to the DP[n], BP, or OFFS registers as shown below. Any indirect memory write operation using a data pointer will set the SDPS bits, thus activating the write pointer as the active source pointer. move DPC, #2 ; (explicit) selection of FP as the pointer move DP[1], DP[1] ; (implicit) selection of DP[1]; set SDPS1:0=01b move OFFS, src ; (implicit) selection of FP; set SDPS1=1 move @DP[0], src ; (implicit) selection of DP[0]; set SDPS1:0=00b Once the pointer selection has been made, it will remain in effect until: • the source data pointer select bits are changed via the explicit or implicit methods described above (i.e., another data pointer is selected for use) • the memory to which the active source data pointer is addressing is enabled for code fetching using the Instruction Pointer, or • a memory write operation is performed using a data pointer other than the current active source pointer. move move move DP[1], DP[1] dst, @DP[1] @DP[1], src ; select DP[1] as the active pointer ; read from pointer ; write using a data pointer ; DP[0] is needed move DP[0], DP[0] ; select DP[0] as the active pointer To simplify data pointer increment/decrement operations without disturbing register data, a virtual NUL destination has been assigned to system module 6, sub-index 7 to serve as a bit bucket. Data pointer increment/decrement operations can be done as follows without altering the contents of any other register: move move NUL, @DP[0]++ NUL, @DP[0]-- Maxim Integrated ; increment DP[0] ; decrement DP[0] 3-16 MAXQ Family User’s Guide The following data pointer related instructions are invalid: move move move move move move move move move move move move move move move move move move move move move move move move @++DP[0], @DP[0]++ @++DP[1], @DP[1]++ @BP[++Offs], @BP[Offs++] @--DP[0], @DP[0]-@--DP[1], @DP[1]-@BP[--Offs], @BP[Offs--] @++DP[0], @DP[0]-@++DP[1], @DP[1]-@BP[++Offs], @BP[Offs--] @--DP[0], @DP[0]++ @--DP[1], @DP[1]++ @BP[--Offs], @BP[Offs++] @DP[0], @DP[0]++ @DP[1], @DP[1]++ @BP[Offs], @BP[Offs++] @DP[0], @DP[0]-@DP[1], @DP[1]-@BP[Offs], @BP[Offs--] DP[0], @DP[0]++ DP[0], @DP[0]-DP[1], @DP[1]++ DP[1], @DP[1]-Offs, @BP[Offs--] Offs, @BP[Offs++] 3.11 Using the Watchdog Timer The Watchdog Timer is a user-programmable clock counter that can serve as a time-base generator, an event timer, or a system supervisor. As can be seen in the diagram below, the timer is driven by the main system clock and is supplied to a series of dividers. If the watchdog interrupt and the watchdog reset are disabled (EWDI = 0 and EWT = 0), the watchdog timer and its input clock are disabled. Whenever the watchdog timer is disabled, the watchdog interval timer (per WD1:0 bits) and 512 clock reset counter will be reset if either the interrupt or reset function is enabled. When the watchdog timer is initially enabled, there will be a 1-clock to 3-clock cycle delay before it starts. The divider output is selectable, and determines the interval between timeouts. When the timeout is reached, an interrupt flag is set, and if enabled, an interrupt occurs. A watchdog-reset function is also provided in addition to the watchdog interrupt. The reset and interrupt are completely discrete functions that can be acknowledged or ignored, together or separately for various applications. Table 3-2. Watchdog Timer Register Control Bits BIT NAME EWDI WD1, WD0 WDIF WTRF EWT RWT DESCRIPTION Enable Watchdog Timer Interrupt Watchdog Interval Control Bits Watchdog Interrupt Flag Watchdog Timer Reset Flag Enable Watchdog Timer Reset Reset Watchdog Timer REGISTER LOCATION WDCN (Fh, 8h) BIT POSITION WDCN.6 WDCN.5,4 WDCN.3 WDCN.2 WDCN.1 WDCN.0 The Watchdog Timer Reset function works as follows. After initializing the correct timeout interval (discussed below), software can enable, if desired, the reset function by setting the Enable Watchdog Timer Reset (EWT = WDCN.1) bit. Setting the EWT bit will reset/restart the Watchdog timer if the Watchdog interrupt is not already enabled. At any time prior to reaching its user selected terminal value, software can set the Reset Watchdog Timer (RWT = WDCN.0) bit. If the Watchdog Timer is reset (RWT bit written to a logic 1) before the timeout period expires, the timer will start over. Hardware will automatically clear RWT after software sets it. 3-17 Maxim Integrated MAXQ Family User’s Guide RWT (WDCN.0) (RESET WATCHDOG) XTAL1 XTAL2 SYSTEM CLOCK MODE DIVIDE BY 212 DIVIDE BY 23 212 WD1 WD0 DIVIDE BY 23 215 218 TIME-OUT SELECTOR WDIF (WDCN.3) DIVIDE BY 23 221 TIME-OUT WATCHDOG INTERRUPT EWDI (WDCN.6) (ENABLE WATCHDOG INTERRUPT) MAXQ 512 SYSCLK DELAY EWT (WDCN.1) (ENABLE WATCHDOG TIMER RESET) RESET WTRF (WDCN.2) Figure 3-1. Watchdog Timer Block Diagram If the timeout is reached without RWT being set, hardware will generate a Watchdog interrupt if the interrupt source has been enabled. If no further action is taken to prevent a Watchdog reset, in the 512 system clock cycles following the timeout, hardware has the ability to reset the CPU if EWT = 1. When the reset occurs, the Watchdog Timer Reset Flag (WTRF = WDCN.2) will automatically be set to indicate the cause of the reset, however software must clear this bit manually. The Watchdog Interrupt is also available for applications that do not need a true Watchdog Reset but simply a very long timer. The interrupt is enabled using the Enable Watchdog Timer Interrupt (EWDI = WDCN.6) bit. When the timeout occurs, the Watchdog Timer will set the WDIF bit (WDCN.3), and an interrupt will occur if the interrupt global enable (IGE = IC.0) and system interrupt mask (IMS = IMR.7) are set and the interrupt in service (INS) bit is clear. Note that WDIF is set 512 clocks before a potential Watchdog Reset. The Watchdog Interrupt Flag will indicate the source of the interrupt, and must be cleared by software. Using the Watchdog Interrupt during software development can allow the user to select ideal watchdog reset locations. Code is first developed without enabling the Watchdog Interrupt or Reset functions. Once the program is complete, the Watchdog Interrupt function is enabled to identify the required locations in code to set the RWT (WDCN.0) bit. Incrementally adding instructions to reset the Watchdog Timer prior to each address location (identified by the Watchdog Interrupt) will allow the code to eventually run without receiving a Watchdog Interrupt. At this point the Watchdog Timer Reset can be enabled without the potential of generating unwanted resets. At the same time the Watchdog Interrupt may also be disabled. Proper use of the Watchdog Interrupt with the Watchdog Reset allows interrupt software to survey the system for errant conditions. When using the Watchdog Timer as a system monitor, the Watchdog Reset function should be used. If the Interrupt function were used, the purpose of the watchdog would be defeated. For example, assume the system is executing errant code prior to the Watchdog Interrupt. The interrupt would temporarily force the system back into control by vectoring the CPU to the interrupt service routine. Restarting the Watchdog and exiting by an RETI or RET, would return the processor to the lost position prior to the interrupt. By using the Watchdog Reset function, the processor is restarted from the beginning of the program, and therefore placed into a known state. The Watchdog timeout selection is made using bits WD1 (WDCN.5) and WD0 (WDCN.4). The Watchdog has four timeout selections based on the system clock frequency as shown in the figure. Since the timeout is a function of the system clock, the actual timeout interval is dependent on both the crystal frequency and the system clock mode selection. Shown below is a summary of the selectable Watchdog timeout intervals for the various system clock modes and WD1:0 control bit settings. The Watchdog Reset, if enabled, is always scheduled to occur 512 system clocks following the timeout. Watchdog generated resets will last for 4 system clock cycles. Maxim Integrated 3-18 MAXQ Family User’s Guide Table 3-3. Watchdog Timeout Period Selection WATCHDOG TIMEOUT (IN NUMBER OF OSCILLATOR CLOCKS) SYSTEM CLOCK MODE SYSTEM CLOCK SELECT BITS PMME, CD1, CD0 WD1:0 = 00b WD1:0 = 01b WD1:0 = 10b WD1:0 = 11b Divide by 1 (default) 000 212 215 218 221 Divide by 2 001 213 216 219 222 Divide by 4 010 214 217 220 223 Divide by 8 011 15 2 18 2 21 2 224 Power Management Mode (Divide by 256) 1xx 220 223 226 229 Table 3-4. System Register Map REGISTER INDEX WITHIN MODULE MODULE SPECIFIER 6h 7h 8h 9h Ah Bh Ch Dh Eh Fh 0h — — AP A[0] Acc PFX[0] IP — — — 1h — — APC A[1] A[AP] PFX[1] — SP — — 2h — — — A[2] — PFX[2] — IV — — 3h — — — A[3] — PFX[3] — — OFFS DP[0] 4h — — PSF A[4] — PFX[4] — — DPC — 5h — — IC A[5] — PFX[5] — — GR — 6h — — IMR A[6] — PFX[6] — LC[0] GRL — 7h — — — A[7] — PFX[7] — LC[1] BP DP[1] 8h — — SC A[8] — — — — GRS — 9h — — — A[9] — — — — GRH — Ah — — — A[10] — — — — GRXL — Bh — — IIR A[11] — — — — FP — Ch — — — A[12] — — — — — — Dh — — — A[13] — — — — — — Eh — — CKCN A[14] — — — — — — Fh — — WDCN A[15] — — — — — — 10h — — — — — — — — — — 11h — — — — — — — — — — 12h — — — — — — — — — — 13h — — — — — — — — — — 14h — — — — — — — — — — 15h — — — — — — — — — — 16h — — — — — — — — — — 17h — — — — — — — — — — 18h — — — — — — — — — — 19h — — — — — — — — — — 1Ah — — — — — — — — — — 1Bh — — — — — — — — — — 1Ch — — — — — — — — — — 1Dh — — — — — — — — — — 1Eh — — — — — — — — — — 1Fh — — — — — — — — — — Note: Registers in italics are read-only. Registers in bold are 16-bit (except A[n], Acc, A[AP] for MAXQ10). Registers with indexes 8h and higher can only be accessed as destinations by using the prefix register. Similarly, registers with indexes 10h and higher can only be accessed as sources through the prefix register. All undefined or unused indexes (indicated by an em-dash ‘—‘) are either used for op code implementation or reserved for future expansion, and should not be accessed explicitly. Accessing these locations as registers can have deterministic effects, but the effects will probably not be the intended ones. 3-19 Maxim Integrated MAXQ Family User’s Guide Table 3-5. System Register Bit Map REGISTER BIT POSITION 15 14 13 12 11 10 9 7 6 5 4 AP 8 — — — — APC CLR IDS — — — PSF Z S — GPF1 GPF0 OV C E IC — — CGDS — — — INS IGE IMR IMS — IM5 IM4 IM3 IM2 IM1 IM0 SC TAP — CDA1 CDA0 UPA ROD PWL — IIR IIS — II5 II4 II3 II2 II1 II0 CKCN XT/RC WDCN POR SWB PMME CD1 CD0 WDIF WTRF EWT RWT A[1] (MAXQ10: 8 bits; MAXQ20:16 bits) A[2] (MAXQ10: 8 bits; MAXQ20:16 bits) A[3] A[3] (MAXQ10: 8 bits; MAXQ20:16 bits) A[4] A[4] (MAXQ10: 8 bits; MAXQ20:16 bits) A[5] A[5] (MAXQ10: 8 bits; MAXQ20:16 bits) A[6] A[6] (MAXQ10: 8 bits; MAXQ20:16 bits) A[7] A[7] (MAXQ10: 8 bits; MAXQ20:16 bits) A[8] A[8] (MAXQ10: 8 bits; MAXQ20:16 bits) A[9] A[9] (MAXQ10: 8 bits; MAXQ20:16 bits) A[10] A[10] (MAXQ10: 8 bits; MAXQ20:16 bits) A[11] A[11] (MAXQ10: 8 bits; MAXQ20:16 bits) A[12] A[12] (MAXQ10: 8 bits; MAXQ20:16 bits) A[13] A[13] (MAXQ10: 8 bits; MAXQ20:16 bits) A[14] A[14] (MAXQ10: 8 bits; MAXQ20:16 bits) A[15] A[15] (MAXQ10: 8 bits; MAXQ20:16 bits) PFX[n] PFX[n] (16 bits) IP (16 bits) — — — — — — — — — IV IV (16 bits) LC[0] LC[0] (16 bits) LC[1] LC[1] (16 bits) — — — — — WBS2 OFFS SP (4 bits) OFFS (8 bits) — — — — — — — — — WBS1 WBS0 SDPS1 SDPS0 GR (16 bits) GRL GRL (8 bits) BP BP (16 bits) GRS GRS (16 bits) = (GRL, GRH) GRH GRH (8 bits) GRXL GRXL (16 bits) = (GRL.7, 8bits): (GRL, 8bits) FP FP = BP[Offs] (16 bits) DP[0] DP[0] (16 bits) DP[1] DP[1] (16 bits) Maxim Integrated MOD2 MOD1 MOD0 WD0 A[2] GR 0 STOP WD1 A[0] (MAXQ10: 8 bits; MAXQ20:16 bits) DPC 1 EWDI A[1] SP 2 AP (4 bits) RGSL RGMD A[0] IP 3 3-20 MAXQ Family User’s Guide Table 3-6. System Register Bit Reset Values REGISTER BIT POSITION 15 7 6 5 4 3 2 1 0 AP 0 0 0 0 0 0 0 0 APC 0 0 0 0 0 0 0 0 PSF 1 0 0 0 0 0 0 0 IC 0 0 0 0 0 0 0 0 IMR 0 0 0 0 0 0 0 0 SC 1 0 0 0 0 0 s 0 IIR 0 0 0 0 0 0 0 0 CKCN s s s 0 0 0 0 0 WDCN s s 0 0 0 s s 0 A[n] MAXQ10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 A[n] MAXQ20 0 PFX 0 IP 1 SP 0 IV 0 LC[0] 0 LC[1] 0 14 0 13 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 0 10 9 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 OFFS DPC MAXQ10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 DPC MAXQ20 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 GR 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 GRL BP 0 0 0 0 0 0 0 0 0 0 GRS 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 GRH GRXL 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 FP 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 DP[0] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 DP[1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Note: Bits marked ‘s’ are static across some or all resets. 3-21 Maxim Integrated MAXQ Family User’s Guide SECTION 4: SYSTEM REGISTER DESCRIPTIONS This section contains the following information: 4.1 Accumulator Pointer Register (AP, 8h[0h]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4-2 4.2 Accumulator Pointer Control Register (APC, 8h[1h]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4-2 4.3 Processor Status Flags Register (PSF, 8h[4h]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4-3 4.4 Interrupt and Control Register (IC, 8h[5h]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4-3 4.5 Interrupt Mask Register (IMR, 8h[6h]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4-3 4.6 System Control Register (SC, 8h[8h]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4-4 4.7 Interrupt Identification Register (IIR, 8h[Bh]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4-4 4.8 System Clock Control Register (CKCN, 8h[Eh]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4-5 4.9 Watchdog Control Register (WDCN, 8h[Fh]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4-6 4.10 (MAXQ10) Accumulator n Register (A[n], 9h[nh]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4-7 4.11 (MAXQ20) Accumulator n Register (A[n], 9h[nh]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4-7 4.12 Prefix Register (PFX[n], Bh[n]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4-7 4.13 Instruction Pointer Register (IP, Ch[0h]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4-7 4.14 Stack Pointer Register (SP, Dh[1h]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4-8 4.15 Interrupt Vector Register (IV, Dh[2h]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4-8 4.16 Loop Counter 0 Register (LC[0], Dh[6h]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4-8 4.17 Loop Counter 1 Register (LC[1], Dh[7h]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4-8 4.18 Frame Pointer Offset Register (OFFS, Eh[3h]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4-8 4.19 Data Pointer Control Register (DPC, Eh[4h]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4-9 4.20 General Register (GR, Eh[5h]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4-9 4.21 General Register Low Byte (GRL, Eh[6h]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4-9 4.22 Frame Pointer Base Register (BP, Eh[7h]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4-9 4.23 General Register Byte-Swapped (GRS, Eh[8h]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4-10 4.24 General Register High Byte (GRH, Eh[9h]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4-10 4.25 General Register Sign Extended Low Byte (GRXL, Eh[Ah]) . . . . . . . . . . . . . . . . . . . . . . . . .4-10 4.26 Frame Pointer Register (FP, Eh[Bh]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4-10 4.27 Data Pointer 0 Register (DP[0], Fh[3h]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4-10 4.28 Data Pointer 1 Register (DP[1], Fh[7h]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4-10 4-1 Maxim Integrated MAXQ Family User’s Guide SECTION 4: SYSTEM REGISTER DESCRIPTIONS Those registers currently defined in the MAXQ System Register map are described in the following pages. The addresses for each register are given in the format module[index], where module is the module specifier from 8h to Fh and index is the register sub-index from 0h to Fh. 4.1 Accumulator Pointer Register (AP, 8h[0h]) The bit definitions are for 16 accumulators. Initialization: This register is cleared to 00h on all forms of reset. Access: Unrestricted direct read/write access. BIT FUNCTION AP.3 to AP.0 Active Accumulator Select. These bits select which of the 16 accumulator registers are used for arithmetic and logical operations. If the APC register has been set to perform automatic increment/decrement of the active accumulator, this setting will be automatically changed after each arithmetic or logical operation. If a ‘MOVE AP, Acc’ instruction is executed, any enabled AP inc/dec/modulo control will take precedence over the transfer of Acc data into AP. AP.7 to AP.4 Reserved. All reads return 0. 4.2 Accumulator Pointer Control Register (APC, 8h[1h]) The bit definitions are for 16 accumulators. Initialization: This register is cleared to 00h on all forms of reset. Access: Unrestricted direct read/write access. BIT FUNCTION Accumulator Pointer Auto Increment/Decrement Modulus. If these bits are set to a nonzero value, the accumulator pointer (AP[3:0]) will be automatically incremented or decremented following each arithmetic or logical operation. The mode for the auto-increment/ decrement is determined as follows: MOD[2:0] 000 001 010 011 100 101 to 111 APC.5 to APC.3 Reserved. All reads return 0. APC.2 to APC.0 (MOD2 to MOD0) AUTO INCREMENT/DECREMENT MODE No auto-increment/decrement (default) Increment/decrement AP[0] modulo 2 Increment/decrement AP[1:0] modulo 4 Increment/decrement AP[2:0] modulo 8 Increment/decrement AP modulo 16 Reserved (modulo 16 when set) APC.6 (IDS) Increment/Decrement Select. If this bit is set to 0, the accumulator pointer AP is incremented following each arithmetic or logical operation according to MOD[2:0]. If this bit is set to 1, the accumulator pointer AP is decremented following each arithmetic or logical operation according to MOD[2:0]. If MOD[2:0] is set to 000, the setting of this bit is ignored. APC.7 (CLR) AP Clear. Writing this bit to 1 clears the accumulator pointer AP to 0. Once set, this bit will automatically be reset to 0 by hardware. If a ‘MOVE APC, Acc’ instruction is executed requesting that AP be set to 0 (i.e., CLR = 1), the AP clear function overrides any enabled inc/dec/modulo control. All reads from this bit return 0. Maxim Integrated 4-2 MAXQ Family User’s Guide 4.3 Processor Status Flags Register (PSF, 8h[4h]) The OV and S bit definitions are given for the MAXQ20 (16-bit accumulators and ALU). Initialization: This register is cleared to 80h on all forms of reset. Access: Bit 7 (Z), bit 6 (S), and bit 2 (OV) are read only. Bits 4 and 3 (GPF1,GPF0), bit 1 (C), and bit 0 (E) are unrestricted read/write. BIT FUNCTION PSF.0 (E) Equals Flag. This bit flag is set to 1 whenever a compare operation (CMP) returns an equal result. If a CMP operation returns not equal, this bit is cleared. PSF.1 (C) Carry Flag. This bit flag is set to 1 whenever an add or subtract operation (ADD, ADDC, SUB, SUBB) returns a carry or borrow. This bit flag is cleared to 0 whenever an add or subtract operation does not return a carry or borrow. Many other instructions potentially affect the carry bit. Reference the instruction set documentation for details. PSF.2 (OV) Overflow Flag. This flag is set to 1 if there is a carry out of bit 14 but not out of bit 15, or a carry out of bit 15 but not out of bit 14 from the last arithmetic operation, otherwise, the OV flag remains as 0. OV indicates a negative number resulted as the sum of two positive operands, or a positive sum resulted from two negative operands. PSF.3 (GPF0) PSF.4 (GPF1) PSF.5 PSF.6 (S) PSF.7 (Z) General Purpose Flag 0 General Purpose Flag 1. These general-purpose flag bits are provided for user software control. Reserved. All reads return 0. Sign Flag. This bit flag mirrors the current value of the high bit of the active accumulator (Acc.15). Zero Flag. The value of this bit flag equals 1 whenever the active accumulator is equal to zero, and it equals 0 otherwise. 4.4 Interrupt and Control Register (IC, 8h[5h]) Initialization: This register is cleared to 00h on all forms of reset. Access: Unrestricted direct read/write access. BIT FUNCTION IC.0 (IGE) Interrupt Global Enable. If this bit is set to 1, interrupts are globally enabled, but still must be locally enabled to occur. If this bit is set to 0, all interrupts are disabled. IC.1 (INS) Interrupt In Service. The INS is set by hardware automatically when an interrupt is acknowledged. No further interrupts occur as long as the INS remains set. The interrupt service routine can clear the INS bit to allow interrupt nesting. Otherwise, the INS bit is cleared by hardware upon execution of an RETI or POPI instruction. IC.4 to IC.2 Reserved. All reads return 0. IC.5 (CGDS) System Clock Gating Disable. If this bit is set to 0 (default mode), system clock gating circuitry is active. If this bit is set to 1, the clock gating circuitry is disabled. IC.7, IC.6 Reserved. All reads return 0. 4.5 Interrupt Mask Register (IMR, 8h[6h]) Initialization: This register is cleared to 00h on all forms of reset. Access: Unrestricted read/write access. BIT FUNCTION The first six bits in this register are interrupt mask bits for modules 0 to 5, one bit per module. The eighth bit, IMS, serves as a mask for any system module interrupt sources. Setting a mask bit allows the enabled interrupt sources for the associated module or system (for the case of IMS) to generate interrupt requests. Clearing the mask bit effectively disables all interrupt sources associated with that specific module or all system interrupt sources (for the case of IMS). The interrupt mask register is intended to facilitate user-definable interrupt prioritization. IMR.0 (IM0) IMR.1 (IM1) IMR.2 (IM2) IMR.3 (IM3) IMR.4 (IM4) IMR.5 (IM5) IMR.6 IMR.7 (IMS) 4-3 Interrupt Mask for Register Module 0 Interrupt Mask for Register Module 1 Interrupt Mask for Register Module 2 Interrupt Mask for Register Module 3 Interrupt Mask for Register Module 4 Interrupt Mask for Register Module 5 Reserved. Reads return 0. Interrupt Mask for System Modules Maxim Integrated MAXQ Family User’s Guide 4.6 System Control Register (SC, 8h[8h]) Initialization: This register is reset to 100000s0b on all reset. Bit 1 (PWL) is set to 1 on a power-on reset only. Access: Unrestricted read/write access. BIT SC.0 FUNCTION Reserved. All reads return 0. SC.1 (PWL) Password Lock. This bit defaults to 1 on a power-on reset. When this bit is 1, it requires a 32-byte password to be matched with the password in the program space before allowing access to the password protected in-circuit debug or bootstrap loader ROM routines. Clearing this bit to 0 disables the password protection for these ROM routines. SC.2 (ROD) ROM Operation Done. This bit is used to signify completion of a ROM operation sequence to the control units. This allows the Debug engine to determine the status of a ROM sequence. Setting this bit to logic 1 causes an internal system reset if the JTAG SPE bit is also set. Setting the ROD bit will clear the JTAG SPE bit if it is set and the ROD bit will be automatically cleared by hardware once the control unit acknowledges the done indication. SC.3 (UPA) Upper Program Access. The physical program memory is logically divided into four pages; P0 and P1 occupy the lower 32kWords while P2 and P3 occupy the upper 32kWords. P0 and P1 are assigned to the lower half of the program space and are always active. P2 and P3 must be explicitly activated in the upper half of the program space by setting the UPA bit to 1. When UPA bit is cleared to 0, the upper program memory space is occupied by the Utility ROM and the logical data memory, which is accessible as program memory. Note that the UPA is not implemented if the upper 32K of the program space is not used for the user code. Code Data Access Bits 1:0. The CDA bits are used to logically map physical program memory page to the data space for read/write access: SC.5 and SC.4 (CDA1, CDA0) CDA1:0 00 01 10 11 BYTE MODE ACTIVE PAGE P0 P1 P2 P3 WORD MODE ACTIVE PAGE P0 and P1 P0 and P1 P2 and P3 P2 and P3 The logical data memory addresses of the program pages depend on whether execution is from Utility ROM or logical data memory. Note that CDA1 is not implemented if the upper 32k of the program space is not used for the user code. No CDA bits are needed if only one page of program space is incorporated. SC.6 SC.7 (TAP) Reserved. All reads return 0. Test Access (JTAG) Port Enable. This bit controls whether the Test Access Port special-function pins are enabled. The TAP defaults to being enabled. Clearing this bit to 0 disables the TAP special function pins. 4.7 Interrupt Identification Register (IIR, 8h[Bh]) Initialization: This register is cleared to 00h on all forms of reset. Access: Read only. BIT FUNCTION The first six bits in this register indicate interrupts pending in modules 0 to 5, one bit per module. The eighth bit, IIS, indicates a pending system interrupt, such as from the watchdog timer. The interrupt pending flags will be set only for enabled interrupt sources waiting for service. The interrupt pending flag will be cleared when the pending interrupt sources within that module are disabled or when the interrupt flags are cleared by software IIR.0 (II0) IIR.1 (II1) IIR.2 (II2) IIR.3 (II3) IIR.4 (II4) IIR.5 (II5) IIR.6 IIR.7 (IIS) Maxim Integrated Interrupt Identifier Flag for Register Module 0 Interrupt Identifier Flag for Register Module 1 Interrupt Identifier Flag for Register Module 2 Interrupt Identifier Flag for Register Module 3 Interrupt Identifier Flag for Register Module 4 Interrupt Identifier Flag for Register Module 5 Reserved. Reads return 0. Interrupt Identifier Flag for System Modules 4-4 MAXQ Family User’s Guide 4.8 System Clock Control Register (CKCN, 8h[Eh]) Initialization: Bits 4:0 are cleared to zero on all forms of reset. See bit description for bits 7:5. Access: Bit 5 (RGMD) is read-only. All other bits are unrestricted read/write, except for the locking mechanism on CD0 and CD1 as described below. BIT FUNCTION Clock Divide Bit 0. Clock Divide Bit 1. If the PMME bit is cleared, the CD0 and CD1 bits control the number of oscillator clocks required to generate one system clock as follows: CKCN.0 (CD0); CKCN.1 (CD1) CKCN.2 (PMME) CD1 CD0 OSCILLATOR CLOCK CYCLES PER SYSTEM CLOCK CYCLE 0 0 1 (default) 0 1 2 1 0 4 1 1 8 If the PMME bit is set to 1, the values of CD0 and CD1 may not be altered and do not affect the system clock frequency. Power Management Mode Enable. If the PMME bit is cleared to 0, the values of CD0 and CD1 determine the number of oscillator clock cycles per system clock cycle. If the PMME bit is set to 1, the values of CD0 and CD1 are ignored and the system clock operates in a fixed mode of 1 cycle per 256 oscillator cycles (divide by 256). If the PMME bit is set to 1 and Switchback mode has been enabled (SWB = 1), when a Switchback source (such as an enabled external interrupt) becomes active, PMME will be cleared to 0 and cannot be set to 1 unless all Switchback sources are inactive. CKCN.3 (SWB) Switchback Enable. If the SWB bit is cleared to 0, Switchback mode is not active. If the SWB bit is set to 1, Switchback mode is active. Switchback mode has no effect if Power Management Mode is not active (PMME = 0). If Power Management Mode is active and Switchback mode is enabled, the PMME bit will be cleared to 0 when any of the following conditions occur. 1) An external interrupt condition occurs on an INTx pin and the corresponding external interrupt is enabled. 2) An active-low transition occurs on the UART serial receive-input line (modes 1, 2, and 3) and data reception is enabled. 3) The SBUF register is written to send an outgoing byte through the UART and transmission is enabled 4) The SPIB register is written in master mode (STBY = 1) to send an outgoing character through the SPI module and transmission is enabled. 5) The SPI module’s SSEL signal is asserted in slave mode. 6) Time-of-Day and Subsecond interval alarms from the RTC when enabled. 7) Active debug mode is entered either by break point match or issuance of the 'Debug' command from background mode. When any of these conditions cause Switchback to clear PMME to 0, the system clock rate will then be determined by the settings of CD0 and CD1. After PMME is cleared to 0 by Switchback, it may not be set back to 1 as long as any of the above conditions are true. CKCN.4 (STOP) Stop Mode Select. Setting this bit to 1 causes the MAXQ to enter Stop Mode. This will not change the currently selected clock divide ratio (CD0, CD1, PMME). CKCN.5 (RGMD) Ring Oscillator Mode. This read-only bit reflects the selection of clock source. RGMD = 1 indicates the ring oscillator is providing the system clock. RGMD = 0 indicates that the clock source specified by the XT/RC bit is being used for system clock generation. If the given MAXQ device does not include an internal ring oscillator from which it can run, this read-only bit will track the value of CKCN.6. CKCN.6 (RGSL) Ring Oscillator Select. This bit selects the internal ring oscillator for system clock generation. When RGSL is set to 1, the internal ring oscillator (following the PMME, CD1:0 selected divide ratio) is immediately sourced as the system clock and the internal crystal amplifier is disabled (if allowed). When RGSL is cleared to 0, the internal ring oscillator (following the clock divide selection) will continue to serve as the system clock until the warm-up counter associated with the XT/RC clock selection has expired. At which point, that clock source (following the PMME, CD1:0 selected divide ratio) is sourced as the system clock. The RGSL bit is cleared to 0 on power-on reset only and is unaffected by other resets. If the given MAXQ device does not include an internal ring oscillator from which it can run, this bit can be used as a general-purpose read/write bit. CKCN.7(XT/RC) Crystal/RC Oscillator Select. This bit selects the non-ring oscillator mode that may be used for system clock generation. The XT/ RC bit can only be modified when RGSL = 1. The XT/ RC bit is set to 1 on power-on reset only and is unaffected by other resets. XT/ RC = 0: external RC configuration XT/ RC = 1: external crystal/clock configuration If the given MAXQ device does not support both the crystal and RC options, this bit can be used as a general-purpose read/write bit that is write protected when CKCN.6 is configured to 0. 4-5 Maxim Integrated MAXQ Family User’s Guide 4.9 Watchdog Control Register (WDCN, 8h[Fh]) Initialization: Bits 5, 4, 3 and 0 are cleared to 0 on all forms of reset; for others, see individual bit descriptions. Access: Unrestricted direct read/write access. BIT FUNCTION WDCN.0 (RWT) Reset Watchdog Timer. Setting this bit to 1 resets the watchdog timer count. If watchdog interrupt and/or reset modes are enabled, the software must set this bit to 1 before the watchdog timer elapses to prevent an interrupt or reset from occurring. This bit always returns 0 when read. WDCN.1 (EWT) Enable Watchdog Timer Reset. If this bit is set to 1 when the watchdog timer elapses, the watchdog resets the processor 512 system clock cycles later unless action is taken to disable the reset event. Clearing this bit to 0 prevents a watchdog reset from occurring but does not stop the watchdog timer or prevent watchdog interrupts from occurring if EWDI = 1. If EWT = 0 and EWDI = 0, the watchdog timer will be stopped. If the watchdog timer is stopped (EWT = 0 and EWDI = 0), setting the EWT bit will reset the watchdog interval and reset counter, and enable the watchdog timer. This bit is cleared on Power-on reset and is unaffected by other forms of reset. Watchdog Timer Reset Flag. This bit is set to 1 when the watchdog resets the processor. Software can check this bit following a reset to determine if the watchdog was the source of the reset. Setting this bit to 1 in software will not cause a watchdog reset. WDCN.2 (WTRF) This bit is cleared by Power-on reset only and is unaffected by other forms of reset. It should also be cleared by software following any reset so that the source of the next reset can be correctly determined by software. This bit is only set to 1 when a watchdog reset actually occurs, so if EWT is cleared to 0 when the watchdog timer elapses, this bit will not be set. WDCN.3 (WDIF) Watchdog Interrupt Flag. This bit will be set to 1 when the watchdog timer interval has elapsed or can be set to 1 by user software. When WDIF = 1, an interrupt request will occur if the watchdog interrupt has been enabled (EWDI = 1) and not otherwise masked or prevented by an interrupt already in service (i.e., IGE = 1, IMS = 1, and INS = 0 must be true for the interrupt to occur). This bit should be cleared by software before exiting the interrupt service routine to avoid repeated interrupts. Furthermore, if the watchdog reset has been enabled (EWT = 1), a reset is scheduled to occur 512 system clock cycles following setting of the WDIF bit. Watchdog Timer Mode Select Bit 0; Watchdog Timer Mode Select Bit 1. These bits determine the watchdog interval or the length of time between resetting of watchdog timer and the watchdog generated interrupt in terms of system clocks. Modifying the watchdog interval via the WD1:0 bits will automatically reset the watchdog timer unless the 512 system clock reset counter is already in progress, in which case, changing the WD1:0 bits will not effect the Watchdog timer or reset counter. WDCN.4 (WD0); WDCN.5 (WD1) WD1 WD0 CLOCKS UNTIL INTERRUPT CLOCKS UNTIL RESET 0 0 212 212 + 512 0 1 215 215 + 512 0 18 218 + 512 21 221 + 512 1 1 1 2 2 WDCN.6 (EWDI) Watchdog Interrupt Enable. If this bit is set to 1, an interrupt request can be generated when the WDIF bit is set to 1 by any means. If this bit is cleared to 0, no interrupt will occur when WDIF is set to 1, however, it does not stop the watchdog timer or prevent watchdog resets from occurring if EWT = 1. If EWT = 0 and EWDI = 0, the watchdog timer will be stopped. If the watchdog timer is stopped (EWT = 0 and EWDI = 0), setting the EWDI bit will reset the watchdog interval and reset counter, and enable the watchdog timer. This bit is cleared to 0 by power-on reset and is unaffected by other forms of reset. WDCN.7 (POR) Power-On Reset Flag. This bit is set to 1 whenever a power-on/brownout reset occurs. It is unaffected by other forms of reset. This bit can be checked by software following a reset to determine if a power-on/brownout reset occurred. It should always be cleared by software following a reset to ensure that the sources of following resets can be determined correctly. Maxim Integrated 4-6 MAXQ Family User’s Guide 4.10 (MAXQ10) Accumulator n Register (A[n], 9h[nh]) Initialization: This register is cleared to 00h on all forms of reset. Access: Unrestricted direct read/write access. BIT FUNCTION This register acts as the accumulator for all ALU arithmetic and logical operations when selected by the accumulator pointer (AP). It can also be used as a general-purpose working register. A[n].7 to A[n].0 4.11 (MAXQ20) Accumulator n Register (A[n], 9h[nh]) Initialization: This register is cleared to 0000h on all forms of reset. Access: Unrestricted direct read/write access. BIT FUNCTION A[n].15 to A[n].0 This register acts as the accumulator for all ALU arithmetic and logical operations when selected by the accumulator pointer (AP). It can also be used as a general-purpose working register. 4.12 Prefix Register (PFX[n], Bh[n]) Initialization: This register is cleared to 0000h on all forms of reset. Access: Unrestricted direct read/write access. BIT FUNCTION The Prefix register provides a means of supplying an additional 8 bits of high-order data for use by the succeeding instruction as well as providing additional indexing capabilities. This register will only hold any data written to it for one execution cycle, after which it will revert to 0000h. Although this is a 16-bit register, only the lower 8 bits are actually used for prefixing purposes by the next instruction. Writing to or reading from any index in the Prefix module will select the same 16-bit register. However, when the Prefix register is written, the index n used for the PFX[n] write also determines the high-order bits for the register source and destination specified in the following instruction. SOURCE, DESTINATION INDEX SELECTION PFX[n].15 to PFX[n].0 WRITE TO SOURCE REGISTER RANGE DESTINATION REGISTER RANGE PFX[0] PFX[1] PFX[2] PFX[3] PFX[4] PFX[5] PFX[6] PFX[7] 0h to Fh 10h to 1Fh 0h to Fh 10h to 1Fh 0h to Fh 10h to 1Fh 0h to Fh 10h to 1Fh 0h to 7h 0h to 7h 8h to Fh 8h to Fh 10h to 17h 10h to 17h 18h to 1Fh 18h to 1Fh The index selection reverts to 0 (default mode allowing selection of registers 0h to 7h for destinations) after one cycle in the same manner as the contents of the Prefix register. 4.13 Instruction Pointer Register (IP, Ch[0h]) Initialization: This register is cleared to 8000h on all forms of reset. Access: Unrestricted direct read/write access. BIT IP.15 to IP.0 4-7 FUNCTION This register contains the address of the next instruction to be executed and is automatically incremented by 1 after each program fetch. Writing an address value to this register will cause program flow to jump to that address. Reading from this register will not affect program flow. Maxim Integrated MAXQ Family User’s Guide 4.14 Stack Pointer Register (SP, Dh[1h]) Bits defined below for 16-word stack depth. Initialization: This register is cleared to 000Fh on all forms of reset. Access: Unrestricted direct read/write access. BIT SP.3 to SP.0 SP.15 to SP.4 FUNCTION These four bits indicate the current top of the hardware stack, from 0h to Fh. This pointer is incremented after a value is pushed on the stack and decremented before a value is popped from the stack. Reserved; all reads return 0. 4.15 Interrupt Vector Register (IV, Dh[2h]) Initialization: This register is cleared to 0000h on all forms of reset. Access: Unrestricted direct read/write access. BIT IV.15 – IV.0 FUNCTION This register contains the address of the interrupt service routine. The interrupt handler will generate a CALL to this address whenever an interrupt is acknowledged. 4.16 Loop Counter 0 Register (LC[0], Dh[6h]) Initialization: This register is cleared to 0000h on all forms of reset. Access: Unrestricted direct read/write access. BIT LC[0].15 to LC[0].0 FUNCTION This register is used as the loop counter for the DJNZ LC[0], src operation. This operation decrements LC[0] by one and then jumps to the address specified in the instruction by src. 4.17 Loop Counter 1 Register (LC[1], Dh[7h]) Initialization: This register is cleared to 0000h on all forms of reset. Access: Unrestricted direct read/write access. BIT LC[1].15 to LC[1].0 FUNCTION This register is used as the loop counter for the DJNZ LC[1], src operation. This operation decrements LC[1] by one and then jumps to the address specified in the instruction by src. 4.18 Frame Pointer Offset Register (OFFS, Eh[3h]) Initialization: This register is cleared to 00h on all forms of reset. Access: Unrestricted direct read/write access. BIT OFFS.7 to OFFS.0 Maxim Integrated FUNCTION This 8-bit register provides the Frame Pointer (FP) offset from the base pointer (BP). The Frame Pointer is formed by unsigned addition of Frame Pointer Base Register (BP) and Frame Pointer Offset Register (Offs). The contents of this register can be post-incremented or post-decremented when using the Frame Pointer for read operations and may be preincremented or pre-decremented when using the Frame Pointer for write operations. A carry out or borrow resulting from an increment/decrement operation has no effect on the Frame Pointer Base Register (BP). 4-8 MAXQ Family User’s Guide 4.19 Data Pointer Control Register (DPC, Eh[4h]) Initialization: (MAXQ10) This register is cleared to 0000h on all forms of reset. (MAXQ20) This register is cleared to 001Ch on all forms of reset. Access: Unrestricted direct read/write access. BIT FUNCTION Source Data Pointer Select Bits 1:0. These bits select one of the three data pointers as the active source pointer for the load operation. A new data pointer must be selected before being used to read data memory: DPC.1 to DPC.0 (SDPS1, SDPS0) SDPS1 0 0 1 1 SDPS0 0 1 0 1 SOURCE POINTER SELECTION DP[0] DP[1] FP (BP[Offs]) Reserved (select FP if set) These bits default to 00b but do not activate DP[0] as an active source pointer until the SDPS bits are explicitly cleared to 00b or the DP[0] register is written by an instruction. Also, modifying the register contents of a data/frame pointer register (DP[0], DP[1], BP or Offs) will change the setting of the SDPS bits to reflect the active source pointer selection. DPC.2 (WBS0) Word/Byte Select 0. This bit selects access mode for DP[0]. When WBS0 is set to logic 1, the DP[0] is operated in word mode for data memory access; when WBS0 is cleared to logic 0, DP[0] is operated in byte mode for data memory access. DPC.3 (WBS1) Word/Byte Select 1. This bit selects access mode for DP[1]. When WBS1 is set to logic 1, the DP[1] is operated in word mode for data memory access; when WBS1 is cleared to logic 0, DP[1] is operated in byte mode for data memory access. DPC.4 (WBS2) Word/Byte Select 2. This bit selects access mode for BP[Offs]. When WBS2 is set to logic 1, the BP[Offs] is operated in word mode for data memory access; when WBS2 is cleared to logic 0, BP[Offs] is operated in byte mode for data memory access. DPC.15 to DPC.5 Reserved. Read returns 0. 4.20 General Register (GR, Eh[5h]) Initialization: This register is cleared to 0000h on all forms of reset. Access: Unrestricted direct read/write access. BIT GR.15 to GR.0 FUNCTION This register is intended primarily for supporting byte operations on 16-bit data. The 16-bit register is byte-readable, byte-writeable through the corresponding GRL and GRH 8-bit registers and byte-swappable through the GRS 16-bit register. 4.21 General Register Low Byte (GRL, Eh[6h]) Initialization: This register is cleared to 00h on all forms of reset. Access: Unrestricted direct read/write access. BIT GRL.7 to GRL.0 FUNCTION This register reflects the low byte of the GR register and is intended primarily for supporting byte operations on 16-bit data. Any data written to the GRL register will also be stored in the low byte of the GR register. 4.22 Frame Pointer Base Register (BP, Eh[7h]) Initialization: This register is cleared to 0000h on all forms of reset. Access: Unrestricted direct read/write access. BIT BP.15 to BP.0 4-9 FUNCTION This register serves as the base pointer for the Frame Pointer (FP). The Frame Pointer is formed by unsigned addition of Frame Pointer Base Register (BP) and Frame Pointer Offset Register (Offs). The content of this base pointer register is not affected by increment/decrement operations performed on the offset (OFFS) register. Maxim Integrated MAXQ Family User’s Guide 4.23 General Register Byte-Swapped (GRS, Eh[8h]) Initialization: This register is cleared to 0000h on all forms of reset Access: Unrestricted read-only access. BIT GRS.15 to GRS.0 FUNCTION This register is intended primarily for supporting byte operations on 16-bit data. This 16-bit read only register returns the byteswapped value for the data contained in the GR register. 4.24 General Register High Byte (GRH, Eh[9h]) Initialization: This register is cleared to 00h on all forms of reset. Access: Unrestricted direct read/write access. BIT GRH.7 to GRH.0 FUNCTION This register reflects the high byte of the GR register and is intended primarily for supporting byte operations on 16-bit data. Any data written to the GRH register will also be stored in the high byte of the GR register. 4.25 General Register Sign Extended Low Byte (GRXL, Eh[Ah]) Initialization: This register is cleared to 0000h on all forms of reset. Access: Unrestricted direct read-only access. BIT GRXL.15 to GRXL.0 FUNCTION This register provides the sign extended low byte of GR as a 16-bit source. 4.26 Frame Pointer Register (FP, Eh[Bh]) Initialization: This register is cleared to 0000h on all forms of reset. Access" Unrestricted direct read-only access. BIT FP.15 to FP.0 FUNCTION This register provides the current value of the frame pointer (BP[Offs]). 4.27 Data Pointer 0 Register (DP[0], Fh[3h]) Initialization: This register is cleared to 0000h on all forms of reset. Access: Unrestricted direct read/write access. BIT DP[0].15 to DP[0].0 FUNCTION This register is used as a pointer to access data memory. DP[0] can be automatically incremented or decremented following each read operation or can be automatically incremented or decremented before each write operation. 4.28 Data Pointer 1 Register (DP[1], Fh[7h]) Initialization: This register is cleared to 0000h on all forms of reset. Access: Unrestricted direct read/write access. BIT DP[1].15 to DP[1].0 Maxim Integrated FUNCTION This register is used as a pointer to access data memory. DP[1] can be automatically incremented or decremented following each read operation or can be automatically incremented or decremented before each write operation. 4-10 MAXQ Family User’s Guide SECTION 5: PERIPHERAL REGISTER MODULES The MAXQ microcontroller uses Peripheral Registers to control and monitor peripheral modules. These registers reside in Modules 0h through 5h, with sub-index values 0h to 1Fh. While the peripherals must reside in modules 0h through 5h, they are not necessarily tied to specific index numbers inside this range and can be moved, removed, and/or duplicated for certain MAXQ-based products as space permits. For this reason, each peripheral modules and its associated registers/bits are covered separately. Consult the individual device data sheet or user’s guide supplement for the exact peripheral register map. 5-1 Maxim Integrated MAXQ Family User’s Guide SECTION 6: GENERAL-PURPOSE I/O MODULE This section contains the following information: 6.1 I/O Port: Type A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-2 6.2 I/O Port: Type B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-2 6.3 I/O Port: Type C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-3 6.4 I/O Port: Type D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-3 6.5 I/O Port Peripheral Registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-4 6.5.1 Port Output x Register (POx) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-4 6.5.2 Port Input x Register (PIx) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-4 6.5.3 Port Direction x Register (PDx) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-4 6.5.4 (Type A) External Interrupt Enable Register (EIEx) . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-5 6.5.5 (Type A) External Interrupt Flag Register (EIFx) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-6 6.5.6 (Type D) External Interrupt Enable Register (EIEx) . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-6 6.5.7 (Type D) External Interrupt Flag Register (EIFx) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-7 6.5.8 (Type D) External Interrupt Edge Select Register (EIESx) . . . . . . . . . . . . . . . . . . . . . . .6-8 LIST OF FIGURES Figure 6-1. Type A Port Pin Schematic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-2 Figure 6-2. Type B Port Pin Schematic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-2 Figure 6-3. Type C Port Pin Schematic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-3 Figure 6-4. Type D Port Pin Schematic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-3 LIST OF TABLES Table 6-1. Weak Pullup Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-3 6-1 Maxim Integrated MAXQ Family User’s Guide SECTION 6: GENERAL-PURPOSE I/O MODULE The General-Purpose I/O Module (GPIO) for the MAXQ supports multiple 8-bit port types, each having different I/O characteristics. From a software perspective, each port appears as a group of Peripheral Registers with unique addresses. The exact quantity and type of ports provided by the GPIO Module is product-dependent. Each of the four different types of I/O ports are described. 6.1 I/O Port: Type A The Type A port can be used as a bidirectional I/O port. A port consists of eight general-purpose input/output pins and all the registers needed to control and configure them. Each pin is independently controllable. Up to six pins of each type A port can be configured as external interrupts. Each interrupt function is supported by its own interrupt flag, and each can be independently enabled. I/O PAD Vdd MUX PD.x SF DIRECTION SF ENABLE PIN.x MUX PO.x SF OUTPUT PI.x OR SF INPUT MAXQ FLAG INTERRUPT FLAG DETECT CIRCUIT IT0/IT1 Figure 6-1. Type A Port Pin Schematic 6.2 I/O Port: Type B The Type B port can also be used as a bidirectional I/O port. The Type B port consists of eight general-purpose input/output pins and three registers needed to control and configure them. Each pin is independently controllable. Type B port pins are intended to support secondary special functions. The special functions associated with these port pins are generally implemented in peripheral modules to the MAXQ CPU, which can be enabled, controlled, and monitored using dedicated Peripheral Registers. Enabling the special function automatically converts the pin to that function. The I/O drive characteristics for these pins are the same no matter whether the pin is configured for general-purpose I/O or whether it is being used for the special function. SF DIRECTION Vdd MUX I/O PAD PD.x SF ENABLE PIN.x MUX PO.x SF OUTPUT PI.x OR SF INPUT MAXQ Figure 6-2. Type B Port Pin Schematic Maxim Integrated 6-2 MAXQ Family User’s Guide 6.3 I/O Port: Type C The Type C I/O port is nearly identical to the Type B I/O port, but with the addition of a selectable internal, weak, P-channel, pullup device. The weak pullup device can be enabled by configuring the port pin as an input and setting the associated port output bit to logic 1 (default reset state). Vdd I/O PAD WEAK Vdd MUX PD.x SF DIRECTION SF ENABLE MUX PO.x PIN.x SF OUTPUT PI.x OR SF INPUT MAXQ Figure 6-3. Type C Port Pin Schematic Table 6-1. Weak Pullup Control PDX.x (PORT DIRECTION BIT) OR SF SELECT (SF I/O CONTROL) POX.x (PORT OUTPUT BIT) WEAK PULLUP X 1 = output 0 = input 0 1 1 OFF OFF ON 6.4 I/O Port: Type D The Type D I/O port merges the Type C I/O port with the interrupt functionality of the Type A I/O port. Just like the Type C I/O port, the weak pullup device can be enabled by configuring the port pin as an input and setting the associated port output bit to logic 1 (default reset state). Vdd I/O PAD WEAK Vdd MUX PD.x SF DIRECTION SF ENABLE MUX PO.x PIN.x SF OUTPUT PI.x OR SF INPUT MAXQ FLAG INTERRUPT FLAG DETECT CIRCUIT EIE.x Figure 6-4. Type D Port Pin Schematic 6-3 Maxim Integrated MAXQ Family User’s Guide 6.5 I/O Port Peripheral Registers 6.5.1 Port Output x Register (POx) Bit # 7 6 5 4 3 2 1 0 POx.7 POx.6 POx.5 POx.4 POx.3 POx.2 POx.1 POx.0 Reset (Type A or Type B) 0 0 0 0 0 0 0 0 Reset (Type C or Type D) 1 1 1 1 1 1 1 1 Access rw rw rw rw rw rw rw rw Name r = read, w = write Bits 7 to 0: Port Output x (POx) (POx.[7:0]). This register stores the data that is output on any of the pins of Port x that have been defined as output pins. Changing the data direction of any pins for this port (through register PDx) will not affect the value in this register. If Port x is a Type C or Type D port that supports the weak pullup input mode, the POx register bits control the weak pullup enables for any port pins that have been configured as input pins. 6.5.2 Port Input x Register (PIx) Bit # 7 6 5 4 3 2 1 0 Name PIx.7 PIx.6 PIx.5 PIx.4 PIx.3 PIx.2 PIx.1 PIx.0 Reset s s s s s s s s Access r r r r r r r r r = read, s = special Bits 7 to 0: Port Input x (PIx) (PIx.[7:0]). The PIx register always reflects the logical state of its pins when read. 6.5.3 Port Direction x Register (PDx) Bit # 7 6 5 4 3 2 1 0 Name PDx.7 PDx.6 PDx.5 PDx.4 PDx.3 PDx.2 PDx.1 PDx.0 Reset 0 0 0 0 0 0 0 0 Access rw rw rw rw rw rw rw rw r = read, w = write Bits 7 to 0: Port Direction x (PDx) (PDx.[7:0]). This register is used to determine the direction of the Port x function. The port pins are independently controlled by their direction bit. When a bit is set to 1, its corresponding pin is used as an output, causing data in the respective POx register bit to be driven on the pin. For Type A and Type B ports, when a bit is cleared to 0, its corresponding pin becomes a tri-stated input, allowing and external signal to drive the pin. For Type C and Type D ports, when a bit is cleared to 0, its corresponding pin becomes an input that can be weakly pulled up (if the respective PO bit = 1) or can be tri-stated (if the respective PO bit = 0). Maxim Integrated 6-4 MAXQ Family User’s Guide 6.5.4 (Type A) External Interrupt Enable Register (EIEx) Bit # Name 7 6 5 4 3 2 1 0 IT1 IT0 EX5 EX4 EX3 EX2 EX1 EX0 Reset 0 0 0 0 0 0 0 0 Access rw rw rw rw rw rw rw rw r = read, w = write Bit 7: Interrupt 2-5 Edge Select (IT1). This bit selects the edge detection mode for external interrupts 2-5. 0 = INT2, INT3, INT4 and INT5 are positive-edge triggered 1 = INT2, INT3, INT4 and INT5 are negative-edge triggered Bit 6: Interrupt 0, 1 Edge Select (IT0). This bit selects the edge detection mode for external interrupts 0 and 1. 0 = INT0 and INT1 are positive-edge triggered 1 = INT0 and INT1 are negative-edge triggered Bit 5: Enable External Interrupt 5 (EX5) 0 = external interrupt 5 function disabled 1 = external interrupt 5 function enabled Bit 4: Enable External Interrupt 4 (EX4) 0 = external interrupt 4 function disabled 1 = external interrupt 4 function enabled Bit 3: Enable External Interrupt 3 (EX3) 0 = external interrupt 3 function disabled 1 = external interrupt 3 function enabled Bit 2: Enable External Interrupt 2 (EX2) 0 = external interrupt 2 function disabled 1 = external interrupt 2 function enabled Bit 1: Enable External Interrupt 1 (EX1) 0 = external interrupt 1 function disabled 1 = external interrupt 1 function enabled Bit 0: Enable External Interrupt 0 (EX0) 0 = external interrupt 0 function disabled 1 = external interrupt 0 function enabled 6-5 Maxim Integrated MAXQ Family User’s Guide 6.5.5 (Type A) External Interrupt Flag Register (EIFx) Bit # 7 6 5 4 3 2 1 0 Name — — IE5 IE4 IE3 IE2 IE1 IE0 Reset 0 0 0 0 0 0 0 0 Access r r rw rw rw rw rw rw r = read, w = write Bits 7 and 6: Reserved Bit 5: External Interrupt 5 Flag (IE5). This flag is set when a negative edge (IT1 = 1) or a positive edge (IT1 = 0) is detected on the INT5 pin. This bit remains set until cleared in software. Setting this bit by software causes an interrupt if enabled. Bit 4: External Interrupt 4 Flag (IE4). This flag is set when a negative edge (IT1 = 1) or a positive edge (IT1 = 0) is detected on the INT4 pin. This bit remains set until cleared in software. Setting this bit by software causes an interrupt if enabled. Bit 3: External Interrupt 3 Flag (IE3). This flag is set when a negative edge (IT1 = 1) or a positive edge (IT1 = 0) is detected on the INT3 pin. This bit remains set until cleared in software. Setting this bit by software causes an interrupt if enabled. Bit 2: External Interrupt 2 Flag (IE2). This flag is set when a negative edge (IT1 = 1) or a positive edge (IT1 = 0) is detected on the INT2 pin. This bit remains set until cleared in software. Setting this bit by software causes an interrupt if enabled. Bit 1: External Interrupt 1 Flag (IE1). This flag is set when a negative edge (IT0 = 1) or a positive edge (IT0 = 0) is detected on the INT1 pin. This bit remains set until cleared in software. Setting this bit by software causes an interrupt if enabled. Bit 0: External Interrupt 0 Flag (IE0). This flag is set when a negative edge (IT0 = 1) or a positive edge (IT0 = 0) is detected on the INT0 pin. This bit remains set until cleared in software. Setting this bit by software causes an interrupt if enabled. 6.5.6 (Type D) External Interrupt Enable Register (EIEx) Bit # 7 6 5 4 3 2 1 0 Name EX7 EX6 EX5 EX4 EX3 EX2 EX1 EX0 Reset 0 0 0 0 0 0 0 0 Access rw rw rw rw rw rw rw rw r = read, w = write Bit 7: Enable External Interrupt 7 (EX7) 0 = external interrupt 7 function disabled 1 = external interrupt 7 function enabled Bit 6: Enable External Interrupt 6 (EX6) 0 = external interrupt 6 function disabled 1 = external interrupt 6 function enabled. Bit 5: Enable External Interrupt 5 (EX5) 0 = external interrupt 5 function disabled 1 = external interrupt 5 function enabled Bit 4: Enable External Interrupt 4 (EX4) 0 = external interrupt 4 function disabled 1 = external interrupt 4 function enabled Maxim Integrated 6-6 MAXQ Family User’s Guide Bit 3: Enable External Interrupt 3 (EX3) 0 = external interrupt 3 function disabled 1 = external interrupt 3 function enabled Bit 2: Enable External Interrupt 2 (EX2) 0 = external interrupt 2 function disabled 1 = external interrupt 2 function enabled Bit 1: Enable External Interrupt 1 (EX1) 0 = external interrupt 1 function disabled 1 = external interrupt 1 function enabled Bit 0: Enable External Interrupt 0 (EX0) 0 = external interrupt 0 function disabled 1 = external interrupt 0 function enabled 6.5.7 (Type D) External Interrupt Flag Register (EIFx) Bit # 7 6 5 4 3 2 1 0 Name IE7 IE6 IE5 IE4 IE3 IE2 IE1 IE0 Reset 0 0 0 0 0 0 0 0 Access rw rw rw rw rw rw rw rw r = read, w = write Bit 7: External Interrupt 7 Flag (IE7). This flag is set when a negative edge (IT7 = 1) or a positive edge (IT7 = 0) is detected on the INT7 pin. This bit remains set until cleared in software. Setting this bit by software causes an interrupt if enabled. Bit 6: External Interrupt 6 Flag (IE6). This flag is set when a negative edge (IT6 = 1) or a positive edge (IT6 = 0) is detected on the INT6 pin. This bit remains set until cleared in software. Setting this bit by software causes an interrupt if enabled. Bit 5: External Interrupt 5 Flag (IE5). This flag will be set when a negative edge (IT5 = 1) or a positive edge (IT5 = 0) is detected on the INT5 pin. This bit will remain set until cleared in software. Setting this bit by software causes an interrupt if enabled. Bit 4: External Interrupt 4 Flag (IE4). This flag is set when a negative edge (IT4 = 1) or a positive edge (IT4 = 0) is detected on the INT4 pin. This bit remains set until cleared in software. Setting this bit by software causes an interrupt if enabled. Bit 3: External Interrupt 3 Flag (IE3). This flag is set when a negative edge (IT3 = 1) or a positive edge (IT3 = 0) is detected on the INT3 pin. This bit remains set until cleared in software. Setting this bit by software causes an interrupt if enabled. Bit 2: External Interrupt 2 Flag (IE2). This flag is set when a negative edge (IT2 = 1) or a positive edge (IT2 = 0) is detected on the INT2 pin. This bit remains set until cleared in software. Setting this bit by software causes an interrupt if enabled. Bit 1: External Interrupt 1 Flag (IE1). This flag is set when a negative edge (IT1 = 1) or a positive edge (IT1 = 0) is detected on the INT1 pin. This bit remains set until cleared in software. Setting this bit by software causes an interrupt if enabled. Bit 0: External Interrupt 0 Flag (IE0). This flag is set when a negative edge (IT0 = 1) or a positive edge (IT0 = 0) is detected on the INT0 pin. This bit remains set until cleared in software. Setting this bit by software causes an interrupt if enabled. 6-7 Maxim Integrated MAXQ Family User’s Guide 6.5.8 (Type D) External Interrupt Edge Select Register (EIESx) Bit # 7 6 5 4 3 2 1 0 Name IT7 IT6 IT5 IT4 IT3 IT2 IT1 IT0 Reset 0 0 0 0 0 0 0 0 Access rw rw rw rw rw rw rw rw r = read, w = write Bit 7: Interrupt 7 Edge Select (IT7). This bit selects the edge detection mode for external interrupt 7. 0 = INT7 is positive-edge triggered 1 = INT7 is negative-edge triggered Bit 6: Interrupt 6 Edge Select (IT6). This bit selects the edge detection mode for external interrupt 6. 0 = INT6 is positive-edge triggered 1 = INT6 is negative-edge triggered Bit 5: Interrupt 5 Edge Select (IT5). This bit selects the edge detection mode for external interrupt 5. 0 = INT5 is positive-edge triggered 1 = INT5 is negative-edge triggered Bit 4: Interrupt 4 Edge Select (IT4). This bit selects the edge detection mode for external interrupt 4. 0 = INT4 is positive-edge triggered 1 = INT4 is negative-edge triggered Bit 3: Interrupt 3 Edge Select (IT3). This bit selects the edge detection mode for external interrupt 3. 0 = INT3 is positive-edge triggered 1 = INT3 is negative-edge triggered Bit 2: Interrupt 2 Edge Select (IT2). This bit selects the edge detection mode for external interrupt 2. 0 = INT2 is positive-edge triggered 1 = INT2 is negative-edge triggered Bit 1: Interrupt 1 Edge Select (IT1). This bit selects the edge detection mode for external interrupt 1. 0 = INT1 is positive-edge triggered 1 = INT1 is negative-edge triggered Bit 0: Interrupt 0 Edge Select (IT0). This bit selects the edge detection mode for external interrupt 0. 0 = INT0 is positive-edge triggered 1 = INT0 is negative-edge triggered Maxim Integrated 6-8 MAXQ Family User’s Guide SECTION 7: TIMER/COUNTER 0 MODULE This section contains the following information: 7.1 Timer 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7-2 7.1.1 Timer 0 Mode: 13-Bit Timer/Counter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7-2 7.1.2 Timer 0 Mode: 16-Bit Timer/Counter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7-3 7.1.3 Timer 0 Mode: 8-Bit Timer with Auto-Reload . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7-3 7.1.4 Timer 0 Mode: Two 8-Bit Timer/Counters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7-4 7.2 Timer/Counter 0 Peripheral Registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7-5 7.2.1 Timer/Counter 0 Control Register (T0CN) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7-5 7.2.2 Timer/Counter 0 High Register (T0H) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7-6 7.2.3 Timer/Counter 0 Low Register (T0L) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7-6 LIST OF FIGURES Figure 7-1. Timer/Counter 0 13-Bit/16-Bit Modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7-3 Figure 7-2. Timer/Counter 0 8-Bit Auto-Reload Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7-3 Figure 7-3. Timer/Counter 0 Dual 8-Bit Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7-4 LIST OF TABLES Table 7-1. Timer 0 Mode Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7-2 7-1 Maxim Integrated MAXQ Family User’s Guide SECTION 7: TIMER/COUNTER 0 MODULE The Timer/Counter 0 Module allows the MAXQ to control a 16-bit programmable timer/counter. Whether and how many Timer/Counter 0 Modules are implemented in a given MAXQ-based microcontroller is product dependent. 7.1 Timer 0 Timer 0 is the first type of 16-bit timer/counter. Timer 0 consists of a 16-bit register in two bytes, T0H and T0L. Timer 0 is enabled by the Timer 0 Run Control (TR0) bit in the T0CN register. Timer 0 supports four basic modes of operations. The mode of operation is controlled by the Timer 0 Control (T0CN) register. Table 7-1 shows these four modes and the corresponding T0CN register bit settings. Each of the four Timer 0 operational modes can optionally select that an external pin serve as the Timer 0 input clock, and can also gate the input clock source (either internal or external) based upon an external pin state. The gating feature is useful in measuring the pulse width of external signals. Table 7-1. Timer 0 Mode Summary T0CN REGISTER BIT SETTINGS TIMER 0 OPERATIONAL MODE M1 M0 13-Bit Timer/Counter 0 0 16-Bit Timer/Counter 0 1 8-Bit Timer/Counter with Auto-Reload 1 0 Two 8-Bit Timer/Counters 1 1 Note 1: When C/T = 1, the counter configuration is in effect, and the T0 pin signal provides the input clock. Note 2: When GATE = 1, the gating control is in effect, and the T0G = 0 pin state causes gating of the Timer/Counter input clock. 7.1.1 Timer 0 Mode: 13-Bit Timer/Counter As referenced in Table 7-1, setting T0CN register bits M1:M0 = 00b selects the 13-bit Timer/Counter operating mode for Timer 0. T0H provides the 8 MSbs (most significant bits) of the 13-bit timer, while bits 4–0 of T0L serve as the 5 LSbs (least significant bits) of the 13-bit timer. Bit 4 of T0L is used as a ripple-out to T0H bit 0, thereby completely bypassing bits 5 to 7 of T0L. The upper three bits of T0L are indeterminate. When the 13-bit count reaches 1FFFh (all ones), the next count causes it to roll over to 0000h. The TF0 (T0CN.5) flag is set, and an interrupt occurs if enabled. Once the timer is started using the TR0 (T0CN.4) timer enable, the timer counts as long as one of the following conditions is true: 1) GATE (T0CN.3) = 0 2) GATE (T0CN.3) = 1 and T0G (external pin) = 1 The Timer 0 input clock is normally a function of the system clock frequency as defined by the T0M (T0CN.6) bit. However, an external signal at the T0 pin can serve as the input clock if the C/T (T0CN.2) bit is set to 1. When using the T0 pin as an input clock, Timer/Counter 0 counts 1-to-0 transitions on the pin. To reliably detect external 1-to-0 transitions, the input signal high and low times each must be a minimum of one system clock in duration. Note that when the Timer 0 input clock is derived from the system clock, changing the system clock divide ratio (via the CKCN register bit controls) consequently changes the input clock to the Timer. Maxim Integrated 7-2 MAXQ Family User’s Guide 7.1.2 Timer 0 Mode: 16-Bit Timer/Counter Setting the T0CN register bits M1:M0 = 01b invokes the 16-bit Timer/Counter operating mode. This mode is identical to the 13-bit Timer/Counter mode, except that the T0H:T0L register pair hold a 16-bit value. T0H holds the MSB and T0L holds the LSB. Rollover occurs when the timer reaches FFFFh. An interrupt occurs if enabled and the TF0 (T0CN.5) flag is set. Time-base selection, counter/timer selection, and the gate function operate just as described for the 13-bit Timer/Counter mode. DIVIDE BY 12 0 T0M = T0CN.6 SYSTEM CLOCK C/T = T0CN.2 0 1 T0L CLK 0 7 1 T0 PIN 00 TR0 = T0CN.4 01 M1:M0 = T0CN.1, T0CN.0 GATE = T0CN.3 0 T0H 7 T0G PIN INTERRUPT TF0 = T0CN.5 Figure 7-1. Timer/Counter 0 13-Bit/16-Bit Modes 7.1.3 Timer 0 Mode: 8-Bit Timer with Auto-Reload When T0CN register bits M1:M0 = 10b, Timer 0 is configured as an 8-bit timer/counter with automatic reload of the start value. The timer uses T0L to count and T0H to store the reload value. Software must initialize both T0L and T0H with the same starting value for the first count to be correct. Once the T0L reaches FFh, it is automatically loaded with the value in T0H. The T0H value remains unchanged unless modified by software. Like the other Timer 0 modes, this mode allows counting of either clock cycles or pulses on the T0 pin (C/T = 1) and allows gating (GATE = 1) of the T0 pin input with the T0G pin. DIVIDE BY 12 0 T0M = T0CN.6 SYSTEM CLOCK 1 0 C/T = T0CN.2 T0L CLK 0 7 RELOAD 1 T0 PIN TR0 = T0CN.4 0 GATE = T0CN.3 T0H 7 T0G PIN TF0 = T0CN.5 INTERRUPT Figure 7-2. Timer/Counter 0 8-Bit Auto-Reload Mode 7-3 Maxim Integrated MAXQ Family User’s Guide 7.1.4 Timer 0 Mode: Two 8-Bit Timer/Counters When T0CN register bits M1:M0 = 11b, Timer 0 provides two 8-bit timer/counters as shown in Figure 7-3. In this mode, T0L is an 8-bit timer/counter that can be used to count clock cycles or 1-to-0 transitions on pin T0 as determined by C/T. (T0CN.2). As in the other modes, the GATE function can use T0G to give external run control of the timer to an outside signal. T0H becomes an independent 8-bit timer that can only count clock cycles as shown in Figure 7-3. The clock-input enable for both timer/counters (T0L and T0H) is controlled by the Timer 0 Run (TR0) bit, while the Timer 0 interrupt flag bit (TF0) is associated only with rollover of the T0H register. DIVIDE BY 12 0 T0M = T0CN.6 SYSTEM CLOCK 1 0 C/T = T0CN.2 CLK T0L 0 T0 PIN 7 1 TR0 = T0CN.4 GATE = T0CN.3 INTERRUPT TF0 = T0CN.5 T0G PIN 0 T0H 7 Figure 7-3. Timer/Counter 0 Dual 8-Bit Mode Maxim Integrated 7-4 MAXQ Family User’s Guide 7.2 Timer/Counter 0 Peripheral Registers 7.2.1 Timer/Counter 0 Control Register (T0CN) Bit # Name 7 6 5 4 3 2 1 0 ET0 T0M TF0 TR0 GATE C/T M1 M0 Reset 0 0 0 0 0 0 0 0 Access rw rw rw rw rw rw rw rw r = read, w = write Bit 7: Enable Timer 0 Interrupt (ET0). Setting this bit to 1 enables interrupts from the Timer 0 TF0 flag. Clearing this bit to 0 disables the Timer 0 interrupt. Bit 6: Timer 0 Clock Select (T0M). The T0M bit selects the clock frequency for Timer 0: 0 = Uses a divide by 12 of the system clock frequency as Timer 0 base clock. 1 = Uses a divide by 1 of the system clock frequency as Timer 0 base clock. Bit 5: Timer 0 Overflow Flag (TF0). This bit is set to 1 when Timer 0 overflows its maximum count as defined by the current mode. It is cleared either by software or a reset. When this bit is 0, no Timer 0 overflow has been detected. Bit 4: Timer 0 Run Control (TR0). Setting this bit enables Timer/Counter 0. Clearing this bit halts the Timer/Counter 0. Bit 3: Timer 0 Gate Control (GATE) 0 = Timer 0 will clock when TR0 is 1, regardless of the logic state of the external T0G gating control pin 1 = Timer 0 will clock only when TR0 and the logic state of the external T0G gating control pin are 1 Bit 2: Counter/Timer 0 Select (C/T) 0 = Selects timer function with internal clock when TR0 is 1 1 = Selects counter function with external T0 input when TR0 is 1 Bits 1 and 0: (M[1:0]). These mode select bits define the Timer/Counter mode of operation: M1 7-5 M0 FUNCTION 0 0 Mode 0: 8-Bit with 5-Bit Prescale 0 1 Mode 1: 16-Bit with No Prescale 1 0 Mode 2: 8-Bit with Auto-Reload 1 1 Mode 3: Two 8-Bit Timers Maxim Integrated MAXQ Family User’s Guide 7.2.2 Timer/Counter 0 High Register (T0H) Bit # 7 6 5 4 3 2 1 0 Name T0H.7 T0H.6 T0H.5 T0H.4 T0H.3 T0H.2 T0H.1 T0H.0 Reset 0 0 0 0 0 0 0 0 Access rw rw rw rw rw rw rw rw r = read, w = write Bits 7 to 0: Timer/Counter 0 High (T0H.[7:0]). The T0H register is used to load the most significant 8-bit value and least significant 8-bit value of Timer 0. 7.2.3 Timer/Counter 0 Low Register (T0L) Bit # 7 6 5 4 3 2 1 0 Name T0L.7 T0L.6 T0L.5 T0L.4 T0L.3 T0L.2 T0L.1 T0L.0 Reset 0 0 0 0 0 0 0 0 Access rw rw rw rw rw rw rw rw r = read, w = write Bits 7 to 0: Timer/Counter 0 Low (T0L.[7:0]). The T0L register is used to read the most significant 8-bit value and least significant 8-bit value of Timer 0. Maxim Integrated 7-6 MAXQ Family User’s Guide SECTION 8: TIMER/COUNTER 1 MODULE This section contains the following information: 8.1 Timer 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8-2 8.1.1 Timer 1 Mode: 16-Bit Timer/Counter with Auto-Reload . . . . . . . . . . . . . . . . . . . . . . . . .8-2 8.1.2 Timer 1 Mode: 16-Bit Event Capture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8-3 8.1.3 Timer 1 Mode: Up/Down Count with Auto-Reload . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8-4 8.1.4 Timer 1 Mode: Clock Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8-4 8.2 Timer/Counter 1 Peripheral Registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8-5 8.2.1 Timer/Counter 1 Control Register (T1CN) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8-5 8.2.2 Timer/Counter 1 High Register (T1H) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8-6 8.2.3 Timer/Counter 1 Low Register (T1L) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8-6 8.2.4 Timer/Counter 1 High Register (T1CH) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8-6 8.2.5 Timer/Counter 1 Low Register (T1CL) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8-6 8.2.6 Timer/Counter 1 Mode Register (T1MD) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8-7 8.3 Time-Base Selection for Timers 0 and 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8-7 LIST OF FIGURES Figure 8-1. Timer/Counter 1 16-Bit Auto-Reload Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8-3 Figure 8-2. Timer/Counter 1 16-Bit Event Capture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8-3 Figure 8-3. Timer/Counter 1 16-Bit Up/Down Count with Auto-Reload . . . . . . . . . . . . . . . . . . . . .8-4 Figure 8-4. Timer 1 Clock Output Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8-4 LIST OF TABLES Table 8-1. Timer/Counter 1 Mode Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8-2 Table 8-2. Input Clock Frequency Selection for Timer 0 and Timer 1 . . . . . . . . . . . . . . . . . . . . . .8-7 8-1 Maxim Integrated MAXQ Family User’s Guide SECTION 8: TIMER/COUNTER 1 MODULE The Timer/Counter 1 Module allows the MAXQ to control a 16-bit programmable timer/counter. Whether and how many Timer/Counter 1 Modules are implemented in a given MAXQ-based microcontroller is product dependent. 8.1 Timer 1 Timer 1 is the second type of 16-bit timer/counter. Timer 1 consists of a 16-bit register in two bytes, T1H and T1L. Timer 1 is enabled by the Timer 1 Run Control (TR1) bit in the T1CN register. Unlike Timer 0, Timer 1 is operable only as a full 16-bit timer/counter. However, it supports many optional modes not available on Timer 0. These optional modes are enabled by T1CN register bits. To support the extended functionality of Timer 1, a 16-bit capture register composed of the T1CH, T1CL bytes and a second mode control register (T1MD) are implemented. Table 8-1 shows the Timer 1 operational modes and the corresponding T1CN register bit settings. With exception of the Timer 1 clock output mode, all Timer 1 modes can optionally select that an external pin serve as the Timer 1 input clock. Table 8-1. Timer/Counter 1 Mode Summary TIMER 1 OPERATIONAL MODE Auto-Reload Auto-Reload Using T1EX Pin Capture Using T1EX Pin Up/Down Count Using T1EX Pin — Clock Output on T1 Pin T1CN REGISTER BIT SETTINGS T1OE DCEN EXEN1 C/T1 CP/RL1 0 0 0 0 0 1 0 0 0 1 x x 0 1 1 0 x x x x x x 1 0 0 0 1 0 x 0 OPTIONAL CONTROL — — — — Input clock = T1 pin — 8.1.1 Timer 1 Mode: 16-Bit Timer/Counter with Auto-Reload The Timer 1 auto-reload mode is configured by setting the CP/RL1 (T1CN.0) bit to logic 0. In this mode, Timer 1 performs a simple timer or counter function where it behaves similarly to the 16-bit timer/counter mode offered on Timer 0, but adds a separate 16-bit reload value and the ability to trigger a reload with an external pin. Timer 1 begins counting from the value supplied in T1H and T1L. When Timer 1 reaches an overflow state, i.e., rolls over from FFFFh to 0000, it sets the TF1 Flag. This flag can generate an interrupt if enabled. In addition, the timer restores its starting value and begins timing (or counting) again. The starting value is preloaded by software into the capture registers T1CH and T1CL. These registers cannot be used for capture functions while also performing auto-reload, so these modes are mutually exclusive. When in auto-reload mode, Timer 1 can also be forced to reload with the T1EX pin. If EXEN1 (T1CN.3) is set to logic 1, then a 1-to-0 transition on T1EX causes a reload. Otherwise, the T1EX pin is ignored. Maxim Integrated 8-2 MAXQ Family User’s Guide If the C/T1 bit (T1CN.1) is logic 0, the timer’s input clock is a function of the system clock. When C/T1 = 1, pulses on the T1 pin are counted. Counting or timing is enabled or disabled using the with the Timer 1 Run Control bit = TR1 (T1CN.2). This mode, including the optional reload control, is illustrated in Figure 8-1. DIVIDE BY 12 0 T1M = T1MD.0 SYSTEM CLOCK 0 1 C/T1 = T1CN.1 CLK 0 7 8 T1L 15 TF1 = T1CN.7 T1H 1 T1 PIN TR1 = T1CN.2 T1EX PIN ƒ T1CL 0 T1CH 7 8 15 EXF1 = T1CN.6 EXEN1 = T1CN.3 TIMER 1 INTERRUPT Figure 8-1. Timer/Counter 1 16-Bit Auto-Reload Mode 8.1.2 Timer 1 Mode: 16-Bit Event Capture The 16-bit capture mode is invoked by setting the CP/RL1 (T1CN.0) bit to logic 1. Timer 1 begins counting from the value supplied in T1H and T1L until reaching an overflow state, i.e., rolls over from FFFFh to 0000, at which point it sets the TF1 Flag. This flag can generate an interrupt if enabled. The optional capture function is enabled by setting the EXEN1 (T1CN.3) bit to logic 1. Once this has been done, a 1-to-0 transition on the T1EX pin causes the value in Timer 1 (T1H, T1L) to be transferred into the capture registers (T1CH, T1CL) and the EXF1 (T1CN.6) flag to be set. Setting of the EXF1 flag can generate an interrupt if enabled. If the EXEN1 bit is set to logic 0, 1-to-0 transitions on the T1EX pin do not automatically trigger a capture event. DIVIDE BY 12 0 T1M = T1MD.0 SYSTEM CLOCK 1 0 C/T1 = T1CN.1 CLK 0 7 8 T1L 15 TF1 = T1CN.7 T1H 1 T1 PIN TR1 = T1CN.2 T1EX PIN ƒ T1CL 0 CAPTURE EXEN1 = T1CN.3 T1CH 7 8 15 EXF1 = T1CN.6 TIMER 1 INTERRUPT Figure 8-2. Timer/Counter 1 16-Bit Event Capture 8-3 Maxim Integrated MAXQ Family User’s Guide 8.1.3 Timer 1 Mode: Up/Down Count with Auto-Reload The up/down count auto-reload option is enabled by the DCEN (T1CN.4) bit. When DCEN is set to logic 1, Timer 1 counts up or down as controlled by the state of T1EX pin. T1EX causes upward counting when a logic 1 is applied and down counting when a logic 0 is applied. When DCEN = 0, Timer 1 only counts up. When an upward counting overflow occurs, the value in T1CH and T1CL loads into T1H and T1L. In the down count direction, an underflow occurs when T1H and T1L match the values in T1CH and T1CL, respectively. When an underflow occurs, FFFFh is loaded into T1H and T1L and counting continues. Note that in this mode, the overflow/underflow output of the timer is provided to an edge-detection circuit as well as to the TF1 bit (T1CN.7). This edge-detection circuit toggles the EXF1 bit (T1CN.6) on every overflow or underflow. Therefore, the EXF1 bit behaves as a 17th bit of the counter, and may be used as such. DIVIDE BY 12 (DOWN COUNTING RELOAD VALUE) T1M = T1MD.0 0 FFH FFH T1L T1H T1CL T1CH SYSTEM CLOCK 0 1 C/T1 = T1CN.1 CLK 15 1 T1 PIN TR1 = T1CN.2 15 COUNT DIRECTION (1 = UP, 0 = DOWN) (UP COUNTING RELOAD VALUE) T1EX PIN TF1 = T1CN.7 TIMER 1 INTERRUPT EXF1 = T1CN.6 Figure 8-3. Timer/Counter 1 16-Bit Up/Down Count with Auto-Reload 8.1.4 Timer 1 Mode: Clock Output Timer 1 can also be configured to drive a clock output on the T1 port pin, as shown in Figure 8-4. To configure Timer 1 for this mode, it must first be set to 16-bit auto-reload timer mode (CP/RL1 = 0, C/T1 = 0). Next, the T1OE (T1CN.5) bit must be set to logic 1. TR1 DIVIDE BY 12 0 T1M = T1MD.0 SYSTEM CLOCK 0 78 15 1 T1L T1H TR1 = T1CN.2 C/T1 = T1CN.1 = 0 T1 PIN T1CL T1CH 7 8 0 15 DIVIDE BY 2 T1OE = T1CN.5 = 1 T1EX PIN ƒ EXEN1 = T1CN.3 EXF1 = T1CN.6 TIMER 1 INTERRUPT T1 FREQUENCY OUT = SYSTEM CLOCK (2 x (65,536 – T1CH, T1CL)) Figure 8-4. Timer 1 Clock Output Mode Maxim Integrated 8-4 MAXQ Family User’s Guide (T1CN.2) must also be set to logic 1 to enable the timer. The DCEN bit has no effect in this mode. This mode produces a 50% duty cycle square-wave output. The frequency of the square wave is given by the formula in Figure 8-4. Each timer overflow causes an edge transition on the pin, i.e., the state of the pin toggles. Note that the timer itself does not generate an interrupt, but if needed, the Timer 1 external interrupt is still available for use when enabled (EXEN1 = 1). 8.2 Timer/Counter 1 Peripheral Registers 8.2.1 Timer/Counter 1 Control Register (T1CN) Bit # 7 6 5 4 3 2 1 0 Name TF1 EXF1 T1OE DCEN EXEN1 TR1 C/T1 CP/RL1 Reset 0 0 0 0 0 0 0 0 Access rw rw rw rw rw rw rw rw r = read, w = write Bit 7: Timer 1 Overflow Flag (TF1). This bit is set when Timer 1 overflows from FFFFh or the count is equal to the capture register in down count mode. It must be cleared by software. Bit 6: External Timer 1 Trigger Flag (EXF1). A negative transition on the T1EX causes this flag to be set if (CP/RL1 = EXEN1 = 1) or (CP/RL1 = DCEN = 0 and EXEN1 = 1). When CP/RL1 = 0 and DCEN = 1, EXF1 toggles whenever Timer 1 underflows or overflows. In this mode, EXF1 can be used as the 17th Timer bit and will not cause an interrupt. If set by a negative transition, this flag must be cleared by software. Setting this bit to 1 forces a Timer interrupt if enabled. Bit 5: Timer 1 Output Enable (T1OE). Setting this bit to 1 enables the clock output function of T1 pin if C/T1 = 0. Timer 1 rollovers will not cause interrupts. Clearing this bit to 0 causes the T1 pin to function as either a standard port pin or a counter input for Timer 1. Bit 4: Down Count Enable (DCEN). This bit, in conjunction with the T1EX pin, controls the direction that Timer 1 counts in 16-bit autoreload mode. Clearing this bit to 0 causes Timer 1 to count up. Setting this bit to 1 causes Timer 1 to count up if the T1EX pin is 1 and to count down if the T1EX pin is 0. Bit 3: Timer 1 External Enable (EXEN1). Setting this bit to 1 enables the capture/reload function on the T1EX pin for a negative transition. Clearing this bit to 0 causes Timer 1 to ignore all external events on T1EX pin. Bit 2: Timer 1 Run Control (TR1). Setting this bit enables Timer 1. Clearing this bit halts the Timer 1. Bit 1: Counter/Timer Select (C/T1). This bit determines whether Timer 1 functions as a Timer or counter. Setting this bit to 1 causes Timer 1 to count negative transitions on the T1 pin. Clearing this bit to 0 causes Timer 1 to function as a Timer. The speed of Timer 1 is determined by the T1M bit, either divide by 1 or divide by 12 of the system clock, including the clock output mode. Bit 0: Capture/Reload Select (CP/RL1). This bit determines whether the capture or reload function is used for Timer 1. Timer 1 functions in an auto-reload mode following each overflow. Setting this bit to 1 causes a Timer 1 capture to occur when a falling edge is detected on T1EX if EXEN1 = 1. Clearing this bit to 0 causes an auto-reload to occur when Timer 1 overflow or a falling edge is detected on T1EX if EXEN1 = 1. 8-5 Maxim Integrated MAXQ Family User’s Guide 8.2.2 Timer/Counter 1 High Register (T1H) Bit # 7 6 5 4 3 2 1 0 Name T1H.7 T1H.6 T1H.5 T1H.4 T1H.3 T1H.2 T1H.1 T1H.0 Reset 0 0 0 0 0 0 0 0 Access rw rw rw rw rw rw rw rw r = read, w = write Bits 7 to 0: Timer/Counter 1 High (T1H.[7:0]). The T1H register is used to load the most significant 8-bit value and least significant 8-bit value of Timer 1. 8.2.3 Timer/Counter 1 Low Register (T1L) Bit # 7 6 5 4 3 2 1 0 Name T1L.7 T1L.6 T1L.5 T1L.4 T1L.3 T1L.2 T1L.1 T1L.0 Reset 0 0 0 0 0 0 0 0 Access rw rw rw rw rw rw rw rw r = read, w = write Bits 7 to 0: Timer/Counter 1 Low (T1L.[7:0]). The T1L register is used to read the most significant 8-bit value and least significant 8bit value of Timer 1. 8.2.4 Timer/Counter 1 High Register (T1CH) Bit # 7 6 5 4 3 2 1 0 Name T1CH.7 T1CH.6 T1CH.5 T1CH.4 T1CH.3 T1CH.2 T1CH.1 T1CH.0 Reset 0 0 0 0 0 0 0 0 Access rw rw rw rw rw rw rw rw r = read, w = write Bits 7 to 0: Timer/Counter 1 High (T1CH.[7:0]). The T1CH register is used to capture the T1H values when Timer 1 is configured in capture mode. This register is also used as the MSB of a 16-bit reload value when Timer 1 is configured in auto-reload mode. 8.2.5 Timer/Counter 1 Low Register (T1CL) Bit # 7 6 5 4 3 2 1 0 Name T1CL.7 T1CL.6 T1CL.5 T1CL.4 T1CL.3 T1CL.2 T1CL.1 T1CL.0 Reset 0 0 0 0 0 0 0 0 Access rw rw rw rw rw rw rw rw r = read, w = write Bits 7 to 0: Timer/Counter 1 Low (T1CL.[7:0]). The T1CL register is used to capture the T1L values when Timer 1 is configured in capture mode. This register is also used as the LSB of a 16-bit reload value when Timer 1 is configured in auto-reload mode. Maxim Integrated 8-6 MAXQ Family User’s Guide 8.2.6 Timer/Counter 1 Mode Register (T1MD) Bit # 7 6 5 4 3 2 1 0 Name — — — — — — ET1 T1M Reset 0 0 0 0 0 0 0 0 Access r r r r r r rw rw r = read, w = write Bits 7 to 2: Reserved Bit 1: Enable Timer 1 Interrupt (ET1). Setting this bit to 1 enables interrupts from the Timer 1 TF1 and EXF1 flags in T1CN. The EXF1 flag does not cause interrupts in the up/down count mode. Bit 0: Timer 1 Clock Select (T1M). The T0M bit selects the clock frequency for Timer 1: 0 = Uses a divide by 12 of the system clock frequency as Timer 1 base clock 1 = Uses a divide by 1 of the system clock frequency as Timer 1 base clock 8.3 Time-Base Selection for Timers 0 and 1 The MAXQ allows selection of the time base for each timer independently. The input clock for each timer defaults to 12 system clocks per timer tick. The timer-input clock frequency can be increased by setting the respective TxM bit for the timer (T0M for Timer 0; T1M for Timer 1). Setting the TxM bit allows the system clock input to be used for the timer-input clock. Table 8-2 shows the resulting timer input clock for the various system clock modes according to timer control bit TxM setting. Table 8-2. Input Clock Frequency Selection for Timer 0 and Timer 1 8-7 TIMER 0, 1 INPUT CLOCK FREQUENCY SYSTEM CLOCK MODE SYSTEM CLOCK SELECT BITS PMME, CD1, CD0 Divide by 1 Divide by 2 Divide by 4 Divide by 8 000 001 010 011 TxM = 0 CLK / 12 CLK / 24 CLK / 48 CLK / 96 TxM = 1 CLK / 1 CLK / 2 CLK / 4 CLK / 8 Power Management Mode (Divide by 256) 1xx CLK / 3072 CLK / 256 Maxim Integrated MAXQ Family User’s Guide SECTION 9: TIMER/COUNTER 2 MODULE This section contains the following information: 9.1 Timer 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-4 9.2 Modes of Operation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-5 9.2.1 16-Bit Timer: Auto-Reload/Compare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-6 9.2.1.1 Output Enable (PWM Out) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-6 9.2.1.2 Polarity Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-6 9.2.1.3 Gated . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-6 9.2.1.4 Single Shot (and Gating) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-6 9.2.1.5 Capture/Reload Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-7 9.2.2 16-Bit Timer: Capture Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-7 9.2.2.1 Output Enables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-7 9.2.2.2 Polarity Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-7 9.2.2.3 Edge Detection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-7 9.2.2.4 Gated . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-7 9.2.2.5 Single Shot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-7 9.2.2.6 Capture and Reload . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-7 9.2.3 16-Bit Counter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-7 9.2.3.1 Output Enable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-8 9.2.3.2 Polarity Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-8 9.2.3.3 Gating and Single Shot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-8 9.2.4 Dual 8-Bit Timers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-8 9.2.4.1 Output Enable (PWM Out) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-8 9.2.4.2 Polarity Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-8 9.2.4.3 Gated . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-8 9.2.4.4 Single Shot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-8 9.2.5 8-Bit Timer/8-Bit Capture Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-9 9.2.6 8-Bit Timer/8-Bit Counter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-9 9.2.7 Timer 2 Input Clock Selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-9 9.3 Timer 2 Capture Application Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-10 9.3.1 Measure Low-Pulse Duration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-10 9-1 Maxim Integrated MAXQ Family User’s Guide 9.3.2 Measure High-Pulse Duration Repeatedly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-11 9.3.3 Measure Period . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-12 9.3.4 Measure Duty Cycle Repeatedly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-13 9.3.5 Overflow/Interrupt on Cumulative Time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-14 9.4 Timer/Counter 2 Peripheral Registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-15 9.4.1 Timer/Counter 2 Configuration Register (T2CFG) . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-15 9.4.2 Timer/Counter 2 Control Register A (T2CNA) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-16 9.4.3 Timer/Counter 2 Control Register B (T2CNB) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-17 9.4.4 Timer 2 Value Register (T2V) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-18 9.4.5 Timer 2 Value High Register (T2H) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-18 9.4.6 Timer 2 Reload Register (T2R) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-18 9.4.7 Timer 2 Reload High Register (T2RH) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-19 9.4.8 Timer 2 Capture/Compare Register (T2C) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-19 9.4.9 Timer 2 Capture/Compare High Register (T2CH) . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-19 9.5 Low-Speed Infrared Transmit/Receive Support Using Timer 2 . . . . . . . . . . . . . . . . . . . . . . . .9-20 9.5.1 Subcarrier Generation Using Timer 2 Low . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-20 9.5.2 Transmit Baseband Modulator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-20 9.5.2.1 IR Encoding (Transmit) Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-21 9.5.2.2 Receive Pin Sampling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-22 9.5.2.3 IR Decoding (Receive) Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-22 9.6 IR Peripheral Register . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-23 9.6.1 Infrared Control Register (IRCN) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-23 Maxim Integrated 9-2 MAXQ Family User’s Guide LIST OF FIGURES Figure 9-1. Timer 2 Mode Selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-5 Figure 9-2. Output Enable and Polarity Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-5 Figure 9-3. Timer 2 Clock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-9 Figure 9-4. Timer 2 Application Example—Measure Low Pulse Width . . . . . . . . . . . . . . . . . . . . .9-10 Figure 9-5. Timer 2 Application Example—Measure High Pulse Width . . . . . . . . . . . . . . . . . . . .9-11 Figure 9-6. Timer 2 Application Example—Measure Period . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-12 Figure 9-7. Timer 2 Application Example—Measure Duty Cycle . . . . . . . . . . . . . . . . . . . . . . . . .9-13 Figure 9-8. Timer 2 Application Example—Overflow/Interrupt on Cumulative Time . . . . . . . . . . .9-14 Figure 9-9. IR Transmit Subcarrier Generation and Baseband Modulator Control . . . . . . . . . . . .9-20 Figure 9-10. Biphase Encoding Example (T2RH Remains Fixed) . . . . . . . . . . . . . . . . . . . . . . . . .9-21 Figure 9-11. Bit-Length Encoding Example (T2RH Modified) . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-21 Figure 9-12. IR Receive Pin Sampling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-22 Figure 9-13. Biphase Decoding Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-22 Figure 9-14. Bit Length Decoding Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-23 LIST OF TABLES Table 9-1. Timer/Counter 2 Functions and Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-4 9-3 Maxim Integrated MAXQ Family User’s Guide SECTION 9: TIMER/COUNTER 2 MODULE The Timer/Counter 2 Module provides a 16-bit programmable timer/counter with pulse-width modulation capability. Whether and how many Timer 2 Modules are implemented in a given MAXQ-based microcontroller is product dependent. Timer 2 is an auto-reload, 16-bit timer/counter offering the following functions: • 8-bit/16-bit timer/counter • capture • up/down auto-reload • compare • counter function of external pulse • input/output enhancements 9.1 Timer 2 The 16-bit Timer 2 value is contained in the T2V register. The upper byte is always accessible through the T2H 8-bit register. When Timer 2 is operated in the dual 8-bit mode of operation, the high byte of T2V always reads x00h and is not write accessible. The low byte of the T2V will often be referenced as T2L. Similar registers and nomenclature are used for the Timer 2 auto-reload value resides in the T2R register. A separate 8-bit T2RH register allows read/write access to the high byte and the low byte of T2R is often referred to as T2RL. The Capture/Compare functionality is supported by Timer 2 through the 16-bit T2C capture register and the 8-bit T2CH high-byte access register. Timer 2 normally requires two pins to support the enhanced input/output functionality. Throughout this section the primary input/output pin will be referred to as T2P and the secondary pin, which may or may not be present for a given device, will be referred to as T2PB. Decision whether and/or where to implement the T2PB pin functionality is product and application dependent. Table 9-1 summarizes the modes supported by Timer 2 and the peripheral register bits associated with those modes. Table 9-1. Timer/Counter 2 Functions and Control MODE T2MD C/T2 CCF[1:0] 16-Bit AutoReload/Compare Timer 0 0 00 16-Bit Capture (CCF[1:0] bits define capture edge) 0 0 01, 10, or 11 16-Bit Counter (CCF[1:0] bits define count edge) 0 1 01, 10, or 11 Dual 8-Bit Auto-Reload Timers 1 0 00 8-Bit Capture and 8-Bit Timer/PWM 1 0 01, 10, or 11 8-Bit Counter and 8-Bit Timer/PWM 1 1 01, 10, or 11 Maxim Integrated CONTROL BITS T2OE[1:0]—output enables (PWM out) T2POL[1:0]—input/output polarity select SS2—single-shot pulse control G2EN—gated PWM output T2OE[0] = 0 T2POL[0]—gate level/reload edge select SS2—single-shot capture G2EN—gate timer clock (or gate reload) CPRL2—reload enable T2OE[0] = 0 T2OE[1]—pulse counter output T2POL[1]—output polarity select T2OE[1:0]—output enables (PWM out) T2POL[1:0]—output polarity select T2H Only: SS2—single-shot pulse control T2L Only: T2OE[1]—output enable T2POL[1]—output polarity select T2H Only: T2OE[0] = 0 T2POL[0]—gate level/reload edge select SS2—single-shot capture G2EN—gate timer (or gate reload) CPRL2—reload enable T2L Only: T2OE[1]—output enable T2POL[1]—output polarity select T2H Only: T2OE[0] = 0 9-4 MAXQ Family User’s Guide 9.2 Modes of Operation As summarized in Table 9-1, Timer 2 can provide six timer functions. The Timer 2 operating mode selection is illustrated in Figure 9-1 and Figure 9-2 shows the PWM timer output possibilities. T2L COMPARE MATCH T2CL T2CH TR2L T2H:T2L COMPARE MATCH OR T2H COMPARE MATCH T2MD T2L OVERFLOW T2L T2H T2RL T2RH T2CLK T2H:T2L OVERFLOW OR T2H OVERFLOW C/T2 EDGE DETECTION AND GATING T2P PIN INPUT CCF [1:0] G2EN TR2 SS2 T2POL [0] Figure 9-1. Timer 2 Mode Selection POx.x DATA (IF PDx.x = 1) T2L 8-BIT TIMER T2PB PIN T2POL [1] T2OE [1] T2MD T2H:T2L 16-BIT TIMER OR T2H 8-TIMER POx.x DATA (IF PDx.x = 1) T2P PIN T2POL [0] T2OE [0] POSSIBLE INPUT USE: TIMER GATE EDGE CAPTURE/RELOAD EDGE COUNTER Figure 9-2. Output Enable and Polarity Control 9-5 Maxim Integrated MAXQ Family User’s Guide 9.2.1 16-Bit Timer: Auto-Reload/Compare The 16-bit auto-reload/compare mode for Timer 2 is in effect when the Timer 2 mode select bit (T2MD) is cleared and the capture/compare function definition bits are both cleared (CCF[1:0] = 00b). The Timer 2 value is contained in the T2V register. The Timer 2 run control bit (TR2) starts and stops the 16-bit Timer. The input clock for 16-bit Timer 2 is defined as the system clock divided by the ratio specified by the T2DIV[2:0] prescale bits. The Timer begins counting from the value contained in the T2L:T2H register pair until overflowing. When an overflow occurs, the reload value (T2RH:T2RL) is reloaded instead of the x0000h state. The Timer 2 overflow flag (TF2) is set every time that an overflow condition (T2V = 0xFFFFh) is detected. If Timer 2 interrupts have been enabled (ET2 = 1), the TF2 flag can generate an interrupt request. When operating in compare mode, the capture/compare registers (T2CH:T2CL) are compared versus the Timer 2 value registers. Whenever a compare match occurs, the capture/compare status flag (TCC2) is set. If Timer 2 interrupts have been enabled (ET2 = 1), this event is capable of generating an interrupt request. If the capture/compare register is set to a value outside the Timer 2 counting range, a compare match is not signaled and the TCC2 flag is not set. Internally, a Timer 2 output clock is generated, which toggles on the cycle following any compare match or overflow, unless the compare match value has been set equal to the overflow condition, in which case, only one toggle will occur. This clock may be sourced by certain peripherals and/or may be output on one or more pins as permitted by the microcontroller. 9.2.1.1 Output Enable (PWM Out) The Output Enable bits (T2OE[1:0]) enable the Timer 2 output clock to be presented on the pins associated with the respective bits. If Timer 2 has a single I/O pin, the T2OE[0] bit is associated with the T2P pin and the T2OE[1] bit is not implemented (as it would serve no purpose). 9.2.1.2 Polarity Control The Polarity Control bits (T2POL[1:0]) can be used to modify (invert) the enabled clock outputs to the pin(s). The enabled clock outputs (defined by T2OE[1:0]) will toggle on each compare match or overflow. The T2POL[1:0] bits are logically XORed with the Timer 2 output signal, therefore setting a given T2POL[x] bit will result in a high starting state. The T2POL[n] bit can be changed at any time, however the assigned T2POL[n] state will take effect on the external pin only when the corresponding T2OE[n] bit is changed from 0 to 1. When generating PWM output, please note that changing the compare match register can result in a perceived duty cycle inversion if a compare match is missed or multiple compare matches occur during the reload to overflow counting. 9.2.1.3 Gated To use the T2P pin as a timer-input clock gate, the T2OE[0] bit must be cleared to 0 and the G2EN bit must be set to 1. When T2OE[0] = 1, the G2EN bit setting has no effect. When T2OE[0] is cleared to 0, the respective polarity control bit is used to modify the polarity of the input signal to the Timer. In the gated mode, the Timer 2 input clock is gated anytime that the external signal matches the state of the T2POL[0] bit. This means that the default clock gating condition for the T2P pin is logic low (since T2POL[0] = 0 default). Setting T2POL[0] = 1 results in the Timer 2 input clock being gated when the T2P pin is high. Note if multiple pins are allocated for Timer 2 (i.e., T2P, T2PB), the primary pin can be used for clock gating, while the secondary pin can be used to output the gated PWM output signal (if T2OE[1] = 1). 9.2.1.4 Single Shot (and Gating) When operating in 16-bit compare mode, the single-shot is used to automate the generation of single pulses under software control or in response to an external signal (single-shot gated). To generate single-shot output pulses solely under software control, the G2EN bit should be cleared to 0, the output enables and polarity controls should be configured as desired, and the single-shot bit should be set to 1. Writing the single-shot bit effectively overrides the TR2 = 0 condition until Timer 2 overflow/reload occurs. The single-shot bit is automatically cleared once the overflow/reload occurs. Writing SS2 and TR2 = 1 at the same time still causes the SS2 bit to stay in effect until an overflow/reload occurs; however, since TR2 was also written to 1, the specified PWM output continues even after SS2 becomes clear. If two pins are available for the Timer 2 implementation, an additional mode is supported: single-shot gated. Single-shot gated requires that the T2P pin be used as an input (T2OE[0] = 0). It also requires that G2EN = 1, thus differentiating it from the software controlled single-shot mode on the second output pin. If G2EN is enabled and SS2 is written to 1, the gating condition must first be removed for the single-shot enabled output to occur on the pin. When the clock gate is removed, the single-shot output occurs. Just as described, the SS2 bit = 1 state remains in effect until overflow/reload. Note that this makes it possible for the single-shot to span multiple gated/non-gated intervals. Once the SS2 = 1 conditions completes, if TR2 = 1, the gated PWM mode is in effect. Otherwise (TR2 = 0), Timer 2 is stopped. Maxim Integrated 9-6 MAXQ Family User’s Guide 9.2.1.5 Capture/Reload Control For the 16-bit compare operating mode, the CPRL2 bit is not used. 9.2.2 16-Bit Timer: Capture Mode The 16-bit capture mode requires that some event trigger the capture. Normally this event is an external edge. The CCF[1:0] bits define which edge(s) cause a capture to occur. If CCF[1:0] = 01b, a rising edge causes a capture. If CCF[1:0] = 10b, a falling edge causes a capture. If CCF[1:0] = 11b, rising and falling edges both cause a capture to occur. The CPRL2 bit enables both capture and reload to occur on the specified edge(s). 9.2.2.1 Output Enables In 16-bit capture mode, the output enables are meaningless. No output waveform is allowed since the capture/compare registers are being used for the purpose of capturing the Timer 2 value. 9.2.2.2 Polarity Control The polarity control bits (T2POL[1:0]) have no specific meaning as related to the output function since there is no output function. The T2POL[0] bit is used to establish the gating condition for the single-edge capture mode when gating is enabled (G2EN = 1). If capture and reload are defined (CPRL2 = 1 and CCF[1:0] = 11b) for both edges, theT2POL[0] bit can be used to specify which edge does not have an associated edge reload when gating has also been enabled (G2EN bit = 1). When the SS2 bit is used to delay the timer run (for both edge capture), the T2POL[0] bit also defines which edge starts/ends the single-shot process. 9.2.2.3 Edge Detection Edge detection was previously described (CCF[1:0] controlled). 9.2.2.4 Gated If gating is specified, it uses the T2POL[0] bit to define when the input clock to Timer 2 is gated (just as described for the compare mode). This mode can easily be used to measure or incrementally capture high or low pulse durations. If a predefined high/low duration is required to generate an interrupt, the gated compare mode can also be used. Note that if capture is defined for both rising and falling edges, gating would serve no useful purpose as it would result in redundant capture data/interrupts. For this reason, when G2EN = 1 and CCF[1:0] = 11b, the T2POL[0] bit is used to specify which edge is a capture-only edge when CPRL2 = 1 (gating of the reload event). 9.2.2.5 Single Shot The single-shot bit overrides the TR2 = 0 bit setting for a single edge-to-edge capture cycle (as defined by the CCF[1:0] bits). The single-shot takes effect (starting the timer) only when the edge defined by CCF[1:0] is detected or the defined gating condition is removed. While a capture and/or reload can occur on this starting edge, the interrupt flag is not set since a single-shot event has been requested. When rising or falling edge capture is defined, the single-shot mode is useful for measuring single periods. If gating is also specified for the single shot, the high/low pulse widths are easily measured. If rising and falling edges are defined, the T2POL[0] bit designates which edge starts/ends the single-shot cycle, but the starting edge does not cause the interrupt flag to set. If G2EN = 1 for the two-edge capture, the alternate edge (opposite of defined start/end edge can only be used for capture, not capture and reload). For T2POL[0] = 1, the falling edge starts and stops the single shot. This is important for combined duty cycle and period measurement. 9.2.2.6 Capture and Reload The CPRL2 bit enables both capture and reload on the specified edge(s). The only exception to this rule is when the G2EN bit is set to logic 1. When G2EN is set to 1, a reload does not occur on the edge specified by T2POL[0]: when T2POL[0] = 0, the falling edge does not cause a reload; if T2POL[0] = 1, the rising edge does not cause a reload. 9.2.3 16-Bit Counter The 16-bit counter mode is enabled by setting the C/T2 bit to logic 1. When C/T2 = 1, rising, falling, or both rising and falling edges are counted as determined by the CCF[1:0] bits. If CCF[1:0] = 00b, neither edge is defined as a counted edge, and the T2H:T2L counter holds its count since no edge is defined as the counting edge. When an overflow occurs, the reload value (T2R) is reloaded instead of the x0000h state. The Timer/Counter 2 overflow flag (TF2) is set every time that an overflow occurs. If Timer/Counter 2 interrupts have been enabled (ET2 = 1), the TF2 flag can generate an interrupt request. In counter mode, the capture/compare register (T2C) is compared versus the Timer/Counter 2 value register. Whenever a compare match occurs, the capture/compare status flag (TCC2) is set. If Timer/Counter 2 interrupts have been enabled (ET2 = 1), this event can generate an interrupt request. If the capture/compare register is set to a value outside the Timer 2 counting range, a compare match is not signaled and the TCC2 flag is not set. 9-7 Maxim Integrated MAXQ Family User’s Guide 9.2.3.1 Output Enable For Timer 2 to serve as a counter, the T2P pin must be used as an input. Thus, when C/T2 = 1, the T2OE[0] bit is ignored. The T2OE[1] bit can be used to output the generated waveform on T2PB resulting from compare match and overflow conditions for the counter. When generating PWM output, please note that changing the compare match register can result in a perceived duty cycle inversion if a compare match is missed or multiple compare matches occur during the reload to overflow counting. 9.2.3.2 Polarity Control Only the T2POL[1] bit is meaningful. It can define the starting state of the T2PB pin when the T2PB output has been enabled. The T2POL[1] bit can be changed at any time, however the assigned T2POL[1] state will take effect on the external pin only when the corresponding T2OE[1] bit is changed from 0 to 1. 9.2.3.3 Gating and Single Shot Neither gating nor single-shot modes are supported when operating in 16-bit counter mode. The G2EN and SS2 bits should not be set to 1 when operating in the counter mode (C/T2 = 1). 9.2.4 Dual 8-Bit Timers The dual 8-bit timer mode of operation is initiated by setting the T2MD bit to logic 1. When T2MD = 1, each 16-bit register associated with Timer 2 is split into separate upper and lower 8-bit registers to support dual 8-bit timers. Thus, the primary 8-bit timer is composed of T2H (value), T2RH (reload), T2CH (capture/compare), and the secondary 8-bit timer is composed of T2L(value), T2RL(reload), and T2CH (capture/compare). There is still a single internal Timer 2 input clock that can be sourced by either of these two 8-bit timers. In the dual 8-bit mode of operation, both Timer 2 output clocks (from T2L and T2H) are available to internal peripherals as required by a given product. The secondary 8-bit timer/counter has its own run control bit (TR2L) and interrupt flags (TF2L, TC2L). 9.2.4.1 Output Enable (PWM Out) The output enable bits (T2OE[1:0]) enable the respective 8-bit Timer 2 outputs to be presented on the pins associated with the respective bits. The T2H timer output onto the T2P pin is controlled by the T2OE[0] bit, and the T2L timer output onto the T2PB pin is controlled by the T2OE[1] bit. If Timer 2 has a single I/O pin, only the T2OE[0] bit is required as the secondary timer T2L cannot be output to a pin and can only serve as an internal timer. 9.2.4.2 Polarity Control The polarity control bits (T2POL[1:0]) can be used to modify (invert) the enabled clock outputs to the pin(s). The starting state of the enabled clock outputs (defined by T2OE[1:0]) is the logic state of T2POL[1:0] and toggles on each compare match or overflow. When generating PWM output, please note that changing the compare match register can result in a perceived duty cycle inversion if a compare match is missed or multiple compare matches occur during the reload to overflow counting. The T2POL[1:0] bits are logically XOR with the Timer 2 output signal, therefore setting a given T2POL[x] bit results in a high starting state. The T2POL[n] bit can be changed any time, however the assigned T2POL[n] state will take effect on the external pin only when the corresponding T2OE[n] bit is changed from 0 to 1. T2POL[1] is not required for a single pin Timer 2 implementation. 9.2.4.3 Gated To use the T2P pin as a G2EN, the T2OE[0] bit must be cleared to 0 and the G2EN bit must be set to 1. When T2OE[0] = 1, the G2EN bit setting has no effect. When T2OE[0] is cleared to 0, the respective polarity control bit is used to modify the polarity of the input signal to the Timer. In the gated mode, the input clock to T2H is gated any time the external signal matches the state of the T2POL[0] bit. This means that the default clock gating condition is associated with the T2P pin being low (T2POL[0] = 0). Note that the secondary 8-bit timer, T2L, cannot be gated. Also, since the output enables T2OE[1:0] apply to each individual 8-bit timer, there is no gated PWM mode available. 9.2.4.4 Single Shot The single-shot bit and mode apply only to the primary 8-bit timer (T2H). The single-shot mode is used to automate the generation of single pulses under software control. To generate single-shot output pulses under software control, the G2EN bit should be cleared to 0, the output enables and polarity controls should be configured as desired and the single-shot bit should be set to 1. Writing the single-shot bit effectively overrides the TR2 = 0 condition until Timer 2 overflow/reload occurs. Writing SS2 and TR2 = 1 at the same time still causes the SS2 bit to stay in effect until an overflow/reload occurs. However, the specified PWM output continues since TR2 was also written to 1. Maxim Integrated 9-8 MAXQ Family User’s Guide 9.2.5 8-Bit Timer/8-Bit Capture Mode When the CCF[1:0] bits are configured to a state other than 00b, the edge-capture mode is enabled for the primary timer (T2H). The secondary timer (T2L) always remains in the timer/compare mode and does not support any capture functionality. The capture controls for the 8-bit mode are identical to those specified for the 16-bit mode, however they apply only to the upper timer, T2H. One obvious difference is that the secondary timer (T2L), operable only in compare mode, can be used to generate a PWM output with valid T2OE[1] and T2POL[1] controls, while the primary timer is operating in capture mode. 9.2.6 8-Bit Timer/8-Bit Counter Just as in the 16-bit mode, setting the C/T2 bit to logic 1 enables the external T2P pin to function as a counter input. The edges that are counted are determined by the CCF[1:0] bits. The counter mode of operation applies only to the primary timer/counter (T2H). In a similar fashion to the 16-bit counter mode, when an overflow occurs, an auto-reload of T2RH occurs and the TF2 flag is set. The TCC2 flag is also set on a compare match between the T2H counter and the T2CH compare register (except for the case where T2CH is outside the T2RH to 0xFFh counting range. The secondary timer (T2L) always continues to operate in 8-bit compare mode. Just as in the above split 8-bit timer/8-bit capture mode, this allows the secondary timer (T2L) to function in the PWM output capacity if a T2PB pin is provided. The T2POL[1] control still applies to the 8-bit T2L PWM output when T2OE[1] = 1. 9.2.7 Timer 2 Input Clock Selection Figure 9-3 shows the Timer 2 clock source. The Timer 2 input clock is selected by the T2CI bit while the clock prescale is determined by the T2DIV bits in the T2CFG register. Note that when T2CI is configured to 1, the alternate clock source (32kHz) is sampled by the current system clock selection. The maximum sampleable alternate clock frequency is (system clock/4). SYSTEM CLOCK DIVIDE-BY-N PRESCALE 32kHz EDGE DETECTION T2CI T2DIV [2:0] T2CLK Figure 9-3. Timer 2 Clock 9-9 Maxim Integrated MAXQ Family User’s Guide 9.3 Timer 2 Capture Application Examples The following examples and accompanying figures (Figures 9-4 through 9-8) are used to demonstrate some of the Timer 2 functions. All examples assume that pulse and/or period measurements do not exceed 216 input clocks and that capture register holds the desired result. 9.3.1 Measure Low-Pulse Duration To measure the duration of the first full low pulse seen on the T2P input pin, Timer 2 could be configured for a single shot capture, gating enabled for logic high, capture on the rising edge. The CPRL2 bit could optionally be set to generate a reload on the same rising edge as that which the capture occurs if the preconfigured T2R value is expected to be needed next. ; ------------------ Reset State: T2R = T2V = T2C = 0000h -----------------------MOVE T2CFG, #00000010b ; T2CI =0 (sysclk/N input) ; T2DIV[2:0] =000 (/1) ; T2MD =0 (16-bit) ; CCF[1:0] =01 (rising edge) ; C/T2 =0 (timer/capture) MOVE T2CNA, #10100111b ; ET2 =1 (enable Timer 2 ints) ; T2OE[0] =0 (input) ; T2POL[0] =1 (gating level = ‘1’) ; TR2L:TR2 =00 (don’t start timer) ; CPRL2 =1 (reload on capture edge) ; SS2 =1 (single-shot mode) ; G2EN =1 (gating enabled) ; ------------------ TCC2 Interrupt : DURATION = T2C 1A 2A T2P PIN 1B 2B 3B CODE EXECUTION: POINT A CODE EXECUTION: POINT B EVENTS: 1A: GATING CONDITION REMOVED; SINGLE-SHOT CAPTURE CYCLE BEGINS. 2A: RISING EDGE CAUSES CAPTURE/RELOAD; SINGLE-SHOT CAPTURE CYCLE ENDS; DURATION = T2C. 1B: RISING EDGE CAUSES CAPTURE/RELOAD; SINGLE-SHOT CAPTURE CYCLE BEGINS, TIMER CLOCK GATED SINCE T2P PIN = 1. 2B: GATING CONDITION REMOVED; TIMER RUNS. 3B: RISING EDGE CAUSES CAPTURE/RELOAD; SINGLE-SHOT CAPTURE CYCLE ENDS; DURATION = T2C. Figure 9-4. Timer 2 Application Example—Measure Low Pulse Width Maxim Integrated 9-10 MAXQ Family User’s Guide 9.3.2 Measure High-Pulse Duration Repeatedly To measure the duration of high pulses seen on the T2P input pin repeatedly, Timer 2 could be configured for a single-shot delayed run, gating enabled for logic low, capture on the falling edge. The CPRL2 bit could be set to generate a reload on each falling edge. ; ------------------ Reset State: T2R = T2V = T2C = 0000h -----------------------MOVE T2CFG, #00000100b ; T2CI =0 (sysclk/N input) ; T2DIV[2:0] =000 (/1) ; T2MD =0 (16-bit) ; CCF[1:0] =10 (falling edge) ; C/T2 =0 (timer/capture) MOVE T2CNA, #10001111b ; ET2 =1 (enable Timer 2 ints) ; T2OE[0] =0 (input) ; T2POL[0] =0 (gating level = ‘0’) ; TR2L:TR2 =01 (start timer 2 on single shot condition) ; CPRL2 =1 (reload on capture edge) ; SS2 =1 (single-shot mode) ; G2EN =1 (gating enabled) ; ------------------ TCC2 Interrupt : DURATION = T2C 1A 2A 3A 4A 2B 3B T2P PIN 1B CODE EXECUTION: POINT A CODE EXECUTION: POINT B EVENTS: 1A: FALLING EDGE CAUSES CAPTURE/RELOAD; SINGLE-SHOT CAPTURE CYCLE BEGINS; TIMER CLOCK GATED SINCE T2P PIN = 0. 2A: GATING CONDITION REMOVED; TIMER RUNS. 3A: FALLING EDGE CAUSES CAPTURE/RELOAD; SINGLE-SHOT CAPTURE CYCLE ENDS; DURATION = T2C. TIMER CONTINUES TO OPERATE SINCE TR2 = 1, BUT TIMER CLOCK GATED SINCE T2P PIN = 0. 4A: GATING CONDITION REMOVED; TIMER RUNS. 1B: GATING CONDITION REMOVED; SINGLE-SHOT CAPTURE CYCLE BEGINS. 2B: FALLING EDGE CAUSES CAPTURE/RELOAD; SINGLE-SHOT CAPTURE CYCLE ENDS; DURATION = T2C. TIMER CONTINUES TO OPERATE SINCE TR2 = 1, BUT TIMER CLOCK GATED SINCE T2P PIN = 0. 3B: GATING CONDITION REMOVED; TIMER RUNS. Figure 9-5. Timer 2 Application Example—Measure High Pulse Width 9-11 Maxim Integrated MAXQ Family User’s Guide 9.3.3 Measure Period To measure the period of the signal seen on the T2P input pin, Timer 2 could be configured for a single-shot capture, no gating, either edge (selected by the CCF[1:0] bits). The CPRL2 bit could be set to generate a reload on each capture edge. ; ------------------ Reset State: T2R = T2V = T2C = 0000h -----------------------MOVE T2CFG, #00000100b ; T2CI =0 (sysclk/N input) ; T2DIV[2:0] =000 (/1) ; T2MD =0 (16-bit) ; CCF[1:0] =10 (falling edge) ; C/T2 =0 (timer/capture) MOVE T2CNA, #10000110b ; ET2 =1 (enable Timer 2 ints) ; T2OE[0] =0 (input) ; T2POL[0] =0 (gating level = ‘0’) ; TR2L:TR2 =00 (don’t start timer 2) ; CPRL2 =1 (reload on capture edge) ; SS2 =1 (single-shot mode) ; G2EN =0 (gating disabled) ; ------------------ TCC2 Interrupt : PERIOD = T2C 1A 2A T2P PIN 1B 2B CODE EXECUTION: POINT A CODE EXECUTION: POINT B EVENTS: 1A: FALLING EDGE CAUSES CAPTURE/RELOAD; SINGLE-SHOT CAPTURE CYCLE BEGINS. 2A: FALLING EDGE CAUSES CAPTURE/RELOAD; SINGLE-SHOT CAPTURE CYCLE ENDS; PERIOD = T2C. 1B AND 2B: SAME SEQUENCE AS 1A–2A, EXCEPT THAT THE SINGLE-SHOT CAPTURE CYCLE DOES NOT BEGIN UNTIL THE FIRST FALLING EDGE IS DETECTED. Figure 9-6. Timer 2 Application Example—Measure Period Maxim Integrated 9-12 MAXQ Family User’s Guide 9.3.4 Measure Duty Cycle Repeatedly To measure the duty cycle of the signal seen on the T2P input pin, Timer 2 could be configured for a single-shot delayed run with both edges defined for capture. The CPRL2 bits should be configured to 1 to request reloads on each edge. To prevent reloads on one of the edges, gating should be enabled. The T2POL[0] bit specifies which edge starts/ends the capture cycle and which edge does not have a reload associated with it. ; ------------------ Reset State: T2R = T2V = T2C = 0000h -----------------------MOVE T2CFG, #00000110b ; T2CI =0 (sysclk/N input) ; T2DIV[2:0] =000 (/1) ; T2MD =0 (16-bit) ; CCF[1:0] =11 (both edges) ; C/T2 =0 (timer/capture) MOVE T2CNA, #10101111b ; ET2 =1 (enable Timer 2 ints) ; T2OE[0] =0 (input) ; T2POL[0] =1 (no reload on rising edge ; single-shot start/end on falling edge) ; TR2L:TR2 =01 (start timer 2 on single shot condition) ; CPRL2 =1 (reload on capture edge) ; SS2 =1 (single-shot mode) ; G2EN =1 (gating enabled) ; ------------------ TCC2 Interrupt : LOW TIME=T2C ;------------------- TCC2 Interrupt : PERIOD = T2C 1A 2A 3A T2P PIN 1B 2B 3B CODE EXECUTION: POINT A CODE EXECUTION: POINT B EVENTS: 1A: FALLING EDGE CAUSES CAPTURE/RELOAD; SINGLE-SHOT CAPTURE CYCLE BEGINS. 2A: RISING EDGE CAUSES CAPTURE; LOW TIME = T2C. 3A: FALLING EDGE CAUSES CAPTURE/RELOAD; SINGLE-SHOT CAPTURE CYCLE ENDS; PERIOD = T2C. TIMER CONTINUES TO OPERATE SINCE TR2 = 1, ALLOWING THE NEXT LOW TIME/PERIOD TO BE MEASURED. 1B–3B: SAME SEQUENCE AS 1A–3A, EXCEPT THAT THE SINGLE-SHOT CAPTURE CYCLE DOES NOT BEGIN UNTIL THE FIRST FALLING EDGE IS DETECTED. Figure 9-7. Timer 2 Application Example—Measure Duty Cycle 9-13 Maxim Integrated MAXQ Family User’s Guide 9.3.5 Overflow/Interrupt on Cumulative Time To cause an overflow only when the T2P pin has been low for some cumulative duration, Timer 2 could be configured to the gated compare mode of operation with an initial starting value appropriate for the cumulative duration to be detected. ; ------------------ Reset State: T2R = T2V = T2C = 0000h -----------------------MOVE T2V, #1234h ; Overflow after T2P input low for (10000h-01234h) T2CLKs MOVE T2CFG, #01110000b ; T2CI =0 (sysclk/N input) ; T2DIV[2:0] =111 (/128) ; T2MD =0 (16-bit) ; CCF[1:0] =00 (no edges) ; C/T2 =0 (timer/compare) MOVE T2CNA, #10101001b ; ET2 =1 (enable Timer 2 ints) ; T2OE[0] =0 (input) ; T2POL[0] =1 (gating level = ‘1’) ; TR2L:TR2 =01 (start timer 2) ; CPRL2 =0 (no capture possible) ; SS2 =0 (not single-shot mode) ; G2EN =1 (gating enabled) ; ------------------ TF2 Interrupt : Cumulative low duration reached 1A 2A T2P PIN 1B 2B CODE EXECUTION: POINT A CODE EXECUTION: POINT B EVENTS: 1A: GATING CONDITION IS REMOVED; TIMER BEGINS TO RUN. 2A: TIMER 2 OVERFLOWS. 1B–2B: SAME SEQUENCE AS 1A–2A, EXCEPT THAT TIMER 2 STARTS RUNNING IMMEDIATELY SINCE IT IS NOT GATED. Figure 9-8. Timer 2 Application Example—Overflow/Interrupt on Cumulative Time Maxim Integrated 9-14 MAXQ Family User’s Guide 9.4 Timer/Counter 2 Peripheral Registers 9.4.1 Timer/Counter 2 Configuration Register (T2CFG) Bit # Name 7 6 5 4 3 2 1 0 T2CI T2DIV2 T2DIV1 T2DIV0 T2MD CCF1 CCF0 C/T2 Reset 0 0 0 0 0 0 0 0 Access rw rw rw rw rw rw rw rw r = read, w = write Bit 7: Timer 2 Clock Input Select Bit (T2CI). Setting this bit enables an alternate input clock source to the Timer 2 block. The alternate input clock selection is the 32kHz clock. The alternate input clock must be sampled by the system clock, which requires that the system clock be at least 4 x 32kHz for proper operation unless the system clock is also source from the 32kHz crystal. Bits 6 to 4: Timer 2 Clock Divide 2:0 Bits (T2DIV[2:0]). These three bits select the divide ratio for the timer clock-input clock (as a function of the system clock) when operating in timer mode with T2CI = 0. T2DIV2 T2DIV1 T2DIV0 DIVIDE RATIO 0 0 0 1 0 0 1 2 0 1 0 4 0 1 1 8 1 0 0 16 1 0 1 32 1 1 0 64 1 1 1 128 Bit 3: Timer 2 Mode Select (T2MD). This bit enables the dual 8-bit mode of operation. The default-reset state is 0, which selects the 16-bit mode of operation. When the dual 8-bit mode is established, the primary timer/counter (T2H) carries all of the counter/capture functionality while the secondary 8-bit timer (T2L) must operate in timer compare mode, sourcing the defined internal clock. 0 = 16-bit mode (default) 1 = dual 8-bit mode Bits 2 to 1: Capture/Compare Function Select Bits (CCF[1:0]). These bits, in conjunction with the C/T2 bit, select the basic operating mode of Timer 2. In the dual 8-bit mode of operation (T2MD = 1), the T2L timer only operates in compare mode. CCF1 CCF0 EDGE(S) C/T2 = 0 (TIMER MODE) C/T2 = 1 (COUNTER MODE) 0 0 None Compare Mode Disabled 0 1 Rising Capture/Reload Counter 1 0 Falling Capture/Reload Counter 0 1 Rising and Falling Capture/Reload Counter Bit 0: Counter/Timer Select (C/T2). This bit enables/disables the edge counter mode of operation for the 16-bit counter (T2H:T2L) or the 8-bit counter (T2H) when the dual 8-bit mode of operation is enabled (T2MD = 1). The edge for counting (rising/falling/both) is defined by the CCF[1:0] bits. 0 = timer mode 1 = counter mode 9-15 Maxim Integrated MAXQ Family User’s Guide 9.4.2 Timer/Counter 2 Control Register A (T2CNA) Bit # 7 6 5 4 3 2 1 0 Name ET2 T2OE0 T2POL0 TR2L TR2 CPRL2 SS2 G2EN Reset 0 0 0 0 0 0 0 0 Access rw rw rw rw rw rw rw rw r = read, w = write Bit 7: Enable Timer 2 Interrupts (ET2). This bit serves as the local enable for Timer 2 interrupt sources that fall under the TF2 and TCC2 interrupt flags. Bit 6: Timer 2 Output Enable 0 (T2OE0). This register bit enables the Timer 2 output function for the external T2P pin. The table below shows Timer 2 output possibilities for the T2P, T2PB pins. T2OE[1:0] T2MD T2P PIN T2PB PIN 00 X Port Data Port Data 01 0 16-Bit PWM Output Port Data 10 0 Port Data 16-Bit PWM Output 11 0 16-Bit PWM Output 16-Bit PWM Output 01 1 8-Bit PWM Output (T2H) Port Data 10 1 Port Data 8-Bit PWM Output (T2L) 11 1 8-Bit PWM Output (T2H) 8-Bit PWM Output (T2L) Bit 5: Timer 2 Polarity Select 0 (T2POL0). When the Timer 2 output function has been enabled (T2OE0 = 1), the polarity select bit defines the starting logic level for the T2P output waveform. When T2POL0 = 0, the starting state for the T2P output will be logic low. When T2POL0 = 1, the starting state for the T2P output is logic high. The T2POL0 bit can only be modified when T2OE0 = 0 and takes effect on the external pin when T2OE0 is set to 1. When the Timer 2 pin is being used as an input (T2OE0 = 0), the polarity select bit defines which logic level can be used to gate the timer input clock (when CCF[1:0]11b). When CCF[1:0] = 11b, T2POL0 defines which edge can start/stop a single-shot capture and which edge reload can be skipped (if CPRL2 = 1 and G2EN = 1). Bit 4: Timer 2 Low Run Enable (TR2L). This bit start/stops the low 8-bit Timer (T2L) when dual 8-bit mode (T2MD = 1) is in effect. This bit has no effect when T2MD = 0. 0 = Timer 2 Low stopped 1 = Timer 2 Low run Bit 3: Timer 2 Run Enable (TR2). This bit starts/stop Timer 2. In the dual 8-bit mode of operation, this bit applies only to the T2H timer/counter. Otherwise, the bit applies to the full 16-bit T2H:T2L timer/counter. When the timer is stopped (TR2 = 0), the timer registers hold their count. The single-shot bit (SS2) can override and/or delay the effect of the TR2 bit. 0 = Timer 2 stopped 1 = Timer 2 run Bit 2: Capture and Reload Enable (CPRL2). This bit enables a reload (in addition to a capture) on the edge specified by CCF[1:0] when operating in capture/reload mode (C/T2 = 0). If both edges are defined for capture/reload (CCF[1:0] = 11b), enabling the gating control (G2EN = 1) allows the T2POL0 bit to be used to prevent a reload on one of the edges. If T2POL[0] is 0, no reload on the falling edge; if T2POL[0] is 1, no reload on the rising edge. 0 = capture on edge(s) specified by CCF[1:0] bits 1 = capture and reload on edge(s) specified by CCF[1:0] bits Bit 1: Single Shot (SS2). This bit is used to automatically override or delay the effect of the TR2 bit setting. The single-shot bit is only useful in the timer mode of operation (C/T2 = 0) and should not be set to 1 when the counter mode of operation is enabled (C/T2 = 1). Maxim Integrated 9-16 MAXQ Family User’s Guide Compare Mode: If SS2 is written to 1 while in compare mode, one cycle of the defined waveform (reload to overflow) is output to the T2P, T2PB pins as prescribed by T2POL[1:0] and T2OE[1:0] controls. The only time that this does not immediately occur is when a gating condition is also defined. If a gating condition is defined, the single-shot cycle cannot occur until the gating condition is removed. If the specified non-gated level is already in effect, the singleshot period will start. The gated single-shot output is not supported in dual 8-bit mode. Capture Mode: If SS2 is written to 1 while in capture mode, the timer is halted and the single-shot capture cycle does not begin until the edge specified by CCF[1:0] is detected, or the defined gating condition is removed. Once running, the timer continues running (as allowed by the gate condition) until the defined capture single-shot edge is detected. In this way, the SS2 bit can be used to delay the running of a timer until an edge is detected (setting both SS2 and TR2 =1) or override the TR2 = 0 bit setting for one capture cycle (setting only SS2 = 1). When both edges are defined for capture CCF[1:0] = 11b), the T2POL[0] bit serves to define the single-shot start/end edge: falling edge if T2POL[0] = 1; rising edge if T2POL[0] = 0. No interrupt flag is set when the starting edge for the single-shot capture cycle is detected. The single-shot capture cycle always ends when the next single shot edge is detected. The start/end edge is defined by T2POL[0]. This bit is intended to automate pulse-width measurement (low or high) and duty cycle/period measurement. Bit 0: Gating Enable (G2EN). This bit enables the external T2P pin to gate the input clock to the 16-bit (T2MD = 0) or highest 8-bit (T2MD = 1) Timer. Gating uses T2P as an input, thus it can only be used when T2OE0 = 0 and C/T2 = 0. Gating is not possible on the low 8-bit timer (T2L) when Timer 2 is operated in dual 8-bit mode. Gating is not supported for counter mode operation (C/T2 = 1). The G2EN bit serves a different purpose when capture and reload have been defined for both edges (CCF[1:0] = 11b and CPRL2 = 1). For this special case, setting G2EN = 1 allows the T2POL0 bit to specify which edge does not cause a reload. If T2POL0 is 0, no reload on the falling edge; if T2POL0 is 1, no reload on the rising edge. 0 = gating disabled 1 = gating enabled 9.4.3 Timer/Counter 2 Control Register B (T2CNB) Bit # 7 6 5 4 3 2 1 0 Name ET2L T2OE1 T2POL1 — TF2 TF2L TCC2 TC2L Reset 0 0 0 0 0 0 0 0 Access rw rw rw r rw rw rw rw r = read, w = write Bit 7: Enable Timer 2 Low Interrupts (ET2L). This bit serves as the local enable for Timer 2 Low interrupt sources that fall under the TF2L and TC2L interrupt flags. Bit 6: Timer 2 Output Enable 1 (T2OE1). See table given under T2CNA.5 description. The T2OE1 bit is not implemented for single pin versions of Timer 2. Bit 5: Timer 2 Polarity Select 1 (T2POL1). When the T2B output is enabled (T2OE1 = 1), this bit selects the starting logic level for the alternate pin output. The output that is driven on the T2PB pin can be derived from the 16-bit Timer 2 or the 8-Timer (T2L) depending upon whether operating in the 16-bit mode or the dual 8-bit mode. The T2POL1 bit can be modified anytime, but takes effect on the external pin when T2OE1 is changed from 0 to 1. Bit 3: Timer 2 Overflow Flag (TF2). This flag becomes set anytime there is an overflow of the full 16-bit T2V timer/counter (when T2MD = 0) or an overflow of the 8-bit T2H timer/counter when the dual 8-bit mode of operation is selected (T2MD = 1). Bit 2: Timer 2 Low Overflow Flag (TF2L). This flag is meaningful only when in the dual 8-bit mode of operation (T2MD = 1) and becomes set whenever there is an overflow of the T2L 8-bit timer. Bit 1: Timer 2 Capture/Compare Flag (TCC2). This flag is set on any compare match between the Timer 2 value and compare register (T2V = T2C or T2H = T2CH, respectively, for 16-bit and 8-bit compare modes) or when a capture event is initiated by an external edge. Bit 0: Timer 2 Low Compare Flag (TC2L). This flag is meaningful only for the dual 8-bit mode of operation (T2MD = 1) and becomes set only when a compare match occurs between T2CL and T2L. Timer 2 Low does not have an associated capture function. 9-17 Maxim Integrated MAXQ Family User’s Guide 9.4.4 Timer 2 Value Register (T2V) Bit # Name 15 14 13 12 11 10 9 8 T2V.15 T2V.14 T2V.13 T2V.12 T2V.11 T2V.10 T2V.9 T2V.8 Reset 0 0 0 0 0 0 0 0 Access rw rw rw rw rw rw rw rw Bit # 7 6 5 4 3 2 1 0 Name T2V.7 T2V.6 T2V.5 T2V.4 T2V.3 T2V.2 T2V.1 T2V.0 Reset 0 0 0 0 0 0 0 0 Access rw rw rw rw rw rw rw rw r = read, w = write Bits 15 to 0: Timer 2 Value (T2V.[15:0]). The T2V register is a 16-bit register that holds the current Timer 2 value. When operating in 16-bit mode (T2MD = 0), the full 16 bits are read/write accessible. If the dual 8-bit mode of operation (T2MD = 1) is selected, the upper byte of T2V is inaccessible. T2V reads while in the dual 8-bit mode will return 00h as the high byte and writes to the upper byte of T2V will be blocked. A separate T2H register is provided to facilitate high byte access for dual 8-bit mode. 9.4.5 Timer 2 Value High Register (T2H) Bit # 7 6 5 4 3 2 1 0 Name T2H.7 T2H.6 T2H.5 T2H.4 T2H.3 T2H.2 T2H.1 T2H.0 Reset 0 0 0 0 0 0 0 0 Access rw rw rw rw rw rw rw rw r = read, w = write Bits 7 to 0: Timer 2 Value High (T2H.[7:0]). This register is used to load and read the most significant 8-bit value in Timer 2. 9.4.6 Timer 2 Reload Register (T2R) Bit # 15 14 13 12 11 10 9 8 Name T2R.15 T2R.14 T2R.13 T2R.12 T2R.11 T2R.10 T2R.9 T2R.8 Reset 0 0 0 0 0 0 0 0 Access rw rw rw rw rw rw rw rw Bit # 7 6 5 4 3 2 1 0 Name T2R.7 T2R.6 T2R.5 T2R.4 T2R.3 T2R.2 T2R.1 T2R.0 Reset 0 0 0 0 0 0 0 0 Access rw rw rw rw rw rw rw rw r = read, w = write Bits 15 to 0: Timer 2 Reload (T2R.[15:0]). This 16-bit register holds the reload value for Timer 2. When operating in 16-bit mode (T2MD = 0), the full 16 bits are read/write accessible. If the dual 8-bit mode of operation is selected, the upper byte of T2R is inaccessible. T2R reads while in the dual 8-bit mode will return 00h as the high byte and writes to the upper byte of T2R will be blocked. A separate T2RH register is provided to facilitate high byte access for the dual 8-bit mode. Maxim Integrated 9-18 MAXQ Family User’s Guide 9.4.7 Timer 2 Reload High Register (T2RH) Bit # 7 6 5 4 3 2 1 0 Name T2RH.7 T2RH.6 T2RH.5 T2RH.4 T2RH.3 T2RH.2 T2RH.1 T2RH.0 Reset 0 0 0 0 0 0 0 0 Access rw rw rw rw rw rw rw rw r = read, w = write Bits 7 to 0: Timer 2 Reload High (T2RH.[7:0]). This register is used to load and read the most significant 8-bit reload value in Timer 2. 9.4.8 Timer 2 Capture/Compare Register (T2C) Bit # 15 14 13 12 11 10 9 8 Name T2C.15 T2C.14 T2C.13 T2C.12 T2C.11 T2C.10 T2C.9 T2C.8 Reset 0 0 0 0 0 0 0 0 Access rw rw rw rw rw rw rw rw Bit # Name 7 6 5 4 3 2 1 0 T2C.7 T2C.6 T2C.5 T2C.4 T2C.3 T2C.2 T2C.1 T2C.0 Reset 0 0 0 0 0 0 0 0 Access rw rw rw rw rw rw rw rw r = read, w = write Bits 15 to 0: Timer 2 Capture/Compare (T2C.[15:0]). This 16-bit register that holds the compare value when operating in compare mode and gets the capture value when operating in capture mode. When operating in 16-bit mode (T2MD = 0), the full 16-bits are read/write accessible. If the dual 8-bit mode of operation is selected, the upper byte of T2C is inaccessible. T2C reads while in the dual 8-bit mode will return 00h as the high byte and writes to the upper byte of T2C will be blocked. A separate T2CH register is provided to facilitate high-byte access. 9.4.9 Timer 2 Capture/Compare High Register (T2CH) Bit # 7 6 5 4 3 2 1 0 Name T2CH.7 T2CH.6 T2CH.5 T2CH.4 T2CH.3 T2CH.2 T2CH.1 T2CH.0 Reset 0 0 0 0 0 0 0 0 Access rw rw rw rw rw rw rw rw r = read, w = write Bits 7 to 0: Timer 2 Capture/Compare High (T2CH.[7:0]). This register is used to load and read the most significant 8-bit capture/ compare value of Timer 2. 9-19 Maxim Integrated MAXQ Family User’s Guide 9.5 Low-Speed Infrared Transmit/Receive Support Using Timer 2 The MAXQ microcontroller can provide hardware to simplify support for low-speed infrared (IR) communication. To take advantage of the embedded hardware, the microcontroller device must be equipped with at least one Timer 2 module; that Timer must have at least two pins implemented and that Timer must be configured to a specific mode of operation. The associated Timer 2 has to be configured into the dual 8-bit mode of operation. More specifically, it should be configured to the 8bit Counter + 8-bit Timer/PWM mode. The T2OE[0] bit should be configured to logic 0 if it is intended that the T2 pin serve in the IRRX capacity. The T2OE[1] control bit should be configured to logic 0 if it is intended to serve in the IRTX capacity, since the internal IR hardware provides a separate control mechanism for enabling the carrier output to the T2PB pin. The 8-bit Timer/PWM is used to create the appropriate subcarrier waveform, while the 8-bit counter is used for modulation of the subcarrier when transmitting and for compare timing when decoding the IR receive waveforms. It is expected that the IR receive waveform will be coming directly from an external IR receiver module or circuitry, which can provide a filtered digital output indicating carrier presence by a logic 0 or logic 1. 9.5.1 Subcarrier Generation Using Timer 2 Low Generation of the subcarrier frequency will always be performed by the 8-bit Timer/PWM (T2L). The period and duty cycle for the subcarrier is determined by the settings of reload and compare registers as described in the Timer 2 documentation. Figure 9-9 diagrams the basic subcarrier generation and its path to the T2PB/IRTX output pin. Notice that the T2POL[1] bit control still applies. 9.5.2 Transmit Baseband Modulator Generation of the baseband modulator waveform is handled by the 8-bit counter (T2H). Normally, the 8-bit counter sources the external T2A pin signal and counts edges as defined by CCF[1:0]. However, when the IR hardware is enabled (IREN = 1), this counter sources the output of the T2L subcarrier waveform. This allows user software to define the number of subcarrier cycles through the T2RH register, which should be counted before T2H overflow. The T2POL[1] bit defines the starting (idle) state for the T2L output and the edge that are counted by the T2H counter. If T2POL[1] = 1, the T2L output idles high and only rising edges are counted by T2H. If T2POL[1] = 0, the T2L output idles low and only falling edges are counted by T2H. A separate register bit, IR bit-bang (IRBB), is used to determine whether the T2L output is gated or output to the pin for the next X subcarrier cycles. The value of X, as alluded to earlier, can be controlled by modifying the reload value. When IRBB = 1 and IRTX = 1, the T2L output is enabled onto the T2PB/IRTX pin. When IRBB = 0 and IRTX = 1, the gated (idle) condition, as defined by T2POL[1], is in effect on the pin. T2L 8-BIT TIMER POx.x DATA (IF PDx.x = 1) T2CLK 00h T2RL T2CL FFh T2PB PIN 1 GATE 0 T2MD = 1 T2POL[1] T2OE[1] = 0 T2H 8-BIT COUNTER 1 IRTX = 1 T2P PIN 0 00h T2RH FFh T2RH IREN FFh T2RH IREN = 1 IRBB (SOFTWARE CONTROL) Figure 9-9. IR Transmit Subcarrier Generation and Baseband Modulator Control Maxim Integrated 9-20 MAXQ Family User’s Guide 1 1 0 0 1 DESIRED OUTPUT IRBB BIT (SOFTWARE CONTROLLED) Figure 9-10. Biphase Encoding Example (T2RH Remains Fixed) 9.5.2.1 IR Encoding (Transmit) Example For any encoding scheme, the proper T2L subcarrier generation settings should be established along with the desired T2POL[1] bit state. The T2POL[1] state takes effect once IREN = 1 and IRTX = 1. For biphase encoding, the T2H reload value (T2RH) would be configured to count X subcarrier pulses in one half a bit time. The IRTX enable bit should be configured to logic 1 to block the functionality of the T2 pin used in receive mode. The IRBB bit would initially be configured to 0 to make the gated condition the starting state on the T2PB pin. At this point, the timer run bits for both the 8-bit timer/counters, which should be set. Once the timers are running, the software could then modify the IRBB control bit as needed for each half-bit time. On each T2H overflow, the same T2RH value is used as the reload and IRBB would be used to control whether the T2L subcarrier output is enabled to the output pin or gated. This process would continue until the desired number of bits are transmitted, at which point the user software would be responsible for placing the IR hardware back into receive mode or turning it off entirely. For bit length encoding, the T2RH reload value could be modified selectively dependent upon whether a 0 or 1 subcarrier duration needed to be transmitted. In this case, the IRBB control function would remain the same and would typically be toggled on every overflow. Figure 9-11 illustrates an example of bit-length encoding. 0 1 0 1 DESIRED OUTPUT IRBB BIT (SOFTWARE CONTROLLED) T2RH (SOFTWARE MODIFIED) SHORT LONG SHORT LONG Figure 9-11. Bit-Length Encoding Example (T2RH Modified) 9-21 Maxim Integrated MAXQ Family User’s Guide 9.5.2.2 Receive Pin Sampling When IREN = 1 and IRTX = 0, the IR hardware supports the T2H register counting of internal T2L edges just as described for the IR Transmit mode, but the function of the IRBB bit changes. The IRBB bit is used to store the state of the T2P input pin when a compare match occurs between the T2H and T2CH registers. Additionally, the CCF[1:0] bits define which edge(s) of the T2 pin should trigger reloads of the T2H counter to allow some form of synchronization when slightly different transmitter/receiver carrier frequencies and bit timing exist. The user software would be responsible for reading the IRBB sampled pin states and recreating, based upon the IR encoding format, the actual received data. The IRBB bit can be overwritten, thus the user software is responsible for reading the IRBB bit between compare matches to avoid loss of captured pin data. T2L 8-BIT TIMER PORT LATCH (IF PDx.x = 1) T2CLK 00h T2RL T2CL FFh T2PB PIN 1 GATE 0 T2MD = 1 T2POL[1] T2OE[1] = 0 T2H 8-BIT COUNTER T2P PIN 1 T2P PIN 0 T2CH IREN = 1 IRTX = 0 IRBB SAMPLE T2P ON T2CH MATCH T2CH IREN 00h T2RH FFh T2RH EDGE RELOAD FFh T2RH CCF[1:0] Figure 9-12. IR Receive Pin Sampling 9.5.2.3 IR Decoding (Receive) Example One possible decoding configuration is shown in Figure 9-13 with the T2CH register configured to produce a match after approximately 1/4 of the subcarrier cycles present during a fixed bit time. Each of the two IRBB samples could be examined to determine one received bit. Bit length decoding could use a similar strategy, possibly configuring the T2CH match register to 3/4 the number of subcarrier cycles present in a 0 bit time. The collected IRBB pattern could simply be inverted to produce the actual input stream. T2P INPUT RELOAD (FALLING) CCF[1:0] = 10b IRBB (T2CH MATCH) 0 1 0 0 1 0 1 1 0 1 Figure 9-13. Biphase Decoding Example Maxim Integrated 9-22 MAXQ Family User’s Guide 0 1 0 1 T2P INPUT RELOAD (FALLING) CCF[1:0] = 10b IRBB BIT (T2CH MATCH) Figure 9-14. Bit Length Decoding Example 9.6 IR Peripheral Register 9.6.1 Infrared Control Register (IRCN) Bit # 7 6 5 4 3 2 1 0 Name — — — — — IREN IRTX IRBB Reset 0 0 0 0 0 0 0 0 Access r r r r r rw rw rw r = read, w = write Bits 7 to 3: Reserved Bit 2: Infrared Subcarrier Enable (IREN). This register bit enables a special mode of operation for Timer 2. To use the IR hardware (i.e., before setting IREN = 1), Timer 2 should be configured properly to the dual 8-bit timer/8-bit counter mode. Setting IREN = 1 enables the IRRX mode if IRTX = 0, and enables the IRTX mode if IRTX = 1. In both cases, the T2L 8-bit timer output is fed as input to the T2H 8-bit counter. Bit 1: Infrared Transmit Enable (IRTX). This register bit controls the contextual usage of the IRBB bit. When IRTX = 0, the IRBB bit captures the T2P(IRRX) pin state on compare matches. When IRTX = 1, the IRBB enables the T2L subcarrier output to the T2PB output pin on the next T2H counter overflow. This bit has no effect when IREN = 0. Bit 0: Infrared Bit Bang Bit (IRBB). This register bit serves different purposes depending upon whether the IR Transmit Enable is configured as a 1 or 0. When IRTX = 1, the IR transmit mode is in effect and setting the IRBB bit to logic 1 enables the T2POL[1] modified T2L output starting at the next T2H counter overflow (allowing the subcarrier to be output to the pin). The user software is responsible for manually toggling IRBB and controlling the T2RH reload to achieve the desired protocol. For receive mode, IRTX = 0, the IRBB bit contains the latched state of the IRRX pin each time that a compare match (with T2CH) occurs. The user software is responsible for unloading IRBB and translating the recorded bit stream into the proper IR serial receive data. 9-23 Maxim Integrated MAXQ Family User’s Guide SECTION 10: SERIAL I/O MODULE This section contains the following information: 10.1 UART Modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10-2 10.1.1 UART Mode 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10-2 10.1.2 UART Mode 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10-4 10.1.3 UART Mode 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10-4 10.1.4 UART Mode 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10-7 10.2 Baud-Rate Generation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10-8 10.2.1 Mode 0 Baud Rate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10-8 10.2.2 Mode 2 Baud Rate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10-8 10.2.3 Mode 1 or 3 Baud Rate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10-8 10.2.4 Baud-Clock Generator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10-8 10.3 Framing Error Detection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10-9 10.4 UART Peripheral Registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10-10 10.4.1 Serial Control Register (SCON) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10-10 10.4.2 Serial Port Mode Register (SMD) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10-11 10.4.3 Serial Port Data Buffer Register (SBUF) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10-11 10.4.4 Serial Port Phase Register (PR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10-11 LIST OF FIGURES Figure 10-1. UART Mode 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10-3 Figure 10-2. UART Mode 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10-5 Figure 10-3. UART Mode 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10-6 Figure 10-4. UART Mode 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10-7 Figure 10-5. Baud-Clock Generator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10-9 LIST OF TABLES Table 10-1. UART Mode Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10-2 Table 10-2. UART Baud Clock Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10-8 Table 10-3. Example Baud-Clock Generator Settings (SMOD = 1) . . . . . . . . . . . . . . . . . . . . . . . .10-9 10-1 Maxim Integrated MAXQ Family User’s Guide SECTION 10: SERIAL I/O MODULE The Serial I/O Module provides the MAXQ access to a universal asynchronous receiver/transmitter (UART) for serial communication with framing error detection. 10.1 UART Modes The UART supports four basic modes of operation, and is capable of both synchronous and asynchronous modes, with different protocols and baud rates. In the synchronous mode, the microcontroller supplies the clock and communication takes place in a halfduplex manner, while the asynchronous mode supports full-duplex operation. Table 10-1 shows the four serial operating modes. The UART has a control register (SCON) and a transmit/receive buffer register (SBUF). Transmit or receive buffer access depends upon whether SBUF is used contextually as a source or destination. When SBUF is used as a source (read operation), the receive buffer will be accessed. When SBUF is used as a destination (write operation), the transmit buffer is accessed. The UART receiver incorporates a holding buffer so that it may receive an incoming word before software has read the previous one. Please note that there is no single register bit that explicitly enables the UART for transmission. This means that the port pin(s) associated with UART transmission (i.e., TXD, and RXD for mode 0) will be controlled by the PDx and POx port control register bits when the UART is not actively transmitting a character. Table 10-1. UART Mode Summary MODE SYNCHRONOUS/ ASYNCHRONOUS BAUD CLOCK* DATA BITS START/STOP 9TH BIT FUNCTION 0 1 2 3 Synchronous Asynchronous Asynchronous Asynchronous 4 or 12 clocks Baud Clock Generator 32 or 64 clocks Baud Clock Generator 8 8 9 9 None 1 start, 1 stop 1 start, 1 stop 1 start, 1 stop None None 0, 1, parity 0, 1, parity *Use of any system clock-divide modes or power management mode affects the baud clock. 10.1.1 UART Mode 0 This mode is used to communicate in synchronous, half-duplex format with devices that accept the MAXQ microcontroller as a master. Figure 10-1 shows a functional block diagram and basic timing of this mode. As can be seen, there is one bidirectional data line (RXD) and one shift clock line (TXD) used for communication. Mode 0 requires that the MAXQ microcontroller be the master since it generates the serial shift clock for data transfers that occur in either direction. The RXD signal is used for both transmission and reception. Data bits enter and exit LSb first. TXD provides the shift clock. The baud rate is equal to the shift clock frequency. When not using Power Management Mode, the baud rate in Mode 0 is equivalent to the system clock divided by either 12 or 4, as selected by SM2 bit (SCON.5) for the UART. The UART begins transmitting when any instruction writes to SBUF. The internal shift register then begins to shift data out. The clock is activated and transfers data until the 8-bit value is complete. Data is presented just prior to the falling edge of the shift clock (TXD) so that an external device can latch the data using the rising edge. The UART begins to receive data when the REN bit in the SCON register (SCON.4) is set to logic 1 and the RI bit (SCON.0) is set to logic 0. This condition tells the UART that there is data to be shifted in. The shift clock (TXD) activates, and the UART latches incoming data on the rising edge. The external device should therefore present data on the falling edge. This process continues until 8 bits have been received. The RI bit is automatically set to logic 1 immediately following the last rising edge of the shift clock on TXD. This causes reception to stop until the SBUF has been read and the RI bit cleared. When RI is cleared, another byte can be shifted in. Maxim Integrated 10-2 MAXQ Family User’s Guide SBUF SYSTEM CLOCK DIVIDE BY 12 0 RXD PIN LATCH S0 D7 D6 D5 D4 D3 D2 D1 D0 LOAD CLOCK OUTPUT SHIFT REGISTER DIVIDE BY 4 1 DATA BUS LDSBUF RDSBUF SHIFT READ SERIAL LOAD SERIAL BUFFER T1 FLAG = SCON.1 RECEIVE DATA BUFFER WR RECEIVE BUFFER DATA CLOCK D7 D6 D5 D4 D3 D2 D1 D0 INTS BAUD CLOCK RD SERIAL I/O CONTROL CLOCK R1 FLAG = SCON.0 SI RECEIVE SHIFT REGISTER SERIAL INTERRUPT TXD PIN TRANSMIT TIMING LDSBUF WRITE TO SBSUF SHIFT RXD D0 D1 D2 D3 D4 D5 D6 D7 (DATA OUT) TXD (DATA CLOCK) TI RECEIVE TIMING RDSBUF WRITE TO SCON (CLEAR RI) SHIFT RXD (DATA IN) D0 D1 D2 D3 D4 D5 D6 D7 TXD (DATA CLOCK) RI Figure 10-1. UART Mode 0 10-3 Maxim Integrated MAXQ Family User’s Guide 10.1.2 UART Mode 1 This mode provides asynchronous, full-duplex communication. A total of 10 bits is transmitted, consisting of a start bit (logic 0), 8 data bits, and 1 stop bit (logic 1), as illustrated in Figure 10-2. The data is transferred LSb first. The baud rate is programmable through the baud clock generator. Following a write to SBUF, the UART begins transmission five cycles after the first baud clock from the baud clock generator. Transmission takes place on the TXD pin. It begins with the start bit being placed on the pin. Data is then shifted out onto the pin, LSb first. The stop bit follows. The TI bit is set by hardware after the stop bit is placed on the pin. All bits are shifted out at the rate determined by the baud clock generator. Once the baud clock generator is active, reception can begin at any time. The REN bit (SCON.4) must be set to logic 1 to allow reception. The detection of a falling edge on the RXD pin is interpreted as the beginning of a start bit, and will begin the reception process. Data is shifted in at the selected baud rate. At the middle of the stop bit time, certain conditions must be met to load SBUF with the received data: RI must = 0, and either If SM2 = 0, the state of the stop bit does not matter or If SM2 = 1, the state of the stop bit must = 1. If these conditions are true, then SBUF (address) is loaded with the received byte, the RB8 bit (SCON.2) is loaded with the stop bit, and the RI bit (SCON.0) is set. If these conditions are false, then the received data will be lost (SBUF and RB8 not loaded) and RI will not be set. Regardless of the receive word status, after the middle of the stop bit time, the receiver goes back to looking for a 1-to-0 transition on the RXD pin. Each data bit received is sampled on the 7th, 8th and 9th clock used by the divide-by-16 counter. Using majority voting, two equal samples out of the three determine the logic level for each received bit. If the start bit was determined to be invalid (= 1), then the receiver goes back to looking for a 1-to-0 transition on the RXD pin to start the reception of data. 10.1.3 UART Mode 2 This mode uses a total of 11 bits in asynchronous, full-duplex communication as illustrated in Figure 10-3. The 11 bits consist of one start bit (a logic 0), 8 data bits, a programmable 9th bit, and one stop bit (a logic 1). Like Mode 1, the transmissions occur on the TXD signal pin and receptions on RXD. For transmission purposes, the 9th bit can be stuffed as a logic 0 or 1. The 9th bit is transferred from the TB8 bit position in the SCON register (SCON.3) following a write to SBUF to initiate a transmission. Transmission begins five clock cycles after the first rollover of the divide-by-16 counter following a software write to SBUF. It begins with the start bit being placed on the TXD pin. The data is then shifted out onto the pin, LSb first, followed by the 9th bit, and finally the stop bit. The TI bit (SCON.1) is set when the stop bit is placed on the pin. Once the baud-rate generator is active and the REN bit (SCON.4) has been set to logic 1, reception can begin at any time. Reception begins when a falling edge is detected as part of the incoming start bit on the RXD pin. The RXD pin is then sampled according to the baud-rate speed. The 9th bit is placed in the RB8 bit location in SCON (SCON.2). At the middle of the 9th bit time, certain conditions must be met to load SBUF with the received data. RI must = 0, and either If SM2 = 0, the state of the 9th bit does not matter or If SM2 = 1, the state of the 9th bit must = 1. If these conditions are true, then SBUF will be loaded with the received byte, RB8 will be loaded with the 9th bit, and RI will be set. If these conditions are false, then the received data will be lost (SBUF and RB8 not loaded) and RI will not be set. Regardless of the receive word status, after the middle of the stop bit time, the receiver goes back to looking for a 1-to-0 transition on RXD. Data is sampled in a similar fashion to Mode 1 with the majority voting on three consecutive samples. Mode 2 uses the sample divideby-16 counter with either the clock divided by 2 or 4, thus resulting in a baud clock of either system clock/32 or system clock/64. Maxim Integrated 10-4 MAXQ Family User’s Guide SBUF 1 START D7 D6 D5 D4 D3 D2 D1 D0 SYSTEM CLOCK STOP LOAD CLOCK TRANSMIT SHIFT REGISTER TXD PIN LATCH S0 0 DIVIDE BY 4 0 1 DATA BUS SMOD LDSBUF RDSBUF BAUD CLOCK GENERATOR SHIFT LOAD SERIAL BUFFER BAUD CLOCK DIVIDE BY 16 SBUF READ SERIAL BUFFER SERIAL I/O CONTROL RD RECEIVE DATA BUFFER WR LOAD RESET START SI D7 D6 D5 D4 D3 D2 D1 D0 R1 FLAG = SCON.0 START T1 FLAG = SCON.1 CLOCK INTS RB8 = SCON.2 RECEIVE SHIFT REGISTER SERIAL INTERRUPT DIVIDE BY 16 BIT DETECTION RXD PIN TRANSMIT TIMING LDSBUF SHIFT TXD START D0 D1 D2 D3 D4 D5 D6 D7 STOP TI RECEIVE TIMING RXD START D0 D1 D2 D3 D4 D5 D6 D7 STOP BIT DETECTOR SAMPLING SHIFT RI Figure 10-2. UART Mode 1 10-5 Maxim Integrated MAXQ Family User’s Guide SBUF START D7 D6 D5 D4 D3 D2 D1 D0 1 DIVIDE BY 2 0 D8 SYSTEM CLOCK/2 STOP LOAD CLOCK TRANSMIT SHIFT REGISTER LATCH S0 TXD PIN 0 TB8 = SCON.3 1 DATA BUS SMOD LDSBUF RDSBUF SHIFT LOAD SERIAL BUFFER SHIFT CLOCK DIVIDE BY 16 SERIAL I/O CONTROL SBUF READ SERIAL BUFFER RD RECEIVE DATA BUFFER WR LOAD RESET D7 D6 D5 D4 D3 D2 D1 D0 START SI D8 R1 FLAG = SCON.0 STOP T1 FLAG = SCON.1 CLOCK INTS RB8 = SCON.2 RECEIVE SHIFT REGISTER SERIAL INTERRUPT DIVIDE BY 16 BIT DETECTION RXD PIN TRANSMIT TIMING LDSBUF SHIFT TXD START D0 D1 D2 D3 D4 D5 D6 D7 TB8 STOP D0 D1 D2 D3 D4 D5 D6 D7 RB8 STOP TI RECEIVE TIMING RXD START BIT DETECTOR SAMPLING SHIFT RI Figure 10-3. UART Mode 2 Maxim Integrated 10-6 MAXQ Family User’s Guide 10.1.4 UART Mode 3 This mode has the same operation as Mode 2, except for the baud-rate source. As shown in Figure 10-4, Mode 3 generates baud rates through the baud clock generator. The bit shifting and protocol are the same. SBUF 1 DIVIDE BY 4 0 START D8 D7 D6 D5 D4 D3 D2 D1 D0 SYSTEM CLOCK STOP LOAD CLOCK TRANSMIT SHIFT REGISTER LATCH S0 TXD PIN 0 TB8 = SCON.3 1 DATA BUS SMOD LDSBUF RDSBUF BAUD CLOCK GENERATOR SHIFT LOAD SERIAL BUFFER DIVIDE BY 16 BAUD CLOCK SERIAL I/O CONTROL SBUF READ SERIAL BUFFER RD RECEIVE DATA BUFFER WR LOAD RESET D7 D6 D5 D4 D3 D2 D1 D0 START SI D8 R1 FLAG = SCON.0 STOP T1 FLAG = SCON.1 CLOCK INTS RB8 = SCON.3 RECEIVE SHIFT REGISTER SERIAL INTERRUPT DIVIDE BY 16 BIT DETECTION RXD PIN TRANSMIT TIMING LDSBUF SHIFT TXD START D0 D1 D2 D3 D4 D5 D6 D7 TB8 STOP START D0 D1 D2 D3 D4 D5 D6 D7 RB8 STOP TI RECEIVE TIMING RXD BIT DETECTOR SAMPLING SHIFT RI Figure 10-4. UART Mode 3 10-7 Maxim Integrated MAXQ Family User’s Guide 10.2 Baud-Rate Generation Each mode of operation has a baud-rate generator associated with it. The baud-rate generation techniques are affected by certain user options such as the Power Management Mode Enable (PMME), Serial Mode 2 (SM2) select bit, and Baud-Rate Doubler (SMOD) bit. Table 10-2 summarizes the effects of the various user options on the UART baud clock. Table 10-2. UART Baud Clock Summary BAUD CLOCK FREQUENCY SYSTEM CLOCK MODE Divide by 1 (default) Divide by 2 Divide by 4 Divide by 8 Power Management Mode (Divide by 256) †The MODE 0 † MODE 2 MODE 1, 3 SM2 = 0 CLK /12 CLK /24 CLK /48 CLK /96 SM2 = 1 CLK /4 CLK /8 CLK /16 CLK /32 SMOD = 0 CLK /64 CLK /128 CLK /256 CLK /512 SMOD = 1 CLK /32 CLK /64 CLK /128 CLK /256 SMOD = 0 BAUD /64 BAUD /64 BAUD /64 BAUD /64 SMOD = 1 BAUD /16 BAUD /16 BAUD /16 BAUD /16 CLK /3072 CLK /1024 CLK /16384 CLK /8192 BAUD /64 BAUD /16 BAUD frequency is determined by the baud-clock generator. 10.2.1 Mode 0 Baud Rate Baud rates for mode 0 are driven directly from the system clock source divided by either 12 or 4, with the default case being divide by 12. The user can select the shift clock frequency using the SM2 bit in the SCON register. When SM2 is set to logic 0, the baud rate is fixed at a divide by 12 of the system clock. When SM2 is set to logic 1, the baud rate is fixed at a divide by 4 of the system clock. Mode 0 Baud Rate = System Clock Frequency x 3SM2 / 12 10.2.2 Mode 2 Baud Rate In this asynchronous mode, baud rates are also generated from the system clock source. The user can effectively double the UART baud clock frequency by setting the SMOD bit to a logic 1. The SMOD bit is set to a logic 0 on all resets, thus making ‘divide by 64’ the default setting. The baud rate is given by the following formula: Mode 2 Baud Rate = System Clock Frequency x 2SMOD / 64 10.2.3 Mode 1 or 3 Baud Rate These asynchronous modes are commonly used for communication with PCs, modems, and other similar interfaces. The baud rates are programmable using the baud clock generator in the UART module. The baud clock generator is basically a phase accumulator that generates a baud clock as the result of phase overflow into the most significant bit of the phase shifter. This baud-clock generator is driven by the system clock or system clock divided-by-4 source (depending upon the state of the SMOD bit). The baud-clockgenerator output is always divided by 16 to generate the exact baud rate. 10.2.4 Baud-Clock Generator The baud-clock generator is basically a phase accumulator that produces a baud clock as the result of phase overflow from the most significant bit of the phase shift circuitry. A 16-bit Phase Register (PR) is programmable by the user to select a suitable phase value for its baud clock. The phase value dictates the phase period of the accumulation process. The phase value is added to the current phase accumulator value on each system clock (SMOD = 1) or every 4th system clock (SMOD = 0). The baud clock is the result of addition overflow out of the most significant bit of the phase accumulator (bit 16). The baud-clock-generator output is always divided by 16 to produce the exact baud rate. The following two formulas can be used to calculate the output of the baud-clock generator and the resultant Mode 1, 3 baud rates. Additionally, Table 10-3 gives example phase register (PR) settings needed to produce some more common baud rates at certain system clock frequencies (assuming SMOD = 1). Baud Clock Generator Output (BAUD) = System Clock Frequency x PR / 217 Baud Rate for Modes 1 and 3 = BAUD x 2(SMOD x 2) / 26 Maxim Integrated 10-8 MAXQ Family User’s Guide 15 0 0 PR ADDITION BAUD CLOCK OUTPUT = CARRY OUT FROM PHASE ACCUMULATOR [16] 16 0 PHASE ACCUMULATOR Figure 10-5. Baud-Clock Generator Table 10-3. Example Baud-Clock Generator Settings (SMOD = 1) SYSTEM CLOCK FREQUENCY (MHz) BAUD RATE (PR SETTING) SYSTEM CLOCK FREQUENCY (MHZ) BAUD RATE (PR SETTING) 10 115,200 (5E5F); 57,600 (2F30); 19,200 (0FBB); 9600 (07DD); 2400 (01FF) 3.579545 57,600 (83D2); 19,200 (2BF1); 9600 (15F8); 2400 (057E) 8 115,200 (75F7); 57,600 (3AFB); 19,200 (13A9); 9600 (09D5); 2400 (0275) 2.4576 57,600 (C000); 19,200 (4000); 9600 (2000); 2400 (0800) 3.6864 115,200 (FFFF); 57,600 (8000); 19,200 (2AAB); 9600 (1555); 2400 (0555) 1 19,200 (9D49); 9600 (4EA5); 2400 (13A9) 10.3 Framing Error Detection A framing error occurs when a valid stop bit is not detected. This results in the possible improper reception of the serial word. The UART can detect a framing error and notify the software. Typical causes of framing errors are noise and contention. The Framing Error condition is reported in the SCON register for the UART. The Framing Error bit, FE, is located in SCON.7. Note that this bit normally serves as SM0 and is described as SM0/FE_0 in the register description. Framing Error information is made accessible by the FEDE (Framing Error Detection Enable) bit located at SMD.0. When FEDE is set to logic 1, the framing error information is shown in SM0/FE (SCON.7). When FEDE is set to logic 0, the SM0 function is accessible. The information for bits SM0 and FE is actually stored in different registers. Changing FEDE only modifies which register is accessed, not the contents of either. The FE bit is set to 1 when a framing error occurs. It must be cleared by software. Note that the FEDE state must be 1 while reading or writing the FE bit. Also note that receiving a properly framed serial word does not clear the FE bit. This must be done in software. 10-9 Maxim Integrated MAXQ Family User’s Guide 10.4 UART Peripheral Registers 10.4.1 Serial Control Register (SCON) Bit # 7 6 5 4 3 2 1 0 Name FE/SM0 SM1 SM2 REN TB8 RB8 TI RI Reset 0 0 0 0 0 0 0 0 Access rw rw rw rw rw rw rw rw r = read, w = write Bit 7: Framing Error Flag (FE). (FEDE = 1) This bit is set upon detection of an invalid stop bit. It must be cleared by software. Modification of this bit when FEDE is set has no effect on the serial mode setting. Bit 7: Serial Port 0 Mode Bit 0 (SM0). (FEDE = 0) This bit is used in conjunction with the SM2 and SM1 bits to define the serial mode. MODE SM[2:0] FUNCTION LENGTH PERIOD 0 0 0 0 Synchronous 8 Bits 12 System Clock 0 1 0 0 Synchronous 8 Bits 4 System Clock 1 x 1 0 Asynchronous 10 Bits 64/16 Baud Clock (SMOD = 0/1) 2 0 0 1 Asynchronous 11 Bits 64/32 System Clock (SMOD = 0/1) 2 1 0 1 Asynchronous (MP) 11 Bits 64/32 System Clock (SMOD = 0/1) 3 0 1 1 Asynchronous 11 Bits 64/16 Baud Clock (SMOD = 0/1) 3 1 1 1 Asynchronous (MP) 11 Bits 64/16 Baud Clock (SMOD = 0/1) Bit 6: Serial Port 0 Mode Bit 1 (SM1). See the above table for more information. Bit 5: Serial Port 0 Mode Bit 2 (SM2). Setting this bit in mode 1 ignores reception if an invalid stop bit is detected. Setting this bit in mode 2 or 3 enables multiprocessor communications, and prevents the RI bit from being set and the interrupt from being asserted if the 9th bit received is 0. See the above table for more information. This bit is also used to support mode 0 for clock selection: 0 = serial clock is system clock divided by 12 1 = serial clock is system clock divided by 4 Bit 4: Receive Enable (REN) 0 = serial port receiver disabled 1 = serial port receiver enabled for modes 1, 2, and 3; initiate synchronous reception for mode 0 (if RI = 0) Bit 3: 9th Transmission Bit State (TB8). This bit defines the state of the 9th transmission bit in serial port modes 2 and 3. Bit 2: 9th Received Bit State (RB8). This bit identifies the state of the 9th bit of received data in serial port modes 2 and 3. When SM2 is 0, it is the state of the stop bit in mode 1. This bit has no meaning in mode 0. Bit 1: Transmit Interrupt Flag (TI). This bit indicates that the data in the serial port data buffer has been completely shifted out. It is set at the end of the last data bit for all modes of operation and must be cleared by software once set. Bit 0: Receive Interrupt Flag (RI). This bit indicates that a data byte has been received in the serial port buffer. The bit is set at the end of the 8th bit for mode 0, after the last sample of the incoming stop bit for mode 1 subject to the value of the SM2 bit, or after the last sample of RB8 for modes 2 and 3. This bit must be cleared by software once set. Maxim Integrated 10-10 MAXQ Family User’s Guide 10.4.2 Serial Port Mode Register (SMD) Bit # 7 6 5 4 3 2 1 0 Name — — — — — ESI SMOD FEDE Reset 0 0 0 0 0 0 0 0 Access r r r r r rw rw rw r = read, w = write Bits 7 to 3: Reserved Bit 2: Framing Error Detection Enable (FEDE). This bit selects the function of SM0 (SCON.7): 0 = SCON.7 functions as SM0 for serial port mode selection 1 = SCON.7 is converted to the Framing Error (FE) flag Bit 1: Serial Port Baud Rate Select (SMOD). The SMOD selects the final baud rate for the asynchronous mode: 1 = 16 times the baud clock for mode 1 and 3, 32 times the system clock for mode 2 0 = 64 times the baud clock for mode 1 and 3, 64 times the system clock for mode 2 Bit 0: Enable Serial Port Interrupt (ESI). Setting this bit to 1 enables interrupt requests generated by the RI or TI flags in SCON. Clearing this bit to 0 disables the serial port interrupt. 10.4.3 Serial Port Data Buffer Register (SBUF) Bit # 7 6 5 4 3 2 1 0 Name SBUF.7 SBUF.6 SBUF.5 SBUF.4 SBUF.3 SBUF.2 SBUF.1 SBUF.0 Reset 0 0 0 0 0 0 0 0 Access rw rw rw rw rw rw rw rw r = read, w = write Bits 7 to 0: Serial Port Data Buffer (SBUF.[7:0]). Data for serial port is read from or written to this location. The serial transmit and receive buffers are separate but both are addressed at this location. 10.4.4 Serial Port Phase Register (PR) Bit # Name 15 14 13 12 11 10 9 8 PR.15 PR.14 PR.13 PR.12 PR.11 PR.10 PR.9 PR.8 Reset 0 0 0 0 0 0 0 0 Access rw rw rw rw rw rw rw rw Bit # Name 7 6 5 4 3 2 1 0 PR.7 PR.6 PR.5 PR.4 PR.3 PR.2 PR.1 PR.0 Reset 0 0 0 0 0 0 0 0 Access rw rw rw rw rw rw rw rw r = read, w = write Bits 15 to 0: Serial Port Phase (PR.[15:0]). This register is used to load and read the value in the phase register. 10-11 Maxim Integrated MAXQ Family User’s Guide SECTION 11: SERIAL PERIPHERAL INTERFACE (SPI) MODULE This section contains the following information: 11.1 SPI Transfer Formats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11-3 11.2 SPI Character Lengths . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11-3 11.3 SPI Transfer Baud Rates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11-4 11.4 SPI System Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11-4 11.4.1 Mode Fault . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11-4 11.4.2 Receive Overrun . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11-4 11.4.3 Write Collision While Busy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11-5 11.5 SPI Master Operation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11-5 11.6 SPI Slave Operation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11-5 11.7 SPI Peripheral Registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11-6 11.7.1 SPI Control Register (SPICN) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11-6 11.7.2 SPI Configuration Register (SPICF) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11-7 11.7.3 SPI Clock Register (SPICK) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11-7 11.7.4 SPI Data Buffer Register (SPIB) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11-8 LIST OF FIGURES Figure 11-1. SPI Block Diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11-2 Figure 11-2. SPI Transfer Formats (CKPOL, CKPHA Control) . . . . . . . . . . . . . . . . . . . . . . . . . . . .11-3 11-1 Maxim Integrated MAXQ Family User’s Guide SECTION 11: SERIAL PERIPHERAL INTERFACE (SPI) MODULE The serial peripheral interface (SPI) module of the MAXQ microcontroller provides an independent serial communication channel to communicate synchronously with peripheral devices in a multiple master or multiple slave system. The interface allows access to a four-wire full-duplex serial bus that can be operated in either master mode or slave mode. The SPI functionality must be enabled by setting the SPI Enable (SPIEN) bit of the SPI Control register to logic 1. The maximum data rate of the SPI interface is 1/2 the system clock frequency for master mode operation and 1/8 the system clock frequency for slave mode operation. The four external interface signals used by the SPI module are MISO, MOSI, SPICK, and SSEL. The function of each of these signals is as follows: EXTERNAL PIN SIGNAL MISO: Master In, Slave Out MOSI: Master Out, Slave In SPICK: SPI Clock MASTER MODE USE Input to serial shift register Ouput from serial shift register Serial shift clock sourced to slave device(s) SLAVE MODE USE Output from serial shift register when selected Input to serial shift register when selected Serial shift clock from an external master SSEL: Slave Select (Optional) Mode fault-detection input if enabled (MODFE = 1) Slave select input The block diagram in Figure 11-1 shows the SPI external interface signals, control unit, read buffer, and single shift register common to the transmit and receive data path. Each time that an SPI transfer completes, the received character is transferred to the read buffer, giving double buffering on the receive side. The CPU has read/write access to the control unit and the SPI data buffer (SPIB). Writes to SPIB are always directed to the shift register while reads always come from the receive holding buffer. MSTM = SPICN.1 1 MISO 0 SPIB WRITES 15/7 SHIFT REGISTER 0 MOSI 1 0 SPIB READS SPICK 1 0 15/7 RECEIVE DATA BUFFER 0 SSEL SPIEN = SPICN.0 SPI STATUS & CONTROL UNIT Figure 11-1. SPI Block Diagram Maxim Integrated 11-2 MAXQ Family User’s Guide 11.1 SPI Transfer Formats During an SPI transfer, data is simultaneously transmitted and received over two serial data lines with respect to a single serial shift clock. The polarity and phase of the serial shift clock are the primary components in defining the SPI data transfer format. The polarity of the serial clock corresponds to the idle logic state of the clock line and therefore also defines which clock edge is the active edge. To define a serial shift clock signal that idles in a logic low state (active clock edge = rising), the Clock Polarity Select (CKPOL; SPICF.0) bit should be configured to a 0, while setting CKPOL = 1 will cause the shift clock to idle in a logic high state (active clock edge = falling). The phase of the serial clock selects which edge is used to sample the serial shift data. The Clock Phase Select (CKPHA; SPICF.1) bit controls whether the active or inactive clock edge is used to latch the data. When CKPHA is set to logic 1, data is sampled on the inactive clock edge (clock returning to the idle state). When CKPHA is set to logic 0, data is sampled on the active clock edge (clock transition to the active state). Together, the CKPOL and CKPHA bits allow the four possible SPI data transfer formats as illustrated in Figure 11-2. Anytime that the active clock edge is used for sampling (CKPHA = 0), the transfer cycle must be started with assertion of the SSEL signal. This requirement necessitates that the SSEL signal be deasserted and reasserted between successive transfers. Conversely, when the inactive edge is used for sampling (CKPHA = 1), the SSEL signal may remain low through successive transfers allowing the active clock edge to signal the start of a new transfer. TRANSFER CYCLE (CHARACTER LENGTH DEFINED BY CHR) SPICK CKPOL = 0 CKPHA = 0 CKPOL = 0 CKPHA = 1 CKPOL = 1 CKPHA = 0 CKPOL = 1 CKPHA = 1 MOSI/MISO MSBIT LSBIT SSEL SAMPLING POINTS Figure 11-2. SPI Transfer Formats (CKPOL, CKPHA Control) 11.2 SPI Character Lengths To flexibly accommodate different SPI transfer data lengths, the character length for any transfer is user configurable through the Character Length Bit (CHR) in the SPI Configuration Register. The CHR bit allows selection of either 8-bit or 16-bit transfers. When loading 8-bit characters into the SPIB data buffer, the byte for transmission should be right-justified or placed in the least significant byte of the word. When a byte transfer completes, the received byte is right-justified and can be read from the least significant byte of the SPIB word. The MSB of the SPIB data buffer is not significant when transmitting and receiving 8-bit characters. 11-3 Maxim Integrated MAXQ Family User’s Guide 11.3 SPI Transfer Baud Rates When operating as a slave device, an external master drives the SPI serial clock. For proper slave operation, the serial clock provided by the external master should not exceed the system clock frequency divided by 8. When operating in the master mode, the SPI serial clock is sourced to the external slave device(s). The serial clock baud rate is determined by the clock-divide ratio specified in the SPI Clock Divider Ratio (SPICK) register. The SPI module supports 256 different clockdivide ratio selections for serial clock generation. The SPICK clock rate is determined by the following formula: SPI Baud Rate = System Clock Frequency / (2 x Clock Divider Ratio) where Clock Divider Ratio = (SPICK.7:0) + 1 Since the SPI baud rate is a function of the System Clock Frequency, using any of the system clock divide modes (including Power Management Mode) alters the baud rate. Attempts to invoke the Power Management Mode while an SPI transfer in is progress (STBY = 1) are ignored. Note, however, that once in Power Management Mode (PMME = 1), writes to SPIB in master mode and assertion of the SSEL pin in slave mode both qualify as switchback sources if enabled (SWB = 1). The SPI module clocks are halted if the device is placed into Stop mode. 11.4 SPI System Errors The SPI module can detect three types of SPI system errors. A mode fault error arises in a multiple master system when more than one SPI device simultaneously tries to be a master. A receive overrun error occurs when an SPI transfer completes before the previous character has been read from the receive-holding buffer. The third kind of error, write collision, indicates that an attempted write to SPIB was detected while a transfer was in progress (STBY = 1). 11.4.1 Mode Fault When a SPI device is configured as a master and its Mode Fault Enable bit (SPICN.2: MODFE) is also set, a mode fault error occurs if SSEL input signal is driven low by an external device. This error is typically caused when a second SPI device attempts to function as a master in the system. In the condition where more than one device is configured as master concurrently, there is possibility of bus contention that can cause permanent damage to push-pull CMOS drivers. The mode fault error detection is to provide protection from such damage by disabling the bus drivers. When a mode fault is detected, the following actions are taken immediately: 1) The MSTM bit is forced to logic 0 to reconfigure the SPI device as a slave. 2) The SPIEN bit is forced to logic 0 to disable the SPI module. 3) The Mode Fault (SPICN.3: MODF) status flag is set. Setting the MODF bit can generate an interrupt if it is enabled. The application software must correct the system conflict before resuming its normal operation. The MODF flag is set automatically by hardware but must be cleared by software or a reset once set. Setting the MODF bit to logic 1 by software causes an interrupt if enabled. Mode fault detection is optional and can be disabled by clearing the MODFE bit to logic 0. Disabling the mode fault detection disables the function of the SSEL signal during master mode operation, allowing the associated port pin to be used as a general-purpose I/O. Note that the mode fault mechanism does not provide full protection from bus contention in multiple master, multiple slave systems. For example, if two devices are configured as master at the same time, the mode fault-detect circuitry offers protection only when one of them selects the other as slave by asserting its SSEL signal. Also, if a master accidentally activates more than one slave and those devices try to simultaneously drive their output pins, bus contention can occur without and a mode fault error being generated. 11.4.2 Receive Overrun Since the receive direction of SPI is double buffered, there is no overrun condition as long as the received character in the read buffer is read before the next character in the shift register ready to be transferred to the read buffer. However, if previous data in the read buffer has not been read out when a transfer cycle is completed and the new character is loaded into the read buffer, a receive overrun occurs and the Receive Overrun flag (SPICN.5: ROVR) is set. Setting the ROVR flag indicates that the oldest received character has been overwritten and is lost. Setting the ROVR bit to logic 1 causes an interrupt if enabled. Once set, the ROVR bit is cleared only by software or a reset. Maxim Integrated 11-4 MAXQ Family User’s Guide 11.4.3 Write Collision While Busy A write collision occurs if an attempt to write the SPIB data buffer is made during a transfer cycle (STBY = 1). Since the shift register is single buffered in the transmit direction, writes to SPIB are made directly into the shift register. Allowing the write to SPIB while another transfer is in progress could easily corrupt the transmit/receive data. When such a write attempt is made, the current transfer continues undisturbed, the attempted write data is not transferred to the shift register, and the control unit sets the Write Collision flag (SPICN.4: WCOL). Setting the WCOL bit to logic 1 causes an interrupt if SPI interrupt sources are enabled. Once set, the WCOL bit is cleared only by software or a reset. Normally, write collisions are associated solely with slave devices since they do not control initiation of transfers and do not have access to as much information about the SPICK clock as the master. As a master, write collisions are completely avoidable, however, the control unit detects write collisions for both master and slave modes. 11.5 SPI Master Operation The SPI module is placed in master mode by setting the Master Mode Enable (MSTM) bit in the SPI Control register to logic 1. Only an SPI master device can initiate a data transfer. The master is responsible for manually selecting/deselecting the desired slave devices. This can be done using a general-purpose output pin. Writing a data character to the SPI shift register (SPIB) while in master mode starts a data transfer. The SPI master immediately shifts out the data serially on the MOSI pin, most significant bit first, while providing the serial clock on SPICK output. New data is simultaneously received on the MISO pin into the least significant bit of the shift register. The data transfer format (clock polarity and phase), character length, and baud rate are configurable as described earlier in the section. During the transfer, the SPI Transfer Busy (SPICN.7:STBY) flag is set to indicate that a transfer is in process. At the end of the transfer, the data contained in the shift register is moved into the receive data buffer, the STBY bit is cleared by hardware, and the SPI Transfer Complete flag (SPICN.6: SPIC) is set. Setting the SPIC bit generates an interrupt request if SPI interrupt sources are enabled (ESPII = 1). 11.6 SPI Slave Operation The SPI module operates in slave mode when the MSTM bit is cleared to logic 0. In slave mode, the SPI is dependent on the SPICK sourced from the master to control the data transfer. The SPICK input frequency should be no greater than the system clock of the slave device frequency divided by 8. The Slave Select SSEL input must be externally asserted by a master before data exchange can take place. SSEL must be low before data transaction begins and must remain low for the duration of the transaction. If data is to be transmitted by the slave device, it must be written to its shift register before the beginning of a transfer cycle, otherwise the character already in the shift register will be transferred. The slave device considers a transfer to begin with the first clock edge or the falling edge of the SSEL, dependent on the data transfer format. The SPI slave receives data from the external master MOSI pin, most significant bit first, while simultaneously transferring the contents of its shift register to the master on the MISO pin, also most significant bit first. Data received from the external master replaces data in the internal shift register until the transfer completes. Just like in the master mode of operation, received data is loaded into the read buffer and the SPI Transfer Complete flag is set at the end of transfer. The setting of the Transfer Complete flag generates an interrupt request if enabled. When SSEL is not asserted, the slave device ignores the SPICK clock and the shift register is disabled. Under this condition, the device is basically idle, no data is shifted out from the shift register, and no data is sampled from the MOSI pin. The MISO pin is placed in an input mode and is weakly pulled high to allow other devices on the bus to drive the bus. Deassertion of the SSEL signal by the master during a transfer (before a full character, as defined by CHR, is received) aborts the current transfer. When the transfer is aborted, no data is loaded into the read buffer, the SPIC flag is not set, and the slave logic and bit counter are reset. In slave mode, the Clock Divider Ratio bits (CKR7:0) have no function since an external master supplies the serial clock. The transfer format (CKPOL, CKPHA settings) and the character length selection (CHR) for the slave device, however, should match the master for a proper communication. 11-5 Maxim Integrated MAXQ Family User’s Guide 11.7 SPI Peripheral Registers 11.7.1 SPI Control Register (SPICN) Bit # 7 6 5 4 3 2 1 0 Name STBY SPIC ROVR WCOL MODF MODFE MSTM SPIEN Reset 0 0 0 0 0 0 0 0 Access r rw rw rw rw rw rw rw r = read, w = write Bit 7: SPI Transfer Busy Flag (STBY). This bit is used to indicate the current transmit/receive activity of the SPI module. STBY is set to 1 when an SPI transfer cycle starts and is cleared to 0 when the transfer cycle is completed. This bit is controlled by hardware and is read-only for user software. 0 = SPI module is idle—no transfer in process 1 = SPI transfer in process Bit 6: SPI Transfer Complete Flag (SPIC). This bit signals the completion of an SPI transfer cycle. This bit must be cleared to 0 by software once set. Setting this bit to logic 1 causes an interrupt if enabled. 0 = No SPI transfers have completed since the bit was last cleared 1 = SPI transfer complete Bit 5: Receive Overrun Flag (ROVR). This bit indicates when a receive overrun has occurred. A receive overrun results when a received character is ready to be transferred to the SPI receive data buffer before the previous character in the data buffer is read. The most recent receive data is lost. This bit must be cleared to 0 by software once set. Setting this bit to logic 1 causes an interrupt if enabled. 0 = No receive overrun has occurred 1 = Receive overrun occurred Bit 4: Write Collision Flag (WCOL). This bit signifies that an attempt was made by software to write the SPI Buffer (SPIB) while a transfer was in progress (STBY = 1). Such attempts will always be blocked. This bit must be cleared to 0 by software once set. Setting this bit to logic 1 causes an interrupt if enabled. 0 = No write collision has been detected 1 = Write collision detected Bit 3: Mode Fault Flag (MODF). This bit is the mode fault flag for SPI master mode operation. When mode fault detection is enabled (MODFE = 1) in master mode, detection of high-to-low transition on the SSEL pin signifies a mode fault causes MODF to be set to 1. This bit must be cleared to 0 by software once set. Setting this bit to logic 1 causes an interrupt if enabled. This flag has no meaning in slave mode. 0 = No mode fault has been detected 1 = Mode fault detected while operating as a master (MSTM = 1) Bit 2: Mode Fault Enable (MODFE). When set to logic 1, the SSEL input pin is used for mode fault detection during SPI master mode operation. When cleared to 0, the SSEL input has no function and its pin can be used for general-purposes I/O. In slave mode, the SSEL pin always functions as a slave-select input signal to the SPI module, independent of the setting of the MODFE bit. Bit 1: Master Mode Enable (MSTM). The MSTM bit functions as a master mode enable bit for the SPI module. 0 = SPI module operates in slave mode when enabled (SPIEN = 1) 1 = SPI module operates in master mode when enabled (SPIEN = 1) Note that this bit can be set from 0 to 1 only when the SSEL signal is deasserted. This bit can be automatically cleared to 0 by hardware if a mode fault is detected. Maxim Integrated 11-6 MAXQ Family User’s Guide Bit 0: SPI Enable (SPIEN) 0 = SPI module and its baud-rate generator are disabled 1 = SPI module and its baud-rate generator are enabled 11.7.2 SPI Configuration Register (SPICF) Bit # 7 6 5 4 3 2 1 0 Name ESPII — — — — CHR CKPHA CKPOL Reset 0 0 0 0 0 0 0 0 Access rw r r r r rw rw rw r = read, w = write Bit 7: SPI Interrupt Enable (ESPII). This bit enables any of the SPI interrupt source flags (MODF, WCOL, ROVR, SPIC) to generate interrupt requests. 0 = SPI interrupt sources disabled 1 = SPI interrupt sources enabled Bits 6 to 3: Reserved Bit 2: Character Length Bit (CHR). This bit determines the character length for a SPI transfer cycle. A character can be 8 bits in length or 16 bits in length. 0 = 8-bit character length specified 1 = 16-bit character length specified Bit 1: Clock Phase Select (CKPHA). This bit selects the clock phase and is used with the CKPOL bit to define the SPI data transfer format. 0 = Data sampled on the active clock edge 1 = Data sampled on the inactive clock edge Bit 0: Clock Polarity Select (CKPOL). This bit selects the clock polarity and is used with the CKPHA bit to define the SPI data transfer format. 0 = Clock idles in the logic 0 state (rising = active clock edge) 1 = Clock idles in the logic 1 state (falling = active clock edge) 11.7.3 SPI Clock Register (SPICK) Bit # Name 7 6 5 4 3 2 1 0 CKR.7 CKR.6 CKR.5 CKR.4 CKR.3 CKR.2 CKR.1 CKR.0 Reset 0 0 0 0 0 0 0 0 Access rw rw rw rw rw rw rw rw r = read, w = write Bits 7 to 0: Clock Divider Ratio (CKR.[7:0]). This 8-bit value determines the system clock-divide ratio to be used for SPI master mode baud-clock generation. This register has no function when operating in slave mode as the SPI clock generation circuitry is disabled. The frequency of the SPI master mode baud rate is calculated using the following equation: SPI Baud Rate = (0.5 x System Clock Frequency) / (CKR[7:0] + 1) 11-7 Maxim Integrated MAXQ Family User’s Guide 11.7.4 SPI Data Buffer Register (SPIB) Bit # Name 15 14 13 12 11 10 9 8 SPIB.15 SPIB.14 SPIB.13 SPIB.12 SPIB.11 SPIB.10 SPIB.9 SPIB.8 Reset 0 0 0 0 0 0 0 0 Access rs rs rs rs rs rs rs rs Bit # Name 7 6 5 4 3 2 1 0 SPIB.7 SPIB.6 SPIB.5 SPIB.4 SPIB.3 SPIB.2 SPIB.1 SPIB.0 Reset 0 0 0 0 0 0 0 0 Access rs rs rs rs rs rs rs rs r = read, s = special Bits 15 to 0: SPI Data Buffer (SPIB.[15:0]). Data for SPI is read from or written to this location. The serial transmit and receive buffers are separate but both are addressed at this location. Write access is allowed only outside of the transfer cycle. When the STBY bit is set, write attempts are blocked and cause a write collision error. Maxim Integrated 11-8 MAXQ Family User’s Guide SECTION 12: HARDWARE MULTIPLIER MODULE This section contains the following information: 12.1 Hardware Multiplier Organization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12-2 12.2 Hardware Multiplier Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12-3 12.3 Register Output Selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12-3 12.3.1 Signed-Unsigned Operand Selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12-3 12.3.2 Operand Count Selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12-3 12.4 Hardware Multiplier Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12-3 12.4.1 Accessing the Multiplier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12-4 12.5 Hardware Multiplier Peripheral Registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12-4 12.5.1 Hardware Multiplier Control Register (MCNT) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12-4 12.5.2 Multiplier Operand A Register (MA) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12-5 12.5.3 Multiplier Operand B Register (MB) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12-6 12.5.4 Multiplier Accumulator 2 Register (MC2) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12-6 12.5.5 Multiplier Accumulator 1 Register (MC1) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12-7 12.5.6 Multiplier Accumulator 0 Register (MC0) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12-7 12.5.7 Multiplier Read Register 1 (MC1R) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12-8 12.5.8 Multiplier Read Register 0 (MC0R) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12-8 12.6 Hardware Multiplier Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12-9 LIST OF FIGURES Figure 12-1. Multiplier Organization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12-2 LIST OF TABLES Table 12-1. Hardware Multiplier Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12-4 12-1 Maxim Integrated MAXQ Family User’s Guide SECTION 12: HARDWARE MULTIPLIER MODULE The hardware multiplier module can be used by the MAXQ microcontroller to support high-speed multiplications. The hardware multiplier module is equipped with two 16-bit operand registers, a 32-bit read-only result register, and an accumulator of width between 32 bits and 48 bits, depending on the specific MAXQ device. The multiplier can complete a 16-bit x 16-bit multiply-and-accumulate/subtract operation in a single cycle. The hardware multiplier module supports the following operations without interfering with the normal core functions: • Signed or unsigned Multiply (16 bit x 16 bit) • Signed or unsigned Multiply-Accumulate (16 bit x 16 bit) • Signed or unsigned Multiply-Subtract (16 bit x 16 bit) • Signed Multiply and Negate (16 bit x 16 bit) 12.1 Hardware Multiplier Organization The hardware multiplier consists of two 16-bit, parallel-load operand registers (MA, MB); a read-only result register formed by two parallel 16-bit registers (MC1R and MC0R); an accumulator, which is formed by up to three 16-bit parallel registers (MC2, MC1, and MC0); and a status/control register (MCNT). Note that the width and/or presence of the MC2 register depend on the specified accumulator size for the given MAXQ device. Figure 12-1 shows a block diagram of the hardware multiplier. 0 15 15 0 MA MB SUS MMAC MCNT MSUB MULTIPLIER OPCS SQU CLD MCW OVERFLOW 0 15 MC1R 15 0 MC0R 15 0 15 MC2 0 MC1 0 15 MC0 Figure 12-1. Multiplier Organization Maxim Integrated 12-2 MAXQ Family User’s Guide 12.2 Hardware Multiplier Controls The selection of operation to be performed by the multiplier is determined by four control bits in the MCNT register: SUS, MSUB, MMAC, and SQU. The number of operands that must be loaded to trigger the specified operation is dictated by the OPCS bit setting, except when the square function is enabled (SQU = 1). Enabling the square function implicitly defines that only a single operand (either MA or MB) needs to be loaded to trigger the square operation, independent of the OPCS bit setting. The MCNT register bits must be configured to select the desired operation and operand count prior to loading the operand(s) to trigger the multiplier operation. Any write to MCNT automatically resets the operand load counter of the multiplier, but does not affect the operand registers, unless such action is requested using the Clear Data Registers (CLD) control bit. Once the desired operation has been specified via the MCNT register bits, loading the prescribed number of operands triggers the respective multiply, multiply-accumulate/subtract or multiply-negate operation. 12.3 Register Output Selection The Hardware Multiplier implements the MC Register Write Select (MCW) control bit so that writing of the result to the MC2:MC0 registers can be blocked to preserve the MC registers (accumulator). When the MCW bit is configured to logic 1, the result for the given operation is not written to the MC registers. When the MCW bit is configured to logic 0, the MC registers are updated with the result of the operation. The MC1R, MC0R read-only register pair are updated independent of the MCW bit setting. This register pair always reflect the output that would normally be placed in MC1:MC0, given that MCW = 1 or MMAC = 0. When MCW = 0 and MMAC = 1, the MC1R:MC0R content may not match the MC1:MC0 register content, but it will be predictable and may be useful in certain situations. See Table 12-1 for details. 12.3.1 Signed-Unsigned Operand Selection The operands can be either signed or unsigned numbers, but the data type must be defined by the user software via the SignedUnsigned (SUS) bit prior to triggering the operation. For an unsigned operation, the Signed-Unsigned bit (SUS) in the MCNT register must be set to 1; for a signed operation, the SUS bit must be cleared to 0. The multiplier treats unsigned numbers as absolute magnitude. For a 16-bit positional binary number, this represents a value in the range 0 to 216 - 1 (xFFFFh). The signed number representation is a two's-complement value, where the most significant bit is defined as a sign bit. The range of a 16-bit two's-complement number is -2(16-1) (x8000h) to +2(16-1) - 1 (x7FFF). The product of any signed operation will be sign extended before being stored or accumulated/subtracted into the MC registers. The SUS bit should always be configured to logic 0 (i.e., signed operands) for the multiplynegate operation. Attempting an unsigned multiply-negate operation results in incorrect results and setting of the OF bit. Modifying the operand data type selection via the SUS bit does not alter the contents of the MC registers. The MC registers are read/write accessible and can be modified by user code when necessary. 12.3.2 Operand Count Selection The OPCS bit allows selection of single operand or two operands operation for the multiply and multiply-accumulate/subtract operations. When the OPCS bit is cleared to 0, the multiply or multiply-accumulate/subtract operation established by the SUS, MSUB, and MMAC bits is triggered once two operands are loaded, one to each of the MA and MB registers. When OPCS is set to 1, the operation commences once data is loaded to either MA or MB. The OPCS bit is ignored when the square operation is enabled (SQU), since loading of data to the MA or MB register actually writes to both registers. 12.4 Hardware Multiplier Operations The control bits, which specify data type (SUS), operand count (OPCS or SQU), and destination control (MCW), have already been described. However, there are two additional MCNT register bits that serve to define the Hardware Multiplier operation. The multiplyaccumulate/subtract and multiply-negate operations are enabled by the Multiply-Accumulate Enable (MMAC) and Multiply Negate (MSUB) bits in the MCNT register. When the MMAC bit is set to 1, the multiplier performs a multiply-accumulate (if MSUB = 0) or a multiply-subtract (if MSUB = 1). If MMAC is configured to 0, the multiplier result is not accumulated or subtracted, but can be stored directly (if MSUB = 0) or negated (if MSUB = 1) before storage. The multiply-negate operation (MMAC = 0, MSUB = 1) is only allowable for signed data operands (SUS = 0). For unsigned multiply-accumulate/subtract operations, the OF bit is set when a carry-out/borrow-in from the most significant bit of the MC register occurs. For a signed two’s-complement multiply-accumulate/subtract operations, the OF bit is set when the carry-out/borrow-in from the most significant magnitude position of the MC register is different from the carryout/borrow-in of the sign position of the MC register. Since there is no overflow condition for multiply and multiply-negate operations, the OF bit is always cleared for these operations with one exception. The OF bit will be set to logic 1 if an unsigned multiply-negate (invalid operation) is requested. Table 12-1 shows the operations supported by the multiplier and associated MCNT control bit settings. 12-3 Maxim Integrated MAXQ Family User’s Guide 12.4.1 Accessing the Multiplier There are no restrictions on how quickly data is entered into the operand registers or the order of data entry. The only requirement to do a calculation is to perform the loading of MA and/or MB registers having specified data type and operation in the MCNT register. The multiplier keeps track of the writes to the MA and MB registers, and starts calculation immediately after the prescribed number of operands is loaded. If two operands are specified for the operation, the multiplier waits for the second operand to be loaded into the other operand register before starting the actual calculation. If for any reason software needs to reload the first operand, it should either reload that same operand register or use the CLD bit in the MCNT register to reinitialize the multiplier; otherwise, loading data to another operand register triggers the calculation. The CLD bit is a self-clearing bit that can be used for multiplier initialization. When it is set, it clears all data registers and the OF bit to zero and resets the multiplier operand write counter. The specified hardware multiplier operation begins when the final operand(s) is loaded and will complete in a single cycle. The readonly MC1R, MC0R result registers can be accessed in the very next cycle unless accumulation/subtraction with MC2:0 is requested (MCW = 0 and MMAC = 1), in which case, one cycle is required so that stable data can be read. When MCW = 0, the MC2:0 registers always require one wait cycle before the operation result is accessible. The single wait cycle needed for updating the MC2:0 registers with a calculated result does not prevent initiating another calculation. Back-to-back operations can be triggered (independent of data type and operand count) without the need of wait state between loading of operands. Table 12-1. Hardware Multiplier Operations MCW:MSUB:MMAC OPERATION MC2 MC1 000 Multiply 001 Multiply-Accumulate 010 Multiply-Negate (SUS = 0 only) 011 Multiply-Subtract 100 Multiply MC2 MC1 101 Multiply-Accumulate MC2 MC1 110 Multiply-Negate (SUS = 0 only) MC2 111 Multiply-Subtract MC2 MC0 MC1R:MC0R OF STATUS MA*MB MA*MB No MC+(MA*MB) 32lsbits of (MC+2*(MA*MB)) Yes -(MA*MB) -(MA*MB) No MC-(MA*MB) 32lsbits of (MC-2*(MA*MB)) Yes MC0 MA*MB No MC0 32lsbits of (MC+(MA*MB)) No MC1 MC0 -(MA*MB) No MC1 MC0 32lsbits of (MC-(MA*MB)) No 12.5 Hardware Multiplier Peripheral Registers 12.5.1 Hardware Multiplier Control Register (MCNT) Bit # 7 6 5 4 3 2 1 0 Name OF MCW CLD SQU OPCS MSUB MMAC SUS Reset 0 0 0 0 0 0 0 0 Access r rw rw rw rw rw rw rw r = read, w = write Bit 7: Overflow Flag (OF). This bit is set to logic 1 when an overflow occurred for the last operation. This bit can be set for accumulation/subtraction operations or unsigned multiply-negate attempts. This bit is automatically cleared to 0 following a reset, starting a multiplier operation, or setting of the CLD bit to 0. Bit 6: MC Register Write Select (MCW). The state of the MCW bit determines if an operation result will be placed into the accumulator registers (MC). 0 = The result will be written to the MC registers. 1 = The result is not written to the MC registers (MC register content is unchanged). Bit 5: Clear Data Registers (CLD). This bit initializes the operand registers and the accumulator of the multiplier. When it is set to 1, the contents of all data registers and the OF bit are cleared to 0 and the operand load counter is reset immediately. This bit is cleared by hardware automatically. Writing a 0 to this bit has no effect. Maxim Integrated 12-4 MAXQ Family User’s Guide Bit 4: Square Function Enable (SQU). This bit supports the hardware square function. When this bit is set to logic 1, a square operation is initiated after an operand is written to either the MA or the MB register. Writing data to either of the operand registers writes to both registers and triggers the specified square or square-accumulate/subtract operation. Setting this bit to 1 also overrides the OPCS bit setting. When SQU is cleared to logic 0, the hardware square function is disabled. 0 = Square function disabled 1 = Square function enabled Bit 3: Operand Count Select (OPCS). This bit defines how many operands must be loaded to trigger a multiply or multiply-accumulate/subtract operation (except when SQU = 1 since this implicitly specifies a single operand). When this bit is cleared to logic 0, both operands (MA and MB) must be written to trigger the operation. When this bit is set to 1, the specified operation is triggered once either operand is written. 0 = Both operands (MA and MB) must be written to trigger the multiplier operation. 1 = Loading one operand (MA or MB) triggers the multiplier operation. Bit 2: Multiply Negate (MSUB). Configuring this bit to logic 1 enables negation of the product for signed multiply operations and subtraction of the product from the accumulator (MC[2:0]) when MMAC = 1. When MSUB is configured to logic 0, the product of multiply operations will not be negated and accumulation is selected when MMAC = 1. Bit 1: Multiply-Accumulate Enable (MMAC). This bit enables the accumulate or subtract operation (as per MSUB) for the hardware multiplier. When this bit is cleared to logic 0, the multiplier will perform only multiply operations. When this bit is set to logic 1, the multiplier will perform a multiply-accumulate or multiply-subtract operation based upon the MSUB bit. 0 = Accumulate/subtract operation disabled 1 = Accumulate/subtract operation enabled Bit 0: Signed-Unsigned Select (SUS). This bit determines the data type of the operands. When this bit is cleared to logic 0, the operands are treated as two’s-complement values and the multiplier performs a signed operation. When this bit is set to logic 1, the operands are treated as absolute magnitudes and the multiplier performs an unsigned operation. 0 = Signed operands 1 = Unsigned operands 12.5.2 Multiplier Operand A Register (MA) Bit # Name 15 14 13 12 11 10 9 8 MA.15 MA.14 MA.13 MA.12 MA.11 MA.10 MA.9 MA.8 Reset 0 0 0 0 0 0 0 0 Access rw rw rw rw rw rw rw rw Bit # 7 6 5 4 3 2 1 0 MA.7 MA.6 MA.5 MA.4 MA.3 MA.2 MA.1 MA.0 Name Reset 0 0 0 0 0 0 0 0 Access rw rw rw rw rw rw rw rw r = read, w = write Bits 15 to 0: Multiplier Operand A Register (MA.[15:0]). This operand A register is used by the application code to load 16-bit values for multiplier operations. 12-5 Maxim Integrated MAXQ Family User’s Guide 12.5.3 Multiplier Operand B Register (MB) Bit # 15 14 13 12 11 10 9 8 Name MB.15 MB.14 MB.13 MB.12 MB.11 MB.10 MB.9 MB.8 Reset 0 0 0 0 0 0 0 0 Access rw rw rw rw rw rw rw rw Bit # 7 6 5 4 3 2 1 0 Name MB.7 MB.6 MB.5 MB.4 MB.3 MB.2 MB.1 MB.0 Reset 0 0 0 0 0 0 0 0 Access rw rw rw rw rw rw rw rw r = read, w = write Bits 15 to 0: Multiplier Operand B Register (MB.[15:0]). This operand B register is used by the application code to load 16-bit values for multiplier operations. 12.5.4 Multiplier Accumulator 2 Register (MC2) Bit # Name 15 14 13 12 11 10 9 8 MC2.15 MC2.14 MC2.13 MC2.12 MC2.11 MC2.10 MC2.9 MC2.8 Reset 0 0 0 0 0 0 0 0 Access rw rw rw rw rw rw rw rw Bit # 7 6 5 4 3 2 1 0 Name MC2.7 MC2.6 MC2.5 MC2.4 MC2.3 MC2.2 MC2.1 MC2.0 Reset 0 0 0 0 0 0 0 0 Access rw rw rw rw rw rw rw rw r = read, w = write Bits 15 to 0: Multiplier Accumulator 2 Register (MC2.[15:0]). The MC2 register represents the two most significant bytes of the accumulator register. The 48-bit accumulator is formed by MC2, MC1 and MC0. For a signed operation, the most significant bit of this register is the sign bit. The MC2 register width is dependent upon the hardware multiplier accumulator width of the given MAXQ device. For a MAXQ device having only a 32-bit accumulator, the MC2 register will not be present. Maxim Integrated 12-6 MAXQ Family User’s Guide 12.5.5 Multiplier Accumulator 1 Register (MC1) Bit # 15 14 13 12 11 10 9 8 Name MC1.15 MC1.14 MC1.13 MC1.12 MC1.11 MC1.10 MC1.9 MC1.8 Reset 0 0 0 0 0 0 0 0 Access rw rw rw rw rw rw rw rw Bit # Name 7 6 5 4 3 2 1 0 MC1.7 MC1.6 MC1.5 MC1.4 MC1.3 MC1.2 MC1.1 MC1.0 Reset 0 0 0 0 0 0 0 0 Access rw rw rw rw rw rw rw rw r = read, w = write Bits 15 to 0: Multiplier Accumulator 1 Register (MC1.[15:0]). The MC1 register represents bytes 3 and 2 of the accumulator register. The 48-bit accumulator is formed by MC2, MC1, and MC0. 12.5.6 Multiplier Accumulator 0 Register (MC0) Bit # Name 15 14 13 12 11 10 9 8 MC0.15 MC0.14 MC0.13 MC0.12 MC0.11 MC0.10 MC0.9 MC0.8 Reset 0 0 0 0 0 0 0 0 Access rw rw rw rw rw rw rw rw Bit # 7 6 5 4 3 2 1 0 Name MC0.7 MC0.6 MC0.5 MC0.4 MC0.3 MC0.2 MC0.1 MC0.0 Reset 0 0 0 0 0 0 0 0 Access rw rw rw rw rw rw rw rw r = read, w = write Bits 15 to 0: Multiplier Accumulator 0 Register (MC0.[15:0]). The MC0 register represents the two least significant bytes of the accumulator register. The 48-bit accumulator is formed by MC2, MC1, and MC0. 12-7 Maxim Integrated MAXQ Family User’s Guide 12.5.7 Multiplier Read Register 1 (MC1R) Bit # 15 14 13 12 11 10 9 8 Name MC1R.15 MC1R.14 MC1R.13 MC1R.12 MC1R.11 MC1R.10 MC1R.9 MC1R.8 Reset 0 0 0 0 0 0 0 0 Access r r r r r r r r Bit # 7 6 5 4 3 2 1 0 Name MC1R.7 MC1R.6 MC1R.5 MC1R.4 MC1R.3 MC1R.2 MC1R.1 MC1R.0 Reset 0 0 0 0 0 0 0 0 Access r r r r r r r r r = read Bits 15 to 0: Multiplier Read Register 1 (MC1R.[15:0]). The MC1R register represents bytes 3 and 2 result from the last operation when MCW = 1 or the last operation was a multiply or multiply-negate. When MCW = 0 and the last operation was a multiply-accumulate/subtract, the contents of this register may or may not agree with the contents of MC1 due to the combinatorial nature of the adder. The content of this register may change if MCNT, MA, MB, or MC[2:0] is changed. 12.5.8 Multiplier Read Register 0 (MC0R) Bit # 15 14 13 12 11 10 9 8 Name MC0R.15 MC0R.14 MC0R.13 MC0R.12 MC0R.11 MC0R.10 MC0R.9 MC0R.8 Reset 0 0 0 0 0 0 0 0 Access r r r r r r r r Bit # 7 6 5 4 3 2 1 0 Name MC0R.7 MC0R.6 MC0R.5 MC0R.4 MC0R.3 MC0R.2 MC0R.1 MC0R.0 Reset 0 0 0 0 0 0 0 0 Access r r r r r r r r r = read Bits 15 to 0: Multiplier Read Register 0 (MC0R.[15:0]). The MC1R register represents bytes 1 and 0 result from the last operation when MCW = 1 or the last operation was a multiply or multiply-negate. When MCW = 0 and the last operation was a multiply-accumulate/subtract, the contents of this register may or may not agree with the contents of MC0 due to the combinatorial nature of the adder. The content of this register may change if MCNT, MA, MB or MC[2:0] is changed. Maxim Integrated 12-8 MAXQ Family User’s Guide 12.6 Hardware Multiplier Examples The following are code examples of multiplier operations. ;Unsigned move move move Multiply 16-bit x 16-bit MCNT, #21h ; CLD=1, SUS=1 (unsigned) MA, #0FFFh ; MC2:0=0000_0000_0000h MB, #1001h ; MC1R:MC0R= 00FF_FFFFh ; MC2:0=0000_00FF_FFFFh ;Signed Multiply 16-bit x 16-bit move MCNT, #20h ; CLD=1, SUS=0 (signed) move MA, #F001h ; MC2:0=0000_0000_0000h move MB, #1001h ; MC1R:MC0R= FF00_0001h ; MC2:0=FFFF_FF00_0001h ;Unsigned Multiply-Accumulate 16-bit x 16-bit ; MC2:0=0000_0100_0001h move MCNT, #03h ; MMAC=1, SUS=1 (unsigned) move MA, #0FFFh ; move MB, #1001h ; ; MC1R:MC0R=02FF_FFFFh ; MC2:0=0000_0200_0000h ;Signed Multiply-Accumulate 16-bit x 16-bit ; MC2:0=0000_0100_0001h move MCNT, #02h ; SUS=0 (signed) move MA, #F001h ; move MB, #1001h ; ; MC1R:MC0R= FF00_0003h ; MC2:0=0000_0000_0002h ;Unsigned Multiply-Subtract 16-bit x 16-bit ; MC2:0=0000_0100_0001h move MCNT, #07h ; MMAC=1, MSUB=1, SUS=1 (unsigned) move MA, #0FFFh ; move MB, #1001h ; ; MC1R:MC0R=FF00_0003h ; MC2:0=0000_0000_0002h ;Signed Multiply-Subtract 16-bit ; move MCNT, #06h ; move MA, #F001h ; move MB, #1001h ; ; ; x 16-bit MC2:0=0000_0100_0001h MMAC=1, MSUB=1, SUS=0 (signed) MC1R:MC0R= 02FF_FFFFh MC2:0=0000_0200_0000h ;Signed Multiply Negate 16-bit x 16-bit move MCNT, #24h ; CLD=1, MSUB=1, SUS=0 (signed) move MA, #F001h ; MC2:0=0000_0000_0000h move MB, #1001h ; MC1R:MC0R =00FF_FFFFh ; MC2:0=0000_00FF_FFFFh 12-9 Maxim Integrated MAXQ Family User’s Guide SECTION 13: 1-Wire BUS MASTER This section contains the following information: 13.1 1-Wire Peripheral Registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13-3 13.1.1 1-Wire Address Register (OWA) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13-3 13.1.2 1-Wire Data Register (OWD) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13-3 13.2 1-Wire Clock Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13-4 13.2.1 1-Wire Clock Divisor Register (OWA = 100b) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13-4 13.3 1-Wire Bus Master Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13-5 13.3.1 1-Wire Control Register (OWA = 101b) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13-5 13.4 1-Wire Bus Master Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13-6 13.4.1 1-Wire Command Register (OWA = 000b) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13-6 13.5 Search Operation Using Search ROM Accelerator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13-6 13.5.1 Accelerated ROM Search Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13-8 13.6 1-Wire Transmit and Receive Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13-9 13.6.1 1-Wire Transmit/Receive Buffer (OWA = 001b) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13-9 13.7 1-Wire Bus Master Interrupts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13-10 13.7.1 1-Wire Interrupt Flag Register (OWA = 010b) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13-10 13.7.2 1-Wire Interrupt Enable Register (OWA = 011b) . . . . . . . . . . . . . . . . . . . . . . . . . . . .13-11 13.8 I/O Signaling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13-11 LIST OF FIGURES Figure 13-1. 1-Wire Bus Master Functional Diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13-2 Figure 13-2. 1-Wire Bus Signaling in Standard Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13-12 LIST OF TABLES Table 13-1. Clock Divisor Register Setting for Reference Clock Rates . . . . . . . . . . . . . . . . . . . . .13-4 Table 13-2. ROM ID Read Time Slot Possibilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13-7 Table 13-3. Search ROM Accelerator Transmit/Receive Byte Sequence . . . . . . . . . . . . . . . . . . .13-7 13-1 Maxim Integrated MAXQ Family User’s Guide SECTION 13: 1-Wire BUS MASTER The 1-Wire Bus Master can be used by the MAXQ microcontroller to support 1-Wire communication to external 1-Wire devices without tying up valuable CPU resources. The Bus Master provides complete control of the 1-Wire bus, and transmit and receive activities. All timing and control sequences of the 1-Wire bus are generated within the Bus Master. Communication between the CPU and the Bus Master is through read/write access of 1-Wire Master Address (OWA) and 1-Wire Master Data (OWD) peripheral registers. When bus activity has generated a condition that requires CPU service, the Bus Master sets a status bit, allowing an interrupt to be generated if enabled. The 1-Wire Bus Master is operable for any system clock frequency between 4MHz and 25MHz, and supports the Bit Banging and Search ROM Accelerator modes. Detailed operation of the 1-Wire bus is described in the Book of iButton Standards, available on the Maxim/Dallas Semiconductor website at www.maxim-ic.com/iButtonbook. Figure 13-1 shows a functional block diagram of the 1-Wire Bus Master. 1-WIRE MASTER OWD INTERRUPT FLAG INTERRUPT CONTROL LOGIC INTERRUPT ENABLE OWA COMMAND CONTROL OWIN CONTROL TRANSMIT BUFFER 1-WIRE BUS TIMING AND CONTROL OWOUT Tx SHIFT REGISTER RESET RESET Rx SHIFT REGISTER RECEIVE BUFFER MAXQ CLOCK DIVIDER CLK BAUD GENERATION Figure 13-1. 1-Wire Bus Master Functional Diagram Maxim Integrated 13-2 MAXQ Family User’s Guide 13.1 1-Wire Peripheral Registers The MAXQ microcontroller interfaces to the 1-Wire Bus Master through two peripheral registers: 1-Wire Master Address (OWA) and 1-Wire Master Data (OWD). These two registers allow read/write access of the six internal registers of the 1-Wire Bus Master. The internal registers provide a means for the CPU to configure and control transmit/receive activity through the Bus Master. The three least significant bits (A[2:0]) of the OWA peripheral register specify the address of the internal register to be accessed. The OWD SFR is used for read/write access to the implemented bits of the specified internal register. To access an internal 1-Wire register, a valid address must be specified in the OWA peripheral register prior to performing a read/write operation to the OWD peripheral register. As long as a valid address is presented in OWA, read accesses of OWD will return data content from the internal target register and writes to OWD will update the internal target register with the data provided via OWD (with exception of the interrupt flag Register, which is read only). The following details the OWA and OWD registers. 13.1.1 1-Wire Address Register (OWA) Bit # 7 6 5 4 3 2 1 0 Name — — — — — A2 A1 A0 Reset 0 0 0 0 0 1 1 1 Access r r r r r rw rw rw r = read, w = write Bits 7 to 3: Reserved Bits 2 to 0: 1-Wire Internal Register Address Bits (A[2:0]). These bits are used to select one of the 1-Wire Master internal registers to be accessed via the OWD register. Prior to accessing any of the 1-Wire Master internal registers, the address for the target internal register must be specified. Addresses where A[2:0] = 11xb are considered reserved addresses and are not supported by the Bus Master. Read access to these addresses will return invalid data in OWD and write accesses will not change the content of any writable registers. A2 A1 A0 INTERNAL REGISTER (READ/WRITE ACCESSIBILITY) 0 0 0 Command (Read/Write) 0 0 1 Transmit/Receive Buffer (Read/Write) 0 1 0 Interrupt Flag (Read) 0 1 1 Interrupt Enable (Read/Write) 1 0 0 Clock Divisor (Read/Write) 1 0 1 Control (Read/Write) 1 1 X Reserved 13.1.2 1-Wire Data Register (OWD) Bit # Name 7 6 5 4 3 2 1 0 OWD.7 OWD.6 OWD.5 OWD.4 OWD.3 OWD.2 OWD.1 OWD.0 Reset 0 0 0 0 0 0 0 0 Access rw rw rw rw rw rw rw rw r = read, w = write Bits 7 to 0: 1-Wire Data Register (OWD.[7:0]). This register contains the data value read from the target internal register as selected by the A[2:0] bits in the OWA register when read. A write to the OWD causes the data to be written to the target internal register selected by the A[2:0] bits of the OWA register (with exception of the interrupt flag register, which is read-only). 13-3 Maxim Integrated MAXQ Family User’s Guide 13.2 1-Wire Clock Control All 1-Wire timing patterns are generated using a base clock of 1.0MHz. To create this base clock frequency, the 1-Wire Bus Master must internally divide down the microcontroller system clock. The Clock Divisor internal register implements bits to control this clock division. The prescaler bits (PRE[1:0]) divide the microcontroller system clock by 1, 3, 5, or 7 for settings of 00b, 01b, 10b, and 11b, respectively. The divider bits (DIV[2:0]) control circuitry to then divide the prescaler output clock by 1, 2, 4, 8, 16, 32, 64, or 128. The CLK_EN bit (bit 7 of the Clock Divisor register) enables or disables the clock generation circuitry. Setting CLK_EN to logic 1 enables the clock generation circuitry, while clearing the bit disables the clock generation circuitry. When cleared to 0, this bit essentially puts the Bus Master into a power-saving mode that disables the clock divisor circuitry while not in use. Note that without the clock, the Bus Master functionality is basically disabled. The following documents the internal clock divisor register. 13.2.1 1-Wire Clock Divisor Register (OWA = 100b) Bit # 7 6 5 4 3 2 1 0 Name CLK_EN — — DIV2 DIV1 DIV0 PRE1 PRE0 Reset 0 0 0 0 0 0 0 0 Access rw r r rw rw rw rw rw r = read, w = write Bit 7: Clock Enable (CLK_EN). The CLK_EN bit of the Clock Divisor register is used to control the clock generation circuitry in the Bus Master. Setting the CLK_EN bit to logic 1 enables the clock generation circuitry according to the PRE[1:0] and DIV[2:0] settings. Bits 6 and 5: Reserved Bits 4, 3, 2: Divider Bits 2:0 (DIV[2:0]). These bits allow further division of the prescaled clock for generating a 1-Wire base clock: Base Clock = Prescaled Clock / (2DIV2:0) Bits 1 and 0: Clock Prescaler Bits 1:0 (PRE[1:0]). These prescaler bits define the initial clock division applied to the reference clock input. The prescaled clock output will be according to the following equation: Prescaled Clock = Reference Clock / (2 x PRE[1:0] + 1) The Clock Divisor register must be configured properly before any 1-Wire communication can take place. The Bus Master clock divisor settings currently allow reference clock input frequencies between 4MHz and 25MHz with ~50% duty cycle to be supported. Table 13-1 summarizes the proper division values, based upon the reference input clock range. Settings not listed in the table are reserved and can result in improper operation if used. Note that providing a system clock frequency nearer the minimum of a given reference clock frequency range yields base-clock frequencies closer to 1MHz and better timing margin. Table 13-1. Clock Divisor Register Setting for Reference Clock Rates REFERENCE CLOCK FREQUENCY (MHz) DIVIDER RATIO DIV2 DIV1 DIV0 PRE1 PRE0 < 5.0 4 0 1 0 0 0 < 6.0 5 0 0 0 1 0 6.0 < 7.0 6 0 0 1 0 1 7.0 < 8.0 7 0 0 0 1 1 8.0 < 10.0 8 0 1 1 0 0 10.0 < 12.0 10 0 0 1 1 0 12.0 < 14.0 12 0 1 0 0 1 14.0 < 16.0 14 0 0 1 1 1 16.0 < 20.0 16 1 0 0 0 0 20.0 < 24.0 20 0 1 0 1 0 24.0 ≤ 25.0 24 0 1 1 0 1 MIN MAX 4.0 5.0 Maxim Integrated 13-4 MAXQ Family User’s Guide 13.3 1-Wire Bus Master Control The 1-Wire Bus Master can perform certain special functions to support OW line operation. These special functions can be set up through the Control register that is documented below. The Control Register defaults to 00h on a reset, which disables all special functions. 13.3.1 1-Wire Control Register (OWA = 101b) Bit # 7 6 5 4 3 2 1 0 EOWMI — BIT_CTL — — EN_FOW PPM LLM Reset 0 0 0 0 0 0 0 0 Access rw r rw r r rw rw rw Name r = read, w = write Bit 7: Enable 1-Wire Master Interrupts (EOWMI). Setting this bit to logic 1 enables the 1-Wire interrupt request to the CPU if any of the interrupt flags in the Interrupt Flag register is set and its corresponding enable bit in the Interrupt Enable register is also set. Clearing this bit to logic 0 disables 1-Wire interrupt request to the CPU. Bits 6, 4, and 3: Reserved Bit 5: Bit-Banging Mode Enable (BIT_CTL). Setting this bit to logic 1 places the master into bit-banging mode of operation, where only the least significant bit of the transmit/receive register would be sent/received before enabling the interrupt that signals the end of the transmission. Clearing this bit to logic 0 leaves the master operating in full byte boundaries. The Search ROM Accelerator Mode (SRA = 1) overrides the bit-banging mode. Bit 2: Enable Force OW (EN_FOW). To enable the force OW line command, the EN_FOW bit must be set to logic 1. Clearing this bit to logic 0 disables the force OW line command in the command register. Bit 1: Presence Pulse Masking (PPM). This bit is used to enable presence pulse masking function. Setting this bit to logic 1 causes the master to initiate the beginning of a presence pulse during a 1-Wire reset. This enables the master to prevent the larger amount of ringing caused by the slave devices when initiating a low on the OW line. If the PPM bit is set, the PDR result bit in the Interrupt Flag Register is always set, which shows that a slave device was on the line even if there were none. Clearing this bit to logic 0 disables the presence pulse-masking function. Bit 0: Long Line Mode (LLM). This bit is used to enable the long line mode timing. Setting this bit to logic 1 effectively moves the write one release and the data sample timing during standard mode communication out to 8µs and 22µs, respectively. The recovery time will also be extended to 14ms. This provides a less strict environment for long line transmissions. Clearing this bit to logic 0 leaves the write one release, data sampling, and recovery time during standard mode communication at 5ms, 15ms, and 10ms, respectively. 13-5 Maxim Integrated MAXQ Family User’s Guide 13.4 1-Wire Bus Master Commands The 1-Wire Bus Master can generate special commands on the 1-Wire bus in addition to transmitting and receiving data. The commands are generated via the setting of a corresponding bit in the Command Register (A[2:0] = 000b), which is documented below. These operational modes are defined in the Book of iButton Standards. 13.4.1 1-Wire Command Register (OWA = 000b) Bit # 7 6 5 4 3 2 1 0 Name — — — — OW_IN FOW SRA 1WR Reset 0 0 0 0 s 0 0 0 Access r r r r r rw rw rw r = read, w = write, s = special Bits 7 to 4: Reserved Bit 3: 1-Wire Input (OW_IN). This bit always reflects the current logic state of the OW_IN line. Bit 2: Force 1-Wire (FOW). Setting this bit to logic 1 forces OW line to a low value if the EN_FOW bit in the 1-Wire internal control register is also set to logic 1. The FOW bit has no effect on the OW line when the EN_FOW bit is cleared to logic 0. Bit 1: Search ROM Accelerator (SRA). Setting this bit to logic 1 places the Bus Master into Search ROM Accelerator mode to expedite the Search ROM process and prevent the CPU from having to perform single-bit manipulations of the bus during a Search ROM operation. Note that the receive buffer must be empty before invoking SRA mode. This mode of operation is used to get either the addresses of all devices connected to the 1-Wire bus or the serial number of one device and simultaneously address the device. Clearing this bit to logic 0 disables the Search ROM accelerator. Bit 0: 1-Wire Reset (1WR). Setting this bit to logic 1 causes a reset on the 1-Wire bus, which must precede any command given on the bus. Setting this bit also automatically clears the SRA bit. The 1WR bit is automatically cleared as soon as the 1-Wire bus reset completes. The Bus Master sets the presence-detect interrupt flag (PD) when the reset is completed and sufficient time for a 1-Wire reset to occur has passed. The result of the 1-Wire reset is placed in the Interrupt Register bit PDR. If a presence-detect pulse was received, PDR is cleared; otherwise, it is set. This bit is cleared to logic 0 when no reset action is required. 13.5 Search Operation Using Search ROM Accelerator The 1-Wire Bus Master supports a Search ROM Accelerator Mode to expedite learning of ROM IDs for those devices connected to the bus. The bus master must determine the ROM IDs of the slave devices on the 1-Wire bus before it can address each slave device individually. The Search ROM command (F0h) is used by the Bus Master to signal external 1-Wire devices that a ROM ID search will be conducted. The Search ROM command can be issued immediately following a Reset sequence initiated by the master. Once the search ROM command has been issued by the bus master, slave devices simultaneously transmit, bit-by-bit, their unique ROM IDs. There are three 1-Wire bus time slots associated with each ROM ID bit acquisition. These three time slots are as follows: 1) Read Time Slot 1: each slave transmits a single bit of its ROM ID (lsb first). 2) Read Time Slot 2: each slave transmits a complementary bit to that transmitted in 1. 3) Write Time Slot: bus master transmits discrepancy decision bit if needed. The ROM ID acquisition and selection process listed starts with the least significant bit of each slave device. If the ROM ID bits match for all currently selected slave devices, the two read time slots will reflect complementary data, and the bus master will not need to deselect or remove any slave devices from the selection process. The bus master simply repeats the Read Time Slot 1 data as its Write Time Slot data in the third time slot, and continues to the next higher ROM ID bit acquisition period. Since it is expected that all 1-Wire devices have unique ROM IDs, the first two read time slots inevitably result in conflicting data being driven on the bus for at least one bit position when multiple slaves are connected. When this occurs, the wired-AND line state yields a 0 for both read time slots. At this point, the master has to send a bit value 1 or 0 to select the devices that remain in the search process. All deselected devices are idle until they receive a Reset Pulse. Table 13-2 shows the four possible scenarios for slave ROM ID read time slots. Maxim Integrated 13-6 MAXQ Family User’s Guide Table 13-2. ROM ID Read Time Slot Possibilities READ TIME SLOT 1 (SLAVE) READ TIME SLOT 2 (SLAVE) WRITE TIME SLOT (MASTER) 0 1 1 0 0 1 0 0 0 or 1 1 1 1 DESCRIPTION All slave devices remaining in the selection process have a 0 in this ROM ID bit position. All slave devices remaining in the selection process have a 1 in this ROM ID bit position. ID Discrepancy—Slave devices remaining in the selection process have both 0 and 1 in this ROM ID bit position. The Bus Master write time slot dictates which devices remain in the selection process. Error—No slave devices responded during the read time slots. The general principle of this search process is to deselect slave devices at every conflicting bit position. At the end of each ROM Search process, the master has learned another ROM ID. A pass of search process takes 64 reading/selection cycles for the master to learn one device's ROM ID. Each reading/selection cycle, as noted above, consists of two Read time slots and a Write time slot. Subsequent search passes are performed identically to the last up until the point of the last decision. For details of Search ROM algorithm in the 1-Wire system, refer to the Book of iButton Standards. To speed up this ROM ID Search process, the 1-Wire Bus Master incorporates a Search ROM Accelerator. To enable the Search ROM accelerator, the SRA bit in the Command Register must be set immediately following the Reset sequence and issuance of the Search ROM command. Note that the receive buffer must empty before invoking SRA mode. After the bus master is placed in Search ROM Accelerator mode, each byte loaded into the transmit buffer contains one nibble (4 bits) worth of discrepancy decision data. The two slave read time slots are automatically generated by the bus master as a part of the transmit sequence. After four reading/selection cycles, the receive buffer data will reflect four newly acquired bits of the ROM ID and four corresponding bits flagging whether a discrepancy existed in a given bit position. Table 13-3 details the format for the transmit and receive data (when in Search ROM Accelerator mode). Table 13-3. Search ROM Accelerator Transmit/Receive Byte Sequence BYTE SEQUENCE Byte 1 Byte 2 BUFFER BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 Transmit Receive Transmit Receive r3 ID3 r7 ID7 x d3 x d7 r2 ID2 r6 ID6 x d2 x d6 r1 ID1 r5 ID5 x d1 x d5 r0 ID0 r4 ID4 x d0 x d4 Transmit Receive r63 ID63 x d63 r62 ID62 x d62 r61 ID61 x d61 r60 ID60 x d60 ••• Byte 16 rn = decision discrepancy data (write time slot selection data if ID discrepancy) IDn = selected ROM ID bit (rn if discrepancy occurred, otherwise read time slot 1) dn = discrepancy detected flag (ID discrepancy or no response) x = don't care data The CPU must send and receive 16 bytes of data to complete a single Search ROM pass on the 1-Wire bus. To perform a Search ROM sequence one starts with all decision discrepancy bits (rn) being 0. In case of bus error, all subsequent response bits IDn are 1s until the Search Accelerator is deactivated by clearing the SRA bit in the Command Register. Thus if ID63 and d63 are both 1, an error has occurred during the search process and the last sequence has to be repeated. Otherwise, ID63:0 is the ROM code of the device that has been found and addressed. For the next Search ROM sequence one reuses the previous set rn (for n = 0:63), changing to 1 only that bit position where the highest discrepancy was detected (dn flags). This process is repeated until the highest discrepancy occurs in the same bit position for two passes, then the next lower discrepancy flag is used for next search. When the Search ROM process is completed, the SRA bit should be cleared in order to release the 1-Wire Master from Search ROM Accelerator mode. 13-7 Maxim Integrated MAXQ Family User’s Guide 13.5.1 Accelerated ROM Search Example The following example should provide a better understanding of how the Search ROM Accelerator functionality allows the 1-Wire Master to identify four different devices on the 1-Wire bus with ROM IDs as shown (least significant bit first): ROM1 = 00110101.... ROM2 = 10101010.... ROM3 = 11110101.... ROM4 = 00010001.... 1) The host issues a reset pulse by writing 01h to the Command Register. All slave devices respond simultaneously with a presence detect. 2) The host issues a Search ROM command by writing F0h to the Transmit Buffer. The host must wait for RBF flag and read (empty) the Receive Buffer. 3) The host places the 1-Wire Master in Search ROM Accelerator mode by writing 02h to the Command Register. 4) The host writes 00h to Transmit Buffer and reads the return data from the Receive Buffer. This process is repeated for total of 16 bytes. The data read contains ROM4 in the ID bit locations and the discrepancy flags d0 and d2 are set. This can easily be seen by examining the ROM IDs bit by bit. The first discrepancy occurs in bit position 0 (d0). The bus master write time slot contains a 0, thus deselecting ROM2 and ROM3. A discrepancy between ROM1 and ROM4 then occurs in bit position 2 (d2), leaving only ROM4 in the search. The receive data is as follows (d0ID0 d1ID1 d2ID2 d3ID3 d4ID4 d5ID5 d6ID6 d7ID7 ....): 5) The host then deinterleaves the data to arrive at a ROM ID of 00010001... and discrepancy data (bold) of 10100000....with the last discrepancy at location d2. 6) The host writes 0x00h to the Command Register to exit accelerator mode. The host is now free to send a command or read data directly from this device. 7) Steps 1 to 6 are now repeated to find the next device on the bus. The 16 bytes of data transmitted this time are identical to ROM4 up until the last discrepancy flag (d2 in this case), which is inverted, and all higher order decision discrepancy data bits are set to 0 as shown: r0r1r2r3r4r5....= 001000..... For this search iteration, the receive data contains ROM1 in the ID bit locations, again with discrepancy flags d0 and d2 set. Receive Data = 10 00 10 01 00 00 00 01.... Receive Data = 10 00 11 01 00 01 00 01.... 8) Since the most significant discrepancy (d2) did not change, the next highest discrepancy (d0) is used for the next search r0r1r2r3r4r5....=100000..... Receive Data = 11 10 01 00 01 00 01 00.... Deinterleaving yields a ROM ID of 10101010.. (ROM2) and discrepancy flags of 11000000.. (d1 is the most significant flag). 9) The next search uses the ROM ID acquired in the previous search up until the most significant discrepancy: r0r1r2r3r4r5....=110000... Receive Data = 11 11 01 01 00 01 00 01.... Deinterleaving yields a ROM ID of 11110101.. (ROM3) and discrepancy flags of 11000000.. (d1 is the most significant flag). 10) At this point, the most significant discrepancy (d1) did not change so the next highest discrepancy (d0) should be used. However, d0 has now been reached for the second time, and since there are no lesser significant discrepancies possible, the search is completed and all four devices are identified. Maxim Integrated 13-8 MAXQ Family User’s Guide 13.6 1-Wire Transmit and Receive Operations All data transmitted and received by the 1-Wire Bus Master passes through the transmit/receive data buffer (internal register address A[2:0] = 001b). The data buffer combination for the transmit interface is composed of the Transmit Buffer and Transmit Shift Register. Each of these registers has a flag that can be used as an interrupt source. The Transmit Buffer Empty (TBE) flag is set when the Transmit Buffer is empty and ready to accept a new byte of data from the user. As soon as the data byte is written into the Transmit Buffer, TBE is cleared. The Transmit Shift Register Empty (TEMT) flag is set when the shift register has no data and is ready to load a new data byte from the Transmit Buffer. When a byte of data is transferred into the Transmit Shift Register, TEMT is cleared and TBE becomes set. To send a byte of data on the 1-Wire bus, the user writes the desired data to the Transmit Buffer. The data is moved to the Transmit Shift Register, where it is shifted serially onto the 1-Wire bus, least significant bit first. When the Transmit Shift Register is empty, new data will be transferred from the Transmit Buffer (if available) and the serial process repeats. Note that the 1-Wire protocol requires a reset before any bus communication. The data buffer combination for the receive interface is composed of the Receive Buffer and the Receive Shift Register. The receive registers can also generate interrupts. The Receive Shift Register Full (RSRF) flag is set at the start of data being shifted into the register, and is cleared when the Receive Shift Register is empty. The Receive Buffer Full (RBF) flag is set when data is transferred from the Receive Shift Register into the Receive Buffer and is cleared after the CPU reads the register. If RBF is set, and another byte of data is received in the Receive Shift Register, the Receive Shift Register will hold the new byte and wait until the user reads the Receive Buffer, clearing the RBF flag. Thus, if both RSRF and RBF are set, no further transmissions should be made on the 1-Wire bus, or else data may be lost, as the byte in the Receive Shift Register will be overwritten by the next received data. To read data from a slave device, the Bus Master must first be ready to transmit data depending on commands in the Command Register already set up by the CPU. Data is retrieved from the bus in a similar fashion to a write operation. The CPU initiates a read operation by writing FFh data to the Transmit buffer. The data that will then be shifted into the Receive Shift Register is the wired-AND of the Bus Master write data (FFh) and the data from the slave device. When the Receive Shift Register is full, the data is transferred to the Receive Buffer (if RBF = 0), where the CPU can read it. Additional bytes can be read by sending FFh again. If the slave device is not ready to respond to read request, the data received the by the Bus Master will be identical to that which was transmitted (FFh). 13.6.1 1-Wire Transmit/Receive Buffer (OWA = 001b) Bit # 7 6 5 Reset 0 0 0 0 Access rw rw rw rw Name 4 3 2 1 0 0 0 0 0 rw rw rw rw Input/Output Buffer (8 Bits) r = read, w = write Bits 7 to 0: 1-Wire Transmit/Receive Buffer (OWA = 001b.[7:0]). All data transmit and receive activity of the 1-Wire Bus Master passes through the transmit/receive data buffer. The data buffer is double buffered with separate transmit and receive buffers. Double buffering of the transmit buffer and receive buffer does not work when SRA (Search ROM Accelerator) mode is active. Writing to the data buffer connects the Transmit Buffer to the data bus while reading connects the Receive Buffer to the data bus. 13-9 Maxim Integrated MAXQ Family User’s Guide 13.7 1-Wire Bus Master Interrupts The 1-Wire Bus Master can be configured to generate an interrupt request to the CPU on the occurrence of a number of 1-Wire related events or conditions. These include the following: Presence Detect, Transmit Buffer Empty, Transmit Shift Register Empty, Receive Buffer Full, Receive Shift Register Full, 1-Wire Short, and 1-Wire Low. Each of these potential 1-Wire interrupt sources has a corresponding enable bit and flag bit. Each flag bit in the Interrupt Flag register (A2:A0 = 010b) is set, independent of the interrupt enable bit, when the associated event or condition occurs. For the interrupt flag to generate an interrupt request to the CPU, the individual enable bit for the source along with the 1-Wire Bus Master interrupt enable bit (EOWMI; Control Register bit 7) must be set to a logic 1 as well as having interrupts enabled modularly and globally. To clear the 1-Wire Bus Master Interrupt, a read of the Interrupt Flag Register must always be performed by software. The Interrupt Enable and Interrupt Flag registers are documented below. 13.7.1 1-Wire Interrupt Flag Register (OWA = 010b) Bit # 7 6 5 4 3 2 1 0 Name OW_LOW OW_SHORT RSRF RBF TEMT TBE PDR PD Reset 0 0 0 0 1 1 1 0 Access r r r r r r r r r = read, w = write Bit 7: 1-Wire Low Interrupt (OW_LOW). This flag is set to 1 when the OW line is low while the master is in idle, signaling that a slave device has issued a presence pulse on the OW line. When this bit is 0, it shows that the OW line is high while the master is in idle. A read to the Interrupt Flag register clears this bit if OW is no longer a low while the master is idle. Bit 6: 1-Wire Short Interrupt (OW_SHORT). This flag is set to 1 when the OW line was low before the master was able to send out the beginning of a reset or a time slot. When this flag is 0, it indicates that the OW line was high prior to all resets and time slots. A read to the Interrupt Flag register clears this bit. Bit 5: Receive Shift Register Full (RSRF). This flag is set to 1 when there is a byte of data waiting in the Receive Shift register. When this bit is 0, it indicates that the Receive Shift register either empty or currently receiving data. This bit is cleared by the hardware when data in the Receive Shift register is transferred to the Receive Buffer. A read to the Interrupt Flag register has no effect on this bit. Bit 4: Receive Buffer Full (RBF). This flag is set to 1 when there is a byte of data waiting to be read in the Receive Buffer. When this bit is 0, it indicates that the Receive Buffer has no new data to be read. This bit is cleared when the byte is read from the Receive Buffer. A read to the Interrupt Flag register has no effect on this bit. However, following a read of the Interrupt Flag register while Enable Receive Buffer Full Interrupt (ERBF) is set to 1, if the ERBF is not cleared and the value is not read from the Receive Buffer, the interrupt will fire again. Bit 3: Transmit Shift Register Empty (TEMT). This flag is set to 1 when there is nothing in the Transmit Shift register and is ready to receive the next byte of data to be transmitted from the Transmit Buffer. When this bit is 0, it indicates that the Transmit Shift Register is busy sending out data. This bit is cleared when data is transferred from the Transmit Buffer to the Transmit Shift register. A read to the Interrupt Flag Register has no effect on this bit. Bit 2: Transmit Buffer Empty (TBE). This flag is set to 1 when there is nothing in the Transmit Buffer and is ready to receive the next byte of data. When it is 0, it indicates that the transmit buffer is waiting for the transmit shift register to finish sending its current data before updating it. This bit is cleared when data is written to the Transmit Buffer. A read to the Interrupt Flag register has no effect on this bit. Bit 1: Presence-Detect Result (PDR). When a presence-detect interrupt occurs, this bit reflects the result of the presence detect read. The bit is 0 if a slave device was found, or 1 if no device was found. Reading the Interrupt Flag register does not affect the state of this bit. Bit 0: Presence Detect (PD). After a 1-Wire reset has been issued, this flag is set to 1 after the appropriate time for a presence-detect pulse to have occurred. This flag is 0 when the master has not recently issued a presence detect. This bit is cleared when the Interrupt Flag register is read. Maxim Integrated 13-10 MAXQ Family User’s Guide 13.7.2 1-Wire Interrupt Enable Register (OWA = 011b) Bit # 7 6 5 4 3 2 1 0 Name EOWL EOWSH ERSF ERBF ETMT ETBE — EPD Reset 0 0 0 0 0 0 0 0 Access rw rw rw rw rw rw r rw r = read, w = write Bit 7: Enable 1-Wire Low Interrupt (EOWL). Setting this bit to logic 1 enables the 1-Wire low interrupt. If both EOWMI and EOWL are set, OWMI is asserted when OW_LOW flag is set. Clearing this bit disables OW_LOW as an active interrupt source. Bit 6: Enable 1-Wire Short Interrupt (EOWSH). Setting this bit to logic 1 enables the 1-Wire short interrupt. If both EOWMI and EOWSH are set, OWMI is asserted when OW_SHORT flag is set. Clearing this bit disables OW_SHORT as an active interrupt source. Bit 5: Enable Receive Shift Register Full Interrupt (ERSF). Setting this bit to logic 1 enables the receive shift register full interrupt. If both EOWMI and ERSF are set, OWMI is asserted when RSRF flag is set. Clearing this bit disables RSRF as an active interrupt source. Bit 4: Enable Receive Buffer Full Interrupt (ERBF). Setting this bit to logic 1 enables the receive buffer full interrupt. If both EOWMI and ERBF are set, OWMI is asserted when RBF flag is set. Clearing this bit disables RBF as an active interrupt source. Bit 3: Enable Transmit Shift Register Empty Interrupt (ETMT). Setting this bit to logic 1 enables the transmit shift register empty interrupt. If both EOWMI and ETMT are set, OWMI is asserted when TEMT flag is set. Clearing this bit disables TEMT as an active interrupt source. Bit 2: Enable Transmit Buffer Empty Interrupt (ETBE). Setting this bit to logic 1 enables the transmit buffer empty interrupt. If both EOWMI and ETBE are set, OWMI is asserted when TBE flag is set. Clearing this bit disables TBE as an active interrupt source. Bit 1: Reserved Bit 0: Enable Presence Detect Interrupt (EPD). Setting this bit to a logic 1 enables the presence detect interrupt. If both EOWMI and EPD are set, OWMI will be asserted after an appropriate amount of time has passed for a presence-detect pulse to have occurred, whenever a 1-Wire Reset is sent while the presence-detect flag (PD) is also set. Clearing this bit disables the presence detect as an active interrupt source. 13.8 I/O Signaling The 1-Wire bus requires strict signaling protocols to ensure integrity. The five protocols used by the 1-Wire Bus Master are initialization sequence (Reset Pulse followed by Presence Pulse), Write 0, Write 1, Read 0, and Read 1. The Bus Master initiates all of these types of signaling except the presence pulse. Figure 13-2 illustrates the details of these signaling protocols. The initialization sequence is required to begin any communication with the bus slave devices. The 1-Wire Bus Master transmits a reset pulse for tRSTL. The 1-Wire bus line is then pulled high by the pullup resistor. After detecting the rising edge on the OWOUT pin, the slave device waits for tPDH and then transmits the Presence Pulse for tPDL. A Presence Pulse following a Reset Pulse indicates the slave device is ready to accept a ROM command. The Bus Master samples the bus at tPDS after the slave device responds to test for a valid presence pulse. The result of this sample is stored in the PDR bit of the Interrupt Flag Register. The reset time slot ends tRSTH after the Bus Master releases the bus. A write time slot is initiated when the 1-Wire Bus Master pulls the 1-Wire bus line from a logic high (inactive) level to a logic low level. The Bus Master generates a Write 1 time slot by releasing the line at tLOW1 and allowing the line to pullup to logic high level. On the other hand, the line is held low for tLOW0 to generate a Write 0 time slot. A slave device samples the 1-Wire bus line between 15µs and 60µs after the line falls. If the line is high when sampled, a Write 1 occurs. If the line is low when sampled, a Write 0 occurs. A read time slot is initiated when the 1-Wire Master pulls the bus low for at least 1(s and then releases it. The slave device continues to hold the line low for up to 60µs if it is responding with a 0, otherwise it releases it immediately. The Bus Master samples the data tRDV from the start of the read time slot. If the line is high when sampled, a Read 1 occurs. If the line is low when sampled, a Read 0 occurs. The Bus Master ends the read slot after tSLOT. 13-11 Maxim Integrated MAXQ Family User’s Guide INITIALIZATION SEQUENCE tRSTH tRSTL tPDH tPDL VDD OWOUT GND tPDS WRITE TIME SLOT tWRITE 1 SLOT tWRITE 0 SLOT tLOW0 tLOW1 >1µs VDD OWOUT GND 15µs 15µs 30µs 15µs 15µs SLAVE SAMPLING 30µs SLAVE SAMPLING READ TIME SLOT tREAD 0 SLOT tREAD 1 SLOT VDD OWIN GND 1µs 1µs tRDV BUS MASTER SAMPLING tRDV MASTER ACTIVE LOW MASTER AND SLAVE ACTIVE LOW SLAVE ACTIVE LOW RESISTOR PULLUP BUS MASTER SAMPLING Figure 13-2. 1-Wire Bus Signaling in Standard Mode Maxim Integrated 13-12 MAXQ Family User’s Guide SECTION 14: REAL-TIME CLOCK MODULE This section contains the following information: 14.1 RTC Alarm Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14-3 14.1.1 Time-of-Day Alarm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14-3 14.1.2 Sub-Second Alarm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14-3 14.1.3 System Wakeup by Time-of-Day or Sub-Second Interval Alarm . . . . . . . . . . . . . . . .14-3 14.2 RTC Trim Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14-3 14.3 RTC Register Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14-5 14.3.1 Busy Bit Write Signaling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14-5 14.3.2 Ready Bit Read Signaling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14-5 14.3.3 RTC Count Register Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14-5 14.3.4 RTC Alarm Register Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14-5 14.3.5 RTC Trim Register Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14-5 14.4 RTC Peripheral Registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14-6 14.4.1 RTC Control Register (RCNT) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14-6 14.4.2 RTC Seconds High Register (RTSH) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14-7 14.4.3 RTC Seconds Low Register (RTSL) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14-8 14.4.4 RTC Sub-Seconds Register (RTSS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14-8 14.4.5 RTC Alarm Seconds High Register (RASH) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14-9 14.4.6 RTC Alarm Seconds Low Register (RASL) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14-9 14.4.7 RTC Sub-Second Alarm Register (RSSA) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14-10 14.4.8 RTC Trim Register (RTRM) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14-10 LIST OF FIGURES Figure 14-1. RTC Functional Block Diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14-2 Figure 14-2. RTC Digital-Trim Facility Block Diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14-4 Figure 14-3. Digital Trim Pulse Calibration Diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14-4 14-1 Maxim Integrated MAXQ Family User’s Guide SECTION 14: REAL-TIME CLOCK MODULE The real-time clock (RTC) is a binary timer that keeps the time of day and provides time-of-day and sub-second alarm functionality in the form of system interrupts. The RTC consists of cascaded 32-bit and 8-bit ripple counters that respectively represent absolute seconds (~136 years) and sub-seconds (in 1/256 second resolution). The 8-bit sub-second counter increments with each 256Hz clock tick derived from the 32.768kHz oscillator. A separate auto-reload sub-second alarm counter can be used to generate interval alarms with granularity of 1/256 seconds. The 32-bit seconds counter increments with each rollover of the 8-bit sub-second counter. The 32-bit counter can be used with the programmable time-of-day comparison alarm to provide a single event timer. The RTC must be stopped for the counter registers to initially be written, but once enabled, the RTC counts continuously as long as it is enabled and does not stop for reads of the counter registers. The RTC also supports a digital trim facility for those applications requiring high accuracy. User-application code accesses the RTC via eight peripheral registers. The 16-bit RTC Control register (RCNT) provides the control and status for RTC functions, including RTC read/write access controls, clock selection/control, RTC enable, square-wave output enable, alarm enables, and their interrupt flags. The seconds count information is set or initialized only by writing to the 16-bit RTC Second High and the 16-bit RTC Second Low register (RTSH and RTSL registers). Similarly, the 8-bit RTC Sub-Second register (RTSS) can be used to establish and access the sub-second counter. The Time-of-Day alarm is composed of the RASH:RASL register pair and the interval alarm is programmable via the RSSA register. The digital trim value is held in the RTRM register. Figure 14-1 shows a functional diagram of a full-featured RTC. Certain MAXQ microcontroller devices may be equipped with a subset of the RTC functionality described. Refer to the individual device data sheet or supplemental user guide for more information. 1/512Hz 32kHz CLK DIVIDE BY 128(27) 1/256Hz DIGITAL TRIM RTSS RTSL RTSH 1Hz RTCE COMPARE TSGN, TRM4: 0 RTRM ASE RSSA RCNT RASL RASH ALSF ALDF ADE FT 1/512Hz SQE SQUAREWAVE OUT Figure 14-1. RTC Functional Block Diagram Maxim Integrated 14-2 MAXQ Family User’s Guide 14.1 RTC Alarm Functions The RTC provides time-of-day and sub-second interval alarm functions. The time-of-day alarm, when enabled, occurs based upon matching of the least significant 20 bits of the RTC seconds counter information (RTSH:RTSL) with the least significant 20 bits of the alarm register values (RASH:RASL) defined by the user. The sub-second interval alarm provides an auto-reload timer that is driven by the untrimmed 256Hz clock source. 14.1.1 Time-of-Day Alarm The RTC Alarm Second High and RTC Alarm Second Low registers (RASH and RASL) provide a programmable, 20-bit time-of-day alarm function. The 20 bits of the time-of-day alarm should be programmed with the desired value to match with the least significant 20 bits of the RTC seconds counter for the purpose of triggering an alarm. The least significant 16 bits of the time-of-day alarm are programmable in the RASL register, while the most significant 4 bits of the alarm value are programmable in the lowest 4 bits of the RASH register. The time-of-day alarm can be programmed to any future value between 1 second and 12 days relative to the current time with a resolution of 1 second. The time-of-day alarm must be disabled before the changing the time-of-day alarm registers. The time-of-day alarm is a single event alarm that sets the ALDF flag to 1 when an RTSS rollover occurs and the contents of RTSH and RTSL counter registers match the 20-bit value set in the RASH and RASL alarm registers. Setting the ALDF bit causes an interrupt request to the processor if the ADE bit and the system interrupt enable are set. 14.1.2 Sub-Second Alarm The RTC Sub-Second Alarm (RSSA) register is used to store the sub-second interval alarm value for the sub-second alarm function. The RSSA register is independent of the RTC counter value and is configurable per MAXQ device as necessary to 16 bits to achieve sub-second interval alarms needed by various applications. The default RSSA register size is 8 bits wide, allowing a maximum interval alarm of 1 second and a programming resolution of ~3.9 milliseconds (1/256Hz). The sub-second interval alarm must be disabled (ASE = 0 and BUSY = 0) before changing the interval alarm value. The delay (uncertainty) associated with the enabling of the interval sub-second alarm is up to one period of the sub-second clock (1/256Hz = ~3.9ms). Thus, the same uncertainty is associated with the first interval alarm. Thereafter, if the interval alarm remains enabled, the alarm triggers after each RSSA defined sub-second interval. This is due to the fact that the sub-second alarm is constructed as an auto-reload counter such that the RSSA alarm value is reloaded to the counter only on a rollover. Note that enabling the sub-second alarm (ASE = 1) with sub-second interval alarm register programmed to 0's results in the maximum sub-second alarm interval (1 second if RSSA = 8 bits wide). The sub-second interval counter sources its clock from the 32kHz/128 counter before the possible insertion of pulses by the digitaltrim facility. This is done to keep the alarm interval consistent and avoid deviations in the interval that would automatically be created each time the digital-trim facility were to add/subtract clock pulses. 14.1.3 System Wakeup by Time-of-Day or Sub-Second Interval Alarm The time-of-day alarm or interval alarm can wake up the system from Stop mode if not already awake. The wakeup function is allowed only when these interrupts have not been masked at all levels. The time-of-day and interval alarms also qualify as valid Power Management Mode switchback sources. 14.2 RTC Trim Function The uncompensated accuracy of the RTC is a function of the attached crystal (and its respective temperature drift characteristics within the end system). To accommodate those applications requiring high accuracy, a digital-trim facility is made accessible to the user. The trim facility allows extra clocks to be inserted or removed at the 256Hz stage of the divider chain. Five trim bits (TRM4:0) are used to control the trim adjustment, and the sign bit (TSGN) designates whether pulses should be inserted (TSGN = 0) or deleted (TSGN = 1). Every 16 seconds, the five trim bits are added to the previous phase accumulator value. Whenever the phase accumulator generates a carry-out from the addition, the output of the 512Hz stage is selected instead of the 256Hz stage if positive trim is selected, effectively adding 128 extra 32kHz clocks. If negative trim is selected, the 256Hz stage output pulse is masked in order to effectively subtract 128 32kHz clocks. The 512Hz or 1Hz output can be made accessible on an external pin as controlled by the FT and SQE bits. Figure 14-2 shows a block diagram illustrating the digital-trim facility. Figure 14-3 shows a representative timing diagram. The minimum adjustment (00001h) would result in a phase accumulator carry-out every 32 x 16 seconds = 512 seconds or adding/subtracting 1 pulse (=128 cycles of 32.768kHz) every 512 seconds. This would be an adjustment of 128 / (32,768Hz x 512s) = ±7.63ppm. The maximum adjustment would be achieved by programming TRM4:0 = 11111b. This would result in an adjustment of 31 extra pulses per 512-second interval or (31 x 128) / (32,768Hz x 512s) = ±236.5ppm. This range of adjustment should be satisfactory to cover the temperature drift characteristics of most 32kHz crystals over the industrial temperature range. 14-3 Maxim Integrated MAXQ Family User’s Guide 256Hz MUX 256Hz 512Hz TSGN VALID FOR ONE 256Hz CYCLE EVERY 16SEC. THEN CLEARED TO 0. CARRY-OUT 5-BIT PHASE ACCUMULATOR 16-SECOND CLOCK TRM4:0 Figure 14-2. RTC Digital-Trim Facility Block Diagram 16SEC CLOCK 256Hz CLOCK 512Hz CLOCK ACCUMULATOR CARRY-OUT (CO) 256Hz MUX SELECT 1 1 POSITIVE CAL (S = 0) 256Hz OUTPUT POSITIVE CAL (S = 0) 128Hz OUTPUT NEGATIVE CAL (S = 1) 256Hz OUTPUT NEGATIVE CAL (S = 1) 128Hz OUTPUT Figure 14-3. Digital Trim Pulse Calibration Diagram Maxim Integrated 14-4 MAXQ Family User’s Guide 14.3 RTC Register Access Since RTC registers and register bits must be used in the 32kHz clock domain and also be accessible in the system clock domain, a handshaking or signaling protocol is implemented to simplify user access. 14.3.1 Busy Bit Write Signaling The BUSY bit of the RTC Control (RCNT) register is a read-only status bit. Hardware sets the BUSY bit when any of the following conditions occur: 1) system reset; 2) software changes the state of any the following RTC bits (RTCE, ASE, ADE); 3) software writes to any RTC count register (RTSS, RTSL, RTSH). When the BUSY bit is set by hardware, writes to the referenced RTC control bits and count registers are blocked by hardware. The BUSY bit remains active until a synchronized 32kHz version of the register (or bit) is in place. This takes place when the next rising edge of the 32kHz clock occurs, which means that the BUSY bit is set for a duration no longer than one 32kHz clock = ~30.5µs. Once the BUSY bit is cleared to 0, additional writes can be performed as permitted by individual count or alarm-enable bits. 14.3.2 Ready Bit Read Signaling The Ready (RDY) bit of the RTC Control (RCNT) register provides a mechanism for determining when the RTC count registers are stable and may be reliably read. The RDY bit is cleared by hardware approximately one 32kHz clock before the ripple occurs through the RTC counter chain (RTSS, RTSL, RTSH) and is set once again immediately after the ripple occurs. The period of the RDY bit set/clear activity (as controlled by hardware) is therefore 1/256Hz = 3.9ms, providing a very large window during which the RTC count registers may be read. The RDY bit can be cleared by software at any time and remains clear until set by hardware again. A separate Ready Enable (RDYE) bit is provided in the RCNT register for the purpose of generating an interrupt whenever the RDY bit is set by hardware. This interrupt can be used to signal the start of a new RTC read window. When RDYE is set to a 1 and RDY becomes set, an interrupt request is generated if enabled globally and modularly. When RDYE is cleared to 0, the setting of the RDY bit does not generate an interrupt. 14.3.3 RTC Count Register Access The RTC Count registers (RTSS, RTSL, RTSH) should only be read when RDY = 1. Data read from these registers when RDY = 0 should be considered as invalid. To write the RTC count registers, the RTC Enable (RTCE) bit must be cleared to 0. Clearing of the RTCE bit is permitted only when the Write Enable (WE) bit is set to 1 and is governed by the BUSY bit signaling process (i.e., the BUSY bit is deasserted once a synchronized 32kHz version of the bit is in place). Writes to each RTC count register should also obey the rules associated with BUSY bit signaling. 14.3.4 RTC Alarm Register Access The RTC Alarm registers (RSSA, RASL, RASH) are read-accessible at any time. To write the RTC alarm register, the respective alarm enable (ASE or ADE) bit must be cleared to 0. Clearing these bits requires monitoring the BUSY bit to assess completion of the write. Once the respective alarm enable is cleared, the associated RTC alarm register(s) can be freely written by user code. 14.3.5 RTC Trim Register Access These RTC Trim bits (TSGN, TRM4:0) are read-accessible at any time. Write access to these bits requires that the Write Enable (WE) bit be set to logic 1 and is governed by the BUSY bit signaling process. 14-5 Maxim Integrated MAXQ Family User’s Guide 14.4 RTC Peripheral Registers 14.4.1 RTC Control Register (RCNT) Bit # 15 14 13 12 11 10 9 8 Name WE X32D ACS — — — FT SQE 0 1 0 0 0 0 0 0 Power-On Reset System Reset 0 u u 0 0 0 0 0 Access rw rs rs r r r rw rw Bit # 7 6 5 4 3 2 1 0 ALSF ALDF RDYE RDY BUSY ASE ADE RTCE 0 0 0 0 1 0 0 0 Name Power-On Reset System Reset u u 0 0 1 u u u Access rw rw rw rw r rw rw rs r = read, w = write, s = special, u = unaffected Bit 15: RTC Write Enable (WE). This register bit serves as an additional protection mechanism against unintentional writes to the RTC enable bit (RTCE). This bit must be set to logic 1 to gain write access to the RTCE bit. When this bit is configured to logic 0, the RTCE bit is read-only. Bit 14: 32kHz Crystal Oscillator Disable (X32D). Setting this bit to logic 1 disables the internal oscillator circuitry connected between the 32kHz crystal pins. In this configuration, the RTC can be driven directly by an external clock signal provided on 32KIN or CX1 pin. Clearing this bit to logic 0 enables the internal crystal oscillator circuitry. When the internal oscillator circuitry is enabled, a warmup delay could be required before the 32kHz oscillator begins running. The exact length of this warmup delay can vary from among devices. Refer to the data sheet and user’s guide supplement for the specific MAXQ device for details. Bit 13: Alternate Clock Select (ACS). This bit enables the HFClk/128 clock to drive the RTC in place of the 32kHz clock. This bit is provided for those applications where a 32kHz clock may not be present. This bit may only be changed when RTCE = 0. When ACS = 1, the RTC is effectively halted anytime the high-frequency oscillator is disabled (e.g., stop mode). Bits 12, 11, 10: Reserved Bit 9: RTC Frequency Test (FT). This register bit selects the frequency output that is possible on the SQW pin if the square-wave output is enabled. Setting FT = 1 selects the 512Hz output (when SQE = 1), while FT = 0 selects the 1Hz output (when SQE = 1). This bit has no function if the square-wave output is disabled. Bit 8: RTC Square-Wave Output Enable (SQE). Setting this bit to logic 1 enables either the 1Hz tap or the 512Hz tap of the RTC to the SQW pin. When cleared to 0, the SQW pin is not driven by the RTC. Bit 7: Alarm Sub-Second Flag (ALSF). This bit is set when the subsecond timer has been reloaded by the RSSA register. Setting the ALSF causes an interrupt request to the CPU if ASE = 1 and interrupts are enabled at the system level. Bit 6: Alarm Time-of-Day Flag (ALDF). This bit is set when the contents of RTSH and RTSL counter registers match the 20-bit value in the RASH and RASL alarm registers. Setting the ALDF will cause an interrupt request to the CPU if the ADE is set and interrupts are allowed at the system level. This alarm is qualified as a stop mode wakeup source and a potential switchback function if the interrupt has not been masked. Bit 5: RTC Ready Enable (RDYE). Setting this bit to 1 allows a system interrupt to be generated when RDY becomes active (if interrupts are enabled globally and modularly). Clearing this bit to 0 disables the RDY interrupt. Bit 4: RTC Ready (RDY). This bit is set to 1 by hardware when the RTC count registers have updated. It can be cleared to 0 by software at any time. It is also cleared to 0 by hardware just prior to an update of the RTC count register. This bit can generate an interrupt if the RDYE bit is set to 1. Maxim Integrated 14-6 MAXQ Family User’s Guide Bit 3: RTC Busy (BUSY). This bit is set to 1 by hardware when any of the following conditions occur: 1) system reset, 2) software writes to RTC count registers, or 3) software changes RTCE, ASE, or ADE. For conditions 2 and 3, the write or change should not be considered complete until hardware clears the BUSY bit. This is an indication that 32kHz synchronized version of the register bit(s) is in place. Bit 2: Alarm Sub-Second Enable (ASE). The ASE bit is the RTC’s subsecond timer enable and must be set to logic 1 for the sub-second alarm to generate a system interrupt request. When the ASE is cleared to logic 0, the sub-second alarm is disabled, and no interrupt is generated even if the alarm is set. Bit 1: Alarm Time-of-Day Enable (ADE). The ADE bit is the RTC’s time-of-day alarm enable and must be set to logic 1 for the alarm to generate a system interrupt request. When the ADE is cleared to logic 0, the time-of-day alarm is disabled and no interrupt is generated on a time-of-day alarm (RASH:RASL) match. Bit 0: Real-Time Clock Enable (RTCE). Setting this bit to logic 1 activates the RTC by allowing the 256Hz clock to the ripple counters. Clearing this bit to logic 0 disables the clock. This bit is writable only when WE (RCNT.15) = 1. 14.4.2 RTC Seconds High Register (RTSH) Bit # Name 15 14 13 12 11 10 9 8 RTSH.15 RTSH.14 RTSH.13 RTSH.12 RTSH.11 RTSH.10 RTSH.9 RTSH.8 Power-On Reset 0 0 0 0 0 0 0 0 System Reset u u u u u u u u Access s s s s s s s s Bit # 7 6 5 4 3 2 1 0 Name RTSH.7 RTSH.6 RTSH.5 RTSH.4 RTSH.3 RTSH.2 RTSH.1 RTSH.0 Power-On Reset 0 0 0 0 0 0 0 0 System Reset u u u u u u u u Access s s s s s s s s s = special, u = unaffected Bits 15 to 0: RTC Seconds High (RTSH.[15:0]). This register contains the most significant bits for the 32-bit second counter. The RTC is a ripple counter that consists of a cascaded 32-bit second counter (RTSH, RTSL) and an 8-bit sub-second counter (RTSS). This register is write-accessible when RTCE = 0 and BUSY = 0, and should be read-only when RDY = 1. 14-7 Maxim Integrated MAXQ Family User’s Guide 14.4.3 RTC Seconds Low Register (RTSL) Bit # Name 15 14 13 12 11 10 9 8 RTSL.15 RTSL.14 RTSL.13 RTSL.12 RTSL.11 RTSL.10 RTSL.9 RTSL.8 Power-On Reset 0 0 0 0 0 0 0 0 Reset u u u u u u u u Access s s s s s s s s Bit # 7 6 5 4 3 2 1 0 RTSL.7 RTSL.6 RTSL.5 RTSL.4 RTSL.3 RTSL.2 RTSL.1 RTSL.0 Name Power-On Reset 0 0 0 0 0 0 0 0 Reset u u u u u u u u Access s s s s s s s s s = special, u = unaffected Bits 15 to 0: RTC Seconds Low (RTSL.[15:0]). This register contains the least significant bits for the 32-bit second counter. The RTC is a ripple counter that consists of a cascaded 32-bit second counter (RTSH, RTSL) and an 8-bit sub-second counter (RTSS). This register is write-accessible when RTCE = 0 and BUSY = 0, and should be read-only when RDY = 1. 14.4.4 RTC Sub-Seconds Register (RTSS) Bit # Name 7 6 5 4 3 2 1 0 RTSS.7 RTSS.6 RTSS.5 RTSS.4 RTSS.3 RTSS.2 RTSS.1 RTSS.0 Power-On Reset 0 0 0 0 0 0 0 0 Reset u u u u u u u u Access s s s s s s s s s = special, u = unaffected Bits 7 to 0: RTC Sub-Seconds (RTSS.[7:0]). This ripple counter represents 1/256 second resolution for the RTC, and its content is incremented with each 256Hz clock tick derived from the 32.768 kHz oscillator (or alternate clock source if ACS = 1). When the RTSS counter rolls over, its output is used to drive the 32-bit seconds counter. This register is write-accessible when RTCE = 0 and BUSY = 0, and should be read-only when RDY = 1. Maxim Integrated 14-8 MAXQ Family User’s Guide 14.4.5 RTC Alarm Seconds High Register (RASH) Bit # 7 6 5 4 3 2 1 0 Name — — — — RASH.3 RASH.2 RASH.1 RASH.0 Reset 0 0 0 0 0 0 0 0 Access r r r r rs rs rs rs r = read, s = special Bits 7 to 4: Reserved Bits 3 to 0: RTC Alarm Seconds High (RASH.[3:0]). This register contains the most significant bits for the 20-bit time-of-day alarm. The time-of-day alarm is formed by the RASH and the RASL registers. The 20 bits of the RASH:RASL value are compared against the least significant 20 bits of the RTSH:RTSL seconds value for generating a time-of-day alarm. This register is write-accessible only when ADE = 0 and BUSY = 0. 14.4.6 RTC Alarm Seconds Low Register (RASL) Bit # 15 14 13 12 11 10 9 8 Name RASL.15 RASL.14 RASL.13 RASL.12 RASL.11 RASL.10 RASL.9 RASL.8 Reset 0 0 0 0 0 0 0 0 Access rs rs rs rs rs rs rs rs Bit # 7 6 5 4 3 2 1 0 Name RASL.7 RASL.6 RASL.5 RASL.4 RASL.3 RASL.2 RASL.1 RASL.0 Reset 0 0 0 0 0 0 0 0 Access rs rs rs rs rs rs rs rs r = read, s = special Bits 15 to 0: RTC Alarm Seconds Low (RASL.[15:0]). This register contains the least significant bits for the 24-bit time-of-day alarm. The time-of-day alarm is formed by the RASH and the RASL registers, and only the lower 20 bits are meaningful for the alarm function. The lower 20 bits of the 24-bit RASH:RASL value are compared against the least significant 20 bits of the RTSH:RTSL seconds value for generating a time-of-day alarm. This register is write-accessible only when ADE = 0 and BUSY = 0. 14-9 Maxim Integrated MAXQ Family User’s Guide 14.4.7 RTC Sub-Second Alarm Register (RSSA) Bit # 15 14 13 12 11 10 9 8 Name RSSA.15 RSSA.14 RSSA.13 RSSA.12 RSSA.11 RSSA.10 RSSA.9 RSSA.8 Reset 0 0 0 0 0 0 0 0 Access rs rs rs rs rs rs rs rs Bit # 7 6 5 4 3 2 1 0 Name RSSA.7 RSSA.6 RSSA.5 RSSA.4 RSSA.3 RSSA.2 RSSA.1 RSSA.0 Reset 0 0 0 0 0 0 0 0 Access rs rs rs rs rs rs rs rs r = read, s = special Bits 15 to 0: RTC Sub-Second Alarm (RSSA.[15:0]). This register contains the reload value for the sub-second alarm. The ALSF bit is set when an auto-reload occurs. The width of the RSSA register for any given MAXQ microcontroller and hence, the longest programmable interval, is device dependent. This register is write-accessible only when ASE = 0 and BUSY = 0. 14.4.8 RTC Trim Register (RTRM) Bit # 7 6 5 4 3 2 1 0 Name — — TSGN TRM4 TRM3 TRM2 TRM1 TRM0 Power-On Reset 0 0 0 0 0 0 0 0 Reset 0 0 u u u u u u Access r r rs rs rs rs rs rs r = read, s = special, u = unaffected Bits 7 and 6: Reserved Bit 5: Trim Sign Bit (TSGN). This register bit selects whether the trim calibration for the RTC is positive (TSGN = 0) or negative (TSGN = 1). The trim bits are always readable, but are write-accessible only when WE = 1. Bits 4 to 0: Trim Calibration Bits (TRM[4:0]). These register bits provide a binary value between 0b–31b, which is used for accumulation every 16 seconds. The carry-out of the accumulation determines when an additional 128 32kHz-input clock cycles are added/subtracted to the RTC counter chain. The trim bits are always readable, but are write-accessible only when WE = 1. Maxim Integrated 14-10 MAXQ Family User’s Guide SECTION 15: TEST ACCESS PORT (TAP) This section contains the following information: 15.1 TAP Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15-2 15.2 TAP State Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15-2 15.2.1 Test-Logic-Reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15-2 15.2.2 Run-Test-Idle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15-2 15.2.3 IR-Scan Sequence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15-3 15.2.4 DR-Scan Sequence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15-4 15.3 Communication via TAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15-5 15.3.1 TAP Communication Examples—IR-Scan and DR-Scan . . . . . . . . . . . . . . . . . . . . . .15-5 LIST OF FIGURES Figure 15-1. TAP Controller State Diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15-3 Figure 15-2. TAP and TAP Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15-5 Figure 15-3. TAP Controller Debug Mode IR-Scan Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15-6 Figure 15-4. TAP Controller Debug Mode DR-Scan Example . . . . . . . . . . . . . . . . . . . . . . . . . . . .15-7 LIST OF TABLES Table 15-1. Instruction Register Content vs. TAP Controller State . . . . . . . . . . . . . . . . . . . . . . . . .15-3 Table 15-2. Instruction Register (IR2:0) Encodings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15-4 15-1 Maxim Integrated MAXQ Family User’s Guide SECTION 15: TEST ACCESS PORT (TAP) The MAXQ microcontroller incorporates a Test Access Port (TAP) and TAP controller for communication with a host device across a 4-wire synchronous serial interface. The TAP can be used by MAXQ microcontrollers to support in-system programming and/or in-circuit debug. The TAP is compatible with the JTAG IEEE standard 1149, and is formed by four interface signals, as described in the following table. For detailed information on the TAP and TAP controller, refer to IEEE STD 1149.1 "IEEE Standard Test Access Port and Boundary-Scan Architecture." EXTERNAL PIN SIGNAL FUNCTION TDO (Test Data Output) Serial-Data Output. This signal is used to serially transfer internal data to the external host. Data is transferred least significant bit first. Data is driven out only on the falling edge of TCK, only during TAP Shift-IR or Shift-DR states and is otherwise inactive. TDI (Test Data Input) Serial-Data Input. This signal is used to receive data serially transferred by the host. Data is received least significant bit first and is sampled on the rising edge of TCK. TDI is weakly pulled high internally when TAP = 1. TCK (Test Clock Input) Serial Shift Clock Provided by Host. When this signal is stopped at 0, storage elements in the TAP logic must retain their data indefinitely. TCK is weakly pulled high internally when TAP = 1. TMS (Test Mode Select Input) Mode Select Input. This signal is sampled at the rising edge of TCK and controls movement between TAP states. TMS is weakly pulled high internally when TAP = 1. 15.1 TAP Controller The TAP controller is a synchronous state machine that responds to changes at the TMS and TCK signals. Based on its state transition, the controller provides the clock and control sequence for TAP operation. The performance of the TAP is dependent on the TCK clock frequency. The maximum TCK clock frequency should be limited to 1/8 the system clock frequency. This section provides a brief description of the state machine and its state transitions. The state diagram in Figure 15-1 summarizes the transitions caused by the TMS signal sampling on the rising edge at TCK. The TMS signal value is presented adjacent to each state transition in the figure. 15.2 TAP State Control The TAP provides an independent serial channel to communicate synchronously with the host system. The TAP state control is achieved through host manipulation of the Test Mode Select (TMS) and Test Clock (TCK) signals. The TMS signal is sampled at the rising edge of TCK and decoded by the TAP controller to control movement between the TAP states. The TDI input and TDO output are meaningful once the TAP is in a serial shift state (i.e., Shift-IR or Shift-DR). 15.2.1 Test-Logic-Reset On a power-on reset, the TAP controller is initialized to the Test-Logic-Reset state and the instruction register (IR2:0) is initialized to the By-Pass instruction so that it does not affect normal system operation. No matter what the state of the controller, it enters Test-LogicReset when TMS is held high for at least five rising edges of TCK. The controller remains in the Test-Logic-Reset state if TMS remains high. An erroneous low signal on the TMS can cause the controller to move into the Run-Test-Idle state, but no disturbance is caused to system operation if the TMS signal is returned and kept at the intended logic high for three rising edges of TCK since this returns the controller to the Test-Logic-Reset state. 15.2.2 Run-Test-Idle As illustrated in Figure15-1, the Run-Test-Idle state is simply an intermediate state for getting to one of the two state sequences in which the controller performs meaningful operations: • Controller state sequence (IR-Scan), or • Data register state sequence (DR-Scan) Maxim Integrated 15-2 MAXQ Family User’s Guide TEST-LOGIC-RESET 1 0 RUN-TEST-IDLE 1 1 1 SELECT-DR-SCAN 0 SELECT-IR-SCAN 0 1 0 1 CAPTURE-DR CAPTURE-IR 0 0 0 0 SHIFT-DR SHIFT-IR 1 1 1 1 EXIT1-DR EXIT1-IR 0 0 PAUSE-DR 0 PAUSE-IR 0 1 0 1 0 EXIT2-DR EXIT2-IR 1 1 UPDATE-DR 1 UPDATE-IR 0 1 0 Figure 15-1. TAP Controller State Diagram 15.2.3 IR-Scan Sequence The controller state sequence allows instructions (e.g., 'Debug' and 'System Programming') to be shifted into the instruction register starting from the Select-IR-Scan state. In the TAP, the instruction register is connected between the TDI input and the TDO output. Inside the IR-Scan Sequence, the Capture-IR state loads a fixed binary pattern (001b) into the 3-bit shift register and the Shift-IR state causes shifting of TDI data into the shift register and serial output to TDO, least significant bit first. Once the desired instruction is in the shift register, the instruction can be latched into the parallel instruction register (IR2:0) on the falling edge of TCK in the Update-IR state. The contents of the 3-bit instruction shift register and parallel instruction register (IR2:0) are summarized with respect to the TAP controller states in Table 15-1. Table 15-1. Instruction Register Content vs. TAP Controller State 15-3 TAP CONTROLLER STATE INSTRUCTION SHIFT REGISTER PARALLEL (3-BIT) INSTRUCTION REGISTER (IR2:0) Test-Logic-Reset Capture-IR Undefined Load 001b at the rising edge of TCK Set to By-pass (011b) Instruction Retain last state Shift-IR Input data via TDI and Shift towards TDO at the rising edge of TCK Retain last state Exit1-IR, Exit2-IR, Pause-IR Update-IR All other states Retain last state Retain last state Undefined Retain last state Load from shift register at the falling edge of TCK Retain last state Maxim Integrated MAXQ Family User’s Guide When the parallel instruction register (IR2:0) is updated, the TAP controller decodes the instruction and performs any necessary operations, including activation of the data shift register to be used for the particular instruction during data register shift sequences (DRScan). The length of the activated shift register depends upon the value loaded to the instruction register (IR2:0). The supported instruction-register encodings and associated data-register selections are shown in Table 15-2. Table 15-2. Instruction Register (IR2:0) Encodings IR2:0 INSTRUCTION 000 001 010 011 100 101 110 111 Extest Sample/Preload Debug By-pass System Programming By-pass By-pass FUNCTION No operation No operation In-circuit debug mode No operation (default) Bootstrap function No operation (default) Reserved No operation (default) SERIAL DATA SHIFT REGISTER SELECTION Unchanged (retain previous selection) Unchanged (retain previous selection) 10-bit shift register 1-bit shift register 3-bit shift register 1-bit shift register 1-bit shift register The Extest (IR2:0 = 000b) and Sample/Preload (IR2:0 = 001b) instructions are mandated by the JTAG standard, however, the MAXQ microcontroller does not intend to make practical use of these instructions. Hence, these instructions are treated as no operations but may be entered into the instruction register without affecting the on-chip system logic or pins and does not change the existing serial data register selection between TDI and TDO. The By-pass (IR2:0 = 011b, 101b, or 111b) instruction is also mandated by the JTAG standard. The By-pass instruction is fully implemented by the MAXQ microcontroller to provide a minimum length serial data path between the TDI and the TDO pins. This is accomplished by providing a single cell bypass shift register. When the instruction register is updated with the By-pass instruction, a single bypass register bit is connected serially between TDI and TDO in the Shift-DR state. The instruction register automatically defaults to the By-pass instruction when the TAP is in the Test-Logic-Reset state. The By-pass instruction has no effect on the operation of the on-chip system logic. The Debug (IR2:0 = 010b) and System Programming (IR2:0 = 100b) instructions are private instructions that are intended solely for incircuit debug and in-system programming operations respectively. If the instruction register is updated with the Debug instruction, a 10bit serial shift register is formed between the TDI and TDO pins in the Shift-DR state. If the System Programming instruction is entered into the instruction register (IR2:0), a 3-bit serial data shift register is formed between the TDI and TDO pins in the Shift-DR state. Instruction register (IR2:0) settings other than those listed and described above are reserved for internal use. As can be seen in Figure 15-2, the instruction register serves to select the length of the serial data register between TDI and TDO during the Shift-DR state. 15.2.4 DR-Scan Sequence Once the instruction register has been configured to a desired state (mode), transactions are performed via a data buffer register associated with that mode. These data transactions are executed serially in a manner analogous to the process used to load the instruction register and are grouped in the TAP Controller state sequence starting from the Select-DR-Scan state. In the TAP controller state sequence, the Shift-DR state allows internal data to be shifted out through the TDO pin while the external data is shifted in simultaneously via the TDI pin. Once a complete data pattern is shifted in, input data can be latched into the parallel buffer of the selected register on the falling edge of TCK in the Update-DR state. On the same TCK falling edge, in the Update-DR state, the internal parallel buffer is loaded to the data shift register for output. This Shift-DR/Update-DR process serves as the basis for passing information between the external host and the MAXQ microcontroller. These data register transactions occur in the data register portion of the TAP controller state sequence diagram and have no effect on the instruction register. Maxim Integrated 15-4 MAXQ Family User’s Guide READ WRITE 7 6 5 4 3 2 1 0 s1 s0 DEBUG VDD 2 SYSTEM PROGRAM 1 0 BY-PASS TDO TDI VDD INSTRUCTION REGISTER 2 1 0 TMS TAP CONTROLLER TCK POWER-ON RESET UPDATE-DR UPDATE-DR Figure 15-2. TAP and TAP Controller 15.3 Communication via TAP The TAP controller is in Test-Logic-Reset state after a power-on-reset. During this initial state, the instruction register contains By-pass instruction and the serial path defined between the TDI and TDO pins for the Shift-DR state is the 1-bit bypass register. All TAP signals (TCK, TMS, TDI, and TDO) default to being weakly pulled high internally on any reset. The TAP controller remains in the Test-LogicReset state as long as TMS is held high. The TCK and TMS signals can be manipulated by the host to transition to other TAP states. The TAP controller remains in a given state whenever TCK is held low. For the host to establish a specific data communication link, a private instruction must be loaded into the IR2:0 register. Once the instruction is latched in the instruction parallel buffer at the Update-IR state, it is recognized by the TAP controller and the communication channel is established. In-Circuit Debug or In-System Programming commands and data can be exchanged between the host and the MAXQ microcontroller by operating in the data register portion of the state sequence (i.e., DR-Scan). The TAP retains the private instruction that was loaded into IR2:0 until a new instruction is shifted in or until the TAP controller returns to the Test-Logic-Reset state. 15.3.1 TAP Communication Examples—IR-Scan and DR-Scan Figures 15-3 and 15-4 illustrate examples of communication between the host JTAG controller and the Test Access Port (TAP) of the MAXQ microcontroller. The host controls the TCK and TMS signals to move through the desired TAP states while accessing the selected shift register through the TDI input and TDO output pair. 15-5 Maxim Integrated MAXQ Family User’s Guide TCK TMS RUN-TEST/IDLE UPDATE-IR EXIT1-IR SHIFT-IR EXIT2-IR PAUSE-IR EXIT1-IR SHIFT-IR CAPTURE-IR SELECT-IR-SCAN SELECT-DR-SCAN RUN-TEST/IDLE TEST-LOGIC-RESET CONTROL STATE TDI IR SHIFT REGISTER DON'T CARE OR UNDEFINED IR PARALLEL OUTPUT REGISTER SELECTED DON'T CARE OR UNDEFINED NEW INSTRUCTION BY-PASS DON'T CARE OR UNDEFINED INSTRUCTION REGISTER DON'T CARE OR UNDEFINED TDO ENABLE TDO Figure 15-3. TAP Controller Debug Mode IR-Scan Example Maxim Integrated 15-6 MAXQ Family User’s Guide TCK TMS TEST-LOGIC-RESET SELECT-IR-SCAN SELECT-DR-SCAN RUN-TEST/IDLE UPDATE-DR EXIT1-DR SHIFT-DR EXIT2-DR PAUSE-DR EXIT1-DR SHIFT-DR CAPTURE-DR SELECT-DR-SCAN RUN-TEST/IDLE CONTROL STATE TDI SHIFT REGISTER PARALLEL OUTPUT DON'T CARE OR UNDEFINED DON'T CARE OR UNDEFINED NEW DATA OLD DATA INSTRUCTION REGISTER DATA REGISTER DON'T CARE OR UNDEFINED TDO ENABLE TDO Figure 15-4. TAP Controller Debug Mode DR-Scan Example 15-7 Maxim Integrated MAXQ Family User’s Guide SECTION 16: IN-CIRCUIT DEBUG MODE This section contains the following information: 16.1 Background Mode Operation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16-3 16.1.1 Breakpoint Registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16-5 16.1.1.1 Breakpoint 0 Register (BP0) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16-5 16.1.1.2 Breakpoint 1 Register (BP1) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16-5 16.1.1.3 Breakpoint 2 Register (BP2) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16-6 16.1.1.4 Breakpoint 3 Register (BP3) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16-6 16.1.1.5 Breakpoint 4 Register (BP4) (REGE = 0) . . . . . . . . . . . . . . . . . . . . . . . . . . .16-7 16.1.1.6 Breakpoint 4 Register (BP4) (REGE = 1) . . . . . . . . . . . . . . . . . . . . . . . . . . .16-7 16.1.1.7 Breakpoint 5 Register (BP5) (REGE = 0) . . . . . . . . . . . . . . . . . . . . . . . . . . .16-8 16.1.1.8 Breakpoint 5 Register (BP5) (REGE = 1) . . . . . . . . . . . . . . . . . . . . . . . . . . .16-8 16.1.2 Using Breakpoints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16-9 16.2 Debug Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16-9 16.2.1 Debug Mode Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16-10 16.2.2 Read Register Map Command Host-ROM Interaction . . . . . . . . . . . . . . . . . . . . . . . .16-12 16.2.3 Single-Step Operation (Trace) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16-12 16.2.4 Return . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16-12 16.2.5 Debug Mode Special Considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16-12 16.3 In-Circuit Debug Peripheral Registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16-13 16.3.1 In Circuit Debug Temp 0 Register (ICDT0) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16-13 16.3.2 In Circuit Debug Temp 1 Register (ICDT1) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16-14 16.3.3 In-Circuit Debug Control Register (ICDC) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16-14 16.3.4 In-Circuit Debug Flag Register (ICDF) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16-15 16.3.5 In-Circuit Debug Buffer Register (ICDB) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16-15 16.3.6 In Circuit Debug Data Register (ICDD) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16-16 16.3.7 In Circuit Debug Address Register (ICDA) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16-16 LIST OF FIGURES Figure 16-1. In-Circuit Debugger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16-2 LIST OF TABLES Table 16-1. Background Mode Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16-4 Table 16-2. Debug Mode Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16-11 16-1 Maxim Integrated MAXQ Family User’s Guide SECTION 16: IN-CIRCUIT DEBUG MODE Most MAXQ microcontroller devices are equipped with embedded debug hardware and embedded ROM firmware developed for the purpose of providing in-circuit debugging capability to the user application. The in-circuit debug mode uses the JTAG-compatible TAP as its means of communication between the host and MAXQ microcontroller. Figure 16-1 shows a block diagram of the in-circuit debugger. The in-circuit debug hardware and software features include: • a debug engine • a set of registers providing the ability to set breakpoints on register, code, or data • a set of debug service routines stored in a ROM Collectively, these hardware and software features allow two basic modes of in-circuit debugging: • Background mode allows the host to configure and set up the in-circuit debugger while the CPU continues to execute the normal program. Debug mode can be invoked from Background mode. • Debug mode allows the debug engine to take control of the CPU, providing read-write access to internal registers and memory, and single-step trace operation. CPU TMS ICDB TCK ICDF TDI TDO TAP CONTROLLER DEBUG ENGINE ENABLE IR DATA IP ADDR ICDC ROM ICDA ICDD ICDTn BREAK COMPARATOR CODE ADDR COMPARATOR DATA ADDR COMPARATOR REG DATA BREAKPOINT Figure 16-1. In-Circuit Debugger The embedded hardware debug engine is implemented as a stand-alone hardware block in the MAXQ microcontroller. The debug engine can be enabled for monitoring internal activities and interacting with selected internal registers while the CPU is executing user code. This capability allows the user to employ the embedded debug engine to debug the actual system, in place of the in-circuit emulator that uses external hardware to duplicate operation of the microcontroller outside of the real application environment. To enable a communication link between the host and the microcontroller debug engine, the Debug instruction (010b) must be loaded into the TAP instruction register using the IR-Scan sequence. Once the instruction is latched in the instruction parallel buffer (IR2:0) and is recognized by the TAP controller in the Update-IR state, the 10-bit data shift register is activated as the communication channel for DR-Scan sequences. The TAP instruction register retains the Debug instruction until a new instruction is shifted via an IR-Scan or the TAP controller returns to the Test-Logic-Reset state. Maxim Integrated 16-2 MAXQ Family User’s Guide The host now can transmit and receive serial data through the 10-bit data shift register that exists between the TDI input and TDO output during DR-Scan sequences. All background and debug mode communication (commands, data input/output, and status) occurs via this serial channel. Each 10-bit exchange of data between the host and the MAXQ internal hardware is composed of two status bits and a single byte of command or data. The 10-bit word is always transmitted least significant bit first with the format shown below. MAXQ 0 9 x x 9 TDI 0 TDO Host Command / Data Input MAXQ Data Output s1:s0 00 01 10 11 Status/Condition Non-Debug. Default condition, Background mode, or debug engine inactive. Debug Idle. Debug engine is ready to receive data from the host (command, data). Debug Busy. Debug engine is busy without valid data (i.e. ROM code execution, trace operations). Debug Valid. Debug engine is busy with valid data The data byte portion of the 10-bit shift register is interfaced directly to the ICDB parallel register. The ICDB register functions as the holding data register for both transmit and receive operations. On the falling edge of TCK in the Update-DR state, the outgoing data is loaded from the ICDB parallel register to the debug shift register and the incoming shift register data is latched in the ICDB parallel register. 16.1 Background Mode Operation When the instruction register is loaded with the Debug instruction (IR2:0 = 010b), the host can communicate with the MAXQ microcontroller in a background mode using TAP DR-Scan sequences without disturbing CPU operation. Note, however, that JTAG in-system programming also requires use of the 10-bit debug shift register and, if enabled (SPE, PSS1:0 = 100b), takes precedence over background mode communication. When operating in background mode, the status bits are always cleared to 00b (non-debug), which indicates that the MAXQ microcontroller is ready to receive background mode commands. The host can perform the following operations from background mode: • read/write internal breakpoint registers (BP0-BP5) • read/write internal in-circuit debug registers (ICDC, ICDF, ICDA, ICDD) • monitor to determine when a breakpoint match has occurred • directly invoke debug mode 16-3 Maxim Integrated MAXQ Family User’s Guide Table 16-1 shows the background mode commands supported by the MAXQ microcontroller. Encodings not listed in this table are not supported in background mode and are treated as no operations. Table 16-1. Background Mode Commands OP CODE 0000-0000 COMMAND No Operation 0000-0001 Read ICDC Read Control Data from the ICDC. The contents of the ICDC register are loaded into the Debug Shift Register via the ICDB register for host read. This command requires one follow-on transfer cycle. 0000-0010 Read ICDF Read Flags from the ICDF. The contents of the ICDF register (one byte) are loaded into the Debug Shift Register via the ICDB register for host read. This command requires one follow-on transfer cycle. 0000-0011 Read ICDA Read Data from the ICDA. The contents of the ICDA register are loaded into the Debug Shift Register via the ICDB register for host read. This command requires two follow-on transfer cycles with the least significant byte first. 0000-0100 Read ICDD Read Data from the ICDD. The contents of the ICDD register are loaded into the Debug Shift Register via the ICDB register for host read. This command requires two follow-on transfer cycles with the least significant byte first. 0000-0101 Read BP0 Read Data from the BP0. The contents of the BP0 register are loaded into the Debug Shift Register via the ICDB register for host read. This command requires two follow-on transfer cycles with the least significant byte first. 0000-0110 Read BP1 Read Data from the BP1. The contents of the BP1 register are loaded into the Debug Shift Register via the ICDB register for host read. This command requires two follow-on transfer cycles with the least significant byte first. 0000-0111 Read BP2 Read Data from the BP2. The contents of the BP2 register are loaded into the Debug Shift Register via the ICDB register for host read. This command requires two follow-on transfer cycles with the least significant byte first. 0000-1000 Read BP3 Read Data from the BP3. The contents of the BP3 register are loaded into the Debug Shift Register via the ICDB register for host read. This command requires two follow-on transfer cycles with the least significant byte first. 0000-1001 Read BP4 Read Data from the BP4. The contents of the BP4 register are loaded into the Debug Shift Register via the ICDB register for host read. This command requires two follow-on transfer cycles with the least significant byte first. 0000-1010 Read BP5 Read Data from the BP5. The contents of the BP5 register are loaded into the Debug Shift Register via the ICDB register for host read. This command requires two follow-on transfer cycles with the least significant byte first. 0001-0001 Write ICDC Write Control Data to the ICDC. The contents of ICDB are loaded into the ICDC register by the debug engine at the end of the data transfer cycle. 0001-0011 Write ICDA Write Data to the ICDA. The contents of ICDB are loaded into the ICDA register by the debug engine at the end of the data transfer cycles. Data is transferred with the least significant byte first. 0001-0100 Write ICDD Write Data to the ICDD. The contents of ICDB are loaded into the ICDD register by the debug engine at the end of data transfer cycles. Data is transferred with the least significant byte first. 0001-0101 Write BP0 Write Data to the BP0. The contents of ICDB are loaded into the BP0 register by the debug engine at the end of data transfer cycles. Data is transferred with the least significant byte first. 0001-0110 Write BP1 Write Data to the BP1. The contents of ICDB are loaded into the BP1 register by the debug engine at the end of data transfer cycles. Data is transferred with the least significant byte first. 0001-0111 Write BP2 Write Data to the BP2. The contents of ICDB are loaded into the BP2 register by the debug engine at the end of data transfer cycles. Data is transferred with the least significant byte first. 0001-1000 Write BP3 Write Data to the BP3. The contents of ICDB are loaded into the BP3 register by the debug engine at the end of data transfer cycles. Data is transferred with the least significant byte first. 0001-1001 Write BP4 Write Data to the BP4. The contents of ICDB are loaded into the BP4 register by the debug engine at the end of data transfer cycles. Data is transferred with the least significant byte first. 0001-1010 Write BP5 Write Data to the BP5. The contents of ICDB are loaded into the BP5 register by the debug engine at the end of data transfer cycles. Data is transferred with the least significant byte first. 0001-1111 Debug Debug Command. This command forces the debug engine into debug mode and halts the CPU operation at the completion of the current instruction after the debug engine recognizes the debug command. Maxim Integrated OPERATION No Operation. Default state for Debug Shift register. 16-4 MAXQ Family User’s Guide 16.1.1 Breakpoint Registers The MAXQ microcontroller incorporates six breakpoint registers (BP0-BP5) that are configurable by the host for establishing different types of breakpoint mechanisms. The first four breakpoint registers (BP0-BP3) are 16-bit registers that are configurable as program memory address breakpoints. When enabled, the debug engine will force a break when a match between the breakpoint register and the program memory execution address occurs. The final two 16-bit breakpoint registers (BP4, BP5) are configurable in one of two possible capacities. They may be configured as data memory address breakpoints or may be configured to support register access breakpoints. In either case, if breakpoints are enabled and the defined breakpoint match occurs, the debug engine will generate a break condition. The six breakpoint registers are documented below. 16.1.1.1 Breakpoint 0 Register (BP0) Bit # 15 14 13 12 11 10 9 8 Name BP0.15 BP0.14 BP0.13 BP0.12 BP0.11 BP0.10 BP0.9 BP0.8 Reset 1 1 1 1 1 1 1 1 Access s s s s s s s s Bit # 7 6 5 4 3 2 1 0 Name BP0.7 BP0.6 BP0.5 BP0.4 BP0.3 BP0.2 BP0.1 BP0.0 Reset 1 1 1 1 1 1 1 1 Access s s s s s s s S s = special Bits 15 to 0: Breakpoint 0 (BP0.[15:0]). This register is accessible only via background mode read/write commands. Breakpoint registers BP0, BP1, BP2, and BP3 serve as program memory address breakpoints. When DME bit is set in background mode, the debug engine monitors the program-address bus activity while the CPU is executing the user program. If an address match is detected, a break occurs, allowing the debug engine to take control of the CPU and enter debug mode. 16.1.1.2 Breakpoint 1 Register (BP1) Bit # 15 14 13 12 11 10 9 8 Name BP1.15 BP1.14 BP1.13 BP1.12 BP1.11 BP1.10 BP1.9 BP1.8 Reset 1 1 1 1 1 1 1 1 Access s s s s s s s s Bit # 7 6 5 4 3 2 1 0 Name BP1.7 BP1.6 BP1.5 BP1.4 BP1.3 BP1.2 BP1.1 BP1.0 Reset 1 1 1 1 1 1 1 1 Access s s s s s s s S s = special Bits 15 to 0: Breakpoint 1 (BP1.[15:0]). This register is accessible only via background mode read/write commands. Breakpoint registers BP0, BP1, BP2, and BP3 serve as program memory address breakpoints. When DME bit is set in background mode, the debug engine monitors the program-address bus activity while the CPU is executing the user program. If an address match is detected, a break occurs, allowing the debug engine to take control of the CPU and enter debug mode. 16-5 Maxim Integrated MAXQ Family User’s Guide 16.1.1.3 Breakpoint 2 Register (BP2) Bit # 15 14 13 12 11 10 9 8 Name BP2.15 BP2.14 BP2.13 BP2.12 BP2.11 BP2.10 BP2.9 BP2.8 Reset 1 1 1 1 1 1 1 1 Access s s s s s s s s Bit # 7 6 5 4 3 2 1 0 Name BP2.7 BP2.6 BP2.5 BP2.4 BP2.3 BP2.2 BP2.1 BP2.0 Reset 1 1 1 1 1 1 1 1 Access s s s s s s s S s = special Bits 15 to 0: Breakpoint 2 (BP2.[15:0]). This register is accessible only via background mode read/write commands. Breakpoint registers BP0, BP1, BP2, and BP3 serve as program memory address breakpoints. When DME bit is set in background mode, the debug engine monitors the program-address bus activity while the CPU is executing the user program. If an address match is detected, a break occurs, allowing the debug engine to take control of the CPU and enter debug mode. 16.1.1.4 Breakpoint 3 Register (BP3) Bit # 15 14 13 12 11 10 9 8 Name BP3.15 BP3.14 BP3.13 BP3.12 BP3.11 BP3.10 BP3.9 BP3.8 Reset 1 1 1 1 1 1 1 1 Access s s s s s s s s Bit # 7 6 5 4 3 2 1 0 Name BP3.7 BP3.6 BP3.5 BP3.4 BP3.3 BP3.2 BP3.1 BP3.0 Reset 1 1 1 1 1 1 1 1 Access s s s s s s s S s = special Bits 15 to 0: Breakpoint 3 (BP3.[15:0]). This register is accessible only via background mode read/write commands. Breakpoint registers BP0, BP1, BP2, and BP3 serve as program memory address breakpoints. When DME bit is set in background mode, the debug engine monitors the program-address bus activity while the CPU is executing the user program. If an address match is detected, a break occurs, allowing the debug engine to take control of the CPU and enter debug mode. Maxim Integrated 16-6 MAXQ Family User’s Guide 16.1.1.5 Breakpoint 4 Register (BP4) (REGE = 0) Bit # 15 14 13 12 11 10 9 8 BP4.15 BP4.14 BP4.13 BP4.12 BP4.11 BP4.10 BP4.9 BP4.8 Reset 1 1 1 1 1 1 1 1 Access s s s s s s s s* Bit # 7 6 5 4 3 2 1 0 BP4.7 BP4.6 BP4.5 BP4.4 BP4.3 BP4.2 BP4.1 BP4.0 Name (REGE = 0) Name (REGE = 0) Reset 1 1 1 1 1 1 1 1 Access s* s* s* s* s** s** s** s** s = special, * = register index within module {0-31), ** = module specifier 3:0 {0-15} Bits 15 to 0: Breakpoint 4 (BP4.[15:0]). This register is accessible only via background mode read/write commands. When (REGE = 0): This register serves as one of the two data memory address breakpoints. When DME is set in background mode, the debug engine will monitor the data memory address bus activity while the CPU is executing the user program. If an address match is detected, a break occurs, allowing the debug engine to take over control of the CPU and enter debug mode. 16.1.1.6 Breakpoint 4 Register (BP4) (REGE = 1) Bit # 15 14 13 12 11 10 9 8 Name (REGE = 1) — — — — — — — BP4.8 Reset 1 1 1 1 1 1 1 1 Access s s s s s s s s* Bit # 7 6 5 4 3 2 1 0 BP4.7 BP4.6 BP4.5 BP4.4 BP4.3 BP4.2 BP4.1 BP4.0 Name (REGE = 1) Reset 1 1 1 1 1 1 1 1 Access s* s* s* s* s** s** s** s** s = special, * = register index within module {0-31), ** = module specifier 3:0 {0-15} Bits 15 to 9: Reserved Bits 8 to 0: Breakpoint 4 (BP4.[8:0]). This register is accessible only via background mode read/write commands. When (REGE = 1): This register serves as one of the two register breakpoints. A break occurs when the destination register address for the executed instruction matches with the specified module and index. 16-7 Maxim Integrated MAXQ Family User’s Guide 16.1.1.7 Breakpoint 5 Register (BP5) (REGE = 0) Bit # 15 14 13 12 11 10 9 8 BP5.15 BP5.14 BP5.13 BP5.12 BP5.11 BP5.10 BP5.9 BP5.8 Reset 1 1 1 1 1 1 1 1 Access s s s s s s s s* Bit # 7 6 5 4 3 2 1 0 BP5.7 BP5.6 BP5.5 BP5.4 BP5.3 BP5.2 BP5.1 BP5.0 Name (REGE = 0) Name (REGE = 0) Reset 1 1 1 1 1 1 1 1 Access s* s* s* s* s** s** s** s** s = special, * = register index within module {0-31), ** = module specifier 3:0 {0-15} Bits 15 to 0: Breakpoint 5 (BP5.[15:0]). This register is accessible only via background mode read/write commands. (REGE = 0) This register serves as one of the two data memory address breakpoints. When DME is set in background mode, the debug engine will monitor the data memory address bus activity while the CPU is executing the user program. If an address match is detected, a break occurs, allowing the debug engine to take over control of the CPU and enter debug mode. 16.1.1.8 Breakpoint 5 Register (BP5) (REGE = 1) Bit # 15 14 13 12 11 10 9 8 Name (REGE = 1) — — — — — — — BP5.8 Reset 1 1 1 1 1 1 1 1 Access s s s s s s s s* Bit # 7 6 5 4 3 2 1 0 BP5.7 BP5.6 BP5.5 BP5.4 BP5.3 BP5.2 BP5.1 BP5.0 Reset 1 1 1 1 1 1 1 1 Access s* s* s* s* s** s** s** s** Name (REGE = 1) s = special, * = register index within module {0-31), ** = module specifier 3:0 {0-15} Bits 15 to 9: Reserved Bits 8 to 0: Breakpoint 5 (BP5.[8:0]). This register is accessible only via background mode read/write commands. (REGE = 1) This register serves as one of the two register breakpoints. A break occurs when two conditions are met: Condition 1: The destination register address for the executed instruction matches with the specified module and index. Condition 2: The bit pattern written to the destination register matches those bits specified for comparison by the ICDD data register and ICDA mask register. Only those ICDD data bits with their corresponding ICDA mask bits will be compared. When all bits in the ICDA register are cleared, Condition 2 becomes a don’t care. Maxim Integrated 16-8 MAXQ Family User’s Guide 16.1.2 Using Breakpoints All breakpoint registers (BP0-BP5) default to the FFFFh state on power-on reset or when the Test-Logic-Reset TAP state is entered. The breakpoint registers are accessible only with Background mode read/write commands issued over the TAP communication link. The breakpoint registers are not read/write accessible to the CPU. Setting the Debug Mode Enable (DME) bit in the ICDC register to logic 1 enables all six breakpoint registers for breakpoint match comparison. The state of the Break-On Register Enable (REGE) bit in the ICDC register determines whether the BP4 and BP5 breakpoints should be used as data memory address breakpoints (REGE = 0) or as register breakpoints (REGE = 1). When using the register matching breakpoints, it is important to realize that Debug mode operations (e.g., read data memory, write data memory, etc.) require use of ICDA and ICDD for passing of information between the host and MAXQ microcontroller ROM routines. It is advised that these registers be saved and restored or be reconfigured before returning to the background mode if register breakpoints are to remain enabled. When a breakpoint match occurs, the debug engine forces a break and the MAXQ microcontroller enters Debug Mode. If a breakpoint match occurs on an instruction that activates the PFX register, the break is held off until the prefixed operation completes. The host can assess whether Debug mode has been entered by monitoring the status bits of the 10-bit word shifted out of the TDO pin. The status bits will change from the Non-debug (00b) state associated with background mode to the Debug-Idle (01b) state when Debug Mode is entered. Debug mode can also be manually invoked by host issuance of the 'Debug' background command. 16.2 Debug Mode There are two ways to enter the Debug Mode from Background Mode: • Issuance of the Debug command directly by the host via the TAP communication port, or • Breakpoint matching mechanism. The host can issue the Debug background command to the debug engine. This direct Debug Mode entry is indeterministic. The response time varies dependent on system conditions when the command is issued. The breakpoint mechanism provides a more controllable response, but requires that the breakpoints be initially configured in Background mode. No matter the method of entry, the debug engine takes control of the CPU in the same manner. Debug mode entry is similar to the state machine flow of an interrupt except that the target execution address is x8010h which resides in the Utility ROM instead of the address specified by the IV register that is used for interrupts. On debug mode entry, the following actions occur: 1) block the next instruction fetch from program memory 2) push the return address onto the stack 3) set the contents of IP to x8010h 4) clear the IGE bit to 0 to disable interrupt handler if it is not already clear. 5) halt CPU operation Once in Debug mode, further breakpoint matches or host issuance of the Debug command are treated as no operations and will not disturb debug engine operation. Entering debug mode also stops the clocks to all timers, including the Watchdog Timer. Temporarily disabling these functions allows debug mode operations without disrupting the relationship between the original user program code and hardware timed functions. No interrupt request can be granted since the interrupt handler is also halted as a result of IGE = 0. 16-9 Maxim Integrated MAXQ Family User’s Guide 16.2.1 Debug Mode Commands The debug engine sets the data shift register status bits to 01b (debug-idle) to indicate that it is ready to accept debug commands from the host. The host can perform the following operations from debug mode: • read register map • read program stack • read/write register • read/write data memory • single step of CPU (trace) • return to background mode • unlock password The only operations directly controlled by the debug engine are single step and return. All other operations are assisted by debug service routines contained in the Utility ROM. These operations require that multiple bytes be transmitted and/or received by the host, however each operation always begins with host transmission of a command byte. This command byte is decoded by the debug engine in order to determine the quantity, sequence, and destination for follow-on bytes received from the host. Even though there is no timing window specified for receiving the complete command and follow-on data, the debug engine must receive the correct number of bytes for a particular command before executing that command. If command and follow-on data are transmitted out of byte order or proper sequence, the only way to resolve this situation is to disable the debug engine by changing the instruction register (IR2:0) and reloading the Debug instruction. Once the debug engine has received the proper number of command and follow-on bytes for a given ROM assisted operation, it will respond with the following actions: • update the Command bits (CMD3:0) in the ICDC register to reflect the host request, • enable the ROM if it is not been enabled, • force a jump to ROM address x8010h, and • set the data shift register status bits to 10b (debug-busy) The ROM code performs a read to the ICDC register CMD3:0 bits to determine its course of action. Some commands can be processed by the ROM without receiving data from the host beyond the initially supplied follow-on bytes, while others (e.g., Unlock Password) require additional data from the host. Some commands need only to provide an indication of completion to the host, while others (Read register map) need to supply multiple bytes of output data. To accomplish data flow control between the host and ROM, the status bits should be used by the host to assess when the ROM is ready for additional data and/or when the ROM is providing valid data output. Internally, the ROM can ascertain when new data is available or when it may output the next data byte via the TXC flag. The TXC flag is an important indicator between the debug engine and the Utility ROM debug routines. The Utility ROM firmware sets the TXC flag to 1 to indicate that valid data has been loaded to the ICDB register. The debug engine clears the TXC flag to 0 to indicate completion of a data shift cycle, thus allowing the ROM to continue execution of a requested task that is still in progress. The Utility ROM signals that it has completed a requested task by setting the ROM Operation Done (ROD) bit of the SC register to logic 1. The ROD bit is reset by the debug engine when it recognizes the done condition. Table 16-2 shows the debug mode commands supported by the MAXQ microcontroller. Note that background mode commands are supported inside debug mode, however the documentation of these commands can be found in the Background mode section of the document. Encodings not listed in this table are not supported in debug mode and are treated as no operations. Maxim Integrated 16-10 MAXQ Family User’s Guide Table 16-2. Debug Mode Commands OP CODE COMMAND 0010-0000 No Operation OPERATION No Operation Read Register Map Read Data from Internal Registers. This command forces the debug engine to update the CMD3:0 bits in the ICDC to 0001b and perform a jump to ROM code at x8010h. The ROM debug service routine will load register data to ICDB for host capture/read, starting at the lowest register location in module 0, one byte at a time in a successive order until all internal registers are read and output to the host. Read Data Memory Read Data from Data Memory. This command requires four follow-on transfer cycles, two for the starting address and two for the word read count, starting with the LSB address and ending with the MSB read count. The address is moved to the ICDA register and the word read count is moved to the ICDD register by the debug engine. This information is directly accessible by the ROM code. At the completion of this command period, the debug engine updates the CMD3:0 bits to 0010b and performs a jump to ROM code at x8010h. The ROM debug service routine will load ICDB from data memory according to address and count information provided by the host. Read Program Stack Read Data from Program Stack. This command requires four follow-on transfer cycles, two for the starting address and two for the read count, starting with the LSB address and ending with the MSB read count. The address is moved to the ICDA register and the read count is moved to the ICDD register by the debug engine. This information is directly accessible by the ROM code. At the completion of this command period, the debug engine updates the CMD3:0 bits to 0011b and performs a jump to ROM code at x8010h. The ROM Debug service routine will pop data out from the stack according to the information received in the ICDA and ICDD register. The stack pointer is pre-decremented for each pop operation. Write Register Write Data to a Selected Register. This command requires four follow-on transfer cycles, two for the register address and two for the data, starting with the LSB address and ending with the MSB data. The address is moved to the ICDA register and the data is moved to the ICDD register by the debug engine. This information is directly accessible by the ROM code. At the completion of this command period, the debug engine updates the CMD3:0 bits to 0100b and performs a jump to ROM code at x8010h. The ROM Debug service routine will update the select register according to the information received in the ICDA and ICDD registers. 0010-0101 Write Data Memory Write Data to a Selected Data Memory Location. This command requires four follow-on transfer cycles, two for the memory address and two for the data, starting with the LSB address and ending with the MSB data. The address is moved to the ICDA register and the data is moved to the ICDD register by the debug engine. This information is directly accessible by the ROM code. At the completion of this command period, the debug engine updates the CMD3:0 bits to 0101b and performs a jump to ROM code at x8010h. The ROM Debug service routine will update the selected data memory location according to the information received in the |ICDA and ICDD registers. 0010-0110 Trace Trace Command. This command allows single stepping the CPU and requires no follow-on transfer cycle. The trace operation is a ‘debug mode exit, one cycle CPU execution, debug mode entry’ sequence. 0010-0111 Return Return Command. This command terminates the debug mode and returns the debug engine to background mode. This allows the CPU to resume its normal operation at the point where it has been last interrupted. 0010-0001 0010-0010 0010-0011 0010-0100 0010-1000 0010-1001 16-11 Unlock Password Unlock the Password Lock. This command requires 32 follow-on transfer cycles each containing a byte value to be compared with the program memory password for the purpose of clearing the PWL bit and granting access to protected debug and loader functions. When this command is received, the debug engine updates the CMD3:0 bit to 1000b and performs a jump to ROM code at x8010h. Data is loaded to the ICDB register when each byte of data is received, beginning with the LSB of the least significant word first and end with the MSB of the most significant word. Read Register Read from a Selected Internal Register. This command requires two follow-on transfer cycles, starting with the LSB address and ending with the MSB address. The address is moved to ICDA register by the debug engine. This information is directly accessible by the ROM code. At the completion of this command period, the debug engine updates the CMD3:0 bits to 1001b and performs a jump to ROM code at x8010h. The ROM Debug service routine will always assume a 16-bit register length and return the requested data LSB first. Maxim Integrated MAXQ Family User’s Guide 16.2.2 Read Register Map Command Host-ROM Interaction A read register map command reads out data contents for all implemented system and peripheral registers. The host does not specify a target register but instead should expect register data output in successive order, starting with the lowest order register in register module 0. Data is loaded by the ROM to the 8-bit ICDB register and is output one byte per transfer cycle. Thus, for a 16-bit register, two transfer cycles are necessary. The host initiates each transfer cycle to shift out the data bytes and will find valid data output tagged with a debug-valid (status = 11b). At the end of each transfer cycle, the debug engine clears the TXC flag to signal the ROM service routine that another byte may be loaded to ICDB. The ROM service routine sets the TXC flag each time after loading data to the ICDB register. This process is repeated until all registers have been read and output to the host. The host system recognizes the completion of the register read when the status debug-idle is presented. This indicates that the debug engine is ready for another operation. 16.2.3 Single-Step Operation (Trace) The debug engine supports single step operation in debug mode by executing a trace command from the host. The debug engine allows the CPU to return to its normal program execution for one cycle and then forces a debug mode re-entry: 1) Set status to 10b (debug-busy). 2) Pop the return address from the stack. 3) Set the IGE bit to logic 1 if debug mode was activated when IGE = 1. 4) Supply the CPU with an instruction addressed by the return address. 5) Stall the CPU at the end of the instruction execution. 6) Block the next instruction fetch from program memory. 7) Push the return address onto the stack. 8) Set the contents of IP to x8010h. 9) Clear the IGE bit to 0 to disable the interrupt handler. 10) Halt CPU operation. 11) Set the status to debug-idle. Note that the trace operation uses a return address from the stack as a legitimate address for program fetching. The host must maintain consistency of program flow during the debug process. The Instruction Pointer is automatically incremented after each trace operation, thus a new return address will be pushed onto the stack before returning the control to the debug engine. Also, note that the interrupt handler is an essential part of the CPU and a pending interrupt could be granted during single step operation since the IGE bit state present on debug mode entry is restored for the single step. 16.2.4 Return To terminate the debug mode and return the debug engine to background mode, the host must issue a Return command to the debug engine. This command causes the following actions: 1) Pop the return address from the stack. 2) Set the IGE bit to logic 1 if debug mode was activated when IGE = 1. 3) Supply the CPU with an instruction addressed by the return address. 4) Allow the CPU to execute the normal user program. 5) Set the status to 00b (non-debug). To prevent a possible endless-breakpoint matching loop, no break occurs for a breakpoint match on the first instruction after returning from debug mode to background mode. Returning to background mode also enables all internal timer functions. 16.2.5 Debug Mode Special Considerations The following are special considerations when using Debug Mode. • The debug engine cannot be operated reliably when the CPU is configured in the Power Management Mode (divide-by-256 system clock mode). To allow for proper execution of debug mode commands when invoked during PMM, the Switchback enable (SWB) bit should be configured to a logic 1. With SWB = 1, entering active debug mode (whether by breakpoint match or issuance of the debug command) forces a switchback to the divide-by-1 system clock mode and allow the debug engine to function correctly. This Maxim Integrated 16-12 MAXQ Family User’s Guide allows user code to configure breakpoints that occur inside PMM, thus providing reliable use of debug commands. However, it does not allow a good means for re-entering PMM. • Special caution should be exercised when using the Write Register command on register bits that globally affect system operation (e.g., IGE, STOP). If the write register command is used to invoke stop mode (setting STOP = 1), the RST pin may be asserted to reset the debug engine and return to the background mode of operation. • Single stepping ('Trace') through any IGE bit change operation results in the debug engine overriding the bit change since it retains the IGE bit setting captured when active debug mode was entered. • Single stepping ('Trace') into an operation that sets STOP = 1 when IGE = 1 effectively allows enabled interrupts normally capable of causing exit from stop mode to do so. • Single stepping ('Trace') through any memory read instruction that reads from the utility ROM (such as 'move Acc,' @DP[0] with DP[0] set to 8000h) will cause the memory read to return an incorrect value. • Single stepping ('Trace') cannot be used when executing code from the utility ROM. • Data memory allocation is important during system development if in-circuit debug is planned. The top 32-byte memory location may be used by the debug service routine during debug mode. The data contents in these locations may be altered and cannot be recovered. • One available stack location is needed for debug mode. If the stack is full when entering debug mode, the oldest data in the stack will be overwritten. • The crystal warmup counter is the only counter not disabled when active debug mode is entered. If the crystal warmup counter completes while in active debug mode, a glitchless switch will be made to selected clock source (which was being counted). It is important that the user recognize that this action will occur since the TAP clock should be run no faster than 1/8 the system clock frequency. • Any signal sampling that relies upon the internal system clock (e.g., counter inputs) can be unreliable since the system clock is turned off inside active debug mode between debug mode commands. • Power Management Mode cannot be invoked in the first instruction executed when returning from active debug mode. The PMME bit will not be set if such an attempt is made. 16.3 In-Circuit Debug Peripheral Registers 16.3.1 In-Circuit Debug Temp 0 Register (ICDT0) Bit # 15 14 13 12 11 10 9 8 Name ICDT0.15 ICDT0.14 ICDT0.13 ICDT0.12 ICDT0.11 ICDT0.10 ICDT0.9 ICDT0.8 Reset 0 0 0 0 0 0 0 0 Access s s s s s s s s Bit # 7 6 5 4 3 2 1 0 Name ICDT0.7 ICDT0.6 ICDT0.5 ICDT0.4 ICDT0.3 ICDT0.2 ICDT0.1 ICDT0.0 Reset 0 0 0 0 0 0 0 0 Access s s s s s s s s s = special Bits 15 to 0: In-Circuit Debug Temp 0 (ICDT0.[15:0]). This register is read/write accessible by the CPU only in background mode or debug mode. This register is intended for use by the utility ROM routines as temporary storage to save registers that might otherwise have to be placed in the stack. 16-13 Maxim Integrated MAXQ Family User’s Guide 16.3.2 In-Circuit Debug Temp 1 Register (ICDT1) Bit # 15 14 13 12 11 10 9 8 Name ICDT1.15 ICDT1.14 ICDT1.13 ICDT1.12 ICDT1.11 ICDT1.10 ICDT1.9 ICDT1.8 Reset 0 0 0 0 0 0 0 0 Access s s s s s s s s Bit # 7 6 5 4 3 2 1 0 Name ICDT1.7 ICDT1.6 ICDT1.5 ICDT1.4 ICDT1.3 ICDT1.2 ICDT1.1 ICDT1.0 Reset 0 0 0 0 0 0 0 0 Access s s s s s s s s s = special Bits 15 to 0: In-Circuit Debug Temp 1 (ICDT1.[15:0]). This register is read/write accessible by the CPU only in background mode or debug mode. This register is intended for use by the utility ROM routines as temporary storage to save registers that might otherwise have to be placed in the stack. 16.3.3 In-Circuit Debug Control Register (ICDC) Bit # 7 6 5 4 3 2 1 0 DME — REGE — CMD3 CMD2 CMD1 CMD0 Reset 0 0 0 0 0 0 0 0 Access rs r rs r rs rs rs rs Name r = read, s = special Bit 7: Debug Mode Enable (DME). When this bit is cleared to 0, background mode commands may be executed, but breakpoints are disabled. When this bit is set to 1, breakpoints are enabled while background mode commands still may be entered. This bit may only be set or cleared from background debug mode. This bit has no meaning for the ROM code. Bits 6 and 4: Reserved Bit 5: Break-On Register Enable (REGE). The REGE bit is used to enable the break-on register function. When REGE bit is set to 1, BP4 and BP5 are used as register breakpoints. A break occurs when the content of BP4 is matched with the destination address of the current instruction. For BP5, a break occurs only on a selected data pattern for a selected destination register addressed by BP5. The data pattern is determined by the contents in the ICDA and ICDD register. The REGE bit alone does not enable register breakpoints, but simply changes the manner in which BP4, BP5 are used. The DME bit still must be set to a logic 1 for any breakpoint to occur. This bit has no meaning for the ROM code. Bits 3 to 0: Command Bits (CMD[3:0]). These bits reflect the current host command in debug mode. These bits are set by the debug engine and allow the ROM code to determine the course of action. CMD[3:0] ACTION 0000 No Operation 0001 Read Register Map 0010 Read Data Memory 0011 Read Stack Memory 0100 Write Register 0101 Write Data Memory 1000 Unlock Password 1001 Read Register Other Reserved Maxim Integrated 16-14 MAXQ Family User’s Guide 16.3.4 In-Circuit Debug Flag Register (ICDF) Bit # 7 6 5 4 3 2 1 0 Name — — — — PSS1 PSS0 SPE TXC Reset 0 0 0 0 0 0 0 0 Access r r r r rw rw rw rw r = read, w = write Bits 7 to 4: Reserved Bits 3 to 2: Programming Source Select Bits 1:0 (PSS[1:0]). These bits are used to select a programming interface during In-System programming when SPE is set to logic 1. Otherwise, the logic values of these bits have no meaning. The logical states of these bits, when read by the CPU, reflect the logical-OR of the PSS bits that are write accessible by the CPU and those in the System Programming Buffer (SPB) register of the TAP module (which are accessible via JTAG). These bits are read/write accessible for the CPU and are cleared to 0 by a power-on reset or Test-Logic-Reset. CPU writes to the PSS bits result in clearing of the JTAG PSS[1:0] bits. PSS1 PSS0 SOURCE SELECTION 0 0 JTAG 0 1 UART 1 0 SPI 1 1 Reserved Bit 1: System Program Enable (SPE). The SPE bit is used for in-system programming support and its logical state, when by the CPU, always reflects the logical-OR of the SPE bit that is write accessible by the CPU and SPR bit of the System Programming Buffer (SPB) Register in the TAP Module (which is accessible via JTAG.) The logical state of this bit determines the program flow after a reset. When it is set to logic 1, in-system programming is executed by the Utility ROM. When it is cleared to 0, execution is transferred to user code. This but allows read/write access by the SPU and is cleared to 0 only on a power-on reset or Test-Logic-Reset. The JTAG SPE bit is cleared by hardware when the ROD bit is set. CPU writes to the SPE bit result in clearing the JTAG PSS[1:0] bits. Bit 0: Serial Transfer Complete (TXC). This bit is set by hardware at the end of a transfer cycle at the TAP communication link. The TXC bit helps the debug engine to recognize host requests, either command or data. This bit is normally set by ROM code to signify or request the sending or receiving of data. The TXC bit is cleared by the debug engine once set. CPU writes to the TXC bit results in clearing of the JTAG PSS[1:0] bits. 16.3.5 In-Circuit Debug Buffer Register (ICDB) Bit # Name 7 6 5 4 3 2 1 0 ICDB.7 ICDB.6 ICDB.5 ICDB.4 ICDB.3 ICDB.2 ICDB.1 ICDB.0 Reset 0 0 0 0 0 0 0 0 Access rw rw rw rw rw rw rw rw r = read, w = write Bits 7 to 0: In-Circuit Debug Buffer Register (ICDB.[7:0]). This register serves as the parallel holding buffer for the debug shift register of the TAP. Data is read from or written to ICDB for serial communication between the debug routines and the external host. 16-15 Maxim Integrated MAXQ Family User’s Guide 16.3.6 In-Circuit Debug Data Register (ICDD) Bit # 15 14 13 12 11 10 9 8 Name ICDD.15 ICDD.14 ICDD.13 ICDD.12 ICDD.11 ICDD.10 ICDD.9 ICDD.8 Reset 0 0 0 0 0 0 0 0 Access r r r r r r r r Bit # 7 6 5 4 3 2 1 0 Name ICDD.7 ICDD.6 ICDD.5 ICDD.4 ICDD.3 ICDD.2 ICDD.1 ICDD.0 Reset 0 0 0 0 0 0 0 0 Access r r r r r r r r r = read Bits 15 to 0: In-Circuit Debug Data (ICDD.[15:0]). This register is used by the debug engine to store data/read count so that ROM code can view that information. This register is also used by the debug engine as a data register for content matching when BP5 is used as a register breakpoint. In this case, only data bits in this register with their corresponding mask bits in the ICDA register set will be compared with the updated destination data to determine if a break should be generated. 16.3.7 In-Circuit Debug Address Register (ICDA) Bit # 15 14 13 12 11 10 9 8 Name ICDA.15 ICDA.14 ICDA.13 ICDA.12 ICDA.11 ICDA.10 ICDA.9 ICDA.8 Reset 0 0 0 0 0 0 0 0 Access r r r r r r r r Bit # 7 6 5 4 3 2 1 0 Name ICDA.7 ICDA.6 ICDA.5 ICDA.4 ICDA.3 ICDA.2 ICDA.1 ICDA.0 Reset 0 0 0 0 0 0 0 0 Access r r r r r r r r r = read Bits 15 to 0: In-Circuit Debug Address (ICDA.[15:0]). This register is used by the debug engine to addresses so that ROM code can view that information. This register is also used by the debug engine as a mask register to mask out don’t care bits in the ICDD register when BP5 is used as a register breakpoint. When a bit in this register is set to 1, the corresponding bit location in the ICDD register will be compared to the data being written to the destination register to determine if a break should be generated. When a bit in this register is cleared, the corresponding bit in the ICDD register becomes a don’t care and is not compared against the data being written. When all bits in this register are cleared, any updated data pattern will cause a break when the BP5 register matches the destination register address of the current instruction. Maxim Integrated 16-16 MAXQ Family User’s Guide SECTION 17: IN-SYSTEM PROGRAMMING (JTAG) This section contains the following information: 17.1 JTAG Bootloader Operation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17-2 17.2 Password-Protected Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17-3 17.2.1 Entering Password . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17-3 17-1 Maxim Integrated MAXQ Family User’s Guide SECTION 17: IN-SYSTEM PROGRAMMING (JTAG) Internal nonvolatile memory of MAXQ microcontrollers can be initialized via Bootstrap Loader mode. To enable the Bootstrap loader and establish a desired communication channel, the System Programming instruction (100b) must be loaded into the TAP instruction register using the IR-Scan sequence. Once the instruction is latched in the instruction parallel buffer (IR2:0) and is recognized by the TAP controller in the Update-IR state, a 3-bit data shift register is activated as the communication channel for DR-Scan sequences. The TAP retains the System Programming instruction until a new instruction is shifted in or the TAP controller returns to the Test-Logic-Reset state. This 3-bit shift register formed between the TDI and TDO pins is directly interfaced to the 3-bit Serial Programming Buffer (SPB). The System Programming Buffer (SPB) contains three bits with the following functions: • SPB.0: System Programming Enable (SPE). Setting this bit to logic 1 denotes that system programming is desired upon exiting reset. When it is cleared to logic 0, no system programming is needed. The logic state of SPE is examined by the reset vector in the Utility ROM to determine the program flow after a reset. When SPE = 1, the Bootstrap Loader selected by the PSS1:0 bits are activated to perform a Bootstrap Loader function. When SPE = 0, the Utility ROM transfers execution control to the normal user program. • SPB.2:1: Programming Source Select (PSS1:PSS0). These bits allow the host to select programming interface sources. The PSS bits have no functions when the SPE bit is cleared. PSS1 PSS0 PROGRAMMING SOURCE 0 0 1 1 0 1 0 1 JTAG UART SPI Reserved The DR-Scan sequence is used to configure the SPB bits. The data content of the SPB register is reflected in the ICDF register and allows read/write access by the CPU. These bits are cleared by power-on reset or Test-Logic-Reset of the TAP controller. 17.1 JTAG Bootloader Operation Devices that support a JTAG bootloader have the benefit of using the same status bit handshaking hardware as is used for in-circuit debugging. When the SPE bit of the System Programming Buffer (SPB) is set to 1 and JTAG is selected as the programming source (PSS1:0 = 00b), the background and active debug mode state machines are disabled. Once the host loads the Debug instruction into the TAP instruction register (IR2:0), the 10-bit shift register interface to ICDB and the status bits becomes available for host-to-ROM bootloader communication. The status bits should be interpreted as follows for JTAG bootloader operation: BITS 1:0 00 01 STATUS Reserved Reserved CONDITION Invalid condition. Invalid condition 10 Loader-Busy ROM Loader is busy executing code or processing the current command. 11 Loader-Valid ROM Loader is supplying valid output data to the host in current shift operation. When the using the JTAG bootloader option (SPE = 1, PSS1:0 = 00b), the sole purpose of the debug hardware is to simultaneously transfer the data byte shifted in from the host into the ICDB register and transfer the contents of an internal holding register (loaded by ROM code writes of ICDB) into the shift register for output to the host. This transfer takes place on the falling edge of TCK at the UpdateDR state. The debug hardware additionally clears the TXC bit at this point in the state diagram. The ROM loader code controls the status bit output to the host by asserting TXC = 1 when it has valid data to be shifted out. The ROM code may flexibly implement whatever communication protocol and command set it wishes within the data byte portion of the shifted 10-bit word. Maxim Integrated 17-2 MAXQ Family User’s Guide 17.2 Password-Protected Access Some applications require preventative measures to protect against simple access and viewing of program code memory. To address this need for code protection, any MAXQ microcontroller equipped with a Utility ROM that permits in-system programming, in-application programming, or in-circuit debugging grants full access to those utilities only after a password has been supplied. The password is defined as the 16 words of physical program memory at addresses x0010h to x001Fh. Note that using these memory locations as a password does not exclude their usage for general code space if a unique password is not needed. A single Password Lock bit (PWL) is implemented in the SC register. When the PWL is set to 1, a password is required to access the in-circuit debug and in-system programming ROM routines that allow reading or writing of internal memory. When PWL is cleared to 0, these utilities are fully accessible through the Utility ROM without a password. The PWL bit defaults to 1 by a power-on reset. To access the ROM utilities, a correct password is needed; otherwise access to the ROM utilities is denied. Once the correct password has been supplied by the user, the ROM clears the password lock. The PWL remains clear until one of the following occurs: • a power-on reset, or • set to logic 1 by user software. For devices with ROM program memory, the end user supplies the ROM code, thus the user always knows the password if needed. It is expected that the password will rarely be needed since the utility of memory programming and/or in-circuit debug to the end user will be minimal once the decision has been made to freeze the code in program ROM. For devices with reprogrammable nonvolatile memory, the password is always known for a fully erased device since the unprogrammed state of these memories will be fixed. Once the memory has been programmed, a password is established and can be used for access protection. The Utility ROM code denies access to the protected routines when PWL indicates a locked state. 17.2.1 Entering Password A password can be entered in one of two ways: • Via the in-system programming interface established by the PSS1:PSS0 bits when SPE bit is set to logic 1; the ROM Bootstrap Loader dictates the protocol for entering the password over the specified serial communication interface • Via the TAP interface directly by issuing the Unlock Password debug mode command. The Unlock Password command requires 32 follow-on transfer cycles each containing a byte value to be compared with the program memory password. 17-3 Maxim Integrated MAXQ Family User’s Guide SECTION 18: MAXQ FAMILY INSTRUCTION SET SUMMARY This section contains the following information: ADD/ADDC src . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18-5 AND src . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18-6 AND Acc. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18-7 {L/S}CALL src . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18-8 CMP src . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18-9 CPL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18-9 CPL C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18-10 {L/S}DJNZ LC[n], src . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18-10 {L/S} JUMP src . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18-11 {L/S}JUMP C/{L/S}JUMP NC, src, L/S}JUMP Z/{L/S}JUMP NZ, src, {{L/S}JUMP E/{L/S}JUMP NE, src, {L/S}JUMP S, src . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18-12 MOVE dst, src . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18-14 MOVE Acc., C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18-16 MOVE C, Acc. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18-17 MOVE C, src. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18-17 MOVE C, #0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18-17 MOVE C, #1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18-18 MOVE dst., #0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18-18 MOVE dst., #1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18-18 NEG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18-19 OR src . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18-19 OR Acc. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18-20 POP dst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18-20 POPI dst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18-21 PUSH src . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18-21 RET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18-22 RET C/RET NC, RET Z/RET NZ, RET S . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18-22 RETI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18-24 RETI C/RETI NC, RETI Z/RETI NZ, RETI S . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18-24 18-1 Maxim Integrated MAXQ Family User’s Guide RL/RLC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18-26 RR/RRC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18-28 SLA/SLA2/SLA4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18-30 SR/SRA/SRA2/SRA4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18-32 SUB/SUBB src . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18-36 XCH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18-37 XCHN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18-37 XOR src . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18-38 XOR Acc. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18-38 LIST OF TABLES Table 18-1. Instruction Set Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18-3 Table 18-2. Source Specifier Codes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18-14 Table 18-3. Destination Specifier Codes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18-15 Maxim Integrated 18-2 MAXQ Family User’s Guide SECTION 18: MAXQ FAMILY INSTRUCTION SET SUMMARY Table 18-1. Instruction Set Summary MATH BIT OPERATIONS LOGICAL OPERATIONS MNEMONIC 18-3 AND src OR src XOR src CPL NEG SLA SLA2 SLA4 RL RLC SRA SRA2 SRA4 SR RR RRC MOVE C, Acc. MOVE C, #0 MOVE C, #1 CPL C MOVE Acc., C AND Acc. OR Acc. XOR Acc. MOVE dst., #1 MOVE dst., #0 MOVE C, src. ADD src ADDC src SUB src SUBB src DESCRIPTION Acc ← Acc AND src Acc ← Acc OR src Acc ← Acc XOR src Acc ← ~Acc Acc ← ~Acc + 1 Shift Acc left arithmetically Shift Acc left arithmetically twice Shift Acc left arithmetically four times Rotate Acc left (w/o C) Rotate Acc left (through C) Shift Acc right arithmetically Shift Acc right arithmetically twice Shift Acc right arithmetically four times Shift Acc right (0 → msbit) Rotate Acc right (w/o C) Rotate Acc right (though C) C ← Acc. C←0 C←1 C ← ~C Acc. ← C C ← C AND Acc. C ← C OR Acc. C ← C XOR Acc. dst. ← 1 dst. ← 0 C ← src. Acc ← Acc + src Acc ← Acc + (src + C) Acc ← Acc – src Acc ← Acc – (src + C) 16-BIT INSTRUCTION WORD f001 1010 ssss ssss f010 1010 ssss ssss f011 1010 ssss ssss 1000 1010 0001 1010 1000 1010 1001 1010 1000 1010 0010 1010 1000 1010 0011 1010 1000 1010 0110 1010 1000 1010 0100 1010 1000 1010 0101 1010 1000 1010 1111 1010 1000 1010 1110 1010 1000 1010 1011 1010 1000 1010 1010 1010 1000 1010 1100 1010 1000 1010 1101 1010 1110 1010 bbbb 1010 1101 1010 0000 1010 1101 1010 0001 1010 1101 1010 0010 1010 1111 1010 bbbb 1010 1001 1010 bbbb 1010 1010 1010 bbbb 1010 1011 1010 bbbb 1010 1ddd dddd 1bbb 0111 1ddd dddd 0bbb 0111 fbbb 0111 ssss ssss f100 1010 ssss ssss f110 1010 ssss ssss f101 1010 ssss ssss f111 1010 ssss ssss STATUS BITS AFFECTED S, Z S, Z S, Z S, Z S, Z C, S, Z C, S, Z C, S, Z S C, S, Z C, Z C, Z C, Z C, S, Z S C, S, Z C C C C S, Z C C C C, S, E, Z C, S, E, Z C C, S, Z, OV C, S, Z, OV C, S, Z, OV C, S, Z, OV AP INC/DEC Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y NOTES 1 1 1 2 2 Y Y Y Y 1 1 1 1 Maxim Integrated MAXQ Family User’s Guide Table 18-1. Instruction Set Summary (continued) DATA TRANSFER BRANCHING MNEMONIC {L/S}JUMP src {L/S}JUMP C, src {L/S}JUMP NC, src {L/S}JUMP Z, src {L/S}JUMP NZ, src {L/S}JUMP E, src {L/S}JUMP NE, src {L/S}JUMP S, src {L/S}DJNZ LC[n], src {L/S}CALL src RET RET C RET NC RET Z RET NZ RET S RETI RETI C RETI NC RETI Z RETI NZ RETI S XCH (MAXQ20 only) XCHN MOVE dst, src PUSH src POP dst POPI dst CMP src NOP DESCRIPTION IP ← IP + src or src If C=1, IP ← (IP + src) or src If C=0, IP ← (IP + src) or src If Z=1, IP ← (IP + src) or src If Z=0, IP ← (IP + src) or src If E=1, IP ← (IP + src) or src If E=0, IP ← (IP + src) or src If S=1, IP ← (IP + src) or src If --LC[n] 0, IP← (IP + src) or src @++SP ← IP+1; IP ← (IP+src) or src IP ← @SP-If C=1, IP ← @SP-If C=0, IP ← @SP-If Z=1, IP ← @SP-If Z=0, IP ← @SP-If S=1, IP ← @SP-IP ← @SP-- ; INS← 0 If C=1, IP ← @SP-- ; INS← 0 If C=0, IP ← @SP-- ; INS← 0 If Z=1, IP ← @SP-- ; INS← 0 If Z=0, IP ← @SP-- ; INS← 0 If S=1, IP ← @SP-- ; INS← 0 Swap Acc bytes Swap nibbles in each Acc byte dst ← src @++SP ← src dst ← @SP-dst ← @SP-- ; INS ← 0 E ← (Acc = src) No operation 16-BIT INSTRUCTION WORD f000 1100 ssss ssss f010 1100 ssss ssss f110 1100 ssss ssss f001 1100 ssss ssss f101 1100 ssss ssss 0011 1100 ssss ssss 0111 1100 ssss ssss f100 1100 ssss ssss f10n 1101 ssss ssss f011 1101 ssss ssss 1000 1100 0000 1101 1010 1100 0000 1101 1110 1100 0000 1101 1001 1100 0000 1101 1101 1100 0000 1101 1100 1100 0000 1101 1000 1100 1000 1101 1010 1100 1000 1101 1110 1100 1000 1101 1001 1100 1000 1101 1101 1100 1000 1101 1100 1100 1000 1101 1000 1010 1000 1010 1000 1010 0111 1010 fddd dddd ssss ssss f000 1101 ssss ssss 1ddd dddd 0000 1101 1ddd dddd 1000 1101 f111 1000 ssss ssss 1101 1010 0011 1010 STATUS BITS AFFECTED AP INC/DEC NOTES 6 6 6 6 6 6 6 6 6 6,7 S S C, S, Z, E C, S, Z, E C, S, Z, E E Y Y (Note 8) 7, 8 7 7 7 Note 1: The active accumulator (Acc) is not allowed as the src in operations where it is the implicit destination. Note 2: Only module 8 and modules 0-5 (when implemented for a given product) are supported by these single-cycle bit operations. Potentially affects C or E if PSF register is the destination. Potentially affects S and/or Z if AP or APC is the destination. Note 3: The terms Acc and A[AP] can be used interchangeably to denote the active accumulator. Note 4: Any index represented by or found inside [ ] brackets is considered variable, but required. Note 5: The active accumulator (Acc) is not allowed as the dst if A[AP] is specified as the src. Note 6: The '{L/S}' prefix is optional. Note 7: Instructions that attempt to simultaneously push/pop the stack (e.g. PUSH @SP--, PUSH @SPI--, POP @++SP, POPI @++SP) or modify SP in a conflicting manner (e.g., MOVE SP, @SP--) are invalid. Note 8: Special cases: If ‘MOVE APC, Acc’ sets the APC.CLR bit, AP will be cleared, overriding any auto-inc/dec/modulo operation specified for AP. If ‘MOVE AP, Acc’ causes an auto-inc/dec/modulo operation on AP, this overrides the specified data transfer (i.e., Acc will not be transferred to AP). Maxim Integrated 18-4 MAXQ Family User’s Guide ADD/ADDC src Add/Add with Carry Description: The ADD instruction sums the active accumulator (Acc or A[AP]) and the specified src data and stores the result back to the active accumulator. The ADDC instruction additionally includes the Carry (C) Status Flag in the summation. For the complete list of src specifiers, reference the MOVE instruction. The MAXQ20 may use the PFX[n] register to supply the high byte of data for 8-bit sources. Status Flags: C, S, Z, OV ADD Operation: Acc ← Acc + src Encoding: 15 f100 0 1010 MAXQ10 Example(s): ssss ssss ;Acc = 45h for each example ADD A[3] ; A[3]=0Fh ADD #0C0h ; → Acc =05h,C=1, Z=0, S=0; ADD A[4] ; A[4]=40h ; → Acc =54h,C=0, Z=0, S=0; ; → Acc = 85h, C=0, Z=0, S=1, OV=1 MAXQ20 Example(s): ;Acc = 2345h for each example ADD A[3] ; A[3]=FF0Fh ; → Acc =2254h,C=1, Z=0, S=0, OV=0 ADD #0C0h ; → Acc =2405h,C=0, Z=0, S=0, OV=0 ADD A[4] ; A[4]=C000h ADD A[5] ; A[5]=6789h ; → Acc = E345h, C=0, Z=0, S=1, OV=0 ; → Acc = 8ACEh, C=0, Z=0, S=1, OV=1 ADDC Operation: Acc ← Acc + C + src Encoding: 15 f110 0 1010 MAXQ10 Example(s): ssss ssss ; Acc = 45h for each example ADDC A[3] ; A[3] = BAh, C=1 ; → Acc = 00h, C=1, Z=1, S=0 ADDC @DP[0]-- ; @DP[0] = 0Eh, C=1 ; → Acc = 54h, C=0, Z=0, S=0 18-5 Maxim Integrated MAXQ Family User’s Guide MAXQ20 Example(s): ; Acc = 2345h for each example ADDC A[3] ; A[3] = DCBAh, C=1 ; → Acc = 0000h, C=1, Z=1, S=0, OV=0 ADDC @DP[0]-- ; @DP[0] = 00EEh, C=1 ; → Acc = 2434h, C=0, Z=0, S=0, OV=0 Special Notes: The active accumulator (Acc) is not allowed as the src for these operations. AND src Logical AND Description: Performs a logical-AND between the active accumulator (Acc) and the specified src data. For the complete list of src specifiers, reference the MOVE instruction. The MAXQ20 may use the PFX[n] register to supply the high byte of data for 8-bit sources. Status Flags: S, Z Operation: Acc ← Acc AND src Encoding: 15 0 f001 1010 MAXQ10 Example(s): ssss ssss ; Acc = 45h for each example AND A[3] ; A[3]=0Fh ; → Acc = 05h, S=0, Z=0 AND #33h MAXQ20 Example(s): ; → Acc = 01h, S=0, Z=0 ; Acc = 2345h for each example AND A[3] ; A[3]=0F0Fh ; → Acc = 0305h, S=0, Z=0 AND #33h ; → Acc = 0001h AND #2233h ; generates object code below ; MOVE PFX[0], #22h (smart-prefixing) ; AND #33h ; → Acc = 2201h MOVE PFX[0], #0Fh AND M0[8] ; M0[8]=0Fh (assume M0[8] is an 8-bit register) ; → Acc = 0305h Special Notes: Maxim Integrated The active accumulator (Acc) is not allowed as the src for this operation. 18-6 MAXQ Family User’s Guide AND Acc. Logical AND Carry Flag with Accumulator Bit Description: Performs a logical-AND between the Carry (C) status flag and a specified bit of the active accumulator (Acc.) and returns the result to the Carry. Status Flags: C Operation: C ← C AND Acc. Encoding: 15 1001 0 1010 MAXQ10 Example(s): 18-7 1010 ; Acc = 45h, C=1 at start AND Acc.0 ; Acc.0=1 → C=1 AND Acc.1 ; Acc.1=0 → C=0 AND Acc.2 ; Acc.2=1 → C=0 MAXQ20 Example(s): Special Notes: bbbb ; Acc = 2345h, C=1 at start AND Acc.0 ; Acc.0=1 → C=1 AND Acc.1 ; Acc.1=0 → C=0 AND C, Acc.8 ; Acc.8=1 → C=0 For the MAXQ10, the accumulator width is only 8 bits. Thus, only bit index encoding ('bbbb') for bits 0 ('0000') through 7 ('0111') is supported. Maxim Integrated MAXQ Family User’s Guide {L/S}CALL src {Long/Short} Call to Subroutine Description: Performs a call to the subroutine destination specified by src. The CALL instruction uses an 8-bit immediate src to perform a relative short call (IP +127/-128 words). The CALL instruction uses a 16-bit immediate src to perform an absolute long CALL to the specified 16-bit address. The PFX[0] register is used to supply the high byte of a 16-bit immediate address for the absolute long CALL. Using the optional 'L' prefix (i.e., LCALL) results in an absolute long call and use of the PFX[0] register. Using the optional 'S' prefix (i.e., SCALL) attempts to generate a relative short call, but is flagged by the assembler if the destination is out of range. Specifying an internal register src (no matter whether 8-bit or 16-bit) always produces an absolute CALL to a 16-bit address, thus the 'L' and 'S' prefixes should not be used. The PFX[n] register value is used to supply the high address byte when an 8-bit register src is specified. Status Flags: None Operation: @++SP ← IP + 1 PUSH IP ← src Absolute CALL IP ← IP + src Relative CALL Encoding: 15 f011 Example(s): 0 1101 ssss CALL label1 ssss ; relative call to label1 (must be within IP +127/ ; 128 address range) CALL label1 ; absolute call to label1 = 0120h ; MOVE PFX[0], #01h ; CALL #20h. CALL DP[0] ; DP[0] holds 16-bit address of subroutine CALL M0[0] ; assume M0[0] is an 8-bit register ; absolute call to addr16 ; high(addr16)=00h (PFX[0]) ; low (addr16)=M0[0] MOVE PFX[0], #22h CALL M0[0] ; ; assume M0[0] is an 8-bit register ; high(addr16)=22h (PFX[0]) ; low (addr16)=M0[0] LCALL label1 ; label=0120h and is relative to this instruction ; absolute call is forced by use of 'L' prefix ; MOVE PFX[0], #01h ; CALL #20h SCALL label1 ; relative offset for label1 calculated and used ; if label1 is not relative, assembler will generate an error SCALL #10h Maxim Integrated ; relative offset of #10h is used directly by the CALL 18-8 MAXQ Family User’s Guide CMP src Compare Accumulator Description: Compare for equality between the active accumulator and the least significant byte of the specified src. The MAXQ20 may use the PFX[n] register to supply the high byte of data for 8-bit sources. Status Flags: E Operation: Acc = src: E ← 1 Acc src: E ← 0 Encoding: 15 f111 MAXQ10 Example(s): MAXQ20 Example(s): 0 1000 ssss ssss CMP A[1] ; Acc = 45h, A[1] = 10h, E=0 CMP #45h ; Acc = 45h, E=1 CMP DP[0] ; Acc = 45h, DP[0]=0345h, E=1 CMP #45h ; Acc = 0145h, E=0 CMP #145h ; PFX[0] register used ; MOVE PFX[0], #01h (smart-prefixing) ; CMP #45h E=1 CPL Complement Acc Description: Performs a logical bitwise complement (1's complement) on the active accumulator (Acc or A[AP]) and returns the result to the active accumulator. Status Flags: S, Z Operation: Acc ← ~Acc Encoding: 15 1000 MAXQ10 Example(s): 0 1010 0001 1010 ; Acc = FFh, S=1, Z=0 CPL ; Acc ← 00h, S=0, Z=1 ; Acc = 09h, S=0, Z=0 CPL MAXQ20 Example(s): ; Acc ← F6h, S=1, Z=0 ; Acc = FFFFh, S=1, Z=0 CPL ; Acc ← 0000h, S=0, Z=1 ; Acc = 0990h, S=0, Z=0 CPL 18-9 ; Acc ← F66Fh, S=1, Z=0 Maxim Integrated MAXQ Family User’s Guide CPL C Complement Carry Flag Description: Logically complements the Carry (C) Flag. Status Flags: C Operation: C ← ~C Encoding: 15 1101 0 1010 Example(s): 0010 1010 ;C=0 ;C←1 CPL C {L/S}DJNZ LC[n], src Decrement Counter, {Long/Short} Jump Not Zero Description: The DJNZ LC[n], src instruction performs a conditional branch based upon the associated Loop Counter (LC[n]) register. The DJNZ LC[n], src instruction decrements the LC[n] loop counter and branches to the address defined by src if the decremented counter has not reached 0000h. Program branches can be relative or absolute depending upon the src specifier and may be qualified by using the 'L' or 'S' prefixes as documented in the JUMP src op code. Status Flags: None Operation: LC[n] ← LC[n] -1 LC[n] 0: IP ← IP + src (relative) -or- src (absolute) LC[n] = 0: IP ← IP + 1 Encoding: 15 f10n Example(s): 0 1101 ssss MOVE LC[1], #10h ssss ; counter = 10h Loop: ADD @DP[0]++ DJNZ LC[1], Loop Maxim Integrated ; add data memory contents to Acc, post-inc DP[0] ; 16 times before falling through 18-10 MAXQ Family User’s Guide {L/S} JUMP src Unconditional {Long/Short} Jump Description: Performs an unconditional jump as determined by the src specifier. The JUMP instruction uses an 8-bit immediate src to perform a relative jump (IP +127/-128 words). The JUMP instruction uses a 16-bit immediate src to perform an absolute JUMP to the specified 16-bit address. The PFX[0] register is used to supply the high byte of a 16-bit immediate address for the absolute JUMP. Using the optional 'L' prefix (i.e., LJUMP) results in an absolute long jump and use of the PFX[0] register. Using the optional 'S' prefix (i.e., SJUMP) attempts to generate a relative short jump, but is flagged by the assembler if the destination is out of range. Specifying an internal register src (no matter whether 8-bit or 16-bit) always produces an absolute JUMP to a 16-bit address, thus the 'L' and 'S' prefixes should not be used. The PFX[n] register value is used to supply the high address byte when an 8-bit register src is specified. Status Flags: None Operation: IP ← src Absolute JUMP IP ← IP + src Relative JUMP Encoding: 15 f000 Example(s): 0 1100 JUMP label1 ssss ssss ; relative jump to label1 (must be within range ; IP +127/-128 words) JUMP label1 ; absolute jump to label1= 0400h ; MOVE PFX[0], #04h ; JUMP #00h JUMP DP[0] ; absolute jump to addr16 DP[0] JUMP M0[0] ; assume M0[0] is an 8-bit register ; absolute jump to addr16 ; high(addr16)=00h (PFX[0]) ; low (addr16)=M0[0] LJUMP label1 ; label=0120h and is relative to this instruction ; absolute jump is forced by use of 'L' prefix ; MOVE PFX[0], #01h ; JUMP #20h SJUMP label1 ; relative offset for label1 calculated and used ; if label1 is not relative, assembler will generate an error SJUMP #10h 18-11 ; relative offset of #10h is used directly by the JUMP Maxim Integrated MAXQ Family User’s Guide Conditional {Long/Short} Jump on Status Flag {L/S}JUMP C/{L/S}JUMP NC, src, L/S}JUMP Z/{L/S}JUMP NZ, src, {{L/S}JUMP E/{L/S}JUMP NE, src, {L/S}JUMP S, src Description: Performs conditional branching based upon the state of a specific processor status flag. JUMP C results in a branch if the Carry flag is set while JUMP NC branches if the Carry flag is clear. JUMP Z results in a branch if the Zero flag is set while JUMP NZ branches if the Zero flag is clear. JUMP E results in a branch if the Equal flag is set while JUMP NE branches if the Equal flag is clear. JUMP S results in a branch if the Sign flag is set. Program branches can be relative or absolute depending upon the src specifier and may be qualified by using the 'L' or 'S' prefixes as documented in the JUMP src op code. Special src restrictions apply to JUMP E and JUMP NE. Status Flags: None JUMP C C=1: IP ← IP + src (relative) -or- src (absolute) Operation: C=0: IP ← IP + 1 Encoding: 15 f010 0 1100 ssss ssss Example(s): JUMP C, label1 JUMP NC C=0: IP ← IP + src (relative) -or- src (absolute) Operation: C=1: IP ← IP +1 ; C=0, branch not taken Encoding: 15 f110 1100 ssss Example(s): JUMP NC, label1 JUMP Z Z=1: IP ← IP + src Operation: Z=0: IP ← IP + 1 ssss ; C=0, branch taken Encoding: 15 f001 Example(s): Maxim Integrated 1100 JUMP Z, label1 0 ssss 0 ssss ; Z=1, branch taken 18-12 MAXQ Family User’s Guide JUMP NZ Z=0: IP ← IP + src (relative) -or- src (absolute) Operation: Z=1: IP ← IP + 1 Encoding: 15 f101 0 1100 ssss ssss Example(s): JUMP NZ, label1 JUMP E E=1: IP ← IP + src (relative) -or- src (absolute) Operation: E=0: IP ← IP + 1 Encoding: 15 0011 ; Z=1, branch taken 0 1100 ssss ssss Example(s): JUMP E, label1 Special Notes: The src specifier must be immediate data. ; E=1, branch taken JUMP NE Operation: E=0: IP ← IP + src (relative) -or- src (absolute) E=1: IP ← IP + 1 Encoding: 15 0111 0 1100 ssss ssss Example(s): JUMP NE, label1 Special Notes: The src specifier must be immediate data. JUMP S S=1: IP ← IP + src (relative) -or- src (absolute) Operation: S=0: IP ← IP + 1 Encoding: 15 f100 Example(s): 18-13 ; E=0, branch taken 0 1100 JUMP S, label1 ssss ssss ; S=0, branch not taken Maxim Integrated MAXQ Family User’s Guide MOVE dst, src Move Data Description: Moves data from a specified source (src) to a specified destination (dst). A list of defined source, destination specifiers is given in the table below. Also, since src can be either 8-bit (byte) or 16-bit (word) data, the rules governing data transfer are also explained below in the encoding section. Status Flags: S, Z (if dst is Acc or AP or APC) C, E (if dst is PSF) Operation: dst ← src Encoding: 15 0 fddd dddd ssss ssss Table 18-2. Source Specifier Codes src src Bit Encoding (f ssssssss) WIDTH (16 or 8) #k 0 kkkk kkkk 8 DESCRIPTION kkkkkkkk = Immediate (Literal) Data MN[n] 1 nnnn 0NNN 8/16 nnnn Selects One of First 16 Registers in Module NNN; where NNN= 0 to 5. Access to Second 16 Using PFX[n]. AP APC PSF IC IMR SC IIR CKCN WDCN A[n] Acc A[AP] IP @SP-SP IV LC[n] @SPI-@BP[Offs] @BP[Offs++] @BP[Offs--] OFFS DPC GR GRL BP GRS GRH GRXL FP @DP[n] @DP[n]++ @DP[n]-DP[n] 1 0000 1000 1 0001 1000 1 0100 1000 1 0101 1000 1 0110 1000 1 1000 1000 1 1011 1000 1 1110 1000 1 1111 1000 1 nnnn 1001 1 0000 1010 1 0001 1010 1 0000 1100 1 0000 1101 1 0001 1101 1 0010 1101 1 011n 1101 1 1000 1101 1 0000 1110 1 0001 1110 1 0010 1110 1 0011 1110 1 0100 1110 1 0101 1110 1 0110 1110 1 0111 1110 1 1000 1110 1 1001 1110 1 1010 1110 1 1011 1110 1 0n00 1111 1 0n01 1111 1 0n10 1111 1 0n11 1111 8 8 8 8 8 8 8 8 8 8/16 8/16 8/16 16 16 16 16 16 16 8/16 8/16 8/16 8 16 16 8 16 16 8 16 16 8/16 8/16 8/16 16 Accumulator Pointer Accumulator Pointer Control Processor Status Flag Register Interrupt and Control Register Interrupt Mask Register System Control Register Interrupt Identification Register Clock Control Register Watchdog Control Register nnnn Selects One of 16 Accumulators Active Accumulator = A[AP]. Update AP per APC Active Accumulator = A[AP]. No change to AP Instruction Pointer 16-Bit Word @SP, Post-Decrement SP Stack Pointer Interrupt Vector n Selects 1 of 2 Loop Counter Registers 16-bit word @SP, Post-Decrement SP, INS=0 Data Memory @BP[Offs] Data memory @BP[Offs]; Post Increment OFFS Data Memory @BP[Offs]; Post Decrement OFFS Frame Pointer Offset from Base Pointer (BP) Data Pointer Control Register General Register Low Byte of GR Register Frame Pointer Base Pointer (BP) Byte-Swapped GR Register High Byte of GR Register Sign Extended Low Byte of GR Register Frame Pointer (BP[Offs]) Data Memory @DP[n] Data Memory @DP[n], Post-Increment DP[n] Data Memory @DP[n], Post-Decrement DP[n] n Selects 1 of 2 Data Pointers Maxim Integrated 18-14 MAXQ Family User’s Guide MOVE dst, src (continued) Move Data Table 18-3. Destination Specifier Codes dst dst Bit Encoding (ddd dddd) WIDTH (16 OR 8) NUL 111 0110 8/16 Null (Virtual) Destination. Intended as a bit bucket to assist software with pointer increments/decrements. MN[n] nnn 0NNN 8/16 nnnn Selects One of First 8 Registers in Module NNN; where NNN= 0 to 5. Access to Next 24 Using PFX[n]. AP 000 1000 8 APC 001 1000 8 PSF 100 1000 8 IC 101 1000 8 IMR 110 1000 8 A[n] nnn 1001 8/16 Acc 000 1010 8/16 PFX[n] nnn 1011 8 @++SP 000 1101 16 SP 001 1101 16 IV 010 1101 16 LC[n] 11n 1101 16 @BP[Offs] 000 1110 8/16 @BP[++Offs] 001 1110 8/16 @BP[--Offs] 010 1110 8/16 OFFS 011 1110 8 DPC 100 1110 16 GR 101 1110 16 GRL 110 1110 8 BP 111 1110 16 @DP[n] n00 1111 8/16 @++DP[n] n01 1111 8/16 @--DP[n] n10 1111 8/16 DP[n] n11 1111 16 2-CYCLE DESTINATION ACCESS USING PFX[n] REGISTER (See Special Notes) SC 000 1000 8 CKCN 110 1000 8 WDCN 111 1000 8 A[n] nnn 1001 16 GRH 001 1110 8 Data Transfer dst (16-bit) ← src (16-bit): dst[15:0] ← src[15:0] Rules dst (8-bit) ← src (8-bit): dst[7:0] ← src[7:0] dst (16-bit) ← src (8-bit): DESCRIPTION Accumulator Pointer Accumulator Pointer Control Processor Status Flag Register Interrupt and Control Register Interrupt Mask Register nnn Selects 1 of First 8 Accumulators: A[0]..A[7] Active Accumulator = A[AP] nnn Selects One of 8 Prefix Registers 16-Bit Word @SP, Pre-Increment SP Stack Pointer Interrupt Vector n Selects 1 of 2 Loop Counter Registers Data Memory @BP[Offs] Data Memory @BP[Offs]; Pre-Increment OFFS Data Memory @BP[Offs]; Pre-Decrement OFFS Frame Pointer Offset from Base Pointer (BP) Data Pointer Control Register General Register Low Byte of GR Register Frame Pointer Base Pointer (BP) Data Memory @DP[n] Data Memory @DP[n], Pre-Increment DP[n] Data Memory @DP[n], Pre-Decrement DP[n] n Selects 1 of 2 Data Pointers System Control Register Clock Control Register Watchdog Control Register nnn Selects 1 of Second 8 Accumulators A[8]..A[15] High Byte of GR Register dst[15:8] ← 00h * dst[7:0] ← src[7:0] dst (8-bit) ← src (16-bit): dst[7:0] ← src[7:0] *Note: The PFX[0] register may be used to supply a separate high-order data byte for this type of transfer. 18-15 Maxim Integrated MAXQ Family User’s Guide Example(s): MOVE A[0], A[3] MOVE DP[0], #110h ; A[0] ← A[3] ; DP[0] ← #0110h (PFX[0] register used) ; MOVE PFX[0], #01h (smart-prefixing) ; MOVE DP[0], #10h MOVE DP[0], #80h Special Notes: ; DP[0] ← #0080h (PFX[0] register not needed) Proper loading of the PFX[n] registers, when for the purpose of supplying 16-bit immediate data or accessing 2-cycle destinations, is handled automatically by the assembler and is therefore an optional step for the user when writing assembly source code. Examples of the automatic PFX[n] code insertion by the assembler are demonstrated below. Initial Assembly Code Assembler Output MOVE DP[0], #0100h MOVE PFX[0], #01h MOVE A[15], A[7] MOVE PFX[2], anysrc MOVE A[7], A[7] MOVE A[8], #3040h MOVE PFX[2], #30h MOVE A[0], #40h MOVE Acc., C Move Carry Flag to Accumulator Bit Description: Replaces the specified bit of the active accumulator with the Carry bit. Status Flags: S, Z Operation: Acc. ← C Encoding: 15 1111 0 1010 MAXQ010 Example(s): MAXQ020 Example(s): ; Acc = 00h, S=0, Z=1 ; Acc = 8000h, S=1, Z=0, C=0 MOVE Acc.15, C Maxim Integrated 1010 ; Acc = 80h, S=1, Z=0, C=0 MOVE Acc.7, C Special Notes: bbbb ; Acc = 0000h, S=0, Z=1 For the MAXQ10, the accumulator width is only 8 bits. Thus, only bit index encoding ('bbbb') for bits 0 ('0000') through 7 ('0111') is supported. 18-16 MAXQ Family User’s Guide MOVE C, Acc. Move Accumulator Bit to Carry Flag Description: Replaces the Carry (C) status flag with the specified active accumulator bit. Status Flags: C Operation: C ← Acc. Encoding: 15 1110 0 1010 bbbb MAXQ010 Example(s): ; Acc = 01h, C=0 MOVE C, Acc.0 ; C =1 MAXQ020 Example(s): ; Acc = 01C0h, C=0 MOVE C, Acc.8 Special Notes: 1010 ; C =1 For the MAXQ10, the accumulator width is only 8 bits. Thus, only bit index encoding ('bbbb') for bits 0 ('0000') through 7 ('0111') is supported. MOVE C, src. Move Bit to Carry Flag Description: Replaces the Carry (C) status flag with the specified source bit src.. Status Flags: C Operation: C ← src. Encoding: 15 fbbb 0 0111 ssss Example(s): ssss ; M0[0] = FEh; C=1 (assume M0[0] is an 8-bit register) MOVE C, M0[0].0 ; C=0 MOVE C, #0 Clear Carry Flag Description: Clears the Carry (C) processor status flag. Status Flag: C←0 Operation: C←0 Encoding: 15 1101 0 1010 Example(s): 1010 ;C=1 MOVE C, #0 18-17 0000 ;C←0 Maxim Integrated MAXQ Family User’s Guide MOVE C, #1 Set Carry Flag Description: Sets the Carry (C) processor status flag. Status Flag: C←1 Operation: C←1 Encoding: 15 1101 0 1010 0001 Example(s): 1010 ;C=0 ;C←1 MOVE C, #1 MOVE dst., #0 Clear Bit Description: Clears the bit specified by dst.. Status Flags: C, E (if dst is PSF), S, Z Operation: dst. ← 0 Encoding: 15 1ddd 0 dddd 0bbb Example(s): Special Notes: 0111 ; M0[0] = FEh MOVE M0[0].1, #0 ; M0[0] = FCh MOVE M0[0].7, #0 ; M0[0] = 7Ch Only system module 8 and peripheral modules (0-5) are supported by MOVE dst., #0. MOVE dst., #1 Set Bit Description: Sets the bit specified by dst.. Status Flags: C, E (if dst is PSF), S, Z Operation: dst. ← 1 Encoding: 15 1ddd 0 dddd 1bbb Example(s): Special Notes: Maxim Integrated 0111 ; M0[0] = 00h MOVE M0[0].1, #1 ; M0[0] = 02h MOVE M0[0].7, #1 ; M0[0] = 82h Only system module 8 and peripheral modules (0-5) are supported by MOVE dst., #1. 18-18 MAXQ Family User’s Guide NEG Negate Accumulator Description: Performs a negation (two's complement) of the active accumulator and returns the result back to the active accumulator. Status Flags: S, Z Operation: Acc ← ~Acc + 1 Encoding: 15 1000 0 1010 1001 MAXQ10 Example(s): 1010 ; Acc = FEh, S=1, Z=0 NEG ; Acc = 02h, S=0, Z=0 MAXQ20 Example(s): ; Acc = FEEDh, S=1, Z=0 NEG ; Acc = 0113h, S=0, Z=0 OR src Logical OR Description: Performs a logical-OR between the active accumulator (Acc or A[AP]) and the specified src data. For the complete list of src specifiers, reference the MOVE instruction. The MAXQ20 may use the PFX[n] register to supply the high byte of data for 8-bit sources. Status Flags: S, Z Operation: Acc ← Acc OR src Encoding: 15 f010 0 1010 MAXQ10 Example(s): ssss ssss ; Acc = 45h for each example OR A[3] ; A[3]= 0Fh → Acc = 4Fh OR #33h ; → Acc = 77h MAXQ20 Example(s): ; Acc = 2345h for each example OR A[3] ; A[3]= 0F0Fh → Acc = 2F4Fh OR #1133h ; MOVE PFX[0], #11h (smart-prefixing) ; OR #33h → Acc = 3377h Special Notes: 18-19 The active accumulator (Acc) is not allowed as the src for this operation. Maxim Integrated MAXQ Family User’s Guide OR Acc. Logical OR Carry Flag with Accumulator Bit Description: Performs a logical-OR between the Carry (C) status flag and a specified bit of the active accumulator (Acc.) and returns the result to the Carry. Status Flags: C Operation: C ← C OR Acc. Encoding: 15 1010 0 1010 bbbb MAXQ10 Example(s): ; Acc = 45h, C=0 at start OR Acc.1 ; Acc.1=0 → C=0 OR Acc.2 ; Acc.2=1 → C=1 MAXQ20 Example(s): Special Notes: 1010 ; Acc = 2345h, C=0 at start OR Acc.1 ; Acc.1=0 → C=0 OR Acc.2 ; Acc.2=1 → C=1 For the MAXQ10, the accumulator width is only 8 bits. Thus, only bit index encoding ('bbbb') for bits 0 ('0000') through 7 ('0111') is supported. POP dst Pop Word from the Stack Description: Pops a single word from the stack (@SP) to the specified dst and decrements the stack pointer (SP). Status Flags: S, Z (if dst = Acc or AP or APC) C, E (if dst = PSF) Operation: dst ← @ SP-- Encoding: 15 1ddd 0 dddd 0000 1101 ; GR ← 1234h Example(s): POP GR ; @DP[0] ← 76h (WBS0=0) POP @DP[0] ; @DP[0] ← 0876h (WBS0=1) Stack Data: xxxxh 1234h 0876h xxxxh xxxxh Maxim Integrated ← SP (initial) ← SP (after POP GR) ← SP (after POP @DP[0]) 18-20 MAXQ Family User’s Guide POPI dst Pop Word from the Stack Enable Interrupts Description: Pops a single word from the stack (@SP) to the specified dst and decrements the stack pointer (SP). Additionally, POPI returns the interrupt logic to a state in which it can acknowledge additional interrupts. Status Flags: S, Z (if dst = Acc or AP or APC) C, E (if dst = PSF) Operation: dst ← @ SP-INS ← 0 Encoding: 15 1ddd Example(s): 0 dddd 1000 1101 See POP PUSH src Push Word to the Stack Description: Increments the stack pointer (SP) and pushes a single word specified by src to the stack (@SP). Status Flags: None Operation: SP ← ++SP Encoding: 15 f000 Example(s): 0 1101 PUSH GR ssss ssss ; GR=0F3Fh PUSH #40h Stack Data: xxxxh 0040h 0F3Fh xxxxh xxxxh 18-21 ← SP (after PUSH #40h) ← SP (after PUSH GR) ← SP (initial) Maxim Integrated MAXQ Family User’s Guide RET Return from Subroutine Description: RET pops a single word from the stack (@SP) into the Instruction Pointer (IP) and decrements the stack pointer (SP). The decremented SP is saved as the new stack pointer (SP). Status Flags: None Operation: IP ← @ SP-- Encoding: 15 0 1000 Example(s): 1100 0000 1101 RET Code Execution: Addr (IP) 0311h 0312h 0103h Op Code ••• RET ••• Stack Data: xxxxh xxxxh 0103h xxxxh xxxxh ← SP (before RET) ← SP (after RET) RET C/RET NC, RET Z/RET NZ, RET S Conditional Return on Status Flag Description: Performs conditional return (RET) based upon the state of a specific processor status flag. RET C returns if the Carry flag is set while RET NC returns if the Carry flag is clear. RET Z returns if the Zero flag is set while RET NZ returns if the Zero flag is clear. RET S returns if the Sign flag is set. See RET for additional information on the return operation. Status Flags: None RET C C=1: IP ← @SP-- Operation: C=0: IP ← IP + 1 Encoding: 15 1010 Example(s): Maxim Integrated RET C 0 1100 0000 1101 ; C=1, return (RET) is performed 18-22 MAXQ Family User’s Guide RET NC Operation: C=0: IP ← @SP-C=1: IP ← IP +1 Encoding: 15 1110 Example(s): 0 1100 0000 RET NC 1101 ; C=1, return (RET) does not occur RET Z Operation: Z=1: IP ← @SP-Z=0: IP ← IP + 1 Encoding: 15 1001 Example(s): 0 1100 0000 RET Z 1101 ; Z=0, return (RET) does not occur RET NZ Operation: Z=0: IP ← @SP-Z=1: IP ← IP +1 Encoding: 15 1101 Example(s): 0 1100 0000 RET NZ 1101 ; Z=0, return (RET) is performed RET S Operation: S=1: IP ← @SP-- Encoding: 15 S=0: IP ← IP + 1 1100 Example(s): 18-23 RET S 0 1100 0000 1101 ; S=0, return (RET) does not occur Maxim Integrated MAXQ Family User’s Guide RETI Return from Interrupt Description: RETI pops a single word from the stack (@SP) into the Instruction Pointer (IP) and decrements the stack pointer (SP). Additionally, RETI returns the interrupt logic to a state in which it can acknowledge additional interrupts. Status Flags: None Operation: IP ← @SP-INS ← 0 Encoding: 15 1000 Example(s): 0 1100 1000 1101 See RETI RETI C/RETI NC, RETI Z/RETI NZ, RETI S Conditional Return from Interrupt on Status Flag Description: Performs conditional return (RETI) based upon the state of a specific processor status flag. RETI C returns if the Carry flag is set while RETI NC returns if the Carry flag is clear. RETI Z returns if the Zero flag is set while RETI NZ returns if the Zero flag is clear. RETI S returns if the Sign flag is set. See RETI for additional information on the return operation. Status Flags: None RETI C Operation: C=1: IP ← @SP-INS ← 0 C=0: IP ← IP + 1 Encoding: 15 1010 Example(s): 0 1100 1000 1101 ; C=1, return from interrupt (RETI) is performed RETI C RETI NC Operation: C=0: IP ← @SP-INS ← 0 C=1: IP ← IP +1 Encoding: 15 1110 Example(s): Maxim Integrated RETI NC 0 1100 1000 1101 ; C=1, return from interrupt (RETI) does not occur 18-24 MAXQ Family User’s Guide RETI Z Operation: Z=1: IP ← @SP-INS ← 0 Z=0: IP ← IP + 1 Encoding: 15 1001 Example(s): 0 1100 1000 RETI Z 1101 ; Z=0, return from interrupt (RETI) does not occur RETI NZ Operation: Z=0: IP ← @SP-INS ← 0 Z=1: IP ← IP +1 Encoding: 15 1101 Example(s): 0 1100 1000 RETI NZ 1101 ; Z=0, return from interrupt (RETI) is performed RETI S Operation: S=1: IP ← @SP-INS ← 0 S=0: IP ← IP + 1 Encoding: 15 1100 Example(s): 18-25 RETI S 0 1100 1000 1101 ; S=0, return from interrupt (RETI) does not occur Maxim Integrated MAXQ Family User’s Guide (MAXQ10 Version) RL/RLC Rotate Left Accumulator Carry Flag (Ex/In)clusive Description: Rotates the active accumulator left by a single bit position. The RL instruction circulates the msb of the accumulator (bit 7) back to the lsb (bit 0) while the RLC instruction includes the Carry (C) flag in the circular left shift. Status Flags: C (for RLC only), S, Z (for RLC only) RL Operation: 7 Active Acc 0 Acc.[7:1]← Acc.[6:0]; Acc.0 ← Acc.7 Encoding: 15 1000 0 1010 0100 Example(s): 1010 ; Acc = A3h, S=1, Z=0 RL ; Acc = 47h, S=0, Z=0 RL ; Acc = 8Eh, S=1, Z=0 RLC Operation: 7 Active Acc 0 Carry Flag Acc.[7:1]← Acc.[6:0]; Acc.0 ← C; C ← Acc.7 Encoding: 15 1000 Example(s): Maxim Integrated 0 1010 0101 1010 ; Acc = A3h, C=1, S=1, Z=0 RLC ; Acc = 47h, C=1, S=0, Z=0 RLC ; Acc = 8Fh, C=0, S=1, Z=0 18-26 MAXQ Family User’s Guide (MAXQ20 Version) RL/RLC Rotate Left Accumulator Carry Flag (Ex/In)clusive Description: Rotates the active accumulator left by a single bit position. The RL instruction circulates the msb of the accumulator (bit 15) back to the lsb (bit 0) while the RLC instruction includes the Carry (C) flag in the circular left shift. Status Flags: C (for RLC only), S, Z (for RLC only) RL Operation: 15 Active Accumulator (Acc) 0 Acc.[15:1]← Acc.[14:0]; Acc.0 ← Acc.15 Encoding: 15 1000 0 1010 0100 Example(s): RLC Operation: 1010 ; Acc = A345h, S=1, Z=0 RL ; Acc = 468Bh, S=0, Z=0 RL ; Acc = 8D16h, S=1, Z=0 15 Active Accumulator (Acc) 0 Carry Flag Acc.[15:1]← Acc.[14:0]; Acc.0 ← C; C ← Acc.15 Encoding: 15 1000 Example(s): 18-27 0 1010 0101 1010 ; Acc = A345h, C=1, S=1, Z=0 RLC ; Acc = 468Bh, C=1, S=0, Z=0 RLC ; Acc = 8D17h, C=0, S=1, Z=0 Maxim Integrated MAXQ Family User’s Guide (MAXQ10 Version) RR/RRC Rotate Right Accumulator Carry Flag (Ex/In)clusive Description: Rotates the active accumulator right by a single bit position. The RR instruction circulates the lsb of the accumulator (bit 0) back to the msb (bit 7) while the RRC instruction includes the Carry (C) flag in the circular right shift. Status Flags: C (for RRC only), S, Z (for RRC only) RR Operation: 7 Active Acc (Acc) 0 Acc.[6:0] ← Acc.[7:1]; Acc.7 ← Acc.0 Encoding: 15 0 1000 1010 1100 Example(s): RRC Operation: 1010 ; Acc = 45h, S=1, Z=0 RR ; Acc = A2h, S=1, Z=0 RR ; Acc = 51h, S=0, Z=0 7 Active Acc (Acc) 0 Carry Flag Acc.7 ← C; C ← Acc.0 Encoding: 15 1000 Example(s): Maxim Integrated 0 1010 1101 1010 ; Acc = 45h, C=1, S=1, Z=0 RRC ; Acc = A2h, C=1, S=1, Z=0 RRC ; Acc = D1h, C=0, S=1, Z=0 18-28 MAXQ Family User’s Guide (MAXQ20 Version) RR/RRC Rotate Right Accumulator Carry Flag (Ex/In)clusive Description: Rotates the active accumulator right by a single bit position. The RR instruction circulates the lsb of the accumulator (bit 0) back to the msb (bit 15) while the RRC instruction includes the Carry (C) flag in the circular right shift. Status Flags: C (for RRC only), S, Z (for RRC only) RR Operation: 15 Active Accumulator (Acc) 0 Acc.[14:0]← Acc.[15:1]; Acc.15 ← Acc.0 Encoding: 15 1000 0 1010 1100 Example(s): RRC Operation: 1010 ;Acc = A345h, S=1, Z=0 RR ; Acc = D1A2h, S=1, Z=0 RR ; Acc = 68D1h, S=0, Z=0 15 Active Acc (Acc) 0 Carry Flag Acc.[14:0]← Acc.[15:1]; Acc.15 ← C; C ← Acc.0 Encoding: 15 1000 Example(s): 18-29 0 1010 1101 1010 ; Acc = A345h, C=1, S=1, Z=0 RRC ; Acc = D1A2h, C=1, S=1, Z=0 RRC ; Acc = E8D1h, C=0, S=1, Z=0 Maxim Integrated MAXQ Family User’s Guide (MAXQ10 Version) SLA/SLA2/SLA4 Shift Accumulator Left Arithmetically One, Two, or Four Times Description: Shifts the active accumulator left once, twice, or four times respectively for SLA, SLA2, and SLA4. For each shift iteration, a 0 is shifted into the lsb, and the msb is shifted into the Carry (C) flag. For signed data, this shifting process effectively retains the sign orientation of the data to the point at which overflow/underflow would occur. Status Flags: C, S, Z SLA Operation: Carry Flag 7 Active Acc (Acc) 0 0 C ← Acc.7 ; Acc.[7:1]← Acc.[6:0] ; Acc.0 ← 0 Encoding: 15 1000 0 1010 0010 Example(s): SLA2 Operation: 1010 ; Acc = E3h, C=0, S=1, Z=0 SLA ; Acc = C6h, C=1, S=1, Z=0 SLA ; Acc = 8Ch, C=1, S=1, Z=0 Carry Flag 7 Active Acc (Acc) 0 0 C ← Acc.6 ; Acc.[7:2]← Acc.[5:0] ; Acc.[1:0] ← 0 Encoding: 15 1000 0 1010 0011 Example(s): ; Acc = E3h, C=0, S=1, Z=0 SLA2 SLA4 Operation: 1010 ; Acc = 8Ch, C=1, S=1, Z=0 Carry Flag 7 Active Acc (Acc) 0 0 C ← Acc.4 ; Acc.[7:4]← Acc.[3:0] ; Acc.[3:0] ← 0 Encoding: 15 1000 Example(s): 1010 0110 1010 ; Acc = E3h, C=0, S=1, Z=0 SLA4 Maxim Integrated 0 ; Acc = 30h, C=0, S=0, Z=0 18-30 MAXQ Family User’s Guide (MAXQ20 Version) SLA/SLA2/SLA4 Shift Accumulator Left Arithmetically One, Two, or Four Times Description: Shifts the active accumulator left once, twice, or four times respectively for SLA, SLA2, and SLA4. For each shift iteration, a 0 is shifted into the lsb, and the msb is shifted into the Carry (C) flag. For signed data, this shifting process effectively retains the sign orientation of the data to the point at which overflow/underflow would occur. Status Flags: C, S, Z SLA Operation: Carry Flag 15 Active Accumulator (Acc) 0 0 C ← Acc.15; Acc.[15:1]← Acc.[14:0]; Acc.0 ← 0 Encoding: 15 1000 0 1010 0010 Example(s): 1010 ; Acc = E345h, C=0, S=1, Z=0 SLA ; Acc = C68h, C=1, S=1, Z=0 SLA ; Acc = 8D14h, C=1, S=1, Z=0 SLA2 Operation: Carry Flag 15 Active Accumulator (Acc) 0 0 C ← Acc.14 ; Acc.[15:2]← Acc.[13:0] ; Acc.[1:0] ← 0 Encoding: 15 1000 0 1010 0011 Example(s): 1010 ; Acc = E345h, C=0, S=1, Z=0 SLA2 ; Acc = 8D14h, C=1, S=1, Z=0 SLA4 Operation: Carry Flag 15 Active Accumulator (Acc) 0 0 C ← Acc.12; Acc.[15:4]← Acc.[11:0]; Acc.[3:0] ← 0 Encoding: 15 1000 Example(s): 1010 0110 1010 ; Acc = E345h, C=0, S=1, Z=0 SLA4 18-31 0 ; Acc = 3450h, C=0, S=0, Z=0 Maxim Integrated MAXQ Family User’s Guide (MAXQ10 Version) SR/SRA/SRA2/SRA4 Shift Accumulator Right/ Shift Accumulator Right Arithmetically One, Two, or Four Times Description: Shifts the active accumulator right once for the SR, SRA instructions and two or four times, respectively, for the SRA2, SRA4 instructions. The SR instruction shifts a 0 into the accumulator msb, while the SRA, SRA2, and SRA4 instructions effectively shift a copy of the current msb into the accumulator, thereby preserving any sign orientation. For each shift iteration, the accumulator lsb is shifted into the Carry (C) flag. Status Flags: C, S (changes for SR only), Z SR Operation: 7 Active Acc (Acc) 0 Carry Flag 0 Acc.[6:0]← Acc.[7:1] Acc.7 ← 0 C ← Acc.0 Encoding: 15 1000 0 1010 1010 Example(s): 1010 ; Acc = 45h, C=1, S=0, Z=0 SR ; Acc = 22h, C=1, S=0, Z=0 SR ; Acc = 11h, C=0, S=0, Z=0 SRA Operation: 7 Active Acc (Acc) 0 Carry Flag Acc.[6:0]← Acc.[7:1] Acc.7 ← Acc.7 C ← Acc.0 Encoding: 15 1000 Example(s): Maxim Integrated 0 1010 1111 1010 ; Acc = 03h, C=0, Z=0 SRA ; Acc = 01h, C=1, Z=0 SRA ; Acc = 00h, C=1, Z=1 18-32 MAXQ Family User’s Guide SRA2 Operation: 7 Active Acc (Acc) 0 Carry Flag Acc.[5:0] ← Acc.[7:2] Acc.[7:6] ← Acc.7 C ← Acc.1 Encoding: 15 1000 0 1010 1110 Example(s): 1010 ; Acc = 03h, C=0, Z=0 SRA2 SRA4 Operation: ; Acc = 00h, C=1, Z=1 7 Active Acc (Acc) 0 Carry Flag Acc.[3:0] ← Acc.[7:4] Acc.[7:4] ← Acc.7 C ← Acc.3 Encoding: 15 1000 Example(s): 1010 1011 1010 ; Acc = 98h, C=0, Z=0 SRA4 18-33 0 ; Acc = F9h, C=1, Z=0 Maxim Integrated MAXQ Family User’s Guide (MAXQ20 Version) SR/SRA/SRA2/SRA4 Shift Accumulator Right/ Shift Accumulator Right Arithmetically One, Two, or Four Times Description: Shifts the active accumulator right once for the SR, SRA instructions and 2 or 4 times, respectively, for the SRA2, SRA4 instructions. The SR instruction shifts a 0 into the accumulator msb while the SRA, SRA2, and SRA4 instructions effectively shift a copy of the current msb into the accumulator, thereby preserving any sign orientation. For each shift iteration, the accumulator lsb is shifted into the Carry (C) flag. Status Flags: C, S (changes for SR only), Z SR Operation: 15 Active Accumulator (Acc) 0 Carry Flag 0 Carry Flag 0 Acc.15 ← 0; Acc.[14:0]← Acc.[15:1]; C ← Acc.0 Encoding: 15 1000 0 1010 1010 Example(s): 1010 ; Acc = A345h, C=1, S=1, Z=0 SR ; Acc = 51A2h, C=1, S=0, Z=0 SR ; Acc = 28D1h, C=0, S=0, Z=0 SRA Operation: 15 Active Accumulator (Acc) Acc.[14:0]← Acc.[15:1] Acc.15 ← Acc.15 C ← Acc.0 Encoding: 15 1000 Example(s): Maxim Integrated 0 1010 1111 1010 ; Acc = 0003h, C=0, Z=0 SRA ; Acc = 0001h, C=1, Z=0 SRA ; Acc = 0000h, C=1, Z=1 18-34 MAXQ Family User’s Guide SRA2 Operation: 15 Active Accumulator (Acc) 0 Carry Flag 0 Carry Flag Acc.[13:0] ← Acc.[15:2] Acc.[15:14] ← Acc.15 C ← Acc.1 Encoding: 15 1000 0 1010 1110 1010 Example(s): ; Acc = 0003h, C=0, Z=0 SRA2 SRA4 Operation: ; Acc = 0000h, C=1, Z=1 15 Active Accumulator (Acc) Acc.[11:0] ← Acc.[15:4] Acc.[15:12] ← Acc.15 C ← Acc.3 Encoding: 15 1000 Example(s): 18-35 0 1010 1011 1010 ; Acc = 9878h, C=0, Z=0 SRA4 ; Acc = F987h, C=1, Z=0 SRA4 ; Acc = FF98h, C=0, Z=0 Maxim Integrated MAXQ Family User’s Guide SUB/SUBB src Subtract /Subtract with Borrow Description: Subtracts the specified src from the active accumulator (Acc) and returns the result back to the active accumulator. The SUBB additionally subtracts the borrow (Carry Flag), which may have resulted from previous subtraction. For the complete list of src specifiers, reference the MOVE instruction. The MAXQ20 may use the PFX[n] register to supply the high byte of data for 8-bit sources. Status Flags: C, S, Z, OV SUB Operation: Acc ← Acc - src Encoding: 15 0 f101 1010 ssss MAXQ10 Example(s): ssss ; Acc = 23h to start, A[1]= 12h SUB A[1] ; Acc = 11h, C=0, S=0, Z=0 SUB A[1] ; Acc = FFh, C=1, S=1, Z=0 SUB A[1] ; Acc = 10F5h, C=0, S=0, Z=0, OV=0 SUB A[1] ; Acc = FEA5h, C=1, S=1, Z=0, OV=0 SUB A[2] ; A[2] =7FFFh MAXQ20 Example(s): ; Acc = 2345h to start, A[1]= 1250h ; → Acc = 7EA6h; C=0, S=0, Z=0, OV=1 SUBB Operation: Acc ← Acc - (src + C) Encoding: 15 f111 0 1010 MAXQ10 Example(s): Maxim Integrated ssss ; Acc = 23h, A[1]= 12h, C=1 SUBB A[1] ; Acc = 10h, C=0, S=0, Z=0 SUBB A[1] ; Acc = FEh, C=1, S=1, Z=0 SUBB #0Dh ; Acc = F0h, C=0, S=1, Z=0 MAXQ20 Example(s): Special Notes: ssss ; Acc = 2345h, A[1]= 1250h, C=1 SUBB A[1] ; Acc = 10F4h, C=0, S=0, Z=0 SUBB A[1] ; Acc = FEA4h, C=1, S=1, Z=0 The active accumulator (Acc) is not allowed as the src for these operations. 18-36 MAXQ Family User’s Guide (MAXQ20 Only) XCH Exchange Accumulator Bytes Description: Exchanges the upper and lower bytes of the active accumulator. Status Flags: S Operation: Acc.[15:8] ← Acc.[7:0] Acc.[7:0] ← Acc.[15:8] Encoding: 15 1000 0 1010 1000 1010 Example(s): ; Acc = 2345h XCHN ; Acc = 4523h XCHN Exchange Accumulator Nibbles Description: Exchanges the upper and lower nibbles in the active accumulator byte(s). Status Flags: S Operation: Acc.[7:4] ← Acc.[3:0] Acc.[3:0] ← Acc.[7:4] Acc.[15:12] ← Acc.[11:8] Acc.[11:8] ← Acc.[15:12] Encoding: 15 1000 0 1010 0111 1010 MAXQ10 Example(s): ; Acc = 23h XCHN MAXQ20 Example(s): ; Acc = 2345h XCHN 18-37 ; Acc = 32h ; Acc = 3254h Maxim Integrated MAXQ Family User’s Guide XOR src Logical XOR Description: Performs a logical-XOR between the active accumulator (Acc or A[AP]) and the specified src data. For the complete list of src specifiers, reference the MOVE instruction. The MAXQ20 may use the PFX[n] register to supply the high byte of data for 8-bit sources. Status Flags: S, Z Operation: Acc ← Acc XOR src Encoding: 15 f011 0 1010 ssss MAXQ10 Example(s): ; Acc = 23h XOR A[2] ; A[2]=0Fh; Acc ← 2Ch XOR #28h ; Acc ← 04h MAXQ20 Example(s): ; Acc = 2345h ; A[2]=0F0Fh; Acc ← 2C4Ah XOR A[2] Special Notes: ssss The active accumulator (Acc) is not allowed as the src for this operation. XOR Acc. Logical XOR Carry Flag with Accumulator Bit Description: Performs a logical-XOR between the Carry (C) status flag and a specified bit of the active accumulator (Acc.) and returns the result to the Carry. Status Flags: C Operation: C ← C XOR Acc. Encoding: 15 1011 0 1010 MAXQ10 Example(s): Maxim Integrated 1010 ; Acc = 45h, C=1 at start XOR Acc.1 ; Acc.1=0 → C=1 XOR Acc.2 ; Acc.2=1 → C=0 MAXQ20 Example(s): Special Notes: bbbb ; Acc = 2345h, C=1 at start XOR Acc.1 ; Acc.1=0 → C=1 XOR Acc.2 ; Acc.2=1 → C=0 For the MAXQ10, the accumulator width is only 8 bits. Thus, only bit index encoding ('bbbb') for bits 0 ('0000') through 7 ('0111') is supported. 18-38 MAXQ Family User’s Guide REVISION HISTORY REVISION REVISION NUMBER DATE 0 1 2 3 9/04 DESCRIPTION PAGES CHANGED Original release. — Updated Loading a 16-bit register with a 16-bit immediate value: Changed …PFX[2]…to…PFX[0]. 28 Updated I/O Port: Type B: Changed alternate function to special function. 54 Replaced Table 10. 62 Updated Timer 0 Mode: 16-Bit Timer/Counter: Removed also from An interrupt also occurs if enabled… 63 Updated RTC Trim (RTRM) Register, (TRM4:0) Trim Calibration Bits: Changed 32 seconds to 16 seconds 134 Updated JUMP NE: Changed E = 1, branch taken to E = 0, branch taken. 165 4/05 Updated Debug Mode Special Considerations: Added two bullets regarding single stepping because the debug engine step mechanism (that forces the IP to 8010h) does not allow a memory read from the utility ROM to work properly when single stepping. 149 9/05 Updated Polarity Control and Output Enable, Polarity Control: Added the following sentence: When generating PWM output, please note that changing the compare match register can result in a perceived duty cycle inversion if a compare match is missed or multiple compare matches occur during the reload to overflow counting. 73, 75 1/05 Updated External Reset: Added watchdog to list of causes for a reset condition. 4 10/05 25 Updated Watchdog Timer Reset: Added and holds the RST pin low to statement for a watchdog resetting the processor. 5 6 2/06 9/08 Updated Accessing the Multiplier: Added and the OF bit to last sentence of first paragraph to clarify that the CLD bit, when set, clears all data registers and the OF bit to zero. 111 Updated Hardware Multiplier Control (MCNT) Register Description, Bits CLD and OF: Updated bit descriptions to clarify that the OF bit is cleared to 0 when the CLD bit is set to 1. 112 Created newer template-style document. Updated layout for peripheral registers based on new template style. All Added Figure 9-14: Bit Length Decoding Example (omitted in error.) 9-23 Maxim cannot assume responsibility for use of any circuitry other than circuitry entirely embodied in a Maxim product. No circuit patent licenses are implied. Maxim reserves the right to change the circuitry and specifications without notice at any time. The parametric values (min and max limits) shown in the Electrical Characteristics table are guaranteed. Other parametric values quoted in this data sheet are provided for guidance. Maxim Integrated 160 Rio Robles, San Jose, CA 95134 USA 1-408-601-1000 ©  Maxim Integrated  The Maxim logo and Maxim Integrated are trademarks of Maxim Integrated Products, Inc.
MAXQ2000-RFX+ 价格&库存

很抱歉,暂时无法提供与“MAXQ2000-RFX+”相匹配的价格&库存,您可以联系我们找货

免费人工找货