LPC54608 freertos confusion about number of bits for interruption register: 3 or 4?

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

LPC54608 freertos confusion about number of bits for interruption register: 3 or 4?

840 Views
AntoineB
Contributor I

I use freertos dowloaded from  NXP SDK_2_12_0_LPC54608J512 downloaded on NXP official website to build sdk : https://mcuxpresso.nxp.com/en/welcome

When I use default values with my application I have the following assert stop:

            #ifdef configPRIO_BITS

                {

                    /* Check the FreeRTOS configuration that defines the number of

                     * priority bits matches the number of priority bits actually queried

                     * from the hardware. */

                    configASSERT( ( portMAX_PRIGROUP_BITS - ulMaxPRIGROUPValue ) == configPRIO_BITS );

}

Assert stops because : 7- 4 = 4, normally I should have 7-4 = 3 (I guess).

 

I found that there is 2 definitions possible for configPRIO_BITS:

#ifdef __NVIC_PRIO_BITS

/* __BVIC_PRIO_BITS will be specified when CMSIS is being used. */

#define configPRIO_BITS __NVIC_PRIO_BITS

#else

#define configPRIO_BITS 4 /* 15 priority levels */

#endif

So I am confused, is it normally 3 or 4 for my micro LPC54608J512? I imagine it is 4, but why on the new version of FreeRTOS they have create this new assert that blocking my code. I am obliged to comment this assert in freertos to being able to execute my code…

 

I tried to set the other configuration 3 bits:

When I force 3 bits, I have another assert blocking  :

/* Is the interrupt number a user defined interrupt? */

        if( ulCurrentInterrupt >= portFIRST_USER_INTERRUPT_NUMBER )

        {

            /* Look up the interrupt's priority. */

            ucCurrentPriority = pcInterruptPriorityRegisters[ ulCurrentInterrupt ];

 

            /* The following assertion will fail if a service routine (ISR) for

             * an interrupt that has been assigned a priority above

             * configMAX_SYSCALL_INTERRUPT_PRIORITY calls an ISR safe FreeRTOS API

             * function.  ISR safe FreeRTOS API functions must *only* be called

             * from interrupts that have been assigned a priority at or below

             * configMAX_SYSCALL_INTERRUPT_PRIORITY.

             *

             * Numerically low interrupt priority numbers represent logically high

             * interrupt priorities, therefore the priority of the interrupt must

             * be set to a value equal to or numerically *higher* than

             * configMAX_SYSCALL_INTERRUPT_PRIORITY.

             *

             * Interrupts that         use the FreeRTOS API must not be left at their

             * default priority of     zero as that is the highest possible priority,

             * which is guaranteed to be above configMAX_SYSCALL_INTERRUPT_PRIORITY,

             * and  therefore also guaranteed to be invalid.

             *

             * FreeRTOS maintains separate thread and ISR API functions to ensure

             * interrupt entry is as fast and simple as possible.

             *

             * The following links provide detailed information:

             * https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html

             * https://www.FreeRTOS.org/FAQHelp.html */

            configASSERT( ucCurrentPriority >= ucMaxSysCallPriority );

        }

Labels (1)
0 Kudos
Reply
0 Replies