Module 2Módulo 2

The MSP430 CPULa CPU MSP430

The programmer's model, addressing modes, instruction timing and the compact encoding tricks that make MSP430 feel simple without being trivial. El modelo del programador, los modos de direccionamiento, la temporización de instrucciones y los trucos de codificación compacta que hacen que MSP430 parezca simple sin ser trivial.

Santi Scagliusi, PhD

Programmer's ModelModelo del programador

Sixteen 16-bit registers define the visible CPU.Dieciséis registros de 16 bits definen la CPU visible.

R0 / PC
Program counter
R1 / SP
Stack pointer
R2 / SR·CG1
Status or CG1
R3 / CG2
Constant generator
R4
General purpose
R5
General purpose
R6
General purpose
R7
General purpose
R8
General purpose
R9
General purpose
R10
General purpose
R11
General purpose
R12
General purpose
R13
General purpose
R14
General purpose
R15
General purpose
4 special registers4 registros especiales
12 general-purpose registers12 registros de propósito general
Orthogonal: R4-R15 are interchangeableOrtogonal: R4-R15 son intercambiables
Same instruction bits can mean data, addresses or constants.Los mismos bits pueden significar datos, direcciones o constantes.
R0

Program Counter: a moving fetch pointer.Program Counter: un puntero de fetch en movimiento.

PC = 0x4400
Fetch opcode at 0x4400Fetch del opcode en 0x4400
PC becomes 0x4402 immediatelyEl PC pasa a 0x4402 inmediatamente
Extension words fetched from 0x4402+Palabras extra captadas desde 0x4402+
Key pointPunto clave

PC already points forward during decode. El PC ya apunta hacia delante durante la decodificación.

MOV.W PC, R6 R6 gets the next-word address, not the current one. R6 recibe la dirección de la siguiente palabra, no la actual.
R1

Descending, full stack. PUSH pre-decrements, POP post-increments.Pila descendente y completa. PUSH predecrementa, POP postincrementa.

Stack PointerPuntero de Pila
SP = 0x2400
PUSH Rn

1. SP = SP − 2
2. [SP] ← Rn

POP Rn

1. Rn ← [SP]
2. SP = SP + 2

SP bit 0 forced to zero — always word-aligned.Bit 0 de SP forzado a cero — siempre alineado a palabra.
Stack frame
R2 / R3

Status Register + Constant GeneratorRegistro de Estado + Generador de Constantes

Click bits to toggleHaz clic para alternar
SR = 0x0000
C
Carry
0
Z
Zero
0
N
Neg
0
GIE
IRQ
0
CPU
OFF
LPM
0
OSC
OFF
CLK
0
SCG0
DCO
0
SCG1
SMC
0
V
Ovflw
0

Constant Generator ValuesValores del Generador de Constantes

R2 / CG1
As=10#4
As=11#8
R3 / CG2
As=00#0
As=01#1
As=10#2
As=11#-1
Arithmetic flagsFlags aritméticos

`C`, `Z`, `N`, `V` consumed by conditional jumps.`C`, `Z`, `N`, `V` consumidos por saltos condicionales.

System control bitsBits de control del sistema

`GIE`, `CPUOFF`, `OSCOFF`, `SCG0`, `SCG1``GIE`, `CPUOFF`, `OSCOFF`, `SCG0`, `SCG1`

Dual role: SR or CG1 depending on source decode.Doble papel: SR o CG1 según la decodificación de fuente.
ADD.W #1, R7

Hardware: source = R3, As=01. No extension word. Hardware: fuente = R3, As=01. Sin palabra extra.

Architecture NotesNotas arquitectónicas

Four rules that explain most "weird" behaviour.Cuatro reglas que explican casi todo lo "raro".

16-bit core

Registers, ALU and base word size.Registros, ALU y tamaño de palabra base.

Unified address space

Code, RAM and peripherals share one map.Código, RAM y periféricos en un único mapa.

Little-endian

Low byte first in memory.El byte bajo va primero en memoria.

Instruction alignment

Even addresses only. PC += 2.Solo direcciones pares. PC += 2.

Endian reminderRecordatorio endian
0xABCD
addr
CD
addr+1
AB
Addressing OverviewPanorama de direccionamiento

Four source encodings + one destination bit.Cuatro codificaciones de fuente + un bit de destino.

As = 00

Rn

Register modeModo registro

As = 01

X(Rn)

Indexed familyFamilia indexada

As = 10

@Rn

Indirect sourceFuente indirecta

As = 11

@Rn+

Autoincrement sourceFuente con autoincremento

Destination Ad = 0

Register `Rn`Registro `Rn`

Destination Ad = 1

Indexed `X(Rn)`Indexado `X(Rn)`

Visible modesModos visibles
Rn X(Rn) ADDR &ADDR @Rn @Rn+ #N

Indexed, Symbolic and Absolute are siblings.Indexado, Simbólico y Absoluto son hermanos.

Indexed
X(R5)

EA = R5 + X

Symbolic
label

Assembler encodes as X(PC)El ensamblador codifica como X(PC)

Absolute
&0x2000

Assembler encodes as X(SR), base = 0El ensamblador codifica como X(SR), base = 0

Symbolic formulaFórmula simbólica

EA = PC(after extension fetch) + X

Absolute formulaFórmula absoluta

EA = 0 + X = X

Destination restrictionsRestricciones del destino

Destination: only `Rn` or `X(Rn)`Destino: solo `Rn` o `X(Rn)`
`@Rn`, `@Rn+`, `#N` — source only`@Rn`, `@Rn+`, `#N` — solo fuente
Immediate = `@PC+`Inmediato = `@PC+`
Absolute = indexed through SR (base 0)Absoluto = indexado a través de SR (base 0)
Symbolic vs AbsoluteSimbólico vs Absoluto
MOV.W label, R6 ; PC-relative
MOV.W &label, R6 ; absolute
Interactive LabLaboratorio interactivo

Pick a mode and trace the operand path.Elige un modo y sigue el camino del operando.

ScenariosEscenarios

InstructionInstrucción
Current stepPaso actual

Encoding and busCodificación y bus
Bus
--
Effective addressDirección efectiva
--
TraceTraza
    ControlsControles
    Emulated InstructionsInstrucciones emuladas

    Assembler aliases for patterns the ISA already encodes.Alias del ensamblador para patrones que la ISA ya codifica.

    Click to reveal CG sourceClic para revelar fuente CG
    Not extra opcodes — convenience syntax over real encoding.No son opcodes extra — sintaxis de conveniencia sobre la codificación real.
    General timingTemporización general

    Cycles depend on format and addressing, not on the mnemonic.Los ciclos dependen del formato y direccionamiento, no del mnemónico.

    Format I, Rn → Rm

    1 cycle, 1 word

    Format I, x(Rn) → &EDE

    6 cycles, 3 words

    Jumps

    2 cycles, 1 word

    Interrupt / RETI

    6 cycles / 5 cycles

    Extra words + memory traffic = more cycles. Register-only = cheapest.Palabras extra + tráfico con memoria = más ciclos. Solo registros = lo más barato.
    Instruction FormatsFormatos de instrucción

    Three formats encode all MSP430 instructions.Tres formatos codifican todas las instrucciones MSP430.

    Format I: Double-operandFormato I: Doble operando

    15
    11
    7
    6
    5
    3 0
    CódOp
    Rf
    Dd
    B/W
    Df
    Rd
    Source or Destination 15:0Fuente o Destino 15:0
    Destination 15:0Destino 15:0
    Key asymmetryAsimetría clave

    Source: 2 bits (As). Destination: 1 bit (Ad). Fuente: 2 bits (As). Destino: 1 bit (Ad).

    B/W = 0 → word, B/W = 1 → byteB/W = 0 → palabra, B/W = 1 → byte
    Format I DecoderDecodificador Formato I

    Click an opcode to decode Format I fields.Haz clic en un opcode para decodificar los campos del Formato I.

    OpcodeCódOp
    Rf
    Ad
    B/W
    As
    Rd
    Opcode:Opcode: 0x4592
    Instruction FormatsFormatos de instrucción

    Format II: Single-operandFormato II: Un solo operando

    15
    6
    5
    3 0
    CódOp
    B/W
    Dd
    Rd
    Destination 15:0Destino 15:0
    RRC / RRA / SWPB / SXT
    PUSH / CALL / RETI
    CALL accepts all addressing modes.CALL acepta todos los modos de direccionamiento.
    RRA, RRC, SWPB, SXT: no immediate destination (unpredictable).RRA, RRC, SWPB, SXT: sin destino inmediato (impredecible).
    Instruction FormatsFormatos de instrucción

    Format III: Conditional JumpsFormato III: Saltos condicionales

    15
    12
    9
    8 0
    CódOp
    CondCond
    S
    PC offset (10 bits)Desplaz. PC (10 bits)

    PCnew = PCold + 2 + offset x 2

    Range: -511 to +512 words. Rango: -511 a +512 palabras.

    JEQ / JZ
    JNE / JNZ
    JC / JNC
    JN / JGE / JL / JMP
    Always 2 cycles, taken or not. No SR modification.Siempre 2 ciclos, se tome o no. No modifican SR.
    Execution pathRuta de ejecución

    Fetch → Decode → Extend → Execute → Write-backFetch → Decode → Extend → Execute → Write-back

    1. Fetch

    Read opcode at PC.Leer opcode en PC.

    2. Decode

    Format, registers, addressing bits.Formato, registros, bits de direccionamiento.

    3. Extension words

    Offsets / literals if needed.Offsets / literales si hacen falta.

    4. Operand action

    Memory read, ALU, or jump eval.Lectura de memoria, ALU o eval de salto.

    5. Write-back

    Store result, update SR.Escribir resultado, actualizar SR.

    Special cycle countsCiclos especiales
    Interrupt: 6 cycles RETI: 5 cycles Reset: 4 cycles
    Final summaryResumen final

    Address + extra words + cycles = you own the instruction.Dirección + palabras extra + ciclos = dominas la instrucción.

    R0-R3: special by decode. R0-R3: especiales por decodificación.
    Hardware simpler than mnemonic list. El hardware es más simple que la lista de mnemónicos.
    Constant generator = code density. Generador de constantes = densidad de código.
    3 formats predict fields and timing. 3 formatos predicen campos y temporización.
    Execution bridges syntax and cycles. La ejecución une sintaxis y ciclos.
    Technical baseline cross-checked against TI MSP430 Family User's Guide. Base técnica contrastada con la guía de familia MSP430 de TI.