sistemas embebidos-2011 2doc-cmsis drivers & io-kharsansky uart

36
CMSIS y Drivers Perif´ ericos del LPC1768 Actividades CMSIS, Drivers para perif´ ericos y I/O Alan Kharsansky Septiembre - 2011 Alan Kharsansky CMSIS, Drivers para perif´ ericos y I/O 1 / 35

Upload: joacofelici

Post on 04-Sep-2015

228 views

Category:

Documents


1 download

DESCRIPTION

aa

TRANSCRIPT

  • CMSIS y DriversPerifericos del LPC1768

    Actividades

    CMSIS, Drivers para perifericos y I/O

    Alan Kharsansky

    Septiembre - 2011

    Alan Kharsansky CMSIS, Drivers para perifericos y I/O 1 / 35

  • CMSIS y DriversPerifericos del LPC1768

    Actividades

    Indice

    1 CMSIS y DriversIntroduccionEstructuraUtilizacionEjemplo

    2 Perifericos del LPC1768Configuracion de pines

    3 ActividadesActividad Nro 1 - UART EchoActividad Nro 2 - UART con ADCActividad Nro 3 - UART con Maquinas de Estado

    Alan Kharsansky CMSIS, Drivers para perifericos y I/O 2 / 35

  • CMSIS y DriversPerifericos del LPC1768

    Actividades

    IntroduccionEstructuraUtilizacionEjemplo

    CMSIS - Cortex Microcontroller Software InterfaceStandard

    Es un hardware abstraction layer (HAL) para los procesadoresCortex-M

    Alan Kharsansky CMSIS, Drivers para perifericos y I/O 3 / 35

  • CMSIS y DriversPerifericos del LPC1768

    Actividades

    IntroduccionEstructuraUtilizacionEjemplo

    Recursos de NXP

    NXP provee en su sitio web una biblioteca de drivers compatiblecon el CMSIS para sus perifericos.

    Website del LPC1768 Ir

    Se lo encuentra bajo el nombre:LPC17xx CMSIS-Compliant Standard Peripheral Firmware DriverLibrary (GNU, Keil, IAR)

    Alan Kharsansky CMSIS, Drivers para perifericos y I/O 4 / 35

  • CMSIS y DriversPerifericos del LPC1768

    Actividades

    IntroduccionEstructuraUtilizacionEjemplo

    Recursos de NXP

    Los archivos provistos por NXP no estan contenidos dentro de unproyecto de CodeRed por lo que se arreglo esta distribucion parapoder hacerlo. Este recurso se encuentra en el repositorio de lamateria para descargar.

    El paquete tambien original incluye un archivo de ayuda (.chm)que fue descomprimido en archivos HTML para poder hacerloportable. Este puede ser descargado del website de la materia.

    Alan Kharsansky CMSIS, Drivers para perifericos y I/O 5 / 35

  • CMSIS y DriversPerifericos del LPC1768

    Actividades

    IntroduccionEstructuraUtilizacionEjemplo

    Estructura del paquete

    El proyecto esta estructurado de la siguiente forma:

    CoreCM3

    CoreSupportDeviceSupport

    DocumentationDSP Lib

    Drivers

    Examples

    Alan Kharsansky CMSIS, Drivers para perifericos y I/O 6 / 35

  • CMSIS y DriversPerifericos del LPC1768

    Actividades

    IntroduccionEstructuraUtilizacionEjemplo

    Utilizacion

    Para poder utilizar estas bibliotecas el proyecto se debe encontraren el mismo workspace que nuestra aplicacion. Como todo(CMSIS, Drivers y DSP Lib) se encuentra bajo el mismo proyecto,solo es necesario linkear con una sola biblioteca para su utilizacion.

    LPC17XX CMSIS Drivers

    Alan Kharsansky CMSIS, Drivers para perifericos y I/O 7 / 35

  • CMSIS y DriversPerifericos del LPC1768

    Actividades

    IntroduccionEstructuraUtilizacionEjemplo

    Inclusion

    Recordar: Se debera incluir los archivos de cabeceras (.h) que sedeseen utilizar. Por ejemplo:

    CMSIS

    #i n c l u d e LPC17xx . h

    Drivers

    #i n c l u d e l p c 1 7 x x u a r t . h#i n c l u d e l p c 1 7 x x g p i o . h

    DSP

    #i n c l u d e arm math . h

    Alan Kharsansky CMSIS, Drivers para perifericos y I/O 8 / 35

  • CMSIS y DriversPerifericos del LPC1768

    Actividades

    IntroduccionEstructuraUtilizacionEjemplo

    Un ejemplo - Blinky con Drivers

    #i f d e f USE CMSIS#i n c l u d e LPC17xx . h#e n d i f

    #i n c l u d e l p c 1 7 x x g p i o . h

    i n t main ( v o i d ) {GPIO SetDir (0 ,(1

  • CMSIS y DriversPerifericos del LPC1768

    ActividadesConfiguracion de pines

    Configuracion de pines. El PINSEL

    Muchos de los pines externos que posee el encapsulado delLPC1768 pueden cumplir varias funciones diferentes. Pueden serdigitales, analogicos, de comunicacion, etc.

    Tambien pueden tener activados Pull-Ups o Pull-Down y otrasdiferentes caractersticas. Es por eso que debemos antes de usarcualquier pin, configurarlo para cumpla con la funcion que nosotrosbuscamos.

    Alan Kharsansky CMSIS, Drivers para perifericos y I/O 10 / 35

  • CMSIS y DriversPerifericos del LPC1768

    ActividadesConfiguracion de pines

    Configuracion de pines. El PINSEL

    Para poder seleccionar la funcin de cada pin, se incluyen losregistros PINSELn. Estos registros permiten seleccionar (de a 2bits) la funcion del pin. Siendo posibles las siguientes opciones:

    Alan Kharsansky CMSIS, Drivers para perifericos y I/O 11 / 35

  • CMSIS y DriversPerifericos del LPC1768

    ActividadesConfiguracion de pines

    Configuracion de pines. El PINMODE

    Los registros PINMODEn nos permiten configurar elcomportamiento electrico de los pines. Siendo los posibles valores:

    Tamben existe un registro PINMODE OD que permite configurar el

    funcionamiento o no como Open Drain.

    Alan Kharsansky CMSIS, Drivers para perifericos y I/O 12 / 35

  • CMSIS y DriversPerifericos del LPC1768

    ActividadesConfiguracion de pines

    Configuracion de pines. Ejemplo

    Se puede encontrar en el manual de usuario del microcontroladoruna tabla que resumen los distintos campos para un registroPINSEL. Por ejemplo:

    Alan Kharsansky CMSIS, Drivers para perifericos y I/O 13 / 35

  • CMSIS y DriversPerifericos del LPC1768

    ActividadesConfiguracion de pines

    Configuracion de pines. Uso

    Para facilitar la configuracion de los distintos pines delmicrocontrolador se puede utilizar uno de los drivers que proveeNXP: lpc17xx pinsel.h. La funcion que vamos a utilizar tiene elsiguiente prototipo:

    v o i d PINSEL Conf igPin ( PINSEL CFG Type PinCfg ) ;

    Alan Kharsansky CMSIS, Drivers para perifericos y I/O 14 / 35

  • CMSIS y DriversPerifericos del LPC1768

    ActividadesConfiguracion de pines

    Configuracion de pines. Uso

    El tipo de dato que hay que pasarle es una estructura deconfiguracion. Esta esta compuesta por:

    Portnum = PINSEL PORT x (x:0-3)

    Pinnum = PINSEL PIN x (x:0-31)

    Funcnum = PINSEL FUNC x (x:0-3)

    Pinmode = Pullup, Pulldown o TriState

    OpenDrain = Normal u Open Drain

    Alan Kharsansky CMSIS, Drivers para perifericos y I/O 15 / 35

  • CMSIS y DriversPerifericos del LPC1768

    ActividadesConfiguracion de pines

    Configuracion de pines. Ejemplo

    Si se desea configurar los pines 0 y 1 del Port 0 para que estenconectados a las lineas de Tx y Rx de la UART3, podemos hacer losiguiente:

    PINSEL CFG Type PinCfg ;

    PinCfg . Funcnum = PINSEL FUNC 2 ;PinCfg . OpenDrain = PINSEL PINMODE NORMAL ;PinCfg . Pinmode = PINSEL PINMODE PULLUP ;PinCfg . Pinnum = PINSEL PIN 0 ;PinCfg . Portnum = PINSEL PORT 0 ;

    PINSEL Conf igPin (& PinCfg ) ;

    PinCfg . Pinnum = PINSEL PIN 1 ;

    PINSEL Conf igPin (& PinCfg ) ;

    Alan Kharsansky CMSIS, Drivers para perifericos y I/O 16 / 35

  • CMSIS y DriversPerifericos del LPC1768

    Actividades

    Actividad Nro 1 - UART EchoActividad Nro 2 - UART con ADCActividad Nro 3 - UART con Maquinas de Estado

    Actividad Nro 1 - Consigna

    Se desea hacer un programa que permita utilizar alguna de lasUARTs que trae el LPC1768. Para ello realizaremos un programaque:

    Configure la UART en: 115200-8-N-1

    Envie un mensaje de bienvenida al encender

    Espere un caracter nuevo y lo repita por la salida (modoECHO)

    Puede ver el ejercicio completo en el workspace de esta clase

    Alan Kharsansky CMSIS, Drivers para perifericos y I/O 17 / 35

  • CMSIS y DriversPerifericos del LPC1768

    Actividades

    Actividad Nro 1 - UART EchoActividad Nro 2 - UART con ADCActividad Nro 3 - UART con Maquinas de Estado

    Alan Kharsansky CMSIS, Drivers para perifericos y I/O 18 / 35

  • CMSIS y DriversPerifericos del LPC1768

    Actividades

    Actividad Nro 1 - UART EchoActividad Nro 2 - UART con ADCActividad Nro 3 - UART con Maquinas de Estado

    Actividad Nro 1 - Tips

    Las siguiente funciones deben ser utilizadas para inicializarcorrectamente el periferico:

    // Conf iguramos l a UARTUARTConfigStruct . B a u d r a t e = 115200;UARTConfigStruct . D a t a b i t s = UART DATABIT 8 ;UARTConfigStruct . P a r i t y = UART PARITY NONE ;UARTConfigStruct . S t o p b i t s = UART STOPBIT 1 ;

    // I n i c i a l i z am o s l a UARTUART Init (LPC UART3 , &UARTConfigStruct ) ;UART TxCmd(LPC UART3 , ENABLE ) ;

    Alan Kharsansky CMSIS, Drivers para perifericos y I/O 18 / 35

  • CMSIS y DriversPerifericos del LPC1768

    Actividades

    Actividad Nro 1 - UART EchoActividad Nro 2 - UART con ADCActividad Nro 3 - UART con Maquinas de Estado

    Actividad Nro 1 - Tips

    Y para enviar y recibir podemos utilizar:

    UART SendByte (LPC UART3 , c ) ;

    UART Send (LPC UART3 , msg , s t r l e n ( msg ) , BLOCKING ) ;

    b u f f = UART ReceiveByte (LPC UART3 ) ;

    Alan Kharsansky CMSIS, Drivers para perifericos y I/O 19 / 35

  • CMSIS y DriversPerifericos del LPC1768

    Actividades

    Actividad Nro 1 - UART EchoActividad Nro 2 - UART con ADCActividad Nro 3 - UART con Maquinas de Estado

    Actividad Nro 1 - Adicional

    Se propone utilizar interrupciones para recibir los datos en vez dehacerlo en el programa principal. Para poder realizarlo se debenmodificar 2 cosas:

    Activar la interrupcion tanto en el periferico como en el NVIC

    Escribir un handler que reciba los datos y los reenvie

    Alan Kharsansky CMSIS, Drivers para perifericos y I/O 20 / 35

  • CMSIS y DriversPerifericos del LPC1768

    Actividades

    Actividad Nro 1 - UART EchoActividad Nro 2 - UART con ADCActividad Nro 3 - UART con Maquinas de Estado

    Actividad Nro 1 - Adicional

    Para poder activar la interrupcion usamos el siguiente codigo:

    // Hab i l i t amos l a i n t e r r u p c i n de r e c e p c i n de l a UARTUART IntConf ig (LPC UART3 , UART INTCFG RBR , ENABLE ) ;

    // Hab i l i t amos l a i n t e r r u p c i n de l a UART3 en e l NVICNVIC EnableIRQ ( UART3 IRQn ) ;

    Alan Kharsansky CMSIS, Drivers para perifericos y I/O 21 / 35

  • CMSIS y DriversPerifericos del LPC1768

    Actividades

    Actividad Nro 1 - UART EchoActividad Nro 2 - UART con ADCActividad Nro 3 - UART con Maquinas de Estado

    Actividad Nro 1 - Adicional

    El handler podra tener la siguiente forma:

    v o i d UART3 IRQHandler ( v o i d ){

    char c ;// Leo un dato nuevoc = UART ReceiveByte (LPC UART3 ) ;

    // Env io e l dato l e i d oUART SendByte (LPC UART3 , c ) ;

    }

    Cuidado: El handler es llamado cuando ocurre alguna interrupcion en el

    modulo de UART3 como por ejemplo, Tx buffer vacio, un nuevo dato para

    leer, una linea de control cambio su valor, etc. Por que en este caso no

    debemos asegurarnos de donde vino la interrupcion?

    Alan Kharsansky CMSIS, Drivers para perifericos y I/O 22 / 35

  • CMSIS y DriversPerifericos del LPC1768

    Actividades

    Actividad Nro 1 - UART EchoActividad Nro 2 - UART con ADCActividad Nro 3 - UART con Maquinas de Estado

    Actividad Nro 2 - UART con ADC

    Se desea hacer un programa que permita enviar el valor de un canalanalogico por la UART (utilizando el ADC). Para eso debemos:

    Configurar los pines para que use la funcion analogica

    Configurar el conversor A/D

    Tomar una muestra y enviarla

    Alan Kharsansky CMSIS, Drivers para perifericos y I/O 23 / 35

  • CMSIS y DriversPerifericos del LPC1768

    Actividades

    Actividad Nro 1 - UART EchoActividad Nro 2 - UART con ADCActividad Nro 3 - UART con Maquinas de Estado

    Actividad Nro 2 - UART con ADC

    Utilizaremos el trimpot que esta en el BaseBoard. El mismo estaconectado al pin GPIO0.23 que corresponde al canal analogicoAD0. Para encender la UART debemos utilizar el siguiente codigo:

    ADC In i t (LPC ADC , 2 0 0 0 0 0 ) ;ADC IntConf ig (LPC ADC , ADC ADINTEN0 , DISABLE ) ;ADC ChannelCmd (LPC ADC , ADC CHANNEL 0 , ENABLE ) ;

    Alan Kharsansky CMSIS, Drivers para perifericos y I/O 24 / 35

  • CMSIS y DriversPerifericos del LPC1768

    Actividades

    Actividad Nro 1 - UART EchoActividad Nro 2 - UART con ADCActividad Nro 3 - UART con Maquinas de Estado

    Actividad Nro 2 - UART con ADC

    Para convertir un dato y luego leerlo debemos utilizar siguientecodigo:

    // S t a r t c o n v e r s i o nADC StartCmd (LPC ADC , ADC START NOW ) ;

    //Wait c o n v e r s i o n completew h i l e ( ! ( ADC ChannelGetStatus (LPC ADC , ADC CHANNEL 0 ,

    ADC DATA DONE ) ) ) ;

    // Read the v a l u ea d c v a l u e = ADC ChannelGetData (LPC ADC , ADC CHANNEL 0 ) ;

    Alan Kharsansky CMSIS, Drivers para perifericos y I/O 25 / 35

  • CMSIS y DriversPerifericos del LPC1768

    Actividades

    Actividad Nro 1 - UART EchoActividad Nro 2 - UART con ADCActividad Nro 3 - UART con Maquinas de Estado

    Actividad Nro 3 - UART con Maquinas de Estado

    Se desea hacer un programa que permita recibir datos por unaUART y dependiendo del estado en que se encuentre realizardiferentes acciones con los datos recibidos. Para ello se utilizara elsiguiente diagrama de estados:

    Alan Kharsansky CMSIS, Drivers para perifericos y I/O 26 / 35

  • CMSIS y DriversPerifericos del LPC1768

    Actividades

    Actividad Nro 1 - UART EchoActividad Nro 2 - UART con ADCActividad Nro 3 - UART con Maquinas de Estado

    Diagrama de estados

    Alan Kharsansky CMSIS, Drivers para perifericos y I/O 27 / 35

  • CMSIS y DriversPerifericos del LPC1768

    Actividades

    Actividad Nro 1 - UART EchoActividad Nro 2 - UART con ADCActividad Nro 3 - UART con Maquinas de Estado

    Diagrama de estados - MODO NORMAL

    Este modo espa el ultimo caracter recibido que luego seinterpretan como comandos. Se definen los comandos:

    1: Muestro todo lo que hay guardado en el buffer

    2: Vacio el buffer

    3: Cambio a modo ECHO

    4: Cambio a modo ASCII

    5: Cambio a modo CASE

    Alan Kharsansky CMSIS, Drivers para perifericos y I/O 28 / 35

  • CMSIS y DriversPerifericos del LPC1768

    Actividades

    Actividad Nro 1 - UART EchoActividad Nro 2 - UART con ADCActividad Nro 3 - UART con Maquinas de Estado

    Diagrama de estados - MODO ECHO

    En este modo todo lo que se recibe por Rx se repite por Tx

    Para salir del modo se debe volver a enviar el numero 3

    Alan Kharsansky CMSIS, Drivers para perifericos y I/O 29 / 35

  • CMSIS y DriversPerifericos del LPC1768

    Actividades

    Actividad Nro 1 - UART EchoActividad Nro 2 - UART con ADCActividad Nro 3 - UART con Maquinas de Estado

    Diagrama de estados - MODO ASCII

    Los caracteres recibidos se mostran de la siguiente manera:

    Si son no imprimibles (0x20) se muestra su nombre. Porejemplo: EOL

    Si son imprimibles, se muestra su numero Hexa. Por ejemplo,si se recibe una a se debera enviar 0x61

    Para salir del modo se debe volver a enviar el numero 4

    Alan Kharsansky CMSIS, Drivers para perifericos y I/O 30 / 35

  • CMSIS y DriversPerifericos del LPC1768

    Actividades

    Actividad Nro 1 - UART EchoActividad Nro 2 - UART con ADCActividad Nro 3 - UART con Maquinas de Estado

    Diagrama de estados - MODO CASE

    En este modo, todos los caracteres alfabeticos que se reciban porRx en minusculas se deben enviar por Tx en mayusculas y viceversa

    Para salir del modo se debe volver a enviar el numero 5

    Alan Kharsansky CMSIS, Drivers para perifericos y I/O 31 / 35

  • CMSIS y DriversPerifericos del LPC1768

    Actividades

    Actividad Nro 1 - UART EchoActividad Nro 2 - UART con ADCActividad Nro 3 - UART con Maquinas de Estado

    Consideraciones generales

    La recepcion de datos se debe hacer de forma asincronica. Esdecir, manejada por interrupciones.

    Como la rutina de interrupcion debera ser lo mas corta posible, losdatos se almacenaran en una buffer y luego seran procesados por elloop principal.

    Alan Kharsansky CMSIS, Drivers para perifericos y I/O 32 / 35

  • CMSIS y DriversPerifericos del LPC1768

    Actividades

    Actividad Nro 1 - UART EchoActividad Nro 2 - UART con ADCActividad Nro 3 - UART con Maquinas de Estado

    Solucion a la actividad

    i f ( c= a ) && ( c=A ) && ( c

  • CMSIS y DriversPerifericos del LPC1768

    Actividades

    Actividad Nro 1 - UART EchoActividad Nro 2 - UART con ADCActividad Nro 3 - UART con Maquinas de Estado

    Dudas? Consultas?

    Cualquier comentario o consulta lo pueden hacer a la lista delgrupo:

    [email protected]

    Alan Kharsansky CMSIS, Drivers para perifericos y I/O 34 / 35

  • CMSIS y DriversPerifericos del LPC1768

    Actividades

    Actividad Nro 1 - UART EchoActividad Nro 2 - UART con ADCActividad Nro 3 - UART con Maquinas de Estado

    Muchas gracias

    Alan Kharsansky CMSIS, Drivers para perifericos y I/O 35 / 35

    CMSIS y DriversIntroduccinEstructuraUtilizacinEjemplo

    Perifricos del LPC1768Configuracin de pines

    ActividadesActividad Nro 1 - UART EchoActividad Nro 2 - UART con ADCActividad Nro 3 - UART con Maquinas de Estado