stm32寄存器操作笔记(二)中断篇1

在这个篇章中,将介绍单片机的中断设置。首先什么叫中断呢?试想一下,你正在房间打游戏,突然门铃响了起来,你去开门之后又回来打游戏,这样一个过程就类似于中断的思想。打游戏相当里单片机中运行的主程序,去开门则对应中断程序,但啥时候才执行中断呢?这就要看到中断标志位了,就像你只会在听到门铃才回去开门,而不会每十分钟就去门口看一次是否有人在门口。

打开参考手册9.1.2的中断和异常向量这一章,这个表格整理了单片机中所有中断的位置。这个表非常重要,是我们之后开启中断必须要查询的。

1.外部中断。这里先描述外部中断。提出问题:如果我的主程序正在运行,但当我按下按键时,计数值就会增加,这里就使用到了GPIO作为外部中断,本身单片机的GPIO端口电平变化并不会产生中断,外部中断就赋予了这种功能。

这里我们可以看到,单片机将所有的0口(PA0,PB0等)接到了一个通道中,简单来说就是单片机无法分别你是PA0进来的还是PB0进来的中断,所以给GPIO的中断只有15个,从0口到15口。 

其他的多余的EXTI线 也另有安排。

然后我们来看外部中断的寄存器:

我们不仅可以开启外部中断,还可以开启外部事件。至于中断和事件更近一步的操作,由于这一节主要是将中断,所以不会介绍事件,感兴趣的朋友可以去其他帖子在详细学习。

EXIT_RTSR寄存器和EXIT_FTSR寄存器,这两个寄存器呢就是选择是上升沿触发,还是下降沿触发。

这三个寄存器就是外部中断的主要寄存器了(EXIT_IMR,EXIT_RTSR,EXIT_FTSR)当然这仅仅是将GPIO给中断化了,芯片内核是如何管理中断的呢?NVIC——嵌套向量中断控制器。

因为中断属于芯片内核,所以它的介绍请找到Cortex-M3编程手册。第四章核心外设的4.3节NVIC和4.4节SCB。直接看到ISER(中断设置使能寄存器),从名字就可以看出来这个是用来给中断使能的。从中断向量的映射表中可以看见ISER寄存器就有3个,前2个ISER控制32个中断,最后一个控制4个,总共就控制了68个中断,怎么看我们要使能的中断是哪个呢?这就和前文中的异常和中断向量表联系起来了。

从表中可以看见外部中断在表中的位置从6到10,那就是说它们统统都位于ISER[0]这个寄存器中。

之后的就相当简单了,在ISER中对应的位写1或者写0标志对中断的使能或者失能。

再完成对中断的使能之后呢,就要开始安排中断的重要性了,越紧急的中断,就应该提前处理,如何对多个中断进行分组安排呢?

中断的响应呢就分为抢占优先级和响应优先级,至于各自代表的含义这里不在叙述,响应的资料很多。为了设置优先级,我们又看到NVIC的IPR寄存器(中断优先级寄存器),通过该寄存器,我们就可以设置中断的优先级了。

每个中断优先级占据8位,文档中说只使用[7:4]进行中断优先级的安排,所以也就和前面抢占优先级和响应优先级的位数对应起来了。

最后一个相关寄存器,就是分配你是哪个组的,中断组和优先级位数是对应的,选择的组,就只能选择该组对应的优先级分配。我们看到SCB的AIRCR(应用中断和复位控制寄存器)。

阅读重要信息:该寄存器提供优先级分组控制。说明它是我们要控制的寄存器。下一段就说,为了写入寄存器,必须要写0x5FA到寄存器中。寄存器的[10:8]作用就是中断优先级分组。

这一章的内容很多,再最后缕一缕。假设我们要控制PA0进行外部中断。P0中断应该在EXTI0上,它在中断向量表中位置是6,所以直接找到ISER[0]的第6位,置1,使能该中断。之后分配该中断的优先级,我们假设它的中断分组位2组,那就是2位抢占和2位响应,所以要将SCB的AIRCR寄存器的10到8位修改成101,这样我们就获得了2位抢占和2位响应。最后就是分配抢占和响应的大小,数字越小表示越优先,在IPR对应的寄存器中操作就可以顺利开启外部中断了!

ok,这一章的理论总算是讲完了,这一部分的寄存器相当多,要搭配代码使用会更好,之后我会尽快将代码的讲解发布出来,对这一部分还不是很了解的朋友可以多看看文档,文档还是很明了的。

补:还有一些与中断相关的寄存器我没有加进来,其实在用的时候是要涉及到的,之后会补上来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值