23.10.2014 Views

Curso de Microcontrolares Familia HC9S08 ... Artículo ... - Edudevices

Curso de Microcontrolares Familia HC9S08 ... Artículo ... - Edudevices

Curso de Microcontrolares Familia HC9S08 ... Artículo ... - Edudevices

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Curso</strong> sobre Microcontroladores<br />

<strong>Familia</strong> <strong>HC9S08</strong> <strong>de</strong> Freescale<br />

Por Ing. Daniel Di Lella – EduDevices – www.edu<strong>de</strong>vices.com.ar<br />

e-mail: info@edu<strong>de</strong>vices.com.ar<br />

Capítulo 6.-<br />

Módulo Serial Asincrónico <strong>de</strong> Comunicación<br />

- SCI - Serial Comunication Interface.<br />

El módulo SCI o UART (Universal Asynchronous Receiver Transmitter) <strong>de</strong> la familia<br />

<strong>HC9S08</strong> es muy similar al que posee la familia HC908 con algunas diferencias que<br />

mejoran su flexibilidad y configuración con respecto a esta familia.<br />

El módulo SCI <strong>de</strong> la familia <strong>HC9S08</strong> provee comunicaciones asincrónicas <strong>de</strong> alta<br />

velocidad con otros periféricos externos o MCUs. La SCI utiliza el formato full –<br />

dúplex , No Retorno a cero (NRZ) e incluye un generador <strong>de</strong> Baud Rate interno.<br />

El generador <strong>de</strong> Baud Rate no requiere <strong>de</strong> TIMER alguno <strong>de</strong>l MCU, lo que le da una<br />

total in<strong>de</strong>pen<strong>de</strong>ncia <strong>de</strong>l resto <strong>de</strong> los módulos, al igual que en la familia HC908.<br />

Muchas <strong>de</strong> las características <strong>de</strong>l SCI ayudan al diseñador a realizar comunicaciones <strong>de</strong><br />

re<strong>de</strong>s más eficientes y con gran flexibilidad <strong>de</strong> uso.<br />

La transmisión y la recepción pue<strong>de</strong>n ser habilitadas en forma in<strong>de</strong>pendiente una<br />

<strong>de</strong> otra, comparten el mismo Buad Rate y utilizan un sistema <strong>de</strong> “Doble Buffer”<br />

que le permite enviar y recibir información sin la intervención <strong>de</strong>l CPU durante<br />

todo el proceso, y solo cuando la operación es completada.<br />

El módulo SCI pue<strong>de</strong> manejarse por interrupciones y flags in<strong>de</strong>pendientes para<br />

cada situación <strong>de</strong> la comunicación, lo que le otorga al módulo una gran capacidad<br />

para realizar comunicaciones complejas en re<strong>de</strong>s multinodos con un manejo eficiente <strong>de</strong><br />

la comunicación.


Po<strong>de</strong>mos resumir las características generales <strong>de</strong>l módulo <strong>de</strong> la siguiente forma:<br />

• Formato <strong>de</strong> comunicación NRZ – Full – Dúplex.<br />

• Baud Rate programable por medio <strong>de</strong> un divisor <strong>de</strong> 13 Bits <strong>de</strong> longitud.<br />

• Sistema <strong>de</strong> “Doble – Buffer” en Recepción y Transmisión.<br />

• Manejo por Interrupciones o por encuesta (polling) <strong>de</strong> flags en las siguiente<br />

situaciones:<br />

- Transmit Data Register Empty y Transmission Complete.<br />

- Receive Data Register Full.<br />

- Indicación <strong>de</strong> errores como: Receive Overrun, Parity error, Framing error,<br />

y noise error.<br />

- Detección <strong>de</strong> Idle Receiver.<br />

- Largo <strong>de</strong> carácter programable <strong>de</strong> 8 y 9 Bits.<br />

- Generación y Chequeo <strong>de</strong> paridad por hardware.<br />

- Wake Up <strong>de</strong>l Receptor por línea IDLE o por “Address – Mark”.<br />

- Envío opcional <strong>de</strong> carácter “Break” <strong>de</strong> 13 Bits.<br />

- Polaridad programable <strong>de</strong>l transmisor.<br />

A continuación, se analizarán los distintos registros con que cuenta el módulo y algunos<br />

<strong>de</strong>talles <strong>de</strong> funcionamiento <strong>de</strong> este.<br />

SCI Data Register (SCID).<br />

Al igual que en la familia HC908, el registro <strong>de</strong> Datos <strong>de</strong>l módulo SCI posee un<br />

sistema <strong>de</strong> “Doble – Buffer” que permite leer y escribir en una misma posición física<br />

<strong>de</strong> memoria <strong>de</strong>l registro, 2 registros distintos. Cuando se lee el SCID, en realidad se está<br />

leyendo el buffer <strong>de</strong> recepción <strong>de</strong> datos, mientras cuando se escribe en el SCID, en<br />

realidad se está escribiendo en el buffer <strong>de</strong> transmisión <strong>de</strong> datos <strong>de</strong>l módulo.<br />

Tanto la lectura como la escritura provocan la limpieza automática <strong>de</strong> los flags <strong>de</strong><br />

estado <strong>de</strong>l módulo relacionado con estas operaciones.


Sistema <strong>de</strong> Doble – Buffer.<br />

Para transmitir un dato hacia el exterior, el CPU escribe el dato en el registro SCID.<br />

Tal como se vio en la familia HC908, el transmisor <strong>de</strong>l SCI incluye un shift register<br />

(registro <strong>de</strong> <strong>de</strong>splazamiento) <strong>de</strong> 11 bits para almacenar la información durante la<br />

transmisión. Esto permite al CPU escribir un carácter <strong>de</strong> dato mientras el módulo SCI<br />

está transmitiendo el carácter <strong>de</strong> dato previo. Para transmitir un dato, el CPU solamente<br />

necesita chequear si el registro <strong>de</strong> datos <strong>de</strong>l módulo (SCI Data Register) está vacío antes<br />

<strong>de</strong> escribir en el.<br />

La figura anterior, nos muestra un ejemplo típico <strong>de</strong> transmisión <strong>de</strong> datos. Asumiendo<br />

que el registro <strong>de</strong> datos SCID está vacío y que el CPU quiere transmitir un dato.<br />

Entonces, primero, el CPU escribe el carácter en el registro <strong>de</strong> datos <strong>de</strong>l SCI (SCID).<br />

Segundo, cuando el shift register está listo para aceptar el nuevo dato, el hardware <strong>de</strong>l<br />

SCI mueve en forma automática el dato <strong>de</strong>s<strong>de</strong> el registro <strong>de</strong> datos al shift register.<br />

Tercero, una vez que el dato fue movido al shift register, el módulo SCI pone un “1” en<br />

el flag “Transmit Data Register Empty” (TDRE), indicando al CPU que otro carácter<br />

pue<strong>de</strong> ser enviado. Se pue<strong>de</strong> utilizar este flag para “monitorear” el estado <strong>de</strong>l mismo o<br />

bien habilitar la interrupción correspondiente a este flag para generar un pedido <strong>de</strong><br />

interrupción cuando se presente el evento.<br />

Cuarto, los datos son enviados al exterior a la velocidad configurada por el generador <strong>de</strong><br />

Baud Rate por medio <strong>de</strong>l pin TxD.<br />

Quinto y último, una vez que el último bit es enviado al exterior, el módulo SCI pone a<br />

“1” el flag <strong>de</strong> transmisión completa (TC) y en forma opcional (si se la habilita) genera<br />

un pedido <strong>de</strong> interrupción al CPU.<br />

De igual forma, pero en sentido inverso, la sección <strong>de</strong> recepción efectúa los mismos<br />

pasos que los efectuados durante la transmisión.


Sistema <strong>de</strong> Recuperación <strong>de</strong> Datos <strong>de</strong>l SCI.<br />

El receptor <strong>de</strong>l módulo SCI incluye un sistema <strong>de</strong> recuperación <strong>de</strong> datos que muestrea y<br />

verifica el dato recibido. Este sistema es idéntico al empleado en el SCI <strong>de</strong> los<br />

HC908, por lo que se asumirá que el lector ya lo conoce en profundidad, y no es<br />

necesario ampliar el tema, si ello no fuera así, se sugiere leer con <strong>de</strong>tenimiento el <strong>Curso</strong><br />

sobre la familia HC908 y los manuales <strong>de</strong> datos <strong>de</strong> la familia <strong>HC9S08</strong> contenido en el<br />

CD ROM <strong>de</strong>l kit “EDUKIT08” y sus kits complementarios.<br />

SCI Baud Rate Generator.<br />

El generador <strong>de</strong> Baud Rate implementado en el módulo SCI <strong>de</strong> la familia <strong>HC9S08</strong>,<br />

es muy diferente al implementado en los HC908. En la figura superior, pue<strong>de</strong> verse<br />

los bloques constitutivos y las señales <strong>de</strong>l generador <strong>de</strong> Baud Rate.


Dicho generador incluye un módulo divisor <strong>de</strong> 13 Bits que pue<strong>de</strong> programarse<br />

utilizando 2 registros especiales para ello. Como el lector podrá apreciar, ya no existe el<br />

módulo <strong>de</strong> “pre – scaler” empleado por los HC908, sino que todo el conjunto <strong>de</strong> pre –<br />

scaler + bits <strong>de</strong>l divisor, han sido reemplazados por un único divisor <strong>de</strong> 13 Bits que<br />

otorga mayor flexibilidad a la hora <strong>de</strong> “ajustar” el Baud Rate buscado y hace más<br />

sencillo el cálculo final <strong>de</strong>l Baud Rate ante una frecuencia <strong>de</strong> Bus dada.<br />

La fuente <strong>de</strong> reloj (clock) para el generador <strong>de</strong> Baud Rate es el Bus Clock (FBUS).<br />

Es otra <strong>de</strong> las diferencias, ya que en el HC908 se pue<strong>de</strong> optar entre el FBUS o el<br />

CGMXCLK (4 x FBUS), pudiéndose lograr velocida<strong>de</strong>s <strong>de</strong> comunicación 4 veces<br />

mayores con solo cambiar la fuente <strong>de</strong> referencia.<br />

Para calcular el Baud Rate en el módulo SCI <strong>de</strong>l <strong>HC9S08</strong>, se <strong>de</strong>be dividir la<br />

frecuencia <strong>de</strong>l reloj <strong>de</strong> referencia (FBUS) por el valor configurado en el registro<br />

divisor <strong>de</strong> 13 Bits y a su vez, por 16, como se muestra en la figura superior.<br />

Si el lector efectúa algunos cálculos, podrá comprobar que el módulo SCI <strong>de</strong> los<br />

<strong>HC9S08</strong> no solo pue<strong>de</strong> alcanzar velocida<strong>de</strong>s <strong>de</strong> comunicación iguales o superiores<br />

al <strong>de</strong> la familia HC908, sino que también posee mayor flexibilidad para establecer<br />

velocida<strong>de</strong>s especiales o bien estándar <strong>de</strong>s<strong>de</strong> frecuencia <strong>de</strong> Bus algo particulares.<br />

La tolerancia en los <strong>de</strong>sajustes <strong>de</strong> las velocida<strong>de</strong>s <strong>de</strong> comunicación para este módulo es<br />

<strong>de</strong> +/- 4,5% para el formato <strong>de</strong> datos <strong>de</strong> 8 Bits y <strong>de</strong> +/- 4% para el formato <strong>de</strong> 9 Bits.<br />

Esta tolerancia es más que aceptable para lograr comunicaciones estables y confiables<br />

con la gran mayoría <strong>de</strong> los periféricos <strong>de</strong>l mundo real y permite que nuestro sistema se<br />

“adapte” a las diferencias <strong>de</strong> velocida<strong>de</strong>s que puedan presentarse.


Echemos un vistazo a los registros <strong>de</strong> Buad Rate SCIBDH y SCIBDL.<br />

Este registro <strong>de</strong> 13 Bits (SBR12 a SBR0) que lo llamaremos genéricamente como<br />

“BR” pue<strong>de</strong> configurarse para lograr la división requerida. Cuando BR = 0, el<br />

generador <strong>de</strong> Baud Rate es apagado para reducir el consumo <strong>de</strong> energía.<br />

Los valores posibles para el mismo son entre 1 y 8191.<br />

Para actualizar el valor contenido en los registros <strong>de</strong> Baud Rate, primero hay que<br />

escribir, el nuevo valor, en la parte más alta <strong>de</strong> dicho registro (SCIBDH) y luego en<br />

la parte más baja <strong>de</strong>l mismo (SCIBDL). El nuevo valor no tendrá efecto hasta que se<br />

escriba la parte más baja <strong>de</strong>l registro (SCIBDL).<br />

Si el lector observa el contenido <strong>de</strong> la parte baja <strong>de</strong>l registro (SCIBDL) al salir el MCU<br />

<strong>de</strong>l estado <strong>de</strong> Reset, podrá notar que el mismo es distinto <strong>de</strong> “0”, el cual indica que el<br />

generador <strong>de</strong> Baud Rate estaría habilitado. Sin embargo, luego <strong>de</strong>l reset, el generador<br />

<strong>de</strong> Baud Rate permanece <strong>de</strong>shabilitado hasta que por primera vez la sección <strong>de</strong><br />

recepción o transmisión sea habilitada.<br />

Al igual que en el HC908, la sección <strong>de</strong> recepción o transmisión pue<strong>de</strong>n ser<br />

habilitadas en forma in<strong>de</strong>pendiente por medio <strong>de</strong> los bits “RE” para recepción y<br />

“TE” para la transmisión al ponerlos a “1” en el registro SCIC2.<br />

Un ejemplo Práctico:<br />

Supongamos tener un sistema con <strong>HC9S08</strong> a una frecuencia <strong>de</strong> Bus <strong>de</strong><br />

FBUS = 4,9152Mhz y queremos obtener un Baud Rate <strong>de</strong> 19.200 BPS, por lo que<br />

<strong>de</strong>beremos configurar el Baud Rate generator con los siguientes valores:


Por lo que el Baud Rate máximo a obtener con una FBUS = 4,9152Mhz y BR = 1<br />

será <strong>de</strong>:<br />

Baud Rate Máx = 307.200 Bps<br />

Y el Baud Rate mínimo con BR = 8191 será <strong>de</strong>:<br />

Baud Rate Min. = 37,5 Bps.<br />

De este ejercicio intelectual, se <strong>de</strong>duce que la velocidad <strong>de</strong> comunicación máxima <strong>de</strong><br />

este módulo pue<strong>de</strong> superar los 1 MBPS (1.000.000 BPS ¡!!), una velocidad muy<br />

interesante para implementar re<strong>de</strong>s <strong>de</strong> alta complejidad y tráfico.<br />

Continuará.......<br />

Nota <strong>de</strong> Redacción: El lector pue<strong>de</strong> <strong>de</strong>scargar este capítulo y capítulos anteriores <strong>de</strong>l<br />

curso <strong>de</strong>s<strong>de</strong> la sección “<strong>Artículo</strong>s” (<strong>Curso</strong>_<strong>HC9S08</strong>) en el sitio web <strong>de</strong> EduDevices<br />

(www.edu<strong>de</strong>vices.com.ar )

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!