Module 2Módulo 2

The MSP430 CPULa CPU MSP430

Registers, addressing modes, timing, encoding. Registros, modos de direccionamiento, temporización, codificación.

Santi Scagliusi, PhD

The chip we'll useEl chip que usaremos

MSP430FR6989

Sixteen registers. Four are special.Dieciséis registros. Cuatro son especiales.

R4–R15 are interchangeable. R0–R3 each play a hidden role.R4–R15 son intercambiables. R0–R3 cumplen un papel oculto.

R0
PC
Program CounterContador de Programa
R1
SP
Stack PointerPuntero de Pila
R2
SR · CG1
Status / ConstantsEstado / Constantes
R3
CG2
Constant GeneratorGenerador de Constantes
R4 – R15 · general purposeR4 – R15 · propósito general
R4
R5
R6
R7
R8
R9
R10
R11
R12
R13
R14
R15
R0

PC — the moving fetch pointer.PC — el puntero de fetch en movimiento.

By the time the CPU decodes an opcode, PC already points to the next word.Cuando la CPU decodifica un opcode, PC ya apunta a la siguiente palabra.

15
0
R0 (PC)
0

LSB is always 0 → instructions live at even addresses, PC advances by 2.El LSB siempre vale 0 → las instrucciones viven en direcciones pares y el PC avanza de 2 en 2.

PC = 0x4400
Fetch the opcode at 0x4400Captar el opcode en 0x4400
PC immediately becomes 0x4402PC pasa a 0x4402 inmediatamente
MOV.W PC, R6 R6 gets the next instruction’s address, not the current one.R6 recibe la dirección de la siguiente instrucción, no la actual.
R1

SP — descending, word-aligned.SP — descendente y alineado a palabra.

PUSH decrements first, then writes. POP reads first, then increments.PUSH decrementa y escribe. POP lee y luego incrementa.

15
0
R1 (SP)
0

LSB locked to 0 → the stack always moves in 2-byte words.LSB siempre 0 → la pila se mueve en palabras de 2 bytes.

Try the stackPrueba la pila
SP = 0x2400
PUSH / PUSH.B

SP −= 2
[SP] ← Rn.B
[SP+1] ← 0x00 *

* only on .Bsolo en .B

POP / POP.B

Rn ← [SP].B
SP += 2 (always)

@SP+ is hardwired to step 2.@SP+ siempre suma 2.

Stack frameMarco de pila
R2

First hat — the Status Register.Primer sombrero — el Registro de Estado.

Four arithmetic flags. Four low-power bits. One interrupt master.Cuatro flags aritméticos. Cuatro bits de bajo consumo. Un maestro de interrupciones.

R2 as Status Register · click any bitR2 como Registro de Estado · pulsa un bit
SR = 0x0000
15
8
7
6
5
4
3
2
1
0
Reserved · bits 15–9Reservado · bits 15–9
V
SCG1
SCG0
OSC
OFF
CPU
OFF
GIE
N
Z
C
power control: SCG1, SCG0, OSCOFF, CPUOFFbajo consumo: SCG1, SCG0, OSCOFF, CPUOFF
interrupt master: GIEmaestro de interrupciones: GIE
arithmetic flags: V, N, Z, Cflags aritméticos: V, N, Z, C
Click any bit to see what it does.Haz clic en un bit para ver qué hace.
R2·R3

Second hat — six free constants.Segundo sombrero — seis constantes gratis.

Used as source with the right As, the CPU stops reading the register and injects a fixed value instead.Usados como fuente con el As correcto, la CPU deja de leer el registro y mete un valor fijo en su lugar.

R2 / CG1 when used as sourcecomo fuente
As=10
#4
As=11
#8

As=00 and As=01 still read R2 — the status register.Con As=00 y As=01, R2 sigue leyendo el registro de estado.

R3 / CG2 always sourcesiempre fuente
00
#0
01
#1
10
#2
11
#-1

R3 has no other job — every read is a constant.R3 no tiene otro papel — cada lectura es una constante.

Six constants — 0, 1, 2, 4, 8, −1 — that the CPU pulls out of thin air. Next slide: why this matters.Seis constantes — 0, 1, 2, 4, 8, −1 — que la CPU saca de la nada. Siguiente slide: por qué importa.

The constant generator saves a word.El generador de constantes ahorra una palabra.

Same source code. The assembler picks the cheaper encoding.El mismo código fuente. El ensamblador elige la codificación más barata.

Without CGSin CG 2 wordspalabras
ADD.W #1, R7
0x4400
opcode · Rsrc=#N, As=11opcode · Rfuente=#N, As=11
0x4402
0x0001 ← extra word with the literalpalabra extra con el literal

A naive immediate mode would carry the literal in a second word.El modo inmediato "ingenuo" llevaría el literal en una segunda palabra.

With CGCon CG 1 wordpalabra
ADD.W #1, R7
0x4400
opcode · Rsrc=R3, As=01opcode · Rfuente=R3, As=01

The "1" is born inside the instruction itself — no extra word, no extra cycle.El "1" nace dentro de la propia instrucción — sin palabra extra, sin ciclo extra.

Four rules behind every "weird" behaviour.Cuatro reglas detrás de toda rareza.

16-bit core

Registers, ALU and base word are 16 bits wide.Registros, ALU y palabra base son de 16 bits.

Unified address spaceMapa de memoria único

Code, RAM and peripherals share one map.Código, RAM y periféricos comparten un solo mapa.

Little-endian

The low byte goes first in memory.El byte bajo se guarda primero en memoria.

Even alignmentAlineación par

Instructions live at even addresses. PC always advances by 2.Las instrucciones viven en direcciones pares. PC avanza de 2 en 2.

0xABCD
addr
CD
addr + 1
AB
Part 2 · AddressingParte 2 · Direccionamiento

Addressing modesModos de direccionamiento

Seven ways to tell the MSP430 where the operand lives. Siete formas de decirle al MSP430 dónde está el dato.

Seven modes. Four can be destination.Siete modos. Cuatro pueden ser destino.

Four light up as both. Three are source-only.Cuatro como ambos. Tres sólo como fuente.

Source & destinationFuente y destino
Source onlySólo fuente
Pick a mode to see how it locates the operand.Pulsa un modo para ver cómo localiza el operando.
Mode 1 of 7 · RegisterModo 1 de 7 · Register

The data is the register.El dato es el registro.

No memory. The fastest mode.Sin memoria. El modo más rápido.

R4
12 34
SourceFuente
12 34
R6
12 34
DestinationDestino
MOV.W R4, R6
EA = Rn · 1 cycle1 ciclo · 1 word1 palabra · no bus trafficsin tráfico de bus
Mode 2 of 7 · IndexedModo 2 de 7 · Indexed

Base register plus offset.Registro base más offset.

The offset travels in the word after the opcode.El offset viaja en la palabra siguiente al opcode.

R5
24 00
BaseBase
+ 0x04
EA
R5 + 4=0x2404
MemoryMemoria
0x2403
----
0x2402
0x2405
CDAB
0x2404
0x2407
----
0x2406
CDAB
R6
CDAB
DestinationDestino
MOV.W 4(R5), R6
EA = R5 + X · 3 cycles3 ciclos · 2 words2 palabras · offset in next wordoffset en la siguiente palabra
Mode 3 of 7 · SymbolicModo 3 de 7 · Symbolic

A label, resolved against the PC.Una etiqueta, resuelta contra el PC.

The assembler turns var into PC + offset.El ensamblador convierte var en PC + offset.

PC
23F4
Program counterPC
+ 0x10
EA
PC + X=0x2404
offset = var − PCoffset = var − PC
var
0x2403
----
0x2402
0x2405
CDAB
0x2404
0x2407
----
0x2406
CDAB
R6
CDAB
DestinationDestino
MOV.W var, R6
EA = PC + X · 3 cycles3 ciclos · 2 words2 palabras · PC-relative; the binary moves with the programrelativo al PC; el binario es relocable
Mode 4 of 7 · AbsoluteModo 4 de 7 · Absolute

A literal address. No register involved.Una dirección literal. Sin registro.

Used for memory-mapped peripherals: &P1OUT, &TA0R.Para periféricos mapeados en memoria: &P1OUT, &TA0R.

Address literalDirección literal
&0x245A
stored in next wordva en la siguiente palabra
EA
0 + X=0x245A
R2 supplies the 0R2 aporta el 0
MemoryMemoria
0x2459
----
0x2458
0x245B
1234
0x245A
0x245D
----
0x245C
1234
R6
1234
DestinationDestino
MOV.W &0x245A, R6
EA = 0 + X = X · 3 cycles3 ciclos · 2 words2 palabras · absolute, not relocatableabsoluto, no relocable
Mode 5 of 7 · ImmediateModo 5 de 7 · Immediate

The value rides in the next word.El valor viaja en la palabra siguiente.

PC autoincrements past the literal after fetching it.El PC se autoincrementa al leer el literal.

BeforeAntes
PC
23F4
0x23F4
PC = 0x23F6
Instruction streamFlujo de instrucciones
0x23F3
....
0x23F2
0x23F5
4036
0x23F4 ← PC
0x23F7
1234
0x23F6
1234
R6
1234
DestinationDestino
MOV.W #0x3412, R6
EA = @PC, then PC += 2 · 2 cycles2 ciclos · 2 words2 palabras · disguised @PC+es @PC+ disfrazado
Mode 6 of 7 · IndirectModo 6 de 7 · Indirect

The register holds a pointer.El registro guarda un puntero.

Dereference. The register itself is unchanged.Dereferencia. El registro no cambia.

R5
24 04
PointerPuntero
EA
=R5=0x2404
no offset, no computesin offset, sin cálculo
MemoryMemoria
0x2403
----
0x2402
0x2405
CDAB
0x2404
0x2407
----
0x2406
CDAB
R6
CDAB
DestinationDestino
MOV.W @R5, R6
EA = R5 · 2 cycles2 ciclos · 1 word1 palabra · register unchangedel registro no cambia
Mode 7 of 7 · Indirect with auto-incrementModo 7 de 7 · Indirecto con autoincremento

Pointer, then advance.Puntero, y avanza.

After the read, the register steps by 1 (.B) or 2 (.W).Tras la lectura, el registro avanza 1 (.B) o 2 (.W).

BeforeAntes
R5
2404
PointerPuntero
R5 = 0x2406
EA
=R5=0x2404
+2 after fetch (word)+2 tras la lectura (word)
MemoryMemoria
0x2403
----
0x2402
0x2405
CDAB
0x2404
0x2407
----
0x2406
CDAB
R6
CDAB
DestinationDestino
MOV.W @R5+, R6
EA = R5; R5 += 2 · 2 cycles2 ciclos · 1 word1 palabra · walks arrays / strings cheaplyrecorre arrays/strings barato

All seven fit in three bits.Los siete caben en tres bits.

Two source bits (As) and one destination bit (Ad) cover everything.Dos bits de fuente (As) y uno de destino (Ad) lo cubren todo.

As = 00
Rn
RegisterRegistro
As = 01
X(Rn)
IndexedIndexado
As = 10
@Rn
IndirectIndirecto
As = 11
@Rn+
Auto-incrementAutoincremento
Ad = 0

Destination is a register: Rn.El destino es un registro: Rn.

Ad = 1

Destination is indexed memory: X(Rn).El destino es memoria indexada: X(Rn).

Indexed, Symbolic and Absolute are the same mode.Indexado, Simbólico y Absoluto son el mismo modo.

The assembler rewrites two of them as a special case of the first. EA = effective address.El ensamblador reescribe dos como un caso especial del primero. EA = dirección efectiva.

Indexed
X(R5)

EA = R5 + X

Symbolic
label

EA = PC + X

Absolute
&0x2000

EA = 0 + X = X

Pick a mode. Watch the operand path.Elige un modo. Mira el camino del operando.

Each click on Next advances one micro-operation: opcode fetch, extension word, address compute, memory access, write-back.Cada clic en Siguiente avanza una micro-operación: fetch, palabra extra, cálculo de dirección, acceso a memoria, escritura.

Pick a modeElige un modo
Pipeline · 5 stagesPipeline · 5 etapas
Current stepPaso actual

Data busBus de datos
Effective addr.Dirección efectiva

Emulated instructions are pure aliases.Las instrucciones emuladas son sólo alias.

No new opcodes. The assembler rewrites them using a real instruction + a constant generator.Sin opcodes nuevos. El ensamblador los reescribe con una instrucción real + un generador de constantes.

Click any row to see the constant generator sourcePulsa una fila para ver la fuente del generador
24 emulated forms · 27 real opcodes · same hardware.24 formas emuladas · 27 opcodes reales · el mismo hardware.

Cycles come from addressing, not from the mnemonic.Los ciclos vienen del direccionamiento, no del mnemónico.

Every memory access adds a cycle. Stay in registers and pay one.Cada acceso a memoria suma un ciclo. Si te quedas en registros, sólo pagas uno.

Rn → Rm

1 cycle · 1 wordciclo · 1 palabra

x(Rn) → &EDE

6 cycles · 3 wordsciclos · 3 palabras

Conditional jumpSalto condicional

2 cycles · taken or notciclos · se tome o no

Interrupt / Interrupción / RETI

6 / 5 cyclesciclos

.B and .W cost the same. Don’t pack data into bytes hoping for speed..B y .W cuestan lo mismo. No comprimas datos a bytes esperando ganar velocidad.

Three formats encode every instruction.Tres formatos codifican cada instrucción.

Format I — double-operand. We start here.Formato I — doble operando. Empezamos aquí.

15
11
7
6
5
3 0
CódOp
Rf
Ad
B/W
As
Rd
Optional extension word — sourcePalabra extra opcional — fuente
Optional extension word — destinationPalabra extra opcional — destino
Asymmetric source and destinationFuente y destino asimétricos

Source uses two bits (As). Destination uses one (Ad).La fuente usa dos bits (As). El destino, uno (Ad).

B/W

0 → word (16-bit). 1 → byte (8-bit).0 → palabra (16 bits). 1 → byte (8 bits).

Format I in action — click any opcode.Formato I en acción — pulsa un opcode.

OpcodeCódOp
Rf
Ad
B/W
As
Rd
Opcode:Opcode: 0x4592

Format II — single-operand.Formato II — un solo operando.

Same encoding idea, less to encode.Misma idea de codificación, menos que codificar.

15
6
5
3 0
CódOp
B/W
Ad
Rd
Optional extension word — destinationPalabra extra opcional — destino
RRC · RRA · SWPB · SXT
PUSH · CALL · RETI
CALL is permissiveCALL es permisiva

It accepts every addressing mode.Acepta todos los modos de direccionamiento.

RRA, RRC, SWPB, SXT can’t take an immediate destination.RRA, RRC, SWPB, SXT no admiten destino inmediato.

Format III — conditional jumps.Formato III — saltos condicionales.

A 10-bit signed offset added to the PC. Always 2 cycles.Un offset de 10 bits con signo sumado al PC. Siempre 2 ciclos.

15
12
9
8 0
CódOp
Cond
S
PC offset · 10 bitsOffset PC · 10 bits

PCnew = PCold + 2 + offset × 2

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

JEQ · JZ
JNE · JNZ
JC · JNC
JN · JGE · JL · JMP
Jumps never touch the status flags.Los saltos nunca tocan las flags de estado.

Every instruction follows three steps.Toda instrucción sigue tres pasos.

Fetch the opcode. Set up the operand. Commit the result.Captar el opcode. Preparar el operando. Escribir el resultado.

1 · Fetch

Read the opcode word at PC. PC moves to PC + 2.Leer la palabra de opcode en PC. PC pasa a PC + 2.

2 · Operand

Decode fields, fetch extension words, compute the effective address.Decodificar campos, leer palabras extra y calcular la dirección efectiva.

3 · Write-back

Run the ALU, store the result, update the status flags.Ejecutar la ALU, almacenar el resultado y actualizar las flags.

Special cycle countsCiclos especiales
InterruptInterrupción · 6 RETI · 5 Reset · 4

Three ideas to take with you.Tres ideas para llevarte.

Everything else in Module 2 is detail on top of these.Todo lo demás del módulo 2 es detalle encima de estas.

R0–R3

Four registers, double role.Cuatro registros, doble función.

PC, SP, Status, Constant Generator. R4–R15 are interchangeable. PC, SP, Estado y Generador de Constantes. R4–R15 son intercambiables.

1 → 6

Addressing is cost.El direccionamiento es coste.

Register-only takes one cycle. Each memory access adds another. Solo registros: 1 ciclo. Cada acceso a memoria suma otro.

I · II · III

Three formats, full ISA.Tres formatos, toda la ISA.

Double-operand, single-operand, conditional jump. All 27 instructions fit here. Doble operando, un operando, salto condicional. Las 27 instrucciones caben aquí.