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

Jan Waclawek konfera na efton.sk
Úterý Září 13 17:16:39 CEST 2016


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áą
>
>


Další informace o konferenci Hw-list