Hallo,
die Standardmethode übergibt erst das Byte an das SPDR Register und wartet dann bis es wieder frei.
Man kann das auch umdrehen. Erst prüfen prüfen ob frei ist und dann das neue Byte an SPDR übergeben.
while (!(SPSR & (1 << SPIF))) // wait for transmission complete
;
SPDR = data; // Start transmission
Eines muss man dabei beachten. Bevor das aller erste Byte gesendet werden kann, muss etwas in das SPDR schreiben. Ich schreibe eine 0 rein im setup. Sonst wird das SPIF Flag nicht gelöscht.
Nur wie gesagt, ob das was bringt kommt drauf an. Wenn du alles hintereinander senden möchtest, sparst du nur die Zeit vom letzten Byte ein. Und die Pause zwischen den Bytes ist ein klitzeklein wenig kürzer. Mit 4MHz SPI dauert das senden eines Bytes ziemlich genau 2µs. Fragst du nicht per while sondern mit if ab und kannst damit möglicherweise kurz was anderes machen, wird bestimmt dein senden insgesamt langsamer. Denn 2µs (32 Takte) sind auch schnell verplempert. Das lohnt laut meiner Meinung nach nicht. Der Aufruf und verlassen einer ISR dauert bestimmt länger.
Weil das hier mal Thema war im Forum, vielleicht benötigst einen µC mit DMA Zugriff. Dann macht der das wirklich ohne weiteres zu tun selbstständig. Aber davon habe ich keine Ahnung.