关于 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 的中止体系了。