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

Jan Waclawek konfera na efton.sk
Středa Září 14 13:40:17 CEST 2016


>Debug build
>
>while(SET == DMA_GetChannelActiveStatus(SSP1_DMA_CHAN_RX)) {;}
[...]
>
>  0000EDA4    040006DC    .word 0x040006DC       ; *DMA_Channel5



>Release build
>  0000A320    E59F4088    ldr r4, 0x0000A3B0
>while(SET == DMA_GetChannelActiveStatus(SSP1_DMA_CHAN_TX)) {;}
>  0000A3AC    780001A0    .word 0x780001A0       ; DMA_Channel5


??? V debug builde pouzivate kontrolu Rx a v release TX?
??? Tak Tx aj Rx je DMA_Channel5? (nemam tu kapitolu DMA nastudovanu, ten
DMA vyzera byt vyrazne rafinovanejsi nez ktorykolvek z tych 2 ci 3 co sa
pouzivaju v STM32)
??? Preco je v prvom pripade pouzity *pointer* (ten kam vedie? co je presne
na tom pamatovom mieste?) a v druhom priamo adresa?



--------
>> 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?
>
> Pokud dojde k zakopnutí, tak se přenos ukončí předčasně. Z nějakého
> důvodu vypadne ze smyčky kde se čeká až Rx kanál DMA skončí přenos.

Hm. Takze nastane zakopnutie, potom este par byte, ale aj tak je clockov
menej ako bolo predpisane, je to tak?

[...]

>> 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.
>
>Přesně tak jsem to dělal.

No a kde teda je ten bod medzi tymi dvoma while sluckami, pred zakopnutim,
pocas neho, alebo az uplne na konci po prenose tych dodatocnych byte za
zakopnutim?

wek




Další informace o konferenci Hw-list