|
Complementos de sistemas electrónicos digitales |
TEMA
2
|
Veamos las funciones de los distintos registros internos de la CPU.
1. Registros de precisión extendida (R0-R7). Son registros de propósito general, empleados por el multiplicador y la ALU de la CPU. El tamaño de ellos es de 40 bits (obsérvese que el bus de datos del sistema es de 32 bits, de ahí el nombre de registro de precisión extendida, con 40 bits se obtiene mayor precisión que con 32 bits). Estos registros son los únicos, dentro de la CPU, que pueden ser empleados como operandos flotantes (si un usuario desea trabajar con números flotantes debe almacenar dichos números en estos registros antes de operar con ellos). Si se operase con alguno de estos registros en modo flotante se usarían los 40 bits del mismo. Si las operaciones a realizar son de enteros se usan los bits menos significativos (del 0 al 31), el resto (bits 32 al 39) permanecen inalterados (no se utilizan al operar con enteros), figura 2.8.
Figura
2.8. Formato en punto flotante y entero (con o sin signo), de los
registros de precisión extendida (R0-R7).
2. Registros auxiliares (AR0-AR7). Pueden ser modificados por las ARAUs, la ALU y el multiplicador. Son registros de propósito general y 32 bits que pueden emplearse como operandos de tipo entero en operaciones aritméticas o como generadores de direcciones de 24 bits.
3. Puntero a la página de datos (DP). Es un registro de 32 bits de los cuales sólo los 8 bits menos significativos son utilizados. El registro se usa, para acceder a operandos utilizando el modo de direccionamiento directo, como selector o puntero selector a una página de datos (definida con los 8 LSBs del registro) a la que se está accediendo en un instante dado. Cada página ocupa 64 Kwords de 32 bits de memoria existiendo un total de 256 páginas (la memoria tiene una capacidad de direccionamiento total de 16 Mwords).
4. Registros de índice (IR0 e IR1). Son registros de 32 bits empleados por las ARAUs para calcular las direcciones de los datos en modo de direccionamiento indexado.
5. Registro de dimensión de bloque (BK). Es un registro de 32 bits utilizado por las ARAUs para fijar la dimensión del bloque de datos en el modo de direccionamiento denominado circular (se verá en el tema siguiente). Está especialmente diseñado para implementar colas mediante la técnica de matriz circular, donde determina el tamaño de la matriz. La implementación de colas circulares gestionadas automáticamente por hardware (de forma casi transparente al usuario) por el DSP es una de las características que ofrecen este tipo de microprocesadores, pensados para realizar, en tiempo real, algoritmos de tipo repetitivos (FFTs, filtros digitales...).
6. Puntero a la pila (SP). Como en cualquier microprocesador, este DSP dispone de una pila. El registro SP es un registro de 32 bits que contiene la dirección de la cima de la pila (apunta al último elemento introducido en la pila). Este registro es alterado por interrupciones, excepciones de tipo software, llamadas y retornos de subrutinas e instrucciones de tipo PUSH y POP (almacena datos en la pila o recoge datos de la pila).
7. Registro de estado (ST). Contiene información global sobre el estado de la CPU en cada instante. Su estructura se muestra en la figura 2.9. En la tabla 2-2 se definen cada uno de los bits de este registro. En este registro aparecen 8 bits (del bit 0 o LSB al bit 7) activados por hardware por la parte de manejo de datos de la CPU. Cada vez que se realiza alguna operación aritmético-lógica, en la que intervengan la ALU o el multiplicador, se activa o no alguno de estos bits. El resto son bits de control del periférico caché (bits CF, CE y CC), del modo de repetición de instrucciones (bit RM) y para la habilitación global de las interrupciones (bit GIE).
Figura 2.9. Registro de Estado (ST).
Bit |
Nombre |
1. Valor
de Reset |
Función que realiza |
0 |
C |
0 |
Bandera de acarreo (Carry
flag). a)
Cuando se realiza una operación aritmética de suma con manejo de
enteros, C=1 si se produce acarreo en el MSB del resultado. Si se trata de
una resta, C=1 si es necesario introducir un bit en el MSB del resultado. b)
Cuando se realiza una operación con flotantes, el acarreo no se ve
afectado. c)
Cuando se realizan operaciones de desplazamiento sobre un registro,
el bit de carry se actualiza con el valor desplazado fuera del registro. |
1 |
V |
0 |
Bandera de desbordamiento
(Overflow flag). Si se produce desbordamiento, V=1. El desbordamiento de
entero implica que el resultado de la operación de enteros es menor que |
2 |
Z |
0 |
Bandera de cero (Zero flag). Si el resultado de
una operación es cero, Z=1. |
3 |
N |
0 |
Bandera de negativo
(Negative flag). Si el resultado de una operación es negativo, N=1. |
4 |
UF |
0 |
Desbordamiento flotante
por debajo (Underflow flag). Sólo para operaciones con flotantes. Se produce
desbordamiento por debajo cuando el resultado de una operación de flotantes
tiene un exponente menor o igual de –128 y en ese caso, UF=1. |
5 |
LV |
0 |
Bandera de desbordamiento
latcheado (Latched overflow flag). Si se ha producido alguna vez un
desbordamiento de tipo V, LV=1. Sólo puede borrarlo el usuario escribiendo un
0. |
6 |
LUF |
0 |
Latched floting-point underflow flag. Si se ha producido alguna vez un
desbordamiento de tipo UF, LUF=1. Sólo puede borrarlo el usuario escribiendo
un 0. |
7 |
OVM |
0 |
Bandera de modo de
desbordamiento (Overflow Mode flag). Esta bandera afecta exclusivamente a las
operaciones enteras. Si OVM=0, el entero que resulte del desbordamiento no es
tratado de manera especial. Si es OVM=1: a)
Los enteros que desborden en dirección positiva se saturan al mayor
número positivo en complemento a dos (7FFFFFFFh). b)
Los enteros que desborden en dirección negativa se saturan al número
más negativo en complemento a dos (80000000h). Nota: las funciones V y LV
son independientes del valor de OVM. |
8 |
RM |
0 |
Bandera de modo de repetición.
Si RM=1, el contador de programa se está modificando en los modos de
repetición, tanto de bloque como simple. |
9 |
Reservado |
0 |
Se lee siempre un cero. |
10 |
CF |
0 |
Fija la Caché. Cuando
CF=1, se impide su modificación, esté (se permite el acceso a recoger
instrucciones pero no se permite que se actualice) o no habilitada. Se puede
realizar un Caché Clear si CF=1. |
11 |
CE |
0 |
Habilita la Caché cuando
CE=1. Se puede realizar un Caché Clear si CE=0. |
12 |
CC |
0 |
Caché Clear. Limpia la Caché. Si CC=1, se reinicializa la Caché, aunque ésta se
encuentre congelada (CF=1). |
13 |
GIE |
0 |
Habilitación global de
interrupciones (Global Interrupt Enable). |
15-14 |
Reservado |
0 |
Se leen siempre ceros. |
31-16 |
Reservado |
0-0 |
Valores Indefinidos. |
Tabla 2-2. Funciones de los bits del registro de estado.
8. Registro de habilitación de interrupciones de CPU y de programación del sincronismo de la DMA (IE). Cuando un bit del registro se pone a cero, se inhabilita la interrupción de CPU asociada a él o se impide la sincronización con dicha interrupción de los eventos (escritura y/o lectura) del periférico interno DMA[1]. Obsérvese que todas las interrupciones de tipo hardware que tiene disponibles el usuario en este microprocesador son enmascarables.
Figura 2.10.
Registro de habilitación de interrupciones (IE).
Bit |
Nombre |
Valor de Reset |
Función que realiza |
0 |
EINT0 |
0 |
Habilita la interrupción
externa 0 (CPU) si vale 1. |
1 |
EINT1 |
0 |
Habilita la interrupción
externa 1 (CPU) si vale 1. |
2 |
EINT2 |
0 |
Habilita la interrupción
externa 2 (CPU) si vale 1. |
3 |
EINT3 |
0 |
Habilita la interrupción
externa 3 (CPU) si vale 1. |
4 |
EXINT0 |
0 |
Habilita la interrupción
de transmisión por el puerto serie 0 (CPU) si vale 1. |
5 |
ERINT0 |
0 |
Habilita la interrupción
de recepción por el puerto serie 0 (CPU) si vale 1. |
6 |
EXINT1 (*) |
0 |
Habilita la interrupción
de transmisión por el puerto serie 1 (CPU) si vale 1. |
7 |
ERINT1 (*) |
0 |
Habilita la interrupción
de recepción por el puerto serie 1 (CPU) si vale 1. |
8 |
ETINT0 |
0 |
Habilita la interrupción
del Timer 0 (CPU) si vale 1. |
9 |
ETINT1 |
0 |
Habilita la interrupción
del Timer 1 (CPU) si vale 1. |
10 |
EDINT |
0 |
Habilita la interrupción
del controlador de DMA (CPU) si vale 1. |
15-11 |
Reservados |
0-0 |
Valores indefinidos. |
16 |
EINT0 |
0 |
Habilita la sincronización
del evento DMA con la interrupción externa 0 si vale 1. |
17 |
EINT1 |
0 |
Habilita la sincronización
del evento DMA con la interrupción externa 1 si vale 1. |
18 |
EINT2 |
0 |
Habilita la sincronización
del evento DMA con la interrupción externa 2 si vale 1. |
19 |
EINT3 |
0 |
Habilita la sincronización
del evento DMA con la interrupción externa 3 si vale 1. |
20 |
EXINT0 |
0 |
Habilita la sincronización
del evento DMA con la interrupción de transmisión del puerto serie 0 si vale
1. |
21 |
ERINT0 |
0 |
Habilita la sincronización
del evento DMA con la interrupción de recepción del puerto serie 0 si vale 1
si vale 1. |
22 |
EXINT1 (*) |
0 |
Habilita la
sincronización del evento DMA con la interrupción de transmisión del puerto
serie 1 si vale 1. |
23 |
ERINT1 (*) |
0 |
Habilita la sincronización
del evento DMA con la interrupción de recepción del puerto serie 1 si vale 1. |
24 |
ETINT0 |
0 |
Habilita la sincronización
del evento DMA con la interrupción del Timer0 si vale 1. |
25 |
ETINT1 |
0 |
Habilita la sincronización
del evento DMA con la interrupción del Timer1 si vale 1. |
26 |
EDINT |
0 |
Habilita la sincronización
del evento DMA con la interrupción del propio controlador de DMA si vale 1. |
31-27 |
Reservados |
0-0 |
Valores indefinidos. |
Tabla 2-3. Funciones de los bits del registro de habilitación de interrupciones. (*) No disponibles en el TMS320C31.
9. Registro de las banderas de petición de las interrupciones (IF). Cuando alguno de sus bits se pone a uno, es porque se ha producido la interrupción correspondiente. Mientras la CPU no atienda la rutina de servicio de dicha interrupción, la bandera asociada a la misma en el registro IF permanece activa. En cuanto se acceda a la rutina de servicio, la bandera correspondiente se pone a cero, indicando que no se encuentra pendiente la ejecución de la rutina de servicio de la interrupción.
Figura 2.11. Registro de petición de servicio de rutinas de interrupción (IF).
Bit |
Nombre |
Valor de Reset |
Función que realiza |
0 |
INT0 |
0 |
Bandera de interrupción
externa 0. |
1 |
INT1 |
0 |
Bandera de interrupción
externa 1. |
2 |
INT2 |
0 |
Bandera de
interrupción externa 2. |
3 |
INT3 |
0 |
Bandera de interrupción
externa 3. |
4 |
XINT0 |
0 |
Bandera de interrupción de
transmisión por el puerto serie 0. |
5 |
RINT0 |
0 |
Bandera de interrupción de
recepción por el puerto serie 0. |
6 |
XINT1(*) |
0 |
Bandera de interrupción de
transmisión por el puerto serie 1. |
7 |
RINT1(*) |
0 |
Bandera de interrupción de
recepción por el puerto serie 1. |
8 |
TINT0 |
0 |
Bandera de interrupción del
Timer0. |
9 |
TINT1 |
0 |
Bandera de interrupción
del Timer1. |
10 |
DINT |
0 |
Bandera de interrupción
del controlador de DMA. |
31-11 |
Reservados |
0-0 |
Valores indefinidos. |
Tabla 2-4. Funciones de los bits del registro de banderas de interrupciones activas. (*) No disponibles en el TMS320C31.
10. Registro de control de las entradas y salidas de propósito general (IOF). Controla los pines XF0 y XF1 del DSP (obsérvese que el TMS320C30, en principio, tan sólo dispone de dos líneas digitales de entrada y/o salida de propósito general). El usuario utiliza este registro para indicar la función de los pines XF0 y XF1 (si son líneas de entrada o salida al ASIC) y para leer el valor digital asociado a las dos líneas o escribir en ellas.
Figura 2.12. Registro de control de los pines XF0 y XF1 (IOF).
Bit |
Nombre |
Valor de Reset |
Función que realiza |
0 |
Reservado |
0 |
Se lee siempre un cero. |
1 |
I/OXF0 |
0 |
Si I/OXF0=0, XF0 se
configura como pin de entrada de propósito general. Si I/OXF0=1, XF0 se
configura como pin de salida de propósito general. |
2 |
OUTXF0 |
0 |
Dato que sale por XF0
(Cuando I/OXF0=1). |
3 |
INXF0 |
0 |
Dato que se lee de XF0
(Cuando I/OXF0=0). |
4 |
Reservado |
0 |
Se lee siempre un cero. |
5 |
I/OXF1 |
0 |
Si I/OXF1=0, XF1 se
configura como pin de entrada de propósito general. Si I/OXF1=1, XF1 se
configura como pin de salida de propósito general. |
6 |
OUTXF1 |
0 |
El dato que sale por XF1
(Cuando I/OXF1=1). |
7 |
INXF1 |
0 |
Dato que se lee de XF1
(Cuando I/OXF1=0). |
31-8 |
Reservado |
0-0 |
Se leen siempre ceros. |
Tabla 2-5. Funciones de los bits del registro de control de XF0 y XF1.
[1] La fuente de cualquier interrupción
puede emplearse para generar un evento CPU (ruptura de la secuencia normal de
ejecución del programa para ejecutar una rutina de servicio de la interrupción)
o para generar eventos DMA (sincronización de la transferencia de datos que
gestiona y realiza el periférico interno DMA).