首页 > 其他分享 >【史上最全面ESP32】软件中断与硬件中断

【史上最全面ESP32】软件中断与硬件中断

时间:2024-07-12 12:28:30浏览次数:20  
标签:IRAM 中断 ESP32 引脚 硬件 软件

文章目录


前言

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

相关文章

  • 【史上最全面ESP32教程】http通信
    文章目录前言HTTP协议是什么?HTTP协议的特点HTTP协议的常见应用esp32使用http通信通信流程基础使用HTTPClient常用的函数函数介绍:`voidend(void);``boolconnected(void);``voidsetReuse(boolreuse);``voidsetUserAgent(constString&userAgent);``voidsetAuthor......
  • 软件测试-计算机软硬件
    软件测试-计算机软硬件软件测试的定义在规定的条件下队程序进行操作,以发现程序错误,衡量软件的质量,并对其是否能满足设计要求进行评估的过程简单来说,软件测试是一种实际输出与预期输出之间的审核或者比较过程为什么不让开发自己做测试1:开发者自身的思维定式2:测试的力度3:测......
  • Windows Defender Credential Guard (WDC) 旨在保护操作系统中的凭据免受攻击和恶意
    WindowsDefenderCredentialGuard(WDC)是一种Windows10和WindowsServer2016及更高版本中引入的安全功能,旨在保护操作系统中的凭据免受攻击和恶意软件的威胁。它通过使用硬件虚拟化技术(如IntelVT-x和AMD-V)来隔离和保护用户的敏感信息,例如NTLM口令、KerberosTicketGrant......
  • 0166-BIOS 中断
    环境Time2022-11-09WSL-Ubuntu22.04QEMU6.2.0NASM2.15.05前言说明参考:《x86汇编语言:从实模式到保护模式》李忠参考:http://www.ablmcc.edu.hk/~scy/CIT/8086_bios_and_dos_interrupts.htm目标使用BIOS中断,来进行屏幕的输出。BIOS中断BIOS中断是BIOS启动后......
  • ESP32纯Cj简单实现图片上传阿里云OSS
    对于嵌入式设备资源较少或者运行环境较简单的环境下,如果只是简单上传一张图片到阿里云OSS服务器的话,移植阿里云OSS的SDK就是一件性价比很低而且不一定能实现的事情了。那就得考虑自己实现一套简单的、最基础的图片上传功能。阿里云OSS提供了RESTAPI方式的图片上传接口,即通过HTTP......
  • STM32中断(NVIC和EXIT)
    CM3内核支持256个中断,其中包含了16个内核中断和240个外部中断,并且具有256级的可编程中断设置。但STM32并没有使用CM3内核的全部东西,而是只用了它的一部分。STM32有76个中断,包括16个内核中断和60个可屏蔽中断,具有16级可编程的中断优先级。而常用的就是这60个......
  • HAL库源码移植与使用之HAL库中断机制剖析
    经过一段时间的学习,我对HAL库自带的中断回调机制深恶痛绝,个人认为你可以把HAL库当成标准库去编写,形成你自己的编译风格,不用执行HAL库官方给的模板。HAL库中断函数回调机制:首先每个芯片的中断处理机制都是一样的,一样的中断头,一样的存储地址块比如:HAL库中的voidTIM5_IRQHandl......
  • MUNIK解读ISO26262 : 硬件架构评估及FMEDA(系统级)
    前言功能安全领域硬件层面的核心安全活动---FMEDA(FailureModesEffectsandDiagnosticAnalysis)一直受到功能安全工程师的广泛关注!作为定量分析的安全分析方法,FMEDA涉及到了复杂的计算公式和大范围的数据处理。为何做FMEDA汽车功能安全关注汽车电子/电气系统功能的正确、......
  • 伙伴活动|AI硬件大潮来袭,深圳的创客们在哪里?
    「每一种硬件产品,都会被GenAI重新做一遍。」 分享一个社区伙伴「未来光锥」参与主办的活动。如果你同时对AI和硬件感兴趣,提到maker一词仍然会激动。推荐你参与这次活动。 AI玩具Folotoy的创始人、RTE开发者社区成员王乐也将参与本次活动并分享。 也推荐你收听王......
  • 51单片机嵌入式开发:7、 STC89C52RC 外部中断INT0和INT1 操作
    STC89C52RC外部中断INT0和INT1操作1外部中断1.1外部中断1.2中断介绍2STC89C52外部中断2.1外部中断引脚2.2外部中断寄存器说明3STC89C52外部中断演示3.1电平触发外部中断3.2边沿触发外部中断3.3Protues仿真4外部中断总结1外部中断1.1外部中断单片......