STM32F103, USART RX - DMA
Michal Grunt
michal.grunt na gmail.com
Pondělí Březen 7 16:54:16 CET 2016
Zdravím,
vytvořil jsem si kruhový buffer. Je mi jasný, že
DMA_GetCurrDataCounter(DMA1_Channel5) (usart1/RX) vrací počet
prázdných míst (jak píšete... mám to zdebugované takže vím jak se to
chová), ale dále už se v tom trochu ztrácím a nevím jak z toho ven.
Potřebuji z kruhového bufferu vyčíst část dat (budu z něho číst po
blocích) a po zpracování těchto dat z něho vyčíst další část dat,
která bude navazovat na tu předchozí část. Jenomže v tu dobu se buffer
nejspíš doplní (po tu dobu co budu data zpracovávat) a celý se to
"posune" a nevím jak najít konec toho předchozího bloku, abych mohl
začít čist ten následující... Snad uchovat si pozici toho NTDR nebo
spíš přímo index pole a od toho pak začít čist druhý blok? Ale pokud
bude zpracování dat trvat déle (stát se to může), může to přetéci
(oběhnout dokola) a pak nevím jak to zdetekovat...
MG
Dne 15. ledna 2016 9:51 Jan Waclawek <konfera na efton.sk> napsal(a):
> Rx USART je predsa zdroj dat, t.j. on ich zapisuje.
> Citate ich na zaklade polohy head indexu, t.j. NDTR. Treba mat na pamati,
> ze to nie je priamo index, ale "pocet prazdnych miest", t.j. je od 1 do N
> nie od 0 do N-1.
>
> Ak by ste implementovali opacny smer tak zase pisete na zaklade obsahu NDTR
> a cita uz hardware.
>
> Ma to take gotcha nuancy typu ze update NDTR neprebieha presne v tom poradi
> ako pise appnote (co je bohuzial jediny zdroj podrobnejsich informacii),
> ale ak pouzivate "kniznice" alebo neoptimalizovany kod, tak sa to
> neprejavi. Detaily/okolnosti si nepamatam, ja som s tym problem nemal,
> musel by som vyhrabavat z fora.
>
> Nijako sa to nelisi od bezneho kruhoveho buffera, akurat ze jeden smer je
> obhospodarovany hardwarom.
>
> wek
>
> ----- Original Message ---------------
>
> Subject: Re: STM32F103, USART RX - DMA
> From: Michal Grunt <michal.grunt na gmail.com>
> Date: Fri, 15 Jan 2016 09:37:31 +0100
> To: HW-news <hw-list na list.hw.cz>
>
>>A jak zapíąu data do kruhového bufferu bez přeruąení?
>>
>>Dne 14. ledna 2016 12:45 Jaroslav Buchta <jaroslav.buchta na hascomp.cz> napsal(a):
>>> jde to, muzete periodicky cist, kolik znaku DMA preneslo. kdyz udelate
>>> buffer kruhovy, nemusiite se jinak o nej uz starat vubec.
>>> Dne 14.01.2016 v 11:52 Michal Grunt napsal(a):
>>>>
>>>> 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ąí?
>
> _______________________________________________
> 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