STM32F103, USART RX - DMA

Jan Waclawek konfera na efton.sk
Pondělí Březen 7 19:53:24 CET 2016


Nerozumiem v com je problem, ved to *je* kruhovy buffer
(http://www.mikrozone.sk/pluginy/userjournals_menu/userjournals.php?blog.53
:-) ), len namiesto head pointra/indexu je hardware, ale funkcia tail
pointera/indexu ostava taka aka predtym...

>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...

No, odmerajte si tu dobu timerom. Je to sice prisnejsie kriterium, ale to
nemusi vadit.

Druha moznost je pouzit HTIFx/TCIFx flagy - pri spracovani ich vynulovat, a
ak pri nasledujucom spracovani su oba nastavene, tak je mozne ze nastalo
pretecenie. Je to tiez zbytocne prisne kriterium a v najnepriaznivejsom
pripade znamena falosnu indikaciu pri polovicnom pocte bytov nez je
buffer, ale tiez to moze byt pre nejaku konkretnu aplikaciu adekvatne.

Pochopitelne obe metody sa daju kombinovat.



wek



>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 at 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 at gmail.com>
>>    Date: Fri, 15 Jan 2016 09:37:31 +0100
>>      To: HW-news <hw-list at 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 at 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 at list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
>_______________________________________________
>HW-list mailing list  -  sponsored by www.HW.cz
>Hw-list at list.hw.cz
>http://list.hw.cz/mailman/listinfo/hw-list


Další informace o konferenci Hw-list