具有中断功能的GPIO引脚STM32L151C6有37个GPIO引脚,但其中只有16个可以配置为在任何时间点生成中断(称为外部中断)。对于哪些引脚可以同时配置为中断也有一些限制。
37个引脚分为四个端口:
- PA(16针)
- PB(16针)
- PC(3针)
- PH(2针)
对于PA和PB,引脚从0到15进行标记。PC的引脚为13–15,PH的引脚为0和1。所有带有相同数字标签的引脚(例如PA0,PB0和PH0)共享一条外部中断线(外部中断0),因此在任何时间点只能将其中一个配置为中断。
与ATmege328P和CC2544不同,有一个独立的外部中断处理设备,该设备独立于处理引脚中断的GPIO外设。该设备也不同于微控制器的整体中断控制器。每个外部中断都有自己的标志。
中断配置必须将每个外部中断线配置到在该线上生成中断的GPIO引脚。可以将每个外部中断配置为检测逻辑变化(0到1或1到0),仅检测上升沿(从0变为1)或仅检测下降沿(从1变为0)。这是因为外设是设计好的,所以您可以独立打开或关闭上升沿和下降沿检测。每个中断可以独立启用和禁用。与CC2544和ATmege328P不同,仅当允许中断时才设置外部中断的中断标志。
中断向量,服务程序和优先级外部中断0到4每个都有各自独立的中断向量。外部中断5至9共享一个中断向量,中断10至15也共享一个中断向量。这意味着与GPIO中断相关的共有七个中断向量。这些向量中的每一个都可以独立启用或禁用。每个向量在中断控制器中也都有自己的标志。
ISR必须清除外部中断(GPIO)模块以及中断控制器中的中断标志。该文档没有明确说明执行的顺序,但是最有意义的是遵循CC2544的方法,在中断向量标志之前先清除GPIO标志。
STML151C6中的优先级在配置方式和如何允许抢占方面稍微复杂一些。有两种配置优先级的方法。最简单的方法是使用优先级。有16个不同的优先级。仅优先级用于确定抢占,因此优先级较高的中断可以抢占CPU当前正在处理的中断。每个中断向量都有一个唯一的中断号。如果有两个优先级相同的中断正在等待CPU,则CPU将在能够的情况下选择具有较低中断号的一个。但是,即使中断优先级相同,中断号较低的中断也不能抢占优先级较高的中断。
中断配置的第二种方法是使用组优先级和子优先级。不同组和子优先级的数量也是可配置的。不管特定的配置如何,组优先级都像优先级一样起作用。具有较高组优先级的中断可以抢占具有较低组优先级的中断。如果两个或多个具有相同组优先级的中断在CPU上等待,则子优先级和中断号用于确定运行哪个中断。首先使用子优先级。子优先级较高的优先级优先于子优先级较低的优先级。如果两个共享相同的子优先级,则首先处理具有较低中断号的子优先级。
至此,我们的关于并发和GPIO中断的系列文章结束了。如果您对此处介绍的信息有任何疑问,请在下面的评论中告诉我们。
`