完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
1.对于 STM32 讲,外部中断通道位置 28(35 号优先级)是给外部设备 TIME2 的,但 TIME2
本身能够引起中断的中断源或事件有好多个,比如更新事件(上溢/下溢)、输入捕获、输出 匹配、DMA 申请等。所有 TIME2 的中断事件都是通过一个 TIME2 的中断通道向 STM32 内核提 出中断申请,那么 STM32 中如何处理和控制 TIME2 和它众多的、不同的、中断申请呢? (题外话:STM32 中的一个通用定时计数器,就比 8 位控制器(如 AVR,MCS-51 就更不必说了)中 TIME 要复杂多了。学过 AVR 的,可能对输入捕获、输出匹配等还有概念,但如果你学的标准架构的 MCS-51,那 么上手 32 位可能困难就更多了。所以我一直推荐学习 8 位机应该认真的从 AVR 开始。尽管 51 有很大的市 场,价格也相对便宜,但从长远的眼光看问题,从后续掌握 32 位的使用,考虑到学生的可持续发展,AVR 应该是比较好的选择。) 2.cortex_m3 内核对于每一个外部中断通道都有相应的控制字和控制位,用于单独的和总 的控制该中断通道。它们包括有: z 中断优先级控制字:PRI_n(上面提到的) z 中断允许设置位:在 ISER 寄存器中 z 中断允许清除位:在 ICER 寄存器中 z 中断悬挂 Pending(排队等待)位置位:在 ISPR 寄存器中(类似于置中断通道标志位) z 中断悬挂 Pending(排队等待)位清除:在 ICPR 寄存器中(用于清除中断通道标志位) z 正在被服务(活动)的中断(Active)标志位:在 IABR 寄存器中,(只读,可以知道当前内核正在处理哪个中断通道) 因此,与 TIME2 中断通道相关的,在 NVIC 中有 13 个 bits,它们是 PRI_28(IP[28]), 的 8 个 bits(只用高 4 位);加上中断通道允许,中断通道清除(相当禁止中断),中断通道 Pending 置位(我的理解是中断请求发生了,但当前有其它中断服务在执行,你的中断级别 又不能打断别人,所以 Pending 等待,这个应该由硬件自动置位的),中断 Pending 位清除 (可以通过软件将本次中断请求、且尚处在 Pending 状态,取消掉),正在被服务的中断 (Active)标志位,各 1 个 bit。 上面的控制字和控制位都是分布在 NVIC 的寄存器组中的,可惜在 STM32 手册中竟然不 给出任何的解释和说明。 3.作为外围设备 TIME2 本身也包括更具体的,管理自己不同中断的中断控制器(位),它们 主要是自身各个不同类型中断的允许控制位,和各自相应的中断标志位(这个在 STM32 的手 册中有详细的说明了)。 4.在弄清楚 2、3 两点的基础上,我们可以全程、全面和综合的来了解 TIME2 的中断过程, 以及如何控制的。 a/ 初始化过程 首先要设置寄存器 AIRC 中 PRIGROUP 的值,规定系统中的抢先优先级和子优先级的个数(在 4 个 bits 中占用的位数); 设置 TIME2 本身的寄存器,允许相应的中断,如允许 UIE(TIME2_DIER 的第[0]位) 设置 TIME2 中断通道的抢先优先级和子优先级(IP[28],在 NVIC 寄存器组中) 设置允许 TIME2 中断通道。在 NVIC 寄存器组的 ISER 寄存器中的一位。 b/ 中断响应过程 当 TIME2 的 UIE 条件成立(更新,上溢或下溢),硬件将 TIME2 本身寄存器中 UIE 中断 标志置位,然后通过 TIME2 中断通道向内核申请中断服务。 此时内核硬件将 TIME2 中断通道的 Pending 标志置位(相当与中断通道标志置位),表 示 TIME2 有中断申请。 如果当前有中断在处理,TIME2 的中断级别不够高,那么就保持 Pending 标志,当然用 户可以在软件中通过写 ICPR 寄存器中相应的位把本次中断清除掉。 当内核有空,开始响应 TIME2 的中断,进入 TIME2 的中断服务。此时硬件将 IABR 寄存 器中相应的标志位置位,表示 TIME2 中断正在被处理。同时硬件清除 TIME2 的 Pending 标志位。 c/ 执行 TIME2 的中断服务程序 所有 TIME2 的中断事件,都是在一个 TIME2 中断服务程序中完成的,所以进入中断程序 后,中断程序需要首先判断是哪个 TIME2 的具体事件的中断,然后转移到相应的服务代码段去。 注意不要忘了把该具体中断事件的中断标志位清除掉,硬件是不会自动清除 TIME2 寄存 器中具体的中断标志位的。 如果 TIME2 本身的中断事件多于 2 个,那么它们服务的先后次序就由用户编写的中断服 务决定了。换句话说,对于 TIME2 本身的多个中断的优先级,系统是不能设置的。所以用户 在编写服务程序时,应该根据实际的情况和要求,通过软件的方式,将重要的中断优先处理掉。 当然你也可以每次中断服务只处理其中的一个,然后再次进入中断,处理下一个。 d/ 中断返回 内核执行完中断服务后,便进入中断返回过程,在这个过程中需要: 硬件将 IABR 寄存器中相应的标志位清另,表示该中断处理完成 如果 TIME2 本身还有中断标志位置位,表示 TIME2 还有中断在申请,则重新将 TIME2 的 Pending 标志置为 1,等待再次进入 TIME2 的中断服务 |
|
|
|
只有小组成员才能发言,加入小组>>
2549 浏览 0 评论
1148浏览 2评论
747浏览 1评论
500浏览 0评论
266浏览 0评论
429浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 19:20 , Processed in 1.347629 second(s), Total 79, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号