|
Complementos de sistemas electrónicos digitales |
Tema
4
|
4.
Puertos
serie síncronos
Un puerto serie es un periférico cuya función básica es la transferencia, bit a bit, de datos digitales. Los periféricos puerto serie pueden ser de dos tipos, según el protocolo que se emplee en la transferencia de los datos, síncronos o asíncronos. La diferencia básica entre ambos protocolos estriba en la transferencia o no, por una línea diferente de la empleada en la transferencia del dato, de una señal de reloj. En el caso de los periféricos serie con protocolo síncrono el periodo de la señal de reloj sirve para indicar el periodo de validez de un bit transferido.
La familia TMS320C3x de Texas Instruments dispone de periféricos internos dedicados a la transmisión serie síncrona de datos con un ancho configurable a 8, 16, 24 ó 32 bits. Cada periférico puerto serie está compuesto de dos partes independientes entre sí, una dedicada a la recepción de datos y la otra a la transmisión. El periférico puerto serie se dice, por tanto, que es bidireccional: La transmisión y la recepción se pueden producir simultáneamente y son independientes entre sí.
El protocolo serie síncrono que utiliza Texas Instruments en sus DSPs maneja tres líneas para la transmisión de datos y otras tres, independientes de las anteriores, para la recepción de datos. El fabricante asigna al puerto serie, por tanto, seis líneas de entrada o salida denominadas FSX, DX y CLKX en la parte de transmisión y FSR, DR y CLKR en la parte de recepción. Como en el caso de los temporizadores estas líneas tienen dos funciones alternativas (el usuario debe configurar la funcionalidad de la línea) pudiendo servir como señales por las que se realiza la transferencia serie síncrona o como líneas de entrada o salida de propósito general (por defecto, y tras un reset, estas líneas se configuran como líneas de entrada al circuito integrado). La funcionalidad de estas líneas, en el caso en que sean usadas por el periférico puerto serie, es la siguiente:
· Para la transferencia de los bits se emplean las líneas DX (bit transmitido) y DR (bit recibido).
· El reloj que se emplea en la sincronización de la transferencia de los bits circula por las líneas CLKX (reloj base para la transmisión de bits) y CLKR (reloj base para la recepción de bits).
· Finalmente, el protocolo serie síncrono de Texas Instruments incorpora una señal que indica el comienzo de la transferencia de un dato (cadena de bits). Esta señal está asociada a las líneas FSX (señal que indica al puerto serie el comienzo de la transmisión de un dato) y FSR (señal que indica al puerto serie el comienzo de la recepción de un dato).
Los procesos que se siguen en la realización de una transferencia, transmisión y recepción, serie síncrona son los siguientes:
· Transmisión de datos: Primero el usuario escribe por software en el registro DXR. Posteriormente, el periférico vuelca el contenido de DXR sobre XSR y, con un retraso mínimo de dos periodos del reloj base de la transmisión síncrona desde que se llenó DXR, inicia la transferencia del dato (se genera un evento FSX). Cuando se almacena DXR en XSR, el bit XRDY se pone a 1 indicando que el buffer DXR está libre para admitir otro dato. El dato se transmite bit a bit, ordenados de MSB a LSB, por la línea DX del DSP con un protocolo síncrono (el bit se transmite y cambia en los flancos de subida de la línea CLKX, la señal de reloj base del transmisor). El puerto serie se dice que tiene, por disponer de dos registros para transmitir los datos, un doble buffer en transmisión.
· Recepción de datos: Primero el periférico recibe un evento FSR que inicia la recepción del dato. El dato llega bit a bit, ordenados de MSB a LSB, por la línea DR del DSP (el bit se lee en los flancos de bajada de la línea CLKR, la señal de reloj base del receptor). Conforme los bits van llegando se van almacenando, desplazándose a izquierdas, en el registro RSR. Cuando han llegado todos los bits que conforman el ancho del dato especificado por el usuario en la configuración del periférico, el contenido del registro RSR se vuelca sobre el registro DRR y el bit RRDY se pone a 1. RRDY a 1 indica, por tanto, que el buffer DRR contiene un dato recogido por el periférico y que está listo para ser leído por software por el usuario. Si en ese momento el usuario decide no leer DRR y siguen llegando nuevos datos, que recoge el registro RSR, el último dato que llegó se pierde -no se vuelca el contenido de RSR en DRR si éste último registro contiene un dato no leído-. Cuando DRR es accedido en lectura RRDY se desactiva, se pone a 0, permitiendo la recogida de nuevos datos. El puerto serie se dice que tiene, por disponer de dos registros para recibir los datos, un doble buffer en recepción.
En la figura 4.9 se observa el esquema básico de cada periférico puerto serie del DSP.
Figura 4.9. Diagrama de bloques y estructura interna del periférico puerto serie síncrono.
Cada una de las partes del periférico dispone de un temporizador de 16 bits, equivalente al visto en el apartado anterior aunque con un tamaño de los registros periodo y contador de 16 bits y con una posible fuente de reloj interna de frecuencia la mitad del ciclo máquina. La finalidad de estos temporizadores es su posible empleo en la generación del reloj que utiliza el puerto serie en la transferencia del dato (la frecuencia del reloj se determina programando el valor del registro periodo asociado al temporizador del puerto serie). Es posible definir, por tanto, como fuente de reloj para la transferencia serie síncrona la salida de fin de cuenta de los temporizadores del puerto serie aunque no es imprescindible -se puede usar un reloj externo para sincronizar la transferencia serie, reloj ligado a la línea CLKX en transmisión y a la línea CLKR en recepción-.
A cada parte (transmisión
y recepción) del periférico puerto serie el fabricante le asigna una petición
de interrupción a la CPU. Esta petición de interrupción puede generar un evento
interrupción asociado a la CPU (ruptura de la secuencia normal de ejecución del
programa y ejecución de la rutina de servicio de la interrupción asociada al
periférico) y puede servir para la sincronización de eventos DMA (se verá mas
adelante). Aunque cada parte tiene asignada una única petición de interrupción,
dispone de dos fuentes o posibles causas para generar dicha petición -fuentes que se habilitan
escribiendo un 1 en los bits XTINT, XINT, RTINT y RINT del registro global de
control del periférico-. Las fuentes de interrupción asociadas al periférico puerto serie son:
1.
Fin de cuenta del temporizador de 16
bits. El registro contador del temporizador de 16 bits alcanza al registro
periodo.
2.
Final del proceso de transferencia de un
dato. En transmisión la petición se realiza si el registro DXR está vacío
porque se ha volcado sobre el registro XSR (se pueden enviar nuevos datos) y en
recepción si el registro DRR está lleno porque se volcó sobre él el registro
RSR.
Como consecuencia, la interrupción asociada a la
parte de transmisión del puerto serie puede generarse por quedar libre el
buffer de transmisión DXR, al volcarse el contenido de DXR sobre el registro
XSR -XINT=1, XTINT=0-, por alcanzar el registro contador del temporizador de 16
bits asociado a la parte de transmisión del periférico al registro periodo del
mismo temporizador -XINT=0, XTINT=1- o por ambas causas -XINT=1,
XTINT=1-. De forma análoga, la interrupción de recepción del puerto
serie puede generarse por haberse llenado el buffer de recepción DRR, al
volcarse sobre él el registro RSR -RINT=1, RTINT=0-, por alcanzar el registro contador del temporizador de 16
bits asociado a la parte de recepción del periférico al registro periodo del
mismo temporizador -RINT=0, RTINT=1- o por ambas causas -RINT=1,
RTINT=1-.