STM32F3 – Initialisierung der Floating-Point-Unit (FPU)

 

Besonders im Automotive- und Medizintechnikbereich finden sich häufig Anwendungen, die eine genaue Temperaturmessung mit bis zu sechs Nachkommastellen erfordern. Bei Embeddedsystemen ist dabei die Nutzung von hardwareseitiger Rechenbeschleunigung durch Floating-Point-Units (FPUs) sehr sinnvoll. Die STM32F3-Serie bietet sich unter anderem dazu an, da sie auf der Cortex-M4F-Serie aufgebaut ist, die eine FPU als Koprozessor integriert hat.

Die FPU ist Feature von ARM und gehört zu den engsten Kernfunktionen des Controllers. Anders als zu NVIC finden sich dazu allerdings sehr wenige Informationen in den Handbüchern von STM-Controllern oder im Internet. Deshalb soll hier die Initialisierung näher erläutert werden.

Die FPU ist nach einem Reset deaktiviert. Um sie zu aktivieren muss im System Kontrollregister – SCB (Systemcontrol register) – deshalb auf das Koprozessoren-Zugangsregister – CPACR (Coprocessor Access Control Register) – zugegriffen und dort die Bits 20 und 21 gesetzt werden. Dadurch erhält der Nutzer vollen Zugriff auf die FPU. Standardweise sind beide Bits zu 0 gesetzt, wodurch nicht auf die Koprozessoren zugegriffen werden kann.

Bei der konkreten Implementierung und der Verwendung von Makefiles müssen bei der Codegenerierung verschiedene Flags gesetzt werden und die CMSIS-Datenbank eingebunden werden.

Der Pfad der Datei core_cm4.h muss im Makefile inkludiert sein.
Diese liegt typischer Weise im relativen Pfad: ./CMSIS/Device/ARM/ARMCM4/Include.

Darüber hinaus müssen die folgenden Flags zur Verwendung der FPU gesetzt werden:


MC_FLAG += -D__FPU_PRESENT=1
LFLAGS  += -mfloat-abi=hard -mfpu=fpv4-sp-d16
CFLAGS   += -mfloat-abi=hard -mfpu=fpv4-sp-d16

Sind diese Voreinstellungen vorgenommen, ist die folgende Zeile ausreichend, um die FPU daraufhin verwenden zu können:


SCB->CPACR = 0x00F00000;

Die Initialisierung der FPU muss nach der Initialisierung des Systemtaktes erfolgen.

 

 

Stichworte: , , , ,

Geschrieben in: Fachbeiträge


Hinterlasse eine Antwort