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:
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
Top Related