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.