Initial commit
This commit is contained in:
		@ -0,0 +1,4 @@
 | 
			
		||||
CMSIS DSP_Lib example arm_graphic_equalizer_example for
 | 
			
		||||
  Cortex-M0, Cortex-M3, Cortex-M4 with FPU and Cortex-M7 with single precision FPU.
 | 
			
		||||
 | 
			
		||||
The example is configured for uVision Simulator.
 | 
			
		||||
@ -0,0 +1,159 @@
 | 
			
		||||
;/**************************************************************************//**
 | 
			
		||||
; * @file     startup_ARMCM0.s
 | 
			
		||||
; * @brief    CMSIS Core Device Startup File for
 | 
			
		||||
; *           ARMCM0 Device
 | 
			
		||||
; * @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.
 | 
			
		||||
; */
 | 
			
		||||
 | 
			
		||||
;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
;<h> Stack Configuration
 | 
			
		||||
;  <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
 | 
			
		||||
;</h>
 | 
			
		||||
 | 
			
		||||
Stack_Size      EQU      0x00000400
 | 
			
		||||
 | 
			
		||||
                AREA     STACK, NOINIT, READWRITE, ALIGN=3
 | 
			
		||||
__stack_limit
 | 
			
		||||
Stack_Mem       SPACE    Stack_Size
 | 
			
		||||
__initial_sp
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
;<h> Heap Configuration
 | 
			
		||||
;  <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
 | 
			
		||||
;</h>
 | 
			
		||||
 | 
			
		||||
Heap_Size       EQU      0x00000C00
 | 
			
		||||
 | 
			
		||||
                IF       Heap_Size != 0                      ; Heap is provided
 | 
			
		||||
                AREA     HEAP, NOINIT, READWRITE, ALIGN=3
 | 
			
		||||
__heap_base
 | 
			
		||||
Heap_Mem        SPACE    Heap_Size
 | 
			
		||||
__heap_limit
 | 
			
		||||
                ENDIF
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                PRESERVE8
 | 
			
		||||
                THUMB
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
; Vector Table Mapped to Address 0 at Reset
 | 
			
		||||
 | 
			
		||||
                AREA     RESET, DATA, READONLY
 | 
			
		||||
                EXPORT   __Vectors
 | 
			
		||||
                EXPORT   __Vectors_End
 | 
			
		||||
                EXPORT   __Vectors_Size
 | 
			
		||||
 | 
			
		||||
__Vectors       DCD      __initial_sp                        ;     Top of Stack
 | 
			
		||||
                DCD      Reset_Handler                       ;     Reset Handler
 | 
			
		||||
                DCD      NMI_Handler                         ; -14 NMI Handler
 | 
			
		||||
                DCD      HardFault_Handler                   ; -13 Hard Fault Handler
 | 
			
		||||
                DCD      0                                   ;     Reserved
 | 
			
		||||
                DCD      0                                   ;     Reserved
 | 
			
		||||
                DCD      0                                   ;     Reserved
 | 
			
		||||
                DCD      0                                   ;     Reserved
 | 
			
		||||
                DCD      0                                   ;     Reserved
 | 
			
		||||
                DCD      0                                   ;     Reserved
 | 
			
		||||
                DCD      0                                   ;     Reserved
 | 
			
		||||
                DCD      SVC_Handler                         ;  -5 SVCall Handler
 | 
			
		||||
                DCD      0                                   ;     Reserved
 | 
			
		||||
                DCD      0                                   ;     Reserved
 | 
			
		||||
                DCD      PendSV_Handler                      ;  -2 PendSV Handler
 | 
			
		||||
                DCD      SysTick_Handler                     ;  -1 SysTick Handler
 | 
			
		||||
 | 
			
		||||
                ; Interrupts
 | 
			
		||||
                DCD      Interrupt0_Handler                  ;   0 Interrupt 0
 | 
			
		||||
                DCD      Interrupt1_Handler                  ;   1 Interrupt 1
 | 
			
		||||
                DCD      Interrupt2_Handler                  ;   2 Interrupt 2
 | 
			
		||||
                DCD      Interrupt3_Handler                  ;   3 Interrupt 3
 | 
			
		||||
                DCD      Interrupt4_Handler                  ;   4 Interrupt 4
 | 
			
		||||
                DCD      Interrupt5_Handler                  ;   5 Interrupt 5
 | 
			
		||||
                DCD      Interrupt6_Handler                  ;   6 Interrupt 6
 | 
			
		||||
                DCD      Interrupt7_Handler                  ;   7 Interrupt 7
 | 
			
		||||
                DCD      Interrupt8_Handler                  ;   8 Interrupt 8
 | 
			
		||||
                DCD      Interrupt9_Handler                  ;   9 Interrupt 9
 | 
			
		||||
 | 
			
		||||
                SPACE    ( 22 * 4)                           ; Interrupts 10 .. 31 are left out
 | 
			
		||||
__Vectors_End
 | 
			
		||||
__Vectors_Size  EQU      __Vectors_End - __Vectors
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                AREA     |.text|, CODE, READONLY
 | 
			
		||||
 | 
			
		||||
; Reset Handler
 | 
			
		||||
 | 
			
		||||
Reset_Handler   PROC
 | 
			
		||||
                EXPORT   Reset_Handler             [WEAK]
 | 
			
		||||
                IMPORT   SystemInit
 | 
			
		||||
                IMPORT   __main
 | 
			
		||||
 | 
			
		||||
                LDR      R0, =SystemInit
 | 
			
		||||
                BLX      R0
 | 
			
		||||
                LDR      R0, =__main
 | 
			
		||||
                BX       R0
 | 
			
		||||
                ENDP
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
; Macro to define default exception/interrupt handlers.
 | 
			
		||||
; Default handler are weak symbols with an endless loop.
 | 
			
		||||
; They can be overwritten by real handlers.
 | 
			
		||||
                MACRO
 | 
			
		||||
                Set_Default_Handler  $Handler_Name
 | 
			
		||||
$Handler_Name   PROC
 | 
			
		||||
                EXPORT   $Handler_Name             [WEAK]
 | 
			
		||||
                B        .
 | 
			
		||||
                ENDP
 | 
			
		||||
                MEND
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
; Default exception/interrupt handler
 | 
			
		||||
 | 
			
		||||
                Set_Default_Handler  NMI_Handler
 | 
			
		||||
                Set_Default_Handler  HardFault_Handler
 | 
			
		||||
                Set_Default_Handler  SVC_Handler
 | 
			
		||||
                Set_Default_Handler  PendSV_Handler
 | 
			
		||||
                Set_Default_Handler  SysTick_Handler
 | 
			
		||||
 | 
			
		||||
                Set_Default_Handler  Interrupt0_Handler
 | 
			
		||||
                Set_Default_Handler  Interrupt1_Handler
 | 
			
		||||
                Set_Default_Handler  Interrupt2_Handler
 | 
			
		||||
                Set_Default_Handler  Interrupt3_Handler
 | 
			
		||||
                Set_Default_Handler  Interrupt4_Handler
 | 
			
		||||
                Set_Default_Handler  Interrupt5_Handler
 | 
			
		||||
                Set_Default_Handler  Interrupt6_Handler
 | 
			
		||||
                Set_Default_Handler  Interrupt7_Handler
 | 
			
		||||
                Set_Default_Handler  Interrupt8_Handler
 | 
			
		||||
                Set_Default_Handler  Interrupt9_Handler
 | 
			
		||||
 | 
			
		||||
                ALIGN
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
; User setup Stack & Heap
 | 
			
		||||
 | 
			
		||||
                EXPORT   __stack_limit
 | 
			
		||||
                EXPORT   __initial_sp
 | 
			
		||||
                IF       Heap_Size != 0                      ; Heap is provided
 | 
			
		||||
                EXPORT   __heap_base
 | 
			
		||||
                EXPORT   __heap_limit
 | 
			
		||||
                ENDIF
 | 
			
		||||
 | 
			
		||||
                END
 | 
			
		||||
@ -0,0 +1,56 @@
 | 
			
		||||
/**************************************************************************//**
 | 
			
		||||
 * @file     system_ARMCM0.c
 | 
			
		||||
 * @brief    CMSIS Device System Source File for
 | 
			
		||||
 *           ARMCM0 Device
 | 
			
		||||
 * @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.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "ARMCM0.h"
 | 
			
		||||
 | 
			
		||||
/*----------------------------------------------------------------------------
 | 
			
		||||
  Define clocks
 | 
			
		||||
 *----------------------------------------------------------------------------*/
 | 
			
		||||
#define  XTAL            (50000000UL)     /* Oscillator frequency */
 | 
			
		||||
 | 
			
		||||
#define  SYSTEM_CLOCK    (XTAL / 2U)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*----------------------------------------------------------------------------
 | 
			
		||||
  System Core Clock Variable
 | 
			
		||||
 *----------------------------------------------------------------------------*/
 | 
			
		||||
uint32_t SystemCoreClock = SYSTEM_CLOCK;  /* System Core Clock Frequency */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*----------------------------------------------------------------------------
 | 
			
		||||
  System Core Clock update function
 | 
			
		||||
 *----------------------------------------------------------------------------*/
 | 
			
		||||
void SystemCoreClockUpdate (void)
 | 
			
		||||
{
 | 
			
		||||
  SystemCoreClock = SYSTEM_CLOCK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*----------------------------------------------------------------------------
 | 
			
		||||
  System initialization function
 | 
			
		||||
 *----------------------------------------------------------------------------*/
 | 
			
		||||
void SystemInit (void)
 | 
			
		||||
{
 | 
			
		||||
  SystemCoreClock = SYSTEM_CLOCK;
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,163 @@
 | 
			
		||||
;/**************************************************************************//**
 | 
			
		||||
; * @file     startup_ARMCM3.s
 | 
			
		||||
; * @brief    CMSIS Core Device Startup File for
 | 
			
		||||
; *           ARMCM3 Device
 | 
			
		||||
; * @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.
 | 
			
		||||
; */
 | 
			
		||||
 | 
			
		||||
;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
;<h> Stack Configuration
 | 
			
		||||
;  <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
 | 
			
		||||
;</h>
 | 
			
		||||
 | 
			
		||||
Stack_Size      EQU      0x00000400
 | 
			
		||||
 | 
			
		||||
                AREA     STACK, NOINIT, READWRITE, ALIGN=3
 | 
			
		||||
__stack_limit
 | 
			
		||||
Stack_Mem       SPACE    Stack_Size
 | 
			
		||||
__initial_sp
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
;<h> Heap Configuration
 | 
			
		||||
;  <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
 | 
			
		||||
;</h>
 | 
			
		||||
 | 
			
		||||
Heap_Size       EQU      0x00000C00
 | 
			
		||||
 | 
			
		||||
                IF       Heap_Size != 0                      ; Heap is provided
 | 
			
		||||
                AREA     HEAP, NOINIT, READWRITE, ALIGN=3
 | 
			
		||||
__heap_base
 | 
			
		||||
Heap_Mem        SPACE    Heap_Size
 | 
			
		||||
__heap_limit
 | 
			
		||||
                ENDIF
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                PRESERVE8
 | 
			
		||||
                THUMB
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
; Vector Table Mapped to Address 0 at Reset
 | 
			
		||||
 | 
			
		||||
                AREA     RESET, DATA, READONLY
 | 
			
		||||
                EXPORT   __Vectors
 | 
			
		||||
                EXPORT   __Vectors_End
 | 
			
		||||
                EXPORT   __Vectors_Size
 | 
			
		||||
 | 
			
		||||
__Vectors       DCD      __initial_sp                        ;     Top of Stack
 | 
			
		||||
                DCD      Reset_Handler                       ;     Reset Handler
 | 
			
		||||
                DCD      NMI_Handler                         ; -14 NMI Handler
 | 
			
		||||
                DCD      HardFault_Handler                   ; -13 Hard Fault Handler
 | 
			
		||||
                DCD      MemManage_Handler                   ; -12 MPU Fault Handler
 | 
			
		||||
                DCD      BusFault_Handler                    ; -11 Bus Fault Handler
 | 
			
		||||
                DCD      UsageFault_Handler                  ; -10 Usage Fault Handler
 | 
			
		||||
                DCD      0                                   ;     Reserved
 | 
			
		||||
                DCD      0                                   ;     Reserved
 | 
			
		||||
                DCD      0                                   ;     Reserved
 | 
			
		||||
                DCD      0                                   ;     Reserved
 | 
			
		||||
                DCD      SVC_Handler                         ;  -5 SVCall Handler
 | 
			
		||||
                DCD      DebugMon_Handler                    ;  -4 Debug Monitor Handler
 | 
			
		||||
                DCD      0                                   ;     Reserved
 | 
			
		||||
                DCD      PendSV_Handler                      ;  -2 PendSV Handler
 | 
			
		||||
                DCD      SysTick_Handler                     ;  -1 SysTick Handler
 | 
			
		||||
 | 
			
		||||
                ; Interrupts
 | 
			
		||||
                DCD      Interrupt0_Handler                  ;   0 Interrupt 0
 | 
			
		||||
                DCD      Interrupt1_Handler                  ;   1 Interrupt 1
 | 
			
		||||
                DCD      Interrupt2_Handler                  ;   2 Interrupt 2
 | 
			
		||||
                DCD      Interrupt3_Handler                  ;   3 Interrupt 3
 | 
			
		||||
                DCD      Interrupt4_Handler                  ;   4 Interrupt 4
 | 
			
		||||
                DCD      Interrupt5_Handler                  ;   5 Interrupt 5
 | 
			
		||||
                DCD      Interrupt6_Handler                  ;   6 Interrupt 6
 | 
			
		||||
                DCD      Interrupt7_Handler                  ;   7 Interrupt 7
 | 
			
		||||
                DCD      Interrupt8_Handler                  ;   8 Interrupt 8
 | 
			
		||||
                DCD      Interrupt9_Handler                  ;   9 Interrupt 9
 | 
			
		||||
 | 
			
		||||
                SPACE    (214 * 4)                           ; Interrupts 10 .. 224 are left out
 | 
			
		||||
__Vectors_End
 | 
			
		||||
__Vectors_Size  EQU      __Vectors_End - __Vectors
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                AREA     |.text|, CODE, READONLY
 | 
			
		||||
 | 
			
		||||
; Reset Handler
 | 
			
		||||
 | 
			
		||||
Reset_Handler   PROC
 | 
			
		||||
                EXPORT   Reset_Handler             [WEAK]
 | 
			
		||||
                IMPORT   SystemInit
 | 
			
		||||
                IMPORT   __main
 | 
			
		||||
 | 
			
		||||
                LDR      R0, =SystemInit
 | 
			
		||||
                BLX      R0
 | 
			
		||||
                LDR      R0, =__main
 | 
			
		||||
                BX       R0
 | 
			
		||||
                ENDP
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
; Macro to define default exception/interrupt handlers.
 | 
			
		||||
; Default handler are weak symbols with an endless loop.
 | 
			
		||||
; They can be overwritten by real handlers.
 | 
			
		||||
                MACRO
 | 
			
		||||
                Set_Default_Handler  $Handler_Name
 | 
			
		||||
$Handler_Name   PROC
 | 
			
		||||
                EXPORT   $Handler_Name             [WEAK]
 | 
			
		||||
                B        .
 | 
			
		||||
                ENDP
 | 
			
		||||
                MEND
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
; Default exception/interrupt handler
 | 
			
		||||
 | 
			
		||||
                Set_Default_Handler  NMI_Handler
 | 
			
		||||
                Set_Default_Handler  HardFault_Handler
 | 
			
		||||
                Set_Default_Handler  MemManage_Handler
 | 
			
		||||
                Set_Default_Handler  BusFault_Handler
 | 
			
		||||
                Set_Default_Handler  UsageFault_Handler
 | 
			
		||||
                Set_Default_Handler  SVC_Handler
 | 
			
		||||
                Set_Default_Handler  DebugMon_Handler
 | 
			
		||||
                Set_Default_Handler  PendSV_Handler
 | 
			
		||||
                Set_Default_Handler  SysTick_Handler
 | 
			
		||||
 | 
			
		||||
                Set_Default_Handler  Interrupt0_Handler
 | 
			
		||||
                Set_Default_Handler  Interrupt1_Handler
 | 
			
		||||
                Set_Default_Handler  Interrupt2_Handler
 | 
			
		||||
                Set_Default_Handler  Interrupt3_Handler
 | 
			
		||||
                Set_Default_Handler  Interrupt4_Handler
 | 
			
		||||
                Set_Default_Handler  Interrupt5_Handler
 | 
			
		||||
                Set_Default_Handler  Interrupt6_Handler
 | 
			
		||||
                Set_Default_Handler  Interrupt7_Handler
 | 
			
		||||
                Set_Default_Handler  Interrupt8_Handler
 | 
			
		||||
                Set_Default_Handler  Interrupt9_Handler
 | 
			
		||||
 | 
			
		||||
                ALIGN
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
; User setup Stack & Heap
 | 
			
		||||
 | 
			
		||||
                EXPORT   __stack_limit
 | 
			
		||||
                EXPORT   __initial_sp
 | 
			
		||||
                IF       Heap_Size != 0                      ; Heap is provided
 | 
			
		||||
                EXPORT   __heap_base
 | 
			
		||||
                EXPORT   __heap_limit
 | 
			
		||||
                ENDIF
 | 
			
		||||
 | 
			
		||||
                END
 | 
			
		||||
@ -0,0 +1,68 @@
 | 
			
		||||
/**************************************************************************//**
 | 
			
		||||
 * @file     system_ARMCM3.c
 | 
			
		||||
 * @brief    CMSIS Device System Source File for
 | 
			
		||||
 *           ARMCM3 Device
 | 
			
		||||
 * @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.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "ARMCM3.h"
 | 
			
		||||
 | 
			
		||||
/*----------------------------------------------------------------------------
 | 
			
		||||
  Define clocks
 | 
			
		||||
 *----------------------------------------------------------------------------*/
 | 
			
		||||
#define  XTAL            (50000000UL)     /* Oscillator frequency */
 | 
			
		||||
 | 
			
		||||
#define  SYSTEM_CLOCK    (XTAL / 2U)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*----------------------------------------------------------------------------
 | 
			
		||||
  Externals
 | 
			
		||||
 *----------------------------------------------------------------------------*/
 | 
			
		||||
#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U)
 | 
			
		||||
  extern uint32_t __Vectors;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*----------------------------------------------------------------------------
 | 
			
		||||
  System Core Clock Variable
 | 
			
		||||
 *----------------------------------------------------------------------------*/
 | 
			
		||||
uint32_t SystemCoreClock = SYSTEM_CLOCK;  /* System Core Clock Frequency */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*----------------------------------------------------------------------------
 | 
			
		||||
  System Core Clock update function
 | 
			
		||||
 *----------------------------------------------------------------------------*/
 | 
			
		||||
void SystemCoreClockUpdate (void)
 | 
			
		||||
{
 | 
			
		||||
  SystemCoreClock = SYSTEM_CLOCK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*----------------------------------------------------------------------------
 | 
			
		||||
  System initialization function
 | 
			
		||||
 *----------------------------------------------------------------------------*/
 | 
			
		||||
void SystemInit (void)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U)
 | 
			
		||||
  SCB->VTOR = (uint32_t) &__Vectors;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  SystemCoreClock = SYSTEM_CLOCK;
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,163 @@
 | 
			
		||||
;/**************************************************************************//**
 | 
			
		||||
; * @file     startup_ARMCM4.s
 | 
			
		||||
; * @brief    CMSIS Core Device Startup File for
 | 
			
		||||
; *           ARMCM4 Device
 | 
			
		||||
; * @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.
 | 
			
		||||
; */
 | 
			
		||||
 | 
			
		||||
;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
;<h> Stack Configuration
 | 
			
		||||
;  <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
 | 
			
		||||
;</h>
 | 
			
		||||
 | 
			
		||||
Stack_Size      EQU      0x00000400
 | 
			
		||||
 | 
			
		||||
                AREA     STACK, NOINIT, READWRITE, ALIGN=3
 | 
			
		||||
__stack_limit
 | 
			
		||||
Stack_Mem       SPACE    Stack_Size
 | 
			
		||||
__initial_sp
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
;<h> Heap Configuration
 | 
			
		||||
;  <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
 | 
			
		||||
;</h>
 | 
			
		||||
 | 
			
		||||
Heap_Size       EQU      0x00000C00
 | 
			
		||||
 | 
			
		||||
                IF       Heap_Size != 0                      ; Heap is provided
 | 
			
		||||
                AREA     HEAP, NOINIT, READWRITE, ALIGN=3
 | 
			
		||||
__heap_base
 | 
			
		||||
Heap_Mem        SPACE    Heap_Size
 | 
			
		||||
__heap_limit
 | 
			
		||||
                ENDIF
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                PRESERVE8
 | 
			
		||||
                THUMB
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
; Vector Table Mapped to Address 0 at Reset
 | 
			
		||||
 | 
			
		||||
                AREA     RESET, DATA, READONLY
 | 
			
		||||
                EXPORT   __Vectors
 | 
			
		||||
                EXPORT   __Vectors_End
 | 
			
		||||
                EXPORT   __Vectors_Size
 | 
			
		||||
 | 
			
		||||
__Vectors       DCD      __initial_sp                        ;     Top of Stack
 | 
			
		||||
                DCD      Reset_Handler                       ;     Reset Handler
 | 
			
		||||
                DCD      NMI_Handler                         ; -14 NMI Handler
 | 
			
		||||
                DCD      HardFault_Handler                   ; -13 Hard Fault Handler
 | 
			
		||||
                DCD      MemManage_Handler                   ; -12 MPU Fault Handler
 | 
			
		||||
                DCD      BusFault_Handler                    ; -11 Bus Fault Handler
 | 
			
		||||
                DCD      UsageFault_Handler                  ; -10 Usage Fault Handler
 | 
			
		||||
                DCD      0                                   ;     Reserved
 | 
			
		||||
                DCD      0                                   ;     Reserved
 | 
			
		||||
                DCD      0                                   ;     Reserved
 | 
			
		||||
                DCD      0                                   ;     Reserved
 | 
			
		||||
                DCD      SVC_Handler                         ;  -5 SVCall Handler
 | 
			
		||||
                DCD      DebugMon_Handler                    ;  -4 Debug Monitor Handler
 | 
			
		||||
                DCD      0                                   ;     Reserved
 | 
			
		||||
                DCD      PendSV_Handler                      ;  -2 PendSV Handler
 | 
			
		||||
                DCD      SysTick_Handler                     ;  -1 SysTick Handler
 | 
			
		||||
 | 
			
		||||
                ; Interrupts
 | 
			
		||||
                DCD      Interrupt0_Handler                  ;   0 Interrupt 0
 | 
			
		||||
                DCD      Interrupt1_Handler                  ;   1 Interrupt 1
 | 
			
		||||
                DCD      Interrupt2_Handler                  ;   2 Interrupt 2
 | 
			
		||||
                DCD      Interrupt3_Handler                  ;   3 Interrupt 3
 | 
			
		||||
                DCD      Interrupt4_Handler                  ;   4 Interrupt 4
 | 
			
		||||
                DCD      Interrupt5_Handler                  ;   5 Interrupt 5
 | 
			
		||||
                DCD      Interrupt6_Handler                  ;   6 Interrupt 6
 | 
			
		||||
                DCD      Interrupt7_Handler                  ;   7 Interrupt 7
 | 
			
		||||
                DCD      Interrupt8_Handler                  ;   8 Interrupt 8
 | 
			
		||||
                DCD      Interrupt9_Handler                  ;   9 Interrupt 9
 | 
			
		||||
 | 
			
		||||
                SPACE    (214 * 4)                           ; Interrupts 10 .. 224 are left out
 | 
			
		||||
__Vectors_End
 | 
			
		||||
__Vectors_Size  EQU      __Vectors_End - __Vectors
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                AREA     |.text|, CODE, READONLY
 | 
			
		||||
 | 
			
		||||
; Reset Handler
 | 
			
		||||
 | 
			
		||||
Reset_Handler   PROC
 | 
			
		||||
                EXPORT   Reset_Handler             [WEAK]
 | 
			
		||||
                IMPORT   SystemInit
 | 
			
		||||
                IMPORT   __main
 | 
			
		||||
 | 
			
		||||
                LDR      R0, =SystemInit
 | 
			
		||||
                BLX      R0
 | 
			
		||||
                LDR      R0, =__main
 | 
			
		||||
                BX       R0
 | 
			
		||||
                ENDP
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
; Macro to define default exception/interrupt handlers.
 | 
			
		||||
; Default handler are weak symbols with an endless loop.
 | 
			
		||||
; They can be overwritten by real handlers.
 | 
			
		||||
                MACRO
 | 
			
		||||
                Set_Default_Handler  $Handler_Name
 | 
			
		||||
$Handler_Name   PROC
 | 
			
		||||
                EXPORT   $Handler_Name             [WEAK]
 | 
			
		||||
                B        .
 | 
			
		||||
                ENDP
 | 
			
		||||
                MEND
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
; Default exception/interrupt handler
 | 
			
		||||
 | 
			
		||||
                Set_Default_Handler  NMI_Handler
 | 
			
		||||
                Set_Default_Handler  HardFault_Handler
 | 
			
		||||
                Set_Default_Handler  MemManage_Handler
 | 
			
		||||
                Set_Default_Handler  BusFault_Handler
 | 
			
		||||
                Set_Default_Handler  UsageFault_Handler
 | 
			
		||||
                Set_Default_Handler  SVC_Handler
 | 
			
		||||
                Set_Default_Handler  DebugMon_Handler
 | 
			
		||||
                Set_Default_Handler  PendSV_Handler
 | 
			
		||||
                Set_Default_Handler  SysTick_Handler
 | 
			
		||||
 | 
			
		||||
                Set_Default_Handler  Interrupt0_Handler
 | 
			
		||||
                Set_Default_Handler  Interrupt1_Handler
 | 
			
		||||
                Set_Default_Handler  Interrupt2_Handler
 | 
			
		||||
                Set_Default_Handler  Interrupt3_Handler
 | 
			
		||||
                Set_Default_Handler  Interrupt4_Handler
 | 
			
		||||
                Set_Default_Handler  Interrupt5_Handler
 | 
			
		||||
                Set_Default_Handler  Interrupt6_Handler
 | 
			
		||||
                Set_Default_Handler  Interrupt7_Handler
 | 
			
		||||
                Set_Default_Handler  Interrupt8_Handler
 | 
			
		||||
                Set_Default_Handler  Interrupt9_Handler
 | 
			
		||||
 | 
			
		||||
                ALIGN
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
; User setup Stack & Heap
 | 
			
		||||
 | 
			
		||||
                EXPORT   __stack_limit
 | 
			
		||||
                EXPORT   __initial_sp
 | 
			
		||||
                IF       Heap_Size != 0                      ; Heap is provided
 | 
			
		||||
                EXPORT   __heap_base
 | 
			
		||||
                EXPORT   __heap_limit
 | 
			
		||||
                ENDIF
 | 
			
		||||
 | 
			
		||||
                END
 | 
			
		||||
@ -0,0 +1,83 @@
 | 
			
		||||
/**************************************************************************//**
 | 
			
		||||
 * @file     system_ARMCM4.c
 | 
			
		||||
 * @brief    CMSIS Device System Source File for
 | 
			
		||||
 *           ARMCM4 Device
 | 
			
		||||
 * @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.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#if defined (ARMCM4)
 | 
			
		||||
  #include "ARMCM4.h"
 | 
			
		||||
#elif defined (ARMCM4_FP)
 | 
			
		||||
  #include "ARMCM4_FP.h"
 | 
			
		||||
#else
 | 
			
		||||
  #error device not specified!
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*----------------------------------------------------------------------------
 | 
			
		||||
  Define clocks
 | 
			
		||||
 *----------------------------------------------------------------------------*/
 | 
			
		||||
#define  XTAL            (50000000UL)     /* Oscillator frequency */
 | 
			
		||||
 | 
			
		||||
#define  SYSTEM_CLOCK    (XTAL / 2U)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*----------------------------------------------------------------------------
 | 
			
		||||
  Externals
 | 
			
		||||
 *----------------------------------------------------------------------------*/
 | 
			
		||||
#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U)
 | 
			
		||||
  extern uint32_t __Vectors;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*----------------------------------------------------------------------------
 | 
			
		||||
  System Core Clock Variable
 | 
			
		||||
 *----------------------------------------------------------------------------*/
 | 
			
		||||
uint32_t SystemCoreClock = SYSTEM_CLOCK;  /* System Core Clock Frequency */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*----------------------------------------------------------------------------
 | 
			
		||||
  System Core Clock update function
 | 
			
		||||
 *----------------------------------------------------------------------------*/
 | 
			
		||||
void SystemCoreClockUpdate (void)
 | 
			
		||||
{
 | 
			
		||||
  SystemCoreClock = SYSTEM_CLOCK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*----------------------------------------------------------------------------
 | 
			
		||||
  System initialization function
 | 
			
		||||
 *----------------------------------------------------------------------------*/
 | 
			
		||||
void SystemInit (void)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U)
 | 
			
		||||
  SCB->VTOR = (uint32_t) &__Vectors;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined (__FPU_USED) && (__FPU_USED == 1U)
 | 
			
		||||
  SCB->CPACR |= ((3U << 10U*2U) |           /* enable CP10 Full Access */
 | 
			
		||||
                 (3U << 11U*2U)  );         /* enable CP11 Full Access */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef UNALIGNED_SUPPORT_DISABLE
 | 
			
		||||
  SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  SystemCoreClock = SYSTEM_CLOCK;
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,163 @@
 | 
			
		||||
;/**************************************************************************//**
 | 
			
		||||
; * @file     startup_ARMCM7.s
 | 
			
		||||
; * @brief    CMSIS Core Device Startup File for
 | 
			
		||||
; *           ARMCM7 Device
 | 
			
		||||
; * @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.
 | 
			
		||||
; */
 | 
			
		||||
 | 
			
		||||
;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
;<h> Stack Configuration
 | 
			
		||||
;  <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
 | 
			
		||||
;</h>
 | 
			
		||||
 | 
			
		||||
Stack_Size      EQU      0x00000400
 | 
			
		||||
 | 
			
		||||
                AREA     STACK, NOINIT, READWRITE, ALIGN=3
 | 
			
		||||
__stack_limit
 | 
			
		||||
Stack_Mem       SPACE    Stack_Size
 | 
			
		||||
__initial_sp
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
;<h> Heap Configuration
 | 
			
		||||
;  <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
 | 
			
		||||
;</h>
 | 
			
		||||
 | 
			
		||||
Heap_Size       EQU      0x00000C00
 | 
			
		||||
 | 
			
		||||
                IF       Heap_Size != 0                      ; Heap is provided
 | 
			
		||||
                AREA     HEAP, NOINIT, READWRITE, ALIGN=3
 | 
			
		||||
__heap_base
 | 
			
		||||
Heap_Mem        SPACE    Heap_Size
 | 
			
		||||
__heap_limit
 | 
			
		||||
                ENDIF
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                PRESERVE8
 | 
			
		||||
                THUMB
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
; Vector Table Mapped to Address 0 at Reset
 | 
			
		||||
 | 
			
		||||
                AREA     RESET, DATA, READONLY
 | 
			
		||||
                EXPORT   __Vectors
 | 
			
		||||
                EXPORT   __Vectors_End
 | 
			
		||||
                EXPORT   __Vectors_Size
 | 
			
		||||
 | 
			
		||||
__Vectors       DCD      __initial_sp                        ;     Top of Stack
 | 
			
		||||
                DCD      Reset_Handler                       ;     Reset Handler
 | 
			
		||||
                DCD      NMI_Handler                         ; -14 NMI Handler
 | 
			
		||||
                DCD      HardFault_Handler                   ; -13 Hard Fault Handler
 | 
			
		||||
                DCD      MemManage_Handler                   ; -12 MPU Fault Handler
 | 
			
		||||
                DCD      BusFault_Handler                    ; -11 Bus Fault Handler
 | 
			
		||||
                DCD      UsageFault_Handler                  ; -10 Usage Fault Handler
 | 
			
		||||
                DCD      0                                   ;     Reserved
 | 
			
		||||
                DCD      0                                   ;     Reserved
 | 
			
		||||
                DCD      0                                   ;     Reserved
 | 
			
		||||
                DCD      0                                   ;     Reserved
 | 
			
		||||
                DCD      SVC_Handler                         ;  -5 SVCall Handler
 | 
			
		||||
                DCD      DebugMon_Handler                    ;  -4 Debug Monitor Handler
 | 
			
		||||
                DCD      0                                   ;     Reserved
 | 
			
		||||
                DCD      PendSV_Handler                      ;  -2 PendSV Handler
 | 
			
		||||
                DCD      SysTick_Handler                     ;  -1 SysTick Handler
 | 
			
		||||
 | 
			
		||||
                ; Interrupts
 | 
			
		||||
                DCD      Interrupt0_Handler                  ;   0 Interrupt 0
 | 
			
		||||
                DCD      Interrupt1_Handler                  ;   1 Interrupt 1
 | 
			
		||||
                DCD      Interrupt2_Handler                  ;   2 Interrupt 2
 | 
			
		||||
                DCD      Interrupt3_Handler                  ;   3 Interrupt 3
 | 
			
		||||
                DCD      Interrupt4_Handler                  ;   4 Interrupt 4
 | 
			
		||||
                DCD      Interrupt5_Handler                  ;   5 Interrupt 5
 | 
			
		||||
                DCD      Interrupt6_Handler                  ;   6 Interrupt 6
 | 
			
		||||
                DCD      Interrupt7_Handler                  ;   7 Interrupt 7
 | 
			
		||||
                DCD      Interrupt8_Handler                  ;   8 Interrupt 8
 | 
			
		||||
                DCD      Interrupt9_Handler                  ;   9 Interrupt 9
 | 
			
		||||
 | 
			
		||||
                SPACE    (214 * 4)                           ; Interrupts 10 .. 224 are left out
 | 
			
		||||
__Vectors_End
 | 
			
		||||
__Vectors_Size  EQU      __Vectors_End - __Vectors
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                AREA     |.text|, CODE, READONLY
 | 
			
		||||
 | 
			
		||||
; Reset Handler
 | 
			
		||||
 | 
			
		||||
Reset_Handler   PROC
 | 
			
		||||
                EXPORT   Reset_Handler             [WEAK]
 | 
			
		||||
                IMPORT   SystemInit
 | 
			
		||||
                IMPORT   __main
 | 
			
		||||
 | 
			
		||||
                LDR      R0, =SystemInit
 | 
			
		||||
                BLX      R0
 | 
			
		||||
                LDR      R0, =__main
 | 
			
		||||
                BX       R0
 | 
			
		||||
                ENDP
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
; Macro to define default exception/interrupt handlers.
 | 
			
		||||
; Default handler are weak symbols with an endless loop.
 | 
			
		||||
; They can be overwritten by real handlers.
 | 
			
		||||
                MACRO
 | 
			
		||||
                Set_Default_Handler  $Handler_Name
 | 
			
		||||
$Handler_Name   PROC
 | 
			
		||||
                EXPORT   $Handler_Name             [WEAK]
 | 
			
		||||
                B        .
 | 
			
		||||
                ENDP
 | 
			
		||||
                MEND
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
; Default exception/interrupt handler
 | 
			
		||||
 | 
			
		||||
                Set_Default_Handler  NMI_Handler
 | 
			
		||||
                Set_Default_Handler  HardFault_Handler
 | 
			
		||||
                Set_Default_Handler  MemManage_Handler
 | 
			
		||||
                Set_Default_Handler  BusFault_Handler
 | 
			
		||||
                Set_Default_Handler  UsageFault_Handler
 | 
			
		||||
                Set_Default_Handler  SVC_Handler
 | 
			
		||||
                Set_Default_Handler  DebugMon_Handler
 | 
			
		||||
                Set_Default_Handler  PendSV_Handler
 | 
			
		||||
                Set_Default_Handler  SysTick_Handler
 | 
			
		||||
 | 
			
		||||
                Set_Default_Handler  Interrupt0_Handler
 | 
			
		||||
                Set_Default_Handler  Interrupt1_Handler
 | 
			
		||||
                Set_Default_Handler  Interrupt2_Handler
 | 
			
		||||
                Set_Default_Handler  Interrupt3_Handler
 | 
			
		||||
                Set_Default_Handler  Interrupt4_Handler
 | 
			
		||||
                Set_Default_Handler  Interrupt5_Handler
 | 
			
		||||
                Set_Default_Handler  Interrupt6_Handler
 | 
			
		||||
                Set_Default_Handler  Interrupt7_Handler
 | 
			
		||||
                Set_Default_Handler  Interrupt8_Handler
 | 
			
		||||
                Set_Default_Handler  Interrupt9_Handler
 | 
			
		||||
 | 
			
		||||
                ALIGN
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
; User setup Stack & Heap
 | 
			
		||||
 | 
			
		||||
                EXPORT   __stack_limit
 | 
			
		||||
                EXPORT   __initial_sp
 | 
			
		||||
                IF       Heap_Size != 0                      ; Heap is provided
 | 
			
		||||
                EXPORT   __heap_base
 | 
			
		||||
                EXPORT   __heap_limit
 | 
			
		||||
                ENDIF
 | 
			
		||||
 | 
			
		||||
                END
 | 
			
		||||
@ -0,0 +1,85 @@
 | 
			
		||||
/**************************************************************************//**
 | 
			
		||||
 * @file     system_ARMCM7.c
 | 
			
		||||
 * @brief    CMSIS Device System Source File for
 | 
			
		||||
 *           ARMCM7 Device
 | 
			
		||||
 * @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.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#if defined (ARMCM7)
 | 
			
		||||
  #include "ARMCM7.h"
 | 
			
		||||
#elif defined (ARMCM7_SP)
 | 
			
		||||
  #include "ARMCM7_SP.h"
 | 
			
		||||
#elif defined (ARMCM7_DP)
 | 
			
		||||
  #include "ARMCM7_DP.h"
 | 
			
		||||
#else
 | 
			
		||||
  #error device not specified!
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*----------------------------------------------------------------------------
 | 
			
		||||
  Define clocks
 | 
			
		||||
 *----------------------------------------------------------------------------*/
 | 
			
		||||
#define  XTAL            (50000000UL)     /* Oscillator frequency */
 | 
			
		||||
 | 
			
		||||
#define  SYSTEM_CLOCK    (XTAL / 2U)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*----------------------------------------------------------------------------
 | 
			
		||||
  Externals
 | 
			
		||||
 *----------------------------------------------------------------------------*/
 | 
			
		||||
#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U)
 | 
			
		||||
  extern uint32_t __Vectors;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*----------------------------------------------------------------------------
 | 
			
		||||
  System Core Clock Variable
 | 
			
		||||
 *----------------------------------------------------------------------------*/
 | 
			
		||||
uint32_t SystemCoreClock = SYSTEM_CLOCK;  /* System Core Clock Frequency */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*----------------------------------------------------------------------------
 | 
			
		||||
  System Core Clock update function
 | 
			
		||||
 *----------------------------------------------------------------------------*/
 | 
			
		||||
void SystemCoreClockUpdate (void)
 | 
			
		||||
{
 | 
			
		||||
  SystemCoreClock = SYSTEM_CLOCK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*----------------------------------------------------------------------------
 | 
			
		||||
  System initialization function
 | 
			
		||||
 *----------------------------------------------------------------------------*/
 | 
			
		||||
void SystemInit (void)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U)
 | 
			
		||||
  SCB->VTOR = (uint32_t) &__Vectors;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined (__FPU_USED) && (__FPU_USED == 1U)
 | 
			
		||||
  SCB->CPACR |= ((3U << 10U*2U) |           /* enable CP10 Full Access */
 | 
			
		||||
                 (3U << 11U*2U)  );         /* enable CP11 Full Access */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef UNALIGNED_SUPPORT_DISABLE
 | 
			
		||||
  SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  SystemCoreClock = SYSTEM_CLOCK;
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,134 @@
 | 
			
		||||
/* ----------------------------------------------------------------------   
 | 
			
		||||
* Copyright (C) 2010-2012 ARM Limited. All rights reserved.   
 | 
			
		||||
*   
 | 
			
		||||
* $Date:        17. January 2013  
 | 
			
		||||
* $Revision: 	V1.4.0   
 | 
			
		||||
*   
 | 
			
		||||
* Project: 	    CMSIS DSP Library   
 | 
			
		||||
* Title:	     	arm_graphic_equalizer_data.c
 | 
			
		||||
*   
 | 
			
		||||
* Description:	 Data file used for example code
 | 
			
		||||
*   
 | 
			
		||||
* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0
 | 
			
		||||
*  
 | 
			
		||||
* Redistribution and use in source and binary forms, with or without 
 | 
			
		||||
* modification, are permitted provided that the following conditions
 | 
			
		||||
* are met:
 | 
			
		||||
*   - Redistributions of source code must retain the above copyright
 | 
			
		||||
*     notice, this list of conditions and the following disclaimer.
 | 
			
		||||
*   - Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
*     notice, this list of conditions and the following disclaimer in
 | 
			
		||||
*     the documentation and/or other materials provided with the 
 | 
			
		||||
*     distribution.
 | 
			
		||||
*   - Neither the name of ARM LIMITED nor the names of its contributors
 | 
			
		||||
*     may be used to endorse or promote products derived from this
 | 
			
		||||
*     software without specific prior written permission.
 | 
			
		||||
*
 | 
			
		||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 | 
			
		||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
 | 
			
		||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 | 
			
		||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 | 
			
		||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
			
		||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | 
			
		||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
 | 
			
		||||
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 | 
			
		||||
* POSSIBILITY OF SUCH DAMAGE.  
 | 
			
		||||
 * -------------------------------------------------------------------- */
 | 
			
		||||
 | 
			
		||||
#include "arm_math.h"
 | 
			
		||||
 | 
			
		||||
float32_t testRefOutput_f32[320] = {
 | 
			
		||||
 | 
			
		||||
0.000000000000000000,	0.001898396760225296,	0.004215449094772339,	0.007432077080011368,	0.010948467999696732,	0.015026375651359558,	0.019191544502973557,	0.023574527353048325,	
 | 
			
		||||
0.027919445186853409,	0.032277785241603851,	0.036551639437675476,	0.040732793509960175,	0.044799156486988068,	0.048710610717535019,	0.052476800978183746,	0.056059073656797409,	
 | 
			
		||||
0.059482168406248093,	0.062726479023694992,	0.065821025520563126,	0.068763464689254761,	0.071577839553356171,	0.074270240962505341,	0.076856281608343124,	0.079344697296619415,	
 | 
			
		||||
0.081745062023401260,	0.084067162126302719,	0.086318407207727432,	0.088509257882833481,	0.090647127479314804,	0.092742368578910828,	0.094802625477313995,	0.096837285906076431,	
 | 
			
		||||
0.098853722214698792,	0.100859899073839190,	0.102862443774938580,	0.104867763817310330,	0.106881409883499150,	0.108908228576183320,	0.110952425748109820,	0.113017357885837550,	
 | 
			
		||||
0.115105822682380680,	0.117219865322113040,	0.119361080229282380,	0.121530555188655850,	0.123729091137647630,	0.125957202166318890,	0.128215309232473370,	0.130503740161657330,	
 | 
			
		||||
0.132822841405868530,	0.135173004120588300,	0.137554679065942760,	0.139968376606702800,	0.142414685338735580,	0.144894234836101530,	0.147407654672861100,	0.149955596774816510,	
 | 
			
		||||
0.152538605034351350,	0.155157200992107390,	0.157811731100082400,	0.160502441227436070,	0.163229387253522870,	0.165992442518472670,	0.168791320174932480,	0.171625509858131410,	
 | 
			
		||||
0.174494370818138120,	0.177397061139345170,	0.180332608520984650,	0.183299910277128220,	0.186297744512557980,	0.189324837177991870,	0.192379791289567950,	0.195461250841617580,	
 | 
			
		||||
0.198567759245634080,	0.201697919517755510,	0.204850304871797560,	0.208023533225059510,	0.211216274648904800,	0.214427210390567780,	0.217655111104249950,	0.220898788422346120,	
 | 
			
		||||
0.224157124757766720,	0.227429077029228210,	0.230713658034801480,	0.234009962528944020,	0.237317133694887160,	0.240634419023990630,	0.243961080908775330,	0.247296508401632310,	
 | 
			
		||||
0.250640105456113820,	0.253991369158029560,	0.257349837571382520,	0.260715119540691380,	0.264086868613958360,	0.267464816570281980,	0.270848698914051060,	0.274238351732492450,	
 | 
			
		||||
0.277633611112833020,	0.281034380197525020,	0.284440591931343080,	0.287852220237255100,	0.291269283741712570,	0.294691801071166990,	0.298119872808456420,	0.301553562283515930,	
 | 
			
		||||
0.304993014782667160,	0.308438356965780260,	0.311889752745628360,	0.315347377210855480,	0.318811416625976560,	0.322282072156667710,	0.325759567320346830,	0.329244095832109450,	
 | 
			
		||||
0.332735907286405560,	0.336235217750072480,	0.339742250740528110,	0.343257248401641850,	0.346780419349670410,	0.350311983376741410,	0.353852160274982450,	0.357401121407747270,	
 | 
			
		||||
0.360959105193614960,	0.364526227116584780,	0.368102725595235820,	0.371688675135374070,	0.375284302979707720,	0.378889638930559160,	0.382504884153604510,	0.386130042374134060,	
 | 
			
		||||
0.389765247702598570,	0.393410529941320420,	0.397065933793783190,	0.400731507688760760,	0.404407206922769550,	0.408093083649873730,	0.411789052188396450,	0.415495119988918300,	
 | 
			
		||||
0.419211201369762420,	0.422937240451574330,	0.426673140376806260,	0.430418811738491060,	0.434174135327339170,	0.437938995659351350,	0.441713258624076840,	0.445496778935194020,	
 | 
			
		||||
0.449289388954639430,	0.453090950846672060,	0.456901267170906070,	0.460720170289278030,	0.464547459036111830,	0.468382950872182850,	0.472226426005363460,	0.476077698171138760,	
 | 
			
		||||
0.479936532676219940,	0.483802750706672670,	0.487676106393337250,	0.491556398570537570,	0.495443399995565410,	0.499336875975131990,	0.503236617892980580,	0.507142387330532070,	
 | 
			
		||||
0.511053957045078280,	0.514971107244491580,	0.518893606960773470,	0.522821225225925450,	0.526753749698400500,	0.530690938234329220,	0.534632585942745210,	0.538578454405069350,	
 | 
			
		||||
0.542528338730335240,	0.546481993049383160,	0.550439231097698210,	0.554399792104959490,	0.558363504707813260,	0.562330115586519240,	0.566299438476562500,	0.570271246135234830,	
 | 
			
		||||
0.574245333671569820,	0.578221492469310760,	0.582199502736330030,	0.586179181933403020,	0.590160276740789410,	0.594142623245716090,	0.598125983029603960,	0.602110169827938080,	
 | 
			
		||||
0.606094967573881150,	0.610080175101757050,	0.614065583795309070,	0.618050977587699890,	0.622036151587963100,	0.626020893454551700,	0.630004994571208950,	0.633988231420516970,	
 | 
			
		||||
0.637970402836799620,	0.641951277852058410,	0.645930647850036620,	0.649908289313316350,	0.653883971273899080,	0.657857488840818410,	0.661828581243753430,	0.665797054767608640,	
 | 
			
		||||
0.669762641191482540,	0.673725124448537830,	0.677684243768453600,	0.681639779359102250,	0.685591462999582290,	0.689539063721895220,	0.693482317030429840,	0.697420965880155560,	
 | 
			
		||||
0.701354760676622390,	0.705283410847187040,	0.709206689149141310,	0.713124278932809830,	0.717035952955484390,	0.720941375941038130,	0.724840316921472550,	0.728732451796531680,	
 | 
			
		||||
0.732617516070604320,	0.736495196819305420,	0.740365199744701390,	0.744227230548858640,	0.748080968856811520,	0.751926124095916750,	0.755762357264757160,	0.759589381515979770,	
 | 
			
		||||
0.763406842947006230,	0.767214450985193250,	0.771011855453252790,	0.774798732250928880,	0.778574761003255840,	0.782339565455913540,	0.786092851310968400,	0.789834223687648770,	
 | 
			
		||||
0.793563373386859890,	0.797279909253120420,	0.800983514636754990,	0.804673787206411360,	0.808350402861833570,	0.812012966722249980,	0.815661124885082240,	0.819294504821300510,	
 | 
			
		||||
0.822912722826004030,	0.826515413820743560,	0.830102190375328060,	0.833672653883695600,	0.837226435542106630,	0.840763118118047710,	0.844282336533069610,	0.847783654928207400,	
 | 
			
		||||
0.851266715675592420,	0.854731071740388870,	0.858176350593566890,	0.861602116376161580,	0.865007970482110980,	0.868393491953611370,	0.871758259832859040,	0.875101849436759950,	
 | 
			
		||||
0.878423850983381270,	0.881723806262016300,	0.885001312941312790,	0.888255912810564040,	0.891487173736095430,	0.894694659858942030,	0.897877920418977740,	0.901036512106657030,	
 | 
			
		||||
0.904169965535402300,	0.907277844846248630,	0.910359673202037810,	0.913415014743804930,	0.916443370282649990,	0.919444311410188670,	0.922417331486940380,	0.925361987203359600,	
 | 
			
		||||
0.928277771919965740,	0.931164238601922990,	0.934020876884460450,	0.936847217381000520,	0.939642757177352910,	0.942407000809907910,	0.945139460265636440,	0.947839632630348210,	
 | 
			
		||||
0.950507018715143200,	0.953141096979379650,	0.955741371959447860,	0.958307322114706040,	0.960838429629802700,	0.963334184139966960,	0.965794049203395840,	0.968217510730028150,	
 | 
			
		||||
0.970604017376899720,	0.972953058779239650,	0.975264083594083790,	0.977536566555500030,	0.979769956320524220,	0.981963708996772770,	0.984117280691862110,	0.986230112612247470,	
 | 
			
		||||
0.988301653414964680,	0.990331344306468960,	0.992318630218505860,	0.994262944906950000,	0.996163722127676010,	0.998020399361848830,	0.999832402914762500,	1.001599155366420700,	
 | 
			
		||||
1.003320086747407900,	1.004994612187147100,	1.006622135639190700,	1.008202098309993700,	1.009733878076076500,	1.011216927319765100,	1.012650609016418500,	1.014034371823072400,	
 | 
			
		||||
1.015367589890956900,	1.016649682074785200,	1.017880033701658200,	1.019058048725128200,	1.020183108747005500,	1.021254621446132700,	1.022271949797868700,	1.023234523832798000,	
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
/* ----------------------------------------------------------------------
 | 
			
		||||
** Test input - logarithmic chirp signal
 | 
			
		||||
** ------------------------------------------------------------------- */
 | 
			
		||||
 | 
			
		||||
float32_t testInput_f32[320] =
 | 
			
		||||
  {
 | 
			
		||||
    0.000000000000000061,	0.002622410992047861,	0.005253663973466970,	0.007893770384930297,	0.010542741395035495,	0.013200587895525877,	0.015867320496454066,	0.018542949521290073,	
 | 
			
		||||
0.021227485001971542,	0.023920936673895138,	0.026623313970853074,	0.029334626019908643,	0.032054881636210709,	0.034784089317753723,	0.037522257240071598,	0.040269393250875855,	
 | 
			
		||||
0.043025504864628375,	0.045790599257054837,	0.048564683259595690,	0.051347763353792118,	0.054139845665610427,	0.056940935959702531,	0.059751039633601337,	0.062570161711849828,	
 | 
			
		||||
0.065398306840066575,	0.068235479278943648,	0.071081682898178900,	0.073936921170339814,	0.076801197164660218,	0.079674513540768196,	0.082556872542344922,	0.085448275990715375,	
 | 
			
		||||
0.088348725278367082,	0.091258221362398390,	0.094176764757897533,	0.097104355531246703,	0.100040993293358240,	0.102986677192832010,	0.105941405909045980,	0.108905177645166230,	
 | 
			
		||||
0.111877990121087980,	0.114859840566297130,	0.117850725712659680,	0.120850641787131110,	0.123859584504392860,	0.126877549059407400,	0.129904530119898690,	0.132940521818751430,	
 | 
			
		||||
0.135985517746334080,	0.139039510942737950,	0.142102493889940090,	0.145174458503884160,	0.148255396126476810,	0.151345297517508140,	0.154444152846483080,	0.157551951684374300,	
 | 
			
		||||
0.160668682995289720,	0.163794335128054890,	0.166928895807713030,	0.170072352126936720,	0.173224690537355760,	0.176385896840798810,	0.179555956180445340,	0.182734853031894270,	
 | 
			
		||||
0.185922571194139130,	0.189119093780459800,	0.192324403209221870,	0.195538481194587030,	0.198761308737133020,	0.201992866114384050,	0.205233132871247170,	0.208482087810360570,	
 | 
			
		||||
0.211739708982344370,	0.215005973675965020,	0.218280858408200220,	0.221564338914212730,	0.224856390137231970,	0.228156986218334190,	0.231466100486134670,	0.234783705446379690,	
 | 
			
		||||
0.238109772771442410,	0.241444273289723230,	0.244787176974952890,	0.248138452935395580,	0.251498069402956710,	0.254865993722190930,	0.258242192339209860,	0.261626630790492030,	
 | 
			
		||||
0.265019273691591620,	0.268420084725748410,	0.271829026632395280,	0.275246061195565440,	0.278671149232197430,	0.282104250580339830,	0.285545324087251580,	0.288994327597401960,	
 | 
			
		||||
0.292451217940364990,	0.295915950918612280,	0.299388481295203350,	0.302868762781368150,	0.306356748023990040,	0.309852388592980640,	0.313355634968552230,	0.316866436528383590,	
 | 
			
		||||
0.320384741534681720,	0.323910497121136620,	0.327443649279772870,	0.330984142847692230,	0.334531921493712690,	0.338086927704900790,	0.341649102772995210,	0.345218386780727190,	
 | 
			
		||||
0.348794718588032520,	0.352378035818156910,	0.355968274843654950,	0.359565370772282730,	0.363169257432780890,	0.366779867360555120,	0.370397131783246010,	0.374020980606193880,	
 | 
			
		||||
0.377651342397795690,	0.381288144374756830,	0.384931312387234990,	0.388580770903877330,	0.392236442996751310,	0.395898250326170650,	0.399566113125414350,	0.403239950185338420,	
 | 
			
		||||
0.406919678838884410,	0.410605214945482130,	0.414296472875345100,	0.417993365493664670,	0.421695804144698540,	0.425403698635752780,	0.429116957221065130,	0.432835486585582130,	
 | 
			
		||||
0.436559191828633180,	0.440287976447505720,	0.444021742320914510,	0.447760389692375140,	0.451503817153472210,	0.455251921627031540,	0.459004598350192470,	0.462761740857380200,	
 | 
			
		||||
0.466523240963184150,	0.470288988745136360,	0.474058872526396560,	0.477832778858340690,	0.481610592503056990,	0.485392196415748600,	0.489177471727042850,	0.492966297725213780,	
 | 
			
		||||
0.496758551838309250,	0.500554109616195060,	0.504352844712508190,	0.508154628866524960,	0.511959331884944910,	0.515766821623591440,	0.519576963969030530,	0.523389622820107150,	
 | 
			
		||||
0.527204660069405030,	0.531021935584629400,	0.534841307189911630,	0.538662630647041900,	0.542485759636628150,	0.546310545739186690,	0.550136838416161340,	0.553964484990880020,	
 | 
			
		||||
0.557793330629441700,	0.561623218321546380,	0.565453988861259300,	0.569285480827721570,	0.573117530565801950,	0.576949972166696630,	0.580782637448476910,	0.584615355936589420,	
 | 
			
		||||
0.588447954844309340,	0.592280259053150400,	0.596112091093235260,	0.599943271123626440,	0.603773616912622660,	0.607602943818024150,	0.611431064767369080,	0.615257790238142090,	
 | 
			
		||||
0.619082928237961740,	0.622906284284749700,	0.626727661386881850,	0.630546860023327600,	0.634363678123782030,	0.638177911048790960,	0.641989351569874020,	0.645797789849653410,	
 | 
			
		||||
0.649603013421986450,	0.653404807172108140,	0.657202953316791350,	0.660997231384523490,	0.664787418195706640,	0.668573287842887610,	0.672354611671016960,	0.676131158257749170,	
 | 
			
		||||
0.679902693393781730,	0.683668980063242500,	0.687429778424128110,	0.691184845788802130,	0.694933936604551380,	0.698676802434213370,	0.702413191936877570,	0.706142850848662460,	
 | 
			
		||||
0.709865521963579990,	0.713580945114492330,	0.717288857154159800,	0.720988991936399870,	0.724681080297347790,	0.728364850036839040,	0.732040025899910680,	0.735706329558433620,	
 | 
			
		||||
0.739363479592880620,	0.743011191474238440,	0.746649177546067850,	0.750277147006723990,	0.753894805891742180,	0.757501857056394940,	0.761098000158428880,	0.764682931640995540,	
 | 
			
		||||
0.768256344715771980,	0.771817929346292900,	0.775367372231492210,	0.778904356789468790,	0.782428563141483460,	0.785939668096195860,	0.789437345134148760,	0.792921264392515420,	
 | 
			
		||||
0.796391092650110770,	0.799846493312681210,	0.803287126398485760,	0.806712648524170680,	0.810122712890953390,	0.813516969271127150,	0.816895063994893090,	0.820256639937531280,	
 | 
			
		||||
0.823601336506926020,	0.826928789631450890,	0.830238631748229430,	0.833530491791779850,	0.836803995183058700,	0.840058763818912760,	0.843294416061954100,	0.846510566730867220,	
 | 
			
		||||
0.849706827091166740,	0.852882804846411770,	0.856038104129895340,	0.859172325496819990,	0.862285065916973510,	0.865375918767918860,	0.868444473828712590,	0.871490317274166260,	
 | 
			
		||||
0.874513031669661770,	0.877512195966544280,	0.880487385498096800,	0.883438171976119850,	0.886364123488128100,	0.889264804495180530,	0.892139775830360640,	0.894988594697921020,	
 | 
			
		||||
0.897810814673113080,	0.900605985702712770,	0.903373654106265470,	0.906113362578062300,	0.908824650189867690,	0.911507052394417540,	0.914160101029702910,	0.916783324324059180,	
 | 
			
		||||
0.919376246902079860,	0.921938389791372770,	0.924469270430179120,	0.926968402675872660,	0.929435296814361430,	0.931869459570409790,	0.934270394118903560,	0.936637600097074200,	
 | 
			
		||||
0.938970573617708970,	0.941268807283364040,	0.943531790201601380,	0.945759008001275100,	0.947949942849885320,	0.950104073472023970,	0.952220875168933280,	0.954299819839202090,	
 | 
			
		||||
0.956340376000621160,	0.958342008813221960,	0.960304180103520260,	0.962226348389994210,	0.964107968909812760,	0.965948493646846980,	0.967747371360983650,	0.969504047618768740,	
 | 
			
		||||
0.971217964825405680,	0.972888562258134030,	0.974515276101013520,	0.976097539481141750,	0.977634782506330400,	0.979126432304266880,	0.980571913063189360,	0.981970646074102120,	
 | 
			
		||||
0.983322049774557390,	0.984625539794035220,	0.985880529000944810,	0.987086427551279730,	0.988242642938953360,	0.989348580047844540,	0.990403641205582440,	0.991407226239099710,	
 | 
			
		||||
0.992358732531984260,	0.993257555083659870,	0.994103086570423680,	0.994894717408374870,	0.995631835818261310,	0.996313827892278070,	0.996940077662846650,	0.997509967173408010,	
 | 
			
		||||
 | 
			
		||||
  };
 | 
			
		||||
@ -0,0 +1,411 @@
 | 
			
		||||
/* ----------------------------------------------------------------------
 | 
			
		||||
* Copyright (C) 2010-2012 ARM Limited. All rights reserved.
 | 
			
		||||
*
 | 
			
		||||
* $Date:         17. January 2013
 | 
			
		||||
* $Revision:     V1.4.0
 | 
			
		||||
*
 | 
			
		||||
* Project:       CMSIS DSP Library
 | 
			
		||||
* Title:         arm_graphic_equalizer_example_q31.c
 | 
			
		||||
*
 | 
			
		||||
* Description:   Example showing an audio graphic equalizer constructed
 | 
			
		||||
*                out of Biquad filters.
 | 
			
		||||
*
 | 
			
		||||
* Target Processor: Cortex-M4/Cortex-M3
 | 
			
		||||
*
 | 
			
		||||
* Redistribution and use in source and binary forms, with or without
 | 
			
		||||
* modification, are permitted provided that the following conditions
 | 
			
		||||
* are met:
 | 
			
		||||
*   - Redistributions of source code must retain the above copyright
 | 
			
		||||
*     notice, this list of conditions and the following disclaimer.
 | 
			
		||||
*   - Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
*     notice, this list of conditions and the following disclaimer in
 | 
			
		||||
*     the documentation and/or other materials provided with the
 | 
			
		||||
*     distribution.
 | 
			
		||||
*   - Neither the name of ARM LIMITED nor the names of its contributors
 | 
			
		||||
*     may be used to endorse or promote products derived from this
 | 
			
		||||
*     software without specific prior written permission.
 | 
			
		||||
*
 | 
			
		||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 | 
			
		||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 | 
			
		||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 | 
			
		||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 | 
			
		||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
			
		||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | 
			
		||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
 | 
			
		||||
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 | 
			
		||||
* POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 * -------------------------------------------------------------------- */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @ingroup groupExamples
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @defgroup GEQ5Band Graphic Audio Equalizer Example
 | 
			
		||||
 *
 | 
			
		||||
 * \par Description:
 | 
			
		||||
 * \par
 | 
			
		||||
 * This example demonstrates how a 5-band graphic equalizer can be constructed
 | 
			
		||||
 * using the Biquad cascade functions.
 | 
			
		||||
 * A graphic equalizer is used in audio applications to vary the tonal quality
 | 
			
		||||
 * of the audio.
 | 
			
		||||
 *
 | 
			
		||||
 * \par Block Diagram:
 | 
			
		||||
 * \par
 | 
			
		||||
 * The design is based on a cascade of 5 filter sections.
 | 
			
		||||
 * \image html GEQ_signalflow.gif
 | 
			
		||||
 * Each filter section is 4th order and consists of a cascade of two Biquads.
 | 
			
		||||
 * Each filter has a nominal gain of 0 dB (1.0 in linear units) and
 | 
			
		||||
 * boosts or cuts signals within a specific frequency range.
 | 
			
		||||
 * The edge frequencies between the 5 bands are 100, 500, 2000, and 6000 Hz.
 | 
			
		||||
 * Each band has an adjustable boost or cut in the range of +/- 9 dB.
 | 
			
		||||
 * For example, the band that extends from 500 to 2000 Hz has the response shown below:
 | 
			
		||||
 * \par
 | 
			
		||||
 * \image html GEQ_bandresponse.gif
 | 
			
		||||
 * \par
 | 
			
		||||
 * With 1 dB steps, each filter has a total of 19 different settings.
 | 
			
		||||
 * The filter coefficients for all possible 19 settings were precomputed
 | 
			
		||||
 * in MATLAB and stored in a table.  With 5 different tables, there are
 | 
			
		||||
 * a total of 5 x 19 = 95 different 4th order filters.
 | 
			
		||||
 * All 95 responses are shown below:
 | 
			
		||||
 * \par
 | 
			
		||||
 * \image html GEQ_allbandresponse.gif
 | 
			
		||||
 * \par
 | 
			
		||||
 * Each 4th order filter has 10 coefficents for a grand total of 950 different filter
 | 
			
		||||
 * coefficients that must be tabulated. The input and output data is in Q31 format.
 | 
			
		||||
 * For better noise performance, the two low frequency bands are implemented using the high
 | 
			
		||||
 * precision 32x64-bit Biquad filters. The remaining 3 high frequency bands use standard
 | 
			
		||||
 * 32x32-bit Biquad filters. The input signal used in the example is a logarithmic chirp.
 | 
			
		||||
 * \par
 | 
			
		||||
 * \image html GEQ_inputchirp.gif
 | 
			
		||||
 * \par
 | 
			
		||||
 * The array <code>bandGains</code> specifies the gain in dB to apply in each band.
 | 
			
		||||
 * For example, if <code>bandGains={0, -3, 6, 4, -6};</code> then the output signal will be:
 | 
			
		||||
 * \par
 | 
			
		||||
 * \image html GEQ_outputchirp.gif
 | 
			
		||||
 * \par
 | 
			
		||||
 * \note The output chirp signal follows the gain or boost of each band.
 | 
			
		||||
 * \par
 | 
			
		||||
 *
 | 
			
		||||
 * \par Variables Description:
 | 
			
		||||
 * \par
 | 
			
		||||
 * \li \c testInput_f32 points to the input data
 | 
			
		||||
 * \li \c testRefOutput_f32 points to the reference output data
 | 
			
		||||
 * \li \c testOutput points to the test output data
 | 
			
		||||
 * \li \c inputQ31 temporary input buffer
 | 
			
		||||
 * \li \c outputQ31 temporary output buffer
 | 
			
		||||
 * \li \c biquadStateBand1Q31 points to state buffer for band1
 | 
			
		||||
 * \li \c biquadStateBand2Q31 points to state buffer for band2
 | 
			
		||||
 * \li \c biquadStateBand3Q31 points to state buffer for band3
 | 
			
		||||
 * \li \c biquadStateBand4Q31 points to state buffer for band4
 | 
			
		||||
 * \li \c biquadStateBand5Q31 points to state buffer for band5
 | 
			
		||||
 * \li \c coeffTable points to coefficient buffer for all bands
 | 
			
		||||
 * \li \c gainDB gain buffer which has gains applied for all the bands
 | 
			
		||||
 *
 | 
			
		||||
 * \par CMSIS DSP Software Library Functions Used:
 | 
			
		||||
 * \par
 | 
			
		||||
 * - arm_biquad_cas_df1_32x64_init_q31()
 | 
			
		||||
 * - arm_biquad_cas_df1_32x64_q31()
 | 
			
		||||
 * - arm_biquad_cascade_df1_init_q31()
 | 
			
		||||
 * - arm_biquad_cascade_df1_q31()
 | 
			
		||||
 * - arm_scale_q31()
 | 
			
		||||
 * - arm_scale_f32()
 | 
			
		||||
 * - arm_float_to_q31()
 | 
			
		||||
 * - arm_q31_to_float()
 | 
			
		||||
 *
 | 
			
		||||
 * <b> Refer  </b>
 | 
			
		||||
 * \link arm_graphic_equalizer_example_q31.c \endlink
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/** \example arm_graphic_equalizer_example_q31.c
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "arm_math.h"
 | 
			
		||||
#include "math_helper.h"
 | 
			
		||||
 | 
			
		||||
/* Length of the overall data in the test */
 | 
			
		||||
#define TESTLENGTH 320
 | 
			
		||||
 | 
			
		||||
/* Block size for the underlying processing */
 | 
			
		||||
#define BLOCKSIZE 32
 | 
			
		||||
 | 
			
		||||
/* Total number of blocks to run */
 | 
			
		||||
#define NUMBLOCKS (TESTLENGTH/BLOCKSIZE)
 | 
			
		||||
 | 
			
		||||
/* Number of 2nd order Biquad stages per filter */
 | 
			
		||||
#define NUMSTAGES 2
 | 
			
		||||
 | 
			
		||||
#define SNR_THRESHOLD_F32  98
 | 
			
		||||
 | 
			
		||||
/* -------------------------------------------------------------------
 | 
			
		||||
 * External Declarations for Input and Output buffers
 | 
			
		||||
 * ------------------------------------------------------------------- */
 | 
			
		||||
 | 
			
		||||
extern float32_t testInput_f32[TESTLENGTH];
 | 
			
		||||
static float32_t testOutput[TESTLENGTH];
 | 
			
		||||
 | 
			
		||||
extern float32_t testRefOutput_f32[TESTLENGTH];
 | 
			
		||||
 | 
			
		||||
/* ----------------------------------------------------------------------
 | 
			
		||||
** Q31 state buffers for Band1, Band2, Band3, Band4, Band5
 | 
			
		||||
** ------------------------------------------------------------------- */
 | 
			
		||||
 | 
			
		||||
static q63_t biquadStateBand1Q31[4 * 2];
 | 
			
		||||
static q63_t biquadStateBand2Q31[4 * 2];
 | 
			
		||||
static q31_t biquadStateBand3Q31[4 * 2];
 | 
			
		||||
static q31_t biquadStateBand4Q31[4 * 2];
 | 
			
		||||
static q31_t biquadStateBand5Q31[4 * 2];
 | 
			
		||||
 | 
			
		||||
/* ----------------------------------------------------------------------
 | 
			
		||||
** Q31 input and output buffers
 | 
			
		||||
** ------------------------------------------------------------------- */
 | 
			
		||||
 | 
			
		||||
q31_t inputQ31[BLOCKSIZE];
 | 
			
		||||
q31_t outputQ31[BLOCKSIZE];
 | 
			
		||||
 | 
			
		||||
/* ----------------------------------------------------------------------
 | 
			
		||||
** Entire coefficient table.  There are 10 coefficients per 4th order Biquad
 | 
			
		||||
** cascade filter.  The first 10 coefficients correspond to the -9 dB gain
 | 
			
		||||
** setting of band 1; the next 10 coefficient correspond to the -8 dB gain
 | 
			
		||||
** setting of band 1; and so on.  There are 10*19=190 coefficients in total
 | 
			
		||||
** for band 1 (gains = -9, -8, -7, ..., 9).  After this come the 190 coefficients
 | 
			
		||||
** for band 2.
 | 
			
		||||
**
 | 
			
		||||
** The coefficients are in Q29 format and require a postShift of 2.
 | 
			
		||||
** ------------------------------------------------------------------- */
 | 
			
		||||
 | 
			
		||||
const q31_t coeffTable[950] = {
 | 
			
		||||
 | 
			
		||||
  /* Band 1, -9 dB gain */
 | 
			
		||||
  535576962, -1071153923, 535576962, 1073741824, -536870912, 535576962, -1063501998, 527979313, 1060865294, -524146981,
 | 
			
		||||
  /* Band 1, -8 dB gain */
 | 
			
		||||
  535723226, -1071446451, 535723226, 1073741824, -536870912, 535723226, -1063568947, 527903217, 1061230578, -524503778,
 | 
			
		||||
  535868593, -1071737186, 535868593, 1073741824, -536870912, 535868593, -1063627467, 527819780, 1061585502, -524850686,
 | 
			
		||||
  536013181, -1072026363, 536013181, 1073741824, -536870912, 536013181, -1063677598, 527728935, 1061930361, -525187972,
 | 
			
		||||
  536157109, -1072314217, 536157109, 1073741824, -536870912, 536157109, -1063719372, 527630607, 1062265438, -525515897,
 | 
			
		||||
  536300492, -1072600983, 536300492, 1073741824, -536870912, 536300492, -1063752815, 527524720, 1062591011, -525834716,
 | 
			
		||||
  536443447, -1072886894, 536443447, 1073741824, -536870912, 536443447, -1063777945, 527411186, 1062907350, -526144676,
 | 
			
		||||
  536586091, -1073172183, 536586091, 1073741824, -536870912, 536586091, -1063794775, 527289917, 1063214717, -526446017,
 | 
			
		||||
  536728541, -1073457082, 536728541, 1073741824, -536870912, 536728541, -1063803308, 527160815, 1063513366, -526738975,
 | 
			
		||||
  536870912, -1073741824, 536870912, 1073741824, -536870912, 536870912, -1063803543, 527023777, 1063803543, -527023777,
 | 
			
		||||
  537013321, -1074026642, 537013321, 1073741824, -536870912, 537013321, -1063795470, 526878696, 1064085490, -527300648,
 | 
			
		||||
  537155884, -1074311768, 537155884, 1073741824, -536870912, 537155884, -1063779073, 526725455, 1064359439, -527569803,
 | 
			
		||||
  537298718, -1074597435, 537298718, 1073741824, -536870912, 537298718, -1063754328, 526563934, 1064625617, -527831454,
 | 
			
		||||
  537441939, -1074883878, 537441939, 1073741824, -536870912, 537441939, -1063721205, 526394005, 1064884245, -528085806,
 | 
			
		||||
  537585666, -1075171331, 537585666, 1073741824, -536870912, 537585666, -1063679666, 526215534, 1065135536, -528333059,
 | 
			
		||||
  537730015, -1075460030, 537730015, 1073741824, -536870912, 537730015, -1063629666, 526028380, 1065379699, -528573409,
 | 
			
		||||
  537875106, -1075750212, 537875106, 1073741824, -536870912, 537875106, -1063571152, 525832396, 1065616936, -528807045,
 | 
			
		||||
  538021057, -1076042114, 538021057, 1073741824, -536870912, 538021057, -1063504065, 525627429, 1065847444, -529034151,
 | 
			
		||||
  538167989, -1076335977, 538167989, 1073741824, -536870912, 538167989, -1063428338, 525413317, 1066071412, -529254907,
 | 
			
		||||
 | 
			
		||||
  /* Band 2, -9 dB gain */
 | 
			
		||||
  531784976, -1055497692, 523873415, 1066213307, -529420241, 531784976, -1040357886, 509828014, 1028908252, -494627367,
 | 
			
		||||
  /* Band 2, -8 dB gain */
 | 
			
		||||
  532357636, -1056601982, 524400080, 1066115844, -529326645, 532357636, -1040623406, 509562600, 1030462237, -496062122,
 | 
			
		||||
  532927392, -1057707729, 524931110, 1066024274, -529239070, 532927392, -1040848253, 509262081, 1031969246, -497457090,
 | 
			
		||||
  533494678, -1058816094, 525467240, 1065939047, -529157961, 533494678, -1041032161, 508925950, 1033429976, -498812573,
 | 
			
		||||
  534059929, -1059928204, 526009170, 1065860582, -529083734, 534059929, -1041174868, 508553717, 1034845124, -500128887,
 | 
			
		||||
  534623580, -1061045148, 526557561, 1065789260, -529016764, 534623580, -1041276126, 508144920, 1036215393, -501406373,
 | 
			
		||||
  535186068, -1062167969, 527113032, 1065725420, -528957385, 535186068, -1041335703, 507699125, 1037541500, -502645399,
 | 
			
		||||
  535747827, -1063297666, 527676151, 1065669351, -528905879, 535747827, -1041353386, 507215934, 1038824183, -503846368,
 | 
			
		||||
  536309295, -1064435183, 528247436, 1065621289, -528862476, 536309295, -1041328990, 506694984, 1040064203, -505009724,
 | 
			
		||||
  536870912, -1065581413, 528827349, 1065581413, -528827349, 536870912, -1041262354, 506135953, 1041262354, -506135953,
 | 
			
		||||
  537433117, -1066737194, 529416295, 1065549847, -528800610, 537433117, -1041153346, 505538564, 1042419457, -507225588,
 | 
			
		||||
  537996352, -1067903307, 530014622, 1065526651, -528782316, 537996352, -1041001864, 504902578, 1043536370, -508279208,
 | 
			
		||||
  538561061, -1069080480, 530622620, 1065511830, -528772462, 538561061, -1040807833, 504227800, 1044613981, -509297437,
 | 
			
		||||
  539127690, -1070269387, 531240527, 1065505333, -528770987, 539127690, -1040571205, 503514074, 1045653211, -510280946,
 | 
			
		||||
  539696690, -1071470656, 531868525, 1065507054, -528777778, 539696690, -1040291951, 502761277, 1046655011, -511230450,
 | 
			
		||||
  540268512, -1072684867, 532506750, 1065516837, -528792672, 540268512, -1039970063, 501969320, 1047620358, -512146700,
 | 
			
		||||
  540843613, -1073912567, 533155297, 1065534483, -528815459, 540843613, -1039605542, 501138139, 1048550251, -513030484,
 | 
			
		||||
  541422451, -1075154268, 533814224, 1065559750, -528845892, 541422451, -1039198394, 500267687, 1049445708, -513882621,
 | 
			
		||||
  542005489, -1076410460, 534483561, 1065592362, -528883686, 542005489, -1038748624, 499357932, 1050307760, -514703956,
 | 
			
		||||
  518903861, -1001986830, 486725277, 1037235801, -502367695, 518903861, -945834422, 446371043, 902366163, -400700571,
 | 
			
		||||
  520899989, -1005630916, 488289126, 1036926846, -502147311, 520899989, -946490935, 445581846, 907921945, -404936158,
 | 
			
		||||
  522893209, -1009290002, 489869792, 1036650484, -501961419, 522893209, -947006359, 444685310, 913306106, -409075225,
 | 
			
		||||
  524884763, -1012968199, 491470256, 1036407567, -501810737, 524884763, -947377809, 443679533, 918521018, -413116221,
 | 
			
		||||
  526875910, -1016669649, 493093518, 1036198712, -501695739, 526875910, -947602324, 442562672, 923569247, -417057897,
 | 
			
		||||
  528867927, -1020398503, 494742575, 1036024293, -501616651, 528867927, -947676875, 441332970, 928453558, -420899319,
 | 
			
		||||
  530862111, -1024158905, 496420407, 1035884447, -501573457, 530862111, -947598385, 439988777, 933176909, -424639872,
 | 
			
		||||
  532859778, -1027954970, 498129955, 1035779077, -501565907, 532859778, -947363742, 438528571, 937742446, -428279254,
 | 
			
		||||
  534862260, -1031790763, 499874098, 1035707863, -501593525, 534862260, -946969823, 436950987, 942153486, -431817474,
 | 
			
		||||
  536870912, -1035670279, 501655630, 1035670279, -501655630, 536870912, -946413508, 435254839, 946413508, -435254839,
 | 
			
		||||
  538887107, -1039597419, 503477238, 1035665609, -501751354, 538887107, -945691703, 433439146, 950526127, -438591937,
 | 
			
		||||
  540912240, -1043575967, 505341475, 1035692963, -501879659, 540912240, -944801359, 431503152, 954495080, -441829621,
 | 
			
		||||
  542947726, -1047609569, 507250741, 1035751307, -502039364, 542947726, -943739490, 429446349, 958324201, -444968987,
 | 
			
		||||
  544995000, -1051701717, 509207261, 1035839473, -502229165, 544995000, -942503190, 427268492, 962017400, -448011351,
 | 
			
		||||
  547055523, -1055855728, 511213065, 1035956193, -502447657, 547055523, -941089647, 424969617, 965578640, -450958226,
 | 
			
		||||
  549130774, -1060074734, 513269973, 1036100110, -502693359, 549130774, -939496155, 422550049, 969011913, -453811298,
 | 
			
		||||
  551222259, -1064361672, 515379585, 1036269804, -502964731, 551222259, -937720119, 420010407, 972321228, -456572401,
 | 
			
		||||
  553331507, -1068719280, 517543273, 1036463810, -503260192, 553331507, -935759057, 417351601, 975510582, -459243495,
 | 
			
		||||
  555460072, -1073150100, 519762181, 1036680633, -503578144, 555460072, -933610600, 414574832, 978583948, -461826644,
 | 
			
		||||
  494084017, -851422604, 404056273, 930151631, -423619864, 494084017, -673714108, 339502486, 561843007, -265801750,
 | 
			
		||||
  498713542, -859177141, 406587077, 929211656, -423786402, 498713542, -673274906, 338185129, 573719128, -272222942,
 | 
			
		||||
  503369016, -867012190, 409148384, 928362985, -424054784, 503369016, -672533059, 336693984, 585290277, -278599028,
 | 
			
		||||
  508052536, -874935599, 411746438, 927604291, -424422151, 508052536, -671478538, 335026905, 596558312, -284920289,
 | 
			
		||||
  512766286, -882955583, 414387826, 926933782, -424885216, 512766286, -670100998, 333182045, 607525792, -291177811,
 | 
			
		||||
  517512534, -891080712, 417079474, 926349262, -425440318, 517512534, -668389789, 331157902, 618195914, -297363485,
 | 
			
		||||
  522293635, -899319903, 419828635, 925848177, -426083491, 522293635, -666333963, 328953368, 628572440, -303470012,
 | 
			
		||||
  527112032, -907682405, 422642886, 925427679, -426810526, 527112032, -663922286, 326567785, 638659631, -309490882,
 | 
			
		||||
  531970251, -916177781, 425530105, 925084675, -427617023, 531970251, -661143261, 324000998, 648462180, -315420352,
 | 
			
		||||
  536870912, -924815881, 428498454, 924815881, -428498454, 536870912, -657985147, 321253420, 657985147, -321253420,
 | 
			
		||||
  541816719, -933606817, 431556352, 924617870, -429450209, 541816719, -654435997, 318326093, 667233900, -326985786,
 | 
			
		||||
  546810467, -942560921, 434712438, 924487114, -430467639, 546810467, -650483688, 315220754, 676214053, -332613816,
 | 
			
		||||
  551855042, -951688708, 437975532, 924420027, -431546101, 551855042, -646115970, 311939896, 684931422, -338134495,
 | 
			
		||||
  556953421, -961000826, 441354588, 924413001, -432680993, 556953421, -641320513, 308486839, 693391970, -343545389,
 | 
			
		||||
  562108672, -970508005, 444858642, 924462435, -433867780, 562108672, -636084967, 304865786, 701601770, -348844597,
 | 
			
		||||
  567323959, -980220994, 448496743, 924564764, -435102022, 567323959, -630397020, 301081886, 709566963, -354030710,
 | 
			
		||||
  572602539, -990150500, 452277894, 924716482, -436379394, 572602539, -624244471, 297141281, 717293726, -359102767,
 | 
			
		||||
  577947763, -1000307125, 456210977, 924914158, -437695705, 577947763, -617615296, 293051155, 724788245, -364060214,
 | 
			
		||||
  583363084, -1010701292, 460304674, 925154455, -439046908, 583363084, -610497723, 288819761, 732056685, -368902865,
 | 
			
		||||
  387379495, -506912469, 196933274, 840112184, -347208270, 387379495, 506912469, 196933274, -840112184, -347208270,
 | 
			
		||||
  401658082, -532275898, 207149427, 833765363, -343175316, 401658082, 532275898, 207149427, -833765363, -343175316,
 | 
			
		||||
  416472483, -558722695, 217902617, 827270154, -339107319, 416472483, 558722695, 217902617, -827270154, -339107319,
 | 
			
		||||
  431841949, -586290861, 229212798, 820624988, -335007540, 431841949, 586290861, 229212798, -820624988, -335007540,
 | 
			
		||||
  447786335, -615019650, 241100489, 813828443, -330879528, 447786335, 615019650, 241100489, -813828443, -330879528,
 | 
			
		||||
  464326111, -644949597, 253586805, 806879270, -326727141, 464326111, 644949597, 253586805, -806879270, -326727141,
 | 
			
		||||
  481482377, -676122557, 266693475, 799776409, -322554559, 481482377, 676122557, 266693475, -799776409, -322554559,
 | 
			
		||||
  499276882, -708581728, 280442865, 792519013, -318366296, 499276882, 708581728, 280442865, -792519013, -318366296,
 | 
			
		||||
  517732032, -742371685, 294857996, 785106465, -314167221, 517732032, 742371685, 294857996, -785106465, -314167221,
 | 
			
		||||
  536870912, -777538408, 309962566, 777538408, -309962566, 536870912, 777538408, 309962566, -777538408, -309962566,
 | 
			
		||||
  556717294, -814129313, 325780968, 769814766, -305757943, 556717294, 814129313, 325780968, -769814766, -305757943,
 | 
			
		||||
  577295658, -852193284, 342338310, 761935777, -301559360, 577295658, 852193284, 342338310, -761935777, -301559360,
 | 
			
		||||
  598631206, -891780698, 359660433, 753902014, -297373230, 598631206, 891780698, 359660433, -753902014, -297373230,
 | 
			
		||||
  620749877, -932943463, 377773927, 745714425, -293206383, 620749877, 932943463, 377773927, -745714425, -293206383,
 | 
			
		||||
  643678365, -975735041, 396706151, 737374355, -289066077, 643678365, 975735041, 396706151, -737374355, -289066077,
 | 
			
		||||
  667444134, -1020210487, 416485252, 728883588, -284960004, 667444134, 1020210487, 416485252, -728883588, -284960004,
 | 
			
		||||
  692075438, -1066426476, 437140179, 720244375, -280896294, 692075438, 1066426476, 437140179, -720244375, -280896294,
 | 
			
		||||
  717601336, -1114441339, 458700704, 711459472, -276883515, 717601336, 1114441339, 458700704, -711459472, -276883515,
 | 
			
		||||
  744051710, -1164315096, 481197437, 702532174, -272930673, 744051710, 1164315096, 481197437, -702532174, -272930673
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* ----------------------------------------------------------------------
 | 
			
		||||
** Desired gains, in dB, per band
 | 
			
		||||
** ------------------------------------------------------------------- */
 | 
			
		||||
 | 
			
		||||
int gainDB[5] = {0, -3, 6, 4, -6};
 | 
			
		||||
 | 
			
		||||
float32_t snr;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* ----------------------------------------------------------------------
 | 
			
		||||
 * Graphic equalizer Example
 | 
			
		||||
 * ------------------------------------------------------------------- */
 | 
			
		||||
 | 
			
		||||
int32_t main(void)
 | 
			
		||||
{
 | 
			
		||||
  float32_t  *inputF32, *outputF32;
 | 
			
		||||
  arm_biquad_cas_df1_32x64_ins_q31 S1;
 | 
			
		||||
  arm_biquad_cas_df1_32x64_ins_q31 S2;
 | 
			
		||||
  arm_biquad_casd_df1_inst_q31 S3;
 | 
			
		||||
  arm_biquad_casd_df1_inst_q31 S4;
 | 
			
		||||
  arm_biquad_casd_df1_inst_q31 S5;
 | 
			
		||||
  int i;
 | 
			
		||||
  int32_t status;
 | 
			
		||||
 | 
			
		||||
  inputF32 = &testInput_f32[0];
 | 
			
		||||
  outputF32 = &testOutput[0];
 | 
			
		||||
 | 
			
		||||
  /* Initialize the state and coefficient buffers for all Biquad sections */
 | 
			
		||||
 | 
			
		||||
  arm_biquad_cas_df1_32x64_init_q31(&S1, NUMSTAGES,
 | 
			
		||||
            (q31_t *) &coeffTable[190*0 + 10*(gainDB[0] + 9)],
 | 
			
		||||
            &biquadStateBand1Q31[0], 2);
 | 
			
		||||
 | 
			
		||||
  arm_biquad_cas_df1_32x64_init_q31(&S2, NUMSTAGES,
 | 
			
		||||
            (q31_t *) &coeffTable[190*1 + 10*(gainDB[1] + 9)],
 | 
			
		||||
            &biquadStateBand2Q31[0], 2);
 | 
			
		||||
 | 
			
		||||
  arm_biquad_cascade_df1_init_q31(&S3, NUMSTAGES,
 | 
			
		||||
          (q31_t *) &coeffTable[190*2 + 10*(gainDB[2] + 9)],
 | 
			
		||||
          &biquadStateBand3Q31[0], 2);
 | 
			
		||||
 | 
			
		||||
  arm_biquad_cascade_df1_init_q31(&S4, NUMSTAGES,
 | 
			
		||||
          (q31_t *) &coeffTable[190*3 + 10*(gainDB[3] + 9)],
 | 
			
		||||
          &biquadStateBand4Q31[0], 2);
 | 
			
		||||
 | 
			
		||||
  arm_biquad_cascade_df1_init_q31(&S5, NUMSTAGES,
 | 
			
		||||
          (q31_t *) &coeffTable[190*4 + 10*(gainDB[4] + 9)],
 | 
			
		||||
          &biquadStateBand5Q31[0], 2);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  /* Call the process functions and needs to change filter coefficients
 | 
			
		||||
     for varying the gain of each band */
 | 
			
		||||
 | 
			
		||||
  for(i=0; i < NUMBLOCKS; i++)
 | 
			
		||||
  {
 | 
			
		||||
 | 
			
		||||
    /* ----------------------------------------------------------------------
 | 
			
		||||
    ** Convert block of input data from float to Q31
 | 
			
		||||
    ** ------------------------------------------------------------------- */
 | 
			
		||||
 | 
			
		||||
    arm_float_to_q31(inputF32 + (i*BLOCKSIZE), inputQ31, BLOCKSIZE);
 | 
			
		||||
 | 
			
		||||
    /* ----------------------------------------------------------------------
 | 
			
		||||
    ** Scale down by 1/8.  This provides additional headroom so that the
 | 
			
		||||
    ** graphic EQ can apply gain.
 | 
			
		||||
    ** ------------------------------------------------------------------- */
 | 
			
		||||
 | 
			
		||||
    arm_scale_q31(inputQ31, 0x7FFFFFFF, -3, inputQ31, BLOCKSIZE);
 | 
			
		||||
 | 
			
		||||
    /* ----------------------------------------------------------------------
 | 
			
		||||
    ** Call the Q31 Biquad Cascade DF1 32x64 process function for band1, band2
 | 
			
		||||
    ** ------------------------------------------------------------------- */
 | 
			
		||||
 | 
			
		||||
    arm_biquad_cas_df1_32x64_q31(&S1, inputQ31, outputQ31, BLOCKSIZE);
 | 
			
		||||
    arm_biquad_cas_df1_32x64_q31(&S2, outputQ31, outputQ31, BLOCKSIZE);
 | 
			
		||||
 | 
			
		||||
    /* ----------------------------------------------------------------------
 | 
			
		||||
    ** Call the Q31 Biquad Cascade DF1 process function for band3, band4, band5
 | 
			
		||||
    ** ------------------------------------------------------------------- */
 | 
			
		||||
 | 
			
		||||
    arm_biquad_cascade_df1_q31(&S3, outputQ31, outputQ31, BLOCKSIZE);
 | 
			
		||||
    arm_biquad_cascade_df1_q31(&S4, outputQ31, outputQ31, BLOCKSIZE);
 | 
			
		||||
    arm_biquad_cascade_df1_q31(&S5, outputQ31, outputQ31, BLOCKSIZE);
 | 
			
		||||
 | 
			
		||||
    /* ----------------------------------------------------------------------
 | 
			
		||||
    ** Convert Q31 result back to float
 | 
			
		||||
    ** ------------------------------------------------------------------- */
 | 
			
		||||
 | 
			
		||||
    arm_q31_to_float(outputQ31, outputF32 + (i * BLOCKSIZE), BLOCKSIZE);
 | 
			
		||||
 | 
			
		||||
    /* ----------------------------------------------------------------------
 | 
			
		||||
    ** Scale back up
 | 
			
		||||
    ** ------------------------------------------------------------------- */
 | 
			
		||||
 | 
			
		||||
    arm_scale_f32(outputF32 + (i * BLOCKSIZE), 8.0f, outputF32 + (i * BLOCKSIZE), BLOCKSIZE);
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  snr = arm_snr_f32(testRefOutput_f32, testOutput, TESTLENGTH);
 | 
			
		||||
 | 
			
		||||
  if (snr < SNR_THRESHOLD_F32)
 | 
			
		||||
  {
 | 
			
		||||
    status = ARM_MATH_TEST_FAILURE;
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    status = ARM_MATH_SUCCESS;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* ----------------------------------------------------------------------
 | 
			
		||||
  ** Loop here if the signal does not match the reference output.
 | 
			
		||||
  ** ------------------------------------------------------------------- */
 | 
			
		||||
 | 
			
		||||
  if ( status != ARM_MATH_SUCCESS)
 | 
			
		||||
  {
 | 
			
		||||
    while (1);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  while (1);                             /* main function does not return */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** \endlink */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,466 @@
 | 
			
		||||
/* ----------------------------------------------------------------------
 | 
			
		||||
* Copyright (C) 2010-2012 ARM Limited. All rights reserved.
 | 
			
		||||
*
 | 
			
		||||
* $Date:        17. January 2013
 | 
			
		||||
* $Revision: 	V1.4.0  b
 | 
			
		||||
*
 | 
			
		||||
* Project: 	    CMSIS DSP Library
 | 
			
		||||
*
 | 
			
		||||
* Title:	    math_helper.c
 | 
			
		||||
*
 | 
			
		||||
* Description:	Definition of all helper functions required.
 | 
			
		||||
*
 | 
			
		||||
* Target Processor: Cortex-M4/Cortex-M3
 | 
			
		||||
*
 | 
			
		||||
* Redistribution and use in source and binary forms, with or without
 | 
			
		||||
* modification, are permitted provided that the following conditions
 | 
			
		||||
* are met:
 | 
			
		||||
*   - Redistributions of source code must retain the above copyright
 | 
			
		||||
*     notice, this list of conditions and the following disclaimer.
 | 
			
		||||
*   - Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
*     notice, this list of conditions and the following disclaimer in
 | 
			
		||||
*     the documentation and/or other materials provided with the
 | 
			
		||||
*     distribution.
 | 
			
		||||
*   - Neither the name of ARM LIMITED nor the names of its contributors
 | 
			
		||||
*     may be used to endorse or promote products derived from this
 | 
			
		||||
*     software without specific prior written permission.
 | 
			
		||||
*
 | 
			
		||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 | 
			
		||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 | 
			
		||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 | 
			
		||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 | 
			
		||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
			
		||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | 
			
		||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
 | 
			
		||||
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 | 
			
		||||
* POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
* -------------------------------------------------------------------- */
 | 
			
		||||
 | 
			
		||||
/* ----------------------------------------------------------------------
 | 
			
		||||
*		Include standard header files
 | 
			
		||||
* -------------------------------------------------------------------- */
 | 
			
		||||
#include<math.h>
 | 
			
		||||
 | 
			
		||||
/* ----------------------------------------------------------------------
 | 
			
		||||
*		Include project header files
 | 
			
		||||
* -------------------------------------------------------------------- */
 | 
			
		||||
#include "math_helper.h"
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief  Caluclation of SNR
 | 
			
		||||
 * @param[in]  pRef 	Pointer to the reference buffer
 | 
			
		||||
 * @param[in]  pTest	Pointer to the test buffer
 | 
			
		||||
 * @param[in]  buffSize	total number of samples
 | 
			
		||||
 * @return     SNR
 | 
			
		||||
 * The function Caluclates signal to noise ratio for the reference output
 | 
			
		||||
 * and test output
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
float arm_snr_f32(float *pRef, float *pTest, uint32_t buffSize)
 | 
			
		||||
{
 | 
			
		||||
  float EnergySignal = 0.0, EnergyError = 0.0;
 | 
			
		||||
  uint32_t i;
 | 
			
		||||
  float SNR;
 | 
			
		||||
  int temp;
 | 
			
		||||
  int *test;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < buffSize; i++)
 | 
			
		||||
    {
 | 
			
		||||
 	  /* Checking for a NAN value in pRef array */
 | 
			
		||||
	  test =   (int *)(&pRef[i]);
 | 
			
		||||
      temp =  *test;
 | 
			
		||||
 | 
			
		||||
	  if (temp == 0x7FC00000)
 | 
			
		||||
	  {
 | 
			
		||||
	  		return(0);
 | 
			
		||||
	  }
 | 
			
		||||
 | 
			
		||||
	  /* Checking for a NAN value in pTest array */
 | 
			
		||||
	  test =   (int *)(&pTest[i]);
 | 
			
		||||
      temp =  *test;
 | 
			
		||||
 | 
			
		||||
	  if (temp == 0x7FC00000)
 | 
			
		||||
	  {
 | 
			
		||||
	  		return(0);
 | 
			
		||||
	  }
 | 
			
		||||
      EnergySignal += pRef[i] * pRef[i];
 | 
			
		||||
      EnergyError += (pRef[i] - pTest[i]) * (pRef[i] - pTest[i]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	/* Checking for a NAN value in EnergyError */
 | 
			
		||||
	test =   (int *)(&EnergyError);
 | 
			
		||||
    temp =  *test;
 | 
			
		||||
 | 
			
		||||
    if (temp == 0x7FC00000)
 | 
			
		||||
    {
 | 
			
		||||
  		return(0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  SNR = 10 * log10 (EnergySignal / EnergyError);
 | 
			
		||||
 | 
			
		||||
  return (SNR);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief  Provide guard bits for Input buffer
 | 
			
		||||
 * @param[in,out]  input_buf   Pointer to input buffer
 | 
			
		||||
 * @param[in]       blockSize  block Size
 | 
			
		||||
 * @param[in]       guard_bits guard bits
 | 
			
		||||
 * @return none
 | 
			
		||||
 * The function Provides the guard bits for the buffer
 | 
			
		||||
 * to avoid overflow
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
void arm_provide_guard_bits_q15 (q15_t * input_buf, uint32_t blockSize,
 | 
			
		||||
                            uint32_t guard_bits)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t i;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < blockSize; i++)
 | 
			
		||||
    {
 | 
			
		||||
      input_buf[i] = input_buf[i] >> guard_bits;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief  Converts float to fixed in q12.20 format
 | 
			
		||||
 * @param[in]  pIn         pointer to input buffer
 | 
			
		||||
 * @param[out] pOut        pointer to outputbuffer
 | 
			
		||||
 * @param[in]  numSamples  number of samples in the input buffer
 | 
			
		||||
 * @return none
 | 
			
		||||
 * The function converts floating point values to fixed point(q12.20) values
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
void arm_float_to_q12_20(float *pIn, q31_t * pOut, uint32_t numSamples)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t i;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < numSamples; i++)
 | 
			
		||||
    {
 | 
			
		||||
	  /* 1048576.0f corresponds to pow(2, 20) */
 | 
			
		||||
      pOut[i] = (q31_t) (pIn[i] * 1048576.0f);
 | 
			
		||||
 | 
			
		||||
      pOut[i] += pIn[i] > 0 ? 0.5 : -0.5;
 | 
			
		||||
 | 
			
		||||
      if (pIn[i] == (float) 1.0)
 | 
			
		||||
        {
 | 
			
		||||
          pOut[i] = 0x000FFFFF;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief  Compare MATLAB Reference Output and ARM Test output
 | 
			
		||||
 * @param[in]  pIn         Pointer to Ref buffer
 | 
			
		||||
 * @param[in]  pOut        Pointer to Test buffer
 | 
			
		||||
 * @param[in]  numSamples  number of samples in the buffer
 | 
			
		||||
 * @return maximum difference
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
uint32_t arm_compare_fixed_q15(q15_t *pIn, q15_t *pOut, uint32_t numSamples)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t i;
 | 
			
		||||
  int32_t diff, diffCrnt = 0;
 | 
			
		||||
  uint32_t maxDiff = 0;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < numSamples; i++)
 | 
			
		||||
  {
 | 
			
		||||
  	diff = pIn[i] - pOut[i];
 | 
			
		||||
  	diffCrnt = (diff > 0) ? diff : -diff;
 | 
			
		||||
 | 
			
		||||
	if (diffCrnt > maxDiff)
 | 
			
		||||
	{
 | 
			
		||||
		maxDiff = diffCrnt;
 | 
			
		||||
	}
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return(maxDiff);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief  Compare MATLAB Reference Output and ARM Test output
 | 
			
		||||
 * @param[in]  pIn         Pointer to Ref buffer
 | 
			
		||||
 * @param[in]  pOut        Pointer to Test buffer
 | 
			
		||||
 * @param[in]  numSamples number of samples in the buffer
 | 
			
		||||
 * @return maximum difference
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
uint32_t arm_compare_fixed_q31(q31_t *pIn, q31_t * pOut, uint32_t numSamples)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t i;
 | 
			
		||||
  int32_t diff, diffCrnt = 0;
 | 
			
		||||
  uint32_t maxDiff = 0;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < numSamples; i++)
 | 
			
		||||
  {
 | 
			
		||||
  	diff = pIn[i] - pOut[i];
 | 
			
		||||
  	diffCrnt = (diff > 0) ? diff : -diff;
 | 
			
		||||
 | 
			
		||||
	if (diffCrnt > maxDiff)
 | 
			
		||||
	{
 | 
			
		||||
		maxDiff = diffCrnt;
 | 
			
		||||
	}
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return(maxDiff);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief  Provide guard bits for Input buffer
 | 
			
		||||
 * @param[in,out]  input_buf   Pointer to input buffer
 | 
			
		||||
 * @param[in]       blockSize  block Size
 | 
			
		||||
 * @param[in]       guard_bits guard bits
 | 
			
		||||
 * @return none
 | 
			
		||||
 * The function Provides the guard bits for the buffer
 | 
			
		||||
 * to avoid overflow
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
void arm_provide_guard_bits_q31 (q31_t * input_buf,
 | 
			
		||||
								 uint32_t blockSize,
 | 
			
		||||
                                 uint32_t guard_bits)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t i;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < blockSize; i++)
 | 
			
		||||
    {
 | 
			
		||||
      input_buf[i] = input_buf[i] >> guard_bits;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief  Provide guard bits for Input buffer
 | 
			
		||||
 * @param[in,out]  input_buf   Pointer to input buffer
 | 
			
		||||
 * @param[in]       blockSize  block Size
 | 
			
		||||
 * @param[in]       guard_bits guard bits
 | 
			
		||||
 * @return none
 | 
			
		||||
 * The function Provides the guard bits for the buffer
 | 
			
		||||
 * to avoid overflow
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
void arm_provide_guard_bits_q7 (q7_t * input_buf,
 | 
			
		||||
								uint32_t blockSize,
 | 
			
		||||
                                uint32_t guard_bits)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t i;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < blockSize; i++)
 | 
			
		||||
    {
 | 
			
		||||
      input_buf[i] = input_buf[i] >> guard_bits;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief  Caluclates number of guard bits
 | 
			
		||||
 * @param[in]  num_adds 	number of additions
 | 
			
		||||
 * @return guard bits
 | 
			
		||||
 * The function Caluclates the number of guard bits
 | 
			
		||||
 * depending on the numtaps
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
uint32_t arm_calc_guard_bits (uint32_t num_adds)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t i = 1, j = 0;
 | 
			
		||||
 | 
			
		||||
  if (num_adds == 1)
 | 
			
		||||
    {
 | 
			
		||||
      return (0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  while (i < num_adds)
 | 
			
		||||
    {
 | 
			
		||||
      i = i * 2;
 | 
			
		||||
      j++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  return (j);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief  Apply guard bits to buffer
 | 
			
		||||
 * @param[in,out]  pIn         pointer to input buffer
 | 
			
		||||
 * @param[in]      numSamples  number of samples in the input buffer
 | 
			
		||||
 * @param[in]      guard_bits  guard bits
 | 
			
		||||
 * @return none
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
void arm_apply_guard_bits (float32_t *pIn,
 | 
			
		||||
						   uint32_t numSamples,
 | 
			
		||||
						   uint32_t guard_bits)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t i;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < numSamples; i++)
 | 
			
		||||
    {
 | 
			
		||||
      pIn[i] = pIn[i] * arm_calc_2pow(guard_bits);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief  Calculates pow(2, numShifts)
 | 
			
		||||
 * @param[in]  numShifts 	number of shifts
 | 
			
		||||
 * @return pow(2, numShifts)
 | 
			
		||||
 */
 | 
			
		||||
uint32_t arm_calc_2pow(uint32_t numShifts)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
  uint32_t i, val = 1;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < numShifts; i++)
 | 
			
		||||
    {
 | 
			
		||||
      val = val * 2;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  return(val);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief  Converts float to fixed q14
 | 
			
		||||
 * @param[in]  pIn         pointer to input buffer
 | 
			
		||||
 * @param[out] pOut        pointer to output buffer
 | 
			
		||||
 * @param[in]  numSamples  number of samples in the buffer
 | 
			
		||||
 * @return none
 | 
			
		||||
 * The function converts floating point values to fixed point values
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
void arm_float_to_q14 (float *pIn, q15_t *pOut, uint32_t numSamples)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t i;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < numSamples; i++)
 | 
			
		||||
    {
 | 
			
		||||
	  /* 16384.0f corresponds to pow(2, 14) */
 | 
			
		||||
      pOut[i] = (q15_t) (pIn[i] * 16384.0f);
 | 
			
		||||
 | 
			
		||||
      pOut[i] += pIn[i] > 0 ? 0.5 : -0.5;
 | 
			
		||||
 | 
			
		||||
      if (pIn[i] == (float) 2.0)
 | 
			
		||||
        {
 | 
			
		||||
          pOut[i] = 0x7FFF;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief  Converts float to fixed q30 format
 | 
			
		||||
 * @param[in]  pIn         pointer to input buffer
 | 
			
		||||
 * @param[out] pOut        pointer to output buffer
 | 
			
		||||
 * @param[in]  numSamples  number of samples in the buffer
 | 
			
		||||
 * @return none
 | 
			
		||||
 * The function converts floating point values to fixed point values
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
void arm_float_to_q30 (float *pIn, q31_t * pOut, uint32_t numSamples)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t i;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < numSamples; i++)
 | 
			
		||||
    {
 | 
			
		||||
	  /* 1073741824.0f corresponds to pow(2, 30) */
 | 
			
		||||
      pOut[i] = (q31_t) (pIn[i] * 1073741824.0f);
 | 
			
		||||
 | 
			
		||||
      pOut[i] += pIn[i] > 0 ? 0.5 : -0.5;
 | 
			
		||||
 | 
			
		||||
      if (pIn[i] == (float) 2.0)
 | 
			
		||||
        {
 | 
			
		||||
          pOut[i] = 0x7FFFFFFF;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief  Converts float to fixed q30 format
 | 
			
		||||
 * @param[in]  pIn         pointer to input buffer
 | 
			
		||||
 * @param[out] pOut        pointer to output buffer
 | 
			
		||||
 * @param[in]  numSamples  number of samples in the buffer
 | 
			
		||||
 * @return none
 | 
			
		||||
 * The function converts floating point values to fixed point values
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
void arm_float_to_q29 (float *pIn, q31_t *pOut, uint32_t numSamples)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t i;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < numSamples; i++)
 | 
			
		||||
    {
 | 
			
		||||
	  /* 1073741824.0f corresponds to pow(2, 30) */
 | 
			
		||||
      pOut[i] = (q31_t) (pIn[i] * 536870912.0f);
 | 
			
		||||
 | 
			
		||||
      pOut[i] += pIn[i] > 0 ? 0.5 : -0.5;
 | 
			
		||||
 | 
			
		||||
      if (pIn[i] == (float) 4.0)
 | 
			
		||||
        {
 | 
			
		||||
          pOut[i] = 0x7FFFFFFF;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief  Converts float to fixed q28 format
 | 
			
		||||
 * @param[in]  pIn         pointer to input buffer
 | 
			
		||||
 * @param[out] pOut        pointer to output buffer
 | 
			
		||||
 * @param[in]  numSamples  number of samples in the buffer
 | 
			
		||||
 * @return none
 | 
			
		||||
 * The function converts floating point values to fixed point values
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
void arm_float_to_q28 (float *pIn, q31_t *pOut, uint32_t numSamples)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t i;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < numSamples; i++)
 | 
			
		||||
    {
 | 
			
		||||
	/* 268435456.0f corresponds to pow(2, 28) */
 | 
			
		||||
      pOut[i] = (q31_t) (pIn[i] * 268435456.0f);
 | 
			
		||||
 | 
			
		||||
      pOut[i] += pIn[i] > 0 ? 0.5 : -0.5;
 | 
			
		||||
 | 
			
		||||
      if (pIn[i] == (float) 8.0)
 | 
			
		||||
        {
 | 
			
		||||
          pOut[i] = 0x7FFFFFFF;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief  Clip the float values to +/- 1
 | 
			
		||||
 * @param[in,out]  pIn           input buffer
 | 
			
		||||
 * @param[in]      numSamples    number of samples in the buffer
 | 
			
		||||
 * @return none
 | 
			
		||||
 * The function converts floating point values to fixed point values
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
void arm_clip_f32 (float *pIn, uint32_t numSamples)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t i;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < numSamples; i++)
 | 
			
		||||
    {
 | 
			
		||||
      if (pIn[i] > 1.0f)
 | 
			
		||||
	  {
 | 
			
		||||
	    pIn[i] = 1.0;
 | 
			
		||||
	  }
 | 
			
		||||
	  else if ( pIn[i] < -1.0f)
 | 
			
		||||
	  {
 | 
			
		||||
	    pIn[i] = -1.0;
 | 
			
		||||
	  }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,63 @@
 | 
			
		||||
/* ----------------------------------------------------------------------   
 | 
			
		||||
* Copyright (C) 2010-2013 ARM Limited. All rights reserved.   
 | 
			
		||||
*   
 | 
			
		||||
* $Date:        17. January 2013  
 | 
			
		||||
* $Revision: 	V1.4.0   
 | 
			
		||||
*  
 | 
			
		||||
* Project: 	    CMSIS DSP Library 
 | 
			
		||||
*
 | 
			
		||||
* Title:	    math_helper.h
 | 
			
		||||
* 
 | 
			
		||||
* Description:	Prototypes of all helper functions required.  
 | 
			
		||||
*
 | 
			
		||||
* Target Processor: Cortex-M4/Cortex-M3
 | 
			
		||||
*  
 | 
			
		||||
* Redistribution and use in source and binary forms, with or without 
 | 
			
		||||
* modification, are permitted provided that the following conditions
 | 
			
		||||
* are met:
 | 
			
		||||
*   - Redistributions of source code must retain the above copyright
 | 
			
		||||
*     notice, this list of conditions and the following disclaimer.
 | 
			
		||||
*   - Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
*     notice, this list of conditions and the following disclaimer in
 | 
			
		||||
*     the documentation and/or other materials provided with the 
 | 
			
		||||
*     distribution.
 | 
			
		||||
*   - Neither the name of ARM LIMITED nor the names of its contributors
 | 
			
		||||
*     may be used to endorse or promote products derived from this
 | 
			
		||||
*     software without specific prior written permission.
 | 
			
		||||
*
 | 
			
		||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 | 
			
		||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
 | 
			
		||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 | 
			
		||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 | 
			
		||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
			
		||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | 
			
		||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
 | 
			
		||||
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 | 
			
		||||
* POSSIBILITY OF SUCH DAMAGE.  
 | 
			
		||||
* -------------------------------------------------------------------- */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "arm_math.h"
 | 
			
		||||
 | 
			
		||||
#ifndef MATH_HELPER_H
 | 
			
		||||
#define MATH_HELPER_H
 | 
			
		||||
 | 
			
		||||
float arm_snr_f32(float *pRef, float *pTest,  uint32_t buffSize);  
 | 
			
		||||
void arm_float_to_q12_20(float *pIn, q31_t * pOut, uint32_t numSamples);
 | 
			
		||||
void arm_provide_guard_bits_q15(q15_t *input_buf, uint32_t blockSize, uint32_t guard_bits);
 | 
			
		||||
void arm_provide_guard_bits_q31(q31_t *input_buf, uint32_t blockSize, uint32_t guard_bits);
 | 
			
		||||
void arm_float_to_q14(float *pIn, q15_t *pOut, uint32_t numSamples);
 | 
			
		||||
void arm_float_to_q29(float *pIn, q31_t *pOut, uint32_t numSamples);
 | 
			
		||||
void arm_float_to_q28(float *pIn, q31_t *pOut, uint32_t numSamples);
 | 
			
		||||
void arm_float_to_q30(float *pIn, q31_t *pOut, uint32_t numSamples);
 | 
			
		||||
void arm_clip_f32(float *pIn, uint32_t numSamples);
 | 
			
		||||
uint32_t arm_calc_guard_bits(uint32_t num_adds);
 | 
			
		||||
void arm_apply_guard_bits (float32_t * pIn, uint32_t numSamples, uint32_t guard_bits);
 | 
			
		||||
uint32_t arm_compare_fixed_q15(q15_t *pIn, q15_t * pOut, uint32_t numSamples);
 | 
			
		||||
uint32_t arm_compare_fixed_q31(q31_t *pIn, q31_t *pOut, uint32_t numSamples);
 | 
			
		||||
uint32_t arm_calc_2pow(uint32_t guard_bits);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user