Peet schrieb:
> dann werde ich wohl damit leben müssen. Vielleicht
> probiere ich das mit der PLL noch..
Die Verwendung des Toggle-Registers bringt leider auch nichts, außer
dass dar Takt symmetrisch wird (50% Tastverhältnis), dafür aber 8 Zyklen
dauert. Wenn nur wenige Taktzyklen benötigt werden, könntest Du alle
Toggle-Zugriffe hintereinander schreiben (Loop unrolling).
Vielleicht bringt die Verwendung eines virtuellen Ports eine
Verbesserung, da deren Adressen beim 32a4u auf 0x0010, 0x0014, 0x0018
und 0x001C liegen.
Leider kennen die virtuellen Ports keine Set- und Clear-Register. Du
müsstest also alle Ausgangsportpins beschreiben.
Grüßle
Volker
Nachtrag: Tatsächlich, beim Zugriff auf einen virtuellen Port
VPORT1.OUT = 0b00010000 ;
VPORT1.OUT = 0;
Liefert avr-gcc:
.L3:
out 0x15,r24
out 0x15,__zero_reg__
rjmp .L3
Jetzt habe ich endlich verstanden, welchen Sinn diese virtuellen Ports
haben :-)
...und noch ein Nachtrag zum Nachtrag: Bei den VPORT-Registern
funktionieren die Bit-Setz und -Löschbefehle
VPORT1.OUT |= 0b00010000;
VPORT1.OUT &= ~0b00010000;
liefert somit
.L3:
sbi 0x15,4
cbi 0x15,4
rjmp .L3
und sollte somit die gleiche Performance wie beim AVR liefern.