历史上的今天
今天是:2024年08月23日(星期五)
2019年08月23日 | stm32 SCB->AIRCR 寄存器和中断优先级寄存器使用理解
2019-08-23 来源:eefocus
参考:
Cortex M3权威指南(中文).pdf
STM32F4xx中文参考手册.pdf
STM32F4开发指南-寄存器版本_V1.1.pdf
https://blog.csdn.net/rng_uzi_/article/details/90762767
记住:抢占和响应的值越小级别越高。
首先stm32的中断有240个,中断优先级分两级抢占和响应。两种级别,规则如下,需要记住
高抢占可以打断低抢占
高响应不能打断低响应(同一抢占级,处理内部的优先级)


中断7:抢占:2响应:0
中断3:抢占:2响应:1
同抢占级别,同时发生中断,响应级别的高先执行,(不是打断)
中断6:抢占:3:响应0
上面例子中的中断 3 和中断 7 都可以打断中断 6 的中断。而中断 7 和中断 3 却不可以相互
打断!
设置抢占和响应级别
SCB->AIRCR 寄存器和IP寄存器
首先两者联系,SCB->AIRCR 寄存器的10:8位bit,决定了,IP寄存器4:7bit的高四位的抢占与响应位的分配
读一读关于IP寄存器的描述,子优先级就是响应优先级


那么SCB->AIRCR 寄存器的10:8位bit怎么决定这个分配呢?
AIRCR 寄存器的10:8位,设置几位抢占,几位响应。举例如下

AIRCR寄存器8:10与IP寄存器4:7
AIRCR寄存器8:10 IP寄存器4:7
0 111 抢占:0bit,响应:4bit
1 110 抢占:1bit,响应:3bit
2 101 抢占:2bit,响应:2bit
3 100 抢占:3bit,响应:1bit
4 011 抢占:4bit,响应:0bit
怎么理解这个表呢?
AIRCR寄存器8:10是111,表示7,即ip寄存器的第四位到第七位为止是响应级(从0开始),本来就ip寄存器的4:7bit,那4,5,6,7bit,都表示响应级。
AIRCR寄存器8:10是100,表示4,ip寄存器的第四位到第四位表示响应级。即一位表示响应级
实例代码 0x05FA0000 看上面图片表D13
SCB->AIRCR = 0x05FA0000 | 0x400; // 04h=0100b 中断优先级分组 抢占:响应=3:1
那么最多就是0:15级抢占,就是15个中断可相互打断,即011,没有响应级 ,4组
如果全是响应,那么哪个高,那个先发生,先执行哪个。即111,第七位以内都是响应级,4:7bit都表示,0组
举例:这是正点原子外部中断实验的优先级设置代码,两位的优先级,4,5,即101,第五位以内都是响应级
MY_NVIC_Init(3,2,EXTI2_IRQn,2); //抢占3,子优先级2,组2
MY_NVIC_Init(2,2,EXTI3_IRQn,2); //抢占2,子优先级2,组2
MY_NVIC_Init(1,2,EXTI4_IRQn,2); //抢占1,子优先级2,组2
MY_NVIC_Init(0,2,EXTI0_IRQn,2); //抢占0,子优先级2,组2
这里设置为组2,即:AIRCR寄存器的8:10bit,101。则IP寄存器4:7bit,第6,7bit为设置抢占优先级,4,5bit设置响应优先级
那么就是,4级抢断,4种响应。所以所有中断的级别都没有超过2^2=4。只有0,1,2,3级。
应用:
SCB->AIRCR = 0x05FA0000 | 0x400; //中断优先级分组 抢占:响应=3:1
8,9,10bit,为100,ip寄存器高四位的4位是响应,5,6,7位是抢占
ip寄存器,8bit寄存器,只用了高四位,111抢占,1响应。
2^3=8级抢断,2级响应
NVIC->IP[39] = 0xf0; //最低抢占优先级,最低响应优先级1111
39号中断,最高级中断,没有中断的能打断。
参考手册表49,查相应中断的位置。
NVIC->ISER[1] |= (1<<(39-32)); //使能中断线39,也就是usart3中断

256个中断,每个ISER,32位寄存器,控制32个中断。需要8个ISER,即ISER[8]寄存器组。
39号中断,在ISER[1],32,33,34,335,36,37,38,39。第七位置一
39-32=7
史海拾趣
|
《ARM Linux入门与实践》一书当中,关于触摸屏的那一节有几个地方不理解。 该程序的说明是:“代码并没有使用S3C2410A中的触摸屏控制器,而是通过直接控制FPIO的4个晶体管的导通和截止” P220: void Wait_Touch(void) { XMON_O ...… 查看全部问答> |
|
如何调试呢?平台已经有人做了,我需要在上面做应用程序,请问能用vc6写吗?是不是编译成release版本直接下进去呢?还是可以编译成debug然后调试呢? … 查看全部问答> |
|
请问能否仅通过430的串口往里面烧写程序? 谢谢! 搜了一下,有很多卖BSL的,除了需要TXD、RXD外,还需要一些别的脚。 有没有这么一种软件?当430的串口与计算机串口通过MAX232之类的芯片一接,在电脑上运行这个软件,直接就把程序烧进去了。… 查看全部问答> |
|
是这样的,我是用串行方式写的代码,上电后发现显示中文字符会乱码。英文和数字则显示正常,不知道怎么回事 [ 本帖最后由 冷板凳 于 2012-9-25 15:50 编辑 ]… 查看全部问答> |
|
【晒心得】TI EZ430-CHRONOS-433 无线手表 昨天收到手表,今天戴了一整天,现在说说我的体验心得。(写的比较乱,跟大家交流分享) 这么大一个联邦快递,同事都说这个快递费都要好贵,再加上整个套件不单单只有一个手表,还有个MSP-eZ430仿真器(该仿真器只支持二线仿真)和 ...… 查看全部问答> |
|
在PCB里面静电是有的,不过很少会伤到PCB,跟做PCB的附产业贴片不一样。电子原计件就非常注重这一块。 主要采取的方法有,一:配戴防静电手套。 &n ...… 查看全部问答> |




