历史上的今天
返回首页

历史上的今天

今天是:2024年12月21日(星期六)

2018年12月21日 | STM32中断控制的流程

2018-12-21 来源:eefocus

对于 STM32 讲(还是以Timer2例),外部中断通道位置 28(35 号优先级)是给外部设备 TIME2 的,但 TIME2本身能够引起中断的中断源或事件有好多个,比如更新事件(上溢/下溢) 、输入捕获、输出匹配、DMA 申请等。所有TIME2 的中断事件都是通过一个 TIME2 的中断通道向 STM32 内核提出中断申请,那么 STM32 中如何处理和控制 TIME2 和它众多的、不同的、中断申请呢?

 

1.因为cortex_m3 内核对于每一个外部中断通道都有相应的控制字和控制位,用于单独的和总的控制该中断通道。它们包括有:

中断优先级控制字:PRI_n(前面有提到过)

中断允许设置位:在 ISER 寄存器中

中断允许清除位:在 ICER 寄存器中

中断悬挂 Pending(排队等待)位置位:在 ISPR 寄存器中(类似于置中断通道标志位)

中断悬挂 Pending(排队等待)位清除:在 ICPR 寄存器中(用于清除中断通道标志位)

正在被服务(活动)的中断(Active)标志位:在 IABR 寄存器中, (只读,可以知道当前内核正在处理哪个中断通道)

2.作为外围设备 TIME2 本身也包括更具体的,管理自己不同中断的中断控制器(位) ,它们主要是自身各个不同类型中断的允许控制位, 和各自相应的中断标志位 (STM32 的手册中有详细的说明) 。

 

理解上面两点之后,我们可以全程、全面和综合的来了解 TIME2 的中断过程,以及如何控制的。

①初始化过程

首先要设置寄存器 AIRC 中 PRIGROUP 的值, 规定系统中的抢先优先级和子优先级的个数(在 4 个 bits 中占用的位数) ;

设置 TIME2 本身的寄存器,允许相应的中断,如允许 UIE(TIME2_DIER 的第[0]位)

设置 TIME2 中断通道的抢先优先级和子优先级(IP[28],在 NVIC 寄存器组中)

设置允许 TIME2 中断通道。在 NVIC 寄存器组的 ISER 寄存器中的一位。

 

②中断响应过程

当 TIME2 的 UIE 条件成立(更新,上溢或下溢) ,硬件将 TIME2 本身寄存器中 UIE 中断标志置位,然后通过 TIME2 中断通道向内核申请中断服务。

此时内核硬件将 TIME2 中断通道的 Pending 标志置位(相当与中断通道标志置位) ,表示 TIME2 有中断申请。

如果当前有中断在处理,TIME2 的中断级别不够高,那么就保持 Pending 标志,当然用户可以在软件中通过写 ICPR 寄存器中相应的位把本次中断清除掉。

当内核有空,开始响应 TIME2 的中断,进入 TIME2 的中断服务。此时硬件将 IABR 寄存器中相应的标志位置位, 表示 TIME2 中断正在被处理。 同时硬件清除 TIME2 的 Pending 标志位。

 

③ 执行 TIME2 的中断服务程序

所有 TIME2 的中断事件, 都是在一个 TIME2 中断服务程序中完成的, 所以进入中断程序后, 中断程序需要首先判断是哪个 TIME2 的具体事件的中断, 然后转移到相应的服务代码段去。

注意不要忘了把该具体中断事件的中断标志位清除掉, 硬件是不会自动清除 TIME2 寄存器中具体的中断标志位的。

如果 TIME2 本身的中断事件多于 2 个, 那么它们服务的先后次序就由用户编写的中断服务决定了。换句话说,对于 TIME2 本身的多个中断的优先级,系统是不能设置的。所以用户在编写服务程序时,应该根据实际的情况和要求,通过软件的方式,将重要的中断优先处理掉。

当然你也可以每次中断服务只处理其中的一个,然后再次进入中断,处理下一个。

 

④中断返回

内核执行完中断服务后,便进入中断返回过程,在这个过程中需要:

硬件将 IABR 寄存器中相应的标志位清另,表示该中断处理完成如果 TIME2 本身还有中断标志位置位,表示 TIME2 还有中断在申请,则重新将 TIME2的 Pending 标志置为 1,等待再次进入 TIME2 的中断服务。

以上中断过程在《ARM Cortex-M3 权威指南》中有详细描述,并配合时序图说明,可以参考。

然后,就可以在 ST 提供的函数库的帮助下,正确的设置和使用 STM32 的中断系统了。


推荐阅读

史海拾趣

Gruner AG公司的发展小趣事
在信号处理电路中,光耦合器可以隔离噪声和干扰,确保信号的完整性和准确性。
Hoffman Engineering公司的发展小趣事

在电子行业快速发展的背景下,Hoffman Engineering也面临着诸多市场挑战。为了应对这些挑战,公司不断进行战略调整和优化。例如,在市场竞争日益激烈的情况下,Hoffman Engineering加强了品牌建设和市场推广力度,提升了品牌知名度和市场影响力。同时,公司还注重与产业链上下游企业的合作与共赢,共同推动行业的健康发展。这些战略调整和优化措施的实施,使Hoffman Engineering在激烈的市场竞争中保持了稳健的发展态势。

CoolerMaster公司的发展小趣事

林仁政跳出已有的框架,不断思考机箱的设计。他敏锐地觉察到人们对于免工具安装的主板散热片的偏好,并深知散热效果不仅仅取决于散热片和风扇,更需要考虑空气的流动情况。结合日本高水准的立体设计灵感,林仁政带领工程师挑战困难,成功设计出了一台铝制机箱。这一机箱不仅具有高度的创新性,更因其纯手工制作的特性而显得弥足珍贵,对Cooler Master的发展具有重要意义。

GCi Technologies公司的发展小趣事
确保输入电压在U2403B的工作电压范围内,通常为3.5V至12V。
福斯特半导体(Foster)公司的发展小趣事
使用定时器设置所需的充电时间。
安路科技(Anlogic)公司的发展小趣事

在发展过程中,安路科技积极寻求与产业链上下游企业的战略合作,通过技术合作、市场共享等方式,共同推动FPGA产业的发展。同时,公司也吸引了多家知名投资机构的关注,成功获得了多轮融资。这些资本的注入为安路科技的技术研发和市场拓展提供了强有力的支持。

问答坊 | AI 解惑

我的硬件之路---致初学者

小人物的心路历程《我的硬件之路》…

查看全部问答>

直流电平转换——TI解决方案

在多电平系统中,直流电平转换是很常见的事情,这直接关系到一个系统设计的成败,TI在直流电平转换上的方案还是不错的,如SN74LVC4245(3.3V~5V),SN74AVC8T245(1.2V~3.6V)等,附件是TI的相关器件的详细介绍。 …

查看全部问答>

关于LPC1343的USB_HID键盘的端点数据发送问题

我用lpc1343枚举了一个USB HID键盘设备,描述符我用的USB 键盘的,以前用过没问题的。 用end1 发送键盘数据,但是空闲时段一直发送0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00.但是按键数据又是正常的,就是表象没什么影响。不知道会不会对别的有影 ...…

查看全部问答>

上海汉的信息技术股份有限公司 --诚招嵌入式软件工程师

上海汉的信息技术股份有限公司  诚招嵌入式软件工程师 任职要求: 1.本科以上学历,计算机软件或相关专业,2年以上工作经验。 2.具有2年以上C++语言,linux或unix开发经验。 3.熟悉嵌入式开发。 4.懂日语者优先。 有意者请将简历发 ...…

查看全部问答>

关于单片机与PC机的串口通信问题。急!

单片机与PC机的串口通信时,刚开始的时候传的数据是正确的,工作一段时间,传的数据就出现错误,当向PC机传固定的一个数据时,还出现时而正确,时而错误的情形,不知道这是为什么。…

查看全部问答>

evc模拟器不能用

我装了EVC还有模型器,为什么不模拟器不能用…

查看全部问答>

iar 2.2 编译release版时出错,请教大虾们

Building configuration: gas - Release Error[e16]: Segment DATA16_Z (size: 0xb9 align: 0x1) is too long for segment definition. At least 0x38 more bytes needed. The pro××em occurred while processing the segment placement comma ...…

查看全部问答>

msp430f149控制DHT11温湿度传感器的串口程序

哪位大侠写过msp430f149控制DHT11温室读传感器的串口显示程序,我调了好久总是不能显示数据 ?不知道什么原因?高手帮忙啊,不胜感激之至!! 串口程序; #include  \"usart.h\"struct DHT_data{ unsigned char DH_H;    ...…

查看全部问答>

请打大牛们指导一下,ucos的中断处理是不是有问题?

ucos ii 的中断处理过程是这样的(直接上代码): {      OSIntEnter();     //Call ISR...     OSIntExit ();     return; } OSIntExit () { #if OS_CRITICAL_METHOD == 3&n ...…

查看全部问答>