USART in Ardhino land is interrupt driven and reasonably efficient, but some efficiency gain may come with DMA; I have seen that on some SPI I/O previously. As they say, "Your mileage may vary." If implemented successfully, do please post the gain.
In coding an engine monitor on Mega2560 for a Rotax used in an Europa Experimental, my full-loop time was 750mS using two MAX31855. Measurements of readings such as voltage only become alive on the OLED displays after the 5th reading (5th loop) as the routine has a private [4] array for averaging but once active, display output is at 750mS. I did not look into DMA for serial as my initial thinking was there would be little benefit.
Code: Select all
void loop() {
analog_13(); /* A13 Gasoline fuel remaining */
analog_1(); /* A1 Oil temperature */
analog_3(); /* A3 CylHead Front */
analog_0(); /* A0 Water temperature */
analog_15(); /* A15 Gasoline fuel pressure */
analog_2(); /* A2 Engine Oil Pressure */
analog_4(); /* A4 CylHead Rear temperature */
analog_12(); /* A12 Battery voltage measured */
analog_10(); /* A10 Amps measured */
thermo_0(); /* Exhaust Gas left */
thermo_1(); /* Exhaust Gas right */
}