In den TWI Routinen
So etwas
1 | ...
|
2 | while((TWSR & 0xF8)!= 0x10); // prueft acknowledgement
|
3 | ...
|
ist mutig. Wenn du kein Acknowledge kriegst, dann ist das ein Fehler! Da
kann dein Code solange warten wie er will, wenn nach dem Abwarten der
Kommunikation kein Acknowledge vorliegt, dann kommt der auch nicht mehr.
-> Im Fehlerfall hast du eine Endlosschleife.
Abgesehen davon: was bzw. welche Subsysteme hast du denn schon
unabhängig vom Gesamtprojekt einzeln getestet? Funktioniert die UART?
Funktionert die Steuerung in Data_Sync? Hast du die TWI Funktionen schon
mal losgelöst von der Aufgabenstellung getestet. Zb. in dem du mit einer
LED kontrolliert hast, ob du entsprechende Reaktionen vom BAM kriegst?
Hast du deine Statemachine in der ISR soweit getestet, dass sie richtig
reagiert, selbst wenn du die TWI Kommunikation da einfach mal durch eine
Fake-Variante ersetzt, die einfach mal irgendwelche Werte in das
DataArray einträgt und du im Frontend nachsiehst, ob die auch
tatsächlich ankommen.
Oder ist das wieder mal so ein Thread, wo du tage- bzw. wochenlang Code
produziert hast, ohne den in irgendeiner Form zwischendurch immer wieder
mal zu testen und dich dann wunderst, warum das Gesamtsystem nicht auf
Anhieb funktioniert und du keine Ahnung hast, wo du mit der Fehlersuche
auch nur anfangen sollst?
Denn: so etwas ist gerade bei unerfahrenen Neulingen immer ein schwerer
Fehler! Man produziert nicht massig Code in der Annahme, man würde das
schon auf Anhieb fehlerfrei bewältigen können.