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 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 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 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 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 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 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 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 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 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