【发布时间】:2022-01-10 12:23:21
【问题描述】:
当来自外部 ADC 的数据准备好时,我正在使用中断将标志变为 True。正在触发此中断,但是当我添加时:
while(!dataReady);
等待中断改变标志为True,中断ISR函数不再触发。 这是我的完整代码:
static volatile bool dataReady = false;
void dataReadyInterrupt()
{
dataReady = true;
}
MCP3464::MCP3464()
{
ch = 0;
attachInterrupt(digitalPinToInterrupt(dataReadyPin), dataReadyInterrupt, RISING);
}
signed short MCP3464::read()
{
// wait for interrupt to turn dataReady True before reading next adc conversion
while(!dataReady);
dataReady = false;
// SPI full duplex transfer
digitalWrite(adcChipSelectPin,LOW);
SPI.transfer(readConversionData);
adcReading = (SPI.transfer(0) << 8);
adcReading += SPI.transfer(0);
digitalWrite(adcChipSelectPin, HIGH);
ch++;
if (ch >= numOfCh)
{
ch = 0;
}
// Write the new ADC channel to multiplexer
writeData(&muxRegisters[ch][0], 2);
// Start the next conversion (single conversion mode)
writeData(&startConversionFastCmd, 1);
return adcReading;
}
非常感谢任何想法。
【问题讨论】:
-
如何调用
MCP3464::read()?我希望不是中断。 -
我看不出这段代码如何运行而不在 ESP32 上崩溃。
while(!dataReady);应该触发看门狗定时器并重置 ESP32,如果它在那里停留超过几秒钟。
标签: c++ arduino embedded interrupt esp32