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

Can't use float in the sourcecode?

Hello,

I don't know, why I can't use float in my timer_callback function.

If I want to use a float variable in my timer callback function, the timer stops always after one round. Although I use a periodic timer. Do anyone know, how can I resolve this problem?

  • The sourcecode is written in uVision MDK-Lite Version 5.11.1.0.

  • Using a board or processor any of us might be familiar with? Is it faulting?

  • Have you thought of initilizing the FPU ?
    In the LPC_Open library code (fpu_init.c) their is a function:

    /* Early initialization of the FPU */
    void fpuInit(void)
    {
        // from arm trm manual:
        //                ; CPACR is located at address 0xE000ED88
        //                LDR.W R0, =0xE000ED88
        //                ; Read CPACR
        //                LDR R1, [R0]
        //                ; Set bits 20-23 to enable CP10 and CP11 coprocessors
        //                ORR R1, R1, #(0xF << 20)
        //                ; Write back the modified value to the CPACR
        //                STR R1, [R0]
    
        volatile uint32_t *regCpacr = (uint32_t *) LPC_CPACR;
        volatile uint32_t *regMvfr0 = (uint32_t *) SCB_MVFR0;
        volatile uint32_t *regMvfr1 = (uint32_t *) SCB_MVFR1;
        volatile uint32_t Cpacr;
        volatile uint32_t Mvfr0;
        volatile uint32_t Mvfr1;
        char vfpPresent = 0;
    
        Mvfr0 = *regMvfr0;
        Mvfr1 = *regMvfr1;
    
        vfpPresent = ((SCB_MVFR0_RESET == Mvfr0) && (SCB_MVFR1_RESET == Mvfr1));
    
        if (vfpPresent) {
            Cpacr = *regCpacr;
            Cpacr |= (0xF << 20);
            *regCpacr = Cpacr;  // enable CP10 and CP11 for full access
        }
    
    }