Hallo Forum =)
Mal wieder ein Problem... Ich versuche mich mit dem Debuggen per JTAG
vertraut zu machen.
Dazu hab ich als erstes folgendes Progrämmchen geschrieben
1 | .include "m32def.inc"
|
2 |
|
3 | .def a1 = r16
|
4 | .def a2 = r17
|
5 | .equ sys_clock = 8000000
|
6 |
|
7 | .include "m32def.inc" ;Definitionsdatei laden
|
8 | .cseg ;Beginn eines Code-Segmentes
|
9 | .org 0x0000
|
10 | ;Startadresse=0
|
11 | rjmp start
|
12 |
|
13 |
|
14 |
|
15 |
|
16 | start:
|
17 |
|
18 |
|
19 |
|
20 | ;Stackpointer initialisieren
|
21 | ldi r16,LOW(RAMEND) ;Stackpointer (low) auf
|
22 | out spl,r16 ;RAM-Ende setzen
|
23 | ldi r16,HIGH(RAMEND) ;Stackpointer (high) auf
|
24 | out sph,r16 ;RAM-Ende setzen
|
25 |
|
26 | ;Datenrichtung
|
27 | ldi a1,255
|
28 | out ddra,a1
|
29 | out ddrb,a1
|
30 | out ddrc,a1
|
31 | out ddrd,a1
|
32 |
|
33 | hell:
|
34 |
|
35 |
|
36 | sbi porta,1
|
37 | nop
|
38 | nop
|
39 | nop
|
40 | cbi porta,1
|
41 | nop
|
42 | nop
|
43 | rjmp hell
|
Als Editor nutze ich übrigens AVR Studio 4.18. Wenn ich das nun per AVR
Simulator debugge, läuft alles wie es so soll, porta1 wird halt
getoggelt.
Wenn ich nun in den JTAG Modus wechsel, aktiviere ich vorher die
OCD-fuse, wobei es am Ergebnis nichts ändert, ob sie gesetzt ist oder
nicht. Ich starte das debuggen, klicke step into (F11), manchmal steppt
er dann direkt 2 Programmschritte, ändert aber in den Registern nichts,
und irgendwelche Ports werden scheinbar wild hin und hergetoggelt, und
nach einigen "Doppelschritten" verschwindet der gelbe Pfeil, es
erscheint ein Disassemblerfenster
1 | ---- blink.asm ------------------------------------------------------------------------------------
|
2 | 11: rjmp start
|
3 | +00000000: FFFF ??? Data or unknown opcode
|
4 | 21: ldi r16,LOW(RAMEND) ;Stackpointer (low) auf
|
5 | +00000001: FFFF ??? Data or unknown opcode
|
6 | 22: out spl,r16 ;RAM-Ende setzen
|
7 | +00000002: FFFF ??? Data or unknown opcode
|
8 | 23: ldi r16,HIGH(RAMEND) ;Stackpointer (high) auf
|
9 | +00000003: FFFF ??? Data or unknown opcode
|
10 | 24: out sph,r16 ;RAM-Ende setzen
|
11 | +00000004: FFFF ??? Data or unknown opcode
|
12 | 27: ldi a1,255
|
13 | +00000005: FFFF ??? Data or unknown opcode
|
14 | 28: out ddra,a1
|
15 | +00000006: FFFF ??? Data or unknown opcode
|
16 | 29: out ddrb,a1
|
17 | +00000007: FFFF ??? Data or unknown opcode
|
18 | 30: out ddrc,a1
|
19 | +00000008: FFFF ??? Data or unknown opcode
|
20 | 31: out ddrd,a1
|
21 | +00000009: FFFF ??? Data or unknown opcode
|
22 | 36: sbi porta,1
|
23 | +0000000A: FFFF ??? Data or unknown opcode
|
24 | 37: nop
|
25 | +0000000B: FFFF ??? Data or unknown opcode
|
26 | 38: nop
|
27 | +0000000C: FFFF ??? Data or unknown opcode
|
28 | 39: nop
|
29 | +0000000D: FFFF ??? Data or unknown opcode
|
30 | 40: cbi porta,1
|
31 | +0000000E: FFFF ??? Data or unknown opcode
|
32 | 41: nop
|
33 | +0000000F: FFFF ??? Data or unknown opcode
|
34 | 42: nop
|
35 | +00000010: FFFF ??? Data or unknown opcode
|
36 | 43: rjmp hell
|
37 | +00000011: FFFF ??? Data or unknown opcode
|
38 | ---- No Source ------------------------------------------------------------------------------------
|
39 | +00000012: FFFF ??? Data or unknown opcode
|
40 | +00000013: FFFF ??? Data or unknown opcode
|
41 | +00000014: FFFF ??? Data or unknown opcode
|
42 | +00000015: FFFF ??? Data or unknown opcode
|
43 | +00000016: FFFF ??? Data or unknown opcode
|
44 | +00000017: FFFF ??? Data or unknown opcode
|
45 | +00000018: FFFF ??? Data or unknown opcode
|
46 | +00000019: FFFF
|
Manchmal (meistens) wird das Programm aber auch korrekt Schritt für
Schritt durchgesteppt, dennoch ändert sich in den Registern nichts und
es werden immer noch wild Ports getoggelt. Wenn er quasi im
"Einzelschrittmodus" ist, läuft das Programm einmal bis zum rjmp hell
und dann verschwindet wieder der gelbe Pfeil, wenn ich dann auf Pause
drücke, kommt das selbe Disassemblerfenster.
Wenn ich DDRA1 von Hand auf 1 setze,(indem ich auf des entsprechende
Kästchen drücke, das es schwarz wird) und dann porta,1 auf setze,
leuchtet die Diode auf, die ich dort angeschloßen habe.
Ich finds langsam irgendwie verwirrend..., bis grad konnte ich noch per
JTAG flashen, nun gibt er mir auch noch den Fehler "WARNING: FLASH byte
address 0x0000 is 0xFF (should be 0x1A).. FAILED!" aus...
Ich kann aber weiterhin Fuses auslesen und schreiben... Ich hoffe, ihr
könnt mir da irgendwie weiterhelfen =)
MfG jendrik