Forum: Mikrocontroller und Digitale Elektronik LPC2378 + Crossworks + USB


von Harald Wilczak (Gast)


Lesenswert?

Hallo,

hat jemand vielleicht ein Beispiel für die Programmierung der USB 
Schnittstelle des LPC2378 Controllers. Habe das Beispiel von Keil 
benutzt und es umgeschrieben, dass es auch unter Crossworks 1.7 
übersetzt werden kann. Dieses geänderte Projekt wieder im Keil 
compiliert und in das MCB2300 geflasht und es läuft. Mit Crossworks 
läuft zwar das Programm, der Interrupt kommt auch, aber die Goddluck LED 
kommt nicht.

Initeinstellungen habe ich auch kontrolliert und müsste passen.

Danke schön für Eure hilfe.

Gruss
Harry

von mgiaco (Gast)


Lesenswert?

Keine Ahnung wie du deine IRQ Handler gemacht hast aber wenn du die GNU 
varriante nimmst ...interrupt("IRQ") dann darauf achten das du keine 
opitmierung eingeschaltet hast.

mfg mathias

von mthomas (Gast)


Lesenswert?

Weiterhin sind RealView (und EWARM) scheinbar relativ tolerant gegenüber 
"vergessenen" volatiles, code dahingehend nochmal abklopfen. Bei vielen 
USB-Codes muss man auf das struct packing achten. Dies ist 
compilerspezifisch und üblicherweise wird nicht gepackt, um schnelleren 
Zugriff auf Elemente zu ermöglichen. Bei arm-elf/-eabi gibt es dazu ein 
attribut packed (ähnlich __packed aber nicht als "prefix" sondern 
"suffix"). Das pack pragma gibt es bei RealView, EWARM und GNU (vgl. 
Dokumentation pragma und variable attributes bei gcc.gun.org).

Martin Thomas

von Harald Wilczak (Gast)


Lesenswert?

Hallo,

danke schön für Eure Antworten. Die Compiler Optimierung habe ich 
ausgeschaltet.

Eine Packed Structur in Keil C

typedef __packed struct _USB_SETUP_PACKET {
  REQUEST_TYPE bmRequestType;
  BYTE         bRequest;
  WORD_BYTE    wValue;
  WORD_BYTE    wIndex;
  WORD         wLength;
} USB_SETUP_PACKET;

habe ich wie folgt in GNU C umgeschrieben:

typedef struct _USB_SETUP_PACKET {
  REQUEST_TYPE bmRequestType;
  BYTE         bRequest;
  WORD_BYTE    wValue;
  WORD_BYTE    wIndex;
  WORD         wLength;
} __attribute__((_packed_)) USB_SETUP_PACKET;

Ich denke, dass es so gehen müsste!

Gruss
Harry

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.