Ich habe mein Infineon-Relax-Kit für die maximale Frequenz (120 MHz) konfiguriert. Ich habe meinen SYSTick auf einen periodischen Interrupt von 10 ms eingestellt. Zum Energiesparen verwende ich einen WFI-Assembler-Befehl, wenn mein Prozessor im Leerlauf ist. WFI (Warten auf Interrupt) sollte den Prozessor in den Energiesparmodus versetzen, bis ein Interrupt auftritt. Also sollte mein Prozessor alle 10 ms aufwachen. Aber irgendwie hat dieser WFI-Befehl meine Interrupt-Frequenz auf fast das Dreifache verlangsamt und er wacht bei jedem dritten Interrupt auf. Was kann ein möglicher Grund dafür sein, dass WFI nicht bei jedem Interrupt aufwacht?
Ich kenne diese Geräte nicht, aber in der Bedienungsanleitung steht folgendes:
Der Sleep-Zustand des Systems entspricht dem Sleep-Zustand der CPU. Der Zustand wird über den WFI- oder WFE-Befehl der CPU eingegeben. In diesem Zustand wird der Takt zur CPU gestoppt. Die Quelle der Systemuhr kann geändert werden. Peripherieuhren werden gemäß dem SLEEPCR-Register torgesteuert.
Ein Blick auf die Registerbeschreibung SLEEPCR zeigt:
Field Bits Type Description
SYSSEL 0 rwh System Clock Selection Value
0 -> f OFI clock, 1 -> f PLL clock
Da der Rücksetzwert des Registers 0 ist, ist es standardmäßig auf Uhr. Welche läuft auf 36,5 MHz unkalibriert oder 24 MHz kalibriert. Es hat einen ziemlich großen Genauigkeitsbereich, wenn es unkalibriert ist (siehe Datenblatt ) von mindestens +-15%, zusammen mit der Tatsache, dass Sie während Ihrer Ausführung wieder einige Systicks mit 120 MHz erhalten, es könnte sich herausstellen, dass es sich um ungefähr 40 MHz handelt Durchschnitt.
Lösung (hoffentlich): Setzen Sie das SYSSEL-Bit auf 1.
Roger Rowland
Kerncode
Saqib Ahmed
Saqib Ahmed
Arsenal
Saqib Ahmed