Anda di halaman 1dari 12

Capı́tulo 2

La CPU12

Es una CPU de alta velocidad de 16 bits. Su modelo de programación es idéntico al del MC68HC11. Su repertorio de
instrucciones en un superconjunto del de 68HC11

2.1. Registros
Los registros disponibles son los siguientes:

7 A 0 7 B 0

15 D 0

15 IX 0

15 IY 0

15 SP 0

15 PC 0
7 0
CCR S X H I N Z V C

Acumuladores A, B y D

Los acumuladores A y B son registros generales de 8 bits


Son equivalentes, salvo en contadas instrucciones: la suma (ABA), resta (SBA) y la comparación entre ellos (CBA) que
sólo es en una dirección. El ajuste a BCD (DAA) sólo es posible en el acumulador A.
Unidos forman el acumulador D=A:B

Registros Índices X e Y

Registros de 16 bits usados para los numerosos direccionamientos indexados.

Puntero de pila (SP)

Registro de 16 bits que mantiene la pila del sistema que se actualiza automáticamente al meter y sacar datos.

Id: CPU12.lyx,v 6.2 2006/11/16 16:42:41 alberto Exp 2-1


Capı́tulo 2. La CPU12 2.2. Modos de direccionamiento

Crece hacia abajo en memoria (RAM). SP en cada momento contienen la dirección del primer B libre por debajo de
la cabeza.
Debe hacerse apuntar a memoria RAM al iniciarse el sistema, habitualmente a la dirección más alta de la memoria
RAM.
Se utiliza para: llamadas a subrutinas, guardar estado en interrupciones, salvar datos temporalmente, etc.

Contador de programa (PC)

Registro de 16 bits que contiene la dirección de la siguiente instrucción a ejecutar.

Registro de códigos de condición (CCR)

Registro de 8 bits que contiene distintos indicadores (banderines) (flags):


De control del sistema:

S Inhibición de la instrucción STOP : 1-se ejecuta como NOP, 0-se detiene CPU
X Inhibición de interrupciones no enmascarables (lı́nea XIRQ): 1-no se permiten, 0-se permiten
I Inhibición de interrupciones enmascarables: 1-no se permiten, 0-se permiten

de resultados aritméticos:

H medio acarreo: usado para ajustar resultado tras suma con datos en BCD
N negativo: si el bit más significativo está a 1, Significará dato negativo sólo si está representado en complemento a
2.
Z cero: el resultado tiene todos sus bits a 0
V overflow: desbordamiento de una operación si los datos están en complemento a 2
C acarreo: desbordamiento de una operación si los datos son sin signo. También se utiliza en las operaciones de
desplazamiento y rotación.

Existen instrucciones de salto condicional que permiten comprobar las condiciones <, ≤, =, 6=, ≥ ó > para datos sin
signo y con signo.
La mayorı́a de las instrucciones modifican el CCR, no únicamente las aritmeticas. Las excepciones están en las in-
strucciones de meter y sacar de la pila, transferencias e intercambios, y las que utilizan los registros X, Y, SP y
PC.

2.2. Modos de direccionamiento


Existen 15 modos de direccionamiento, frente a los 6 del McHC11.
Todos los modos de direccionamiento, excepto el implı́cito, generan una dirección de 16 bits que en la documentación
se denomina dirección efectiva (DE).

2.2.1. Implı́cito

Todo lo que se necesita par ejecutar la instrucción se conoce con el código de la instrucción => no tiene operandos o
los operandos son registros de la CPU.

Id: CPU12.lyx,v 6.2 2006/11/16 16:42:41 alberto Exp 2-2


Capı́tulo 2. La CPU12 2.2. Modos de direccionamiento

2.2.2. Inmediato

El operando está contenido en los B que siguen a la instrucción. El numero de B corresponde con el tamaño del registro
afectado.
La dirección efectiva apunta a los B que siguen al de la instrucción.
En el ensamblador se indica precediendo al dato por la almohadilla: # (ej LDAA #4)

2.2.3. Extendido

La dirección efectiva se indica con 2 B que siguen a la instrucción.


En ensamblador se indica poniendo dirección (sin almohadilla). (ej LDAA 1238)

2.2.4. Directo

El B menos significativo de la dirección se encuentra en el B que sigue a la instrucción. El B más significativo se supone
es $00. De esta manera sólo se puede acceder a las direcciones en el rango $0000-$00FF, el cual se denomina página
directa.
De esta manera es posible el acceso a la página directa con 1 B menos que con el direccionamiento extendido =>
ocupa menos memoria y es más rápida (1 fetch menos).
En la página directa se suele colocar la memoria RAM o los registros de E/S.
En ensamblador, al igual que el anterior, se indica poniendo dirección (sin almohadilla). Al programar no tenemos que
distinguir estos casos. El ensamblador elegirá el direccionamiento directo cuando sea posible.

2.2.5. Relativo

Se utiliza sólo en instrucciones de salto relativo. Se trata de un valor con signo que se suma al PC para dar la dirección
de la siguiente instrucción. Son posibles saltos relativos cortos, con desplazamiento de 8 bits (rango -128 a +127) y
saltos relativos largos, con desplazamiento de 16 bits (-32K a +32K).

2.2.6. Indexados

Utilizan un registro de 16 bits de la CPU (X,Y, SP ó PC) al cual se le suma un desplazamiento, constante o variable,
para dar la dirección efectiva.
Todos añaden un B al del código de operación, denominado postbyte, en el que se indica el tipo y otras informaciones
del direccionamiento.

Indexado con desplazamiento constante:

Existen las siguientes posibilidades en el número de bits del desplazamiento:

5 bits El desplazamiento es constante con signo de 5 bits (rango -16 a +15) y se incluye en el postbyte.

9 bits El desplazamiento es constante con signo de 9 bits (1 bit en el postbyte y el resto en un byte de extensión),
dando un rango de -256 a +255.
16 bits El desplazamiento es constante con signo de 16 bits (en 2 bytes de extensión), dando un rango de ±32 Kb.

En todos estos tres casos, en ensamblador se indica el valor del desplazamiento, una coma y el registro que se utiliza
como base: 3,X -120,Y -500,SP 15,PC
Cuando el desplazamiento es 0 basta con indicar el registro base, es decir, X equivale a 0,X

Id: CPU12.lyx,v 6.2 2006/11/16 16:42:41 alberto Exp 2-3


Capı́tulo 2. La CPU12 2.3. Repertorio de Instrucciones

Indexado con desplazamiento en acumulador

La dirección efectiva es la suma de un registro base de 16 bits (X, Y, SP ó PC) y una acumulador (A, B ó D). En
ensamblador se pone registro de desplazamiento seguido de registro base: B,X A,PC D,Y

Indexado con pre/post incremento/decremento

El registro base (en este caso sólo X, Y ó SP) se incrementa/decrementa antes/después de ser utilizado como dirección
efectiva del operando. Por lo tanto el registro base queda modificado tras la utilización de este direccionamiento. El
valor del incremento/decremento puede estar comprendido entre 1 y 8.
Ejemplo de las 4 posibilidades son:

1,+SP el SP se incrementa en 1 y su nuevo valor se utiliza como dirección efectiva.


3,-X el registro X de decrementa en 3 y su nuevo valor se utiliza como dirección efectiva.
7,Y+ el valor en registro Y se utiliza como dirección efectiva y posteriormente a dicho registro se le suma 7.
2,X- el valor en registro X se utiliza como dirección efectiva y posteriormente a dicho registro se le resta 2.

Indexado indirecto con desplazamiento constante de 16 bits

Ahora la suma del registro base y el desplazamiento constante con signo (en 2 bytes de extensión) es utilizado para
traer de memoria un dato de 16 bits que es utilizado como dirección efectiva del operando.
En ensamblador se denota utilizando corchetes: [-4,X]

Indexado indirecto con desplazamiento en acumulador D

Ídem que el anterior, pero como desplazamiento se utiliza el contenido del acumulador D: [D,PC] [D,X] [D,Y]

2.3. Repertorio de Instrucciones


Es un superconjunto del repertorio del 68HC11: cualquier programa puede ser reesamblado para el 68HC12.
Además de las instrucciones habituales de un microprocesador tiene operaciones especializadas de: multiplicación y
suma, interpolación en tablas y lógica difusa.

2.3.1. Carga y almacenamiento

Cargan un dato de memoria un registro o almacenan un registro en memoria. Actualizan los banderines de cero (Z) y
signo (N).
Las instrucciones de esta grupo suelen tener dos operandos: uno es un acumulador o registro ı́ndice y el otro es una
posición de memoria.

Id: CPU12.lyx,v 6.2 2006/11/16 16:42:41 alberto Exp 2-4


Capı́tulo 2. La CPU12 2.3. Repertorio de Instrucciones

Función Nemónico
Cargar acumulador A LDAA
Cargar acumulador B LDAB
Cargar doble acumulador D LDD
Cargar puntero de pila LDS
Cargar registro X LDX
Cargar registro Y LDY
Cargar dirección efectiva en SP LEAS
Cargar dirección efectiva en X LEAX
Cargar dirección efectiva en Y LEAY
Almacenar acumulador A STAA
Almacenar acumulador B STAB
Almacenar doble acumulador D STD
Almacenar SP STS
Almacenar X STX
Almacenar Y STY

2.3.2. Transferencia e intercambio

Permiten la copia o en intercambio entre registros, la instrucción TFR permite la copia entre cualquiera dos registro de
la CPU. De forma similar la instrucción EXG para el intercambio.

Función Nemónico
Transferir A a B TAB
Transferir B a A TBA
Transferir de A a CCR TAP
Transferir de CCR a A TPA
Transferir de SP a X TSX
Transferir de X a SP TXS
Transferir de SP a Y TSY
Transferir de Y a SP TYS
Transferencia registro a registro TFR
Intercambiar D y X XGDX
Intercambira D e Y XGDY
Intercambiar registro a registro EXG
Transferencia con extensión del signo SEX

2.3.3. Movimiento

Permiten movimientos memoria a memoria con cualquier combinación de direccionamientos.

Función Nemónico
mover byte MOVB
mover palabra (2 bytes) MOVW

2.3.4. Suma y resta

Están disponibles operaciones aritméticas para operandos de 8 y 16 bits, tanto en binario sin signo como en comple-
mento a 2 (con signo).
Se pueden realizar fácilmente operaciones en múltiple precisión.

Id: CPU12.lyx,v 6.2 2006/11/16 16:42:41 alberto Exp 2-5


Capı́tulo 2. La CPU12 2.3. Repertorio de Instrucciones

Función Nemónico
Suma B a A ABA
Suma del acumulador B al X ABX
Suma del acumulador B al Y ABY
Sumar con acarreo a A ADCA
Sumar con acarreo a B ADCB
Sumar memoria a A ADDA
Sumar memoria a B ADDB
Sumar memoria a D ADDD
Restar B de A SBA
Restar con acarreo de A SBCA
Restar con acarreo de B SBCB
Restar memoria de A SUBA
Restar memoria de B SUBB
Restar memoria de D SUBD

2.3.5. Decimal codificado en binario

Operaciones en BCD se consiguen ejecutando la instrucción DAA tras instrucción aritmética normal.

Función Nemónico
Ajuste decimal de A DAA

2.3.6. Incremento y decremento

Función Nemónico
Decrementar byte de memoria DEC
Decrementar acumulador A DECA
Decrementar acumulador B DECB
Decrementar SP DES
Decrementar X DEX
Decrementar Y DEY
Incrementar byte de memoria INC
Incrementar acumulador A INCA
Incrementar acumulador B INCB
Incrementar SP INS
Incrementar X INX
Incrementar Y INY

2.3.7. Comparación y testeo

Las comparaciones consisten en realizar internamente la substracción para modificar CCR pero no el operando destino.

Función Nemónico
Comparar A con B CBA
Comparar A con Memoria CMPA
Comparar B con Memoria CMPB
Comparar D con Memoria CPD
Comprara SP con Memoria CPS
Comprara X con Memoria CPX
Comparar Y con memoria CPY
Comprobar si es cero ó negativo byte en memoria TST
Comprobar si es cero ó negativo A TSTA
Comprobar si es cero ó negativo B TSTB

Id: CPU12.lyx,v 6.2 2006/11/16 16:42:41 alberto Exp 2-6


Capı́tulo 2. La CPU12 2.3. Repertorio de Instrucciones

2.3.8. Lógica Booleana

Función Nemónico
y-lógica A con memoria ANDA
y-lógica B con memoria ANDB
y-lógica CCR con memoria ANDCC
no-lógica de byte en memoria COM
no-lógica de A COMA
no-lógica de B COMB
o-exclusiva de A con memoria EORA
o-exclusiva de B con memoria EORB
o-lógica de A con memoria ORAA
o-lógica de B con memoria ORAB
o-lógica de CCR con memoria ORCC

2.3.9. Puesta a 0 y cambio de signo

Función Nemónico
Cambiar signo de byte en memoria NEG
Cambiar signo de acumulador A NEGA
Cambiar signo de acumulador B NEGB
Borrar Byte de memoria CLR
Borrar acumulador A CLRA
Borrar acumulador B CLRB

2.3.10. Multiplicación y división

Función Nemónico
Multiplicación 8 bits sin signo A*B=> A:B MUL
Multiplicación 16 bits sin signo D*Y=>Y:D EMUL
Multiplicación 16 bits con signo D*Y=>Y:D EMULS
División entera 16 entre 16 sin signo D/X=>X resto D IDIV
División entera 16 entre 16 con signo D/X=>X resto D IDIVS
División entera 32 entre 16 sin signo Y:D/X=>Y resto D EDIV
División entera 32 entre 16 con signo Y:D/X=>Y resto D EDIVS
División fraccional 16 entre 16 sin signo D/X=>X resto D FDIV

FDIV División fraccional: Divide en contenido de D entre X dejando el cociente en X y el resto en D. En este caso los
datos se consideran números decimales en punto fijo (en la misma posición para ambos). El resultado se considera
que tiene el punto decimal a la izquierda del bit más significativo. Es necesario, por tanto, que le numerador sea
menor que el denominador (D<X). En caso contrario se activa overflow (flag V del CCR).División por 0 pone
c=1 y cociente X=$FFFF.

2.3.11. Manipulación y comprobación de bits

El operando es, en este caso 1 o varios bits de un byte de memoria.


Las comprobaciones realizan la y-lógica del acumulador con memoria pero sólo modifica el CCR: sirve para saber si
todos los bits de la máscara están a 0.

Función Nemónico
Puesa a 0 de bits en memoria BCLR
Puesta a 1 de bits en memoria BSET
Comprobación de bits en A BITA
Comprobación de bits en B BITB

Id: CPU12.lyx,v 6.2 2006/11/16 16:42:41 alberto Exp 2-7


Capı́tulo 2. La CPU12 2.3. Repertorio de Instrucciones

2.3.12. Desplazamientos y rotaciones

Todas las operaciones de rotación involucran al bit a acarreo (C) del CCR, lo cual permite una fácil manipulación de
datos en múltiple precisión. Poniendo el bit C a 0 o a 1 antes de la operación se controla el bit que entra.
El desplazamiento aritmético a la derecha conserva el bit de signo: es posible dividir números en complemento a 2.
Los desplazamientos lógicos a la izquierda (LSL) son totalmente equivalentes a los desplazamientos aritméticos a la
izquierda (ASL).

Función Nemónico
Desplazamiento aritmético a la izda. en memoria ASL
Desplazamiento aritmético a la izda. de A ASLA
Desplazamiento aritmético a la izda. de B ASLB
Desplazamiento aritmético a la izda. de D ASLD
Desplazamiento aritmético a la decha. en memoria ASR
Desplazamiento aritmético a la decha. de A ASRA
Desplazamiento aritmético a la decha. de B ASRB
Desplazamiento lógico a la izda. en memoria LSL
Desplazamiento lógico a la izda. de A LSLA
Desplazamiento lógico a la izda. de B LSLB
Desplazamiento lógico a la izda. de D LSLD
Desplazamiento lógico a la decha. en memoria LSR
Desplazamiento lógico a la decha. de A LSRA
Desplazamiento lógico a la decha. de B LSRB
Desplazamiento lógico a la decha. de D LSRD
Rotación a la izda. en memoria ROL
Rotación a la izda. de A ROLA
Rotación a la izda. de B ROLB
Rotación a la decha. en memoria ROR
Rotación a la decha. de A RORA
Rotación a la decha. de B RORB

2.3.13. Saltos relativos cortos

Permiten a la CPU modificar el flujo del programa el base a los banderines del CCR.
Están restringidos a un rango entre -128 a +127 por usar direccionamiento relativo corto.

Función Nemónico
Saltar si no hay acarreo BCC
Saltar si hay acarreo BCS
Saltar si igual (a cero) BEQ
Saltar si ≥ (con signo) BGE
Saltar si > (con signo) BGT
Saltar si > (sin signo) BHI
Saltar si ≥ (sin signo) BHS
Saltar si ≤ (con signo) BLE
Saltar si < (sin signo) BLO
Saltar si ≤ (sin signo) BLS
Saltar si < (con signo) BLT
Saltar si negativo BMI
Saltar si no igual (a cero) BNE
Saltar si positivo BPL
Saltar siempre BRA
Saltar nunca BRN
Saltar si no hay desbordamiento BVC
Saltar si hay desbordamiento BVS

Id: CPU12.lyx,v 6.2 2006/11/16 16:42:41 alberto Exp 2-8


Capı́tulo 2. La CPU12 2.3. Repertorio de Instrucciones

2.3.14. Saltos relativos largos

Usan direccionamiento relativo largo. Son los mismos que los saltos relativos cortos pero precedidos por la letra L.

Función Nemónico
Saltar si no hay acarreo LBCC
Saltar si hay acarreo LBCS
Saltar si igual (a cero) LBEQ
Saltar si ≥ (con signo) LBGE
Saltar si > (con signo) LBGT
Saltar si > (sin signo) LBHI
Saltar si ≥ (sin signo) LBHS
Saltar si ≤ (con signo) LBLE
Saltar si < (sin signo) LBLO
Saltar si ≤ (sin signo) LBLS
Saltar si < (con signo) LBLT
Saltar si negativo LBMI
Saltar si no igual (a cero) LBNE
Saltar si positivo LBPL
Saltar siempre LBRA
Saltar nunca LBRN
Saltar si no hay desbordamiento LBVC
Saltar si hay desbordamiento LBVS

2.3.15. Comprobación de bits

Las instrucciones BSET y BCLR realizan ciclo de lectura-modificación-escritura. Están restringidos a un rango entre -128
a +127 por usar direccionamiento relativo corto.

Función Nemónico
Saltar si bits a 0 en byte en memoria BRCLR
Saltar si bits a 1 en byte en memoria BRSET

2.3.16. Bucles

El contador ha de ser un registro de la CPU: A, B, D, X, Y ó SP. Estas instrucciones no modifican el CCR, por lo que
las comprobaciones se hacen internamente.

Función Nemónico
Decrementar contador y saltar si es 0 DBEQ
Decrementar contador y saltar si es 6=0 DBNE
Incrementar contador y saltar si es 0 IBEQ
Incrementar contador y saltar si es 6=0 IBNE
Comprobar contador y saltar si es 0 TBEQ
Comprobar contador y saltar si es 6= 0 TBNE

2.3.17. Saltos y subrutinas

En los saltos a subrutina se salva en la pila la dirección de la siguiente instrucción del programa principal y se saca al
regresar de la subrutina con RTS.

Función Nemónico
Salto directo JMP
Salto relativo a subrutina (salto corto) BSR
Salto directo a subrutina JSR
Retorno de subrutina RTS

Id: CPU12.lyx,v 6.2 2006/11/16 16:42:41 alberto Exp 2-9


Capı́tulo 2. La CPU12 2.4. Interrupciones

2.3.18. Interrupciones

Función Nemónico
Retorno de interrupción RTI
Interrupción software SWI
Interrupción de código no implementado TRAP

2.3.19. Manejo de la pila

Función Nemónico
Sacar A de la pila PULA
Sacar B de la pila PULB
Sacar de la pila CCR PULC
Sacar de la pila D PULD
Sacar X de la pila PULX
Sacar Y de la pila PULY
Meter A en la pila PSHA
Meter B en la pila PSHB
Meter en la pila el CCR PSHC
Meter en la pila D PSHD
Meter X en la pila PSHX
Meter Y en la pila PSHY

2.3.20. Manejo banderines de condición

Existen instrucciones para modificar los bits C, I y V. El resto se deben modificar indirecta (flags Z, N y H) o
directamente mediante instrucciones que tienen como destino el CCR.

Función Nemónico
Poner a 0 el bit de acarreo CLC
Poner a 0 el bit máscara de interrupciones CLI
Poner a 0 el bit de desbordamiento CLV
Poner a 1 el bit de acarreo SEC
Poner a 1 el bit máscara de interrupciones SEI
Poner a 1 el bit de desbordamiento SEV

2.3.21. Misceláneas
NOP no operación, para provocar un pequeño retraso (2 ciclos). La instrucción BRN produce un NOP de 3 ciclos.
STOP causa la parada del oscilador del microcontrolador, reduciendo drásticamente el consumo de energı́a. Sólo actu-
ará de esa forma si el bit S del CCR está a 0, caso contrario se comportará como NOP.
WAI Espera por interrupción: guarda el estado de la CPU en la pila y espera a que se produzca una interrupción.

2.4. Interrupciones
Permiten atender situaciones excepcionales del sistema deteniendo temporalmente el programa en curso para ejecutar
la rutina de tratamiento correspondiente. Al final de la misma se continua con el programa interrumpido.
El reinicio (reset ) se puede considerar un caso especial de interrupción.
Se distinguen 31 interrupciones distintas:

3 tipos distintos de reset


2 lı́neas externas de interrupción: XIRQ (interrupción no enmascarable) e IRQ

Id: CPU12.lyx,v 6.2 2006/11/16 16:42:41 alberto Exp 2-10


Capı́tulo 2. La CPU12 2.4. Interrupciones

2 por instrucciones: instrucción ilegal y SWI

24 interrupciones de los periféricos, todas ellas enmascarables individualmente con bits en los registros de control
correspondientes y enmascarables con el bit I del CCR.

La dirección de la rutina que trata cada tipo de interrupción se encuentra en la tabla de vectores de interrupción
situada en la zona más alta de la memoria (31vectores × 2bytes = 62bytes) direcciones de la ($FFFF-62+1=)$FFC2
a la $FFFF

Prioridad Dirección Motivo de interrupción


0 FFFE-FFFF Reset externo ó reset de encendido
1 FFFC-FFFD Reset por fallo del reloj
2 FFFA-FFFB Reset por temporizador COP
3 FFF8-FFF9 Instrucción Ilegal
4 FFF6-FFF7 Instrucción SWI
5 FFF4-FFF5 Interrupción lı́nea XIRQ
6 FFF2-FFF3 Interrupción lı́nea IRQ
7 FFF0-FFF1 Interrupción de tiempo real
8 FFEE-FFEF Canal 0 del temporizador
9 FFEC-FFED Canal 1 del temporizador
10 FFEA-FFEB Canal 2 del temporizador
11 FFE8-FFE9 Canal 3 del temporizador
12 FFE6-FFE7 Canal 4 del temporizador
13 FFE4-FFE5 Canal 5 del temporizador
14 FFE2-FFE3 Canal 6 del temporizador
15 FFE0-FFE1 Canal 7 del temporizador
16 FFDE-FFDF Desbordamiento del temporizador
17 FFDC-FFDD Desbordamiento del acumulador de pulsosA
18 FFDA-FFDB Flanco del acumulador de pulsos
19 FFD8-FFD9 Interrupción del sistema SPI
20 FFD6-FFD7 Interrupción del sistema SCI 0
21 FFD4-FFD5 Interrupción del sistema SCI 1
22 FFD2-FFD3 Conversores analógicos
23 FFD0-FFD1 Activación del subsistema CAN
24 FFCE-FFCF Activación de los puestos G ó H
25 FFCC-FFCD Cuenta final del contador de módulo
26 FFCA-FFCB Desbordamiento del acumulador de pulsos B
27 FFC9-FFC8 Errores en el subsistema CAN
28 FFC6-FFC7 Recepción en el subsistema CAN
29 FFC4-FFC5 Transmisión en el subsistema CAN
30 FFC2-FFC3 Interrupción del sistema oscilador

Las interrupciones de la 0 a la 5 son no enmascarables, las restantes (de la 6 a la 31) se pueden inhibir con el bit I del
CCR: son enmascarables.
Las prioridades son las que figuran en la tabla, pero una de las enmascarables puede ponerse como la de mayor
prioridad del grupo de enmascarables configurando el registro HPRIO.

2.4.1. Proceso de una interrupción


1. Cuando termina la instrucción actual, si la interrupción va a ser atendida, se detiene el proceso normal del
programa.
2. Se copia el contenido de TODOS los registros de la CPU en la pila.
3. Se pone a 1 el bit I con lo que se deshabilitan las interrupciones enmascarables. Si la interrupción es no-
enmascarable (debida a la lı́nea XIRQ) también se pone a 1 el bit X deshabilitándose las interrupciones por la
lı́nea XIRQ.

Id: CPU12.lyx,v 6.2 2006/11/16 16:42:41 alberto Exp 2-11


Capı́tulo 2. La CPU12 2.4. Interrupciones

4. El vector de la interrupción pendiente de mayor prioridad se copia en el PC.

5. Se sigue con la ejecución normal de instrucciones que corresponderán a la rutina de tratamiento de la interrupción.
Esta rutina debe de encargarse de desactivar el flag de la interrupción atendida.
6. La rutina termina con la instrucción RTI que restaura el estado de la máquina antes de comenzar el procesamiento,
restaurándose con ello los bit X e I y pasándose a atender otras interrupciones si están pendientes.

Durante la rutina de tratamiento de una interrupción enmascarable no se atienden a otras interrupciones enmas-
carables auque sean de mayor prioridad ya que el bit I está a 1. En cambio si se pueden atender a interrupciones
no-enmascarables. Durante la rutina de tratamiento de una interrupción no-enmascarable no se atiende a ninguan
otra interrupción, ni enmascarable ni no-enmascarable

2.4.2. Reinicio (Reset)

Existen 4 causas de reset :

1. Reset de encendido (POR): generado por un circuito interno cuando la tensión de alimentación parte de 0 y
comienza a subir.
2. Reset externo: cuando se pone a baja la el pin RESET.
3. Reset por fallo del reloj: Si el circuito de monitorización del reloj está activo (COPCTL:CME=1), se genera reset
cuando el reloj se ralentiza o detiene. Se fuerza a baja la lı́nea RESET para resetear los periféricos externos.
4. Reset por temporizador de “computador operando con propiedad” (COP): el COP es un temporizador que
está corriendo continuamente, si se llega al final de su cuenta el procesador se resetea. Si el programa principal
está funcionando correctamente se encargará de (en cada iteración) “servir al COP” (escribir $55 en COPRST
y posteriormente $AA)

Cuando se produce un reset :

Se carga el vector de interrupción correspondiente, según el tipo de reset.


El valor de los registros está indeterminado de la CPU está indeterminado salvo los bits I, X y S que están a 1.
La RAM y los registros de entrada/salida se colocan en sus posiciones por defecto.
Algunos periféricos internos se configuran a valores por defecto, otros se quedan como están.

La rutina de inicialización del MCU debe, entre otras cosas:

1. Inicializar el puntero de pila en una dirección donde exista RAM


2. Habilitar las interrupciones no enmascarables (0->X) si se van a utilizar. Estas ya no podrán volver a ser
enmascaradas por software.
3. Habilitar las interrupciones no enmascarables (0->I) cuando los periféricos estén configurados.

Id: CPU12.lyx,v 6.2 2006/11/16 16:42:41 alberto Exp 2-12

Anda mungkin juga menyukai