STM32F103, USART RX - DMA
Jaroslav Buchta
jaroslav.buchta na hascomp.cz
Pátek Březen 11 08:22:22 CET 2016
Nevim co vam nefunguje podle predstav, jen pro inspiraci - me se
osvedcila kombinace poolingu a ISR.
Nastavim kruhovy buffer a preruseni od HT i TC. S nejakou periodou
testuju, jestli neprislo par znaku, prubezne zpracovavam (cca 10-100ms
podle potreb). Pokud dojde k hromadnejsimu prenosu, ktery olizovanim
nechytnu, mam preruseni v okamziku, kdy je jeste nejmene pulka bufferu
prazdna a prichozi data okamzite zpracovavam.
Dne 10.03.2016 v 23:01 Michal Grunt napsal(a):
>
> 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
> <mailto: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 <http://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 <http://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 <http://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
> 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/20160311/f2e7c2b0/attachment.html>
Další informace o konferenci Hw-list