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
Hi, das war schnell. Frohes Neues ... Es soll ein DDS mit ATmega48 werden, Nicht perfekt, TwoWire im extended IO, sie liegen aber rum :0) mfg Werner
Hi
>Es soll ein DDS mit ATmega48 werden,
Das ist aber nicht die Interruptvektortabelle vom ATMega48.
MfG Spess
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)
Hi
>Ob das jetzt zum Mega48 passt weiß ich nicht.
Nein, passt nicht. Seine stammt vom ATMega8.
MfG Spess
Mhmm. Ich habe mich an den ATmega8 gehalten. Das Datenblatt von AVR für den 48er schweigt sich aus, oder ich finde das Richtige nicht Es beschreibt eigentlich nur Unterschiede. Der Simulator erwartet den Vektor auf jeden Fall an der Adresse des 8er. Wie tickt denn dann der reale 48er? mfg Werner
Werner schrieb: > Es beschreibt eigentlich nur Unterschiede. Dann hast du wohl nicht das Datenblatt, sondern eine migration appnote oder sowas.
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
Seite 56 aber das mit den rjmps (Ein-Wort Einträge) stimmt.
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 ?
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.
Hi
>Nur der Code erzeugt nicht alle RETIs ?
Weil der ATMega48 mehr Interrupts besitzt und der für TWI deshalb an
einer anderen Stelle liegt.
Also Code anpassen.
MfG Spess
So was schreibt man so
1 | rjmp Reset |
2 | |
3 | .org TWIaddr |
4 | rjmp TwiHandler |
5 | |
6 | .org INT_VECTORS_SIZE |
7 | Reset: .... |
dann kann dir völlig egal sein, wo genau im Speicher der Vektor sein muss. Und es braucht dich auch nicht zu interessieren, dass es der 24.te ist.
>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.
Karl Heinz Buchegger schrieb: > Und es braucht dich auch nicht zu interessieren, dass es der 24.te > ist. Ist es auch gar nicht. Es ist der 18. Er hat Vector-Nummer und Adresse verwechselt.
Danke, Danke, ich habe aus dem Link nun das "richtige" Datenblatt. Keine "migration" PR mehr. Das passt jetzt schon. Aller Mühsam ist Anfang oder was war da schwer ?
Stefan Ernst schrieb: > Karl Heinz Buchegger schrieb: >> Und es braucht dich auch nicht zu interessieren, dass es der 24.te >> ist. > > Ist es auch gar nicht. richtig. Es ist der 25.te. Mein Fehler. > Es ist der 18. Er hat Vector-Nummer und Adresse > verwechselt. Du hast gerade hex und dezimal verwechselt. genau wie der TO
Karl Heinz Buchegger schrieb: >> Es ist der 18. Er hat Vector-Nummer und Adresse >> verwechselt. > > Du hast gerade hex und dezimal verwechselt. genau wie der TO Nee, viel schlimmer, ich habe TWI und SPI verwechselt. :-D
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.