This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

cmsis fft example problem in keil uvision 5.15

Hello
I tried to compile and run arm_fft_bin_example of the cmsis package but there is a problem.
The problem is in the arm_bitreversal2.s file that can't be compiled by keil.
Is there any workaround and solution?
Thanks.

  • Hello
    Here is the modified and working code for cortex-m4:

                   AREA    ||.text||, CODE, READONLY, ALIGN=2
    
                   THUMB
    
    ;/*
    ;* @brief  In-place bit reversal function.
    ;* @param[in, out] *pSrc        points to the in-place buffer of unknown 32-bit data type.
    ;* @param[in]      bitRevLen    bit reversal table length
    ;* @param[in]      *pBitRevTab  points to bit reversal table.
    ;* @return none.
    ;*/
            EXPORT arm_bitreversal_32
            EXPORT arm_bitreversal_16
    
    
    
    
    arm_bitreversal_32 PROC
            ADDS     r3,r1,#1
            CMP      r3,#1
            IT       LS
            BXLS     lr
            PUSH     {r4-r9}
            ADDS     r1,r2,#2
            LSRS     r3,r3,#2
    arm_bitreversal_32_0      ;/* loop unrolled by 2 */
            LDRH     r8,[r1,#4]
            LDRH     r9,[r1,#2]
            LDRH     r2,[r1,#0]
            LDRH     r12,[r1,#-2]
            ADD      r8,r0,r8
            ADD      r9,r0,r9
            ADD      r2,r0,r2
            ADD      r12,r0,r12
            LDR      r7,[r9,#0]
            LDR      r6,[r8,#0]
            LDR      r5,[r2,#0]
            LDR      r4,[r12,#0]
            STR      r6,[r9,#0]
            STR      r7,[r8,#0]
            STR      r5,[r12,#0]
            STR      r4,[r2,#0]
            LDR      r7,[r9,#4]
            LDR      r6,[r8,#4]
            LDR      r5,[r2,#4]
            LDR      r4,[r12,#4]
            STR      r6,[r9,#4]
            STR      r7,[r8,#4]
            STR      r5,[r12,#4]
            STR      r4,[r2,#4]
            ADDS     r1,r1,#8
            SUBS     r3,r3,#1
            BNE      arm_bitreversal_32_0
            POP      {r4-r9}
            BX       lr
            ENDP
    
    arm_bitreversal_16 PROC
            ADDS     r3,r1,#1
            CMP      r3,#1
            IT       LS
            BXLS     lr
            PUSH     {r4-r9}
            ADDS     r1,r2,#2
            LSRS     r3,r3,#2
    arm_bitreversal_16_0      ;/* loop unrolled by 2 */
            LDRH     r8,[r1,#4]
            LDRH     r9,[r1,#2]
            LDRH     r2,[r1,#0]
            LDRH     r12,[r1,#-2]
            ADD      r8,r0,r8,LSR #1
            ADD      r9,r0,r9,LSR #1
            ADD      r2,r0,r2,LSR #1
            ADD      r12,r0,r12,LSR #1
            LDR      r7,[r9,#0]
            LDR      r6,[r8,#0]
            LDR      r5,[r2,#0]
            LDR      r4,[r12,#0]
            STR      r6,[r9,#0]
            STR      r7,[r8,#0]
            STR      r5,[r12,#0]
            STR      r4,[r2,#0]
            ADDS     r1,r1,#8
            SUBS     r3,r3,#1
            BNE      arm_bitreversal_16_0
            POP      {r4-r9}
            BX       lr
            ENDP
    
            END
    

  • by defining the following expression in the options for target->Asm->Misc Controls, problem will be solved.

    --cpreproc