看了一段时间的资料和调试,自己对于分组的理解: 1:NVIC中有个非常重要的优先级组概念:"抢占式优先级”组(简称M组)和“子优先级”组(简称S组): 在STM32F10X中根据分组的策略不同,可以有不同数量的"抢占式优先级”和“子优先级”级别(0~16个),而芯片内的每一个中断源在两个组中各占一个等级,不同中断源可以用相同的级别,等级比较的顺序为:M组--S组--向量表中的位置,如果两个中断源在M组和S组分配的等级一样,这时它们之间的中断等级高低就用它们在中断向量表中的位置作为判断依据!
情况A:只有一个中断事件发生并且在这个中断服务(ISR)执行的过程中没有其他中断发生,那么你可以忘记中断级别与分组的问题, 情况B:当两个或以上的中断同时发生时,NVIC就根据中断源在两个组里的等级进行区分谁先执行服务,比较的顺序:M组--S组--向量表中的位置!根据以上顺序依次执行各自的ISR; 情况C:当某一个中断的ISR正在执行的过程中又发生了另外一个中断事件,如果新发生中断在M组的级别高于当前中断在M组的级别,将立即发生中断切换至新的中断源的ISR,这就是"抢占式优先级”的意义,直到新中断源的ISR执行完成才能返回原中断ISR。而要是两个中断源在M组级别相同,再对S组中的级别进行比较,但不进行切换,只会发生末尾连锁,必须等原中断执行完毕才能执行新的中断ISR。 综上所述,可以知道Cortex-M3的中断控制还是非常灵活的,一些不重要的中断服务可以配置为在M组中的等级最低,在S组里灵活安排,而重要的中断可以在M组中分配较高等级(数值较小)。 |