Ich versuche, eine feste Anzahl von Bytes (insgesamt 27 Bytes) von einem SPI-Slave-Gerät mit DMA zu lesen. Ich betreibe einen STM32F4-Chip.Schreiben Sie SPI-Dummy-Bytes mit DMA-Ringmodus
"Um vom SPI-Bus zu lesen, muss eine Uhr generiert werden. Sie müssen also schreiben, um zu lesen." Ich habe meinen DMA-Controller eingerichtet, um ein Dummy-Byte (0xFF) im zirkulären Modus zu schreiben.
uint8_t tx_buffer[] = {0xFF};
DMA_InitStruct.DMA_Mode = DMA_Mode_Circular;
DMA_InitStruct.DMA_BufferSize = 1;
DMA_InitStruct.DMA_Memory0BaseAddr = (uint32_t)tx_buffer;
und meine Rx dma Stream ist Setup Doppelpuffer-Modus:
uint8_t rx_buffer0[27];
uint8_t rx_buffer1[27];
DMA_InitStruct.DMA_Mode = DMA_Mode_Normal;
DMA_InitStruct.DMA_BufferSize = 27;
DMA_InitStruct.DMA_Memory0BaseAddr = (uint32_t)rx_buffer0;
DMA_DoubleBufferModeConfig(DMA2_Stream0, (uint32_t)rx_buffer1, DMA_Memory_0);
DMA_DoubleBufferModeCmd(DMA2_Stream0, ENABLE);
(. Ich habe andere irrelevant Initialisierungen weggelassen)
Nachdem die 27 Bytes eine Übertragung abgeschlossen Unterbrechung empfangen ist Ausgelöst.
Das Problem ist wie folgt: Ich sehe korrekte Daten im ersten Puffer. Aber während der Interrupt den Tx-Zirkular-DMA auslöst, werden die ersten paar Bytes des zweiten Puffers gefüllt, bis er deaktiviert wird.
Ich möchte vermeiden, 27 Bytes für Dummy-Daten reservieren, gibt es also eine Möglichkeit, einen kreisförmigen DMA-Stream nach einer festen Anzahl von Zyklen zu stoppen?