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 | }
|