arduino-wch32v003 icon indicating copy to clipboard operation
arduino-wch32v003 copied to clipboard

HardwareSerial disable USART interrupt

Open sintrb opened this issue 1 year ago • 0 comments

cores/arduino/api/HardwareSerial.cpp

when "rxBufferTail == rxBufferHead" USART interrupt will be disable. What time to enable USART interrupt. If not no way to read data. make a ring buff is more useful.

extern "C" void USART1_IRQHandler(void) {
    if(USART1->STATR & USART_FLAG_RXNE) {
        // Write into buffer
        rxBuffer[rxBufferTail] = USART1->DATAR & (uint16_t)0x01FF;

        rxBufferTail = (rxBufferTail + 1) % RX_BUFFER_SIZE;

        if(rxBufferTail == rxBufferHead) {
            // Buffer empty, disable USART interrupt
            USART1->CTLR1 &= ~USART_FLAG_RXNE;  // here
            return;
        }
    }
}

sintrb avatar Jul 04 '24 17:07 sintrb