From 6f30e76c61ceab409302117f1bb66d72f43a0de4 Mon Sep 17 00:00:00 2001 From: Alexandru Gagniuc Date: Sat, 12 Mar 2016 10:06:48 -0800 Subject: [PATCH] lm4f: Enable FPU using the vector_chipset hook Newlib and arm-non-eabi-gcc likes to use the FPU by default on Cortex-M4F chips. AS a result, do the right thing and enable the FPU by default. This fixes issues where code is generated which uses the FPU and causes the CPU to hard-fault. This change removes the responsibility of FPU initialization from the application code. This makes the lm4f consistent with other M4+ devices that enable the FPU in core library startup code. Signed-off-by: Karl Palsson --- lib/dispatch/vector_chipset.c | 2 ++ lib/lm4f/vector_chipset.c | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 lib/lm4f/vector_chipset.c diff --git a/lib/dispatch/vector_chipset.c b/lib/dispatch/vector_chipset.c index e9c334e0..2515664f 100644 --- a/lib/dispatch/vector_chipset.c +++ b/lib/dispatch/vector_chipset.c @@ -6,6 +6,8 @@ # include "../stm32/f7/vector_chipset.c" #elif defined(STM32L4) # include "../stm32/l4/vector_chipset.c" +#elif defined(LM4F) +# include "../lm4f/vector_chipset.c" #elif defined(LPC43XX_M4) # include "../lpc43xx/m4/vector_chipset.c" #elif defined(VF6XX) diff --git a/lib/lm4f/vector_chipset.c b/lib/lm4f/vector_chipset.c new file mode 100644 index 00000000..894fded7 --- /dev/null +++ b/lib/lm4f/vector_chipset.c @@ -0,0 +1,24 @@ +/* + * This file is part of the libopencm3 project. + * + * Copyright (C) 2016 Alexandru Gagniuc + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +static void pre_main(void) +{ + /* Enable FPU */ + SCB_CPACR |= SCB_CPACR_FULL * (SCB_CPACR_CP10 | SCB_CPACR_CP11); +}