<div class="iw_mail" dir="ltr" style="font-size: 13px;"><div>Zdravím,</div><div><br></div><div>narazil jsem asi na moje nepochopení SPI s využitím DMA.</div><div><br></div><div>Mám následující úlohu:</div><div>1. ze zařízení, kde je STM32 (STM32F103) jako SPI slave periodicky vyčítám data (64B),</div><div>z nadřízeného systému je vyžádání dat iniciované na jednom pinu (vnější přerušení)</div><div>2. občas potřebuji poslat příkaz pro změnu chování (8B) do slave</div><div><br></div><div>Protože to STM32 je docela zaměstnané, chtěl jsme využít DMA pro SPI.</div><div>Pokud udělám jen to odesílání dat (DMA na TX, buffer 64B), tak to funguje ok.</div><div>Pokud zapnu DMA na RX (buffer 8B) i TX, tak pokud jen odesílám data - ok, pokud ale přijde příkaz shora, tj. přijmu těch 8B, tak se odesílání posune od těch 8B - očekávaný stav (zatím jsem to vyřešil tím, že přijímám také 64B, ale to je plýtvání časem).</div><div><br></div><div>Další pokus byl mít zapnuto DMA jen na příjem, pokud přijde požadavek na data, tak vypnu DMA na přijmu a nastavím DMA na vysílání (po odeslání to vrátím). Pokud pouze posílám data, tak ok. Jakmile však něco přijmu, tak se to nějak posune a první vysílaný znak je 0 a pak teprve následuje obsah tx bufferu.</div><div><br></div><div>Asi se tam do odesílacího registru dostane při tom zapnutí něco z toho přijmu. </div><div>Jak toto řešit? Díky za připomínky.</div><div><br></div><div class="iw-signature"><div>S přáním pevného zdraví</div><div>Martin Locker</div></div></div>