1 /* --COPYRIGHT--,BSD
2 * Copyright (c) 2017, Texas Instruments Incorporated
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 *
12 * * Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 *
16 * * Neither the name of Texas Instruments Incorporated nor the names of
17 * its contributors may be used to endorse or promote products derived
18 * from this software without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 * --/COPYRIGHT--*/
32 #include <ti/devices/msp432p4xx/driverlib/fpu.h>
33
FPU_enableModule(void)34 void FPU_enableModule(void)
35 {
36 //
37 // Enable the coprocessors used by the floating-point unit.
38 //
39 SCB->CPACR = ((SCB->CPACR & ~(SCB_CPACR_CP11_MASK | SCB_CPACR_CP10_MASK))
40 | SCB_CPACR_CP11_MASK | SCB_CPACR_CP10_MASK);
41 }
42
FPU_disableModule(void)43 void FPU_disableModule(void)
44 {
45 //
46 // Disable the coprocessors used by the floating-point unit.
47 //
48 SCB->CPACR = ((SCB->CPACR & ~(SCB_CPACR_CP10_MASK | SCB_CPACR_CP11_MASK)));
49 }
50
FPU_enableStacking(void)51 void FPU_enableStacking(void)
52 {
53 //
54 // Enable automatic state preservation for the floating-point unit, and
55 // disable lazy state preservation (meaning that the floating-point state
56 // is always stacked when floating-point instructions are used).
57 //
58 FPU->FPCCR = (FPU->FPCCR & ~FPU_FPCCR_LSPEN_Msk) | FPU_FPCCR_ASPEN_Msk;
59 }
60
FPU_enableLazyStacking(void)61 void FPU_enableLazyStacking(void)
62 {
63 //
64 // Enable automatic and lazy state preservation for the floating-point
65 // unit.
66 //
67 FPU->FPCCR |= FPU_FPCCR_ASPEN_Msk | FPU_FPCCR_LSPEN_Msk;
68 }
69
FPU_disableStacking(void)70 void FPU_disableStacking(void)
71 {
72 //
73 // Disable automatic and lazy state preservation for the floating-point
74 // unit.
75 //
76 FPU->FPCCR &= ~(FPU_FPCCR_ASPEN_Msk | FPU_FPCCR_LSPEN_Msk);
77 }
78
FPU_setHalfPrecisionMode(uint32_t mode)79 void FPU_setHalfPrecisionMode(uint32_t mode)
80 {
81 //
82 // Set the half-precision floating-point format.
83 //
84 FPU->FPDSCR = (FPU->FPDSCR & ~(FPU_FPDSCR_AHP_Msk)) | mode;
85 }
86
FPU_setNaNMode(uint32_t mode)87 void FPU_setNaNMode(uint32_t mode)
88 {
89 //
90 // Set the NaN mode.
91 //
92 FPU->FPDSCR = (FPU->FPDSCR & ~(FPU_FPDSCR_DN_Msk)) | mode;
93 }
94
FPU_setFlushToZeroMode(uint32_t mode)95 void FPU_setFlushToZeroMode(uint32_t mode)
96 {
97 //
98 // Set the flush-to-zero mode.
99 //
100 FPU->FPDSCR = (FPU->FPDSCR & ~(FPU_FPDSCR_FZ_Msk)) | mode;
101 }
102
FPU_setRoundingMode(uint32_t mode)103 void FPU_setRoundingMode(uint32_t mode)
104 {
105 //
106 // Set the rounding mode.
107 //
108 FPU->FPDSCR = (FPU->FPDSCR & ~(FPU_FPDSCR_RMode_Msk)) | mode;
109 }
110
111