early out of maskInterrupts()
My application is designed to generate HSTX data on core0 in interrupts, but also uses hardware SPI for SD card access. It turns out that the amount of time spent in maskInterrupts/ unmaskInterrupts, even with an empty _usingIRQs, is too long. Add a quick check and avoid touching the interrupt disable flag if there's not actually any GPIO interrupt to (un)mask.
This commit is contained in:
parent
6236d1f7c5
commit
b269ba0865
1 changed files with 2 additions and 0 deletions
|
|
@ -108,6 +108,7 @@ public:
|
|||
@brief Disables any GPIO interrupts registered before an SPI transaction begins
|
||||
*/
|
||||
void maskInterrupts() {
|
||||
if(_usingIRQs.empty()) { return; }
|
||||
noInterrupts(); // Avoid possible race conditions if IRQ comes in while main app is in middle of this
|
||||
// Disable any IRQs that are being used for SPI
|
||||
io_bank0_irq_ctrl_hw_t *irq_ctrl_base = get_core_num() ? &iobank0_hw->proc1_irq_ctrl : &iobank0_hw->proc0_irq_ctrl;
|
||||
|
|
@ -134,6 +135,7 @@ public:
|
|||
@brief Restores GPIO interrupts masks after an SPI transaction completes
|
||||
*/
|
||||
void unmaskInterrupts() {
|
||||
if(_usingIRQs.empty()) { return; }
|
||||
noInterrupts(); // Avoid race condition so the GPIO IRQs won't come back until all state is restored
|
||||
DEBUGSPI("SPI::endTransaction()\n");
|
||||
// Re-enable IRQs
|
||||
|
|
|
|||
Loading…
Reference in a new issue