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的头像guozi
上一篇 2024年5月31日 下午3:22
下一篇 2024年5月31日 下午3:28

相关推荐

  • 苹果担忧欧洲新规导致黑客攻击iPhone成本可能降低

    来源:新浪视频 【苹果担忧欧洲新规导致#黑客攻击iPhone成本可能降低#】据IT之家消息,苹果数据保护官加里・戴维斯(Gary Davis)近日接受iCulture采访时表示,担…

    行业资讯 2024年3月18日
    0
  • 服务器租用北京

    想要在网络世界中有一个稳定的存在,服务器租用是必不可少的一环。而选择北京作为服务器租用的地点,更是让人心动不已。那么什么是服务器租用?为什么选择北京?北京服务器租用又有哪些优势和特…

    行业资讯 2024年4月8日
    0
  • cdn盒子真的赚钱吗?

    CDN盒子,这一内容分发网络的神奇小盒子,巧妙利用家庭或机构的闲置宽带资源,为视频、直播平台等提供高效的分发服务,从而帮助用户赚取可观的节点加速服务费用。那么,CDN盒子真的能够轻…

    行业资讯 2024年5月30日
    0
  • 如何正确地提交网站到搜索引擎?

    你是否想要让自己的网站在搜索引擎中获得更多的曝光度?那么,就不得不提到如何正确地提交网站到搜索引擎这一重要的步骤。或许你会问,为什么要提交网站到搜索引擎?其实,这其中蕴含着搜索引擎…

    行业资讯 2024年4月19日
    0

发表回复

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