AVR Studio 4.17 - IRQ Vektoren - Bug ?

Gast #2482402
Lesenswert?

Moin, Moin,

ich bin ein rechter Assembler dummy. Aber ich mühe mich ....
Nun wollte ich mir ein paar TWI Slaves basteln, die haben wenig aber
"schnell" zu tun.
Die Hardware ist noch nicht fertig, so habe ich mich AVR Studio an die
Firmware gemacht und simuliert.
Ich verstehe es nicht, ich möchte den TWI Interrupt benutzen,
der Simulator geht auch mit PC 0x0018 an die richtige Stelle nur die 
Tabelle ist "krum".
Ohne das .org $18 ist da schon Programcode und es macht Quatsch.

Sollte nicht jeder Vektor 2 Byte belegen ?

Grüße Werner
Angehängte Dateien:
#2482433
Lesenswert?

Der Memory Dump stimmt doch mit dem überein was du programmiert hast.
Genau auf hex 18 ist der Jump zu deinem Handler eingetragen.

Ob das jetzt zum Mega48 passt weiß ich nicht. In solchen Fällen ziehe 
ich die symbolischen Namen direkten Zahlenangaben vor. Denn die stimmen, 
wenn das jeweilige inc File korrekt erzeugt wurde (wovon ich bei einem 
Atmel Produkt erst mal ausgehe)
#2482449
Lesenswert?

Werner schrieb:
> Mhmm.
>
> Ich habe mich an den ATmega8 gehalten.
> Das Datenblatt von AVR für den 48er schweigt sich aus,

Wie bitte?

http://www.atmel.com/dyn/resources/prod_documents/doc2545.pdf

Seite 59

> Es beschreibt eigentlich nur Unterschiede.

Ähm. Du musst schon ins richtige Datenblatt schauen und nicht in 
irgendein Verkaufs-Summary-Datenblatt für BWL Leute
#2482464
Lesenswert?

Werner schrieb:
> Das geht schneller als ich tippe...
>
> include "m48def.inc" habe ich da drin.
> Das Enviorment sthet auf ATmega48.
> Der Simulator will dann auf TWI bei $18 eingenordet werden.
> Nur der Code erzeugt nicht alle RETIs ?

Weil dein  Code nicht alle Interrupt Vektoren mir rjmp belegt, die der 
Mega48 hat.
Zähl doch mal nach: Du hast vor dem .org $18 insgesamt 17 Handler 
eingetragen (16 Handler ud ein Sprung beim Reset). $18 ist aber HEX 18, 
also dezimal 24. Logisch, dass da eine Lücke ist, die du im Memory Dump 
siehst. Aber wenn du im Memory Dump wieder abzählst, wieviele 
Ret-Instruktionen da sind, dann sind es wieder 16.
Gast #2482477
Lesenswert?

>Der Simulator will dann auf TWI bei $18 eingenordet werden.
Den Satz verstehe ich nicht.

Du hast ein ganz anderes Problem.
Entweder Du definierst in Deinem Code nur einen Teil der 
Interruptvectoren oder alle.
Im ersten Fall brauchst Du nach den Lücken in deinen rjmps ein .org 
sonst folgt der nächste rjmp direkt, also an falscher Stelle.
Das ist hier am Anfang der Fall, weil z.B.
1
0x003 rjmp PCINT0 ; PCINT0 Handler
2
0x004 rjmp PCINT1 ; PCINT1 Handler
3
0x005 rjmp PCINT2 ; PCINT2 Handler

fehlen.
Deswegen steht bei fehlendem .org 18 da schon Code.

Oder definiere einfach alle Interrupt Vektoren.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren