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)