Hallo,
Ich arbeite jetzt schon mehrere Tage mit dem MCB2300 von Keil (LPC2387)
an GPDMA herum. Ich möchte ganz simpel einen Bereich im USB Ram in einen
anderen Bereich im USB Ram schreiben ohne interrupts (ich weiß das ist
nicht der Sinn von DMA - nur für den Anfang)
Nach Datenblatt sollte das "active"-Bit im GPDMA_CH0_CFG(bit 17) ja nach
konfiguration + einschalten mal kurz high sein, das wird es aber leider
nie.
Hab ich irgendwas vergessen?
Wäre wirklich dankbar wenn mir hier ein Profi kleine Hilfestellung geben
kann.
1 | src_addr = (unsigned long *)DMA_SRC;
|
2 | dest_addr = (unsigned long *)DMA_DST;
|
3 |
|
4 | // DMA initialisieren Ram 2 Ram
|
5 | PCONP |= (1 << 29); // Enable GPDMA clock
|
6 |
|
7 | GPDMA_INT_TCCLR = 0x01; // clear all interrupts on channel 0
|
8 | GPDMA_INT_ERR_CLR = 0x01;
|
9 |
|
10 | // GPDMA initialisiern
|
11 | GPDMA_CH0_SRC = DMA_SRC; // Quelladresse festlegen 0x7FD00000
|
12 | GPDMA_CH0_DEST = DMA_DST; // Zieladresse festlegen 0x7FD01000
|
13 | //GPDMA_CH0_LLI = 0x00; // single packet of data
|
14 | GPDMA_CONFIG = 0x01; // Enable DMA channels, little endian
|
15 |
|
16 | //GPDMA_CH0_CTRL control
|
17 | GPDMA_CH0_CTRL = ((TSIZE/4) & 0x0FFF); // Transfersize TSIZE=1000
|
18 | GPDMA_CH0_CTRL |= (0x04 << 12); // SBSize 4
|
19 | GPDMA_CH0_CTRL |= (0x04 << 15); // DBSize 4
|
20 | GPDMA_CH0_CTRL |= (0x02 << 18); // SWidth 2
|
21 | GPDMA_CH0_CTRL |= (0x02 << 21); // DWidth 2
|
22 | GPDMA_CH0_CTRL |= (1 << 26); // SI Source Inkrement
|
23 | GPDMA_CH0_CTRL |= (1 << 27); // DI Destination Inkrement
|
24 | //GPDMA_CH0_CTRL |= 0x80000000; // Terminal count interrupt enable bit
|
25 |
|
26 | // GPDMA_CH0_CFG
|
27 | GPDMA_CH0_CFG |= 0x00; // Einstellungen für Memory 2 Memory
|
28 |
|
29 | GPDMA_CH0_CFG |= 0x01; // Enable channel0
|
30 |
|
31 | if ((GPDMA_CH0_CFG & (0x20000)) == (0x20000)) char2LED(0x55); // anzeigen ob active erreicht wird!
|
32 |
|
33 | while (GPDMA_CH0_CFG & (1<<17)); // while active
|
ich beschreibe davor die Rambereiche mit definierten chars, nach dem DMA
sind diese aber immer noch unverändert --> es hat kein kopiervorgang
stattgefunden... :-/
den meisten wird es wahrscheinlich aufgefallen sein, dass es sich hier
um ein modifiziertes Keil-Beispiel handelt (welches allerdings seinen
Zweck auch nicht tut)
Danke und liebe Grüße
Flo