STM32 DMA interrupt

tomas mainzer t.mainzer na gmail.com
Pondělí Prosinec 24 22:58:44 CET 2012


DD,
ciste jen tip bez znalosti daneho procesoru - pokracuje li vysilani
dat i pri debugovani, pak mozna zkusit zapatrat smerem k chybam typu
uart overrun (tj. neodebrani znaku ze vstupu).
TM.

2012/12/24 Stano <stano.hw na gmail.com>:
> Zdravim konferenci
> Uz dlhsie sa trapim s DMA na STM32F103RC. DMA je nakonfigurovana aby
> prenasala prijate znaky z USART1 do buffra.
> Program sa sprava podla ocakavania (ked prijme pozadovany pocet znakov
> nastavy novu adresu buffra a novy pocet prijimanych znakov a prijem sa
> opakuje). Problem nastava ked program zahaltujem debuggerom a znova spustim.
> Prijem sa uz nerozbehne. Data do USARTu prudia dalej, usart ziavne data
> prijima vsetko v debugeri vidim, aj transfer complete flag na DMA je
> nahodeny ale ziaden dalsi interrupt uz nenastane.
> Zbytok programu funguje stale korektne, tak hlavna sluca aj ostatne
> interrupty.
> Z mojho subiektivneho hladiska, problem sa sprava ako keby interrupt DMA bol
> "edge" sensitive. Teda ked nastane a nieje mu koli debuggeru alebo inemu INT
> (aj to som skusal) dobolene hned vyvolat rutinu prerusenia tak nasledne
> prerusenie nenastane aj ked flag je nastaveny.
> Toto je moja domnienka vytvorena podla chovania programu.
>
> Dakujem za akykolvek napad ci inspiraciu, sam uz neviem co s tym dalej.
>
>
> Prikladam ziednoduseny vektor problemoveho prerusenia.
>
> void USARTx_Rx_DMA_IRQHandler(void){
>    uint32_t len, adr;
>
>    DMA1->IFCR = USARTx_Rx_DMA_FLAG;                                // Clear
> interrupt pending bit
>    USARTx_Rx_DMA_Channel->CCR &= (uint16_t)(~DMA_CCR1_EN);            //
> Disable DMA
>
>   // nastavenie novych hodnot adr a len, len nemoze nikdy nadobudnut hodnotu
> 0
>
>    USARTx_Rx_DMA_Channel->CNDTR = len;                                //
> Sets the number of data bytes to receive
>    USARTx_Rx_DMA_Channel->CMAR = adr;                                // Set
> received buffer adress
>    USARTx_Rx_DMA_Channel->CCR |= DMA_CCR1_EN;                        //
> Enable DMA
> }
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list


Další informace o konferenci Hw-list