GPIO口外部中断的使用

中断的概念
单片机的中断系统是使CPU具有对外界或者内部随机发生的事件实时处理而设置的。
具体来说,比如对于单片机的CPU,当它正在处理事件A时,此时突然发生了另一件事件B,事件B需要CPU紧急处理(称为中断请求),这时CPU就会暂停处理事件A(称为中断响应),先去处理事件B,等事件B处理完之后,再回来继续做事件A(称为中断返回)。
以生活中的事情举个例子,比如你正在家里写作业(事件A),这时有人来敲门了,你需要去开门(事件B)(中断请求),这时候你需要停下手中的作业,先去开门(中断响应),等处理好开门等事情之后,继续回来写作业(中断返回)。

图片

那如果同时发生两个中断事件B和事件C,此时CPU应该先去处理事件B还是事件C?或者单片机正在处理中断事件B时,突然发生了中断请求事件C,那这时候,CPU应该是先处理完事件B再去处理事件C还是先去处理事件C,等事件C处理完之后再回来处理事件B?
此时就涉及到中断的优先级问题。哪个事件的优先级高,就先去处理哪个事件。当两个中断事件的优先级一样时,哪个事件先发生就先去处理哪个事件。
单片机的中断有外部中断和内部中断两大类。
单片机的外部中断一般以GPIO口作为外部中断的输入;单片机的内部中断一般为定时器中断和串口中断等。
ESP32C3有31个中断,15个中断优先级别,每个中断的优级别可以独立的通过编程设置。
GPIO中断函数介绍
我们在教程二中介绍Pin类的方法时,其实提到过GPIO的中断函数,如下:
Pin.irq(handler=None, trigger=Pin.IRQ_FALLING | Pin.IRQ_RISING,        *, priority=1, wake=None, hard=False)
参数的含义如下:
  • handler:中断的回调函数,中断函数的参数为Pin的一个实例对象
  • trigger:配置触发中断的方式。
    • Pin.IRQ_FALLING表示下降沿触发
    • Pin.IRQ_RISING表示上升沿触发
    • Pin.IRQ_LOW_LEVEL表示低电平触发
    • Pin.IRQ_HIGH_LEVEL表示高电平触发
    • 也可以通过“或”运算来表示多个事件都可以触发。
    • 比如trigger=Pin.IRQ_FALLING | Pin.IRQ_RISING,表示下降沿和上升沿都可以触发中断。
以下几个参数,只有在某些芯片上才支持。
  • priority:表示中断的优先级别。数字越大,优先级别越高。
  • wake:中断可以唤醒系统的电源模式。可以是machine.IDLE,machine.SLEEP和machine.DEEPSLEEP。这些值也可以进行或运算。
  • hard:如果为true,则使用硬件中断。
ESP32C3外部中断实战
from machine import Pinimport time
led = Pin(12, Pin.OUT) button = Pin(9, Pin.IN, Pin.PULL_UP) 
def button_handler(b):    time.sleep_ms(20)    global led    led.value(not led.value())
button.irq(handler=button_handler, trigger=Pin.IRQ_FALLING)
while True:    # 这里什么也不做处理。实际应用中,这里可以处理一些事情    pass
上面的代码中,每次按下按键,会翻转led的亮灭状态。可以看到按键配置了一个中断函数,即button_handler,中断的触发方式为下降沿触发。中断函数中,先进行了20ms的延时,这个主要是避免按键的抖动导致多次触发中断。延时之后,对led的状态进行翻转。
示例代码中,while循环中,目前什么也不做处理。实际应用中可以让单片机进入休眠状态,来减少功耗,然后等到有外部中断请求时,单片机再进行处理,等处理完事情之后,再进入休眠状态。当然,实际应用中,单片机的while循环也可以处理一些其他事情,等有外部中断时,再去处理中断的事情。

原创文章,作者:guozi,如若转载,请注明出处:https://www.sudun.com/ask/82331.html

(0)
guozi's avatarguozi
上一篇 2024年5月31日 下午3:22
下一篇 2024年5月31日 下午3:28

相关推荐

  • 蔚来es8 评测,蔚来新es8测评

    作为蔚来的第一款量产车,当年ES8一上市确实让人们眼前一亮。女王副驾、NOMI、前后双电机的纯电平台等等让人耳目一新的配置和设计,让ES8成为造车新势力中最闪亮

    2024年5月31日
    0
  • 如何接入域名

    想要在网络世界中拥有一个属于自己的独特身份,你需要一条专属的网络地址,这就是域名。但是如何接入域名呢?接下来,我将为你揭开这个网络行业的秘密。从什么是域名开始,到域名接入的意义和作…

    行业资讯 2024年3月25日
    0
  • 日本云服务器租用

    日本云服务器租用,是近年来备受关注的话题。随着云计算技术的发展,日本云服务器市场也呈现出蓬勃的增长态势。作为全球最发达的科技国家之一,日本在云服务器领域拥有得天独厚的优势。那么,究…

    行业资讯 2024年3月22日
    0
  • 2022年最划算的云服务器有哪些?

    未来的2022年,云服务器行业将会迎来新的变革。随着科技的不断发展,云服务器已经成为企业和个人必不可少的一部分。但是,在众多品牌和型号中,如何选择最划算的云服务器却是一个令人头疼的…

    行业资讯 2024年4月12日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注