Top Banner

of 76

lpc2148 español apunte

Jul 14, 2015

Download

Documents

Marcelo Visalla
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript

Ponticia Universidad Catlica de Valpara o so Escuela de Ingenier Elctrica a e Laboratorio de Sistemas Electrnicos o e Instrumentacin o

Apuntes del Taller de Microcontroladores ARM7TDMI LPC2148Profesor Moiss Reyes Pardo e

Alumnos Agust Valencia Gonzlez n a Camila Berr Miranda os Claudio Carre o Bonilla n Apuntes preparados por

Agust Valencia Gonzlez n aValpara Octubre de 2011 so, www.labsei.ucv.cl

Resumen Para salvaguardar los conocimientos adquiridos en el taller de programacin o de microcontroladores ARM7TDMI al que se asisti recientemente, se presentan o a continuacin apuntes de las charlas y experiencias realizadas con la mayor o profundidad posible dentro de lo que permite la complejidad de la temtica. a Esperamos que los cap tulos siguientes sirvan como material de apoyo para futuras investigaciones realizadas por ayudantes del LABSEI, en prximos o desarrollos de proyectistas que decidan usar la plataforma disponible en el laboratorio o a quien disponga de ella y desee iniciarse en el uso de esta tecnolog a. El objetivo de estos apuntes no es entregar profundos fundamentos sobre la estructura del microcontrolador (para formar un experto en la materia), sino explicar en forma simple el uso de los mdulos ms comunes, esos que pueden o a encontrarse en cualquier microcontrolador contemporneo y que tambin estn a e a presentes en el LPC2148, ya que debido a su velocidad y potencia de clculo, lo a hacen comparativamente superior a sus semejantes en estos mbitos, sin olvidar a que las aplicaciones de este procesador van ms all de las que se explicitarn a a a ac, fundamentalmente en las que usan RTOS (Sistemas Operativos en Tiempo a Real) en sistemas embebidos. Todas las experiencias fueron realizadas con el IDE CrossWorksfor ARM en C/C++, y posteriormente implementados en la tarjeta de desarrollo LPC-P2148 Prototypefor LPC2148 ARM7TDMI-S Microcontroller de Olimex a travs del e programador JTAG Olimex ARM-USB-OCD.

Indice general1. Conceptos Generales 1.1. Comentarios Preliminares . . . . . . . . . . . . . . . . . . . . . . 1.2. Historia, Licenciamiento y Aseguracin de Proveedores y Desao rrolladores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3. Evolucin histrica sobre la arquitectura de ARM . . . . . . . . . o o 1.4. Prestaciones de Arquitectura RISC y Pipelinening . . . . . . . . 1.5. Comparativo con procesadores contemporneos . . . . . . . . . . a 2. Gestin de entradas y salidas digitales o 2.1. Registro IODIR . . . . . . . . . . . . . . . . . . . . . . 2.1.1. Ejemplo Asignacin IODIR . . . . . . . . . . . o 2.2. Registros IOSET y IOCLR . . . . . . . . . . . . . . . 2.2.1. IOSET . . . . . . . . . . . . . . . . . . . . . . 2.2.2. IOCLR . . . . . . . . . . . . . . . . . . . . . . 2.3. Registro IOPIN . . . . . . . . . . . . . . . . . . . . . . 2.4. Aplicacin Prctica . . . . . . . . . . . . . . . . . . . . o a 2.5. Cargar un programa al LPC2148 mediante Crossworks 2.6. Debug en Crossworks . . . . . . . . . . . . . . . . . . . 3. Interrupciones Externas 3.1. CTL SET ISR . . . . . . . . . . . . . . 3.1.1. Vector . . . . . . . . . . . . . . . 3.1.2. Prioridad . . . . . . . . . . . . . 3.1.3. Disparo . . . . . . . . . . . . . . 3.1.4. Funcin . . . . . . . . . . . . . . o 3.2. Sintaxis para el uso de Interrupciones en 3.3. PINSEL . . . . . . . . . . . . . . . . . . 3.4. Limpiar Flag Interrupcin Externa . . . o 3.5. Aplicacin Prctica . . . . . . . . . . . . o a 5 5 6 7 7 9 10 10 10 11 11 11 12 12 14 15 17 17 17 18 18 18 18 19 19 20

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . CrossWorks . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

4. PLL y Clocks en el Sistema 25 4.1. Diagrama de Clocks . . . . . . . . . . . . . . . . . . . . . . . . . 25 4.2. Registros para la Conguracin . . . . . . . . . . . . . . . . . . . 26 o 4.2.1. PLLCON . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

2

INDICE GENERAL

3

4.2.2. PLLCFG . 4.2.3. PLLSTAT . 4.2.4. PLOCK . . 4.2.5. PLLFEED 4.2.6. VPBDIV . 4.3. Aplicacin Prctica o a

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

26 28 28 28 29 29 33 33 33 33 34 34 34 34 35 35 39 39 39 39 39 40 40 40 40 40 41 41 41 41 42 42 42 43 43 49 49 49 49 50 50 50 50

5. Conguraciones e Interrupciones de Timer/Counter 5.1. Descripcin . . . . . . . . . . . . . . . . . . . . . . . . o 5.2. Registros Asociados . . . . . . . . . . . . . . . . . . . 5.2.1. TCR . . . . . . . . . . . . . . . . . . . . . . . . 5.2.2. IR . . . . . . . . . . . . . . . . . . . . . . . . . 5.2.3. TC . . . . . . . . . . . . . . . . . . . . . . . . . 5.2.4. PR y PC . . . . . . . . . . . . . . . . . . . . . 5.2.5. MR . . . . . . . . . . . . . . . . . . . . . . . . 5.2.6. MCR . . . . . . . . . . . . . . . . . . . . . . . 5.3. Aplicacin Prctica . . . . . . . . . . . . . . . . . . . . o a 6. Conversor Anlogo Digital a 6.1. Caracter sticas . . . . . . . . . 6.2. Registro ADCR . . . . . . . . . 6.2.1. < 0 : 7 > SEL . . . . . . 6.2.2. < 8 : 15 > CLKDIV . . 6.2.3. < 16 > BURST . . . . . 6.2.4. < 17 : 19 > CLKS . . . 6.2.5. Bit < 20 > . . . . . . . 6.2.6. < 21 > PDN . . . . . . 6.2.7. Bits < 22 : 23 > . . . . 6.2.8. < 24 : 26 > START . . 6.2.9. < 25 > EDGE . . . . . 6.2.10. Bits < 28 : 31 > . . . . 6.3. ADxDRy . . . . . . . . . . . . 6.4. PCONP . . . . . . . . . . . . . 6.5. Cdigos Recomendados . . . . o 6.5.1. Rutina de Inicializacin o 6.5.2. Rutina de Conversin . o 6.6. Aplicacin Prctica . . . . . . . o a 7. Comunicacin Serial o 7.1. Descripcin . . . . . . . o 7.2. Registros Asociados . . 7.2.1. UTHR . . . . . . 7.2.2. URBR . . . . . . 7.2.3. UDLL y UDLM 7.2.4. UFDR . . . . . . 7.2.5. UFCR . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

INDICE GENERAL

4

7.3. 7.4. 7.5. 7.6. 7.7.

7.2.6. ULCR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2.7. ULSR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Clculo y conguracin del Baud Rate . . . . . . . . . . . . . . . a o 7.3.1. Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . Interrupciones de Puerta Serial . . . . . . . . . . . . . . . . . . . Env de datos a bajo nivel, un acercamiento prctico a la estruco a tura del UART . . . . . . . . . . . . . . . . . . . . . . . . . . . . Printf, Putchar y Getchar . . . . . . . . . . . . . . . . . . . . . . Aplicacin Prctica . . . . . . . . . . . . . . . . . . . . . . . . . . o a 7.7.1. Ejercicio: Escritura de bajo nivel en la puerta serial . . . 7.7.2. Ejercicio: Lectura/Escritura con PUTCHAR y GETCHAR

51 52 53 54 55 56 58 59 59 62

A. Instalacin del paquete para la familia LPC2000 y conguracin o o del Programador 67 B. Creacin de un Proyecto en Crossworks o 69

Cap tulo 1

Conceptos Generales1.1. Comentarios Preliminares

Para el desarrollo de este taller se asume cierta experiencia bsica en el a trabajo con microcontroladores y su programacin en lenguaje C. Es necesario o comprender sentencias de operaciones lgicas, de concatenacin, de desplazao o miento y asignacin de valores, tanto a nivel de registros como de bits, dominio o de sistemas numricos decimal, binario y hexadecimal y sus respectivos cambios e de base, conceptos bsicos sobre interrupciones y la forma en que un procesador a las atiende, funcionamiento de un PLL, timer y contadores, conocimientos sobre el funcionamiento y uso de un conversor anlogo/digital e implementacin de a o protocolos de comunicacin serial. o El trabajo se fundamenta en el manual citado como referencia [1] en la bibliograf cuya redaccin es en ingls tcnico, por lo que es necesario poder a, o e e leer e interpretar un manual en dicho idioma. Estos apuntes constituyen una s ntesis de tal manual en las temticas que se abordan, adems de sugerencias a a y consejos obtenidos del trabajo prctico. a Si bien no se aborda el uso del 100 % de los recursos del microcontrolador, dejando fuera por ejemplo el conversor digital/anlogo, lector de memorias SD, a SPI, I2C, pipelinening, Mdulo Acelerador de Memoria, etc., se entrega la inforo macin necesaria para que el lector pueda acceder a las referencias y entender o la losof de trabajo al desarrollar aplicaciones sobre una plataforma basada a en un ncleo ARM. u El autor de este documento no se reserva ningn tipo de derechos sobre l, u e por lo que el lector posee completa libertad de distribuirlo, copiarlo y modiA carlo. Para mayor informacin puede solicitar las fuentes en lenguaje L TEXdel o mismo.

5

CAP ITULO 1. CONCEPTOS GENERALES

6

1.2.

Historia, Licenciamiento y Aseguracin de o Proveedores y Desarrolladores

En 1985 Acorn Computer Group, desarrolla ARM -Advanced Risc Machinebasndose en el MOS6502 y continuando con la losof RISC1 , lanza en 1986 el a a ARM2, que podr considerarse el procesador de 32 bits ms simple del mundo a a con tan slo 30.000 transistores. o A nales de los 80, Apple Computer comienza a trabajar con Acorn para el desarrollo de nuevos ncleos de ARM. En Acorn se dieron cuenta que el hecho de u que el fabricante de un procesador fuese tambin un fabricante de computadores e podr tener resultados en desmedro de los clientes, por lo que se decidi crear a o una nueva compa llamada Advanced RISC Machines, que ser la encargada na a del diseo y gestin de las nuevas generaciones de procesadores ARM. n o As Apple utiliza ARM6 en su PDA Apple Newton y Acorn como procesador , principal en su RiscPC. Hoy el procesador ms usado es el ARM7TDMI en a millones de aparatos de telefon mvil y sistemas de videojuegos porttiles, a o a presente en la mayor de los telfonos Nokia, iPods, Nintendo-DS, Dreamcast, a e placas NVidia, etc. Aunque su uso va en retirada dando paso a ARM10, ARM11 y Cortex. ARM se ha posicionado de manera fuerte en el mercado, hoy son acreedores de licencias del core de ARM empresas como DEC, Freescale -empresa que deriv de Motorola el 2004, Apple, IBM, Inneon Tecnologies,OKI, Texas Inso truments, Nintendo, Toshiba, NVidia, Philips, VLSI, Atmel, Sharp, Samsung y STMicroelectronics, por nombrar algunas. Este proceso de licenciamiento ha llevado a que tres cuartos de los procesadores de 32 bits posean este chip en su ncleo. Esta forma de extender licencias garantiza por un tiempo indeterminau do una gran cantidad de proveedores de esta tecnolog para el sinnmero de a u desarrolladores que los utilizan. ARM tiene relativamente pocos componentes en el chip, por lo que el consumo de energ es muy bajo, lo que lo hace ideal para uso en sistemas embebidos. a Normalmente cuando un estudiante de ingenier comienza a abrirse paso a por el mundo de los microcontroladores y sistemas embebidos, es tendencia comenzar utilizando microcontroladores PIC de 8 bits, los cuales ya no estn a a la altura de ciertas aplicaciones. Por tanto si se desea aprender sobre el estado del arte de los microprocesadores, ARM7 es una excelente opcin para luego, o si se desea, emigrar a versiones ms complejas como Cortex, o bien utilizar los a IPCores que se han sintetizado en lenguaje de descripcin de hardware para su o implementacin en FPGAs. o1 Reduced

Instruction Set Computer

CAP ITULO 1. CONCEPTOS GENERALES

7

1.3.

Evolucin histrica sobre la arquitectura de o o ARM

A continuacin se presenta la evolucin e implementacin de distintas teco o o nolog a travs del tiempo en los cores de ARM: as e Versin 1: Direccionamiento de 26 bits, dentro del set de instrucciones no o se incluyen multiplicaciones o un coprocesador matemtico. a Versin 2: Incluye un coprocesador matemtico para multiplicaciones en o a 32 bits2 . Versin 3: Direccionamiento de 32 bits. Este core lo utilizan ARM6 y o ARM7. Versin 4: Aade instrucciones de carga y almacenamiento. Como subvero n sin se encuentra 4T, la que incluye el modo THUMB, el cual permite o utilizar instrucciones de 16 bits, lo que otorga una mayor densidad de cdigo en un mismo espacio de memoria. StrongARM -desarrollado por o Intel- utiliza el core v4, ARM7TDMI implementa el core v4T. Versin 5T: Es bsicamente la arquitectura 4T pero se aaden nuevas o a n instrucciones. Versin 5TE: Aade un set de instrucciones para aplicaciones de DSP. o n ARM 9E-S es un ejemplo de este core.

1.4.

Prestaciones de Arquitectura RISC y Pipelinening

Las principales caracter sticas de la arquitectura RISC son: 1. Set de instrucciones reducido, simple y de tamao jo3 n 2. Slo las instrucciones de carga y almacenamiento acceden a la memoria o de datos. 3. Rol importante del compilador, el cual es mucho ms complejo que uno a para procesadores CISC. El objetivo general de RISC es aumentar la velocidad de procesamiento reduciendo el acceso a la memoria -que es ms lenta4 -, y permitiendo segmentacin y a o paralelismo mediante una ejecucin de las instrucciones a travs de pipelinening. o e2 Esta

es una de las principales caracter sticas que lo diferencia de los microcontroladores

PIC3 aunque el modo THUMB permite uso de instrucciones de 16 bits, estas se empaquetan de igual forma en 32 bits, usando menos memoria en mayor cantidad de instrucciones. A esto se reeren los textos como mayor densidad de cdigo. o 4 Problema conocido como limitacin de memoria. o

CAP ITULO 1. CONCEPTOS GENERALES

8

La manera ms simple de entender lo que es el pipeline, es realizar una a analog a un proceso productivo en cadena. Por ejemplo supngase una lavana o der que dispone de una lavadora, una secadora y una plancha operada por una a persona. El tiempo que demorar si se ejecuta el proceso lavadora-secadora-planchado, a por lote de ropa esperando terminar de atender ese lote de ropa, para luego recin comenzar a atender el prximo lote de ropa sucia; es mucho mayor que si e o cuando pase la ropa lista de la lavadora a la secadora, y esta se vac inmediae, tamente ingrese un nuevo lote, y as sucesivamente en un proceso cont nuo y sincronizado. Las propiedades de paralelismo dependen del grado de la mquina5 . a El core del microcontrolador a utilizar dispone de un pipeline de tres etapas: 1. Fetch: Se extrae de la memoria la instruccin. o 2. Decode: Se decodican los opcodes de las operaciones. 3. Execution: El (los) registro(s) es(son) le do(s) del banco de registros, se realizan las operaciones en la ALU y el shift -si es necesario-, el(los) registro(s) es(son) escrito(s) en el banco de registros nuevamente.

Figura 1.1: Pipeline del ARM7TDMI, gura extra de la referencia [4] da Profundizar sobre el pipeline no es el objetivo en este caso, aunque es importante entender como funciona para lograr diseos ptimos, ac se obviarn pues n o a a son correspondientes a un curso de arquitectura de computadores o de sistemas embebidos.5 Grado

del procesador superescalar.

CAP ITULO 1. CONCEPTOS GENERALES

9

1.5.

Comparativo con procesadores contemporneos aPIC18FXX 8 bits Hasta 16 kB 10 bits 40 MHz 1 de 8 bits 3 de 16 bits 1.5 kB 10 0.5 mA/MHz AVR 8 bits Hasta 128 kB 10 bits 16 MHz 2 de 8 bits 2 de 16 bits 4 kB 16 0.85 mA/MHz MSP430FXX 16 bits Hasta 60 kB 16 bits 25 MHz 2 de 8 bits 2 de 16 bits 16 kB 16 0.25 mA/MHz ARM7XX 32 bits Hasta 512kB 10 bits 60 MHz 2 de 32 bits 2 de 16 bits 32 kB 60 0.28 mA/MHz

Arquitectura Memoria Flash Conversor A/D Frecuencia de Operacin o Timers RAM MIPS Consumo Nominal

Figura 1.2: Tabla comparativa PIC/AVR/MSP/ARM

Cap tulo 2

Gestin de entradas y o salidas digitales2.1. Registro IODIR

El registro IODIR es quien contiene la conguracin sobre qu pines -GPIO1 o e se comportarn como entrada o bien como salida. a Es un registro de 32 bits, cada bit corresponde a uno de los 32 pines del puerto en cuestin. Un 1 lgico indica una salida, y un 0 lgico, una entrada. o o o En resumen, si el bit 0 del registro IO1DIR se encuentra en alto, indica que el pin P1.0 (cero del puerto uno) es una salida. Distintas formas de asignar como salidas a los pines P0.12 y P0.15 ser los an siguientes cdigos: o

2.1.1.

Ejemplo Asignacin IODIR o

Para asignar directamente P0.12 y P0.15 como salidas y el resto del puerto como entradas, escribir unos en los bits 12 y 15 y el resto cero como se ilustra en la Tabla de la Figura 2.1 Bit Cont Bit Cont 31 0 15 1 30 0 14 0 29 0 13 0 28 0 12 1 27 0 11 0 26 0 10 0 25 0 9 0 24 0 8 0 23 0 7 0 22 0 6 0 21 0 5 0 20 0 4 0 19 0 3 0 18 0 2 0 17 0 1 0 16 0 0 0

Figura 2.1: Registro IO0DIR para el ejemplo 2.1.1 En resumen se tiene un registro de 32 bits cuyo valor es: (En nomenclatura matemtica) a 0000000000000000100100000000000021 General

Porpouse Input/Output

10

CAP ITULO 2. GESTION DE ENTRADAS Y SALIDAS DIGITALES

11

(En lenguaje de programacin) o IO0DIR = 0b 0000 0000 0000 0000 1001 0000 0000 0000; Y realizando el cambio de base binaria a hexadecimal se obtiene que (En nomenclatura matemtica) a 900016 (En lenguaje de programacin) o IO0DIR = 0x9000; Para mantener la conguracin anterior presente en el registro y slo modio o car los bits 12 y 15 se puede recurrir a operaciones lgicas utilizando todo el o registro: IO0DIR = IO0DIR | 0x9000; Que ser lo mismo que escribir a IO0DIR |= 0x9000; O en su efecto operar a nivel de bits: IO0DIR = (1 EDGE

Determina en qu canto de la seal de entrada comenzar la conversin en e n a o Burst mode.

6.2.10.

Bits < 28 : 31 >

Reservados. Como se ha visto, desde el bit 22 en adelante corresponden a bits reservados o de conguracin para Burst mode, por tanto en esta actividad se trabajar con o a los 21 bits de menor peso.

6.3.

ADxDRy

Es el registro de datos del canal y del conversor x. Es decir, para hacer referencia al canal 4 del ADC1, deber trabajarse con AD1DR4. a

Figura 6.2: Contenido ADDR En la tabla anterior se puede apreciar la estructuracin del contenido en o ADDR, en donde se destacan el bit < 31 > DONE que se setea a 1 cuando la conversin ha sido realizada, y los bits < 6 : 15 > RESULT que cuando DONE o est en alto, contiene el resultado de la conversin. a o

CAP ITULO 6. CONVERSOR ANALOGO DIGITAL

42

6.4.

PCONP

Power Control for Peripherals. Este registro contiene bits de control que habilitan o deshabilitan funciones de perifricos individualmente, permitiendo as eliminar consumo de energ de e , a perifricos que no estn siendo utilizados desconectandoles el clock espec e a co del bloque de perifricos. e Algunos perifricos, particularmente los con funciones anlogas, podr tee a an ner consumos que no son dependientes de un clock, por lo tanto poseen otro control de activacin, que desactivar esa circuiter adicional para reducir an o a a u ms el consumo. En el caso del ADC ser el bit PDN del ADCR. a a Para habilitar el ADC0 y ADC1 basta con levantar el bit 12 y 20 del registro PCONP respectivamente. Para mayor detalle del contenido de PCONP puede revisar la tabla 26 de [1].

6.5.

Cdigos Recomendados o

A continuacin se presentan cdigos recomendados tanto para inicializar el o o conversor A/D como para realizar la conversin de la data propiamente tal. o

6.5.1.

Rutina de Inicializacin o

En el siguiente cdigo X representa el canal del ADC0 que desea utilizaro se, para ADC1 deben usarse los registros y conguraciones respectivos a tal perifrico. e void ADC0INIT_X( void ) { PINSEL1 = ( 1 No se utilizarn. a Finalmente concatenando los resultados se tiene que: AD0CR AD0CR AD0CR AD0CR = < : P DN : : CLKS : BU RST : CLKDIV : SEL >32bits = < : 1 : 0 : 000 : 0 : 00000110 : 00001000 >32bits = 000000000010000000000110000010002 = 20060816

CAP ITULO 6. CONVERSOR ANALOGO DIGITAL

45

#include "LPC214x.h" #include #include #define PLOCK 0x400 // Declaracin variables o int results; float Volts; int val; // Declaracin funciones o void initialize( void ); void feed( void ); void interrupcion( void ); void adcInit0_3( void ); int adcRead0_3( void );

void main( void ) { //Configuracin PLL o Initialize(); feed(); // Se configura al pin 22 como output // y se asegura su estado en alto IO0DIR |= 0x400000; IO0SET |= 0x400000; // Inicializa el ADC 0, canal 3 adcInit0_3(); // Lee constantemente el resultado de ADC0.3 // Habilita interrupciones ctl_global_interrupts_enable(); // Reseteo del timer T0TCR = 0x2; // Se activa la interrupcin de T0MRO y TC se resetear o a // cuando ocurra un match T0MCR = 0x3; // El PR se carga con 0, por tanto el TC se incrementar a

CAP ITULO 6. CONVERSOR ANALOGO DIGITAL

46

// directamente con el PCLK T0PR = 0; // Se producir un match cada 1 segundo ya que la a // frecuencia del PCLK es 30 MHz debido a las configu// raciones de PLL T0MR0 = 30000000; //Se habilita el timer T0TCR = 1 ; // Interrupcin mediante API o ctl_set_isr( 4, 0, CTL_ISR_TRIGGER_FIXED, interrupcion, 0 ); ctl_unmask_isr( 4 ); while( 1 ){ // espera } } void interrupcion( void ) { // Limpia flag interrupcion timer T0IR = 1; // Deshabilitacin interrupciones o ctl_global_interrupts_re_enable_from_isr(); // Low al pin 0.22 IO0CLR = (1 > 6) & 0x3FF; // Se convierte la lectura a un // valor interpretable en volts Volts = (val)*(3.3/1023.0);

CAP ITULO 6. CONVERSOR ANALOGO DIGITAL

47

// Imprime en el debug el valor debug_printf("%1.2f Volts\n",Volts); // High al Pin 0.22 IO0SET = (1 MULVAL: Valor del multiplicador del prescaler. Este valor debe ser igual o mayor a uno para una operacin adecuada. o < 31 : 8 >Reservados: No se deben escribir unos es estos bits.

7.2.5.

UFCR

UART FIFO Control Register. Controla los FIFOs de recepcin y transimio sin. o < 0 >FIFO Enable: Si es cero, los FIFOs estn deshabilitados. Si es uno a se habilitan los FIFOs de Rx y Tx y el acceso a los bits 7:1del UFCR. Cualquier transicin en este bit borrar automticamente los FIFOs de la o a a UART.2 Revisar

el punto 7.3.

CAP ITULO 7. COMUNICACION SERIAL

51

< 1 >RX FIFO Reset: Si se escribe un uno se borrarn todos los bytes a del FIFO de Rx en el UART. Al activar este bit y ejecutarse la rutina de borrado del FIFO, este bit bajar automticamente. Si es cero no tiene a a efecto alguno. < 2 >TX FIFO Reset: Si se escribe un uno se borrarn todos los bytes a del FIFO de Tx en el UART. Al activar este bit y ejecutarse la rutina de borrado del FIFO, este bit bajar automticamente. Si es cero no tiene a a efecto alguno. < 5 : 3 >Reservados: No se deben esribir unos en estos bits. < 7 : 6 >Rx Trigger Level: Estos dos bits determinan cuantos caracteres recibir el FIFO de Rx antes de activar la interrupcin: a o 00 01 10 11 Descripcin o 1 caracter o 0x01 4 caracteres o 0x04 8 caracteres o 0x08 14 caracteres o 0x0E

Figura 7.1: Conguracin de Rx Trigger Level o

7.2.6.

ULCR

UART Line Control Register. Determina el formato de la data que ser ena viada o recibida. < 1 : 0 >Word Length Select: Longitud en bits de la palabra enviada o recibida. 00 01 10 11 Descripcin o 5 bits de largo 6 bits de largo 7 bits de largo 8 bits de largo

Figura 7.2: ULCR< 1 : 0 >: Word Length Select

< 2 >Stop Bit Select: Si es cero se utilizar un bit de parada, si es uno, a se utlizarn 2 bits de parada.Se utilizarn 1.5 bits de parada si se trabaja a a con 5 bits de largo. < 3 >Parity Enable: Si es cero se deshabilita la generacin y checkeo de o paridad, si es uno se habilita.

CAP ITULO 7. COMUNICACION SERIAL

52

< 5 : 4 >Parity Select: Conguran como se realizar el checkeo de a paridad de la data. < 5 : 4 > Descripcin o 00 Paridad impar. El nmero de unos en el caracter u transmitido y en el bit de paridad adjunto ser ima par. 01 Paridad par. El nmero de unos en el caracter transu mitido y en el bit de paridad adjunto ser par. a 10 Se fuerza el bit de paridad a 1 11 Se fuerza el bit de paridad a 1 Figura 7.3: ULCR< 5 : 4 >: Parity Select < 6 >Break Control: Si es cero la condicin de ruptura est deshanilio a tada. Si es uno, la salida de la UART se forzar a cero mientras el bit 6 a de ULCR est en alto. e < 7 >DLAB: Divisor Latch Access Bit. Si es cero no permite el acceso a UDLL y UDLM, si es uno, lo hace.

7.2.7.

ULSR

UART Line Status Register. Es un registro de slo lectura que entrega ino formacin sobre el estado de los bloques de transmisin y recepcin. o o o < 0 >RDR: Receiver Data Ready. Se levanta cuando el buer de recepcin o - URBR3 - contiene un caracter que no ha sido le do, y se baja, cuando el FIFO del buer se ha vaciado. Es decir, si RDR es 0, URBR est vac y si RDR es 1, URBR contiene a o; data vlida. a < 1 >OE: Overrun Error. La condicin de overrun se setea apenas ocurre. o La accin de leer a ULSR, automticamente baja este bit a cero. o a OE se levanta cuando en RSR hay un nuevo caracter y el FIFO de RBR est lleno. En este caso RBR no ser sobreescrito y el caractar en RSR se a a perder. Si es cero, no existe estado de error por overrun. a < 2 >PE: Parity Error. Se dice que ocurre un error de paridad cuando el bit de paridad de un caracter recibido tiene un estado lgico incorrecto. o Al igual que OE, una lectura a ULSR bajar este bit a cero. El tiempo de a deteccin de un error de paridad depende de la conguracin de UFCR. o o PE se levantar en caso de existir un error de paridad, si su estado es cero, a no ha ocurrido error de paridad.3 Para

mayor detalle sobre RBR y RSR revisar el esquema de la pgina 111 de [1]. a

CAP ITULO 7. COMUNICACION SERIAL

53

< 3 >FE: Framing Error. Un error de framing ocurre cuando el bit de parada de un caracter es cero. Leer ULSR llevar este bit a cero. El tiema po de deteccin de un error de framing depende de las conguraciones de o UFCR. En caso de ocurrir un error de framing, el receptor intentar rea sincronizarse asumiendo que el bit de parada errneo es en verdad un bit o de partida. Un estado alto en este bit indica error de framing, mientras un estado bajo indica que no existe error. < 4 >BI: Break Interrupt. Cuando en RXD0 llega un caracter que est cona tenido absolutamente por ceros -partida, data, paridad, parada- ocurre una interrupcin de ruptura. o Si BI est en alto, ha ocurrido una interrupcin de quiebre, en caso cona o trario, no lo ha hecho. < 5 >THRE: Transmitter Holding Register Empty. Este bit se levanta inmediatamente cuando se ha detectado que el UTHR est vac y se baja a o automticamente cuando se escribe en UTHR data vlida. a a < 6 >TEMT: Transmitter Empty. Este bit de estado se levanta cuando estn vac el UTHR y tambin el UTSR. Si est en estado bajo puede a os e a interpretarse como que el UTHR y/o el UTSR contienen data vlida. a < 7 >RXFE: Error in RX FIFO. Este bit se levanta cuando se carga al RBR un caracter que tiene algn problema, ya sea un error de paridad, u de framing, o una interrupcin de ruptura. o Este bit se borrar si se lee ULSR y la situacin no persiste. a o

7.3.

Clculo y conguracin del Baud Rate a o( ) (7.1) DivAddV al 16 (16 U DLM + U DLL) 1 + M ulV al P CLK

U ARTbaudrate =

En trminos prcticos [1] recomienda utilizar tambin la siguiente relacin e a e o

U ARTbaudrate =

P CLK M ulV al (7.2) 16 (16 U DLM + U DLL) M ulV al + DivAddV al

Ha de tenerse en cuenta las siguientes restricciones: i. 0 < M ulV al 15 ii. 0 DivAddV al 15

CAP ITULO 7. COMUNICACION SERIAL

54

Si UFDR no cumple con estas dos condiciones, entonces las salida del divisor fraccional es indenida. Si DIVADDVAL es cero el divisor fraccional es deshabilitado y el clock no se dividir. a Es importante que UFDR no se modiique mientras se transmite/recibe informacin, de ocurrir esto, la data se perder o bien ser corrupta. o a a

7.3.1.

Ejemplo

Determinar alguna conguracin para que el UART1 funcione a un baudrate o igual a 9600 cuando el clock de perifricos est en 20 MHz. e a Solucin. o De acuerdo a la relacin 7.2 se tiene que: o P CLK 16 (16 U DLM + U DLL) 20,000,000 16 (16 U DLM + U DLL) M ulV al M ulV al + DivAddV al M ulV al M ulV al + DivAddV al

U ARTbaudrate 9600

= =

Para razones de simplicacin del clculo -y por experiencia prctica- se o a a hace cero DIVADDVAL, as no se debe lidiar con tal factor, UDLM tambin e pues en trminos de magnitud basta con UDLL dividiendo para alcanzar el e valor requerido 20,000,000 M ulV al 16 (16 0 + U DLL) M ulV al + 0 20,000,000 9600 = 1 16 (U DLL) 20,000,000 U DLL = 16 9600 U DLL 13010 9600 = U DLL = 8216 Luego debido a la aproximacin, se comprueba el valor obtenido. o M ulV al P CLK 16 (16 U DLM + U DLL) M ulV al + DivAddV al 20,000,000 16 130 9615

U ARTbaudrate U ARTbaudrate U ARTbaudrate

= = =

Por tanto con tal conguracin se obtiene un error del 0,16 % del valor del o baudrate deseado, lo cual es aceptable.

CAP ITULO 7. COMUNICACION SERIAL

55

Finalmente la conguracin de los registros ser: o a U1FDR = 0x0; U1DLM = 0x0; U1DLL = 0x82; Si bien la idea del presente item en estos apuntes, es simplemente no resignarse a asumir valores y entender de donde se obtienen estos. En la referencia [1], en la tabla 102 de las pginas 99 y 100, se entregan valores recomendaa dos para ingresar en los registros, para diferentes velocidades de comunicacin o con sus respectivos errores, ya sea, llevando DIVADDVAL a cero, o bien una conguracin ptima con errores casi nulos. o o

Figura 7.4: Fragmento de la tabla de valores recomendados para distintos valores de baudrate

7.4.

Interrupciones de Puerta Serial

El registro que contiene las conguraciones que determinan como reaccionar el microcontrolador ante ciertas interrupciones por puerta serial es el a UxIER, este anlisis se centrar en el UART0, por tanto se utilizar el registro a a a U0IER -UART0 Interrupt Enable Register. Para acceder a este registro el bit DLAB debe estar en estado bajo. < 0 >RBR Interrupt Enable: Habilita la interrupcin RDA -Data recio bida disponible-, tambin controla la interrupcion de time-out de caracter e recibido.

CAP ITULO 7. COMUNICACION SERIAL

56

Si U0IER< 0 >, est en bajo, la interrupcin por RDA est deshabilitada; a o a en alto, est habilitada. a < 1 >THRE interrupt Enable: Habilita la interrupcin de THRE o Transmitter Holding Register Empty, bit 5 del ULSR-. Un 0 deshabilita la interrupcin de THRE, en cambio un 1 la habilita. o < 2 >Rx Line Status Interrupt Enable: Habilita la interrupcin por o estado de la l nea de recepcin, estado que puede leerse en los bits < 4 : 1 > o del ULSR. Si contiene un cero est deshabilitada, si contiene un uno est habilitada. a a < 7 : 3 >Reservados: No escribir unos en estos bits < 8 >ABTOIntEn: Habilita la interrupcin de time-out del mdulo de o o auto-baudrate. Habilita con 1 y deshabilita con 0. < 9 >ABEOIntEn: Habilita la interrupcin de n de auto-baud. o Habilita con 1 y deshabilita con 0. < 31 : 10 >Reservados: No escribir unos en estos bits El registro que indica el estado de las interrupciones pendientes y sus debidas prioridades es U0IIR. Cuando se lee U0IIR las interrupciones se congelan. No se entrar ms en detalle respecto de este asunto, pues el lector puede consultar a a las tablas del manual en el capitulo destinado al UART0. El ag de interrupcin de puerta serial se baja con el simple hecho de leer o U0IIR.

7.5.

Env de datos a bajo nivel, un acercamieno to prctico a la estructura del UART a

A continuacin se presenta cdigo a modo de recomendacin para realizar o o o la transmisin de un string mediante el UART1. o #include #define PLOCK 0x400 #define TEMT (1 New > New project, luego un wizard ayudar con las opciones de conguracin del a o proyecto. As aparecer la siguiente ventana emergente de la gura B.1. , a

Figura B.1: Crear Proyecto Paso 1 En la gura B.2 se indica que se trabajar con un core de la familia LPC21xx, a que el proyecto a realizar ser del tipo ejecutable, y posteriormente el path de a la carpeta que alojar al proyecto. a En la siguiente ventana del wizard que se muestra en la gura B.3 se le indica al software que el microprocesador en que se implementar el proyecto, a corresponde al LPC2148 y que el clock externo al cual est conectado oscila a a una frecuencia de 12MHz. La ventana siguiente corresponde a los archivos que se aadirn al proyecto, n a se recomienda tener todas activas (gura B.4). Luego en la ventana que se muestra en la gura B.5 se pregunta que tipos de conguraciones utilizar el proyecto. Esto se reere a los modos de debug a Flash/RAM, modos THUMB, etc. No se ahondar al respecto, por lo que se a recomienda dejar todas las opciones activas. Finalmente el proyecto est creado, pero no posee ninguna fuente en l. a e Entonces slo resta agregar un cdigo y el proyecto estar listo. Para esto: o o a

69

ANEXO B. CREACION DE UN PROYECTO EN CROSSWORKS

70

Figura B.2: Crear Proyecto Paso 2

Figura B.3: Crear Proyecto Paso 3 A diferencia de MPLAB, escribir en C/C++ en Crossworks es nativo y no es necesario aadir compiladores externos, por lo que ofrece inmediatamente las n opciones para hacerlo. Se puede comprobar que la fuente se ha agregado al proyecto en el Project Explorer como se muestra a continuacin. o Si bien, la creacin del proyecto ha nalizado mediante el wizard, una compio lacin no resultar exitosa, pues en la misma carpeta en que est el archivo.hzp o a e que maneja Crossworks debe guardarse tambin el archivo LPC214x.h, el cual e se puede descargar desde la pgina web del LABSEI (labsei.ucv.cl), seccin a o Publicaciones Internas.

ANEXO B. CREACION DE UN PROYECTO EN CROSSWORKS

71

Figura B.4: Crear Proyecto Paso 4

Figura B.5: Crear Proyecto Paso 5

Figura B.6: Agregar Fuente Paso 1

Figura B.7: Agregar Fuente Paso 1

ANEXO B. CREACION DE UN PROYECTO EN CROSSWORKS

72

Figura B.8: Fuente agregada al proyecto

Bibliograf a[1] UM10139 Volume 1: LPC214x User Manual Rev. 01. Koninklijke Philips Electronics 2005 [2] MCI Electronics Esquemtico LPC-P2148 a [3] Un vistazo a la arquitectura ARM. Mauro Parra Miranda UNAM, 2001. http://usuarios.multimania.es/luiscastillo/bash/arm.pdf [4] ARM7TDMI-S (Rev 3). Technical Reference Manual ARM Limited 1998-2000 http://infocenter.arm.com/help/topic/com.arm.doc.ddi0084f/DDI0084.pdf [5] Embedded Systems: Lecture-5 ARM Processor. Dr. Santanu Chaudhury Department of Electrical Engineering, Indian Institute of Technology Delhi National Program on Technology Enhanced Learning http://nptel.iitm.ac.in/video.php?subjectId=108102045 [6] Embedded Systems: Lecture-6 More ARM Instructions. Dr. Santanu Chaudhury Department of Electrical Engineering, Indian Institute of Technology Delhi National Program on Technology Enhanced Learning http://nptel.iitm.ac.in/video.php?subjectId=108102045 [7] Embedded Systems: Lecture-7 ARM: Interrupt Processing. Dr. Santanu Chaudhury Department of Electrical Engineering, Indian Institute of Technology Delhi National Program on Technology Enhanced Learning http://nptel.iitm.ac.in/video.php?subjectId=108102045 [8] Art culo Arquitectura ARM. Wikipedia http://es.wikipedia.org/wiki/Arquitectura ARM. 73

Indice de guras1.1. Pipeline del ARM7TDMI, gura extra de la referencia [4] . . da 1.2. Tabla comparativa PIC/AVR/MSP/ARM . . . . . . . . . . . . . 2.1. 2.2. 2.3. 2.4. 2.5. 2.6. 2.7. 2.8. 3.1. 3.2. 3.3. 3.4. 4.1. 4.2. 4.3. 4.4. 4.5. Registro IO0DIR para el ejemplo 2.1.1 . . . . . . . . Conexin LEDs en la tarjeta de desarrollo . . . . . . o Compilar . . . . . . . . . . . . . . . . . . . . . . . . Conectar Programador . . . . . . . . . . . . . . . . . Run . . . . . . . . . . . . . . . . . . . . . . . . . . . Cdigo modicado del ejercicio 2.4.2 con breakpoints o Indicador de breakpoint activo. . . . . . . . . . . . . Salida en Debug I/O Terminal. . . . . . . . . . . . . Tabla Interrupciones por software . Tabla EXTINT . . . . . . . . . . . Package y pines del LPC2148 . . . Extracto Table 60: PINSEL0 de [1] Diagrama de Clocks . . . . . . Esquema PLLCFG . . . . . . . Valores de P/PSEL y M/MSEL Contenido PLLSTAT . . . . . . Contenido VPBDIV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . insertados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 9 10 12 14 14 14 15 16 16 17 22 23 24 25 26 28 29 30 34 35 40 41 51 51 52 55 62

5.1. Conguracin Registro de Interrupciones . . . . . . . . . . . . . . o 5.2. Conguracin del MCR . . . . . . . . . . . . . . . . . . . . . . . o 6.1. Tabla conguracin CLKS . . . . . . . . . . . . . . . . . . . . . . o 6.2. Contenido ADDR . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.1. 7.2. 7.3. 7.4. Conguracin de Rx Trigger Level . . . . . . . . o ULCR< 1 : 0 >: Word Length Select . . . . . . . ULCR< 5 : 4 >: Parity Select . . . . . . . . . . Fragmento de la tabla de valores recomendados valores de baudrate . . . . . . . . . . . . . . . . . 7.5. Respuesta en Terminal del ejercicio 7.7.1 . . . . . 74 . . . . . . . . . para . . . . . . . . . . . . . . . . . . . . . . . . distintos . . . . . . . . . . . .

INDICE DE FIGURAS

75

7.6. Respuesta en Terminal del ejercicio 7.7.2. Env de caracteres y o respuestas del microcontrolador. . . . . . . . . . . . . . . . . . . A.1. Instalacin paquete LPC2000 . . . . . . . . . . . . . . . . . . . . o B.1. B.2. B.3. B.4. B.5. B.6. B.7. B.8. Crear Proyecto Paso 1 . . . Crear Proyecto Paso 2 . . . Crear Proyecto Paso 3 . . . Crear Proyecto Paso 4 . . . Crear Proyecto Paso 5 . . . Agregar Fuente Paso 1 . . . Agregar Fuente Paso 1 . . . Fuente agregada al proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

66 68 69 70 70 71 71 71 71 72