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 ...
1. Instalar los siguientes paquetes: apt-get install ncurses*, bzip2, gcc*, make, libqt3* (opcional, para ser usado con xconfig) 1. Descargar la imagen del kernel desde: www.kernel.org 2. Descomprimirlo: tar jxvf .tar.bz2 3. Configurarlo make menuconfig 4. Generar el ejecutable make bzImage el ejecutable se encuentra en arch/i386/bzImage 5. Genera los módulos make modules 6. Instala los módulos (este paso hacerlo como SU) make modules_install 7. Instala el kernel en /boot make install 8. Genera un sistema de archivos en RAM para el arranque (creo que sólo es para Debian) mkinitramfs -o /boot/initrd.img- (checar que hay un espacio en blanco) 9. Agregar la nueva imagen para el boot vim /boot/grub/menu.lst 10. Reiniciar
Comentarios