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