
- •Introduction
- •ARM7TDMI Architecture
- •The THUMB Concept
- •THUMB’s Advantages
- •ARM7TDMI Block Diagram
- •ARM7TDMI Core Diagram
- •ARM7TDMI Functional Diagram
- •Key to signal types
- •Processor Operating States
- •Switching State
- •Entering THUMB state
- •Entering ARM state
- •Memory Formats
- •Big endian format
- •Little endian format
- •Instruction Length
- •Data Types
- •Operating Modes
- •Registers
- •The ARM state register set
- •The THUMB state register set
- •The relationship between ARM and THUMB state registers
- •Accessing Hi registers in THUMB state
- •The Program Status Registers
- •The condition code flags
- •The control bits
- •Exceptions
- •Action on entering an exception
- •Action on leaving an exception
- •Exception entry/exit summary
- •Notes
- •Abort
- •Software interrupt
- •Undefined instruction
- •Exception vectors
- •Exception priorities
- •Not all exceptions can occur at once:
- •Interrupt Latencies
- •Reset
- •Instruction Set Summary
- •Format summary
- •Instruction summary
- •The Condition Field
- •Branch and Exchange (BX)
- •Instruction cycle times
- •Assembler syntax
- •Using R15 as an operand
- •Examples
- •Branch and Branch with Link (B, BL)
- •The link bit
- •Instruction cycle times
- •Assembler syntax
- •Examples
- •Data Processing
- •CPSR flags
- •Shifts
- •Instruction specified shift amount
- •Register specified shift amount
- •Immediate operand rotates
- •Writing to R15
- •Using R15 as an operand
- •TEQ, TST, CMP and CMN opcodes
- •Instruction cycle times
- •Assembler syntax
- •where:
- •Examples
- •PSR Transfer (MRS, MSR)
- •Operand restrictions
- •Reserved bits
- •Example
- •Instruction cycle times
- •Assembler syntax
- •Examples
- •Multiply and Multiply-Accumulate (MUL, MLA)
- •If the operands are interpreted as signed
- •If the operands are interpreted as unsigned
- •Operand restrictions
- •CPSR flags
- •Instruction cycle times
- •Assembler syntax
- •Examples
- •Multiply Long and Multiply-Accumulate Long (MULL,MLAL)
- •Operand restrictions
- •CPSR flags
- •Instruction cycle times
- •For signed instructions SMULL, SMLAL:
- •For unsigned instructions UMULL, UMLAL:
- •Assembler syntax
- •where:
- •Examples
- •Single Data Transfer (LDR, STR)
- •Offsets and auto-indexing
- •Shifted register offset
- •Bytes and words
- •Little endian configuration
- •Big endian configuration
- •Restriction on the use of base register
- •Example:
- •Data aborts
- •Instruction cycle times
- •Assembler syntax
- •Examples
- •Halfword and Signed Data Transfer(LDRH/STRH/LDRSB/LDRSH)
- •Offsets and auto-indexing
- •Halfword load and stores
- •Signed byte and halfword loads
- •Endianness and byte/halfword selection
- •Little endian configuration
- •Big endian configuration
- •Data aborts
- •Instruction cycle times
- •Assembler syntax
- •Examples
- •Block Data Transfer (LDM, STM)
- •The register list
- •Addressing modes
- •Address alignment
- •LDM with R15 in transfer list and S bit set (Mode changes)
- •STM with R15 in transfer list and S bit set (User bank transfer)
- •R15 not in list and S bit set (User bank transfer)
- •Use of R15 as the base
- •Inclusion of the base in the register list
- •Data aborts
- •Aborts during STM instructions
- •Aborts during LDM instructions
- •Instruction cycle times
- •Assembler syntax
- •Addressing mode names
- •Examples
- •Single Data Swap (SWP)
- •Bytes and words
- •Data aborts
- •Instruction cycle times
- •Assembler syntax
- •Examples
- •Software Interrupt (SWI)
- •Return from the supervisor
- •Comment field
- •Instruction cycle times
- •Assembler syntax
- •Examples
- •Supervisor code
- •Coprocessor Data Operations (CDP)
- •The coprocessor fields
- •Instruction cycle times
- •Assembler syntax
- •Examples
- •Coprocessor Data Transfers (LDC, STC)
- •The coprocessor fields
- •Addressing modes
- •Address alignment
- •Data aborts
- •Instruction cycle times
- •Assembler syntax
- •Examples
- •Coprocessor Register Transfers (MRC, MCR)
- •The coprocessor fields
- •Transfers to R15
- •Transfers from R15
- •Instruction cycle times
- •Assembler syntax
- •Examples
- •Undefined Instruction
- •Instruction cycle times
- •Assembler syntax
- •Instruction Set Examples
- •Using the conditional instructions
- •Using conditionals for logical OR
- •Absolute value
- •Multiplication by 4, 5 or 6 (run time)
- •Combining discrete and range tests
- •Division and remainder
- •Overflow detection in the ARM7TDMI
- •Pseudo-random binary sequence generator
- •Multiplication by constant using the barrel shifter
- •Multiplication by 2^n (1,2,4,8,16,32..)
- •Multiplication by 2^n+1 (3,5,9,17..)
- •Multiplication by 2^n-1 (3,7,15..)
- •Multiplication by 6
- •Multiply by 10 and add in extra number
- •General recursive method for Rb := Ra*C, C a constant:
- •Loading a word from an unknown alignment
- •Format Summary
- •Opcode Summary
- •Format 1: move shifted register
- •Operation
- •Instruction cycle times
- •Examples
- •Format 2: add/subtract
- •Operation
- •Instruction cycle times
- •Examples
- •Format 3: move/compare/add/subtract immediate
- •Operations
- •Instruction cycle times
- •Examples
- •Format 4: ALU operations
- •Operation
- •Instruction cycle times
- •Examples
- •Format 5: Hi register operations/branch exchange
- •Operation
- •Instruction cycle times
- •The BX instruction
- •Examples
- •Using R15 as an operand
- •Format 6: PC-relative load
- •Operation
- •Instruction cycle times
- •Examples
- •Format 7: load/store with register offset
- •Operation
- •Instruction cycle times
- •Examples
- •Format 8: load/store sign-extended byte/halfword
- •Operation
- •Instruction cycle times
- •Examples
- •Format 9: load/store with immediate offset
- •Operation
- •Instruction cycle times
- •Examples
- •Format 10: load/store halfword
- •Operation
- •Instruction cycle times
- •Examples
- •Format 11: SP-relative load/store
- •Operation
- •Instruction cycle times
- •Examples
- •Format 12: load address
- •Operation
- •Instruction cycle times
- •Examples
- •Format 13: add offset to Stack Pointer
- •Operation
- •Instruction cycle times
- •Examples
- •Format 14: push/pop registers
- •Operation
- •Instruction cycle times
- •Examples
- •Format 15: multiple load/store
- •Operation
- •Instruction cycle times
- •Examples
- •Format 16: conditional branch
- •Operation
- •Instruction cycle times
- •Examples
- •Format 17: software interrupt
- •Operation
- •Instruction cycle times
- •Examples
- •Format 18: unconditional branch
- •Operation
- •Examples
- •Format 19: long branch with link
- •Operation
- •Instruction cycle times
- •Examples
- •Instruction Set Examples
- •Multiplication by a constant using shifts and adds
- •General purpose signed divide
- •Thumb code
- •ARM code
- •Division by a constant
- •Explanation of divide-by-constant ARM code
- •ARM code
- •THUMB code
- •Overview
- •Cycle Types
- •Address Timing
- •Data Transfer Size
- •Instruction Fetch
- •Memory Management
- •Locked Operations
- •Stretching Access Times
- •The ARM Data Bus
- •The External Data Bus
- •The unidirectional data bus
- •The bidirectional data bus
- •Example system: The ARM7TDMI Testchip
- •Overview
- •Interface Signals
- •Coprocessor present/absent
- •Busy-waiting
- •Pipeline following
- •Data transfer cycles
- •Register Transfer Cycle
- •Privileged Instructions
- •Idempotency
- •Undefined Instructions
- •Debug Interface
- •Overview
- •Debug Systems
- •Debug Interface Signals
- •Entry into debug state
- •Entry into debug state on breakpoint
- •Entry into debug state on watchpoint
- •Entry into debug state on debug-request
- •Action of ARM7TDMI in debug state
- •Scan Chains and JTAG Interface
- •Scan limitations
- •Scan chain 0
- •Scan chain 1
- •Scan Chain 2
- •The JTAG state machine
- •Reset
- •Pullup Resistors
- •Instruction Register
- •Public Instructions
- •EXTEST (0000)
- •SCAN_N (0010)
- •INTEST (1100)
- •IDCODE (1110)
- •BYPASS (1111)
- •CLAMP (0101)
- •HIGHZ (0111)
- •CLAMPZ (1001)
- •SAMPLE/PRELOAD (0011)
- •RESTART (0100)
- •Test Data Registers
- •Bypass register
- •ARM7TDMI device identification (ID) code register
- •Operating mode:
- •Instruction register
- •Scan chain select register
- •Scan chains 0,1 and 2
- •Scan chain 0 and 1
- •Scan chain 0
- •Scan chain 1
- •Scan chain 3
- •ARM7TDMI Core Clocks
- •Clock switch during debug
- •Clock switch during test
- •Determining the Core and System State
- •Determining the core’s state
- •Determining system state
- •Exit from debug state
- •The PC’s Behaviour During Debug
- •Breakpoint
- •Watchpoints
- •Watchpoint with another exception
- •Debug request
- •System speed access
- •Summary of return address calculations
- •Priorities / Exceptions
- •Breakpoint with prefetch abort
- •Interrupts
- •Data aborts
- •Scan Interface Timing
- •Debug Timing
- •Overview
- •The Watchpoint Registers
- •Programming and reading watchpoint registers
- •Using the mask registers
- •The control registers
- •Programming Breakpoints
- •Hardware breakpoints:
- •Software breakpoints:
- •Hardware breakpoints
- •Software breakpoints
- •Setting the breakpoint
- •Clearing the breakpoint
- •Programming Watchpoints
- •The Debug Control Register
- •Debug Status Register
- •Coupling Breakpoints and Watchpoints
- •Example
- •CHAINOUT signal
- •RANGEOUT signal
- •Example
- •Disabling ICEBreaker
- •ICEBreaker Timing
- •Programming Restriction
- •Debug Communications Channel
- •Debug comms channel registers
- •Communications via the comms channel
- •Introduction
- •Branch and Branch with Link
- •THUMB Branch with Link
- •Branch and Exchange (BX)
- •Data Operations
- •Multiply and Multiply Accumulate
- •Load Register
- •Store Register
- •Load Multiple Registers
- •Store Multiple Registers
- •Data Swap
- •Software Interrupt and Exception Entry
- •Coprocessor Data Operation
- •Coprocessor Data Transfer (from memory to coprocessor)
- •Coprocessor Data Transfer (from coprocessor to memory)
- •Coprocessor Register Transfer (Load from coprocessor)
- •Coprocessor Register Transfer (Store to coprocessor)
- •Undefined Instructions and Coprocessor Absent
- •Unexecuted Instructions
- •Instruction Speed Summary
- •Timing Diagrams

Memory
The External Data Bus
ARM7TDMI has a bidirectional data bus, D[31:0]. However, since some ASIC design methodologies prohibit the use of bidirectional buses, unidirectional data in, DIN[31:0],
Figure 67. ARM7TDMI External Bus Arrangement
and data out, DOUT[31:0], busses are also provided. The logical arrangement of these buses is shown inFigure 67.
|
ICEbreaker |
ARM7TDMI |
DIN[31:0] |
|
|
|
D[31:0] |
|
DOUT[31:0] |
|
G |
When the bidirectional data bus is being used, the unidirectional busses must be disabled by driving BUSEN LOW.
Figure 68. Bidirectional Bus Timing
The timing of the bus for three cycles, load-store-load, is shown in Figure 68.
Read Cycle |
Store Cycle |
Read Cycle |
MCLK |
|
|
APE |
|
|
129

The unidirectional data bus
When the unidirectional data busses are being used, (i.e. when BUSEN is HIGH), the bidirectional bus, D[31:0], must be left unconnected.
When BUSEN is HIGH, all instructions and input data are presented on the input data bus, DIN[31:0]. The timing of this data is similar to that of the bidirectional bus when in input mode. Data must be set up and held to the falling edge of MCLK. For the exact timing requirements refer to Timing Diagrams on page 189.
In this configuration, all output data is presented on DOUT[31:0]. The value on this bus only changes when the processor performs a store cycle. Again, the timing of the data is similar to that of the bidirectional data bus. The
Figure 69. Unidirectional Bus Timing
value on DOUT[31:0] changes off the falling edge of
MCLK.
The bus timing of a read-write-read cycle combination is shown in Figure 69.
When BUSEN is LOW, the buffer between DIN[31:0] and D[31:0] is disabled. Any data presented on DIN[31:0] is ignored. Also, when B U S E N is low, the value on DOUT[31:0] is forced to 0x00000000.
Typically, the unidirectional busses would be used internally in ASIC embedded applications. Externally, most systems still require a bidirectional data bus to interface to external memory. Figure 70 shows how the unidirectional busses may be joined up at the pads of an ASIC to connect to an external bidirectional bus.
Read Cycle |
Store Cycle |
Read Cycle |
MCLK
DIN[31:0] |
D1 |
D2 |
DOUT[31:0] |
Dout |
D[31:0] |
D1 |
Dout |
D2 |
Figure 70. External Connection of Unidirectional Busses
|
nENOUT |
ARM7TDMI |
PAD |
|
|
|
DOUT[31:0] |
|
XDATA[31:0] |
|
DIN[31:0] |
130 |
Memory |
|
|
||
|

Memory
The bidirectional data bus
ARM7TDMI has a bidirectional data bus, D[31:0]. Most of the time, the ARM reads from memory and so this bus is configured to input. During write cycles however, the ARM7TDMI must output data. During phase 2 of the previous cycle, the signal nRW is driven HIGH to indicate a write cycle. During the actual cycle, nENOUT is driven LOW to
Figure 71. Data Write Bus Cycle
MCLK
A[31:0]
nRW
nENOUT
D[31:0]
indicate that the ARM7TDMI is driving D[31:0] as an output. Figure 71 shows this bus timing (DBE has been tied HIGH in this example). Figure 73 on page 133 shows the circuit which exists in ARM7TDMI for controlling exactly when the external bus is driven out.
Memory Cycle
The ARM7TDMI macrocell has an additional bus control signal, nENIN, which allows the external system to manually tristate the bus. In the simplest systems, nENIN can be tied LOW and nENOUT can be ignored. However, in many applications when the external data bus is a shared resource, greater control may be required. In this situation, nENIN can be used to delay when the external bus is driven. Note that for backwards compatibility, DBE is also included. At the macrocell level, DBE and nENIN have almost identical functionality and in most applications one can be tied off.
The Section Example system: The ARM7TDMI Testchip on page 133 describes how ARM7TDMI may be interfaced to an external data bus, using ARM7TDMI Testchip as an example.
ARM7TDMI has another output control signal called TBE. This signal is normally only used during test and must be tied HIGH when not in use. When driven LOW, TBE forces all three-stateable outputs to high impedance. It is as if both DBE and ABE have been driven LOW, causing the data bus, the address bus, and all other signals normally controlled by ABE to become high impedance. Note, however, that there is no scan cell on TBE. Thus, TBE is completely independent of scan data and may be used to put the outputs into a high impedance state while scan testing takes place.
Table 33 below, shows the tri-state control of ARM7TDMI’s outputs.
Signals without in the ABE, DBE or TBE column cannot be driven to the high impedance state:
Table 33. Output Enable Control Summary
ARM7TDMI output |
ABE |
DBE |
TBE |
A[31:0] |
|
|
|
|
|
|
|
D[31:0] |
|
|
|
|
|
|
|
nRW |
|
|
|
|
|
|
|
LOCK |
|
|
|
|
|
|
|
MAS[1:0] |
|
|
|
|
|
|
|
nOPC |
|
|
|
|
|
|
|
nTRANS |
|
|
|
|
|
|
|
DBGACK |
|
|
|
|
|
|
|
131

Table 33. Output Enable Control Summary
ARM7TDMI output |
ABE |
DBE |
TBE |
ECLK
nCPI
nENOUT
nEXEC
nM[4:0]
TBIT
nMREQ
SDOUTMS
SDOUTDATA
SEQ
DOUT[31:0]
Figure 72. ARM7TDMI Data Bus Control Circuit
Scan DBE
Cell
Core Control |
Scan |
nENOUT |
|
Cell |
|
|
|
|
|
Scan |
nENIN |
|
Cell |
|
|
|
|
|
|
TBE |
|
|
D[31:0] |
132 |
Memory |
|
|
||
|