Valkertown Blog

Redirección a el nuevo blog en 5 segundos...

sábado, junio 25, 2005

Bien encontre un post apropiado del blog anterior continuando con el desarrollo
de las herramientas.

Para ver los cables de programación en la documentación de UISP
se encuentran los cables soportados.
He probado con exito:

  • dapa que es un cable del puerto paralelo a los pines del micro.
  • xil que es el cable jtag que viene con las boards xilinx, el que probe viene
    con la tarjeta de evaluación de una fpga spartan3, gracias a medrano por la ayuda con el testing con este cable y un atmega16


La mejor forma de utilizar las GNUTools es creando un
Makefile apropiado, que sea fácil de reutilizar.
Este envio cubre este aspecto y como utilizar todas
las herramientas y el wrapper(Makefile) para crear la aplicación
de prueba.


Un archivo Makefile contiene las reglas e instrucciones
requeridas para compilar, en principio esta pensado para
esa tarea, sin embargo la flexibilidad permite que
sea utilizado en otras tareas.

Bien, el programa make cuando se invoca desde la
linea de comando busca el archivo Makefile o makefile en el
directorio actual, también puede ser especificado un
archivo diferente para obtener las reglas.

Sin embargo tener los proyectos separados en directorios
y con su propio Makefile ayuda a organizar el trabajo.

Esta es una cabecera adecuada para iniciar el archivo:

#Cambiar al nombre del proyecto
FILE=proyecto
#Especificar el micro para el cual se va a compilar
MCU=micro
#Especificar el método de programación
CABLE=dapa

#Herramientas de compilación.

CC=avr-gcc
XXD=xxd
OBJCOPY=avr-objcopy
OBJDUMP=avr-objdump


CFLAGS= -g -Wall -mmcu=$(MCU)

all: $(FILE).hex



Luego se especifican las reglas de compilación.

%.o:%.c
<- TAB ->$(CC) -c -o $*.o $(CFLAGS) $(ECOS_GLOBAL_CFLAGS) $<

%.hex: %.elf
$(OBJCOPY) -j .text -j .data -O ihex $< $*.hex
$(OBJDUMP) -h -S $< > $*.listing

%.elf: %.o
$(CC) $(CFLAGS) -o $*.elf -Wl,-Map,$(FILE).map $<


Estas reglas permiten la mayor generalidad pero en ocasiones
no son suficientes y es importante conocer el compilador
para añadir las modificaciones pertinentes.

Por ejemplo muchas veces es deseable distribuir el proyecto
en varios objetos antes de enlazarlos o se han creado
cabeceras .h que su ruta debe ser especificada explícitamente
al compilador.

Los comandos de programación:


load: $(FILE).hex
uisp -dlpt=/dev/parport0 --erase -dprog=$(CABLE)
uisp -dlpt=/dev/parport0 --upload if=$< -dprog=$(CABLE) -v=3 --hash=32


Al final se le indica que debe hacer para limpiar:

clean:
-rm -f $(FILE).hex
-rm -f $(FILE).map
-rm -f $(FILE).o
-rm -f $(FILE).listing


De esta forma solo se debe modificar la cabecera del Makefile para
una gran cantidad de proyectos y los cambios adicionales
se restringen a los proyectos que lo necesiten.

Los micro ATMEGA en general vienen con un reloj interno de ~1Mhz así
para esta aplicación de ejemplo no hace falta más que polarizar
el micro, programador, y un led.

Si se quiere utilizar un reloj diferente es importante leer
sobre los FUSES de estos micros y la documentación
del programador(uisp) sobre como realizar la configuración.


ledtest.c

#include <avr/io.h>
void delay_ms(unsigned short ms)
{
unsigned short dl1, dl2;
dl1 = 50; // Si se utiliza un reloj más veloz, incrementar este valor
while (dl1) {
dl2 = 1000;
while (dl2) {
while ( ms ) ms--;
dl2--;
}
dl1--;
}
}
int main(void)
{
DDRB|=_BV(PB2); // Habilita el Puerto B2 como salida
while (1) {

PORTB^=_BV(PB2); // TOOGLE del LED
delay_ms(500);
}
}




En mi caso se cambia en el makefile:


#Cambiar al nombre del proyecto
FILE=ledtest
#Especificar el micro para el cual se va a compilar
MCU=atmega8535



Es importante recordar que .../avr-elf/bin se debe encontrar en el PATH.


$export PATH=$PATH:.../avr-elf/bin
$setenv PATH $PATH:.../avr-elf/bin



El directorio del proyecto se debe ver algo así ahora:


4.0K Makefile
4.0K avrledtest.c


Compilamos

$make


Es posible que se presente el error de los 8 espacios, reemplace en el
Makefile esos 8 espacios por una tabulación.

Luego el directorio se debe ver:


4.0K Makefile 8.0K ledtest.listing
4.0K ledtest.c 8.0K ledtest.map
4.0K ledtest.hex


Si se quiere programar en el micro el ejemplo

$make load


Los archivos .listing y .map son muy útiles para analizar
el código final generado en assembler por el compilador, aunque
no son necesarios los añadí en el makefile para disponer
de todas las herramientas cuando se necesiten.

Con esto terminan esta serie de envíos, no pretenden ser un reemplazo
a la documentación de cada una de las herramientas, pero si una
guia adecuada.


Omito el esquemático del circuito ya que es bastante simple.

Se resume en:

  1. Alimentar el micro

  2. Led+Resistencia en el puerto B2, 1 Prendido, 0 Apagado

  3. Programador en las lineas adecuadas

  4. Cristal, Opcional




EOT