wenn man eine 1 schreibt, wird das bit gelöscht, also auf 0 gesetzt. ich vermute mal dass da was technisches hintersteckt, auch die fusebits sind beim AVR umgekehrt. wenn man eine 1 liest, bedeutet dass dass alles gesendet wurde. wenn man dann eine 1 reinschreibt, wird das bit auf 0 zurückgesetzt.

der interrupt könnte aber auch mit einer return-anweisung angenommen werden... dann wäre das bit schnell gecleared.

das mit dem UDRE bit hat sich dann wohl erledigt... ich glaube mich zu erinnern, dass es nur das sendende UDR register betrifft.

aber was haltet ihr davon?
es gibt im GCC eine vordefinierte funktioN:

loop_while_bit_is_clear(REGISTER,BIT);

wenn man da das statusregister und TXC einsetzt, loopt die funktion so lange wie das bit nicht gesetzt ist. würde man diese funktion am ende von serwrite anfügen, müsste die funktion so lange warten, bis der transffer wirklich fertig ist.