Regularmente se requieren rutinas de retardo en las aplicaciones, y lo más rápido es hacerlas con loops tipo for o while . Aunque ello funciona la mayor parte de las veces, no se tiene el control de una temporización precisa ya que se desconoce exactamente cúanto transcurre en un ciclo del retardo (este valor puede medirse con un osciloscopio o un frecuencímetro), por lo que hay que jugar con los valores para llegar al tiempo deseado. Una forma un poco más elaborada pero más elegante de obtener retardos exactos es utilizar ensamblador en línea dentro del cuerpo de la función de retardo (o como un procedimiento completo en ensamblador si se encuentra en otro archivo y se enlaza junto con los archivos en C). Gracias al manual o al data-sheet de la CPU se conoce la cantidad ciclos de reloj que toma cada instrucción, por lo que de esta manera se puede calcular a-priori con casi certeza absoluta la cantidad de tiempo que tomará cada vuelta dentro del retardo. Un ejemplo en pseudocódigo se...
Cómo configurar las interrupciones en el LPC 1.Establecer las isr para irq y fiq CW: void irq_handler(void) __attribute__ ((interrupt(“irq”))); WA: void __attribute__ ((interrupt(“irq”))) irq_handler(void); Para las fiq solamente cambiar “irq” por “fiq” Esos nombres son obligatorios 2.Escribir el código de la rutina de la interrupción irq o fiq void irq_handler(void){ ... } void fiq_handler(void){ ... } 3.Seleccionar la función alterna al pin con PINSELx 4.Seleccionar si va a ser fiq o irq con VICIntSelect (0: irq, 1: fiq) 5.Habilitar la interrupción con VICIntEnable 6.Escoger la prioridad con VICVectCntlx (x: 0-15, 0 tiene la mayor prioridad) Para las fiq se recomienda tener sólo una 7.Establecer la dirección de la callback con VICVectAddrx (x:0-15) 8.Escribir el código de la rutina que manejará la interrupción del periférico void eint0(void){...} El nombre de esta función es el mismo que se usa en el punto 5 9.Habilitar las interrupciones CW: __armlib_enableirq(); WA: 10.Repetir del ...
Programación en C para microcontroladores Introducción Una de las herramientas más potentes con las que cuenta un profesional dedicado a los sistemas embebidos (o de aplicación específica) es la programación en lenguajes de alto nivel. Aunque existe una infinidad de lenguajes de dónde escoger, sin duda, C es la opción preferida. Ello debido a dos razones fundamentales: 1. C es un lenguaje híbrido, es decir, es una combinación de ensamblador de alto nivel mezclado con un lenguaje de alto nivel cercano al ensamblador. Esta combinación es la que lo ha hecho tan popular tanto para la programación en máquinas de escritorio como en sistemas embebidos. 2. No hay otra opción. Dicho de otra manera, cuando se programa un sistema desde cero sólo se puede realizar de dos maneras: ensamblador o C. Otros lenguajes como JAVA sólo se implementan cuando se cuenta ya con un sistema operativo (de aquí en adelante OS). Tómese como ejemplo una PALM cuyo OS es el PALMOS, donde además su CPU ...
Comentarios