Nachdem Sie eine Uhr für einen bestimmten Port aktiviert haben, müssen Sie 4 Zyklen warten, bis die Uhr die Initialisierung abgeschlossen hat. Wie kann man richtig auf N Zyklen warten?
In meinem Code habe ich das verwendet:
__asm("nop");
__asm("nop");
__asm("nop");
__asm("nop");
Danach scheint die uKeil IDE aufzuhören, sich zu beschweren.
Dies ist eine Methode von hier :
volatile unsigned long delay;
SYSCTL_RCGC2_R |= 0x00000010; // 1) activate clock for Port E
delay = SYSCTL_RCGC2_R; // allow time for clock to stabilize
Sie könnten uns auch die Uhr(en) einrichten und für ein paar Zyklen etwas anderes tun (etwas initialisieren), aber das ist ein potenzieller Fehler in der Zukunft.
Bearbeiten: Die Dummy-Zeile kompiliert zu:
400286: 681b ldr r3, [r3, #0]
400288: 9301 str r3, [sp, #4]
Auf dem Cortex M4
ldr ist 2 Zyklen
str ist 2 Zyklen
Siehe hier für M4-Zykluszählungen.
Das Schlüsselwort volatile verhindert, dass die Anweisungen ldr und str kombiniert werden, wie ich es verstehe.
krass
Ayhan
Oldtimer
Oldtimer