Re: Ukončení přenosu využitím DMA

Zdeněk Aster Zdenek.Aster na seznam.cz
Středa Září 14 12:02:47 CEST 2016




Sleduji to tak nejak po ocku, jelikoz procesor jde mimo me,
ale nemuze tam byt problem typu, ze treba u atmelu a serioveho

portu byly dve informace ze z buferu sel znak na odeslani a bylo

mozne plnit dalsi...

Ale kdyz v tu chvili to clovek tipnul, vypnutim seriaku tak se nic 
neodeslalo,

protoze znak byl sice prevzat hardwarem, ale jeste se neodvysilal ven..

Tak jen myslenka jestli to nemuze byt takovy nejaky podobny problem...




Zdenek Aster



---------- Původní zpráva ----------
Od: Jan Waclawek <konfera na efton.sk>
Komu: HW-news <hw-list na list.hw.cz>
Datum: 14. 9. 2016 11:42:57
Předmět: Re: Ukončení přenosu využitím DMA

"No toto mi vobec nedava zmysel. Takze nakoniec sa aj pri tom "zakopnuti"
prenesie ocakavany pocet znakov (/ 8 = pocet clockov zodpovedajuci poctu
bytov nastavenych v Tx DMA), ale v Rx buffri nie su?

Chcelo by to pozriet ako je to prelozene. Bolo by tiez dobre mat pred,
medzi a za tymi while nejaku znacku (zacvicit nejakym pinom) a pozerat
osciloskopom/LA spolu s tymi hodinami od SPI.

wek


----- Original Message ---------------
>Není. Přiąel jsem na to tak ľe mi neseděly kontrolní součty v datech
>a v bufferu zůstaly nuly.
>
>Kdyľ koukám na SPI signály log. analyzátorem, tak v případě zkrácení
>je několik znaků před předčasným koncem zaąkytnutí, je tam mezera cca na 
jeden
>znak (SPI na 24MHz). Potom doběhne jeątě pár znaků, zachytil jsem v
>rozsahu 4-13. Celkový počet i počet po mezeře jsou nekulatá čísla.
>
>Zřejmě dochází skutečně k zastavení kanálu, ale chyba nastavená není.
>
>A to vąe jen občas. Přeruąení je povolené, po 1ms běľí systémové
>hodiny, ale na SPI se nesahá.
>
>Tomáą
>
>
>> A nie je to nahodou naopak, t.j. ze ak kontrolujete Rx tak je to dobre, a
>> ak Tx tak Vam chybaju nejake prenesene data?
>
>> wek
>
>
>> ----- Original Message ---------------
>>>Zdravím vespolek
>>>
>>>Narazil jsem na problém, zdá se µe i opravil, ale netu±ím proč ta
>>>oprava funguje.
>>>
>>>Procesor STR912FAW46 (vím, moc lidí s ním uµ nepracuje, ale co kdyby)
>>>Přená±ím data přes SPI (externí flash) s vyuµitím DMA.
>>>Programově ode±lu záhlaví, pro přenos dat pouµiju DMA. Tzn. odesílám
>>>samá FF pomocí jednoho DMA kanálu, přijímám do bufferu pomocí druhého
>>>kanálu. To v±e synchronně, čekám na dokončení přenosu.
>>>
>>>Vypadá to zhruba takhle:
>>>
>>> // tady je inicializace kanálů, oba na stejnou délku dat.
>>>
>>> // rict SSP ze bude prenaset prijata data pomoci DMA / dtto pro 
odesilana
>>> SSP_DMACmd(SSP1, SSP_DMA_Receive, ENABLE);
>>> SSP_DMACmd(SSP1, SSP_DMA_Transmit, ENABLE);
>>>
>>> // Enable DMA Channels
>>> DMA_ChannelCmd(SSP1_DMA_CHAN_RX, ENABLE);
>>> DMA_ChannelCmd(SSP1_DMA_CHAN_TX, ENABLE);
>>>
>>> // zde probiha prenos
>>>
>>> // pockat na dokonceni DMA prenosu
>>> // vvvvvv zde je to dulezite
>>> while(SET == DMA_GetChannelActiveStatus(SSP1_DMA_CHAN_RX)) {;}
>>> // pockat az dobehne i SPI
>>> while((SSP1->SR & SPI_SR_FLAG_BUSY)) {;}
>>>
>>> // Disable DMA Channels
>>> DMA_ChannelCmd(SSP1_DMA_CHAN_RX, DISABLE);
>>> DMA_ChannelCmd(SSP1_DMA_CHAN_TX, DISABLE);
>>>
>>> // Disable SPI RX/TX request
>>> SSP_DMACmd(SSP1, SSP_DMA_Transmit, DISABLE);
>>> SSP_DMACmd(SSP1, SSP_DMA_Receive, DISABLE);
>>>
>>>A teď ten problém: vět±inou to funguje, jen občas se přenos nedokončí,
>>>přesněji, ukončí předčasně. Nehlásíá se µádné chyb, jen se přenese
>>>míň neµ jsme zadával.
>>>
>>>Pokud na označené řádce kontroluju status Tx, tak to funguje.
>>>
>>>Délka dat pro oba kanály je inicializovaná ze stejné proměnné.
>>>Proč záleµí na tom který kanál testuju, kdyµ by oba měly z principu
>>>přenést stejné mnoµství dat?
>>>
>>>Tomá±
>>>

_______________________________________________
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/20160914/71482d16/attachment.html>


Další informace o konferenci Hw-list