viernes, 28 de agosto de 2015

PUERTO SERIE


INTRODUCCIÓN.
En esta práctica se va a explicar cómo utilizar el puerto de comunicación serial de la tarjeta FRDM K64F de Freescale, primero se va a explicar cómo trabaja el puerto serial de acuerdo  a la información encontrada en el manual de referencia “K64 Sub-Family Reference Manual”, el Manual de referencia rápida “Kinetis Peripheral Module Quick Reference” y el manual de referencia para Kinetis SDK 1.1 V 1.2 “Kinetis SDK v.1.2 API Reference Manual “ los cuales se encuentran en la página oficial de Freescale  Freescale.com/FRDM-K64F.
“Universal Asynchronous Receiver and Transmitter (UART) Module” El módulo de la familia de dispositivos Kinetis soporta comunicación serial asíncrona con dispositivos periféricos u otros CPUs. El módulo UART tiene tres modos principales de operación: UART, IrDA, y ISO-7816.
En la práctica se va a trabajar con el modo UART, como si fuera comunicación por un puerto serial RS-232. El controlador (Driver) periférico de datos del UART permite transferir o recibir datos de otros dispositivos, por medio de un bus serial con sólo llamar una función.
El Diver utiliza estructura para el dispositivo UART de tipo uart_state_t para mantener activo y corriendo el estado de una instancia del módulo del driver del UART. Esto quiere decir que la estructura mantiene los datos que son usados por el Driver periférico del UART para comunicarse entre el transmisor y el receptor, recibir funciones de transferencia o interrupciones. Las interrupciones utilizan la información obtenida por el Driver periférico para saber su progreso.
Las estructuras de configuración de usuario del UART son de tipo uart_user_config_t. Estas habilitan la configuración de la mayoría de las opciones más comunes para configurar el UART, con sólo llamar una función. Las configuraciones más comunes son:
  • UART baud rate: Des habilitada (por defecto).
  • UART parity mode: Des habilitada (por defecto).
  • Number of stop bits.
  • Number of bits per data Word.
Inicialización del módulo UART.
  1. Para inicializar el Driver del UART, se llama a la función UART_DRV_INIT() , como “Procesor Expert” pone el argumento que en este caso es el número del periférico del UART utilizado,  el segundo argumento es la memoria para el estado de la estructura “run-time”.
  2. Una vez que transfiere la memoria para la estructura “run-time”, el tercer argumento de la función de inicialización es la dirección de la configuración de usuario uart_user_config_t.
  3. Este es un ejemplo de cómo inicializar el Driver:
UART_DRV_Init(uartInstance, &uartConfig, &uartState);
Una configuración de usuario básica puede ser la siguiente:
uart_user_config_t uartConfig;
uartConfig.baudRate = 9600;
uartConfig.bitCountPerChar = kUart8BitsPerChar;
uartConfig.parityMode = kUartParityDisabled;
uartConfig.stopBitCount = kUartOneStopBit;
DESARROLLO DE LA PRÁCTICA.
El objetivo de la práctica es: Configurar el módulo UART para enviar y recibir mensajes por medio de la terminal “Cool Term”, utilizando “Kinetis Design Studio” y “Procesor Expert”.
Desarrollo Parte 1.
Creamos un proyecto nuevo en KDS, seleccionando como tarjeta a utilizar “FRDM K64F”, habilitando la opción para utilizar Procesor Expert.
Desarrollo Parte 2.
Agregamos al proyecto Nuevo el periférico de comunicación para el UART: fsl_uart de la librería de componentes en la vista por categorías la dirección: (KSDK1.2.0\Peripherial Drivers/Hal\Communication\). Como se muestra en la figura 1.
Figura 1. “Agregar componente fsl_uart de la librería de componentes”
Una vez que se tiene el componente en el proyecto se procede a su configuración, en la ventana “Component Inspector”, como se muestra en la figura 2. Procesor Expert (PE) configura la mayoría de los parámetros, en este caso llama al componente “uartCom1” y el dispositivo es “UART0” en el modo del componente  PE pone por defecto “interrupt mode” ya que el otro modo es DMA, pero no será utilizado.
En la configuración del dispositivo se tiene el tipo de estructura definido en la introducción de esta práctica y como nombre PE asigna “uartCom1_InitConfig0”, Es importante porque al iniciar el Driver del UART un argumento será la dirección del nombre de la configuración. PE pide que ingresemos el parámetro “Baud rate” que es la velocidad a la cual se estará comunicando el módulo UART, hay que recordar que como es una comunicación asíncrona debemos configurar la velocidad en los dispositivos en los cuales se establecerá comunicación, en este caso en la tarjeta en la teminal "Cool Term", más adelante se mostrará como configurar la velocidad en esta.
Los otros dos parámetros los establece por defecto PE, el modo de comunicación Por paridad “Parity mode” des habilitado, y los bits por palabra los establece en 8.



Figura 2. “Configuración del Módulo UART”
Lo siguiente en la configuración son los pines que se van a utilizar para recibir o transmitir datos (RX/TX), éstos pines son los que están relacionados al UART0, FIGURA 3, se muestran los pines que están conectados al módulo UART0.
Figura 3. “Pines del Módulo UART0 para Transmisión y Recepción de Datos”
En la Configuración de Pins/Signals escribimos los pines de acuerdo a los mostrados en la figura 4, dichos pines son el PTA15 (UART0_RX), y el PTA14 (UART0_TX)

Figura 4. “Configuración de Pines Para Transmisión y recepción de datos”
En la parte de la inicialización se selecciona “Auto initialization”, y PE automáticamente activará las opciones Rx/Tx Callback.
Figura 5. “Inicialización del periférico UART0”
Posterior a la configuración se genera el código en el proyecto y posteriormente se procede a la programación.
Como Ejemplo se realizará un programa en el cual se enviará un mensaje al microcontrolador por medio de un mensaje en la terminal “Cool Term”, y éste responda con un mensaje “Aleatorio”, el programa utilizará la función de envío y recepción de datos sin utilizar un método de bloqueo de datos.

Figura 6. “Diagrama de Flujo de programación para envío y transmisión de datos.”
En la Figura 7  se muestra como se declaró el arreglo de cadenas de caracteres por medio de un apuntador, cada cadena de caracteres es una respuesta obtenida al enviar un mensaje por medio de la terminal “Cool Term”.
Figura 7. “Declaración de un arreglo de cadenas de caracteres.”
La declaración de las variables locales se muestra en la figura 8, como se observa la variable error tiene que ser tipo “uart_status_t” ya que ahí almacenaremos la condición de que el mensaje se ha recibido correctamente.
Figura 8. “Declaración de variables locales”
La figura 9 muestra el programa principal, dentro de éste, primero se lleva un conteo de n desde 0 hasta 4 que es el número de mensajes que se tienen para responder declarados al inicio del programa, posteriormente se asigna a la variable error  el estado de la recepción de los datos, en caso de ser correcta la recepción, se prosigue a enviar una respuesta por medio del arreglo de cadena de caracteres en la posición “n”. y cómo n es un número que está cambiando a la velocidad que está corriendo el programa (velocidad de frecuencia de reloj interno del microcontrolador) no se tiene un control sobre el mensaje que se va a recibir por eso al inicio se dijo que era un mensaje de respuesta “aleatorio”.
Figura 9. “Programa Principal”

En el programa “Cool Term” configuramos la velocidad de comunicación, el tamaño de la palabra de bits a transmitir, la paridad y el bit de paro, con los mismos parámetros que se configuró el periférico del UART, una observación es que por defecto pone el puerto, este puerto es dependiendo el driver que tenga instalado la tarjeta (Jlink Segger, PE Micro ó Open SD Debugging) el sistema de la PC va  a reconocer a la tarjeta como si estuviera conectado en un puerto serial, (En la figura 10 cómo ve el sistema a la tarjeta conectada en un puerto serie.)
Figura 10. “Configuraciones de Cool Term”
En la figura 11 se muestra cómo se ven los dispositivos conectados a la computadora PC. (Panel de control-> Administrador de dispositivos), en puertos (COM y LPT) se muestra un dispositivo llamado Jlink CDC UART Port (COM3), que es el Driver que se cargó previamente a la tarjeta, y el cual indica que existe una tarjeta conectada a la PC en el puerto serial COM3, se dice serial debido al Driver que se cargó pero físicamente está conectada por USB.
Figura 11. “Administrador de dispositivos de Windows”
Resultados del Programa.
La terminal Cool Term permite enviar mensajes al Microcontrolador por medio del puerto al que se encuentra conectado, una de las ventajas es que podemos recibir los mensajes que envía el micro en la misma interfaz, de esta manera podemos comprobar que exista comunicación serial en tiempo real con el microcontrolador, la Figura 12 muestra cómo se ven los mensajes una vez que el programa está cargado y en modo “run”.


Figura 12. “Entorno de la Interfaz Cool Term”
Como se observa en la figura 12 el botón CONECT debe estar marcado para poder mantener comunicación con la tarjeta, además cada vez que se está escribiendo se encienden los “LEDS” TX o cuando se recibe “RX”, de esta manera se puede obtener información de alguna aplicación por medio de comunicación serial, este es un ejemplo de cómo enviar y recibir mensajes, pero se puede estar monitoreando el valor de una variable, o incluso modificar su valor sólo habría que hacer una conversión ASCII.

Proyecto de la práctica:

https://www.dropbox.com/sh/is2geo6qjnvavwf/AAAjKt_1g1WcFQHdjwgrDHmOa?dl=0

No hay comentarios:

Publicar un comentario