AVR TWI Dauerschleife

Gast #5189938
Lesenswert?
• ▲
▼
Hallo,
ich versuche gerade das TWI Modul vom ATmega2560 zum laufen zu bringen.
Ein Ausschnitt meines C Codes sieht folgendermaßen aus:
1
  // Start
2
  TWCR |= (1 << TWINT) | (1 << TWSTA);
3

4
  while(!(TWSTA & (1 << TWINT)))
5
  {
6
  }

Leider bleibt das Programm aber immer an der While Schleife hängen.
Ich habe zuerst gedacht, dass das vermutlich so ist, weil die TWINT Flag 
aus irgendeinem Grund nicht gesetzt wird aber als ich das ganze mit dem 
Debugger und JTAG untersucht habe bin ich auf eine komische Stelle in 
der Disassemblierung gekommen:
1
TWCR |= (1 << TWINT) | (1 << TWSTA);
2
00000094  LDD R24,Z+0    Load indirect with displacement 
3
00000095  ORI R24,0xA0    Logical OR with immediate 
4
00000096  STD Z+0,R24    Store indirect with displacement 
5
00000097  RJMP PC-0x0000    Relative jump

Es macht doch überhaupt keinen Sinn, dass der Compiler hier ein RJMP 
PC-0x0000 hinsetzt!?
Das ist doch eine unendliche Schleife ohne eine Bedienung oder nicht?
Ich habe das ganze ausprobiert mit der O0 und O1 Optimierung und beides 
mal das gleiche Problem gehabt.

Vielleicht hat jemand eine Idee was da falsch läuft.
Gast #5189976
Lesenswert?
• ▲
▼
Wieso das denn?
Er springt doch quasi zur gleichen Stelle zurück was also eine 
unendliche Schleife ergeben würde.
Außerdem sehe ich das ja im Debugger.
Ich kann so viele Schritte weiter machen wie ich möchte und er bleibt 
immer an der gleichen Stelle nämlich bei 'RJMP PC-0x0000'.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.