我正在将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"
。