重点写在前面:中断的分组问题、优先级——抢占优先级用来打断别人,响应优先级和硬件优先级用来比别人先执行、外部中断的配置
目录
一. 几个小概念
1.1 异常和中断
异常一般是指内核发生的事件而产生的中断,而中断一般针对的是外设
1.2 NVIC(嵌套向量中断控制器)
属于内核的一个外设,在Cortex-M3内核编程手册中有专门针对NVIC的讲解
1.3 产生中断或事件
产生中断,即将输入信号输入到NVIC,由NVIC来调用中断服务函数,属于用软件来完成中断所需产生的结果
而产生事件,是用来产生一个脉冲信号,从而给其他外设使用,例如作为ADC、定时器TIM的触发信号,属于硬件直接产生
二. 异常和中断清单
2.1异常清单
2.2 中断清单
可以根据表格查到其默认的优先级,优先级数字越小的优先级越高
三. NVIC
3.1 优先级的定义
优先级分为主优先级(抢占优先级)和子优先级,每一个中断都有属于他自己的一个优先级寄存器NVIC_IPRx,每个优先级寄存器为8位,但是在stm32f103中,只用了高四位,此外,每四个寄存器拼成一个32位寄存器
四位有效位共同构成了主优先级和子优先级,同时其分组由内核外设SCB的应用程序中断及复位控制寄存器AIRCR的PRIGROUP[10:8]三个位来决定。
PRIGROUP[10:8]三个位能共同表达五组优先级分组,然后根据各个分组可以用不同位数来表示成各个主次优先级。比如,当PRIGROUP[10:8]为100时,可以用优先级寄存器的5、6、7三个位来表示主优先级,用第4位表示子优先级。注意:该寄存器只有一个,所以在一个程序中,只能设定一个分组(个人理解,有空的话做个小实验试试),然后再设置主次优先级,当发生多个中断时(补充!!!这里指的是同时发生多个中断!!!),先比主优先级,再比子优先级,最后时硬件默认优先级。但是需要注意!!!!!再次强调!!!这种情况是在同时发生时的!!!!当多个中断不是在同时发生的,属于中断嵌套时,只有主优先级高的才能打断别人,子优先级和硬件默认优先级就不管用了!!!一开始没注意到这个,在最后的实验中才发现,好在做了实验。。
实际上主优先级和子优先级是这个意思:一个为抢占属性,另一个为响应属性,所以就是抢占优先级和子优先级。二者都是编号越小,优先级越高。其中,
抢占:指打断其他中断的能力,即在中断嵌套中打断其他中断
响应:在抢占优先级相同时,如果两个中断同时到达,先响应响应优先级高的