A fő bajom az I2C-vel, hogy nehéz pufferelni. Minden egyes átküldött bájt esetén külön nézni kell, hogy mi az ábra.
USART-hoz még interrupt sem kell. Körkörös DMA pufferbe töltöm az adatokat, amikor meg épp ráérek feldolgozom.
Írtam STM32-es oszcilloszkópot:
- ADC-vel DMA-val mintavételez
- eközben USB-vel max. 800 kbyte/s-cel nyomtam át mintavételeket
- eközben kirajzolom LCD-re, hogy mennyi bájtot toltam át DMA-val
- a proci meg jóformán semmit sem csinál
Azért képes az egész így működni, mert nem kell minden egyes átküldött bájtot végig kísérni. Ott a hardver DMA, az megcsinálja. Te csak felprogramozod a regisztereket, minden megy magától.
Nálam nagyon nem jön be, amikor minden egyes idióta bájtnál azt bámulod, hogy épp sikerült-e, vagy sem. Baromi erőforrás igényes. I2C esetén nem tehetsz mást. Ilyen a protokoll.