| /**************************************************************************//** | |||||
| * @file ARMCM4.h | |||||
| * @brief CMSIS Core Peripheral Access Layer Header File for | |||||
| * ARMCM4 Device (configured for CM4 without FPU) | |||||
| * @version V5.3.1 | |||||
| * @date 09. July 2018 | |||||
| ******************************************************************************/ | |||||
| /* | |||||
| * Copyright (c) 2009-2018 Arm Limited. All rights reserved. | |||||
| * | |||||
| * SPDX-License-Identifier: Apache-2.0 | |||||
| * | |||||
| * Licensed under the Apache License, Version 2.0 (the License); you may | |||||
| * not use this file except in compliance with the License. | |||||
| * You may obtain a copy of the License at | |||||
| * | |||||
| * www.apache.org/licenses/LICENSE-2.0 | |||||
| * | |||||
| * Unless required by applicable law or agreed to in writing, software | |||||
| * distributed under the License is distributed on an AS IS BASIS, WITHOUT | |||||
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
| * See the License for the specific language governing permissions and | |||||
| * limitations under the License. | |||||
| */ | |||||
| #ifndef ARMCM4_H | |||||
| #define ARMCM4_H | |||||
| #ifdef __cplusplus | |||||
| extern "C" { | |||||
| #endif | |||||
| /* ------------------------- Interrupt Number Definition ------------------------ */ | |||||
| typedef enum IRQn | |||||
| { | |||||
| /* ------------------- Processor Exceptions Numbers ----------------------------- */ | |||||
| NonMaskableInt_IRQn = -14, /* 2 Non Maskable Interrupt */ | |||||
| HardFault_IRQn = -13, /* 3 HardFault Interrupt */ | |||||
| MemoryManagement_IRQn = -12, /* 4 Memory Management Interrupt */ | |||||
| BusFault_IRQn = -11, /* 5 Bus Fault Interrupt */ | |||||
| UsageFault_IRQn = -10, /* 6 Usage Fault Interrupt */ | |||||
| SVCall_IRQn = -5, /* 11 SV Call Interrupt */ | |||||
| DebugMonitor_IRQn = -4, /* 12 Debug Monitor Interrupt */ | |||||
| PendSV_IRQn = -2, /* 14 Pend SV Interrupt */ | |||||
| SysTick_IRQn = -1, /* 15 System Tick Interrupt */ | |||||
| /* ------------------- Processor Interrupt Numbers ------------------------------ */ | |||||
| Interrupt0_IRQn = 0, | |||||
| Interrupt1_IRQn = 1, | |||||
| Interrupt2_IRQn = 2, | |||||
| Interrupt3_IRQn = 3, | |||||
| Interrupt4_IRQn = 4, | |||||
| Interrupt5_IRQn = 5, | |||||
| Interrupt6_IRQn = 6, | |||||
| Interrupt7_IRQn = 7, | |||||
| Interrupt8_IRQn = 8, | |||||
| Interrupt9_IRQn = 9 | |||||
| /* Interrupts 10 .. 224 are left out */ | |||||
| } IRQn_Type; | |||||
| /* ================================================================================ */ | |||||
| /* ================ Processor and Core Peripheral Section ================ */ | |||||
| /* ================================================================================ */ | |||||
| /* ------- Start of section using anonymous unions and disabling warnings ------- */ | |||||
| #if defined (__CC_ARM) | |||||
| #pragma push | |||||
| #pragma anon_unions | |||||
| #elif defined (__ICCARM__) | |||||
| #pragma language=extended | |||||
| #elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) | |||||
| #pragma clang diagnostic push | |||||
| #pragma clang diagnostic ignored "-Wc11-extensions" | |||||
| #pragma clang diagnostic ignored "-Wreserved-id-macro" | |||||
| #elif defined (__GNUC__) | |||||
| /* anonymous unions are enabled by default */ | |||||
| #elif defined (__TMS470__) | |||||
| /* anonymous unions are enabled by default */ | |||||
| #elif defined (__TASKING__) | |||||
| #pragma warning 586 | |||||
| #elif defined (__CSMC__) | |||||
| /* anonymous unions are enabled by default */ | |||||
| #else | |||||
| #warning Not supported compiler type | |||||
| #endif | |||||
| /* -------- Configuration of Core Peripherals ----------------------------------- */ | |||||
| #define __CM4_REV 0x0001U /* Core revision r0p1 */ | |||||
| #define __MPU_PRESENT 1U /* MPU present */ | |||||
| #define __VTOR_PRESENT 1U /* VTOR present */ | |||||
| #define __NVIC_PRIO_BITS 3U /* Number of Bits used for Priority Levels */ | |||||
| #define __Vendor_SysTickConfig 0U /* Set to 1 if different SysTick Config is used */ | |||||
| #define __FPU_PRESENT 0U /* no FPU present */ | |||||
| #include "core_cm4.h" /* Processor and core peripherals */ | |||||
| #include "system_ARMCM4.h" /* System Header */ | |||||
| /* -------- End of section using anonymous unions and disabling warnings -------- */ | |||||
| #if defined (__CC_ARM) | |||||
| #pragma pop | |||||
| #elif defined (__ICCARM__) | |||||
| /* leave anonymous unions enabled */ | |||||
| #elif (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)) | |||||
| #pragma clang diagnostic pop | |||||
| #elif defined (__GNUC__) | |||||
| /* anonymous unions are enabled by default */ | |||||
| #elif defined (__TMS470__) | |||||
| /* anonymous unions are enabled by default */ | |||||
| #elif defined (__TASKING__) | |||||
| #pragma warning restore | |||||
| #elif defined (__CSMC__) | |||||
| /* anonymous unions are enabled by default */ | |||||
| #else | |||||
| #warning Not supported compiler type | |||||
| #endif | |||||
| #ifdef __cplusplus | |||||
| } | |||||
| #endif | |||||
| #endif /* ARMCM4_H */ |
| /**************************************************************************//** | |||||
| * @file ARMCM4_FP.h | |||||
| * @brief CMSIS Core Peripheral Access Layer Header File for | |||||
| * ARMCM4 Device (configured for CM4 with FPU) | |||||
| * @version V5.3.1 | |||||
| * @date 09. July 2018 | |||||
| ******************************************************************************/ | |||||
| /* | |||||
| * Copyright (c) 2009-2018 Arm Limited. All rights reserved. | |||||
| * | |||||
| * SPDX-License-Identifier: Apache-2.0 | |||||
| * | |||||
| * Licensed under the Apache License, Version 2.0 (the License); you may | |||||
| * not use this file except in compliance with the License. | |||||
| * You may obtain a copy of the License at | |||||
| * | |||||
| * www.apache.org/licenses/LICENSE-2.0 | |||||
| * | |||||
| * Unless required by applicable law or agreed to in writing, software | |||||
| * distributed under the License is distributed on an AS IS BASIS, WITHOUT | |||||
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
| * See the License for the specific language governing permissions and | |||||
| * limitations under the License. | |||||
| */ | |||||
| #ifndef ARMCM4_FP_H | |||||
| #define ARMCM4_FP_H | |||||
| #ifdef __cplusplus | |||||
| extern "C" { | |||||
| #endif | |||||
| /* ------------------------- Interrupt Number Definition ------------------------ */ | |||||
| typedef enum IRQn | |||||
| { | |||||
| /* ------------------- Processor Exceptions Numbers ----------------------------- */ | |||||
| NonMaskableInt_IRQn = -14, /* 2 Non Maskable Interrupt */ | |||||
| HardFault_IRQn = -13, /* 3 HardFault Interrupt */ | |||||
| MemoryManagement_IRQn = -12, /* 4 Memory Management Interrupt */ | |||||
| BusFault_IRQn = -11, /* 5 Bus Fault Interrupt */ | |||||
| UsageFault_IRQn = -10, /* 6 Usage Fault Interrupt */ | |||||
| SVCall_IRQn = -5, /* 11 SV Call Interrupt */ | |||||
| DebugMonitor_IRQn = -4, /* 12 Debug Monitor Interrupt */ | |||||
| PendSV_IRQn = -2, /* 14 Pend SV Interrupt */ | |||||
| SysTick_IRQn = -1, /* 15 System Tick Interrupt */ | |||||
| /* ------------------- Processor Interrupt Numbers ------------------------------ */ | |||||
| Interrupt0_IRQn = 0, | |||||
| Interrupt1_IRQn = 1, | |||||
| Interrupt2_IRQn = 2, | |||||
| Interrupt3_IRQn = 3, | |||||
| Interrupt4_IRQn = 4, | |||||
| Interrupt5_IRQn = 5, | |||||
| Interrupt6_IRQn = 6, | |||||
| Interrupt7_IRQn = 7, | |||||
| Interrupt8_IRQn = 8, | |||||
| Interrupt9_IRQn = 9 | |||||
| /* Interrupts 10 .. 224 are left out */ | |||||
| } IRQn_Type; | |||||
| /* ================================================================================ */ | |||||
| /* ================ Processor and Core Peripheral Section ================ */ | |||||
| /* ================================================================================ */ | |||||
| /* ------- Start of section using anonymous unions and disabling warnings ------- */ | |||||
| #if defined (__CC_ARM) | |||||
| #pragma push | |||||
| #pragma anon_unions | |||||
| #elif defined (__ICCARM__) | |||||
| #pragma language=extended | |||||
| #elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) | |||||
| #pragma clang diagnostic push | |||||
| #pragma clang diagnostic ignored "-Wc11-extensions" | |||||
| #pragma clang diagnostic ignored "-Wreserved-id-macro" | |||||
| #elif defined (__GNUC__) | |||||
| /* anonymous unions are enabled by default */ | |||||
| #elif defined (__TMS470__) | |||||
| /* anonymous unions are enabled by default */ | |||||
| #elif defined (__TASKING__) | |||||
| #pragma warning 586 | |||||
| #elif defined (__CSMC__) | |||||
| /* anonymous unions are enabled by default */ | |||||
| #else | |||||
| #warning Not supported compiler type | |||||
| #endif | |||||
| /* -------- Configuration of Core Peripherals ----------------------------------- */ | |||||
| #define __CM4_REV 0x0001U /* Core revision r0p1 */ | |||||
| #define __MPU_PRESENT 1U /* MPU present */ | |||||
| #define __VTOR_PRESENT 1U /* VTOR present */ | |||||
| #define __NVIC_PRIO_BITS 3U /* Number of Bits used for Priority Levels */ | |||||
| #define __Vendor_SysTickConfig 0U /* Set to 1 if different SysTick Config is used */ | |||||
| #define __FPU_PRESENT 1U /* FPU present */ | |||||
| #include "core_cm4.h" /* Processor and core peripherals */ | |||||
| #include "system_ARMCM4.h" /* System Header */ | |||||
| /* -------- End of section using anonymous unions and disabling warnings -------- */ | |||||
| #if defined (__CC_ARM) | |||||
| #pragma pop | |||||
| #elif defined (__ICCARM__) | |||||
| /* leave anonymous unions enabled */ | |||||
| #elif (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)) | |||||
| #pragma clang diagnostic pop | |||||
| #elif defined (__GNUC__) | |||||
| /* anonymous unions are enabled by default */ | |||||
| #elif defined (__TMS470__) | |||||
| /* anonymous unions are enabled by default */ | |||||
| #elif defined (__TASKING__) | |||||
| #pragma warning restore | |||||
| #elif defined (__CSMC__) | |||||
| /* anonymous unions are enabled by default */ | |||||
| #else | |||||
| #warning Not supported compiler type | |||||
| #endif | |||||
| #ifdef __cplusplus | |||||
| } | |||||
| #endif | |||||
| #endif /* ARMCM4_FP_H */ |
| /**************************************************************************//** | |||||
| * @file ARMCM7.h | |||||
| * @brief CMSIS Core Peripheral Access Layer Header File for | |||||
| * ARMCM7 Device (configured for CM7 without FPU) | |||||
| * @version V5.3.2 | |||||
| * @date 27. March 2020 | |||||
| ******************************************************************************/ | |||||
| /* | |||||
| * Copyright (c) 2009-2020 Arm Limited. All rights reserved. | |||||
| * | |||||
| * SPDX-License-Identifier: Apache-2.0 | |||||
| * | |||||
| * Licensed under the Apache License, Version 2.0 (the License); you may | |||||
| * not use this file except in compliance with the License. | |||||
| * You may obtain a copy of the License at | |||||
| * | |||||
| * www.apache.org/licenses/LICENSE-2.0 | |||||
| * | |||||
| * Unless required by applicable law or agreed to in writing, software | |||||
| * distributed under the License is distributed on an AS IS BASIS, WITHOUT | |||||
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
| * See the License for the specific language governing permissions and | |||||
| * limitations under the License. | |||||
| */ | |||||
| #ifndef ARMCM7_H | |||||
| #define ARMCM7_H | |||||
| #ifdef __cplusplus | |||||
| extern "C" { | |||||
| #endif | |||||
| /* ------------------------- Interrupt Number Definition ------------------------ */ | |||||
| typedef enum IRQn | |||||
| { | |||||
| /* ------------------- Processor Exceptions Numbers ----------------------------- */ | |||||
| NonMaskableInt_IRQn = -14, /* 2 Non Maskable Interrupt */ | |||||
| HardFault_IRQn = -13, /* 3 HardFault Interrupt */ | |||||
| MemoryManagement_IRQn = -12, /* 4 Memory Management Interrupt */ | |||||
| BusFault_IRQn = -11, /* 5 Bus Fault Interrupt */ | |||||
| UsageFault_IRQn = -10, /* 6 Usage Fault Interrupt */ | |||||
| SVCall_IRQn = -5, /* 11 SV Call Interrupt */ | |||||
| DebugMonitor_IRQn = -4, /* 12 Debug Monitor Interrupt */ | |||||
| PendSV_IRQn = -2, /* 14 Pend SV Interrupt */ | |||||
| SysTick_IRQn = -1, /* 15 System Tick Interrupt */ | |||||
| /* ------------------- Processor Interrupt Numbers ------------------------------ */ | |||||
| Interrupt0_IRQn = 0, | |||||
| Interrupt1_IRQn = 1, | |||||
| Interrupt2_IRQn = 2, | |||||
| Interrupt3_IRQn = 3, | |||||
| Interrupt4_IRQn = 4, | |||||
| Interrupt5_IRQn = 5, | |||||
| Interrupt6_IRQn = 6, | |||||
| Interrupt7_IRQn = 7, | |||||
| Interrupt8_IRQn = 8, | |||||
| Interrupt9_IRQn = 9 | |||||
| /* Interrupts 10 .. 224 are left out */ | |||||
| } IRQn_Type; | |||||
| /* ================================================================================ */ | |||||
| /* ================ Processor and Core Peripheral Section ================ */ | |||||
| /* ================================================================================ */ | |||||
| /* ------- Start of section using anonymous unions and disabling warnings ------- */ | |||||
| #if defined (__CC_ARM) | |||||
| #pragma push | |||||
| #pragma anon_unions | |||||
| #elif defined (__ICCARM__) | |||||
| #pragma language=extended | |||||
| #elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) | |||||
| #pragma clang diagnostic push | |||||
| #pragma clang diagnostic ignored "-Wc11-extensions" | |||||
| #pragma clang diagnostic ignored "-Wreserved-id-macro" | |||||
| #elif defined (__GNUC__) | |||||
| /* anonymous unions are enabled by default */ | |||||
| #elif defined (__TMS470__) | |||||
| /* anonymous unions are enabled by default */ | |||||
| #elif defined (__TASKING__) | |||||
| #pragma warning 586 | |||||
| #elif defined (__CSMC__) | |||||
| /* anonymous unions are enabled by default */ | |||||
| #else | |||||
| #warning Not supported compiler type | |||||
| #endif | |||||
| /* -------- Configuration of Core Peripherals ----------------------------------- */ | |||||
| #define __CM7_REV 0x0000U /* Core revision r0p0 */ | |||||
| #define __MPU_PRESENT 1U /* MPU present */ | |||||
| #define __VTOR_PRESENT 1U /* VTOR present */ | |||||
| #define __NVIC_PRIO_BITS 3U /* Number of Bits used for Priority Levels */ | |||||
| #define __Vendor_SysTickConfig 0U /* Set to 1 if different SysTick Config is used */ | |||||
| #define __FPU_PRESENT 0U /* no FPU present */ | |||||
| #define __FPU_DP 0U /* unused */ | |||||
| #define __ICACHE_PRESENT 1U /* Instruction Cache present */ | |||||
| #define __DCACHE_PRESENT 1U /* Data Cache present */ | |||||
| #define __DTCM_PRESENT 1U /* Data Tightly Coupled Memory present */ | |||||
| #include "core_cm7.h" /* Processor and core peripherals */ | |||||
| #include "system_ARMCM7.h" /* System Header */ | |||||
| /* -------- End of section using anonymous unions and disabling warnings -------- */ | |||||
| #if defined (__CC_ARM) | |||||
| #pragma pop | |||||
| #elif defined (__ICCARM__) | |||||
| /* leave anonymous unions enabled */ | |||||
| #elif (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)) | |||||
| #pragma clang diagnostic pop | |||||
| #elif defined (__GNUC__) | |||||
| /* anonymous unions are enabled by default */ | |||||
| #elif defined (__TMS470__) | |||||
| /* anonymous unions are enabled by default */ | |||||
| #elif defined (__TASKING__) | |||||
| #pragma warning restore | |||||
| #elif defined (__CSMC__) | |||||
| /* anonymous unions are enabled by default */ | |||||
| #else | |||||
| #warning Not supported compiler type | |||||
| #endif | |||||
| #ifdef __cplusplus | |||||
| } | |||||
| #endif | |||||
| #endif /* ARMCM7_H */ |
| /**************************************************************************//** | |||||
| * @file ARMCM7_DP.h | |||||
| * @brief CMSIS Core Peripheral Access Layer Header File for | |||||
| * ARMCM7 Device (configured for CM7 with double precision FPU) | |||||
| * @version V5.3.2 | |||||
| * @date 27. March 2020 | |||||
| ******************************************************************************/ | |||||
| /* | |||||
| * Copyright (c) 2009-2020 Arm Limited. All rights reserved. | |||||
| * | |||||
| * SPDX-License-Identifier: Apache-2.0 | |||||
| * | |||||
| * Licensed under the Apache License, Version 2.0 (the License); you may | |||||
| * not use this file except in compliance with the License. | |||||
| * You may obtain a copy of the License at | |||||
| * | |||||
| * www.apache.org/licenses/LICENSE-2.0 | |||||
| * | |||||
| * Unless required by applicable law or agreed to in writing, software | |||||
| * distributed under the License is distributed on an AS IS BASIS, WITHOUT | |||||
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
| * See the License for the specific language governing permissions and | |||||
| * limitations under the License. | |||||
| */ | |||||
| #ifndef ARMCM7_DP_H | |||||
| #define ARMCM7_DP_H | |||||
| #ifdef __cplusplus | |||||
| extern "C" { | |||||
| #endif | |||||
| /* ------------------------- Interrupt Number Definition ------------------------ */ | |||||
| typedef enum IRQn | |||||
| { | |||||
| /* ------------------- Processor Exceptions Numbers ----------------------------- */ | |||||
| NonMaskableInt_IRQn = -14, /* 2 Non Maskable Interrupt */ | |||||
| HardFault_IRQn = -13, /* 3 HardFault Interrupt */ | |||||
| MemoryManagement_IRQn = -12, /* 4 Memory Management Interrupt */ | |||||
| BusFault_IRQn = -11, /* 5 Bus Fault Interrupt */ | |||||
| UsageFault_IRQn = -10, /* 6 Usage Fault Interrupt */ | |||||
| SVCall_IRQn = -5, /* 11 SV Call Interrupt */ | |||||
| DebugMonitor_IRQn = -4, /* 12 Debug Monitor Interrupt */ | |||||
| PendSV_IRQn = -2, /* 14 Pend SV Interrupt */ | |||||
| SysTick_IRQn = -1, /* 15 System Tick Interrupt */ | |||||
| /* ------------------- Processor Interrupt Numbers ------------------------------ */ | |||||
| Interrupt0_IRQn = 0, | |||||
| Interrupt1_IRQn = 1, | |||||
| Interrupt2_IRQn = 2, | |||||
| Interrupt3_IRQn = 3, | |||||
| Interrupt4_IRQn = 4, | |||||
| Interrupt5_IRQn = 5, | |||||
| Interrupt6_IRQn = 6, | |||||
| Interrupt7_IRQn = 7, | |||||
| Interrupt8_IRQn = 8, | |||||
| Interrupt9_IRQn = 9 | |||||
| /* Interrupts 10 .. 224 are left out */ | |||||
| } IRQn_Type; | |||||
| /* ================================================================================ */ | |||||
| /* ================ Processor and Core Peripheral Section ================ */ | |||||
| /* ================================================================================ */ | |||||
| /* ------- Start of section using anonymous unions and disabling warnings ------- */ | |||||
| #if defined (__CC_ARM) | |||||
| #pragma push | |||||
| #pragma anon_unions | |||||
| #elif defined (__ICCARM__) | |||||
| #pragma language=extended | |||||
| #elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) | |||||
| #pragma clang diagnostic push | |||||
| #pragma clang diagnostic ignored "-Wc11-extensions" | |||||
| #pragma clang diagnostic ignored "-Wreserved-id-macro" | |||||
| #elif defined (__GNUC__) | |||||
| /* anonymous unions are enabled by default */ | |||||
| #elif defined (__TMS470__) | |||||
| /* anonymous unions are enabled by default */ | |||||
| #elif defined (__TASKING__) | |||||
| #pragma warning 586 | |||||
| #elif defined (__CSMC__) | |||||
| /* anonymous unions are enabled by default */ | |||||
| #else | |||||
| #warning Not supported compiler type | |||||
| #endif | |||||
| /* -------- Configuration of Core Peripherals ----------------------------------- */ | |||||
| #define __CM7_REV 0x0000U /* Core revision r0p0 */ | |||||
| #define __MPU_PRESENT 1U /* MPU present */ | |||||
| #define __VTOR_PRESENT 1U /* VTOR present */ | |||||
| #define __NVIC_PRIO_BITS 3U /* Number of Bits used for Priority Levels */ | |||||
| #define __Vendor_SysTickConfig 0U /* Set to 1 if different SysTick Config is used */ | |||||
| #define __FPU_PRESENT 1U /* FPU present */ | |||||
| #define __FPU_DP 1U /* double precision FPU */ | |||||
| #define __ICACHE_PRESENT 1U /* Instruction Cache present */ | |||||
| #define __DCACHE_PRESENT 1U /* Data Cache present */ | |||||
| #define __DTCM_PRESENT 1U /* Data Tightly Coupled Memory present */ | |||||
| #include "core_cm7.h" /* Processor and core peripherals */ | |||||
| #include "system_ARMCM7.h" /* System Header */ | |||||
| /* -------- End of section using anonymous unions and disabling warnings -------- */ | |||||
| #if defined (__CC_ARM) | |||||
| #pragma pop | |||||
| #elif defined (__ICCARM__) | |||||
| /* leave anonymous unions enabled */ | |||||
| #elif (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)) | |||||
| #pragma clang diagnostic pop | |||||
| #elif defined (__GNUC__) | |||||
| /* anonymous unions are enabled by default */ | |||||
| #elif defined (__TMS470__) | |||||
| /* anonymous unions are enabled by default */ | |||||
| #elif defined (__TASKING__) | |||||
| #pragma warning restore | |||||
| #elif defined (__CSMC__) | |||||
| /* anonymous unions are enabled by default */ | |||||
| #else | |||||
| #warning Not supported compiler type | |||||
| #endif | |||||
| #ifdef __cplusplus | |||||
| } | |||||
| #endif | |||||
| #endif /* ARMCM7_DP_H */ |
| /**************************************************************************//** | |||||
| * @file ARMCM7_SP.h | |||||
| * @brief CMSIS Core Peripheral Access Layer Header File for | |||||
| * ARMCM7 Device (configured for CM7 with single precision FPU) | |||||
| * @version V5.3.2 | |||||
| * @date 27. March 2020 | |||||
| ******************************************************************************/ | |||||
| /* | |||||
| * Copyright (c) 2009-2020 Arm Limited. All rights reserved. | |||||
| * | |||||
| * SPDX-License-Identifier: Apache-2.0 | |||||
| * | |||||
| * Licensed under the Apache License, Version 2.0 (the License); you may | |||||
| * not use this file except in compliance with the License. | |||||
| * You may obtain a copy of the License at | |||||
| * | |||||
| * www.apache.org/licenses/LICENSE-2.0 | |||||
| * | |||||
| * Unless required by applicable law or agreed to in writing, software | |||||
| * distributed under the License is distributed on an AS IS BASIS, WITHOUT | |||||
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
| * See the License for the specific language governing permissions and | |||||
| * limitations under the License. | |||||
| */ | |||||
| #ifndef ARMCM7_SP_H | |||||
| #define ARMCM7_SP_H | |||||
| #ifdef __cplusplus | |||||
| extern "C" { | |||||
| #endif | |||||
| /* ------------------------- Interrupt Number Definition ------------------------ */ | |||||
| typedef enum IRQn | |||||
| { | |||||
| /* ------------------- Processor Exceptions Numbers ----------------------------- */ | |||||
| NonMaskableInt_IRQn = -14, /* 2 Non Maskable Interrupt */ | |||||
| HardFault_IRQn = -13, /* 3 HardFault Interrupt */ | |||||
| MemoryManagement_IRQn = -12, /* 4 Memory Management Interrupt */ | |||||
| BusFault_IRQn = -11, /* 5 Bus Fault Interrupt */ | |||||
| UsageFault_IRQn = -10, /* 6 Usage Fault Interrupt */ | |||||
| SVCall_IRQn = -5, /* 11 SV Call Interrupt */ | |||||
| DebugMonitor_IRQn = -4, /* 12 Debug Monitor Interrupt */ | |||||
| PendSV_IRQn = -2, /* 14 Pend SV Interrupt */ | |||||
| SysTick_IRQn = -1, /* 15 System Tick Interrupt */ | |||||
| /* ------------------- Processor Interrupt Numbers ------------------------------ */ | |||||
| Interrupt0_IRQn = 0, | |||||
| Interrupt1_IRQn = 1, | |||||
| Interrupt2_IRQn = 2, | |||||
| Interrupt3_IRQn = 3, | |||||
| Interrupt4_IRQn = 4, | |||||
| Interrupt5_IRQn = 5, | |||||
| Interrupt6_IRQn = 6, | |||||
| Interrupt7_IRQn = 7, | |||||
| Interrupt8_IRQn = 8, | |||||
| Interrupt9_IRQn = 9 | |||||
| /* Interrupts 10 .. 224 are left out */ | |||||
| } IRQn_Type; | |||||
| /* ================================================================================ */ | |||||
| /* ================ Processor and Core Peripheral Section ================ */ | |||||
| /* ================================================================================ */ | |||||
| /* ------- Start of section using anonymous unions and disabling warnings ------- */ | |||||
| #if defined (__CC_ARM) | |||||
| #pragma push | |||||
| #pragma anon_unions | |||||
| #elif defined (__ICCARM__) | |||||
| #pragma language=extended | |||||
| #elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) | |||||
| #pragma clang diagnostic push | |||||
| #pragma clang diagnostic ignored "-Wc11-extensions" | |||||
| #pragma clang diagnostic ignored "-Wreserved-id-macro" | |||||
| #elif defined (__GNUC__) | |||||
| /* anonymous unions are enabled by default */ | |||||
| #elif defined (__TMS470__) | |||||
| /* anonymous unions are enabled by default */ | |||||
| #elif defined (__TASKING__) | |||||
| #pragma warning 586 | |||||
| #elif defined (__CSMC__) | |||||
| /* anonymous unions are enabled by default */ | |||||
| #else | |||||
| #warning Not supported compiler type | |||||
| #endif | |||||
| /* -------- Configuration of Core Peripherals ----------------------------------- */ | |||||
| #define __CM7_REV 0x0000U /* Core revision r0p0 */ | |||||
| #define __MPU_PRESENT 1U /* MPU present */ | |||||
| #define __VTOR_PRESENT 1U /* VTOR present */ | |||||
| #define __NVIC_PRIO_BITS 3U /* Number of Bits used for Priority Levels */ | |||||
| #define __Vendor_SysTickConfig 0U /* Set to 1 if different SysTick Config is used */ | |||||
| #define __FPU_PRESENT 1U /* FPU present */ | |||||
| #define __FPU_DP 0U /* single precision FPU */ | |||||
| #define __ICACHE_PRESENT 1U /* Instruction Cache present */ | |||||
| #define __DCACHE_PRESENT 1U /* Data Cache present */ | |||||
| #define __DTCM_PRESENT 1U /* Data Tightly Coupled Memory present */ | |||||
| #include "core_cm7.h" /* Processor and core peripherals */ | |||||
| #include "system_ARMCM7.h" /* System Header */ | |||||
| /* -------- End of section using anonymous unions and disabling warnings -------- */ | |||||
| #if defined (__CC_ARM) | |||||
| #pragma pop | |||||
| #elif defined (__ICCARM__) | |||||
| /* leave anonymous unions enabled */ | |||||
| #elif (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)) | |||||
| #pragma clang diagnostic pop | |||||
| #elif defined (__GNUC__) | |||||
| /* anonymous unions are enabled by default */ | |||||
| #elif defined (__TMS470__) | |||||
| /* anonymous unions are enabled by default */ | |||||
| #elif defined (__TASKING__) | |||||
| #pragma warning restore | |||||
| #elif defined (__CSMC__) | |||||
| /* anonymous unions are enabled by default */ | |||||
| #else | |||||
| #warning Not supported compiler type | |||||
| #endif | |||||
| #ifdef __cplusplus | |||||
| } | |||||
| #endif | |||||
| #endif /* ARMCM7_SP_H */ |
| /* ---------------------------------------------------------------------- | |||||
| * Project: CMSIS DSP Library | |||||
| * Title: arm_common_tables.h | |||||
| * Description: Extern declaration for common tables | |||||
| * | |||||
| * $Date: 27. January 2017 | |||||
| * $Revision: V.1.5.1 | |||||
| * | |||||
| * Target Processor: Cortex-M cores | |||||
| * -------------------------------------------------------------------- */ | |||||
| /* | |||||
| * Copyright (C) 2010-2017 ARM Limited or its affiliates. All rights reserved. | |||||
| * | |||||
| * SPDX-License-Identifier: Apache-2.0 | |||||
| * | |||||
| * Licensed under the Apache License, Version 2.0 (the License); you may | |||||
| * not use this file except in compliance with the License. | |||||
| * You may obtain a copy of the License at | |||||
| * | |||||
| * www.apache.org/licenses/LICENSE-2.0 | |||||
| * | |||||
| * Unless required by applicable law or agreed to in writing, software | |||||
| * distributed under the License is distributed on an AS IS BASIS, WITHOUT | |||||
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
| * See the License for the specific language governing permissions and | |||||
| * limitations under the License. | |||||
| */ | |||||
| #ifndef _ARM_COMMON_TABLES_H | |||||
| #define _ARM_COMMON_TABLES_H | |||||
| #include "arm_math.h" | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) | |||||
| /* Double Precision Float CFFT twiddles */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREV_1024) | |||||
| extern const uint16_t armBitRevTable[1024]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F64_16) | |||||
| extern const uint64_t twiddleCoefF64_16[32]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F64_32) | |||||
| extern const uint64_t twiddleCoefF64_32[64]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F64_64) | |||||
| extern const uint64_t twiddleCoefF64_64[128]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F64_128) | |||||
| extern const uint64_t twiddleCoefF64_128[256]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F64_256) | |||||
| extern const uint64_t twiddleCoefF64_256[512]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F64_512) | |||||
| extern const uint64_t twiddleCoefF64_512[1024]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F64_1024) | |||||
| extern const uint64_t twiddleCoefF64_1024[2048]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F64_2048) | |||||
| extern const uint64_t twiddleCoefF64_2048[4096]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F64_4096) | |||||
| extern const uint64_t twiddleCoefF64_4096[8192]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_16) | |||||
| extern const float32_t twiddleCoef_16[32]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_32) | |||||
| extern const float32_t twiddleCoef_32[64]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_64) | |||||
| extern const float32_t twiddleCoef_64[128]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_128) | |||||
| extern const float32_t twiddleCoef_128[256]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_256) | |||||
| extern const float32_t twiddleCoef_256[512]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_512) | |||||
| extern const float32_t twiddleCoef_512[1024]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_1024) | |||||
| extern const float32_t twiddleCoef_1024[2048]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_2048) | |||||
| extern const float32_t twiddleCoef_2048[4096]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_4096) | |||||
| extern const float32_t twiddleCoef_4096[8192]; | |||||
| #define twiddleCoef twiddleCoef_4096 | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_16) | |||||
| extern const q31_t twiddleCoef_16_q31[24]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_32) | |||||
| extern const q31_t twiddleCoef_32_q31[48]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_64) | |||||
| extern const q31_t twiddleCoef_64_q31[96]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_128) | |||||
| extern const q31_t twiddleCoef_128_q31[192]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_256) | |||||
| extern const q31_t twiddleCoef_256_q31[384]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_512) | |||||
| extern const q31_t twiddleCoef_512_q31[768]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_1024) | |||||
| extern const q31_t twiddleCoef_1024_q31[1536]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_2048) | |||||
| extern const q31_t twiddleCoef_2048_q31[3072]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_4096) | |||||
| extern const q31_t twiddleCoef_4096_q31[6144]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_16) | |||||
| extern const q15_t twiddleCoef_16_q15[24]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_32) | |||||
| extern const q15_t twiddleCoef_32_q15[48]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_64) | |||||
| extern const q15_t twiddleCoef_64_q15[96]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_128) | |||||
| extern const q15_t twiddleCoef_128_q15[192]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_256) | |||||
| extern const q15_t twiddleCoef_256_q15[384]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_512) | |||||
| extern const q15_t twiddleCoef_512_q15[768]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_1024) | |||||
| extern const q15_t twiddleCoef_1024_q15[1536]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_2048) | |||||
| extern const q15_t twiddleCoef_2048_q15[3072]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_4096) | |||||
| extern const q15_t twiddleCoef_4096_q15[6144]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| /* Double Precision Float RFFT twiddles */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_32) | |||||
| extern const uint64_t twiddleCoefF64_rfft_32[32]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_64) | |||||
| extern const uint64_t twiddleCoefF64_rfft_64[64]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_128) | |||||
| extern const uint64_t twiddleCoefF64_rfft_128[128]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_256) | |||||
| extern const uint64_t twiddleCoefF64_rfft_256[256]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_512) | |||||
| extern const uint64_t twiddleCoefF64_rfft_512[512]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_1024) | |||||
| extern const uint64_t twiddleCoefF64_rfft_1024[1024]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_2048) | |||||
| extern const uint64_t twiddleCoefF64_rfft_2048[2048]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_4096) | |||||
| extern const uint64_t twiddleCoefF64_rfft_4096[4096]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_32) | |||||
| extern const float32_t twiddleCoef_rfft_32[32]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_64) | |||||
| extern const float32_t twiddleCoef_rfft_64[64]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_128) | |||||
| extern const float32_t twiddleCoef_rfft_128[128]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_256) | |||||
| extern const float32_t twiddleCoef_rfft_256[256]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_512) | |||||
| extern const float32_t twiddleCoef_rfft_512[512]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_1024) | |||||
| extern const float32_t twiddleCoef_rfft_1024[1024]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_2048) | |||||
| extern const float32_t twiddleCoef_rfft_2048[2048]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_4096) | |||||
| extern const float32_t twiddleCoef_rfft_4096[4096]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| /* Double precision floating-point bit reversal tables */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT64_16) | |||||
| #define ARMBITREVINDEXTABLEF64_16_TABLE_LENGTH ((uint16_t)12) | |||||
| extern const uint16_t armBitRevIndexTableF64_16[ARMBITREVINDEXTABLEF64_16_TABLE_LENGTH]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT64_32) | |||||
| #define ARMBITREVINDEXTABLEF64_32_TABLE_LENGTH ((uint16_t)24) | |||||
| extern const uint16_t armBitRevIndexTableF64_32[ARMBITREVINDEXTABLEF64_32_TABLE_LENGTH]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT64_64) | |||||
| #define ARMBITREVINDEXTABLEF64_64_TABLE_LENGTH ((uint16_t)56) | |||||
| extern const uint16_t armBitRevIndexTableF64_64[ARMBITREVINDEXTABLEF64_64_TABLE_LENGTH]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT64_128) | |||||
| #define ARMBITREVINDEXTABLEF64_128_TABLE_LENGTH ((uint16_t)112) | |||||
| extern const uint16_t armBitRevIndexTableF64_128[ARMBITREVINDEXTABLEF64_128_TABLE_LENGTH]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT64_256) | |||||
| #define ARMBITREVINDEXTABLEF64_256_TABLE_LENGTH ((uint16_t)240) | |||||
| extern const uint16_t armBitRevIndexTableF64_256[ARMBITREVINDEXTABLEF64_256_TABLE_LENGTH]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT64_512) | |||||
| #define ARMBITREVINDEXTABLEF64_512_TABLE_LENGTH ((uint16_t)480) | |||||
| extern const uint16_t armBitRevIndexTableF64_512[ARMBITREVINDEXTABLEF64_512_TABLE_LENGTH]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT64_1024) | |||||
| #define ARMBITREVINDEXTABLEF64_1024_TABLE_LENGTH ((uint16_t)992) | |||||
| extern const uint16_t armBitRevIndexTableF64_1024[ARMBITREVINDEXTABLEF64_1024_TABLE_LENGTH]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT64_2048) | |||||
| #define ARMBITREVINDEXTABLEF64_2048_TABLE_LENGTH ((uint16_t)1984) | |||||
| extern const uint16_t armBitRevIndexTableF64_2048[ARMBITREVINDEXTABLEF64_2048_TABLE_LENGTH]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT64_4096) | |||||
| #define ARMBITREVINDEXTABLEF64_4096_TABLE_LENGTH ((uint16_t)4032) | |||||
| extern const uint16_t armBitRevIndexTableF64_4096[ARMBITREVINDEXTABLEF64_4096_TABLE_LENGTH]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| /* floating-point bit reversal tables */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT_16) | |||||
| #define ARMBITREVINDEXTABLE_16_TABLE_LENGTH ((uint16_t)20) | |||||
| extern const uint16_t armBitRevIndexTable16[ARMBITREVINDEXTABLE_16_TABLE_LENGTH]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT_32) | |||||
| #define ARMBITREVINDEXTABLE_32_TABLE_LENGTH ((uint16_t)48) | |||||
| extern const uint16_t armBitRevIndexTable32[ARMBITREVINDEXTABLE_32_TABLE_LENGTH]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT_64) | |||||
| #define ARMBITREVINDEXTABLE_64_TABLE_LENGTH ((uint16_t)56) | |||||
| extern const uint16_t armBitRevIndexTable64[ARMBITREVINDEXTABLE_64_TABLE_LENGTH]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT_128) | |||||
| #define ARMBITREVINDEXTABLE_128_TABLE_LENGTH ((uint16_t)208) | |||||
| extern const uint16_t armBitRevIndexTable128[ARMBITREVINDEXTABLE_128_TABLE_LENGTH]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT_256) | |||||
| #define ARMBITREVINDEXTABLE_256_TABLE_LENGTH ((uint16_t)440) | |||||
| extern const uint16_t armBitRevIndexTable256[ARMBITREVINDEXTABLE_256_TABLE_LENGTH]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT_512) | |||||
| #define ARMBITREVINDEXTABLE_512_TABLE_LENGTH ((uint16_t)448) | |||||
| extern const uint16_t armBitRevIndexTable512[ARMBITREVINDEXTABLE_512_TABLE_LENGTH]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT_1024) | |||||
| #define ARMBITREVINDEXTABLE_1024_TABLE_LENGTH ((uint16_t)1800) | |||||
| extern const uint16_t armBitRevIndexTable1024[ARMBITREVINDEXTABLE_1024_TABLE_LENGTH]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT_2048) | |||||
| #define ARMBITREVINDEXTABLE_2048_TABLE_LENGTH ((uint16_t)3808) | |||||
| extern const uint16_t armBitRevIndexTable2048[ARMBITREVINDEXTABLE_2048_TABLE_LENGTH]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FLT_4096) | |||||
| #define ARMBITREVINDEXTABLE_4096_TABLE_LENGTH ((uint16_t)4032) | |||||
| extern const uint16_t armBitRevIndexTable4096[ARMBITREVINDEXTABLE_4096_TABLE_LENGTH]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| /* fixed-point bit reversal tables */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_16) | |||||
| #define ARMBITREVINDEXTABLE_FIXED_16_TABLE_LENGTH ((uint16_t)12) | |||||
| extern const uint16_t armBitRevIndexTable_fixed_16[ARMBITREVINDEXTABLE_FIXED_16_TABLE_LENGTH]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_32) | |||||
| #define ARMBITREVINDEXTABLE_FIXED_32_TABLE_LENGTH ((uint16_t)24) | |||||
| extern const uint16_t armBitRevIndexTable_fixed_32[ARMBITREVINDEXTABLE_FIXED_32_TABLE_LENGTH]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_64) | |||||
| #define ARMBITREVINDEXTABLE_FIXED_64_TABLE_LENGTH ((uint16_t)56) | |||||
| extern const uint16_t armBitRevIndexTable_fixed_64[ARMBITREVINDEXTABLE_FIXED_64_TABLE_LENGTH]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_128) | |||||
| #define ARMBITREVINDEXTABLE_FIXED_128_TABLE_LENGTH ((uint16_t)112) | |||||
| extern const uint16_t armBitRevIndexTable_fixed_128[ARMBITREVINDEXTABLE_FIXED_128_TABLE_LENGTH]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_256) | |||||
| #define ARMBITREVINDEXTABLE_FIXED_256_TABLE_LENGTH ((uint16_t)240) | |||||
| extern const uint16_t armBitRevIndexTable_fixed_256[ARMBITREVINDEXTABLE_FIXED_256_TABLE_LENGTH]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_512) | |||||
| #define ARMBITREVINDEXTABLE_FIXED_512_TABLE_LENGTH ((uint16_t)480) | |||||
| extern const uint16_t armBitRevIndexTable_fixed_512[ARMBITREVINDEXTABLE_FIXED_512_TABLE_LENGTH]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_1024) | |||||
| #define ARMBITREVINDEXTABLE_FIXED_1024_TABLE_LENGTH ((uint16_t)992) | |||||
| extern const uint16_t armBitRevIndexTable_fixed_1024[ARMBITREVINDEXTABLE_FIXED_1024_TABLE_LENGTH]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_2048) | |||||
| #define ARMBITREVINDEXTABLE_FIXED_2048_TABLE_LENGTH ((uint16_t)1984) | |||||
| extern const uint16_t armBitRevIndexTable_fixed_2048[ARMBITREVINDEXTABLE_FIXED_2048_TABLE_LENGTH]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_4096) | |||||
| #define ARMBITREVINDEXTABLE_FIXED_4096_TABLE_LENGTH ((uint16_t)4032) | |||||
| extern const uint16_t armBitRevIndexTable_fixed_4096[ARMBITREVINDEXTABLE_FIXED_4096_TABLE_LENGTH]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_REALCOEF_F32) | |||||
| extern const float32_t realCoefA[8192]; | |||||
| extern const float32_t realCoefB[8192]; | |||||
| #endif | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_REALCOEF_Q31) | |||||
| extern const q31_t realCoefAQ31[8192]; | |||||
| extern const q31_t realCoefBQ31[8192]; | |||||
| #endif | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_REALCOEF_Q15) | |||||
| extern const q15_t realCoefAQ15[8192]; | |||||
| extern const q15_t realCoefBQ15[8192]; | |||||
| #endif | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_F32_128) | |||||
| extern const float32_t Weights_128[256]; | |||||
| extern const float32_t cos_factors_128[128]; | |||||
| #endif | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_F32_512) | |||||
| extern const float32_t Weights_512[1024]; | |||||
| extern const float32_t cos_factors_512[512]; | |||||
| #endif | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_F32_2048) | |||||
| extern const float32_t Weights_2048[4096]; | |||||
| extern const float32_t cos_factors_2048[2048]; | |||||
| #endif | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_F32_8192) | |||||
| extern const float32_t Weights_8192[16384]; | |||||
| extern const float32_t cos_factors_8192[8192]; | |||||
| #endif | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_Q15_128) | |||||
| extern const q15_t WeightsQ15_128[256]; | |||||
| extern const q15_t cos_factorsQ15_128[128]; | |||||
| #endif | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_Q15_512) | |||||
| extern const q15_t WeightsQ15_512[1024]; | |||||
| extern const q15_t cos_factorsQ15_512[512]; | |||||
| #endif | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_Q15_2048) | |||||
| extern const q15_t WeightsQ15_2048[4096]; | |||||
| extern const q15_t cos_factorsQ15_2048[2048]; | |||||
| #endif | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_Q15_8192) | |||||
| extern const q15_t WeightsQ15_8192[16384]; | |||||
| extern const q15_t cos_factorsQ15_8192[8192]; | |||||
| #endif | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_Q31_128) | |||||
| extern const q31_t WeightsQ31_128[256]; | |||||
| extern const q31_t cos_factorsQ31_128[128]; | |||||
| #endif | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_Q31_512) | |||||
| extern const q31_t WeightsQ31_512[1024]; | |||||
| extern const q31_t cos_factorsQ31_512[512]; | |||||
| #endif | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_Q31_2048) | |||||
| extern const q31_t WeightsQ31_2048[4096]; | |||||
| extern const q31_t cos_factorsQ31_2048[2048]; | |||||
| #endif | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_Q31_8192) | |||||
| extern const q31_t WeightsQ31_8192[16384]; | |||||
| extern const q31_t cos_factorsQ31_8192[8192]; | |||||
| #endif | |||||
| #endif /* if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FAST_ALLOW_TABLES) | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) || defined(ARM_TABLE_RECIP_Q15) | |||||
| extern const q15_t armRecipTableQ15[64]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) defined(ARM_ALL_FAST_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) || defined(ARM_TABLE_RECIP_Q31) | |||||
| extern const q31_t armRecipTableQ31[64]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) defined(ARM_ALL_FAST_TABLES) */ | |||||
| /* Tables for Fast Math Sine and Cosine */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) || defined(ARM_TABLE_SIN_F32) | |||||
| extern const float32_t sinTable_f32[FAST_MATH_TABLE_SIZE + 1]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) defined(ARM_ALL_FAST_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) || defined(ARM_TABLE_SIN_Q31) | |||||
| extern const q31_t sinTable_q31[FAST_MATH_TABLE_SIZE + 1]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) defined(ARM_ALL_FAST_TABLES) */ | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) || defined(ARM_TABLE_SIN_Q15) | |||||
| extern const q15_t sinTable_q15[FAST_MATH_TABLE_SIZE + 1]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) defined(ARM_ALL_FAST_TABLES) */ | |||||
| #if defined(ARM_MATH_MVEI) | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) || defined(ARM_TABLE_FAST_SQRT_Q31_MVE) | |||||
| extern const q31_t sqrtTable_Q31[256]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) defined(ARM_ALL_FAST_TABLES) */ | |||||
| #endif | |||||
| #if defined(ARM_MATH_MVEI) | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) || defined(ARM_TABLE_FAST_SQRT_Q15_MVE) | |||||
| extern const q15_t sqrtTable_Q15[256]; | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) defined(ARM_ALL_FAST_TABLES) */ | |||||
| #endif | |||||
| #endif /* if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FAST_TABLES) */ | |||||
| #if (defined(ARM_MATH_MVEF) || defined(ARM_MATH_HELIUM)) && !defined(ARM_MATH_AUTOVECTORIZE) | |||||
| extern const float32_t exp_tab[8]; | |||||
| extern const float32_t __logf_lut_f32[8]; | |||||
| #endif /* (defined(ARM_MATH_MVEF) || defined(ARM_MATH_HELIUM)) && !defined(ARM_MATH_AUTOVECTORIZE) */ | |||||
| #if (defined(ARM_MATH_MVEI) || defined(ARM_MATH_HELIUM)) | |||||
| extern const unsigned char hwLUT[256]; | |||||
| #endif /* (defined(ARM_MATH_MVEI) || defined(ARM_MATH_HELIUM)) */ | |||||
| #endif /* ARM_COMMON_TABLES_H */ | |||||
| /* ---------------------------------------------------------------------- | |||||
| * Project: CMSIS DSP Library | |||||
| * Title: arm_const_structs.h | |||||
| * Description: Constant structs that are initialized for user convenience. | |||||
| * For example, some can be given as arguments to the arm_cfft_f32() function. | |||||
| * | |||||
| * $Date: 27. January 2017 | |||||
| * $Revision: V.1.5.1 | |||||
| * | |||||
| * Target Processor: Cortex-M cores | |||||
| * -------------------------------------------------------------------- */ | |||||
| /* | |||||
| * Copyright (C) 2010-2017 ARM Limited or its affiliates. All rights reserved. | |||||
| * | |||||
| * SPDX-License-Identifier: Apache-2.0 | |||||
| * | |||||
| * Licensed under the Apache License, Version 2.0 (the License); you may | |||||
| * not use this file except in compliance with the License. | |||||
| * You may obtain a copy of the License at | |||||
| * | |||||
| * www.apache.org/licenses/LICENSE-2.0 | |||||
| * | |||||
| * Unless required by applicable law or agreed to in writing, software | |||||
| * distributed under the License is distributed on an AS IS BASIS, WITHOUT | |||||
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
| * See the License for the specific language governing permissions and | |||||
| * limitations under the License. | |||||
| */ | |||||
| #ifndef _ARM_CONST_STRUCTS_H | |||||
| #define _ARM_CONST_STRUCTS_H | |||||
| #include "arm_math.h" | |||||
| #include "arm_common_tables.h" | |||||
| extern const arm_cfft_instance_f64 arm_cfft_sR_f64_len16; | |||||
| extern const arm_cfft_instance_f64 arm_cfft_sR_f64_len32; | |||||
| extern const arm_cfft_instance_f64 arm_cfft_sR_f64_len64; | |||||
| extern const arm_cfft_instance_f64 arm_cfft_sR_f64_len128; | |||||
| extern const arm_cfft_instance_f64 arm_cfft_sR_f64_len256; | |||||
| extern const arm_cfft_instance_f64 arm_cfft_sR_f64_len512; | |||||
| extern const arm_cfft_instance_f64 arm_cfft_sR_f64_len1024; | |||||
| extern const arm_cfft_instance_f64 arm_cfft_sR_f64_len2048; | |||||
| extern const arm_cfft_instance_f64 arm_cfft_sR_f64_len4096; | |||||
| extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len16; | |||||
| extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len32; | |||||
| extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len64; | |||||
| extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len128; | |||||
| extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len256; | |||||
| extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len512; | |||||
| extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len1024; | |||||
| extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len2048; | |||||
| extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len4096; | |||||
| extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len16; | |||||
| extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len32; | |||||
| extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len64; | |||||
| extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len128; | |||||
| extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len256; | |||||
| extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len512; | |||||
| extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len1024; | |||||
| extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len2048; | |||||
| extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len4096; | |||||
| extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len16; | |||||
| extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len32; | |||||
| extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len64; | |||||
| extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len128; | |||||
| extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len256; | |||||
| extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len512; | |||||
| extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len1024; | |||||
| extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len2048; | |||||
| extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len4096; | |||||
| #endif |
| /* ---------------------------------------------------------------------- | |||||
| * Project: CMSIS DSP Library | |||||
| * Title: arm_helium_utils.h | |||||
| * Description: Utility functions for Helium development | |||||
| * | |||||
| * $Date: 09. September 2019 | |||||
| * $Revision: V.1.5.1 | |||||
| * | |||||
| * Target Processor: Cortex-M cores | |||||
| * -------------------------------------------------------------------- */ | |||||
| /* | |||||
| * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. | |||||
| * | |||||
| * SPDX-License-Identifier: Apache-2.0 | |||||
| * | |||||
| * Licensed under the Apache License, Version 2.0 (the License); you may | |||||
| * not use this file except in compliance with the License. | |||||
| * You may obtain a copy of the License at | |||||
| * | |||||
| * www.apache.org/licenses/LICENSE-2.0 | |||||
| * | |||||
| * Unless required by applicable law or agreed to in writing, software | |||||
| * distributed under the License is distributed on an AS IS BASIS, WITHOUT | |||||
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
| * See the License for the specific language governing permissions and | |||||
| * limitations under the License. | |||||
| */ | |||||
| #ifndef _ARM_UTILS_HELIUM_H_ | |||||
| #define _ARM_UTILS_HELIUM_H_ | |||||
| /*************************************** | |||||
| Definitions available for MVEF and MVEI | |||||
| ***************************************/ | |||||
| #if defined (ARM_MATH_HELIUM) || defined(ARM_MATH_MVEF) || defined(ARM_MATH_MVEI) | |||||
| #define INACTIVELANE 0 /* inactive lane content */ | |||||
| #endif /* defined (ARM_MATH_HELIUM) || defined(ARM_MATH_MVEF) || defined(ARM_MATH_MVEI) */ | |||||
| /*************************************** | |||||
| Definitions available for MVEF only | |||||
| ***************************************/ | |||||
| #if defined (ARM_MATH_HELIUM) || defined(ARM_MATH_MVEF) | |||||
| __STATIC_FORCEINLINE float32_t vecAddAcrossF32Mve(float32x4_t in) | |||||
| { | |||||
| float32_t acc; | |||||
| acc = vgetq_lane(in, 0) + vgetq_lane(in, 1) + | |||||
| vgetq_lane(in, 2) + vgetq_lane(in, 3); | |||||
| return acc; | |||||
| } | |||||
| /* newton initial guess */ | |||||
| #define INVSQRT_MAGIC_F32 0x5f3759df | |||||
| #define INVSQRT_NEWTON_MVE_F32(invSqrt, xHalf, xStart)\ | |||||
| { \ | |||||
| float32x4_t tmp; \ | |||||
| \ | |||||
| /* tmp = xhalf * x * x */ \ | |||||
| tmp = vmulq(xStart, xStart); \ | |||||
| tmp = vmulq(tmp, xHalf); \ | |||||
| /* (1.5f - xhalf * x * x) */ \ | |||||
| tmp = vsubq(vdupq_n_f32(1.5f), tmp); \ | |||||
| /* x = x*(1.5f-xhalf*x*x); */ \ | |||||
| invSqrt = vmulq(tmp, xStart); \ | |||||
| } | |||||
| #endif /* defined (ARM_MATH_HELIUM) || defined(ARM_MATH_MVEF) */ | |||||
| /*************************************** | |||||
| Definitions available for MVEI only | |||||
| ***************************************/ | |||||
| #if defined (ARM_MATH_HELIUM) || defined(ARM_MATH_MVEI) | |||||
| #include "arm_common_tables.h" | |||||
| /* Following functions are used to transpose matrix in f32 and q31 cases */ | |||||
| __STATIC_INLINE arm_status arm_mat_trans_32bit_2x2_mve( | |||||
| uint32_t * pDataSrc, | |||||
| uint32_t * pDataDest) | |||||
| { | |||||
| static const uint32x4_t vecOffs = { 0, 2, 1, 3 }; | |||||
| /* | |||||
| * | |||||
| * | 0 1 | => | 0 2 | | |||||
| * | 2 3 | | 1 3 | | |||||
| * | |||||
| */ | |||||
| uint32x4_t vecIn = vldrwq_u32((uint32_t const *)pDataSrc); | |||||
| vstrwq_scatter_shifted_offset_u32(pDataDest, vecOffs, vecIn); | |||||
| return (ARM_MATH_SUCCESS); | |||||
| } | |||||
| __STATIC_INLINE arm_status arm_mat_trans_32bit_3x3_mve( | |||||
| uint32_t * pDataSrc, | |||||
| uint32_t * pDataDest) | |||||
| { | |||||
| const uint32x4_t vecOffs1 = { 0, 3, 6, 1}; | |||||
| const uint32x4_t vecOffs2 = { 4, 7, 2, 5}; | |||||
| /* | |||||
| * | |||||
| * | 0 1 2 | | 0 3 6 | 4 x 32 flattened version | 0 3 6 1 | | |||||
| * | 3 4 5 | => | 1 4 7 | => | 4 7 2 5 | | |||||
| * | 6 7 8 | | 2 5 8 | (row major) | 8 . . . | | |||||
| * | |||||
| */ | |||||
| uint32x4_t vecIn1 = vldrwq_u32((uint32_t const *) pDataSrc); | |||||
| uint32x4_t vecIn2 = vldrwq_u32((uint32_t const *) &pDataSrc[4]); | |||||
| vstrwq_scatter_shifted_offset_u32(pDataDest, vecOffs1, vecIn1); | |||||
| vstrwq_scatter_shifted_offset_u32(pDataDest, vecOffs2, vecIn2); | |||||
| pDataDest[8] = pDataSrc[8]; | |||||
| return (ARM_MATH_SUCCESS); | |||||
| } | |||||
| __STATIC_INLINE arm_status arm_mat_trans_32bit_4x4_mve(uint32_t * pDataSrc, uint32_t * pDataDest) | |||||
| { | |||||
| /* | |||||
| * 4x4 Matrix transposition | |||||
| * is 4 x de-interleave operation | |||||
| * | |||||
| * 0 1 2 3 0 4 8 12 | |||||
| * 4 5 6 7 1 5 9 13 | |||||
| * 8 9 10 11 2 6 10 14 | |||||
| * 12 13 14 15 3 7 11 15 | |||||
| */ | |||||
| uint32x4x4_t vecIn; | |||||
| vecIn = vld4q((uint32_t const *) pDataSrc); | |||||
| vstrwq(pDataDest, vecIn.val[0]); | |||||
| pDataDest += 4; | |||||
| vstrwq(pDataDest, vecIn.val[1]); | |||||
| pDataDest += 4; | |||||
| vstrwq(pDataDest, vecIn.val[2]); | |||||
| pDataDest += 4; | |||||
| vstrwq(pDataDest, vecIn.val[3]); | |||||
| return (ARM_MATH_SUCCESS); | |||||
| } | |||||
| __STATIC_INLINE arm_status arm_mat_trans_32bit_generic_mve( | |||||
| uint16_t srcRows, | |||||
| uint16_t srcCols, | |||||
| uint32_t * pDataSrc, | |||||
| uint32_t * pDataDest) | |||||
| { | |||||
| uint32x4_t vecOffs; | |||||
| uint32_t i; | |||||
| uint32_t blkCnt; | |||||
| uint32_t const *pDataC; | |||||
| uint32_t *pDataDestR; | |||||
| uint32x4_t vecIn; | |||||
| vecOffs = vidupq_u32((uint32_t)0, 1); | |||||
| vecOffs = vecOffs * srcCols; | |||||
| i = srcCols; | |||||
| do | |||||
| { | |||||
| pDataC = (uint32_t const *) pDataSrc; | |||||
| pDataDestR = pDataDest; | |||||
| blkCnt = srcRows >> 2; | |||||
| while (blkCnt > 0U) | |||||
| { | |||||
| vecIn = vldrwq_gather_shifted_offset_u32(pDataC, vecOffs); | |||||
| vstrwq(pDataDestR, vecIn); | |||||
| pDataDestR += 4; | |||||
| pDataC = pDataC + srcCols * 4; | |||||
| /* | |||||
| * Decrement the blockSize loop counter | |||||
| */ | |||||
| blkCnt--; | |||||
| } | |||||
| /* | |||||
| * tail | |||||
| */ | |||||
| blkCnt = srcRows & 3; | |||||
| if (blkCnt > 0U) | |||||
| { | |||||
| mve_pred16_t p0 = vctp32q(blkCnt); | |||||
| vecIn = vldrwq_gather_shifted_offset_u32(pDataC, vecOffs); | |||||
| vstrwq_p(pDataDestR, vecIn, p0); | |||||
| } | |||||
| pDataSrc += 1; | |||||
| pDataDest += srcRows; | |||||
| } | |||||
| while (--i); | |||||
| return (ARM_MATH_SUCCESS); | |||||
| } | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) || defined(ARM_TABLE_FAST_SQRT_Q31_MVE) | |||||
| __STATIC_INLINE q31x4_t FAST_VSQRT_Q31(q31x4_t vecIn) | |||||
| { | |||||
| q63x2_t vecTmpLL; | |||||
| q31x4_t vecTmp0, vecTmp1; | |||||
| q31_t scale; | |||||
| q63_t tmp64; | |||||
| q31x4_t vecNrm, vecDst, vecIdx, vecSignBits; | |||||
| vecSignBits = vclsq(vecIn); | |||||
| vecSignBits = vbicq(vecSignBits, 1); | |||||
| /* | |||||
| * in = in << no_of_sign_bits; | |||||
| */ | |||||
| vecNrm = vshlq(vecIn, vecSignBits); | |||||
| /* | |||||
| * index = in >> 24; | |||||
| */ | |||||
| vecIdx = vecNrm >> 24; | |||||
| vecIdx = vecIdx << 1; | |||||
| vecTmp0 = vldrwq_gather_shifted_offset_s32(sqrtTable_Q31, vecIdx); | |||||
| vecIdx = vecIdx + 1; | |||||
| vecTmp1 = vldrwq_gather_shifted_offset_s32(sqrtTable_Q31, vecIdx); | |||||
| vecTmp1 = vqrdmulhq(vecTmp1, vecNrm); | |||||
| vecTmp0 = vecTmp0 - vecTmp1; | |||||
| vecTmp1 = vqrdmulhq(vecTmp0, vecTmp0); | |||||
| vecTmp1 = vqrdmulhq(vecNrm, vecTmp1); | |||||
| vecTmp1 = vdupq_n_s32(0x18000000) - vecTmp1; | |||||
| vecTmp0 = vqrdmulhq(vecTmp0, vecTmp1); | |||||
| vecTmpLL = vmullbq_int(vecNrm, vecTmp0); | |||||
| /* | |||||
| * scale elements 0, 2 | |||||
| */ | |||||
| scale = 26 + (vecSignBits[0] >> 1); | |||||
| tmp64 = asrl(vecTmpLL[0], scale); | |||||
| vecDst[0] = (q31_t) tmp64; | |||||
| scale = 26 + (vecSignBits[2] >> 1); | |||||
| tmp64 = asrl(vecTmpLL[1], scale); | |||||
| vecDst[2] = (q31_t) tmp64; | |||||
| vecTmpLL = vmulltq_int(vecNrm, vecTmp0); | |||||
| /* | |||||
| * scale elements 1, 3 | |||||
| */ | |||||
| scale = 26 + (vecSignBits[1] >> 1); | |||||
| tmp64 = asrl(vecTmpLL[0], scale); | |||||
| vecDst[1] = (q31_t) tmp64; | |||||
| scale = 26 + (vecSignBits[3] >> 1); | |||||
| tmp64 = asrl(vecTmpLL[1], scale); | |||||
| vecDst[3] = (q31_t) tmp64; | |||||
| /* | |||||
| * set negative values to 0 | |||||
| */ | |||||
| vecDst = vdupq_m(vecDst, 0, vcmpltq_n_s32(vecIn, 0)); | |||||
| return vecDst; | |||||
| } | |||||
| #endif | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) || defined(ARM_TABLE_FAST_SQRT_Q15_MVE) | |||||
| __STATIC_INLINE q15x8_t FAST_VSQRT_Q15(q15x8_t vecIn) | |||||
| { | |||||
| q31x4_t vecTmpLev, vecTmpLodd, vecSignL; | |||||
| q15x8_t vecTmp0, vecTmp1; | |||||
| q15x8_t vecNrm, vecDst, vecIdx, vecSignBits; | |||||
| vecDst = vuninitializedq_s16(); | |||||
| vecSignBits = vclsq(vecIn); | |||||
| vecSignBits = vbicq(vecSignBits, 1); | |||||
| /* | |||||
| * in = in << no_of_sign_bits; | |||||
| */ | |||||
| vecNrm = vshlq(vecIn, vecSignBits); | |||||
| vecIdx = vecNrm >> 8; | |||||
| vecIdx = vecIdx << 1; | |||||
| vecTmp0 = vldrhq_gather_shifted_offset_s16(sqrtTable_Q15, vecIdx); | |||||
| vecIdx = vecIdx + 1; | |||||
| vecTmp1 = vldrhq_gather_shifted_offset_s16(sqrtTable_Q15, vecIdx); | |||||
| vecTmp1 = vqrdmulhq(vecTmp1, vecNrm); | |||||
| vecTmp0 = vecTmp0 - vecTmp1; | |||||
| vecTmp1 = vqrdmulhq(vecTmp0, vecTmp0); | |||||
| vecTmp1 = vqrdmulhq(vecNrm, vecTmp1); | |||||
| vecTmp1 = vdupq_n_s16(0x1800) - vecTmp1; | |||||
| vecTmp0 = vqrdmulhq(vecTmp0, vecTmp1); | |||||
| vecSignBits = vecSignBits >> 1; | |||||
| vecTmpLev = vmullbq_int(vecNrm, vecTmp0); | |||||
| vecTmpLodd = vmulltq_int(vecNrm, vecTmp0); | |||||
| vecTmp0 = vecSignBits + 10; | |||||
| /* | |||||
| * negate sign to apply register based vshl | |||||
| */ | |||||
| vecTmp0 = -vecTmp0; | |||||
| /* | |||||
| * shift even elements | |||||
| */ | |||||
| vecSignL = vmovlbq(vecTmp0); | |||||
| vecTmpLev = vshlq(vecTmpLev, vecSignL); | |||||
| /* | |||||
| * shift odd elements | |||||
| */ | |||||
| vecSignL = vmovltq(vecTmp0); | |||||
| vecTmpLodd = vshlq(vecTmpLodd, vecSignL); | |||||
| /* | |||||
| * merge and narrow odd and even parts | |||||
| */ | |||||
| vecDst = vmovnbq_s32(vecDst, vecTmpLev); | |||||
| vecDst = vmovntq_s32(vecDst, vecTmpLodd); | |||||
| /* | |||||
| * set negative values to 0 | |||||
| */ | |||||
| vecDst = vdupq_m(vecDst, 0, vcmpltq_n_s16(vecIn, 0)); | |||||
| return vecDst; | |||||
| } | |||||
| #endif | |||||
| #endif /* defined (ARM_MATH_HELIUM) || defined(ARM_MATH_MVEI) */ | |||||
| #endif |
| /* ---------------------------------------------------------------------- | |||||
| * Project: CMSIS DSP Library | |||||
| * Title: arm_mve_tables.h | |||||
| * Description: common tables like fft twiddle factors, Bitreverse, reciprocal etc | |||||
| * used for MVE implementation only | |||||
| * | |||||
| * $Date: 08. January 2020 | |||||
| * $Revision: V1.7.0 | |||||
| * | |||||
| * Target Processor: Cortex-M cores | |||||
| * -------------------------------------------------------------------- */ | |||||
| /* | |||||
| * Copyright (C) 2010-2020 ARM Limited or its affiliates. All rights reserved. | |||||
| * | |||||
| * SPDX-License-Identifier: Apache-2.0 | |||||
| * | |||||
| * Licensed under the Apache License, Version 2.0 (the License); you may | |||||
| * not use this file except in compliance with the License. | |||||
| * You may obtain a copy of the License at | |||||
| * | |||||
| * www.apache.org/licenses/LICENSE-2.0 | |||||
| * | |||||
| * Unless required by applicable law or agreed to in writing, software | |||||
| * distributed under the License is distributed on an AS IS BASIS, WITHOUT | |||||
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
| * See the License for the specific language governing permissions and | |||||
| * limitations under the License. | |||||
| */ | |||||
| #ifndef _ARM_MVE_TABLES_H | |||||
| #define _ARM_MVE_TABLES_H | |||||
| #include "arm_math.h" | |||||
| #if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_16) || defined(ARM_TABLE_TWIDDLECOEF_F32_32) | |||||
| extern uint32_t rearranged_twiddle_tab_stride1_arr_16_f32[2]; | |||||
| extern uint32_t rearranged_twiddle_tab_stride2_arr_16_f32[2]; | |||||
| extern uint32_t rearranged_twiddle_tab_stride3_arr_16_f32[2]; | |||||
| extern float32_t rearranged_twiddle_stride1_16_f32[8]; | |||||
| extern float32_t rearranged_twiddle_stride2_16_f32[8]; | |||||
| extern float32_t rearranged_twiddle_stride3_16_f32[8]; | |||||
| #endif | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_64) || defined(ARM_TABLE_TWIDDLECOEF_F32_128) | |||||
| extern uint32_t rearranged_twiddle_tab_stride1_arr_64_f32[3]; | |||||
| extern uint32_t rearranged_twiddle_tab_stride2_arr_64_f32[3]; | |||||
| extern uint32_t rearranged_twiddle_tab_stride3_arr_64_f32[3]; | |||||
| extern float32_t rearranged_twiddle_stride1_64_f32[40]; | |||||
| extern float32_t rearranged_twiddle_stride2_64_f32[40]; | |||||
| extern float32_t rearranged_twiddle_stride3_64_f32[40]; | |||||
| #endif | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_256) || defined(ARM_TABLE_TWIDDLECOEF_F32_512) | |||||
| extern uint32_t rearranged_twiddle_tab_stride1_arr_256_f32[4]; | |||||
| extern uint32_t rearranged_twiddle_tab_stride2_arr_256_f32[4]; | |||||
| extern uint32_t rearranged_twiddle_tab_stride3_arr_256_f32[4]; | |||||
| extern float32_t rearranged_twiddle_stride1_256_f32[168]; | |||||
| extern float32_t rearranged_twiddle_stride2_256_f32[168]; | |||||
| extern float32_t rearranged_twiddle_stride3_256_f32[168]; | |||||
| #endif | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_1024) || defined(ARM_TABLE_TWIDDLECOEF_F32_2048) | |||||
| extern uint32_t rearranged_twiddle_tab_stride1_arr_1024_f32[5]; | |||||
| extern uint32_t rearranged_twiddle_tab_stride2_arr_1024_f32[5]; | |||||
| extern uint32_t rearranged_twiddle_tab_stride3_arr_1024_f32[5]; | |||||
| extern float32_t rearranged_twiddle_stride1_1024_f32[680]; | |||||
| extern float32_t rearranged_twiddle_stride2_1024_f32[680]; | |||||
| extern float32_t rearranged_twiddle_stride3_1024_f32[680]; | |||||
| #endif | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_4096) || defined(ARM_TABLE_TWIDDLECOEF_F32_8192) | |||||
| extern uint32_t rearranged_twiddle_tab_stride1_arr_4096_f32[6]; | |||||
| extern uint32_t rearranged_twiddle_tab_stride2_arr_4096_f32[6]; | |||||
| extern uint32_t rearranged_twiddle_tab_stride3_arr_4096_f32[6]; | |||||
| extern float32_t rearranged_twiddle_stride1_4096_f32[2728]; | |||||
| extern float32_t rearranged_twiddle_stride2_4096_f32[2728]; | |||||
| extern float32_t rearranged_twiddle_stride3_4096_f32[2728]; | |||||
| #endif | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) */ | |||||
| #endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ | |||||
| #if defined(ARM_MATH_MVEI) | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_16) || defined(ARM_TABLE_TWIDDLECOEF_Q31_32) | |||||
| extern uint32_t rearranged_twiddle_tab_stride1_arr_16_q31[2]; | |||||
| extern uint32_t rearranged_twiddle_tab_stride2_arr_16_q31[2]; | |||||
| extern uint32_t rearranged_twiddle_tab_stride3_arr_16_q31[2]; | |||||
| extern q31_t rearranged_twiddle_stride1_16_q31[8]; | |||||
| extern q31_t rearranged_twiddle_stride2_16_q31[8]; | |||||
| extern q31_t rearranged_twiddle_stride3_16_q31[8]; | |||||
| #endif | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_64) || defined(ARM_TABLE_TWIDDLECOEF_Q31_128) | |||||
| extern uint32_t rearranged_twiddle_tab_stride1_arr_64_q31[3]; | |||||
| extern uint32_t rearranged_twiddle_tab_stride2_arr_64_q31[3]; | |||||
| extern uint32_t rearranged_twiddle_tab_stride3_arr_64_q31[3]; | |||||
| extern q31_t rearranged_twiddle_stride1_64_q31[40]; | |||||
| extern q31_t rearranged_twiddle_stride2_64_q31[40]; | |||||
| extern q31_t rearranged_twiddle_stride3_64_q31[40]; | |||||
| #endif | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_256) || defined(ARM_TABLE_TWIDDLECOEF_Q31_512) | |||||
| extern uint32_t rearranged_twiddle_tab_stride1_arr_256_q31[4]; | |||||
| extern uint32_t rearranged_twiddle_tab_stride2_arr_256_q31[4]; | |||||
| extern uint32_t rearranged_twiddle_tab_stride3_arr_256_q31[4]; | |||||
| extern q31_t rearranged_twiddle_stride1_256_q31[168]; | |||||
| extern q31_t rearranged_twiddle_stride2_256_q31[168]; | |||||
| extern q31_t rearranged_twiddle_stride3_256_q31[168]; | |||||
| #endif | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_1024) || defined(ARM_TABLE_TWIDDLECOEF_Q31_2048) | |||||
| extern uint32_t rearranged_twiddle_tab_stride1_arr_1024_q31[5]; | |||||
| extern uint32_t rearranged_twiddle_tab_stride2_arr_1024_q31[5]; | |||||
| extern uint32_t rearranged_twiddle_tab_stride3_arr_1024_q31[5]; | |||||
| extern q31_t rearranged_twiddle_stride1_1024_q31[680]; | |||||
| extern q31_t rearranged_twiddle_stride2_1024_q31[680]; | |||||
| extern q31_t rearranged_twiddle_stride3_1024_q31[680]; | |||||
| #endif | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q31_4096) || defined(ARM_TABLE_TWIDDLECOEF_Q31_8192) | |||||
| extern uint32_t rearranged_twiddle_tab_stride1_arr_4096_q31[6]; | |||||
| extern uint32_t rearranged_twiddle_tab_stride2_arr_4096_q31[6]; | |||||
| extern uint32_t rearranged_twiddle_tab_stride3_arr_4096_q31[6]; | |||||
| extern q31_t rearranged_twiddle_stride1_4096_q31[2728]; | |||||
| extern q31_t rearranged_twiddle_stride2_4096_q31[2728]; | |||||
| extern q31_t rearranged_twiddle_stride3_4096_q31[2728]; | |||||
| #endif | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) */ | |||||
| #endif /* defined(ARM_MATH_MVEI) */ | |||||
| #if defined(ARM_MATH_MVEI) | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_16) || defined(ARM_TABLE_TWIDDLECOEF_Q15_32) | |||||
| extern uint32_t rearranged_twiddle_tab_stride1_arr_16_q15[2]; | |||||
| extern uint32_t rearranged_twiddle_tab_stride2_arr_16_q15[2]; | |||||
| extern uint32_t rearranged_twiddle_tab_stride3_arr_16_q15[2]; | |||||
| extern q15_t rearranged_twiddle_stride1_16_q15[8]; | |||||
| extern q15_t rearranged_twiddle_stride2_16_q15[8]; | |||||
| extern q15_t rearranged_twiddle_stride3_16_q15[8]; | |||||
| #endif | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_64) || defined(ARM_TABLE_TWIDDLECOEF_Q15_128) | |||||
| extern uint32_t rearranged_twiddle_tab_stride1_arr_64_q15[3]; | |||||
| extern uint32_t rearranged_twiddle_tab_stride2_arr_64_q15[3]; | |||||
| extern uint32_t rearranged_twiddle_tab_stride3_arr_64_q15[3]; | |||||
| extern q15_t rearranged_twiddle_stride1_64_q15[40]; | |||||
| extern q15_t rearranged_twiddle_stride2_64_q15[40]; | |||||
| extern q15_t rearranged_twiddle_stride3_64_q15[40]; | |||||
| #endif | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_256) || defined(ARM_TABLE_TWIDDLECOEF_Q15_512) | |||||
| extern uint32_t rearranged_twiddle_tab_stride1_arr_256_q15[4]; | |||||
| extern uint32_t rearranged_twiddle_tab_stride2_arr_256_q15[4]; | |||||
| extern uint32_t rearranged_twiddle_tab_stride3_arr_256_q15[4]; | |||||
| extern q15_t rearranged_twiddle_stride1_256_q15[168]; | |||||
| extern q15_t rearranged_twiddle_stride2_256_q15[168]; | |||||
| extern q15_t rearranged_twiddle_stride3_256_q15[168]; | |||||
| #endif | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_1024) || defined(ARM_TABLE_TWIDDLECOEF_Q15_2048) | |||||
| extern uint32_t rearranged_twiddle_tab_stride1_arr_1024_q15[5]; | |||||
| extern uint32_t rearranged_twiddle_tab_stride2_arr_1024_q15[5]; | |||||
| extern uint32_t rearranged_twiddle_tab_stride3_arr_1024_q15[5]; | |||||
| extern q15_t rearranged_twiddle_stride1_1024_q15[680]; | |||||
| extern q15_t rearranged_twiddle_stride2_1024_q15[680]; | |||||
| extern q15_t rearranged_twiddle_stride3_1024_q15[680]; | |||||
| #endif | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_Q15_4096) || defined(ARM_TABLE_TWIDDLECOEF_Q15_8192) | |||||
| extern uint32_t rearranged_twiddle_tab_stride1_arr_4096_q15[6]; | |||||
| extern uint32_t rearranged_twiddle_tab_stride2_arr_4096_q15[6]; | |||||
| extern uint32_t rearranged_twiddle_tab_stride3_arr_4096_q15[6]; | |||||
| extern q15_t rearranged_twiddle_stride1_4096_q15[2728]; | |||||
| extern q15_t rearranged_twiddle_stride2_4096_q15[2728]; | |||||
| extern q15_t rearranged_twiddle_stride3_4096_q15[2728]; | |||||
| #endif | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) */ | |||||
| #endif /* defined(ARM_MATH_MVEI) */ | |||||
| #if defined(ARM_MATH_MVEI) | |||||
| #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) | |||||
| #endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) */ | |||||
| #endif /* defined(ARM_MATH_MVEI) */ | |||||
| #endif /*_ARM_MVE_TABLES_H*/ | |||||
| /****************************************************************************** | |||||
| * @file arm_vec_math.h | |||||
| * @brief Public header file for CMSIS DSP Library | |||||
| * @version V1.7.0 | |||||
| * @date 15. October 2019 | |||||
| ******************************************************************************/ | |||||
| /* | |||||
| * Copyright (c) 2010-2019 Arm Limited or its affiliates. All rights reserved. | |||||
| * | |||||
| * SPDX-License-Identifier: Apache-2.0 | |||||
| * | |||||
| * Licensed under the Apache License, Version 2.0 (the License); you may | |||||
| * not use this file except in compliance with the License. | |||||
| * You may obtain a copy of the License at | |||||
| * | |||||
| * www.apache.org/licenses/LICENSE-2.0 | |||||
| * | |||||
| * Unless required by applicable law or agreed to in writing, software | |||||
| * distributed under the License is distributed on an AS IS BASIS, WITHOUT | |||||
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
| * See the License for the specific language governing permissions and | |||||
| * limitations under the License. | |||||
| */ | |||||
| #ifndef _ARM_VEC_MATH_H | |||||
| #define _ARM_VEC_MATH_H | |||||
| #include "arm_math.h" | |||||
| #include "arm_common_tables.h" | |||||
| #include "arm_helium_utils.h" | |||||
| #ifdef __cplusplus | |||||
| extern "C" | |||||
| { | |||||
| #endif | |||||
| #if (defined(ARM_MATH_MVEF) || defined(ARM_MATH_HELIUM)) && !defined(ARM_MATH_AUTOVECTORIZE) | |||||
| #define INV_NEWTON_INIT_F32 0x7EF127EA | |||||
| static const float32_t __logf_rng_f32=0.693147180f; | |||||
| /* fast inverse approximation (3x newton) */ | |||||
| __STATIC_INLINE f32x4_t vrecip_medprec_f32( | |||||
| f32x4_t x) | |||||
| { | |||||
| q31x4_t m; | |||||
| f32x4_t b; | |||||
| any32x4_t xinv; | |||||
| f32x4_t ax = vabsq(x); | |||||
| xinv.f = ax; | |||||
| m = 0x3F800000 - (xinv.i & 0x7F800000); | |||||
| xinv.i = xinv.i + m; | |||||
| xinv.f = 1.41176471f - 0.47058824f * xinv.f; | |||||
| xinv.i = xinv.i + m; | |||||
| b = 2.0f - xinv.f * ax; | |||||
| xinv.f = xinv.f * b; | |||||
| b = 2.0f - xinv.f * ax; | |||||
| xinv.f = xinv.f * b; | |||||
| b = 2.0f - xinv.f * ax; | |||||
| xinv.f = xinv.f * b; | |||||
| xinv.f = vdupq_m(xinv.f, INFINITY, vcmpeqq(x, 0.0f)); | |||||
| /* | |||||
| * restore sign | |||||
| */ | |||||
| xinv.f = vnegq_m(xinv.f, xinv.f, vcmpltq(x, 0.0f)); | |||||
| return xinv.f; | |||||
| } | |||||
| /* fast inverse approximation (4x newton) */ | |||||
| __STATIC_INLINE f32x4_t vrecip_hiprec_f32( | |||||
| f32x4_t x) | |||||
| { | |||||
| q31x4_t m; | |||||
| f32x4_t b; | |||||
| any32x4_t xinv; | |||||
| f32x4_t ax = vabsq(x); | |||||
| xinv.f = ax; | |||||
| m = 0x3F800000 - (xinv.i & 0x7F800000); | |||||
| xinv.i = xinv.i + m; | |||||
| xinv.f = 1.41176471f - 0.47058824f * xinv.f; | |||||
| xinv.i = xinv.i + m; | |||||
| b = 2.0f - xinv.f * ax; | |||||
| xinv.f = xinv.f * b; | |||||
| b = 2.0f - xinv.f * ax; | |||||
| xinv.f = xinv.f * b; | |||||
| b = 2.0f - xinv.f * ax; | |||||
| xinv.f = xinv.f * b; | |||||
| b = 2.0f - xinv.f * ax; | |||||
| xinv.f = xinv.f * b; | |||||
| xinv.f = vdupq_m(xinv.f, INFINITY, vcmpeqq(x, 0.0f)); | |||||
| /* | |||||
| * restore sign | |||||
| */ | |||||
| xinv.f = vnegq_m(xinv.f, xinv.f, vcmpltq(x, 0.0f)); | |||||
| return xinv.f; | |||||
| } | |||||
| __STATIC_INLINE f32x4_t vdiv_f32( | |||||
| f32x4_t num, f32x4_t den) | |||||
| { | |||||
| return vmulq(num, vrecip_hiprec_f32(den)); | |||||
| } | |||||
| /** | |||||
| @brief Single-precision taylor dev. | |||||
| @param[in] x f32 quad vector input | |||||
| @param[in] coeffs f32 quad vector coeffs | |||||
| @return destination f32 quad vector | |||||
| */ | |||||
| __STATIC_INLINE f32x4_t vtaylor_polyq_f32( | |||||
| f32x4_t x, | |||||
| const float32_t * coeffs) | |||||
| { | |||||
| f32x4_t A = vfmasq(vdupq_n_f32(coeffs[4]), x, coeffs[0]); | |||||
| f32x4_t B = vfmasq(vdupq_n_f32(coeffs[6]), x, coeffs[2]); | |||||
| f32x4_t C = vfmasq(vdupq_n_f32(coeffs[5]), x, coeffs[1]); | |||||
| f32x4_t D = vfmasq(vdupq_n_f32(coeffs[7]), x, coeffs[3]); | |||||
| f32x4_t x2 = vmulq(x, x); | |||||
| f32x4_t x4 = vmulq(x2, x2); | |||||
| f32x4_t res = vfmaq(vfmaq_f32(A, B, x2), vfmaq_f32(C, D, x2), x4); | |||||
| return res; | |||||
| } | |||||
| __STATIC_INLINE f32x4_t vmant_exp_f32( | |||||
| f32x4_t x, | |||||
| int32x4_t * e) | |||||
| { | |||||
| any32x4_t r; | |||||
| int32x4_t n; | |||||
| r.f = x; | |||||
| n = r.i >> 23; | |||||
| n = n - 127; | |||||
| r.i = r.i - (n << 23); | |||||
| *e = n; | |||||
| return r.f; | |||||
| } | |||||
| __STATIC_INLINE f32x4_t vlogq_f32(f32x4_t vecIn) | |||||
| { | |||||
| q31x4_t vecExpUnBiased; | |||||
| f32x4_t vecTmpFlt0, vecTmpFlt1; | |||||
| f32x4_t vecAcc0, vecAcc1, vecAcc2, vecAcc3; | |||||
| f32x4_t vecExpUnBiasedFlt; | |||||
| /* | |||||
| * extract exponent | |||||
| */ | |||||
| vecTmpFlt1 = vmant_exp_f32(vecIn, &vecExpUnBiased); | |||||
| vecTmpFlt0 = vecTmpFlt1 * vecTmpFlt1; | |||||
| /* | |||||
| * a = (__logf_lut_f32[4] * r.f) + (__logf_lut_f32[0]); | |||||
| */ | |||||
| vecAcc0 = vdupq_n_f32(__logf_lut_f32[0]); | |||||
| vecAcc0 = vfmaq(vecAcc0, vecTmpFlt1, __logf_lut_f32[4]); | |||||
| /* | |||||
| * b = (__logf_lut_f32[6] * r.f) + (__logf_lut_f32[2]); | |||||
| */ | |||||
| vecAcc1 = vdupq_n_f32(__logf_lut_f32[2]); | |||||
| vecAcc1 = vfmaq(vecAcc1, vecTmpFlt1, __logf_lut_f32[6]); | |||||
| /* | |||||
| * c = (__logf_lut_f32[5] * r.f) + (__logf_lut_f32[1]); | |||||
| */ | |||||
| vecAcc2 = vdupq_n_f32(__logf_lut_f32[1]); | |||||
| vecAcc2 = vfmaq(vecAcc2, vecTmpFlt1, __logf_lut_f32[5]); | |||||
| /* | |||||
| * d = (__logf_lut_f32[7] * r.f) + (__logf_lut_f32[3]); | |||||
| */ | |||||
| vecAcc3 = vdupq_n_f32(__logf_lut_f32[3]); | |||||
| vecAcc3 = vfmaq(vecAcc3, vecTmpFlt1, __logf_lut_f32[7]); | |||||
| /* | |||||
| * a = a + b * xx; | |||||
| */ | |||||
| vecAcc0 = vfmaq(vecAcc0, vecAcc1, vecTmpFlt0); | |||||
| /* | |||||
| * c = c + d * xx; | |||||
| */ | |||||
| vecAcc2 = vfmaq(vecAcc2, vecAcc3, vecTmpFlt0); | |||||
| /* | |||||
| * xx = xx * xx; | |||||
| */ | |||||
| vecTmpFlt0 = vecTmpFlt0 * vecTmpFlt0; | |||||
| vecExpUnBiasedFlt = vcvtq_f32_s32(vecExpUnBiased); | |||||
| /* | |||||
| * r.f = a + c * xx; | |||||
| */ | |||||
| vecAcc0 = vfmaq(vecAcc0, vecAcc2, vecTmpFlt0); | |||||
| /* | |||||
| * add exponent | |||||
| * r.f = r.f + ((float32_t) m) * __logf_rng_f32; | |||||
| */ | |||||
| vecAcc0 = vfmaq(vecAcc0, vecExpUnBiasedFlt, __logf_rng_f32); | |||||
| // set log0 down to -inf | |||||
| vecAcc0 = vdupq_m(vecAcc0, -INFINITY, vcmpeqq(vecIn, 0.0f)); | |||||
| return vecAcc0; | |||||
| } | |||||
| __STATIC_INLINE f32x4_t vexpq_f32( | |||||
| f32x4_t x) | |||||
| { | |||||
| // Perform range reduction [-log(2),log(2)] | |||||
| int32x4_t m = vcvtq_s32_f32(vmulq_n_f32(x, 1.4426950408f)); | |||||
| f32x4_t val = vfmsq_f32(x, vcvtq_f32_s32(m), vdupq_n_f32(0.6931471805f)); | |||||
| // Polynomial Approximation | |||||
| f32x4_t poly = vtaylor_polyq_f32(val, exp_tab); | |||||
| // Reconstruct | |||||
| poly = (f32x4_t) (vqaddq_s32((q31x4_t) (poly), vqshlq_n_s32(m, 23))); | |||||
| poly = vdupq_m(poly, 0.0f, vcmpltq_n_s32(m, -126)); | |||||
| return poly; | |||||
| } | |||||
| __STATIC_INLINE f32x4_t arm_vec_exponent_f32(f32x4_t x, int32_t nb) | |||||
| { | |||||
| f32x4_t r = x; | |||||
| nb--; | |||||
| while (nb > 0) { | |||||
| r = vmulq(r, x); | |||||
| nb--; | |||||
| } | |||||
| return (r); | |||||
| } | |||||
| __STATIC_INLINE f32x4_t vrecip_f32(f32x4_t vecIn) | |||||
| { | |||||
| f32x4_t vecSx, vecW, vecTmp; | |||||
| any32x4_t v; | |||||
| vecSx = vabsq(vecIn); | |||||
| v.f = vecIn; | |||||
| v.i = vsubq(vdupq_n_s32(INV_NEWTON_INIT_F32), v.i); | |||||
| vecW = vmulq(vecSx, v.f); | |||||
| // v.f = v.f * (8 + w * (-28 + w * (56 + w * (-70 + w *(56 + w * (-28 + w * (8 - w))))))); | |||||
| vecTmp = vsubq(vdupq_n_f32(8.0f), vecW); | |||||
| vecTmp = vfmasq(vecW, vecTmp, -28.0f); | |||||
| vecTmp = vfmasq(vecW, vecTmp, 56.0f); | |||||
| vecTmp = vfmasq(vecW, vecTmp, -70.0f); | |||||
| vecTmp = vfmasq(vecW, vecTmp, 56.0f); | |||||
| vecTmp = vfmasq(vecW, vecTmp, -28.0f); | |||||
| vecTmp = vfmasq(vecW, vecTmp, 8.0f); | |||||
| v.f = vmulq(v.f, vecTmp); | |||||
| v.f = vdupq_m(v.f, INFINITY, vcmpeqq(vecIn, 0.0f)); | |||||
| /* | |||||
| * restore sign | |||||
| */ | |||||
| v.f = vnegq_m(v.f, v.f, vcmpltq(vecIn, 0.0f)); | |||||
| return v.f; | |||||
| } | |||||
| __STATIC_INLINE f32x4_t vtanhq_f32( | |||||
| f32x4_t val) | |||||
| { | |||||
| f32x4_t x = | |||||
| vminnmq_f32(vmaxnmq_f32(val, vdupq_n_f32(-10.f)), vdupq_n_f32(10.0f)); | |||||
| f32x4_t exp2x = vexpq_f32(vmulq_n_f32(x, 2.f)); | |||||
| f32x4_t num = vsubq_n_f32(exp2x, 1.f); | |||||
| f32x4_t den = vaddq_n_f32(exp2x, 1.f); | |||||
| f32x4_t tanh = vmulq_f32(num, vrecip_f32(den)); | |||||
| return tanh; | |||||
| } | |||||
| __STATIC_INLINE f32x4_t vpowq_f32( | |||||
| f32x4_t val, | |||||
| f32x4_t n) | |||||
| { | |||||
| return vexpq_f32(vmulq_f32(n, vlogq_f32(val))); | |||||
| } | |||||
| #endif /* (defined(ARM_MATH_MVEF) || defined(ARM_MATH_HELIUM)) && !defined(ARM_MATH_AUTOVECTORIZE)*/ | |||||
| #if (defined(ARM_MATH_MVEI) || defined(ARM_MATH_HELIUM)) | |||||
| #endif /* (defined(ARM_MATH_MVEI) || defined(ARM_MATH_HELIUM)) */ | |||||
| #if (defined(ARM_MATH_NEON) || defined(ARM_MATH_NEON_EXPERIMENTAL)) && !defined(ARM_MATH_AUTOVECTORIZE) | |||||
| #include "NEMath.h" | |||||
| /** | |||||
| * @brief Vectorized integer exponentiation | |||||
| * @param[in] x value | |||||
| * @param[in] nb integer exponent >= 1 | |||||
| * @return x^nb | |||||
| * | |||||
| */ | |||||
| __STATIC_INLINE float32x4_t arm_vec_exponent_f32(float32x4_t x, int32_t nb) | |||||
| { | |||||
| float32x4_t r = x; | |||||
| nb --; | |||||
| while(nb > 0) | |||||
| { | |||||
| r = vmulq_f32(r , x); | |||||
| nb--; | |||||
| } | |||||
| return(r); | |||||
| } | |||||
| __STATIC_INLINE float32x4_t __arm_vec_sqrt_f32_neon(float32x4_t x) | |||||
| { | |||||
| float32x4_t x1 = vmaxq_f32(x, vdupq_n_f32(FLT_MIN)); | |||||
| float32x4_t e = vrsqrteq_f32(x1); | |||||
| e = vmulq_f32(vrsqrtsq_f32(vmulq_f32(x1, e), e), e); | |||||
| e = vmulq_f32(vrsqrtsq_f32(vmulq_f32(x1, e), e), e); | |||||
| return vmulq_f32(x, e); | |||||
| } | |||||
| __STATIC_INLINE int16x8_t __arm_vec_sqrt_q15_neon(int16x8_t vec) | |||||
| { | |||||
| float32x4_t tempF; | |||||
| int32x4_t tempHI,tempLO; | |||||
| tempLO = vmovl_s16(vget_low_s16(vec)); | |||||
| tempF = vcvtq_n_f32_s32(tempLO,15); | |||||
| tempF = __arm_vec_sqrt_f32_neon(tempF); | |||||
| tempLO = vcvtq_n_s32_f32(tempF,15); | |||||
| tempHI = vmovl_s16(vget_high_s16(vec)); | |||||
| tempF = vcvtq_n_f32_s32(tempHI,15); | |||||
| tempF = __arm_vec_sqrt_f32_neon(tempF); | |||||
| tempHI = vcvtq_n_s32_f32(tempF,15); | |||||
| return(vcombine_s16(vqmovn_s32(tempLO),vqmovn_s32(tempHI))); | |||||
| } | |||||
| __STATIC_INLINE int32x4_t __arm_vec_sqrt_q31_neon(int32x4_t vec) | |||||
| { | |||||
| float32x4_t temp; | |||||
| temp = vcvtq_n_f32_s32(vec,31); | |||||
| temp = __arm_vec_sqrt_f32_neon(temp); | |||||
| return(vcvtq_n_s32_f32(temp,31)); | |||||
| } | |||||
| #endif /* (defined(ARM_MATH_NEON) || defined(ARM_MATH_NEON_EXPERIMENTAL)) && !defined(ARM_MATH_AUTOVECTORIZE) */ | |||||
| #ifdef __cplusplus | |||||
| } | |||||
| #endif | |||||
| #endif /* _ARM_VEC_MATH_H */ | |||||
| /** | |||||
| * | |||||
| * End of file. | |||||
| */ |
| /****************************************************************************** | |||||
| * @file cachel1_armv7.h | |||||
| * @brief CMSIS Level 1 Cache API for Armv7-M and later | |||||
| * @version V1.0.0 | |||||
| * @date 03. March 2020 | |||||
| ******************************************************************************/ | |||||
| /* | |||||
| * Copyright (c) 2020 Arm Limited. All rights reserved. | |||||
| * | |||||
| * SPDX-License-Identifier: Apache-2.0 | |||||
| * | |||||
| * Licensed under the Apache License, Version 2.0 (the License); you may | |||||
| * not use this file except in compliance with the License. | |||||
| * You may obtain a copy of the License at | |||||
| * | |||||
| * www.apache.org/licenses/LICENSE-2.0 | |||||
| * | |||||
| * Unless required by applicable law or agreed to in writing, software | |||||
| * distributed under the License is distributed on an AS IS BASIS, WITHOUT | |||||
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
| * See the License for the specific language governing permissions and | |||||
| * limitations under the License. | |||||
| */ | |||||
| #if defined ( __ICCARM__ ) | |||||
| #pragma system_include /* treat file as system include file for MISRA check */ | |||||
| #elif defined (__clang__) | |||||
| #pragma clang system_header /* treat file as system include file */ | |||||
| #endif | |||||
| #ifndef ARM_CACHEL1_ARMV7_H | |||||
| #define ARM_CACHEL1_ARMV7_H | |||||
| /** | |||||
| \ingroup CMSIS_Core_FunctionInterface | |||||
| \defgroup CMSIS_Core_CacheFunctions Cache Functions | |||||
| \brief Functions that configure Instruction and Data cache. | |||||
| @{ | |||||
| */ | |||||
| /* Cache Size ID Register Macros */ | |||||
| #define CCSIDR_WAYS(x) (((x) & SCB_CCSIDR_ASSOCIATIVITY_Msk) >> SCB_CCSIDR_ASSOCIATIVITY_Pos) | |||||
| #define CCSIDR_SETS(x) (((x) & SCB_CCSIDR_NUMSETS_Msk ) >> SCB_CCSIDR_NUMSETS_Pos ) | |||||
| #ifndef __SCB_DCACHE_LINE_SIZE | |||||
| #define __SCB_DCACHE_LINE_SIZE 32U /*!< Cortex-M7 cache line size is fixed to 32 bytes (8 words). See also register SCB_CCSIDR */ | |||||
| #endif | |||||
| #ifndef __SCB_ICACHE_LINE_SIZE | |||||
| #define __SCB_ICACHE_LINE_SIZE 32U /*!< Cortex-M7 cache line size is fixed to 32 bytes (8 words). See also register SCB_CCSIDR */ | |||||
| #endif | |||||
| /** | |||||
| \brief Enable I-Cache | |||||
| \details Turns on I-Cache | |||||
| */ | |||||
| __STATIC_FORCEINLINE void SCB_EnableICache (void) | |||||
| { | |||||
| #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U) | |||||
| if (SCB->CCR & SCB_CCR_IC_Msk) return; /* return if ICache is already enabled */ | |||||
| __DSB(); | |||||
| __ISB(); | |||||
| SCB->ICIALLU = 0UL; /* invalidate I-Cache */ | |||||
| __DSB(); | |||||
| __ISB(); | |||||
| SCB->CCR |= (uint32_t)SCB_CCR_IC_Msk; /* enable I-Cache */ | |||||
| __DSB(); | |||||
| __ISB(); | |||||
| #endif | |||||
| } | |||||
| /** | |||||
| \brief Disable I-Cache | |||||
| \details Turns off I-Cache | |||||
| */ | |||||
| __STATIC_FORCEINLINE void SCB_DisableICache (void) | |||||
| { | |||||
| #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U) | |||||
| __DSB(); | |||||
| __ISB(); | |||||
| SCB->CCR &= ~(uint32_t)SCB_CCR_IC_Msk; /* disable I-Cache */ | |||||
| SCB->ICIALLU = 0UL; /* invalidate I-Cache */ | |||||
| __DSB(); | |||||
| __ISB(); | |||||
| #endif | |||||
| } | |||||
| /** | |||||
| \brief Invalidate I-Cache | |||||
| \details Invalidates I-Cache | |||||
| */ | |||||
| __STATIC_FORCEINLINE void SCB_InvalidateICache (void) | |||||
| { | |||||
| #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U) | |||||
| __DSB(); | |||||
| __ISB(); | |||||
| SCB->ICIALLU = 0UL; | |||||
| __DSB(); | |||||
| __ISB(); | |||||
| #endif | |||||
| } | |||||
| /** | |||||
| \brief I-Cache Invalidate by address | |||||
| \details Invalidates I-Cache for the given address. | |||||
| I-Cache is invalidated starting from a 32 byte aligned address in 32 byte granularity. | |||||
| I-Cache memory blocks which are part of given address + given size are invalidated. | |||||
| \param[in] addr address | |||||
| \param[in] isize size of memory block (in number of bytes) | |||||
| */ | |||||
| __STATIC_FORCEINLINE void SCB_InvalidateICache_by_Addr (void *addr, int32_t isize) | |||||
| { | |||||
| #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U) | |||||
| if ( isize > 0 ) { | |||||
| int32_t op_size = isize + (((uint32_t)addr) & (__SCB_ICACHE_LINE_SIZE - 1U)); | |||||
| uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_ICACHE_LINE_SIZE - 1U) */; | |||||
| __DSB(); | |||||
| do { | |||||
| SCB->ICIMVAU = op_addr; /* register accepts only 32byte aligned values, only bits 31..5 are valid */ | |||||
| op_addr += __SCB_ICACHE_LINE_SIZE; | |||||
| op_size -= __SCB_ICACHE_LINE_SIZE; | |||||
| } while ( op_size > 0 ); | |||||
| __DSB(); | |||||
| __ISB(); | |||||
| } | |||||
| #endif | |||||
| } | |||||
| /** | |||||
| \brief Enable D-Cache | |||||
| \details Turns on D-Cache | |||||
| */ | |||||
| __STATIC_FORCEINLINE void SCB_EnableDCache (void) | |||||
| { | |||||
| #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) | |||||
| uint32_t ccsidr; | |||||
| uint32_t sets; | |||||
| uint32_t ways; | |||||
| if (SCB->CCR & SCB_CCR_DC_Msk) return; /* return if DCache is already enabled */ | |||||
| SCB->CSSELR = 0U; /* select Level 1 data cache */ | |||||
| __DSB(); | |||||
| ccsidr = SCB->CCSIDR; | |||||
| /* invalidate D-Cache */ | |||||
| sets = (uint32_t)(CCSIDR_SETS(ccsidr)); | |||||
| do { | |||||
| ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); | |||||
| do { | |||||
| SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) | | |||||
| ((ways << SCB_DCISW_WAY_Pos) & SCB_DCISW_WAY_Msk) ); | |||||
| #if defined ( __CC_ARM ) | |||||
| __schedule_barrier(); | |||||
| #endif | |||||
| } while (ways-- != 0U); | |||||
| } while(sets-- != 0U); | |||||
| __DSB(); | |||||
| SCB->CCR |= (uint32_t)SCB_CCR_DC_Msk; /* enable D-Cache */ | |||||
| __DSB(); | |||||
| __ISB(); | |||||
| #endif | |||||
| } | |||||
| /** | |||||
| \brief Disable D-Cache | |||||
| \details Turns off D-Cache | |||||
| */ | |||||
| __STATIC_FORCEINLINE void SCB_DisableDCache (void) | |||||
| { | |||||
| #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) | |||||
| uint32_t ccsidr; | |||||
| uint32_t sets; | |||||
| uint32_t ways; | |||||
| SCB->CSSELR = 0U; /* select Level 1 data cache */ | |||||
| __DSB(); | |||||
| SCB->CCR &= ~(uint32_t)SCB_CCR_DC_Msk; /* disable D-Cache */ | |||||
| __DSB(); | |||||
| ccsidr = SCB->CCSIDR; | |||||
| /* clean & invalidate D-Cache */ | |||||
| sets = (uint32_t)(CCSIDR_SETS(ccsidr)); | |||||
| do { | |||||
| ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); | |||||
| do { | |||||
| SCB->DCCISW = (((sets << SCB_DCCISW_SET_Pos) & SCB_DCCISW_SET_Msk) | | |||||
| ((ways << SCB_DCCISW_WAY_Pos) & SCB_DCCISW_WAY_Msk) ); | |||||
| #if defined ( __CC_ARM ) | |||||
| __schedule_barrier(); | |||||
| #endif | |||||
| } while (ways-- != 0U); | |||||
| } while(sets-- != 0U); | |||||
| __DSB(); | |||||
| __ISB(); | |||||
| #endif | |||||
| } | |||||
| /** | |||||
| \brief Invalidate D-Cache | |||||
| \details Invalidates D-Cache | |||||
| */ | |||||
| __STATIC_FORCEINLINE void SCB_InvalidateDCache (void) | |||||
| { | |||||
| #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) | |||||
| uint32_t ccsidr; | |||||
| uint32_t sets; | |||||
| uint32_t ways; | |||||
| SCB->CSSELR = 0U; /* select Level 1 data cache */ | |||||
| __DSB(); | |||||
| ccsidr = SCB->CCSIDR; | |||||
| /* invalidate D-Cache */ | |||||
| sets = (uint32_t)(CCSIDR_SETS(ccsidr)); | |||||
| do { | |||||
| ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); | |||||
| do { | |||||
| SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) | | |||||
| ((ways << SCB_DCISW_WAY_Pos) & SCB_DCISW_WAY_Msk) ); | |||||
| #if defined ( __CC_ARM ) | |||||
| __schedule_barrier(); | |||||
| #endif | |||||
| } while (ways-- != 0U); | |||||
| } while(sets-- != 0U); | |||||
| __DSB(); | |||||
| __ISB(); | |||||
| #endif | |||||
| } | |||||
| /** | |||||
| \brief Clean D-Cache | |||||
| \details Cleans D-Cache | |||||
| */ | |||||
| __STATIC_FORCEINLINE void SCB_CleanDCache (void) | |||||
| { | |||||
| #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) | |||||
| uint32_t ccsidr; | |||||
| uint32_t sets; | |||||
| uint32_t ways; | |||||
| SCB->CSSELR = 0U; /* select Level 1 data cache */ | |||||
| __DSB(); | |||||
| ccsidr = SCB->CCSIDR; | |||||
| /* clean D-Cache */ | |||||
| sets = (uint32_t)(CCSIDR_SETS(ccsidr)); | |||||
| do { | |||||
| ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); | |||||
| do { | |||||
| SCB->DCCSW = (((sets << SCB_DCCSW_SET_Pos) & SCB_DCCSW_SET_Msk) | | |||||
| ((ways << SCB_DCCSW_WAY_Pos) & SCB_DCCSW_WAY_Msk) ); | |||||
| #if defined ( __CC_ARM ) | |||||
| __schedule_barrier(); | |||||
| #endif | |||||
| } while (ways-- != 0U); | |||||
| } while(sets-- != 0U); | |||||
| __DSB(); | |||||
| __ISB(); | |||||
| #endif | |||||
| } | |||||
| /** | |||||
| \brief Clean & Invalidate D-Cache | |||||
| \details Cleans and Invalidates D-Cache | |||||
| */ | |||||
| __STATIC_FORCEINLINE void SCB_CleanInvalidateDCache (void) | |||||
| { | |||||
| #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) | |||||
| uint32_t ccsidr; | |||||
| uint32_t sets; | |||||
| uint32_t ways; | |||||
| SCB->CSSELR = 0U; /* select Level 1 data cache */ | |||||
| __DSB(); | |||||
| ccsidr = SCB->CCSIDR; | |||||
| /* clean & invalidate D-Cache */ | |||||
| sets = (uint32_t)(CCSIDR_SETS(ccsidr)); | |||||
| do { | |||||
| ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); | |||||
| do { | |||||
| SCB->DCCISW = (((sets << SCB_DCCISW_SET_Pos) & SCB_DCCISW_SET_Msk) | | |||||
| ((ways << SCB_DCCISW_WAY_Pos) & SCB_DCCISW_WAY_Msk) ); | |||||
| #if defined ( __CC_ARM ) | |||||
| __schedule_barrier(); | |||||
| #endif | |||||
| } while (ways-- != 0U); | |||||
| } while(sets-- != 0U); | |||||
| __DSB(); | |||||
| __ISB(); | |||||
| #endif | |||||
| } | |||||
| /** | |||||
| \brief D-Cache Invalidate by address | |||||
| \details Invalidates D-Cache for the given address. | |||||
| D-Cache is invalidated starting from a 32 byte aligned address in 32 byte granularity. | |||||
| D-Cache memory blocks which are part of given address + given size are invalidated. | |||||
| \param[in] addr address | |||||
| \param[in] dsize size of memory block (in number of bytes) | |||||
| */ | |||||
| __STATIC_FORCEINLINE void SCB_InvalidateDCache_by_Addr (void *addr, int32_t dsize) | |||||
| { | |||||
| #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) | |||||
| if ( dsize > 0 ) { | |||||
| int32_t op_size = dsize + (((uint32_t)addr) & (__SCB_DCACHE_LINE_SIZE - 1U)); | |||||
| uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_DCACHE_LINE_SIZE - 1U) */; | |||||
| __DSB(); | |||||
| do { | |||||
| SCB->DCIMVAC = op_addr; /* register accepts only 32byte aligned values, only bits 31..5 are valid */ | |||||
| op_addr += __SCB_DCACHE_LINE_SIZE; | |||||
| op_size -= __SCB_DCACHE_LINE_SIZE; | |||||
| } while ( op_size > 0 ); | |||||
| __DSB(); | |||||
| __ISB(); | |||||
| } | |||||
| #endif | |||||
| } | |||||
| /** | |||||
| \brief D-Cache Clean by address | |||||
| \details Cleans D-Cache for the given address | |||||
| D-Cache is cleaned starting from a 32 byte aligned address in 32 byte granularity. | |||||
| D-Cache memory blocks which are part of given address + given size are cleaned. | |||||
| \param[in] addr address | |||||
| \param[in] dsize size of memory block (in number of bytes) | |||||
| */ | |||||
| __STATIC_FORCEINLINE void SCB_CleanDCache_by_Addr (uint32_t *addr, int32_t dsize) | |||||
| { | |||||
| #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) | |||||
| if ( dsize > 0 ) { | |||||
| int32_t op_size = dsize + (((uint32_t)addr) & (__SCB_DCACHE_LINE_SIZE - 1U)); | |||||
| uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_DCACHE_LINE_SIZE - 1U) */; | |||||
| __DSB(); | |||||
| do { | |||||
| SCB->DCCMVAC = op_addr; /* register accepts only 32byte aligned values, only bits 31..5 are valid */ | |||||
| op_addr += __SCB_DCACHE_LINE_SIZE; | |||||
| op_size -= __SCB_DCACHE_LINE_SIZE; | |||||
| } while ( op_size > 0 ); | |||||
| __DSB(); | |||||
| __ISB(); | |||||
| } | |||||
| #endif | |||||
| } | |||||
| /** | |||||
| \brief D-Cache Clean and Invalidate by address | |||||
| \details Cleans and invalidates D_Cache for the given address | |||||
| D-Cache is cleaned and invalidated starting from a 32 byte aligned address in 32 byte granularity. | |||||
| D-Cache memory blocks which are part of given address + given size are cleaned and invalidated. | |||||
| \param[in] addr address (aligned to 32-byte boundary) | |||||
| \param[in] dsize size of memory block (in number of bytes) | |||||
| */ | |||||
| __STATIC_FORCEINLINE void SCB_CleanInvalidateDCache_by_Addr (uint32_t *addr, int32_t dsize) | |||||
| { | |||||
| #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) | |||||
| if ( dsize > 0 ) { | |||||
| int32_t op_size = dsize + (((uint32_t)addr) & (__SCB_DCACHE_LINE_SIZE - 1U)); | |||||
| uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_DCACHE_LINE_SIZE - 1U) */; | |||||
| __DSB(); | |||||
| do { | |||||
| SCB->DCCIMVAC = op_addr; /* register accepts only 32byte aligned values, only bits 31..5 are valid */ | |||||
| op_addr += __SCB_DCACHE_LINE_SIZE; | |||||
| op_size -= __SCB_DCACHE_LINE_SIZE; | |||||
| } while ( op_size > 0 ); | |||||
| __DSB(); | |||||
| __ISB(); | |||||
| } | |||||
| #endif | |||||
| } | |||||
| /*@} end of CMSIS_Core_CacheFunctions */ | |||||
| #endif /* ARM_CACHEL1_ARMV7_H */ |
| /**************************************************************************//** | |||||
| * @file cmsis_compiler.h | |||||
| * @brief CMSIS compiler generic header file | |||||
| * @version V5.1.0 | |||||
| * @date 09. October 2018 | |||||
| ******************************************************************************/ | |||||
| /* | |||||
| * Copyright (c) 2009-2018 Arm Limited. All rights reserved. | |||||
| * | |||||
| * SPDX-License-Identifier: Apache-2.0 | |||||
| * | |||||
| * Licensed under the Apache License, Version 2.0 (the License); you may | |||||
| * not use this file except in compliance with the License. | |||||
| * You may obtain a copy of the License at | |||||
| * | |||||
| * www.apache.org/licenses/LICENSE-2.0 | |||||
| * | |||||
| * Unless required by applicable law or agreed to in writing, software | |||||
| * distributed under the License is distributed on an AS IS BASIS, WITHOUT | |||||
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
| * See the License for the specific language governing permissions and | |||||
| * limitations under the License. | |||||
| */ | |||||
| #ifndef __CMSIS_COMPILER_H | |||||
| #define __CMSIS_COMPILER_H | |||||
| #include <stdint.h> | |||||
| /* | |||||
| * Arm Compiler 4/5 | |||||
| */ | |||||
| #if defined ( __CC_ARM ) | |||||
| #include "cmsis_armcc.h" | |||||
| /* | |||||
| * Arm Compiler 6.6 LTM (armclang) | |||||
| */ | |||||
| #elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) && (__ARMCC_VERSION < 6100100) | |||||
| #include "cmsis_armclang_ltm.h" | |||||
| /* | |||||
| * Arm Compiler above 6.10.1 (armclang) | |||||
| */ | |||||
| #elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6100100) | |||||
| #include "cmsis_armclang.h" | |||||
| /* | |||||
| * GNU Compiler | |||||
| */ | |||||
| #elif defined ( __GNUC__ ) | |||||
| #include "cmsis_gcc.h" | |||||
| /* | |||||
| * IAR Compiler | |||||
| */ | |||||
| #elif defined ( __ICCARM__ ) | |||||
| #include <cmsis_iccarm.h> | |||||
| /* | |||||
| * TI Arm Compiler | |||||
| */ | |||||
| #elif defined ( __TI_ARM__ ) | |||||
| #include <cmsis_ccs.h> | |||||
| #ifndef __ASM | |||||
| #define __ASM __asm | |||||
| #endif | |||||
| #ifndef __INLINE | |||||
| #define __INLINE inline | |||||
| #endif | |||||
| #ifndef __STATIC_INLINE | |||||
| #define __STATIC_INLINE static inline | |||||
| #endif | |||||
| #ifndef __STATIC_FORCEINLINE | |||||
| #define __STATIC_FORCEINLINE __STATIC_INLINE | |||||
| #endif | |||||
| #ifndef __NO_RETURN | |||||
| #define __NO_RETURN __attribute__((noreturn)) | |||||
| #endif | |||||
| #ifndef __USED | |||||
| #define __USED __attribute__((used)) | |||||
| #endif | |||||
| #ifndef __WEAK | |||||
| #define __WEAK __attribute__((weak)) | |||||
| #endif | |||||
| #ifndef __PACKED | |||||
| #define __PACKED __attribute__((packed)) | |||||
| #endif | |||||
| #ifndef __PACKED_STRUCT | |||||
| #define __PACKED_STRUCT struct __attribute__((packed)) | |||||
| #endif | |||||
| #ifndef __PACKED_UNION | |||||
| #define __PACKED_UNION union __attribute__((packed)) | |||||
| #endif | |||||
| #ifndef __UNALIGNED_UINT32 /* deprecated */ | |||||
| struct __attribute__((packed)) T_UINT32 { uint32_t v; }; | |||||
| #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) | |||||
| #endif | |||||
| #ifndef __UNALIGNED_UINT16_WRITE | |||||
| __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; | |||||
| #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void*)(addr))->v) = (val)) | |||||
| #endif | |||||
| #ifndef __UNALIGNED_UINT16_READ | |||||
| __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; | |||||
| #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) | |||||
| #endif | |||||
| #ifndef __UNALIGNED_UINT32_WRITE | |||||
| __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; | |||||
| #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) | |||||
| #endif | |||||
| #ifndef __UNALIGNED_UINT32_READ | |||||
| __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; | |||||
| #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) | |||||
| #endif | |||||
| #ifndef __ALIGNED | |||||
| #define __ALIGNED(x) __attribute__((aligned(x))) | |||||
| #endif | |||||
| #ifndef __RESTRICT | |||||
| #define __RESTRICT __restrict | |||||
| #endif | |||||
| #ifndef __COMPILER_BARRIER | |||||
| #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored. | |||||
| #define __COMPILER_BARRIER() (void)0 | |||||
| #endif | |||||
| /* | |||||
| * TASKING Compiler | |||||
| */ | |||||
| #elif defined ( __TASKING__ ) | |||||
| /* | |||||
| * The CMSIS functions have been implemented as intrinsics in the compiler. | |||||
| * Please use "carm -?i" to get an up to date list of all intrinsics, | |||||
| * Including the CMSIS ones. | |||||
| */ | |||||
| #ifndef __ASM | |||||
| #define __ASM __asm | |||||
| #endif | |||||
| #ifndef __INLINE | |||||
| #define __INLINE inline | |||||
| #endif | |||||
| #ifndef __STATIC_INLINE | |||||
| #define __STATIC_INLINE static inline | |||||
| #endif | |||||
| #ifndef __STATIC_FORCEINLINE | |||||
| #define __STATIC_FORCEINLINE __STATIC_INLINE | |||||
| #endif | |||||
| #ifndef __NO_RETURN | |||||
| #define __NO_RETURN __attribute__((noreturn)) | |||||
| #endif | |||||
| #ifndef __USED | |||||
| #define __USED __attribute__((used)) | |||||
| #endif | |||||
| #ifndef __WEAK | |||||
| #define __WEAK __attribute__((weak)) | |||||
| #endif | |||||
| #ifndef __PACKED | |||||
| #define __PACKED __packed__ | |||||
| #endif | |||||
| #ifndef __PACKED_STRUCT | |||||
| #define __PACKED_STRUCT struct __packed__ | |||||
| #endif | |||||
| #ifndef __PACKED_UNION | |||||
| #define __PACKED_UNION union __packed__ | |||||
| #endif | |||||
| #ifndef __UNALIGNED_UINT32 /* deprecated */ | |||||
| struct __packed__ T_UINT32 { uint32_t v; }; | |||||
| #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) | |||||
| #endif | |||||
| #ifndef __UNALIGNED_UINT16_WRITE | |||||
| __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; | |||||
| #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) | |||||
| #endif | |||||
| #ifndef __UNALIGNED_UINT16_READ | |||||
| __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; | |||||
| #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) | |||||
| #endif | |||||
| #ifndef __UNALIGNED_UINT32_WRITE | |||||
| __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; | |||||
| #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) | |||||
| #endif | |||||
| #ifndef __UNALIGNED_UINT32_READ | |||||
| __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; | |||||
| #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) | |||||
| #endif | |||||
| #ifndef __ALIGNED | |||||
| #define __ALIGNED(x) __align(x) | |||||
| #endif | |||||
| #ifndef __RESTRICT | |||||
| #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored. | |||||
| #define __RESTRICT | |||||
| #endif | |||||
| #ifndef __COMPILER_BARRIER | |||||
| #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored. | |||||
| #define __COMPILER_BARRIER() (void)0 | |||||
| #endif | |||||
| /* | |||||
| * COSMIC Compiler | |||||
| */ | |||||
| #elif defined ( __CSMC__ ) | |||||
| #include <cmsis_csm.h> | |||||
| #ifndef __ASM | |||||
| #define __ASM _asm | |||||
| #endif | |||||
| #ifndef __INLINE | |||||
| #define __INLINE inline | |||||
| #endif | |||||
| #ifndef __STATIC_INLINE | |||||
| #define __STATIC_INLINE static inline | |||||
| #endif | |||||
| #ifndef __STATIC_FORCEINLINE | |||||
| #define __STATIC_FORCEINLINE __STATIC_INLINE | |||||
| #endif | |||||
| #ifndef __NO_RETURN | |||||
| // NO RETURN is automatically detected hence no warning here | |||||
| #define __NO_RETURN | |||||
| #endif | |||||
| #ifndef __USED | |||||
| #warning No compiler specific solution for __USED. __USED is ignored. | |||||
| #define __USED | |||||
| #endif | |||||
| #ifndef __WEAK | |||||
| #define __WEAK __weak | |||||
| #endif | |||||
| #ifndef __PACKED | |||||
| #define __PACKED @packed | |||||
| #endif | |||||
| #ifndef __PACKED_STRUCT | |||||
| #define __PACKED_STRUCT @packed struct | |||||
| #endif | |||||
| #ifndef __PACKED_UNION | |||||
| #define __PACKED_UNION @packed union | |||||
| #endif | |||||
| #ifndef __UNALIGNED_UINT32 /* deprecated */ | |||||
| @packed struct T_UINT32 { uint32_t v; }; | |||||
| #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) | |||||
| #endif | |||||
| #ifndef __UNALIGNED_UINT16_WRITE | |||||
| __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; | |||||
| #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) | |||||
| #endif | |||||
| #ifndef __UNALIGNED_UINT16_READ | |||||
| __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; | |||||
| #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) | |||||
| #endif | |||||
| #ifndef __UNALIGNED_UINT32_WRITE | |||||
| __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; | |||||
| #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) | |||||
| #endif | |||||
| #ifndef __UNALIGNED_UINT32_READ | |||||
| __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; | |||||
| #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) | |||||
| #endif | |||||
| #ifndef __ALIGNED | |||||
| #warning No compiler specific solution for __ALIGNED. __ALIGNED is ignored. | |||||
| #define __ALIGNED(x) | |||||
| #endif | |||||
| #ifndef __RESTRICT | |||||
| #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored. | |||||
| #define __RESTRICT | |||||
| #endif | |||||
| #ifndef __COMPILER_BARRIER | |||||
| #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored. | |||||
| #define __COMPILER_BARRIER() (void)0 | |||||
| #endif | |||||
| #else | |||||
| #error Unknown compiler. | |||||
| #endif | |||||
| #endif /* __CMSIS_COMPILER_H */ | |||||
| /**************************************************************************//** | |||||
| * @file cmsis_version.h | |||||
| * @brief CMSIS Core(M) Version definitions | |||||
| * @version V5.0.4 | |||||
| * @date 23. July 2019 | |||||
| ******************************************************************************/ | |||||
| /* | |||||
| * Copyright (c) 2009-2019 ARM Limited. All rights reserved. | |||||
| * | |||||
| * SPDX-License-Identifier: Apache-2.0 | |||||
| * | |||||
| * Licensed under the Apache License, Version 2.0 (the License); you may | |||||
| * not use this file except in compliance with the License. | |||||
| * You may obtain a copy of the License at | |||||
| * | |||||
| * www.apache.org/licenses/LICENSE-2.0 | |||||
| * | |||||
| * Unless required by applicable law or agreed to in writing, software | |||||
| * distributed under the License is distributed on an AS IS BASIS, WITHOUT | |||||
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
| * See the License for the specific language governing permissions and | |||||
| * limitations under the License. | |||||
| */ | |||||
| #if defined ( __ICCARM__ ) | |||||
| #pragma system_include /* treat file as system include file for MISRA check */ | |||||
| #elif defined (__clang__) | |||||
| #pragma clang system_header /* treat file as system include file */ | |||||
| #endif | |||||
| #ifndef __CMSIS_VERSION_H | |||||
| #define __CMSIS_VERSION_H | |||||
| /* CMSIS Version definitions */ | |||||
| #define __CM_CMSIS_VERSION_MAIN ( 5U) /*!< [31:16] CMSIS Core(M) main version */ | |||||
| #define __CM_CMSIS_VERSION_SUB ( 4U) /*!< [15:0] CMSIS Core(M) sub version */ | |||||
| #define __CM_CMSIS_VERSION ((__CM_CMSIS_VERSION_MAIN << 16U) | \ | |||||
| __CM_CMSIS_VERSION_SUB ) /*!< CMSIS Core(M) version number */ | |||||
| #endif |
| /****************************************************************************** | |||||
| * @file mpu_armv7.h | |||||
| * @brief CMSIS MPU API for Armv7-M MPU | |||||
| * @version V5.1.2 | |||||
| * @date 25. May 2020 | |||||
| ******************************************************************************/ | |||||
| /* | |||||
| * Copyright (c) 2017-2020 Arm Limited. All rights reserved. | |||||
| * | |||||
| * SPDX-License-Identifier: Apache-2.0 | |||||
| * | |||||
| * Licensed under the Apache License, Version 2.0 (the License); you may | |||||
| * not use this file except in compliance with the License. | |||||
| * You may obtain a copy of the License at | |||||
| * | |||||
| * www.apache.org/licenses/LICENSE-2.0 | |||||
| * | |||||
| * Unless required by applicable law or agreed to in writing, software | |||||
| * distributed under the License is distributed on an AS IS BASIS, WITHOUT | |||||
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
| * See the License for the specific language governing permissions and | |||||
| * limitations under the License. | |||||
| */ | |||||
| #if defined ( __ICCARM__ ) | |||||
| #pragma system_include /* treat file as system include file for MISRA check */ | |||||
| #elif defined (__clang__) | |||||
| #pragma clang system_header /* treat file as system include file */ | |||||
| #endif | |||||
| #ifndef ARM_MPU_ARMV7_H | |||||
| #define ARM_MPU_ARMV7_H | |||||
| #define ARM_MPU_REGION_SIZE_32B ((uint8_t)0x04U) ///!< MPU Region Size 32 Bytes | |||||
| #define ARM_MPU_REGION_SIZE_64B ((uint8_t)0x05U) ///!< MPU Region Size 64 Bytes | |||||
| #define ARM_MPU_REGION_SIZE_128B ((uint8_t)0x06U) ///!< MPU Region Size 128 Bytes | |||||
| #define ARM_MPU_REGION_SIZE_256B ((uint8_t)0x07U) ///!< MPU Region Size 256 Bytes | |||||
| #define ARM_MPU_REGION_SIZE_512B ((uint8_t)0x08U) ///!< MPU Region Size 512 Bytes | |||||
| #define ARM_MPU_REGION_SIZE_1KB ((uint8_t)0x09U) ///!< MPU Region Size 1 KByte | |||||
| #define ARM_MPU_REGION_SIZE_2KB ((uint8_t)0x0AU) ///!< MPU Region Size 2 KBytes | |||||
| #define ARM_MPU_REGION_SIZE_4KB ((uint8_t)0x0BU) ///!< MPU Region Size 4 KBytes | |||||
| #define ARM_MPU_REGION_SIZE_8KB ((uint8_t)0x0CU) ///!< MPU Region Size 8 KBytes | |||||
| #define ARM_MPU_REGION_SIZE_16KB ((uint8_t)0x0DU) ///!< MPU Region Size 16 KBytes | |||||
| #define ARM_MPU_REGION_SIZE_32KB ((uint8_t)0x0EU) ///!< MPU Region Size 32 KBytes | |||||
| #define ARM_MPU_REGION_SIZE_64KB ((uint8_t)0x0FU) ///!< MPU Region Size 64 KBytes | |||||
| #define ARM_MPU_REGION_SIZE_128KB ((uint8_t)0x10U) ///!< MPU Region Size 128 KBytes | |||||
| #define ARM_MPU_REGION_SIZE_256KB ((uint8_t)0x11U) ///!< MPU Region Size 256 KBytes | |||||
| #define ARM_MPU_REGION_SIZE_512KB ((uint8_t)0x12U) ///!< MPU Region Size 512 KBytes | |||||
| #define ARM_MPU_REGION_SIZE_1MB ((uint8_t)0x13U) ///!< MPU Region Size 1 MByte | |||||
| #define ARM_MPU_REGION_SIZE_2MB ((uint8_t)0x14U) ///!< MPU Region Size 2 MBytes | |||||
| #define ARM_MPU_REGION_SIZE_4MB ((uint8_t)0x15U) ///!< MPU Region Size 4 MBytes | |||||
| #define ARM_MPU_REGION_SIZE_8MB ((uint8_t)0x16U) ///!< MPU Region Size 8 MBytes | |||||
| #define ARM_MPU_REGION_SIZE_16MB ((uint8_t)0x17U) ///!< MPU Region Size 16 MBytes | |||||
| #define ARM_MPU_REGION_SIZE_32MB ((uint8_t)0x18U) ///!< MPU Region Size 32 MBytes | |||||
| #define ARM_MPU_REGION_SIZE_64MB ((uint8_t)0x19U) ///!< MPU Region Size 64 MBytes | |||||
| #define ARM_MPU_REGION_SIZE_128MB ((uint8_t)0x1AU) ///!< MPU Region Size 128 MBytes | |||||
| #define ARM_MPU_REGION_SIZE_256MB ((uint8_t)0x1BU) ///!< MPU Region Size 256 MBytes | |||||
| #define ARM_MPU_REGION_SIZE_512MB ((uint8_t)0x1CU) ///!< MPU Region Size 512 MBytes | |||||
| #define ARM_MPU_REGION_SIZE_1GB ((uint8_t)0x1DU) ///!< MPU Region Size 1 GByte | |||||
| #define ARM_MPU_REGION_SIZE_2GB ((uint8_t)0x1EU) ///!< MPU Region Size 2 GBytes | |||||
| #define ARM_MPU_REGION_SIZE_4GB ((uint8_t)0x1FU) ///!< MPU Region Size 4 GBytes | |||||
| #define ARM_MPU_AP_NONE 0U ///!< MPU Access Permission no access | |||||
| #define ARM_MPU_AP_PRIV 1U ///!< MPU Access Permission privileged access only | |||||
| #define ARM_MPU_AP_URO 2U ///!< MPU Access Permission unprivileged access read-only | |||||
| #define ARM_MPU_AP_FULL 3U ///!< MPU Access Permission full access | |||||
| #define ARM_MPU_AP_PRO 5U ///!< MPU Access Permission privileged access read-only | |||||
| #define ARM_MPU_AP_RO 6U ///!< MPU Access Permission read-only access | |||||
| /** MPU Region Base Address Register Value | |||||
| * | |||||
| * \param Region The region to be configured, number 0 to 15. | |||||
| * \param BaseAddress The base address for the region. | |||||
| */ | |||||
| #define ARM_MPU_RBAR(Region, BaseAddress) \ | |||||
| (((BaseAddress) & MPU_RBAR_ADDR_Msk) | \ | |||||
| ((Region) & MPU_RBAR_REGION_Msk) | \ | |||||
| (MPU_RBAR_VALID_Msk)) | |||||
| /** | |||||
| * MPU Memory Access Attributes | |||||
| * | |||||
| * \param TypeExtField Type extension field, allows you to configure memory access type, for example strongly ordered, peripheral. | |||||
| * \param IsShareable Region is shareable between multiple bus masters. | |||||
| * \param IsCacheable Region is cacheable, i.e. its value may be kept in cache. | |||||
| * \param IsBufferable Region is bufferable, i.e. using write-back caching. Cacheable but non-bufferable regions use write-through policy. | |||||
| */ | |||||
| #define ARM_MPU_ACCESS_(TypeExtField, IsShareable, IsCacheable, IsBufferable) \ | |||||
| ((((TypeExtField) << MPU_RASR_TEX_Pos) & MPU_RASR_TEX_Msk) | \ | |||||
| (((IsShareable) << MPU_RASR_S_Pos) & MPU_RASR_S_Msk) | \ | |||||
| (((IsCacheable) << MPU_RASR_C_Pos) & MPU_RASR_C_Msk) | \ | |||||
| (((IsBufferable) << MPU_RASR_B_Pos) & MPU_RASR_B_Msk)) | |||||
| /** | |||||
| * MPU Region Attribute and Size Register Value | |||||
| * | |||||
| * \param DisableExec Instruction access disable bit, 1= disable instruction fetches. | |||||
| * \param AccessPermission Data access permissions, allows you to configure read/write access for User and Privileged mode. | |||||
| * \param AccessAttributes Memory access attribution, see \ref ARM_MPU_ACCESS_. | |||||
| * \param SubRegionDisable Sub-region disable field. | |||||
| * \param Size Region size of the region to be configured, for example 4K, 8K. | |||||
| */ | |||||
| #define ARM_MPU_RASR_EX(DisableExec, AccessPermission, AccessAttributes, SubRegionDisable, Size) \ | |||||
| ((((DisableExec) << MPU_RASR_XN_Pos) & MPU_RASR_XN_Msk) | \ | |||||
| (((AccessPermission) << MPU_RASR_AP_Pos) & MPU_RASR_AP_Msk) | \ | |||||
| (((AccessAttributes) & (MPU_RASR_TEX_Msk | MPU_RASR_S_Msk | MPU_RASR_C_Msk | MPU_RASR_B_Msk))) | \ | |||||
| (((SubRegionDisable) << MPU_RASR_SRD_Pos) & MPU_RASR_SRD_Msk) | \ | |||||
| (((Size) << MPU_RASR_SIZE_Pos) & MPU_RASR_SIZE_Msk) | \ | |||||
| (((MPU_RASR_ENABLE_Msk)))) | |||||
| /** | |||||
| * MPU Region Attribute and Size Register Value | |||||
| * | |||||
| * \param DisableExec Instruction access disable bit, 1= disable instruction fetches. | |||||
| * \param AccessPermission Data access permissions, allows you to configure read/write access for User and Privileged mode. | |||||
| * \param TypeExtField Type extension field, allows you to configure memory access type, for example strongly ordered, peripheral. | |||||
| * \param IsShareable Region is shareable between multiple bus masters. | |||||
| * \param IsCacheable Region is cacheable, i.e. its value may be kept in cache. | |||||
| * \param IsBufferable Region is bufferable, i.e. using write-back caching. Cacheable but non-bufferable regions use write-through policy. | |||||
| * \param SubRegionDisable Sub-region disable field. | |||||
| * \param Size Region size of the region to be configured, for example 4K, 8K. | |||||
| */ | |||||
| #define ARM_MPU_RASR(DisableExec, AccessPermission, TypeExtField, IsShareable, IsCacheable, IsBufferable, SubRegionDisable, Size) \ | |||||
| ARM_MPU_RASR_EX(DisableExec, AccessPermission, ARM_MPU_ACCESS_(TypeExtField, IsShareable, IsCacheable, IsBufferable), SubRegionDisable, Size) | |||||
| /** | |||||
| * MPU Memory Access Attribute for strongly ordered memory. | |||||
| * - TEX: 000b | |||||
| * - Shareable | |||||
| * - Non-cacheable | |||||
| * - Non-bufferable | |||||
| */ | |||||
| #define ARM_MPU_ACCESS_ORDERED ARM_MPU_ACCESS_(0U, 1U, 0U, 0U) | |||||
| /** | |||||
| * MPU Memory Access Attribute for device memory. | |||||
| * - TEX: 000b (if shareable) or 010b (if non-shareable) | |||||
| * - Shareable or non-shareable | |||||
| * - Non-cacheable | |||||
| * - Bufferable (if shareable) or non-bufferable (if non-shareable) | |||||
| * | |||||
| * \param IsShareable Configures the device memory as shareable or non-shareable. | |||||
| */ | |||||
| #define ARM_MPU_ACCESS_DEVICE(IsShareable) ((IsShareable) ? ARM_MPU_ACCESS_(0U, 1U, 0U, 1U) : ARM_MPU_ACCESS_(2U, 0U, 0U, 0U)) | |||||
| /** | |||||
| * MPU Memory Access Attribute for normal memory. | |||||
| * - TEX: 1BBb (reflecting outer cacheability rules) | |||||
| * - Shareable or non-shareable | |||||
| * - Cacheable or non-cacheable (reflecting inner cacheability rules) | |||||
| * - Bufferable or non-bufferable (reflecting inner cacheability rules) | |||||
| * | |||||
| * \param OuterCp Configures the outer cache policy. | |||||
| * \param InnerCp Configures the inner cache policy. | |||||
| * \param IsShareable Configures the memory as shareable or non-shareable. | |||||
| */ | |||||
| #define ARM_MPU_ACCESS_NORMAL(OuterCp, InnerCp, IsShareable) ARM_MPU_ACCESS_((4U | (OuterCp)), IsShareable, ((InnerCp) >> 1U), ((InnerCp) & 1U)) | |||||
| /** | |||||
| * MPU Memory Access Attribute non-cacheable policy. | |||||
| */ | |||||
| #define ARM_MPU_CACHEP_NOCACHE 0U | |||||
| /** | |||||
| * MPU Memory Access Attribute write-back, write and read allocate policy. | |||||
| */ | |||||
| #define ARM_MPU_CACHEP_WB_WRA 1U | |||||
| /** | |||||
| * MPU Memory Access Attribute write-through, no write allocate policy. | |||||
| */ | |||||
| #define ARM_MPU_CACHEP_WT_NWA 2U | |||||
| /** | |||||
| * MPU Memory Access Attribute write-back, no write allocate policy. | |||||
| */ | |||||
| #define ARM_MPU_CACHEP_WB_NWA 3U | |||||
| /** | |||||
| * Struct for a single MPU Region | |||||
| */ | |||||
| typedef struct { | |||||
| uint32_t RBAR; //!< The region base address register value (RBAR) | |||||
| uint32_t RASR; //!< The region attribute and size register value (RASR) \ref MPU_RASR | |||||
| } ARM_MPU_Region_t; | |||||
| /** Enable the MPU. | |||||
| * \param MPU_Control Default access permissions for unconfigured regions. | |||||
| */ | |||||
| __STATIC_INLINE void ARM_MPU_Enable(uint32_t MPU_Control) | |||||
| { | |||||
| __DMB(); | |||||
| MPU->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk; | |||||
| #ifdef SCB_SHCSR_MEMFAULTENA_Msk | |||||
| SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk; | |||||
| #endif | |||||
| __DSB(); | |||||
| __ISB(); | |||||
| } | |||||
| /** Disable the MPU. | |||||
| */ | |||||
| __STATIC_INLINE void ARM_MPU_Disable(void) | |||||
| { | |||||
| __DMB(); | |||||
| #ifdef SCB_SHCSR_MEMFAULTENA_Msk | |||||
| SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk; | |||||
| #endif | |||||
| MPU->CTRL &= ~MPU_CTRL_ENABLE_Msk; | |||||
| __DSB(); | |||||
| __ISB(); | |||||
| } | |||||
| /** Clear and disable the given MPU region. | |||||
| * \param rnr Region number to be cleared. | |||||
| */ | |||||
| __STATIC_INLINE void ARM_MPU_ClrRegion(uint32_t rnr) | |||||
| { | |||||
| MPU->RNR = rnr; | |||||
| MPU->RASR = 0U; | |||||
| } | |||||
| /** Configure an MPU region. | |||||
| * \param rbar Value for RBAR register. | |||||
| * \param rasr Value for RASR register. | |||||
| */ | |||||
| __STATIC_INLINE void ARM_MPU_SetRegion(uint32_t rbar, uint32_t rasr) | |||||
| { | |||||
| MPU->RBAR = rbar; | |||||
| MPU->RASR = rasr; | |||||
| } | |||||
| /** Configure the given MPU region. | |||||
| * \param rnr Region number to be configured. | |||||
| * \param rbar Value for RBAR register. | |||||
| * \param rasr Value for RASR register. | |||||
| */ | |||||
| __STATIC_INLINE void ARM_MPU_SetRegionEx(uint32_t rnr, uint32_t rbar, uint32_t rasr) | |||||
| { | |||||
| MPU->RNR = rnr; | |||||
| MPU->RBAR = rbar; | |||||
| MPU->RASR = rasr; | |||||
| } | |||||
| /** Memcopy with strictly ordered memory access, e.g. for register targets. | |||||
| * \param dst Destination data is copied to. | |||||
| * \param src Source data is copied from. | |||||
| * \param len Amount of data words to be copied. | |||||
| */ | |||||
| __STATIC_INLINE void ARM_MPU_OrderedMemcpy(volatile uint32_t* dst, const uint32_t* __RESTRICT src, uint32_t len) | |||||
| { | |||||
| uint32_t i; | |||||
| for (i = 0U; i < len; ++i) | |||||
| { | |||||
| dst[i] = src[i]; | |||||
| } | |||||
| } | |||||
| /** Load the given number of MPU regions from a table. | |||||
| * \param table Pointer to the MPU configuration table. | |||||
| * \param cnt Amount of regions to be configured. | |||||
| */ | |||||
| __STATIC_INLINE void ARM_MPU_Load(ARM_MPU_Region_t const* table, uint32_t cnt) | |||||
| { | |||||
| const uint32_t rowWordSize = sizeof(ARM_MPU_Region_t)/4U; | |||||
| while (cnt > MPU_TYPE_RALIASES) { | |||||
| ARM_MPU_OrderedMemcpy(&(MPU->RBAR), &(table->RBAR), MPU_TYPE_RALIASES*rowWordSize); | |||||
| table += MPU_TYPE_RALIASES; | |||||
| cnt -= MPU_TYPE_RALIASES; | |||||
| } | |||||
| ARM_MPU_OrderedMemcpy(&(MPU->RBAR), &(table->RBAR), cnt*rowWordSize); | |||||
| } | |||||
| #endif |
| /**************************************************************************//** | |||||
| * @file system_ARMCM4.h | |||||
| * @brief CMSIS Device System Header File for | |||||
| * ARMCM4 Device | |||||
| * @version V5.3.2 | |||||
| * @date 15. November 2019 | |||||
| ******************************************************************************/ | |||||
| /* | |||||
| * Copyright (c) 2009-2019 Arm Limited. All rights reserved. | |||||
| * | |||||
| * SPDX-License-Identifier: Apache-2.0 | |||||
| * | |||||
| * Licensed under the Apache License, Version 2.0 (the License); you may | |||||
| * not use this file except in compliance with the License. | |||||
| * You may obtain a copy of the License at | |||||
| * | |||||
| * www.apache.org/licenses/LICENSE-2.0 | |||||
| * | |||||
| * Unless required by applicable law or agreed to in writing, software | |||||
| * distributed under the License is distributed on an AS IS BASIS, WITHOUT | |||||
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
| * See the License for the specific language governing permissions and | |||||
| * limitations under the License. | |||||
| */ | |||||
| #ifndef SYSTEM_ARMCM4_H | |||||
| #define SYSTEM_ARMCM4_H | |||||
| #ifdef __cplusplus | |||||
| extern "C" { | |||||
| #endif | |||||
| /** | |||||
| \brief Exception / Interrupt Handler Function Prototype | |||||
| */ | |||||
| typedef void(*VECTOR_TABLE_Type)(void); | |||||
| /** | |||||
| \brief System Clock Frequency (Core Clock) | |||||
| */ | |||||
| extern uint32_t SystemCoreClock; | |||||
| /** | |||||
| \brief Setup the microcontroller system. | |||||
| Initialize the System and update the SystemCoreClock variable. | |||||
| */ | |||||
| extern void SystemInit (void); | |||||
| /** | |||||
| \brief Update SystemCoreClock variable. | |||||
| Updates the SystemCoreClock with current core Clock retrieved from cpu registers. | |||||
| */ | |||||
| extern void SystemCoreClockUpdate (void); | |||||
| #ifdef __cplusplus | |||||
| } | |||||
| #endif | |||||
| #endif /* SYSTEM_ARMCM4_H */ |
| /**************************************************************************//** | |||||
| * @file system_ARMCM7.h | |||||
| * @brief CMSIS Device System Header File for | |||||
| * ARMCM7 Device | |||||
| * @version V5.3.2 | |||||
| * @date 15. November 2019 | |||||
| ******************************************************************************/ | |||||
| /* | |||||
| * Copyright (c) 2009-2019 Arm Limited. All rights reserved. | |||||
| * | |||||
| * SPDX-License-Identifier: Apache-2.0 | |||||
| * | |||||
| * Licensed under the Apache License, Version 2.0 (the License); you may | |||||
| * not use this file except in compliance with the License. | |||||
| * You may obtain a copy of the License at | |||||
| * | |||||
| * www.apache.org/licenses/LICENSE-2.0 | |||||
| * | |||||
| * Unless required by applicable law or agreed to in writing, software | |||||
| * distributed under the License is distributed on an AS IS BASIS, WITHOUT | |||||
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
| * See the License for the specific language governing permissions and | |||||
| * limitations under the License. | |||||
| */ | |||||
| #ifndef SYSTEM_ARMCM7_H | |||||
| #define SYSTEM_ARMCM7_H | |||||
| #ifdef __cplusplus | |||||
| extern "C" { | |||||
| #endif | |||||
| /** | |||||
| \brief Exception / Interrupt Handler Function Prototype | |||||
| */ | |||||
| typedef void(*VECTOR_TABLE_Type)(void); | |||||
| /** | |||||
| \brief System Clock Frequency (Core Clock) | |||||
| */ | |||||
| extern uint32_t SystemCoreClock; | |||||
| /** | |||||
| \brief Setup the microcontroller system. | |||||
| Initialize the System and update the SystemCoreClock variable. | |||||
| */ | |||||
| extern void SystemInit (void); | |||||
| /** | |||||
| \brief Update SystemCoreClock variable. | |||||
| Updates the SystemCoreClock with current core Clock retrieved from cpu registers. | |||||
| */ | |||||
| extern void SystemCoreClockUpdate (void); | |||||
| #ifdef __cplusplus | |||||
| } | |||||
| #endif | |||||
| #endif /* SYSTEM_ARMCM7_H */ |
| { | |||||
| "name": "CMSIS", | |||||
| "version": "5.7.0", | |||||
| "description": "ARM CMSIS 5", | |||||
| "keywords": "arm,cmsis", | |||||
| "repository": | |||||
| { | |||||
| "type": "git", | |||||
| "url": "https://git.thevis.us/v3s5s1y/cmsis.git" | |||||
| }, | |||||
| "authors": | |||||
| [ | |||||
| { | |||||
| "name": "John Robinson", | |||||
| "email": "iam@thevis.us", | |||||
| "url": "https://thevis.us", | |||||
| "maintainer": true | |||||
| } | |||||
| ], | |||||
| "license": "MIT", | |||||
| "dependencies": { | |||||
| }, | |||||
| "frameworks": "arduino", | |||||
| "platforms": "teensy", | |||||
| "export": { | |||||
| "exclude": [ | |||||
| "docs", | |||||
| "extras" | |||||
| ] | |||||
| }, | |||||
| "build": { | |||||
| "srcFilter": [ | |||||
| "+<*.c>", | |||||
| "+<*.cpp>", | |||||
| "+<*.h>" | |||||
| ] | |||||
| } | |||||
| } |
| 5.7.0 |