ESP32 Arduino 未调用中断函数
Interrupts function not called with ESP32 Arduino
我正在将 ESP32 开发板与 Arduino 一起使用,并希望使用中断来确定主设备是否已将 Slave Select 标志发送到 ESP32。
这是我到目前为止尝试过的方法
1)
#define SS 34
void enableSend() {
Serial.println("SS Enabled");
}
void setup(){
pinMode(SS, INPUT);
attachInterrupt(digitalPinToInterrupt(SS), enableSend, RISING);
}
2)
#define SS 34
void IRAM_ATTR enableSend() {
Serial.println("SS Enabled");
}
void setup(){
pinMode(SS, INPUT);
attachInterrupt(digitalPinToInterrupt(SS), enableSend, RISING);
}
这两个版本我都用过 digitalPinToInterrupt
。
我需要做什么才能让中断正常工作?当前,当引脚 34 设置为高时,enableSend
函数不会被调用。
如果有帮助,here 是我拥有的 ESP 开发板的引出线。
您肯定需要 IRAM_ATTR(见 2)才能将 ISR(中断服务例程)放入 ESP32 的内部 RAM (IRAM)。
我认为你希望在 ISR 中执行的 Serial.println("SS Enabled");
对于 ISR 来说太复杂了。
ESP32停止常规执行流程执行ISR,这应该是
可在最短时间内执行,仅需几条 CPU 条指令。
通过串行端口发送数据需要几毫秒,这对于 ISR 来说太长了。
您可以使用 ISR 来更改您在常规中评估的变量/标志
执行流程,这样你就可以最大限度地减少弄乱设备流程的风险
执行...您可以从那里发送 "SS Enabled"
。
我正在将 ESP32 开发板与 Arduino 一起使用,并希望使用中断来确定主设备是否已将 Slave Select 标志发送到 ESP32。
这是我到目前为止尝试过的方法
1)
#define SS 34
void enableSend() {
Serial.println("SS Enabled");
}
void setup(){
pinMode(SS, INPUT);
attachInterrupt(digitalPinToInterrupt(SS), enableSend, RISING);
}
2)
#define SS 34
void IRAM_ATTR enableSend() {
Serial.println("SS Enabled");
}
void setup(){
pinMode(SS, INPUT);
attachInterrupt(digitalPinToInterrupt(SS), enableSend, RISING);
}
这两个版本我都用过 digitalPinToInterrupt
。
我需要做什么才能让中断正常工作?当前,当引脚 34 设置为高时,enableSend
函数不会被调用。
如果有帮助,here 是我拥有的 ESP 开发板的引出线。
您肯定需要 IRAM_ATTR(见 2)才能将 ISR(中断服务例程)放入 ESP32 的内部 RAM (IRAM)。
我认为你希望在 ISR 中执行的 Serial.println("SS Enabled");
对于 ISR 来说太复杂了。
ESP32停止常规执行流程执行ISR,这应该是 可在最短时间内执行,仅需几条 CPU 条指令。
通过串行端口发送数据需要几毫秒,这对于 ISR 来说太长了。
您可以使用 ISR 来更改您在常规中评估的变量/标志
执行流程,这样你就可以最大限度地减少弄乱设备流程的风险
执行...您可以从那里发送 "SS Enabled"
。