STM32F103, USART RX - DMA
Tomáš Hamouz
hamouz na divesoft.cz
Pátek Leden 15 10:04:23 CET 2016
Pokud si jste jistý, že stihnete data z bufferu vyčítat a nenastane
overflow, dá se to zminimalizovat a vystačíte s jediným bufferem.
Sice trochu "dirty" metoda, ale funguje.
DMA nastavíte tak, aby se buffer cyklicky plnil. U některých procesorů
na stačí zacyklená definice zřetězeného DMA, někde to budete muset
ošetřit v přerušení od konce DMA přenosu. STM32 mám v plánu, ale
zatím ho neznám.
Counter přenesených dat v DMA kontroléru pak funguje jako ukazatel
odzadu do bufferu, kde končí přijatá data. Druhý konec fronty si pak
obsluhujete při vyčítání.
Pokud by overflow nastal, přijdete o celý buffer a nemáte to nijak
indikované. Dobré je mít nad tím nějakou přenosovou vrstvu která
zajišťuje kontrolu integrity a opakování paketu při chybě.
Tomáš
> Zdravím, DMA jsem ještě nepoužíval tak se chci zeptat zda je nutné
> používat i přerušení... Představa je taková, že mám dva buffery. Do
> jednoho se kopírují data z RX USART z druhého se čte v hlavní smyčce
> programu. Když se buffer z UARTu naplní začne se plnit druhý a ten
> první se použije a naopak. Ale je nežádoucí hlavní smyčku programu
> přerušovat, protože tam potřebuju mít stálý tok dat hlavně v úseku kde
> se bude vyprazdňovat buffer... Bude to takto fungovat? Nebo je DMA
> trochu komplikovanější?
> Děkuji, MG
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
Další informace o konferenci Hw-list