From 5c1e9a8445ab92889ab4825055de27c7a2c5d5b8 Mon Sep 17 00:00:00 2001 From: Sandeep Mistry Date: Fri, 15 Jan 2016 09:38:03 -0500 Subject: [PATCH] Only re-enable IRQ if PRIMASK was 0 before disabling IRQ --- cores/arduino/USB/CDC.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/cores/arduino/USB/CDC.cpp b/cores/arduino/USB/CDC.cpp index 0f1016848..048f2d536 100644 --- a/cores/arduino/USB/CDC.cpp +++ b/cores/arduino/USB/CDC.cpp @@ -158,7 +158,9 @@ void Serial_::accept(void) uint8_t buffer[CDC_SERIAL_BUFFER_SIZE]; uint32_t len = usb.recv(CDC_ENDPOINT_OUT, &buffer, CDC_SERIAL_BUFFER_SIZE); - noInterrupts(); + uint8_t enableInterrupts = ((__get_PRIMASK() & 0x1) == 0); + __disable_irq(); + ring_buffer *ringBuffer = &cdc_rx_buffer; uint32_t i = ringBuffer->head; @@ -175,7 +177,9 @@ void Serial_::accept(void) ringBuffer->full = true; } ringBuffer->head = i; - interrupts(); + if (enableInterrupts) { + __enable_irq(); + } } int Serial_::available(void)