Hallo Rolf,
mein Workaround sieht jetzt so aus und funtioniert einwandfrei:
Code
procedure onsystick;
begin
asm; // auf AD-Wandlung warten, falls Systick "überfahren" wurde
ADC10endLoop1:
in _ACCB, ADCSRA
sbrc _ACCB,6 // auf Bit 6 low warten
rjmp ADC10endLoop1
endasm;
...
end;
OnSysTick wird ja zum Glück aufgerufen,
bevor der Timer-Interrupt die ADC-Register ausliest. Sollte der ADC zufällig noch nicht fertig sein, weil der letzte Systick "überfahren" wurde (d.h. beispielsweise weil der Receive-Interrupt dicht war und ein Systick unmittelbar dem nächsten folgt), wartet die kleine Schleife auf das Ende der Wandlung - und nur dann (sonst ist der ADC ja ohnehin fertig). Dieser
eine Systick-Interrupt dauert dann halt 100us länger (bei einem Prescaler von 128), sonst bleibt alles wie es war.
Ansonsten: Großes Lob für den AVRCo und den super Support -- muss einfach mal gesagt werden!