Valkertown Home

2005-06-25-avr-crosscompiler-parte-5

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:

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

&#60- TAB -&#62$(CC) -c -o $*.o $(CFLAGS) $(ECOS_GLOBAL_CFLAGS) $&#60

%.hex: %.elf

    $(OBJCOPY) -j .text -j .data -O ihex $&#60 $*.hex

    $(OBJDUMP) -h -S $&#60 &#62 $*.listing

%.elf: %.o

    $(CC) $(CFLAGS) -o $*.elf -Wl,-Map,$(FILE).map $&#60

_

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=$&#60 -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 &#60avr/io.h&#62

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

comments powered by Disqus

© 2008-2012 Carlos A. Perilla deepspawn at valkertown dot org | Based on original design by Andreas Viklund