I have been investigating different UART receive methods provided by LPUART driver in order to receive a variable length UART packet. The assumption is each UART packet will contain a fixed length header which specifies the length of the remaining packet.
Packet Structure
| Byte 0 | Byte 1 | Byte 2 | Byte 3 | Byte n | Byte 3+Length-1|
| Start Byte | Length MSB | Length LSB | Data[0] | Data[n-3] | Data[Length-1] |
Firmware Operation
1. Prepare receive of header size (3 bytes)
2. Receive interrupt, read out the length
3. Prepare a second receive using the length in header
4. Receive interrupt after full length has been received
The methods I have tried are,
Nonblocking Interrupt
Nonblocking interrupt w/ Ring buffer
Non blocking DMA
I have had success with the three above methods at 921600 baud rate. I am able to trigger an interrupt after the header is received and register the second receive in time to receive all bytes in the remaining packet.
My question is, are there any recommended methods for how best to do this? I am concerned once other interrupts and peripherals are introduced into the system, I handle the header receive interrupt before the remaining packet byte come in.