ARM Cortex-M3 Priority

Hi there,

I am having some doubt with NVIC_EncodePriority() function.

In my case implemented priority bits are __NVIC_PRIO_BITS = 4.

If I need to implement 3 bits for preempt priority and 1 bit for sub priority, How this NVIC_EncodePriority() going to help me with this?

The below code returning 6, then 0b0110 means what is it helpful for me in any case how to use this function?

#include <stdio.h>
#include <stdint.h>
#define __NVIC_PRIO_BITS (4)

uint32_t NVIC_EncodePriority (uint32_t , uint32_t , uint32_t);
int main() {
// Write C code here
printf("%d",NVIC_EncodePriority(1,6,2));

return 0;
}

uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority)
{
uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */
uint32_t PreemptPriorityBits;
uint32_t SubPriorityBits;

PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);
SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));

return (
((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) |
((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL)))
);
}

 

0