SlideShare ist ein Scribd-Unternehmen logo
1 von 4
Downloaden Sie, um offline zu lesen
Quantum Leaps, LLC
103 Cobble Ridge Drive
Chapel Hill, NC 27516
www.state-machine.com

Setting ARM Cortex-M Interrupt Priorities
in QP 5.1
This Application Note describes how to set the ARM Cortex-M interrupt priorities in QP™ 5.1.0 or higher.
NOTE: The interrupt disabling policy for ARM-Cortex-M3/M4 has changed in QP 5.1. Interrupts are
now disabled more selectively using the BASEPRI register, which allows to disable only interrupts
with priorities below a certain level and never disables interrupts with priorities above this level
(“zero interrupt latency”). This means that leaving the interrupt priority at the default value of zero
(the highest priority) is most likely incorrect, because the free-running interrupts cannot call any QP
services.

1

“Kernel-Aware” and “Kernel-Unaware” Interrupts
Starting from QP 5.1.0, the QP port to ARM Cortex-M3/M4 never completely disables interrupts, even
inside the critical sections. On Cortex-M3/M4 (ARMv7-M architectures), the QP port disables interrupts
selectively using the BASEPRI register. As shown in Figure 1 and Figure 2, this policy divides interrupts
into “kernel-unaware” interrupts, which are never disabled, and “kernel-aware” interrupts, which are
disabled in the QP critical sections. Only “kernel-aware” interrupts are allowed to call QP services.
“Kernel-unaware” interrupts are not allowed to call any QP services and they can communicate with QP
only by triggering a “kernel-aware” interrupt (which can post or publish events).
NOTE: The BASEPRI register is not implemented in the ARMv6-M architecture (Cortex-M0/M0+), so
Cortex-M0/M0+ need to use the PRIMASK register to disable interrupts globally. In other words, in
Cortex-M0/M0+ ports, all interrupts are “kernel-aware”.

Figure 1: Kernel-aware and kernel-unaware interrupts with 3 priority bits implemented in NVIC
Interrupt type

NVIC priority bits

Priority for CMSIS
NVIC_SetPriority()

Kernel-unaware interrupt

000 00000

0

Kernel-aware interrupt

001 00000

1 = QF_AWARE_ISR_CMSIS_PRI

Kernel-aware interrupt

010 00000

2

Kernel-aware interrupt

011 00000

3

Kernel-aware interrupt

100 00000

4

Kernel-aware interrupt

101 00000

5

Kernel-aware interrupt

110 00000

6

PendSV interrupt for QK

111 00000

7

QP-AN-120929

Copyright © Quantum Leaps, LLC. All Rights Reserved.

Never disabled

Disabled
in critical sections

Should not be used
for regular interrupts

Page 1 of 4
Quantum Leaps, LLC
103 Cobble Ridge Drive
Chapel Hill, NC 27516
www.state-machine.com

Figure 2: Kernel-aware and kernel-unaware interrupts with 4 priority bits implemented in NVIC
Interrupt type

NVIC priority bits

Priority for CMSIS
NVIC_SetPriority()

Kernel-unaware interrupt

0000 0000

0

Kernel-unaware interrupt

0001 0000

1

Kernel-unaware interrupt

0010 0000

2

Kernel-aware interrupt

0011 0000

3 = QF_AWARE_ISR_CMSIS_PRI

Kernel-aware interrupt

0100 0000

4

Kernel-aware interrupt

0101 0000

5

Kernel-aware interrupt

0110 0000

6

Kernel-aware interrupt

0111 0000

7

. . . . . . .

. .

.

.

.

. . .

Kernel-aware interrupt

1110 0000
1101 0000

12

PendSV interrupt for QK

1111 0000

15

Disabled
in critical sections

14

Kernel-aware interrupt

Never disabled

Should not be used
for regular interrupts

As illustrated in Figure 1 and Figure 2, the number of interrupt priority bits actually available is
implementation dependent, meaning that the various ARM Cortex-M silicon vendors can provide different
number of priority bits, varying from just 3 bits (which is the minimum for ARMv7-M architecture) up to 8
bits. For example, the TI Stellaris/Tiva-C microcontrollers implement only 3 priority bits (see Figure 1). On
the other hand, the STM32 MCUs implement 4 priority bits (see Figure 2). The CMSIS standard provides
the macro __NVIC_PRIO_BITS, which specifies the number of NVIC priority bits defined in a given

ARM Cortex-M implementation.
Another important fact to note is that the ARM Cortex-M core stores the interrupt priority values in the
most significant bits of its eight bit interrupt priority registers inside the NVIC (Nested Vectored Interrupt
Controller). For example, if an implementation of a ARM Cortex-M microcontroller only implements three
priority bits, then these three bits are shifted up to be bits five, six and seven respectively. The
unimplemented bits can be written as zero or one and always read as zero.
And finally, the NVIC uses an inverted priority numbering scheme for interrupts, in which priority zero
(0) is the highest possible priority (highest urgency) and larger priority numbers denote actually lowerpriority interrupts. So for example, interrupt of priority 2 can preempt an interrupt with priority 3, but
interrupt of priority 3 cannot preempt interrupt of priority 3. The default value of priority of all interrupts out
of reset is zero (0).
NOTE: Never leave the priority of any interrupt at the default value.

The CMSIS provides the function NVIC_SetPriority() which you should use to set priority of every
interrupt.
NOTE: The priority scheme passed to NVIC_SetPriority() is different again than the values
stored in the NVIC registers, as shown in Figure 1 and Figure 2 as “CMSIS priorities”

QP-AN-120929

Copyright © Quantum Leaps, LLC. All Rights Reserved.

Page 2 of 4
Quantum Leaps, LLC
103 Cobble Ridge Drive
Chapel Hill, NC 27516
www.state-machine.com

2

Assigning Interrupt Priorities
The example projects accompanying this Application Note demonstrate the recommended way of
assigning interrupt priorities in your applications. The initialization consist of two steps: (1) you enumerate
the “kernel-unaware” and “kernel-aware” interrupt priorities, and (2) you assign the priorities by calling the
NVIC_SetPriority() CMSIS function. Listing 1 illustrates these steps with the explanation section
following immediately after the code.
Listing 1: Assigning the interrupt priorities (see file bsp.c in the example projects).
/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
* Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
* DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
*/
(1) enum KernelUnawareISRs {
/* see NOTE00 */
/* ... */
(2)
MAX_KERNEL_UNAWARE_CMSIS_PRI
/* keep always last */
};
/* "kernel-unaware" interrupts can't overlap "kernel-aware" interrupts */
(3) Q_ASSERT_COMPILE(MAX_KERNEL_UNAWARE_CMSIS_PRI <= QF_AWARE_ISR_CMSIS_PRI);
(4) enum KernelAwareISRs {
(5)
GPIOPORTA_PRI = QF_AWARE_ISR_CMSIS_PRI,
/* see NOTE00 */
SYSTICK_PRIO,
/* ... */
(6)
MAX_KERNEL_AWARE_CMSIS_PRI
/* keep always last */
};
/* "kernel-aware" interrupts should not overlap the PendSV priority */
(7) Q_ASSERT_COMPILE(MAX_KERNEL_AWARE_CMSIS_PRI <= (0xFF>>(8-__NVIC_PRIO_BITS)));
~~~~~
(8) void QF_onStartup(void) {
/* set up the SysTick timer to fire at BSP_TICKS_PER_SEC rate */
SysTick_Config(ROM_SysCtlClockGet() / BSP_TICKS_PER_SEC);
/* assing all priority bits for preemption-prio. and none to sub-prio. */
NVIC_SetPriorityGrouping(0U);

(9)

(10)
(11)
(12)

}

QP-AN-120929

/* set priorities of ALL ISRs used in the system, see NOTE00
*
* !!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
* Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
* DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
*/
NVIC_SetPriority(SysTick_IRQn,
SYSTICK_PRIO);
NVIC_SetPriority(GPIOPortA_IRQn, GPIOPORTA_PRIO);
/* ... */
/* enable IRQs... */
NVIC_EnableIRQ(GPIOPortA_IRQn);

Copyright © Quantum Leaps, LLC. All Rights Reserved.

Page 3 of 4
Quantum Leaps, LLC
103 Cobble Ridge Drive
Chapel Hill, NC 27516
www.state-machine.com

(1)

The enumeration KernelUnawareISRs lists the priority numbers for the “kernel-unaware” interrupts.
These priorities start with zero (highest possible). The priorities are suitable as the argument for the
NVC_SetPriority() CMSIS function.
NOTE: The NVIC allows you to assign the same priority level to multiple interrupts, so you can have
more ISRs than priority levels running as “kernel-unaware” or “kernel-aware” interrupts.

(2)

The last value in the enumeration MAX_KERNEL_UNAWARE_CMSIS_PRI keeps track of the maximum
priority used for a “kernel-unaware” interrupt.

(3)

The compile-time assertion ensures that the “kernel-unaware” interrupt priorities do not overlap the
“kernel-aware” interrupts, which start at QF_AWARE_ISR_CMSIS_PRI.

(4)

The enumeration KernelAwareISRs lists the priority numbers for the “kernel-aware” interrupts.

(5)

The “kernel-aware” interrupt priorities start with the QF_AWARE_ISR_CMSIS_PRI offset, which is
provided in the qf_port.h header file.

(6)

The last value in the enumeration MAX_KERNEL_AWARE_CMSIS_PRI keeps track of the maximum
priority used for a “kernel-aware” interrupt.

(7)

The compile-time assertion ensures that the “kernel-aware” interrupt priorities do not overlap the
lowest priority level reserved for the PendSV exception.

(8)

The QF_onStartup() callback function is where you set up the interrupts.

(9)

This call to the CMIS function NVIC_SetPriorityGrouping() assigns all the priority bits to be
preempt priority bits, leaving no priority bits as subpriority bits to preserve the direct relationship
between the interrupt priorities and the ISR preemption rules. This is the default configuration out of
reset for the ARM Cortex-M3/M4 cores, but it can be changed by some vendor-supplied startup
code. To avoid any surprises, the call to NVIC_SetPriorityGrouping(0U) is recommended.

(10-11) The interrupt priories fall all interrupts (“kernel-unaware” and “kernel-aware” alike) are set
explicitly by calls to the CMSIS function NVIC_SetPriority().
(12) All used IRQ interrupts need to be explicitly enabled by calling the CMSIS function
NVIC_EnableIRQ().

QP-AN-120929

Copyright © Quantum Leaps, LLC. All Rights Reserved.

Page 4 of 4

Weitere ähnliche Inhalte

Kürzlich hochgeladen

IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessPixlogix Infotech
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 

Kürzlich hochgeladen (20)

IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 

Empfohlen

Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsPixeldarts
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthThinkNow
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfmarketingartwork
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Applitools
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at WorkGetSmarter
 

Empfohlen (20)

Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
 

Setting ARM Cortex-M Interrupt Priorities in QP5

  • 1. Quantum Leaps, LLC 103 Cobble Ridge Drive Chapel Hill, NC 27516 www.state-machine.com Setting ARM Cortex-M Interrupt Priorities in QP 5.1 This Application Note describes how to set the ARM Cortex-M interrupt priorities in QP™ 5.1.0 or higher. NOTE: The interrupt disabling policy for ARM-Cortex-M3/M4 has changed in QP 5.1. Interrupts are now disabled more selectively using the BASEPRI register, which allows to disable only interrupts with priorities below a certain level and never disables interrupts with priorities above this level (“zero interrupt latency”). This means that leaving the interrupt priority at the default value of zero (the highest priority) is most likely incorrect, because the free-running interrupts cannot call any QP services. 1 “Kernel-Aware” and “Kernel-Unaware” Interrupts Starting from QP 5.1.0, the QP port to ARM Cortex-M3/M4 never completely disables interrupts, even inside the critical sections. On Cortex-M3/M4 (ARMv7-M architectures), the QP port disables interrupts selectively using the BASEPRI register. As shown in Figure 1 and Figure 2, this policy divides interrupts into “kernel-unaware” interrupts, which are never disabled, and “kernel-aware” interrupts, which are disabled in the QP critical sections. Only “kernel-aware” interrupts are allowed to call QP services. “Kernel-unaware” interrupts are not allowed to call any QP services and they can communicate with QP only by triggering a “kernel-aware” interrupt (which can post or publish events). NOTE: The BASEPRI register is not implemented in the ARMv6-M architecture (Cortex-M0/M0+), so Cortex-M0/M0+ need to use the PRIMASK register to disable interrupts globally. In other words, in Cortex-M0/M0+ ports, all interrupts are “kernel-aware”. Figure 1: Kernel-aware and kernel-unaware interrupts with 3 priority bits implemented in NVIC Interrupt type NVIC priority bits Priority for CMSIS NVIC_SetPriority() Kernel-unaware interrupt 000 00000 0 Kernel-aware interrupt 001 00000 1 = QF_AWARE_ISR_CMSIS_PRI Kernel-aware interrupt 010 00000 2 Kernel-aware interrupt 011 00000 3 Kernel-aware interrupt 100 00000 4 Kernel-aware interrupt 101 00000 5 Kernel-aware interrupt 110 00000 6 PendSV interrupt for QK 111 00000 7 QP-AN-120929 Copyright © Quantum Leaps, LLC. All Rights Reserved. Never disabled Disabled in critical sections Should not be used for regular interrupts Page 1 of 4
  • 2. Quantum Leaps, LLC 103 Cobble Ridge Drive Chapel Hill, NC 27516 www.state-machine.com Figure 2: Kernel-aware and kernel-unaware interrupts with 4 priority bits implemented in NVIC Interrupt type NVIC priority bits Priority for CMSIS NVIC_SetPriority() Kernel-unaware interrupt 0000 0000 0 Kernel-unaware interrupt 0001 0000 1 Kernel-unaware interrupt 0010 0000 2 Kernel-aware interrupt 0011 0000 3 = QF_AWARE_ISR_CMSIS_PRI Kernel-aware interrupt 0100 0000 4 Kernel-aware interrupt 0101 0000 5 Kernel-aware interrupt 0110 0000 6 Kernel-aware interrupt 0111 0000 7 . . . . . . . . . . . . . . . Kernel-aware interrupt 1110 0000 1101 0000 12 PendSV interrupt for QK 1111 0000 15 Disabled in critical sections 14 Kernel-aware interrupt Never disabled Should not be used for regular interrupts As illustrated in Figure 1 and Figure 2, the number of interrupt priority bits actually available is implementation dependent, meaning that the various ARM Cortex-M silicon vendors can provide different number of priority bits, varying from just 3 bits (which is the minimum for ARMv7-M architecture) up to 8 bits. For example, the TI Stellaris/Tiva-C microcontrollers implement only 3 priority bits (see Figure 1). On the other hand, the STM32 MCUs implement 4 priority bits (see Figure 2). The CMSIS standard provides the macro __NVIC_PRIO_BITS, which specifies the number of NVIC priority bits defined in a given ARM Cortex-M implementation. Another important fact to note is that the ARM Cortex-M core stores the interrupt priority values in the most significant bits of its eight bit interrupt priority registers inside the NVIC (Nested Vectored Interrupt Controller). For example, if an implementation of a ARM Cortex-M microcontroller only implements three priority bits, then these three bits are shifted up to be bits five, six and seven respectively. The unimplemented bits can be written as zero or one and always read as zero. And finally, the NVIC uses an inverted priority numbering scheme for interrupts, in which priority zero (0) is the highest possible priority (highest urgency) and larger priority numbers denote actually lowerpriority interrupts. So for example, interrupt of priority 2 can preempt an interrupt with priority 3, but interrupt of priority 3 cannot preempt interrupt of priority 3. The default value of priority of all interrupts out of reset is zero (0). NOTE: Never leave the priority of any interrupt at the default value. The CMSIS provides the function NVIC_SetPriority() which you should use to set priority of every interrupt. NOTE: The priority scheme passed to NVIC_SetPriority() is different again than the values stored in the NVIC registers, as shown in Figure 1 and Figure 2 as “CMSIS priorities” QP-AN-120929 Copyright © Quantum Leaps, LLC. All Rights Reserved. Page 2 of 4
  • 3. Quantum Leaps, LLC 103 Cobble Ridge Drive Chapel Hill, NC 27516 www.state-machine.com 2 Assigning Interrupt Priorities The example projects accompanying this Application Note demonstrate the recommended way of assigning interrupt priorities in your applications. The initialization consist of two steps: (1) you enumerate the “kernel-unaware” and “kernel-aware” interrupt priorities, and (2) you assign the priorities by calling the NVIC_SetPriority() CMSIS function. Listing 1 illustrates these steps with the explanation section following immediately after the code. Listing 1: Assigning the interrupt priorities (see file bsp.c in the example projects). /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority(). * DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE! */ (1) enum KernelUnawareISRs { /* see NOTE00 */ /* ... */ (2) MAX_KERNEL_UNAWARE_CMSIS_PRI /* keep always last */ }; /* "kernel-unaware" interrupts can't overlap "kernel-aware" interrupts */ (3) Q_ASSERT_COMPILE(MAX_KERNEL_UNAWARE_CMSIS_PRI <= QF_AWARE_ISR_CMSIS_PRI); (4) enum KernelAwareISRs { (5) GPIOPORTA_PRI = QF_AWARE_ISR_CMSIS_PRI, /* see NOTE00 */ SYSTICK_PRIO, /* ... */ (6) MAX_KERNEL_AWARE_CMSIS_PRI /* keep always last */ }; /* "kernel-aware" interrupts should not overlap the PendSV priority */ (7) Q_ASSERT_COMPILE(MAX_KERNEL_AWARE_CMSIS_PRI <= (0xFF>>(8-__NVIC_PRIO_BITS))); ~~~~~ (8) void QF_onStartup(void) { /* set up the SysTick timer to fire at BSP_TICKS_PER_SEC rate */ SysTick_Config(ROM_SysCtlClockGet() / BSP_TICKS_PER_SEC); /* assing all priority bits for preemption-prio. and none to sub-prio. */ NVIC_SetPriorityGrouping(0U); (9) (10) (11) (12) } QP-AN-120929 /* set priorities of ALL ISRs used in the system, see NOTE00 * * !!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority(). * DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE! */ NVIC_SetPriority(SysTick_IRQn, SYSTICK_PRIO); NVIC_SetPriority(GPIOPortA_IRQn, GPIOPORTA_PRIO); /* ... */ /* enable IRQs... */ NVIC_EnableIRQ(GPIOPortA_IRQn); Copyright © Quantum Leaps, LLC. All Rights Reserved. Page 3 of 4
  • 4. Quantum Leaps, LLC 103 Cobble Ridge Drive Chapel Hill, NC 27516 www.state-machine.com (1) The enumeration KernelUnawareISRs lists the priority numbers for the “kernel-unaware” interrupts. These priorities start with zero (highest possible). The priorities are suitable as the argument for the NVC_SetPriority() CMSIS function. NOTE: The NVIC allows you to assign the same priority level to multiple interrupts, so you can have more ISRs than priority levels running as “kernel-unaware” or “kernel-aware” interrupts. (2) The last value in the enumeration MAX_KERNEL_UNAWARE_CMSIS_PRI keeps track of the maximum priority used for a “kernel-unaware” interrupt. (3) The compile-time assertion ensures that the “kernel-unaware” interrupt priorities do not overlap the “kernel-aware” interrupts, which start at QF_AWARE_ISR_CMSIS_PRI. (4) The enumeration KernelAwareISRs lists the priority numbers for the “kernel-aware” interrupts. (5) The “kernel-aware” interrupt priorities start with the QF_AWARE_ISR_CMSIS_PRI offset, which is provided in the qf_port.h header file. (6) The last value in the enumeration MAX_KERNEL_AWARE_CMSIS_PRI keeps track of the maximum priority used for a “kernel-aware” interrupt. (7) The compile-time assertion ensures that the “kernel-aware” interrupt priorities do not overlap the lowest priority level reserved for the PendSV exception. (8) The QF_onStartup() callback function is where you set up the interrupts. (9) This call to the CMIS function NVIC_SetPriorityGrouping() assigns all the priority bits to be preempt priority bits, leaving no priority bits as subpriority bits to preserve the direct relationship between the interrupt priorities and the ISR preemption rules. This is the default configuration out of reset for the ARM Cortex-M3/M4 cores, but it can be changed by some vendor-supplied startup code. To avoid any surprises, the call to NVIC_SetPriorityGrouping(0U) is recommended. (10-11) The interrupt priories fall all interrupts (“kernel-unaware” and “kernel-aware” alike) are set explicitly by calls to the CMSIS function NVIC_SetPriority(). (12) All used IRQ interrupts need to be explicitly enabled by calling the CMSIS function NVIC_EnableIRQ(). QP-AN-120929 Copyright © Quantum Leaps, LLC. All Rights Reserved. Page 4 of 4