STM32F303 SPI3 DMA2 negeneruje TC flag

Stano stano.hw na gmail.com
Středa Srpen 14 17:41:54 CEST 2013


Nie, tym to nieje. Moze tam zapisovat dokonca som toto miesto zmenil na 
pole ked som testoval ci to funguje ak je zapnute inkrementovanie adresy 
pamate. A fungovalo...
Uz som nasiel pricinu, v tomto pripade je treba pouzit 16bit citanie. V 
RX DMA bolo treba zmenit:

DMA_InitStructure.DMA_MemoryDataSize         = DMA_MemoryDataSize_HalfWord;
DMA_InitStructure.DMA_PeripheralDataSize    = 
DMA_PeripheralDataSize_HalfWord;

Jan Waclawek  wrote / napísal(a):
> A co je rw_dummybyte? Neukazuje to nahodou niekam, kde sa "nesmie"
> zapisovat? Nenastane nejaka chyba v DMA (t.j. nenastavi sa nejaky chybovy
> flag)?
>
> wek
>
>
> ----- Original Message ---------------
>
> Subject: STM32F303 SPI3 DMA2 negeneruje TC flag
>    From: Stano <stano.hw na gmail.com>
>    Date: Wed, 14 Aug 2013 00:53:31 +0200
>      To: HW-news <hw-list na list.hw.cz>
>
>   
>> Zdravim konferenci
>> Uz sa peknych par hodin trapim z nasledovnym problemom.
>> Potrebujem po odvysielani (a prijati) dat cez SPI nahodit CS. Chcel som 
>> pouzit TC flag DMA na RX SPI.
>> Ak mam zapnute inkrementovanie pamate vsetko funguje dobre. Ak vsak 
>> chcem vysielat a na prijimanych datach nezalezi je inkrementovanie RAM 
>> vypnute. A v tomto pripade STM negeneruje TC flag. Pokusal som sa o 
>> workarround s tym ze pockam na TC flag od zapisu do SPI a potom na RNXE 
>> od SPI periferie, zial bez uspechu.
>> Na STM32F103 som na tento problem nenarazil aj ked DMA periferia je 
>> velmi podobna tej z F303.
>> Stretol sa s tym niekto?
>> Nastavenie DMA:
>>
>>    DMA_InitStructure.DMA_PeripheralBaseAddr     = 
>> (uint32_t)(&(SPIMMC->DR));
>>    DMA_InitStructure.DMA_PeripheralInc         = DMA_PeripheralInc_Disable;
>>    DMA_InitStructure.DMA_PeripheralDataSize     = 
>> DMA_PeripheralDataSize_Byte;
>>    DMA_InitStructure.DMA_MemoryDataSize         = DMA_MemoryDataSize_Byte;
>>    DMA_InitStructure.DMA_Mode                     = DMA_Mode_Normal;
>>    DMA_InitStructure.DMA_Priority                 = DMA_Priority_High;
>>    DMA_InitStructure.DMA_M2M                    = DMA_M2M_Disable;
>>    /* DMA_SPI_RX */
>>    DMA_InitStructure.DMA_MemoryBaseAddr     = (uint32_t)(&rw_dummybyte);
>>    DMA_InitStructure.DMA_DIR                 = DMA_DIR_PeripheralSRC;
>>    DMA_InitStructure.DMA_MemoryInc             = DMA_MemoryInc_Disable;
>>    DMA_Init(SPIMMC_DMA_CHANNEL_RX, &DMA_InitStructure);
>>
>>    /* SPI_DMA_TX */
>>    DMA_InitStructure.DMA_MemoryBaseAddr     = (uint32_t)buff;
>>    DMA_InitStructure.DMA_DIR                  = DMA_DIR_PeripheralDST;
>>    DMA_InitStructure.DMA_MemoryInc             = DMA_MemoryInc_Enable;
>>    DMA_Init(SPIMMC_DMA_CHANNEL_TX, &DMA_InitStructure);
>>    DMA_Cmd(SPIMMC_DMA_CHANNEL_RX, ENABLE);
>>    DMA_Cmd(SPIMMC_DMA_CHANNEL_TX, ENABLE);
>> /*--------------------------------------------------------------------*/
>> /* DMA TC flag nenastavi a program zamrzne v nasledovnom riadku */
>> while (DMA_GetFlagStatus(SPIMMC_DMA_FLAG_RX_TC) == RESET) { ; }
>>
>> S pozdravom
>>       Stano
>>     
>
> _______________________________________________
> 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