@Dirk, ich kann dich beruhigen.. bzw. uns 
Ich habe dein Testprogramm nun so umgebaut, das es exakt 1000 Pakete sendet... und auf der Base nachgeschaut wieviel IRQs reinkommen bzw. wie oft die ISR aufgerufen wird. Bei 1000 sind es exakt 6000 Aufrufe - je 4 für 4 Datenbytes und 1 für start, 1 für stop ... macht 6000. nicht ein mal mehr oder weniger.
Die Sorge, das der Prozessor also was nicht mitbekommt war zum Glück unbegründet, die Errors haben nur mit dem Laufzeitverhalten der ansyncronen Datenübertragung zu tun. Das relativiert auch Aussagen zum Slavemode oben... er ist wohl stabil. Allerdings gibts doch einiges zu beachten was das Timing zwischen Base und M32 angeht - wie unsere Diskussion heute zeigte. Ich bin froh das sich das so aufgelöst hat. Aber weiter gehts, die Kuh ist noch nicht vom Eis.
LG Rolf
Das noch als Anhang:
Code:
// if (I2CTWI_writeRegisters[0] && !I2CTWI_writeBusy) {
//I2CTWI_writeBusy ist eine Statusvariable der ISR die so nicht mehr nötig ist
//und unterstützt wird. Statt dessen bitte wie im Master I2CTWI_isBusy() nutzen.
//ret=0 isr frei, 1= isr belegt
if (I2CTWI_writeRegisters[0] && !I2CTWI_isBusy()) {
EDIT:
Nach reiflicher Überlegung und überschlafen des Problems mit Dirks Programm überlege ich nun, ob ich das verhalten der TWI dahingehend ändern soll, das nach einem Schreibvorgang auf den Slave das TWI NACKs senden soll bis der Slavecode quasi signalisiert das die Daten verarbeitet wurden. Das Entspricht auch dem Verhalten von EEPROMS und ähnlichen Bausteinen und würde das überschreiben unverarbeiteter Register im Slave nachhaltig verhindern. Jedoch muss der Slave dann zusätzlich über ein bitset eines Flags das Empfangen/Verarbeiten quitieren. Ggf muss auch der Mastercode verändert werden, so das er ein retransmit versucht bis keine NACKs mehr kommen (was ich aber komplett in der Lib regeln kann) Das bedeutet natürlich weitere kleine Änderungen an vorhandenen Programmen im Slavemode, macht aber die Synconisation zwischen Master und Slave absolut sicher, laufzeitunkritisch und conform zu anderen Bauteilen. Es würde aber auch die Prüfung im Slave erleichtern, ob er was zu tun hat - er braucht nur eben dieses Flag zu befragen.
Meinungen?
EDIT: Je länger ich drüber nachdenke, um so mehr frag ich mich warum ich das noch nicht umgesetzt hab... 
EDIT: Oh Ohhh.... @Fabian, deine 2400 Fehler erklären sich grade noch aus einem Punkt, der mir beim mergen der Dateien unterlaufen ist. Es ist nicht nur dein timing... Ich denke, heute Abend gibts ne neue Beta Version zum testen für alle. Dann aber schon mit der Funktion aus edit 1. Dazu sag ich aber dann noch mehr.
EDIT: hat jemand vielleicht ne schließende Klammer übrig, ich hab eine in der ISR verbummelt *seufz
Noch'n EDIT: ich hab sie... www.prettyprinter.de sei dank 
Und der letzte EDIT für heute....
Leider wird das wohl nichts mit der Beta für heute Abend. Das System reagiert auf NACKs nicht richtig (harmlos ausgedrückt...) , weder in der ISR noch im Mastercode (Fehlerbehandlung, Retransmit usw.) Das wird dauern bis ich das laufen hab. Sorry.
Lesezeichen