Functions | |
void | FPUEnable (void) |
void | FPUDisable (void) |
void | FPUStackingEnable (void) |
void | FPULazyStackingEnable (void) |
void | FPUStackingDisable (void) |
void | FPUHalfPrecisionModeSet (uint32_t ui32Mode) |
void | FPUNaNModeSet (uint32_t ui32Mode) |
void | FPUFlushToZeroModeSet (uint32_t ui32Mode) |
void | FPURoundingModeSet (uint32_t ui32Mode) |
void FPUEnable | ( | void | ) |
Enables the floating-point unit.
This function enables the floating-point unit, allowing the floating-point instructions to be executed. This function must be called prior to performing any hardware floating-point operations; failure to do so results in a NOCP usage fault.
References HWREG, NVIC_CPAC, NVIC_CPAC_CP10_FULL, NVIC_CPAC_CP10_M, NVIC_CPAC_CP11_FULL, and NVIC_CPAC_CP11_M.
void FPUDisable | ( | void | ) |
Disables the floating-point unit.
This function disables the floating-point unit, preventing floating-point instructions from executing (generating a NOCP usage fault instead).
References HWREG, NVIC_CPAC, NVIC_CPAC_CP10_DIS, NVIC_CPAC_CP10_M, NVIC_CPAC_CP11_DIS, and NVIC_CPAC_CP11_M.
void FPUStackingEnable | ( | void | ) |
Enables the stacking of floating-point registers.
This function enables the stacking of floating-point registers s0-s15 when an interrupt is handled. When enabled, space is reserved on the stack for the floating-point context and the floating-point state is saved into this stack space. Upon return from the interrupt, the floating-point context is restored.
If the floating-point registers are not stacked, floating-point instructions cannot be safely executed in an interrupt handler because the values of s0-s15 are not likely to be preserved for the interrupted code. On the other hand, stacking the floating-point registers increases the stacking operation from 8 words to 26 words, also increasing the interrupt response latency.
References HWREG, NVIC_FPCC, NVIC_FPCC_ASPEN, and NVIC_FPCC_LSPEN.
void FPULazyStackingEnable | ( | void | ) |
Enables the lazy stacking of floating-point registers.
This function enables the lazy stacking of floating-point registers s0-s15 when an interrupt is handled. When lazy stacking is enabled, space is reserved on the stack for the floating-point context, but the floating-point state is not saved. If a floating-point instruction is executed from within the interrupt context, the floating-point context is first saved into the space reserved on the stack. On completion of the interrupt handler, the floating-point context is only restored if it was saved (as the result of executing a floating-point instruction).
This method provides a compromise between fast interrupt response (because the floating-point state is not saved on interrupt entry) and the ability to use floating-point in interrupt handlers (because the floating-point state is saved if floating-point instructions are used).
References HWREG, NVIC_FPCC, NVIC_FPCC_ASPEN, and NVIC_FPCC_LSPEN.
void FPUStackingDisable | ( | void | ) |
Disables the stacking of floating-point registers.
This function disables the stacking of floating-point registers s0-s15 when an interrupt is handled. When floating-point context stacking is disabled, floating-point operations performed in an interrupt handler destroy the floating-point context of the main thread of execution.
References HWREG, NVIC_FPCC, NVIC_FPCC_ASPEN, and NVIC_FPCC_LSPEN.
void FPUHalfPrecisionModeSet | ( | uint32_t | ui32Mode | ) |
Selects the format of half-precision floating-point values.
ui32Mode | is the format for half-precision floating-point value, which is either FPU_HALF_IEEE or FPU_HALF_ALTERNATE. |
This function selects between the IEEE half-precision floating-point representation and the Cortex-M processor alternative representation. The alternative representation has a larger range but does not have a way to encode infinity (positive or negative) or NaN (quiet or signaling). The default setting is the IEEE format.
References HWREG, NVIC_FPDSC, and NVIC_FPDSC_AHP.
void FPUNaNModeSet | ( | uint32_t | ui32Mode | ) |
Selects the NaN mode.
ui32Mode | is the mode for NaN results; which is either FPU_NAN_PROPAGATE or FPU_NAN_DEFAULT. |
This function selects the handling of NaN results during floating-point computations. NaNs can either propagate (the default), or they can return the default NaN.
References HWREG, NVIC_FPDSC, and NVIC_FPDSC_DN.
void FPUFlushToZeroModeSet | ( | uint32_t | ui32Mode | ) |
Selects the flush-to-zero mode.
ui32Mode | is the flush-to-zero mode; which is either FPU_FLUSH_TO_ZERO_DIS or FPU_FLUSH_TO_ZERO_EN. |
This function enables or disables the flush-to-zero mode of the floating-point unit. When disabled (the default), the floating-point unit is fully IEEE compliant. When enabled, values close to zero are treated as zero, greatly improving the execution speed at the expense of some accuracy (as well as IEEE compliance).
References HWREG, NVIC_FPDSC, and NVIC_FPDSC_FZ.
void FPURoundingModeSet | ( | uint32_t | ui32Mode | ) |
Selects the rounding mode for floating-point results.
ui32Mode | is the rounding mode. |
This function selects the rounding mode for floating-point results. After a floating-point operation, the result is rounded toward the specified value. The default mode is FPU_ROUND_NEAREST.
The following rounding modes are available (as specified by ui32Mode):
References HWREG, NVIC_FPDSC, and NVIC_FPDSC_RMODE_M.