GPDMA mit SPI auf LPC1787

OP #3552735
Lesenswert?
• ▲
▼
Ich möchte gerne den SPI Traffic "im Hintergrund" laufen lassen. Grund 
ist, dass dieser möglichst schnell sein soll. Damit meine Peripherie 
korrekt mit dem SPI funktioniert sollte weiterhin der SPI Strom ohne 
Pausen übertargen werden. Das würde zwar im Polling und 
Interrupt-Disable funktionieren. Das führt aber zu verzögerter 
Interrupt-Annhame von einer anderen Quelle.

Als Lösung bietet sich hier nun DMA an. Nun habe ich den DMA Controller 
nach bestem Wissen aufgesetzt. Aber es tut sich nichts auf dem SPI Bus. 
Hat jemand schon man den Cortex-M3 DMA Controller für die Ansteuerung 
des SSP1 benutzt?
1
#include <lpc177x_8x_gpdma.h>
2

3
unsigned char buffer[1] = { 0x73 };
4

5
int main()
6
{
7
  configure_ssp();
8

9
  // configure GPDMA
10
  GPDMA_Channel_CFG_Type dma_config;
11

12
  dma_config.ChannelNum = GPDMA_CONN_SSP1_Tx;
13
  dma_config.TransferSize = 1;
14
  dma_config.TransferWidth = 0;
15
  dma_config.SrcMemAddr = (uint32_t)&buffer[0];
16
  dma_config.DstMemAddr = 0;
17
  dma_config.TransferType = GPDMA_TRANSFERTYPE_M2P;
18
  dma_config.SrcConn = 0;
19
  dma_config.DstConn = GPDMA_CONN_SSP1_Tx;
20
  dma_config.DMALLI = 0;
21

22
  Status status = GPDMA_Setup(&dma_config);
23

24
  // now start DMA
25
  GPDMA_ChannelCmd(GPDMA_CONN_SSP1_Tx, ENABLE);
26

27
  while(1)
28
  {
29
  }
30
}
OP #3554731
Lesenswert?
• ▲
▼
Jim Meba schrieb:
> Im SSP Peripherial hast Du auch das DMA Bit gesetzt?

Nö. Wenn ich das setze, läuft es ja. ;-)

Danke für den Tipp. Habe es zwar inzwischen selber gefunden, aber der 
geneigte Leser mag das trotzdem hilfreich finden.

Mit diesem Schluss funktionierkt's.
1
  // prepare DMA
2
  GPDMA_ChannelCmd(GPDMA_CONN_SSP1_Tx, ENABLE);
3

4
  // now start DMA
5
  SSP_DMACmd(LPC_SSP1, SSP_DMA_TX, ENABLE);
6

7
  while(1)
8
  {
9
  }
10
}

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.