12° sesion Usart

20
1 MICROCONTROLADORES PIC Puerto Serial Usart (Universal Synchronous Asynchronous Receiver Transmitter)

Transcript of 12° sesion Usart

Page 1: 12° sesion Usart

1

MICROCONTROLADORES PICMICROCONTROLADORES PIC

Puerto Serial Usart(Universal Synchronous Asynchronous

Receiver Transmitter)

Page 2: 12° sesion Usart

2

Microcontroladores PIC USART (SCI): Generalidades

El módulo USART es uno de los 2 módulos seriales incorporados como periféricos en los PIC.

También es conocido como SCI: Serial Communication Interfase

La Usart puede ser utilizada como un sistema asíncrono full duplex, para comunicación con PCs o similares, o síncrono half duplex, para comunicación con Cis como CAD, CDA, eeprom seriales y otros.

La Usart puede ser configurada en los siguientes modos:

Modo Asíncrono (Full - Duplex) Modo Síncrono Master (Half - Duplex) Modo Síncrono Slave (Half - Duplex)

Page 3: 12° sesion Usart

3

Microcontroladores PIC USART : Registro de Tx/Status TXSTA

BRGH Bit selector de baudios

Modo Asíncrono

1 = Alta velocidad

0 = Baja velocidad

Modo Síncrono: No se usa

TRMT Bit de status del registro de Tx

1 = Registro TSR vacío

0 = Registro TSR lleno

TX9D Noveno bits de datos. Puede ser bit de paridad

CSRC Bit selector de la fuente del clock

Modo Asíncrono: No importa

Modo Síncrono

1= Modo Master. Clock generado por el BRG

0 = Modo Slave. Clock externo

TX9 Bit selector de modo de datos para Tx

1 = Transmisión de 9 bits

0 = Transmisión de 8 bits

TXEN Bit de habilitación de Transmisión

1 = Transmisión habilitada

0 = Transmisión deshabilitada

SYNC Bit selector de Modo de la Usart

1 = Modo Síncrono

0 = Modo Asíncrono

Page 4: 12° sesion Usart

4

Microcontroladores PIC USART : Registro de Status/Control RCSTA

SPEN Bit habilitador puerto Serial

1 = Puerto habilitado. Asigan los pines RC7 y RC6 a la Usart

0 = Puerto deshabilitado

RX9 Bit selector de modo de datos para Rx

1 = Recepción de 9 bits

0 = Recepción de 8 bits

SREN Bit para habilitar una solao recepción

Modo Asíncrono: No importa

Modo Síncrono Master

1 = Habilita una sola recepción

0 = Deshabilita una sola recepción (este bit es limpiado

después que

la recepción está completa)

CREN Bit para habilitar recepciones continuas

Modo Asíncrono

1 = Habilita recepciones continuas

0 = Deshabilita recepciones continuas

Modo Síncrono

1 = Habilita recepciones continuas hasta

que CREN se limpia nuevamente

0 = Deshabilita recepciones continuas

FERR Flag de error de Framing

1 = Error de Framing

0 = No hay error de Framing

OERR Flag de error de Overrun

1 = Error de overrun

0 = No hay error

RX9D Noveno bit de datos.

Puede ser bit de paridad

Page 5: 12° sesion Usart

5

Microcontroladores PIC USART : BRG (Baud Rate Generator)

El BRG es un generador de baudios dedicado de 8 bits que soporta ambos modos de comunicación: Síncrono y Asíncrono.

El registro de control SPBRG controla el período de carrera libre del timer de 8 bits del BRG.

En modo Asíncrono, el bit TXSTA<BRGH>, también controla el rango de baudios. En modo Síncrono, el bit BRGH es ignorado.

Las fórmulas para deteminar el valor del registro SPBRG en modo Master solamemte, son las siguientes:

SYNC BRGH=0(baja velocidad) BRGH=1(alta velocidad)

0 Baudios = Fosc/[64(SPBRG + 1)] Baudios = Fosc/[16(SPBRG + 1)]

1 Baudios = Fosc/[4(SPBRG + 1)]

Page 6: 12° sesion Usart

6

Microcontroladores PIC USART : BRG (Baud Rate Generator)

Dado un rango de transferencia de datos y el valor del oscilador (Fosc), el valor del SPBRG puede ser determinado. Por ejmplo, si se tienen las siguientes condiciones:

Fosc = 16 Mhz

Baudios = 9600 bps

BRGH = 0

SYNC = 0

Baudios = Fosc/[64(SPBRG + 1)]

9600 = 16000000/[64(SPBRG + 1)]

SPBRG = 25.042 25

Con SPBRG = 25, se tiene que % Error = 0.16% (9615 baudios) Al escribir un nuevo valor en el SPBRG, provoca que el timer del

BRG se resetee. Esto asegura que el BRG no espere un timer overflow antes de ajustar la transferencia al nuevo valor de bps.

Page 7: 12° sesion Usart

7

Microcontroladores PIC USART: Valores para Modo Asíncrono y BRGH= 0

Page 8: 12° sesion Usart

8

Microcontroladores PIC USART: Valores para Modo Asíncrono y BRGH= 1

Page 9: 12° sesion Usart

9

Microcontroladores PIC USART: Modo Asíncrono - Generalidades

En este modo, la Usart utiliza un estándar llamado Nonreturn-To-Zero (NRZ), es decir, 1 bit de partida, 8 o 9 bits de datos y 1 bit de parada. Lo más común es transmitir/recibir datos de 8 bits.

El BRG es utilizado para generar los clock necesarios para transferencias a velocidades standard

La Usart transmite y recibe el bit LSB primero. Las etapas de Transmisión y Recepción son funcionalmente

independientes, pero usan el mismo formato de transmisión/recepción y la misma velocidad de transferencia

Page 10: 12° sesion Usart

10

El bit de paridad no es soportado por el hardware, pero puede ser implementado por software y almacenado en el bit TX9D.

El modo Asíncrono no es funcional en modo Sleep

El modo Asíncrono es seleccionado limpiando el bit TXSTA<SYNC>

El módulo Usart Asíncrono consiste en las siguientes partes:

BRG: Baud Rate Generator

Circuito de muestreo

Transmisor Asíncrono

Receptor Asíncrono

Microcontroladores PIC USART: Modo Asíncrono - Generalidades

Page 11: 12° sesion Usart

11

Microcontroladores PIC USART: Modo Asíncrono - Transmisor

El corazón del transmisor es el registro desplazador TSR. Este obtiene los datos desde el registro buffer TXREG.

El TXREG es cargado con el dato a transmitir por software. El TSR no se carga hasta que el bit de parada STOP halla sido transmitido por el hardware en la transferencia anterior.

Tan pronto como el bit STOP es transmido, el TSR se carga con el valor disponible en el TXREG.

Una vez que el TXREG transfiere el dato el TSR (ocurre en un solo ciclo de instrucción, Tcy), el TXREG queda vacío y el flag PIR1<TXIF> es puesto. Este flag será puesto a independientemente del estado del bit de habilitación PIE1<TXIE> y no puede ser limpiado por sofware. Este se limpiará cuando un nuevo dato se cargue en TXREG

Page 12: 12° sesion Usart

12

Microcontroladores PIC USART: Modo Asíncrono - Transmisor

Mientras el flag PIR1<TXIF> indica el status del registro TXREG, el flag TXSTA<TRMT>, muestra el status del registro TSR. Este es un flag de sólo lectura y es puesto cuando el TSR está vacío. No hay interrupción asociada al flag TRMT, por lo que el usuario debe testear el flag para determinar el estado del TSR.

El registro TSR no está mapeado en la zona de memoria de datos, por lo que no está disponible para el usuario

La transmisión queda habilitada poniendo el bit TXSTA<TXEN>, pero el proceso de transmisión no se iniciará hasta que el registro TXREG haya sido cargado y el BRG halla iniciado un ciclo de reloj.

La transmisión también puede ser iniciada, cargando el TXREG con el dato a transmitir y luego habilitar la transmisión, poniendo el bit TXSTA<TXEN>

Page 13: 12° sesion Usart

13

Microcontroladores PIC USART: Modo Asíncrono - TransmisorUSART: Modo Asíncrono - Transmisor

Si la transmisión es habilitada primero, y el TXREG está vacío, el contenido del TXREG se transferirá al TSR.

Si se detiene una transmisión en medio del proceso de transmisión (TXEN = 0), provocará que el bloque transmisor aborte la transferencia, reseteándose. Esto provocará que el pin RC6/TX/DT se ponga en estado de HiZ

Para seleccionar el modo de transmisión de 9 bits, el bit TXSTA<TX9> debe ser puesto y el noveno bit del dato, debe ser escrito en el bit RXSTA<TX9D>.

El noveno bit debe ser escrito antes de escribir los 8 bits en el TXREG. Esto se debe a que cuando se escribe el TXREG y si TXEN =1, el dato se transfiere inmediatamente al TSR (si es que está vacío). En este caso, un noveno bit de datos puede ser transmitido erróneamente

Page 14: 12° sesion Usart

14

Microcontroladores PIC USART: Modo Asíncrono - Transmisor/ConfiguraciónUSART: Modo Asíncrono - Transmisor/Configuración

Pasos a seguir para configurar la Usart en modo Asíncrono – Tx

1 Inicializar el registro SPBRG con el valor correspondiente, de acuerdo a la velocidad de transferencia que desee

2 Habilitar el Puerto Serial Asíncrono limpiando el bit TXSTA<SYNC> y poniendo el bit RCSTA<SPEN>

3 Si se requiere interrupción por buffer vacío (TXREG), poner el bit PIE1<TXIE>

4 Si se requiere transmisión de 9 bits, poner el bit TXSTA<TX9>

5 Habilitar la transmisión poniendo el bit TXSTA<TXEN>, lo cual también pone el flag PIR1<TXIF>

6 Si el modo de transmisión de 9 bit fue seleccionado, el noveno bit de datos debe ser cargado en el bit TXSTA<TX9D>

7 Cargar el registro TXREG. Esto unicia la transmisión

Page 15: 12° sesion Usart

15

Microcontroladores PIC USART: Modo Asíncrono - Tx/Diagramas de TiempoUSART: Modo Asíncrono - Tx/Diagramas de Tiempo

Transmisión Asíncrona

Transmisión Asíncrona

Consecutiva

Page 16: 12° sesion Usart

16

Microcontroladores PIC USART: Modo Asíncrono - ReceptorUSART: Modo Asíncrono - Receptor

El corazón del bloque receptor, es el registro serial RSR. Después de detectar el bit de parada, el dato recibido en el RSR es transferido al registro RCREG (si es que está vacío). Si la transferencia es completa, el flag PIR<RCIF> es puesto.

La interrupción ascociada a este evento, puede ser habilitada/deshabilitada, poniendo/limpiando el bit PIE1<RCIE>

Los datos recibidos en el pin RC7/Rx/DT, son llevados al bloque de recuperación. Este bloque es un registro serial desplazador de alta velocidad, que opera 16 veces más rápido que el rango de transferencia de datos

Una vez que el modo Asíncromo es seleccionado, la recepción es habilitada poniendo el bit RCSTA<CREN>

Page 17: 12° sesion Usart

17

Microcontroladores PIC USART: Modo Asíncrono - ReceptorUSART: Modo Asíncrono - Receptor

El flag RCIF es de sólo lectura y es limpiado por el hardware cuando el registro es leído y queda vacío

El registro RCREG es un buffer doble, es decir, una FIFO (First In - First Out) de 2 niveles. Esto permite que 2 bytes puedan ser recibidos en el RCREG, mientras el tercero queda en el RSR.

Si en la detección del bit de parada del tercer byte, el RCREG aún está lleno, el flag de Overrun es puesto, RCSTA<OERR>, y el dato en el RSR se pierde.

Entonces el registro RCREG puede ser leído 2 veces para rescatar los datos de la FIFO, pero el flag OERR debe ser limpiado por software, lo que resetea la lógica del bloque receptor, limpiando el bit RCSTA<CREN>. Mientras el OERR esté puesto, la transferencia de datos desde el RSR al RCREG quedará inhibida, por lo que es necesario limpiarlo.

Page 18: 12° sesion Usart

18

El flag de error de trama de datos, RCSTA<FERR>, es puesto si se detecta un bit de parada en estado 0 lógico (debe ser 1).

Al leer el contenido del registro RCREG, se rescata el dato recibido. Pero es muy importante que el usuario, antes de leer el RCREG, lea primero el estado de los bits RX9D y FERR del registro RCSTA, en el caso de recepción de 9 bits o para detectar un error de FERR

El flag FERR se limpia, deshabilitando el proceso de recepción, limpiando el bit RCSTA<CREN>

OJO: Si no se lee el registro RCSTA antes del RCREG, se perderán los valores correspondientes del RX9D y FERR del dato leído.

Microcontroladores PIC USART: Modo Asíncrono - ReceptorUSART: Modo Asíncrono - Receptor

Page 19: 12° sesion Usart

19

Microcontroladores PIC USART: Modo Asíncrono - Receptor/ConfiguraciónUSART: Modo Asíncrono - Receptor/Configuración

Estos son los pasos a seguir para configurar la Usart en modo Asíncrono - Receptor/Master

1 Inicializar el registro SPBRG con el valor correspondiente, de acuerdo a la velocidad de transferencia que desee

2 Habilitar el Puerto Serial Asíncrono limpiando el bit TXSTA<SYNC> y poniendo el bit RCSTA<SPEN>

3 Si se requiere interrupción por buffer lleno (RCREG), poner el bit PIE1<RCIE>

4 Si se requiere transmisión de 9 bits, poner el bit RCSTA<RX9>

5 Habilitar la recepción poniendo el bit RCSTA<CREN>.

6 El flag PIR1<RCIF> será puesto cuando una recepción esté completa y una interrupción será generada si el bit RCIE está puesto

7 Leer el registro RCSTA para obtener el noveno bit (si está habilitado) y determinar si ocurrió algún error durante la recepción.

8 Leer el dato recibido desde el registro RCREG

9 Si algún error fue detectado, limpiar los flag de error, limpiando el bit RCSTA<CREN>.

Page 20: 12° sesion Usart

20

Microcontroladores PIC USART: Modo Asíncrono - ReceptorUSART: Modo Asíncrono - Receptor