文章目录
前言
ESP32是一款高度集成的芯片,具有强大的中断处理能力。在ESP32中,我们可以配置所有的GPIO引脚作为硬件中断源,通过附加它们到相应的中断服务例程(ISR)来启用中断。此外,ESP32还支持软件中断,例如定时器溢出时的定时器中断。
硬件中断
硬件中断概念
硬件中断是响应外部硬件事件而发生的,例如,当检测到触摸时发生触摸中断,当GPIO引脚的状态改变时发生GPIO中断。我们可以使用attachInterrupt()
函数在引脚上设置中断。
硬件中断的使用
在ESP32中,我们可以使用硬件中断来响应按键事件。以下是一个简单的示例,说明了如何使用硬件中断来检测按键按下的事件。
const int buttonPin = 12; // GPIO pin where the button is connected
volatile bool has_interrupted = false;
void IRAM_ATTR myInterruptFunction() {
has_interrupted = true;
}
void setup() {
Serial.begin(115200);
pinMode(buttonPin, INPUT_PULLUP); // Configure the pin as an input with internal pull-up resistor
attachInterrupt(digitalPinToInterrupt(buttonPin), myInterruptFunction, RISING); // Configure the interrupt
}
void loop() {
if(has_interrupted) {
Serial.println("Button pressed!");
has_interrupted = false;
}
}
-
attachInterrupt(digitalPinToInterrupt(buttonPin), myInterruptFunction, RISING);
- 函数原型:
void attachInterrupt(uint8_t pin, voidFuncPtr callback, int mode);
- 作用:将中断服务例程(ISR)附加到指定的GPIO引脚上。
- 参数:
pin
:要附加中断的GPIO引脚编号。callback
:中断发生时调用的函数(ISR)。mode
:定义触发中断的条件,例如RISING、FALLING、CHANGE等,他们分别表示上升沿触发,下降沿触发和改变就触发。
- 返回值:无。
- 函数原型:
-
digitalPinToInterrupt(buttonPin)
- 函数原型:
int digitalPinToInterrupt(int pin);
- 作用:将数字引脚转换为中断号,用于
attachInterrupt()
函数。 - 参数:
pin
:要转换的数字引脚编号。
- 返回值:对应的中断号。
- 函数原型:
-
myInterruptFunction()
- 函数原型:
void IRAM_ATTR myInterruptFunction();
- 作用:定义中断服务例程(ISR),在中断发生时执行的函数。
- 参数:无。
- 返回值:无。
IRAM_ATTR
是一个特殊的属性,用于指示编译器将特定的代码段放置在ESP32的内部RAM(IRAM)中。这是因为ESP32基于哈佛架构,具有两个总线:一个用于指令,一个用于数据。IRAM是可执行的,并且只能通过4字节对齐的字进行读取或写入。
- 函数原型:
当你在代码中使用IRAM_ATTR
标记时,你正在声明编译后的代码将被放置在名为".dram.text"的段中。这意味着可执行文件不仅有".text"和".data"段,还有其他段。在ESP32启动时,引导程序会在将控制权交给你的应用程序之前,将".dram.text"段复制到实际的RAM中。然后,RAM被映射到指令区域地址空间(> 0x4000 0000),这意味着可以将控制权传递给此代码(如常规操作),因为代码位于指令总线地址空间中。
使用IRAM_ATTR
的一个主要原因是,当ESP32执行Flash操作(如写入或擦除)时,需要在RAM中运行的中断服务例程(ISR)。如果不使用IRAM_ATTR
,代码将被放置在Flash中,而Flash在ESP32上的速度比内部RAM慢。
软件中断
软件中断概念
软件中断是当触发软件事件时发生的,例如定时器溢出。我们可以使用ESP32的定时器中断来执行特定的任务。
软件中断的使用
在此之前我们写过定时器的文章,我们这里就不多赘述:ESP TIMER
总结
ESP32的中断处理能力非常强大,无论是硬件中断还是软件中断,都可以帮助我们更有效地管理和控制硬件设备,提高系统的实时性和响应速度。通过理解和掌握ESP32的中断机制,我们可以更好地利用这款芯片的强大功能,为我们的项目带来更多可能性。
标签:IRAM,中断,ESP32,引脚,硬件,软件 From: https://blog.csdn.net/m0_62599305/article/details/140331419