STM32F103, USART RX - DMA

Jaroslav Buchta jaroslav.buchta na hascomp.cz
Pondělí Březen 7 17:47:58 CET 2016


Ano, pamatovat si prvni pozici za prectenymi daty je asi nejlepsi.
S pretecenim bufferu asi neudelate nic, proste musi byt dost velky ;-)

Dne 07.03.2016 v 16:54 Michal Grunt napsal(a):
> 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
> _______________________________________________
> 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