ReSeT
25.03.2009, 18:33
Hallo liebe Robotergemeinde,
ich beschäftige mich nun seit einigen Wochen mit der Atmel Plattform und habe den Umstieg von Microchip erfolgreich hinter mich gebracht.
Das Programmieren mit dem AVR-GCC, einem selbstgebauten STK200 Programmieradapter und AVRDUDE funktioniert problemlos. Nun mein Problem:
Folgendes C-Code Fragment:
int main(void) {
DDRA = 0xFF;
while(1) {
PORTA = 0x00;
PORTA = 0xFF;
}
return 0;
}
Schaltet alle Pins an PORTA abwechselnd ein und aus, kann ich auch schön auf dem Oszilloskop sehen.
Nehme ich das gleiche in Assembler:
#include <avr/io.h>
.text
dir = 16
dat = 17
.global main
main:
ldi dir,0xFF
out DDRA,dir
loop:
ldi dat,0xFF
out PORTA,dat
ldi dat,0x00
out PORTA,dat
rjmp loop /* loop forever */
.end
dann tut sich gar nichts. Ich habe alle möglichen Quellen durchforstet, und bin der Meinung, daß das Assemblerprogramm so funktionieren sollte.
Habe ich hier irgendwas übersehen, oder müssen noch spezielle Einstellungen durchgeführt werden? Ich benutze einen ATMega32 und erzeuge und programmiere
das Hexfile so:
avr-gcc -o main.elf -g -mmcu=atmega32 -Wa,-gstabs -Os main.S
avr-objcopy -j .data -j .text -O ihex main.elf main.hex
avrdude -p m32 -c stk200 -U flash:w:main.hex -v -U lfuse:w:0xff:m -U hfuse:w:0xd9:m
Der Programmieradapter und mein Schaltungsaufbau funktionieren mit der C-Variante ja einwandfrei, also kann es ja daran wohl nicht liegen.
Bin für jeden Hinweis dankbar.
Gruß
ReSeT
ich beschäftige mich nun seit einigen Wochen mit der Atmel Plattform und habe den Umstieg von Microchip erfolgreich hinter mich gebracht.
Das Programmieren mit dem AVR-GCC, einem selbstgebauten STK200 Programmieradapter und AVRDUDE funktioniert problemlos. Nun mein Problem:
Folgendes C-Code Fragment:
int main(void) {
DDRA = 0xFF;
while(1) {
PORTA = 0x00;
PORTA = 0xFF;
}
return 0;
}
Schaltet alle Pins an PORTA abwechselnd ein und aus, kann ich auch schön auf dem Oszilloskop sehen.
Nehme ich das gleiche in Assembler:
#include <avr/io.h>
.text
dir = 16
dat = 17
.global main
main:
ldi dir,0xFF
out DDRA,dir
loop:
ldi dat,0xFF
out PORTA,dat
ldi dat,0x00
out PORTA,dat
rjmp loop /* loop forever */
.end
dann tut sich gar nichts. Ich habe alle möglichen Quellen durchforstet, und bin der Meinung, daß das Assemblerprogramm so funktionieren sollte.
Habe ich hier irgendwas übersehen, oder müssen noch spezielle Einstellungen durchgeführt werden? Ich benutze einen ATMega32 und erzeuge und programmiere
das Hexfile so:
avr-gcc -o main.elf -g -mmcu=atmega32 -Wa,-gstabs -Os main.S
avr-objcopy -j .data -j .text -O ihex main.elf main.hex
avrdude -p m32 -c stk200 -U flash:w:main.hex -v -U lfuse:w:0xff:m -U hfuse:w:0xd9:m
Der Programmieradapter und mein Schaltungsaufbau funktionieren mit der C-Variante ja einwandfrei, also kann es ja daran wohl nicht liegen.
Bin für jeden Hinweis dankbar.
Gruß
ReSeT