STM32F103, USART RX - DMA

Michal Grunt michal.grunt na gmail.com
Čtvrtek Březen 10 23:01:23 CET 2016


Děkuji za odpověď. Trochu blíže jsem to prozkoumal a zase jsem o něco
chytřejší a pomohlo mi to. Sice mi to nefunguje tak jak potřebuji, ale to
už je jiný druh problému a bufferu se to netýká.

MG


Dne pondělí 7. března 2016 Jan Waclawek <konfera na efton.sk> napsal(a):

> 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 na efton.sk <javascript:;>>
> 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 <javascript:;>>
> >>    Date: Fri, 15 Jan 2016 09:37:31 +0100
> >>      To: HW-news <hw-list na list.hw.cz <javascript:;>>
> >>
> >>>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
> <javascript:;>> 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 <javascript:;>
> >> http://list.hw.cz/mailman/listinfo/hw-list
> >_______________________________________________
> >HW-list mailing list  -  sponsored by www.HW.cz
> >Hw-list na list.hw.cz <javascript:;>
> >http://list.hw.cz/mailman/listinfo/hw-list
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz <javascript:;>
> http://list.hw.cz/mailman/listinfo/hw-list
>
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20160310/89688288/attachment.html>


Další informace o konferenci Hw-list