STM32H7 SPI mit DMA und Hard NSS

Gast #6961223
Lesenswert?
• ▲
▼
Mahlzeit zusammen,

die STM32H7 Serie ist ja in der Lage den NSS (Chip Select) Pin des SPI 
im Master Modus (Full-Duplex) in Abhängigkeit der zu sendenden 
Datenmenge korrekt eigenständig zu schalten.

Für einfaches Polling konnte ich dies bereits erfolgreich implementieren 
und muss mich nicht mehr um den NSS Pin kümmern. Der Trick war dabei, 
die Anzahl der zu sendenden Bytes via "LL_SPI_SetTransferSize" (Register 
TSIZE) auf den entsprechenden Wert zu setzen.

Bei der Verwendung vom DMA funktioniert das ganze nicht mehr so einfach. 
Muss da noch zusätzlich getrickst werden? Die Übertragung funktioniert, 
lediglich der NSS Pin bleibt kontinuierlich auf low. Folgenden 
Codeschnipsel verwende ich zum Start der Datenübertragung:
1
void LL_SPI1::readWriteDMA(uint8_t* rx, uint8_t* tx, uint16_t n)
2
{
3
  LL_SPI_Disable(spi);
4
  LL_DMA_DisableStream(DMA1, LL_DMA_STREAM_2);
5
  LL_DMA_DisableStream(DMA1, LL_DMA_STREAM_3);
6
  LL_DMA_SetDataLength(DMA1, LL_DMA_STREAM_2, n);
7
  LL_DMA_SetDataLength(DMA1, LL_DMA_STREAM_3, n);
8
  LL_DMA_SetMemoryAddress(DMA1, LL_DMA_STREAM_2, (uint32_t)&rx[0]);
9
  LL_DMA_SetMemoryAddress(DMA1, LL_DMA_STREAM_3, (uint32_t)&tx[0]);
10

11
  //setBusyFlag(true);
12
  //select();
13

14
  LL_DMA_EnableStream(DMA1, LL_DMA_STREAM_2);
15
  LL_DMA_EnableStream(DMA1, LL_DMA_STREAM_3);
16

17
  LL_SPI_Enable(spi);
18
  LL_SPI_SetTransferSize(spi, n);
19
  LL_SPI_StartMasterTransfer(spi);
20
}

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 4 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.