【发布时间】:2021-02-23 21:08:18
【问题描述】:
美好的一天,我正在 Arduino IDE 上使用 ESP32。我已经编写了基本的外部中断程序来触发变化边缘。然后我在中断中“立即”切换我的输出。
我目前正在测量输入和输出,我很惊讶地发现我的切换输出在上升沿延迟了 38us,在下降沿延迟了 18us。有什么办法可以减少这些时间延迟?我附上了我的示波器图像。Rising EdgesFalling EdgesSignalsD2 是我的输入,D1 是我的输出。
谁能向我解释 ESP32 离开主循环并服务中断所需的时间?
简而言之,我希望我的中断在尽可能短的时间内得到服务,因为它看起来好像延迟是由于离开主循环并到达中断例程所花费的时间。
我的代码如下:
volatile boolean toggle = false;
volatile int counter = 0;
portMUX_TYPE mux = portMUX_INITIALIZER_UNLOCKED;
void IRAM_ATTR Pin34RPM(){
//xyz
if(toggle){
GPIO.out_w1ts = ((uint32_t)1 << 19);
}
else{
GPIO.out_w1tc = ((uint32_t)1 << 19);
}
toggle = !toggle;
}
void setup(){
pinMode(19, OUTPUT);
digitalWrite(19,LOW);
pinMode(34, INPUT_PULLUP);//Crank
attachInterrupt(34, Pin34RPM, CHANGE);
}
void loop() {
}
【问题讨论】: