Hallo,
ich verwende den UC3 von Atmel mit 60 MHz. Das bedeutet, dass ein Takt
16,67ns benötigt.
Nun möchte ich den Ausgang eines GPIOs schalten und mache das durch
Schreiben einer festen Zahl auf das entsprechende (vorher fest
definierte) Register. Die CPU braucht also keine Adressen aus zu rechnen
oder Bitpositionen zu verschieben. Vereinfacht schaut der Code dann in
etwa so aus:
1 | uint32_t *register_setzen = &(port[xy].outputValueRegisterSet);
|
2 | uint32_t *register_loeschen = &(port[xy].outputValueRegisterClear);
|
3 |
|
4 | // start der Zeitmessung ab hier
|
5 |
|
6 | *register_setzen = 1; // bit 0 setzen
|
7 | *register_loeschen = 1; // bit 0 löschen
|
8 |
|
9 | // start der Zeitmessung bis hier
|
Eigentlich hat die CPU nicht viel zu tun und braucht nur zwei mal einen
festen Wert laden und diesen in eine feste Registeradresse zu schreiben.
Für diese Zwei Zeilen benötigt die CPU aber ganze 284ns (und ist somit
ein Riesen Vielfaches von den 16,67ns).
Das kann doch nicht normal sein, oder? Oder doch? Oder habe ich etwas
falsch gemacht/gedacht?