1.知識(shí)點(diǎn)說(shuō)明:
1)中斷異常向量表中的優(yōu)先級(jí)應(yīng)該是指的中斷、異常的硬件優(yōu)先級(jí),如果兩個(gè)或更多的中斷指定了相同的優(yōu)先級(jí),則由它們的硬件優(yōu)先級(jí)來(lái)決定處理器對(duì)它們進(jìn)行處理時(shí)的順序。(源于cortex-M3技術(shù)參考手冊(cè))
2)Systick屬于內(nèi)核中斷,“handled by system handlers”,優(yōu)先級(jí)由Systemhandler priority registers (SHPRx)來(lái)設(shè)置;(摘自cortex-M3內(nèi)核編程手冊(cè))
3)timer、串口等屬于外設(shè)中斷,“handled by ISRs(Interrupt ServiceRoutines(ISRs))”優(yōu)先級(jí)由Interruptpriority registers (NVIC_IPRx)來(lái)設(shè)置;(源于cortex-M3內(nèi)核編程手冊(cè))
4)STM32有16個(gè)可編程的優(yōu)先等級(jí)(使用了4位中斷優(yōu)先級(jí)),(摘自STM3210X參考手冊(cè))。此處的4位就是“STM3210x.h”中的__NVIC_PRIO_BITS,是4);
5)Systemhandler priority registers (SHPRx)說(shuō)明:The SHPR1-SHPR3 registers set the priority level, 0 to 15 of the exceptionhandlers that have configurable priority.即代表內(nèi)核中斷優(yōu)先級(jí)可以在這16個(gè)優(yōu)先等級(jí)中選擇,那么就和外設(shè)中斷一樣,可以統(tǒng)一設(shè)定優(yōu)先等級(jí)。(摘自cortex-M3內(nèi)核編程手冊(cè))
2.分析:
有了以上知識(shí)點(diǎn)下面來(lái)分析systick的初始化,程序中對(duì)其優(yōu)先級(jí)進(jìn)行重新設(shè)定。
systick配置函數(shù)中包含中斷優(yōu)先級(jí)的設(shè)置,如下:
static __INLINE uint32_tSysTick_Config(uint32_t ticks)
{
…………
NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);
…………
}
由于__NVIC_PRIO_BITS定義為4,上式中(1<<__NVIC_PRIO_BITS)- 1)=15,所以systick的中斷優(yōu)先級(jí)是最低的。
3.問(wèn)題:
在對(duì)外設(shè)中斷優(yōu)先級(jí)設(shè)定時(shí)用此函數(shù):
如果外設(shè)設(shè)置了主次優(yōu)先級(jí),以下三種情況中任一個(gè):
那么優(yōu)先級(jí)就沒(méi)有15這一級(jí)了,該如何理解systick的優(yōu)先級(jí)呢。
答案是:
不管 PriorityGroup
高 PriorityGroup 位就是搶占優(yōu)先級(jí),低 4 - PriorityGroup
假設(shè)是下列情況:
優(yōu)先級(jí)15 == 主優(yōu)先級(jí)為1,亞優(yōu)先級(jí)為7