@Slyd die Idee mit dem "zwar received aber noch nicht verarbeitet" werde ich genauer prüfen, zur Zeit hab ich den Eindruck das die Zeichen wirklich verloren gehen - das lässt sich aber genau rausfinden. Danke für den Tip.
@Betatesters, ein kleines update in RP6I2CTWI.h. ich hatte es schon oben editiert aber hier noch mal:
Bitte
#define I2CTWI_isBusy() ((TWCR & (1<<TWINT)))
durch
#define I2CTWI_isBusy() (bit_is_set(TWI_statusReg,STR_isr))
ersetzen.
Hintergrund ist, das TWINT Bit spielt für die Übertragung eines kompetten "Satzbaus" im TWI (Start Daten Stop) keine Rolle, eine Aussage darüber ob die TWI frei ist gibt hingegen das STR_isr in TWI_statusReg (abhängig von der Stop condition) , folglich muss das geändert werden. Die (blockierenden) Lowlevelfunktionen warten eh auf das STR_isr aber um festzustellen ob ein Task Rechenzeit braucht - wie in dem Master testprogramm - sollte es natürlich die richtigen Bedingungen abfragen.
Das TWINT spielt in der ganzen Übertragung übrigends garkeine Rolle mehr da wir nicht mehr das TWI als Registerset pollen sondern wirklich nur auf Interrupts reagieren und in den Lowlevelfunktionen die TWI Übertragung als "Satz" sehen. Damit werden u.a. unzulässig fehlende Stops unterbunden. Ein deutliches Zeichen das es vorran geht. Im Slavemode kann ein eintreffendes Byte die ISR übrigends auch blockieren so das verhindert wird, das ein Mastertask aktiv wird wärend Daten reinkommen... da arbeite ich aber grade dran. Das wird auch das counten/vergleichen in Dirks Slave Programm erleichtern bzw. die dort aufgeworfenen Fragen klären helfen.
LG RolfD