Az ARM-ok DMA vezérlője eszméletlen. Tudsz vele ADC, SPI, I2C, Timer, I2S, USART DMA-t csinálni, párhuzamosan, akár 8 csatornán.
Képes körkörös DMA pufferelésre, kiadhatja a DMA puffer megtelt és a DMA puffer félig megtelt jelet.
A Neopixel protokollt timer DMA-val szokták csinálni. Elindítasz egy 800 kHz-es timert és az "0/1 bit" hosszát DMA-val vezérled (nálam az előosztás után 29 volt egy ciklus, 0 bitnél 8-at írtam, 1 bitnél 21-et, de más előosztót is használhatsz).
1 bájt átküldéséhez timernél 8 bájt kell. Létrehozol egy 64 bájtos puffert, feltöltöd, amikor puffer megtelt, vagy puffer félig megtelt megszakítást kapsz, akkor a puffer megfelelő felét felülírod új adatokkal.
Úgy kell elképzelni, hogy miközben egyik félpuffert küldi a rendszer DMA-val, aközben a másik félpufferen dolgozol. Amikor meg elfogynak az adatok, 0-t írsz a timerbe (50 us-ig), ami hatására kimegy a RESET és kikerülnek a bitek a szalagra).
Az a durva, hogy timer DMA-val tetszőleges jelalakot előállíthatsz, csak a 0-1 jelek hosszát kell beállítani. Hihetetlen képességei vannak ennek a chipnek.