Independientemente
del modo de funcionamiento del DSP (TMS320C30 ó TMS320C31), la secuencia de
operaciones siguientes a un reset hardware del sistema (aplicación de un 0
lógico en la entrada del circuito
integrado, reset externo no-enmascarable) es siempre la misma. El sistema
recoge el vector de reset (posición 000000h en el mapa de memoria del DSP) y
copia el valor que existe en ese registro (que se ubica en un periférico de
memoria externa suponiendo que el sistema funciona en modo microprocesador o en
la ROM interna, si el sistema funciona en modo microcomputador) en el registro
de contador de programa o PC de la CPU. Se dice por tanto que el sistema tiene
el reset autovectorizado a la posición absoluta 000000h del mapa de memoria del
DSP, dado que cuando aparece el reset, el sistema accede a la posición 000000h
para recoger la dirección absoluta de la primera instrucción a ejecutar. Al
conectar la alimentación al DSP, el estado de los registros es desconocido. La
función fundamental del reset, es llevar los registros del sistema a un estado
inicial conocido, para lo cual es preciso mantener a nivel bajo (0 lógico) el
pin de entrada
al circuito integrado
durante al menos 10 ciclos de reloj del sistema. Un reset genera la siguiente
reacción de los registros y líneas de entrada y salida del circuito integrado:
·
Accesos al exterior: Las líneas de los
buses de dirección y de datos (,
,
,
) se ponen en alta impedancia, así como las líneas de control
del tipo de acceso al exterior (
,
). Las líneas
,
y
se ponen a 1. Los
registros de control asociados al bus principal y de expansión se inicializan.
·
Las líneas de los periféricos internos
(temporizadores y puertos serie) así como las entradas o salidas digitales, y
se ponen en alta
impedancia. Los periféricos internos al DSP y sus registros de control se
inicializan.
·
Los registros internos de la CPU se
inicializan: IE=0, ST=0, IF=0, IOF=0, etc.
Al
hablar de interrupciones en un microprocesador se distingue entre fuente que
genera la interrupción y servicio que provoca:
1. Fuentes de interrupción. La forma de atención de las interrupciones es análoga al
proceso de reset. Los DSPs de la familia TMS320C3x disponen de cuatro fuentes
de interrupciones externas (), dos fuentes de interrupción asociadas a los periféricos internos
puertos serie síncronos, una fuente asignada a la transmisión y otra a la
recepción (XINT0, RINT0 para el puerto serie 0 y XINT1, RINT1 para el puerto
serie 1 que no está disponible en el TMS320C31), así como una fuente de
interrupción asociada a cada uno de los periféricos internos restantes,
temporizadores y controlador de DMA (TINT0, TINT1 y DINT).
El
esquema de generación de una interrupción en un DSP de esta familia, se muestra
en las figuras 2.19 y 2.20. Las interrupciones externas () son activas por nivel bajo y se sincronizan con el ciclo
máquina del sistema, H1 ó H3. Para garantizar que son detectadas, deben estar
activas al menos durante 1 ciclo de H1 y para ser detectadas sólo una vez,
deberán desactivarse antes de dos ciclos de reloj H1. Si permanecen activas más
de dos ciclos de H1, pueden ser atendidas más de una vez (se generan lo que se
conoce como interrupciones espúreas o indeseadas).
Figura 2.18. Esquema de generación de interrupciones internas.
Figura 2.19.
Esquema de generación de interrupciones externas.
2. Servicio de
interrupciones. Cuando una interrupción es detectada
(el bit correspondiente a dicha interrupción en el registro IF se pone a 1) el
sistema reacciona como se muestra en el diagrama de flujo de la figura 2.21.
Ø Si la interrupción tiene habilitada la generación de eventos
CPU (está a 1 el bit correspondiente del registro IE y además el bit de
habilitación global de interrupciones está también a 1) la instrucción que,
cuando se detecta la interrupción, está siendo recogida no se ejecuta. La
dirección de esta instrucción, registro PC, es almacenada en la dirección
apuntada por el registro SP, puntero a la cima de la pila. Inmediatamente
después de almacenar en la pila el PC, se pone a cero el bit GIE del registro
ST (se desactiva el bit de habilitación global de las interrupciones) y se
recoge el vector de interrupción asociado a la interrupción detectada que se
almacena en PC. Se empieza, por tanto, a ejecutar la rutina de servicio de la
interrupción. Al final de la rutina de servicio de la interrupción deberá
realizarse el retorno del contador de programa a la dirección de la instrucción
que no se ejecutó. El retorno normal de la rutina de servicio lo realiza la
instrucción RETI, que almacena en el registro PC el dato que aparece en la cima
de la pila (deberá coincidir con el valor del registro PC que se almacenó en la
pila al comenzar el proceso de atención de la interrupción) y que reactiva el
bit GIE.
Ø Si la interrupción tiene habilitada la generación de eventos
DMA, está a 1 el bit correspondiente del registro IE y además se permite la
sincronización de eventos DMA por interrupciones, sirve para lanzar las
transferencias de tipo DMA programadas (se verá en el tema 17).
Obsérvese,
por tanto, que una interrupción puede generar un evento de tipo CPU (ruptura de
la secuencia normal de ejecución en un programa) y otro de DMA. Ambos procesos
son totalmente independientes y se ejecutan en paralelo.
Figura 2.20. Procesamiento de un evento interrupción: Posibilidad de generar
eventos CPU y DMA en paralelo.
Comentarios
relacionados con el proceso de atención de interrupciones en la familia
TMS320C3x:
1. El flag GIE (del registro ST de la CPU) se pone a 0 al
comenzar el proceso de atención de una interrupción. Por tanto, y en principio,
no se produce anidamiento entre interrupciones. No es posible que, mientras se
esté ejecutando la rutina de servicio de una interrupción, al producirse una
nueva interrupción, ésta última se atienda antes de terminar de ejecutarse la
rutina de servicio de la primera interrupción que apareció. Al terminar de
ejecutar la rutina de servicio de la interrupción habrá que devolver el
registro PC al valor que tenía antes de la llegada de la interrupción y, si se
desea permitir la generación de nuevas interrupciones habrá que volver a
activar el bit GIE (instrucciones RETI o RETS). Obsérvese que, dentro de la
propia rutina de servicio de las interrupciones, el usuario puede poner, vía
software, el bit GIE a 1 permitiendo el anidamiento de las interrupciones.
2. Los accesos en escritura al registro IF pueden causar fallos
en la generación de las interrupciones (si se ha generado una interrupción y
está lista para ser latcheada en IF a la par que se escribe en el mismo
registro IF, el proceso de escritura tiene más prioridad, perdiéndose la
interrupción generada lo que es especialmente grave si la interrupción generada
lo fue por un periférico interno como la DMA). El fabricante desaconseja el uso
del polling o generación por software
(escritura de 1´s lógicos) en los flags del registro IF para provocar interrupciones
así como su desactivación por software (escritura de 0´s lógicos), aconsejando
la generación de la interrupción y dentro de la rutina de servicio la
distinción entre interrupción real o espúrea.
3. La señal que genere una interrupción externa debe tener un 0
lógico (permanecer activa) un tiempo comprendido entre 1 y 2 ciclos H1 ó H3
(entre 2 y 4 ciclos de reloj del sistema) para garantizar que no se produzca
más de una interrupción externa en el sistema (el flags del registro IF
correspondiente a la interrupción externa lo limpia automáticamente la CPU
generando una señal de reset asíncrono al entrar en la rutina de servicio de la
interrupción).
4. La atención de las interrupciones provoca que no se ejecute
la instrucción que entre en el momento de la aparición de la interrupción en su
fase de recogida (Fetch en la estructura de pipeline) siempre que ésta se
encuentre en su primer ciclo máquina de recogida. Si la instrucción está en su
fase de recogida pero en un ciclo máquina superior al primero (debido, por
ejemplo, a la aparición de conflictos en la estructura pipeline) se termina de ejecutar antes de atenderse la rutina de
servicio de la interrupción. Todo esta casuística, la gestiona la CPU de forma
y manera transparente al usuario.
5. Posibilidad de generar interrupciones de tipo software
(excepciones). Aparte de las interrupciones antes mencionadas. Se pueden
generar hasta 32 interrupciones software empleando la instrucción “TRAPcond n”,
con 0<n<31, que generaría una ruptura programada de la secuencia normal
de control de forma análoga a como sucede en el caso de interrupciones de tipo
hardware. Este tipo de interrupciones se generan independientemente del valor
(0 ó 1) de GIE. Una instrucción de tipo TRAP, provoca además que el flag GIE se
ponga a 0 inicialmente (sea o no cierta la condición cond, para generación de
la excepción software), lo que puede provocar un error si posteriormente se
produce un conflicto en la estructura de pipeline, en las fases de lectura
(Read) o decodificación (Decode), asociadas a la propia instrucción TRAP, que
dejaría GIE=0 luego de ejecutarse la instrucción, aunque no se cumpla la
condición ni se genere la interrupción software. Para evitar este error, el
fabricante recomienda la inserción de dos instrucciones NOP antes del uso de la
instrucción TRAP. Secuencias de operaciones que pueden generar este error son:
Ejemplo1: LDI memoria,SP
TRAPcond n
Ejemplo2: LDI memoria,SP
NOP
TRAPcond n
Ejemplo3: STI SP,memoria
TRAPcond n
Ejemplo4: STI memoria,SP
NOP
TRAPcond n
En
la figura 2.22 se muestra el mapa de memoria de los vectores de reset,
interrupciones y excepciones software en la familia TMS320C3x de Texas
Instruments.
Figura 2.21. Mapa de memoria de los vectores de reset, interrupciones y
excepciones software.