Forum: Mikrocontroller und Digitale Elektronik ARM LPC 1769 DMA Problem nach power-on


von The D. (thedaz)


Angehängte Dateien:

Lesenswert?

Ich arbeite mich gerade in die Programmierung des DMA controllers auf 
dem LPC 1769 ein und benutzte dazu das entsprechende LPCXpresso board. 
Mein erster Versuch soll einfach ein paar Kilobytes Daten von A nach B 
im RAM kopieren was auch prima funktioniert. Was ich allerdings nicht 
verstehe ist, warum das Programm nicht funktioniert, wenn ich das board 
stromlos mache und wieder einschalte. Selbst nach manuellen Resets 
funktioniert es dann nicht. Wenn ich das board flashe bzw. das Programm 
im Debugger starte funktioniert es ohne Probleme (grüne LED leuchtet) 
und auch wiederholte Resets ändern nichts daran. Nur eben der power 
cycle. Tatsächlich ist es so, dass ein DMA transfer stattfindet, nur im 
power-on Fall der anschließende memory compare schief geht (und die 
rot/blaue LED leuchtet).

Ich denke nicht, dass der DMA setup falsch ist, sondern dass ich 
irgendetwas am board / processor setup übersehen haben und wäre dankbar 
für einen Schubs in die richtige Richtung. Die Prozessor Errata weist 
keine diesbezüglichen Probleme aus und das von der CMSIS library 
vorgesehene clock/PLL setup erscheint mir auch korrekt (wenn auch nur 
100MHz statt der möglichen 120MHz genutzt werden). Ich benutzte 
LPCXpresso v. 8.1.4 als IDE.

: Bearbeitet durch User
von Jim M. (turboj)


Lesenswert?

Probiere mal, das NVIC_EnableIRQ(DMA_IRQn);  ans Ende der 
Initialisierung des DMA zu setzen. Nicht das da irgendwo eins spurious 
Interrupt ausgelöst wird.

The D. schrieb:
> Die Prozessor Errata weist
> keine diesbezüglichen Probleme aus und das von der CMSIS library
> vorgesehene clock/PLL setup erscheint mir auch korrekt

Setzt er dabei auch das Flash Timing Register hoch? Der braucht bei 
100MHz ein paar Waitstates.

von The D. (thedaz)


Lesenswert?

Jim M. schrieb:
> Probiere mal, das NVIC_EnableIRQ(DMA_IRQn);  ans Ende der
> Initialisierung des DMA zu setzen. Nicht das da irgendwo eins spurious
> Interrupt ausgelöst wird.
>

Danke, in die Richtung hatte ich auch einen Verdacht kurz nachdem ich 
diesen Thread eröffnet hatte. Werd es heute Abend mal ausprobieren und 
vor dem enable am besten noch gleich einen etwaigen pending interrupt 
löschen.

> The D. schrieb:
>> Die Prozessor Errata weist
>> keine diesbezüglichen Probleme aus und das von der CMSIS library
>> vorgesehene clock/PLL setup erscheint mir auch korrekt
>
> Setzt er dabei auch das Flash Timing Register hoch? Der braucht bei
> 100MHz ein paar Waitstates.

Die CMSIS setup Routine macht folgendes setup :
1
#define FLASHCFG_Val          0x00004000
2
...
3
LPC_SC->FLASHCFG  = (LPC_SC->FLASHCFG & ~0x0000F000) | FLASHCFG_Val;

was für den LPC1769 laut UM10360 Seite 71 angebracht scheint.

von The D. (thedaz)


Lesenswert?

Habs ausprobiert, leider macht es keinen Unterschied :(

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.