ESP32 中斷
中斷
含義:程序被中斷程序打斷轉去執行中斷程序
將中斷附加到GPIO
void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode);
ISR 函數原型
void ISR()
{
//中斷發生時執行的代碼
}
外部中斷類型
LOW 低電平觸發中斷
HIGH 高電平觸發中斷
RISING 上升沿觸發中斷
FALLING 下降沿觸發中斷
CHANGE 變化時觸發中斷
分離中斷
detachInterrupt(uint8_t interruptNum);
最簡單的中斷程序代碼
#include <Arduino.h>
const byte LED = 13;
const byte BUTTON = 2;
void ButtonISR()
{
if(digitalRead(BUTTON) == HIGH)
{
digitalWrite(LED, HIGH);
}else digitalWrite(LED, LOW);
}
void setup()
{
pinMode(LED,OUTPUT);
pinMode(BUTTON,INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(BUTTON),ButtonISR,CHANGE);
}
void loop() {
}
PS:對于非原子操作,需要考慮同步問題
就需要用 noInterrupt() 和 interrupt() 函數來關閉和開啟中斷
對于在臨界區中的代碼,需要考慮同步問題
portENTRY_CRITICAL(&mux); //進入臨界區
portEXIT_CRITICAL(&mux); //退出臨界區
本文來自博客園,作者:Alaso_shuang,轉載請注明原文鏈接:http://www.rzrgm.cn/Alaso687/p/19191216

浙公網安備 33010602011771號