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

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