Forum: Mikrocontroller und Digitale Elektronik GPDMA mit SPI auf LPC1787


von Harper B. (harper)


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
}

: Bearbeitet durch User
von Jim M. (turboj)


Lesenswert?

Im SSP Peripherial hast Du auch das DMA Bit gesetzt?

von Harper B. (harper)


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
}

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.