Navigation überspringen

Harald Markus Wirth


Seiteninhalt:

avrdude

For the examples on this page, a vusbtiny programmer is used.

Useful background knowledge: Hexadecimal Numbers

#define F_CPU 1000000

#include <avr/io.h>
#include <util/delay.h>

#define LED_DDR    DDRB
#define LED_PORT   PORTB
#define LED_PIN_NR PB3

void main(void)
{
   LED_DDR = (1 << LED_PIN_NR);         // Configure PB3 as output

   while(1) {                           // Endless loop
      _delay_ms(999);                   // One second pause
      LED_PORT |=  (1 << LED_PIN_NR);   // Switch on LED
      _delay_ms(999);                   // Pause
      LED_PORT &= ~(1 << LED_PIN_NR);   // Switch off LED
   }
}
avr-gcc -mmcu=attiny45 -Os blink.c
avr-objcopy -j .text -j .data -O ihex a.out a.hex
avrdude -c usbtiny -p attiny45 -P usb -U flash:w:a.hex
avrdude -c usbtiny -p attiny45 -P usb -U flash:w:vusbtiny.hex
avrdude -c usbtiny -p t45 -V -U lfuse:w:0xe1:m -U hfuse:w:0x5d:m -U efuse:w:0xff:m

ASM Example

/*
  Siehe http://www.rn-wissen.de/index.php/GNU_Assembler, http://www.nongnu.org/avr-libc/user-manual/assembler.html

  Erzeugen des Listings, und elf files für den ATTiny2313
  avr-gcc -x assembler-with-cpp -Wa,-adhlns=erster_test_13042011.lst,-gstabs,-D  -o Pollin_Board_ATTiny2313_Blinker.elf -mmcu=attiny2313 Pollin_Board_ATTiny2313_Blinker.S

  Hex File erzeugen
  avr-objcopy -j .text -j .data -O ihex Pollin_Board_ATTiny2313_Blinker.elf Pollin_Board_ATTiny2313_Blinker.hex

  Größe anzeigen
  avr-size -x Pollin_Board_ATTiny2313_Blinker.elf

  Memory usage anzeigen
  avr-size -C Pollin_Board_ATTiny2313_Blinker.elf

  Ausführliche Stastistik der Speicherbelegung <ausprobieren>
  avr-size -x -A Pollin_Board_ATTiny2313_Blinker.elf

  ATTiny2313 mit AVRDude beschreiben
  avrdude -p t2313 -c ponyser -P /dev/ttyUSB0 -U flash:w:Pollin_Board_ATTiny2313_Blinker.hex

  /usr/lib/avr/include/avr/io.h   ->   /usr/lib/avr/include/avr/iotn2313.h
*/
#include <avr/io.h>

 Datenrichtung = 16   ; der Variable Datenrichtung wird Register 16 zugewiesen
 Zaehler1 = 17        ; der Variable Zaehler1 wird Register 17 zugewiesen
 Zaehler2 = 18        ; der Variable Zaehler2 wird Register 18 zugewiesen
 Zaehler3 = 19        ; der Variable Zaehler3 wird Register 19 zugewiesen
 temp     = 20        ; der Variable temp wird Register 20 zugewiesen

 .section .text       ; was nun folgt, gehört in den FLASH-Speicher
 .global main         ; main ist auch in anderen Modulen bekannt

main:                 ; zu 'main' wird nach Reset hingesprungen
        ldi  Datenrichtung, 0b00001000
        out  _SFR_IO_ADDR(DDRB), Datenrichtung    ; Datenrichtung PORTD an der Stelle LED1 auf Ausgang
        out  _SFR_IO_ADDR(PORTB), Datenrichtung   ; Ausgang zur LED1 auf High setzen -> LED leuchtet

Hauptschleife:
        clr Zaehler3           ; Zaehler3 wird auf Null gesetzt
loop3:       ; Warteschleife
loop2:
loop1:
        inc Zaehler1           ; Zaehler = Zaehler + 1
        brvc loop1             ; solange Zaehler1 nicht überläuft, also von 255 auf 0 springt wird zu loop1 gesprungen
        inc Zaehler2           ; Zaehler = Zaehler + 1
        brvc loop2             ; solange Zaehler2 nicht überläuft, also von 255 auf 0 springt wird zu loop2 gesprungen
        inc Zaehler3           ; Zaehler = Zaehler + 1
        cpi Zaehler3, 5       ; Vergleiche Zaehler3 mit 50
        brne loop3             ; solange die 50 nicht erreicht ist, wird in loop3 gesprungen

        in  temp, _SFR_IO_ADDR(PORTB)   ; Zustand der LED1 drehen
        eor temp, Datenrichtung         ; drehe in temp das Bit, was in Datenrichtung gesetzt ist
        out _SFR_IO_ADDR(PORTB), temp   ; gebe den Inhalt von temp auf PORTD aus

        rjmp  Hauptschleife
avr-gcc -mmcu=attiny45 blink.S
avr-objcopy -j .text -j .data -O ihex a.out a.hex
avrdude -c usbtiny -p t45 -P usb -U flash:w:a.hex

Makefile

ARDUINO_TTY=/dev/ttyACM0
%.elf: %.c
	avr-gcc -Wall -O3 -std=gnu99 -mmcu=atmega328p -DF_CPU=16000000L -o $@ $^

%.hex: %.elf
	avr-objcopy -j .text -j .data -O ihex $^ $@

%.prog: %.hex
	avrdude -p m328p -b 115200 -c arduino -P $(ARDUINO_TTY) -v -U flash:w:$^


Content Management:

μCMS α1.6