STM32 DMA interrupt

Stano stano.hw na gmail.com
Úterý Prosinec 25 00:28:25 CET 2012


Dakujem
Ano presne to to bolo. Nastaveny overrun flag resp chyba bola v jeho 
osetreni.

tomas mainzer  wrote / napísal(a):
> 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
>>     
> _______________________________________________
> 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