comunicacion serial sincrona
TRANSCRIPT
1
Comunicación Serie: SCI Síncrono
Microcontroladores PIC ©ATE-Universidad de Oviedo
COMUNICACIÓN SERIE PARA SISTEMAS BASADOS EN MICROCONTROLADORES PIC
MÓDULO SCI EN MODO SÍNCRONO
Fernando Nuño García
2
Comunicación Serie: SCI Síncrono
Microcontroladores PIC ©ATE-Universidad de Oviedo
SCI MODO SÍNCRONOSYNC = 1 (TXSTA<4>)SPEN=1 (RCSTA<7>)
Modo MAESTRO:CSRC = 1 (TXSTA<7>)
MAESTROEMISOR
DT
CKMAESTRORECEPTOR
DT
CK
Dos líneas: DT: datosCK: reloj
RECIBIENDOCREN y/o SREN (RCSTA<5:4>)
EMITIENDOTXEN=1 (TXSTA<5>)
En modo Maestro, la línea de reloj es siempre de salidala línea de datos es de salida o entrada dependiendo de TXEN y CREN/SREN
prevalece la definición de entrada sobre la de salida
Semi dúplexuno de los2 estados
(no simultáneos)
3
Comunicación Serie: SCI Síncrono
Microcontroladores PIC ©ATE-Universidad de Oviedo
SCI MODO SÍNCRONOSYNC = 1 (TXSTA<4>)SPEN=1 (RCSTA<7>)
Modo ESCLAVO:CSRC = 0 (TXSTA<7>)
Dos líneas: DT: datosCK: reloj
RECIBIENDOCREN = 1 (RCSTA<4>)
EMITIENDOTXEN=1 (TXSTA<5>)
En modo Esclavo, la línea de reloj es siempre de entrada,la línea de datos es de salida o entrada dependiendo de TXEN y CRENprevalece la definición de entrada (CREN) sobre la de salida (TXEN)
Semi dúplexuno de los2 estados
(no simultáneos)ESCLAVOEMISOR
DT
CKESCLAVORECEPTOR
DT
CK
4
Comunicación Serie: SCI Síncrono
Microcontroladores PIC ©ATE-Universidad de Oviedo
Generador de Relación de Baudios (BRG) sólo tiene sentido en Modo Maestro
porque en modo Esclavo el reloj es el que entre por CK
• Se determina la frecuencia de reloj para la transmisión y la recepción en modo Maestro: se genera y envía la señal de reloj
• Valor X cargado en el registro SPBRG (dirección 0x99)
Velocidad de transmisión (baudios) = fosc /(4*(X+1))
Modo Síncrono (1) No importa BRGHcomo sucedía en el modo
Asíncrono
Registro TXSTA
5
Comunicación Serie: SCI Síncrono
Microcontroladores PIC ©ATE-Universidad de Oviedo
TRANSMISIÓN SÍNCRONA COMO MAESTRO
DT
Control
CK
Durante el Estado Inactivo (sin transmisión) no hay flancos en el reloj (CK)
Cuando se inicia una transmisión, empiezan a aparecer flancos en el reloj.Al finalizar el envío del dato, desaparecen los flancos
¡Ahora no hay bit de START ni de STOP como en el caso Asíncrono!
TXREG “carga” TSR(registro de transmisión)
TSR no es accesible directamente
6
Comunicación Serie: SCI Síncrono
Microcontroladores PIC ©ATE-Universidad de Oviedo
• TSR no se “carga” hasta que no se haya enviado el último bit de una carga previa, en cuanto este bit es enviado, TSR se carga con un nuevo dato almacenado en TXREG (si es que ya estaba disponible)
• Una vez que TXREG carga a TSR, TXREG queda vacío y el flag TXIF=1 (posible interrupción si se activaron las máscaras), TXIF=0 cuando TXREG vuelva a estar ocupado (OJO: TXIF es de sólo lectura y no se puede poner a 0 por software)
• TRMT es bit de sólo lectura e indica estado de TSR (a 1 si TSR vacío y 0 si lleno)no existe ninguna interrupción asociada el estado de este bit
Dato1a TXREG
Dato2a TXREG
Fin del envíode Dato1
vacío
vacío
TXREG:
TSR:
TXIF = 1TRMT = 1
vacío
Dato1
TXIF = 1TRMT = 0
Dato2
Dato1
TXIF = 0TRMT = 0
vacío
Dato2
TXIF = 1TRMT = 0
7
Comunicación Serie: SCI Síncrono
Microcontroladores PIC ©ATE-Universidad de Oviedo
INICIO DE UNA TRANSMISIÓN SÍNCRONA
Existen dos posibilidades:
1ª Posibilidad.- Se habilita TXEN=1 y a continuación se carga TXREG
(los bits “salen” en los flancos de subida de CK y estarán estables en flancos de bajada)
Cronograma de envío de dos bytes seguidos
8
Comunicación Serie: SCI Síncrono
Microcontroladores PIC ©ATE-Universidad de Oviedo
2ª Posibilidad.- Se carga TXREG primero y luego se pone TXEN=1
El inicio de la transmisión es más rápido porque ahora el dato ya estácargado y disponible en el registro de desplazamiento TSR para el envío
Mientras TXEN=0 el generador de relación de baudios permanecerá parado y reseteado
9
Comunicación Serie: SCI Síncrono
Microcontroladores PIC ©ATE-Universidad de Oviedo
TXEN bit de activación de transmisión:
• Este bit junto con CREN y/o SREN define si la línea de datos es de transmisión (TXEN=1) o de recepción (CREN=1 recepción continua, SREN=1 recepción simple). Si están activos simultáneamente, prevalece recepción sobre transmisión
•Si TXEN se pone a cero durante una transmisión, ésta se interrumpe y se reseteael bloque de transmisión
• Si TXEN está a cero, y no está activa la recepción (CREN=0, SREN=0), las líneas DT y CK se sitúan en un estado de alta impedancia respecto a los pines del PORTC(DT y CK no salen al exterior)
• Si se activa una recepción (CREN=1 ó SREN=1) durante una transmisión, se abortala transmisión y la línea de datos del registro TSR pasa a un estado de alta impedancia (desconexión de la línea exterior). El módulo transmisor no se resetea, sólo queda desconectado de la línea de datos. Si se volvieran anular CREN ó SREN, volvería a transmitir saliendo de alta impedancia:la salida de TSR se conectaría de nuevo a la línea de datos exterior DT.
• Sólo se resetea la transmisión si TXEN=0
10
Comunicación Serie: SCI Síncrono
Microcontroladores PIC ©ATE-Universidad de Oviedo
Pasos a dar para realizar una Transmisión Serie Síncrona como Maestro:
1.- Cargar SPBRG para una velocidad de transmisión dada (baudios)
2.- Activar módulo SCI (SPEN=1), definirlo como Síncrono (SYNC=1)y Maestro (CSRC=1)
3.- Si se quiere detectar buffer vacío por interrupción TXIE=1, PEIE=1, GIE=1
4.- Si se desea tamaño de datos de 9 bits configurar TX9=1
5.- Activar transmisión (TXEN=1)
6.- Si se seleccionaron 9 bits, cargar el 9º en TX9D
7.- Cargar el dato en TXREG (se inicia la transmisión)
Los pasos 5 y 7 podrían intercambiarse
11
Comunicación Serie: SCI Síncrono
Microcontroladores PIC ©ATE-Universidad de Oviedo
Registros Asociados con Transmisión Síncrona
en Modo Maestro
12
Comunicación Serie: SCI Síncrono
Microcontroladores PIC ©ATE-Universidad de Oviedo
RECEPCIÓN SÍNCRONA COMO MAESTRO
CKControl SREN
CREN
Cuando se inicia una recepción se generan flancos en CK y entran los datos por DT
DT
SREN: para recibir sólo un datoCREN: para recepción continua de datos
b8
No hay bitsde STARTni STOP
13
Comunicación Serie: SCI Síncrono
Microcontroladores PIC ©ATE-Universidad de Oviedo
RECEPCIÓN DEL MAESTRO• Por tratarse de Maestro, se genera la señal de reloj cuando se inicie recepción que puede ser:
a) Para recibir un solo dato (SREN=1):Se generan 8 ó 9 flancos en el reloj y se para éste al completarse el dato, SREN se pone a 0 por hardwareb) Para recibir datos de manera continua (CREN=1). Si CREN=1 y SREN=1 simultáneamente, prevalece la recepción continuaSe generan flancos en el reloj de manera continua hasta que CREN=0
Recepción de un dato con SREN=1
8 periodos de reloj
14
Comunicación Serie: SCI Síncrono
Microcontroladores PIC ©ATE-Universidad de Oviedo
• Tras entrar el último bit en RSR, el dato completo se transfiere a RCREG (si no hay error: OERR=0), el flag RCIF (solo lectura) se pone a 1 (¿interrupción?)
• RCREG es un doble buffer de tipo FIFO. Cuando el buffer esté vacío, RCIF se pondrá a 0 por hardware
• Pueden estar dos datos en el buffer y recibiéndose un tercer dato en RSR, pero si se completa el tercer byte con RCREG doble lleno, se pierde RSR y se da errorde overrun (OERR=1). Se podrían leer los dos datos de RCREG pero se debe eliminarel error para desbloquear pasos de RSR a RCEG.
¿Cómo? -> CREN=0 -> OERR=0Se completa
Dato1Se completa
Dato2Se completa
Dato3
Entrando...RSR:
RCREG:
RCIF = 0 RCIF = 1
vacíovacío
Entrando...
RCIF = 1
Dato1vacío
Entrando...
Dato1Dato2
Dato3
RCIF = 1
Dato1Dato2
¡ OERR = 1 !Bloqueo
RSR->RCREG
15
Comunicación Serie: SCI Síncrono
Microcontroladores PIC ©ATE-Universidad de Oviedo
Pasos para preparar Recepción Serie Síncrona como Maestro:
1.- Inicializar SPBRG para una velocidad de transmisión dada (baudios)
2.- Activar módulo SCI (SPEN=1), definirlo como Síncrono (SYNC=1) y Maestro (CSRC=1)
3.- Borrar CREN y SREN al principio
4.- Si se desean interrupciones, activar máscaras RCIE, PEIE, GIE
5.- Si se desea tamaño de datos de 9 bits configurar RX9=1
6.- Si se desea recibir un dato (SREN=1), si recepción continua (CREN=1)
7.- Al completarse un dato RCIF=1 (¿interrupción?)
8.- Si el dato es de 9 bits, recoger RX9D en registro RCSTA
9.- Recoger los 8 bits del dato en RCREG
10.- Si se dio algún error (OERR=1), resetear poniendo CREN=0
16
Comunicación Serie: SCI Síncrono
Microcontroladores PIC ©ATE-Universidad de Oviedo
Registros Asociados con Recepción Síncrona
en Modo Maestro
17
Comunicación Serie: SCI Síncrono
Microcontroladores PIC ©ATE-Universidad de Oviedo
TRANSMISIÓN SÍNCRONA COMO ESCLAVO
• En Modo Esclavo, la señal de reloj es una entrada externa por el pin CK,podría transmitir o recibir incluso en modo SLEEP
DT
CK
Se cargará TSR a través de TXREG pero sin capacidad de iniciar transferencia.Se debe esperar a que aparezcan flancos en la línea CK para el envío
18
Comunicación Serie: SCI Síncrono
Microcontroladores PIC ©ATE-Universidad de Oviedo
• La transferencia TXREG -> TSR es idéntica a la del modo Maestro y losflags indicadores (TXIF y TRMT) también
• En modo Maestro, la carga de TXREG desencadenaba la aparición de flancos en CK
•Se podrían cargar dos datos en TXREG, el primero pasaría a TSR y el segundo quedaría a la “espera” en TXREG. Podriamos mandar a modo de bajo consumo (SLEEP) al micro. En cuanto se haya enviado el primer dato, TXREG le “pasa” el segundo a TSRy queda vacío TXREG, provocando TXIF=1 (pudiendo despertarse el microcontrolador para que sitúe el siguiente dato en TXREG)
vacío
Dato1
TXREG:
TSR:
CargamosDato2
y SLEEP
Dato1enviado
Despiertay cargamos
Dato3
TXIF = 1TRMT = 0
Dato2
Dato1
TXIF = 0TRMT = 0
vacío
Dato2
TXIF = 1TRMT = 0
Dato3
Dato2
TXIF = 0TRMT = 0
19
Comunicación Serie: SCI Síncrono
Microcontroladores PIC ©ATE-Universidad de Oviedo
Pasos a dar para realizar una Transmisión Serie Síncrona como Esclavo:
1.- Activar módulo SCI (SPEN=1), definirlo como Síncrono (SYNC=1) y Esclavo (CSRC=0)
2.- Asegurar que CREN=0 y SREN=0
3.- Si se desean interrupciones, activar máscaras TXIE, PEIE, GIE
4.- Si se desean enviar datos de 9 bits configurar TX9=1
5.- Si se seleccionaron 9 bits, cargar el 9º en TX9D
6.- Cargar el dato en TXREG
7.- Permitir transmisión poniendo TXEN=1
20
Comunicación Serie: SCI Síncrono
Microcontroladores PIC ©ATE-Universidad de Oviedo
Registros Asociados con la Transmisión Síncrona
en Modo Esclavo
21
Comunicación Serie: SCI Síncrono
Microcontroladores PIC ©ATE-Universidad de Oviedo
RECEPCIÓN SÍNCRONA COMO ESCLAVO
Se podrían recibir datos estando dormido el microcontrolador
CREN
b8
En modo Esclavo, la señal de reloj (CK) es entrada externa
CK
SREN sin sentido en modo esclavo
22
Comunicación Serie: SCI Síncrono
Microcontroladores PIC ©ATE-Universidad de Oviedo
• Tras entrar el último bit en RSR, el dato completo se transfiere a RCREG (si está vacío), el flag RCIF (solo lectura) se pone a 1 y puede generar una interrupción
• RCREG es un doble buffer de tipo FIFO, cuando esté vacío RCIF=0 (hardware)
• Pueden estar dos datos en el buffer y recibiéndose un tercer dato en RSR, si se completa el tercer byte con RCREG doble lleno, se pierde RSR y error (OERR=1). Se podrían leer los dos datos de RCREG pero se debe eliminar el error para desbloquear el paso de RSR a RCEG. ¿Cómo? CREN=0 -> OERR=0
Se completaDato1
Se completaDato2
Se completaDato3
Entrando...RSR:
RCREG:
RCIF = 0
vacíovacío
Entrando...
RCIF = 1
Dato1vacío
Entrando...
RCIF = 1
Dato1Dato2
Dato3
RCIF = 1
Dato1Dato2
¡ OERR = 1 !Bloqueo
RSR->RCREG
23
Comunicación Serie: SCI Síncrono
Microcontroladores PIC ©ATE-Universidad de Oviedo
Pasos a dar para preparar Recepción Serie Síncrona como Esclavo:
1.- Activar módulo SCI (SPEN=1), definirlo como Síncrono (SYNC=1) y Esclavo (CSRC=0)
2.- Si se desean interrupciones activar máscaras RCIE, PEIE, GIE
3.- Si se desea tamaño de datos de 9 bits configurar RX9=1
4.- Activar recepción con CREN=1
5.- Al completarse un dato RCIF=1 (¿interrupción?)
6.- Si el dato es de 9 bits, recoger RX9D en registro RCSTA
7.- Recoger 8 bits del dato en RCREG
8.- Si se dio algún error (OERR=1) -> resetear poniendo CREN=0
24
Comunicación Serie: SCI Síncrono
Microcontroladores PIC ©ATE-Universidad de Oviedo
Registros Asociados con Recepción Síncrona
en Modo Esclavo