Forum: Mikrocontroller und Digitale Elektronik LPC2378 als USB-Host


von Peter (Gast)


Lesenswert?

Es gibt ja von NXP als Demo USB-Host den USB Host Lite, der zwar für den 
LPC2468 ist, aber die Grundzuge sind die gleichen.
Ich habe da 2 Probleme:

1. Initialisierung der Clock
void  Host_Init (void)
{
  USB_INT32U  pinsel;

  PCONP |= 0x80000000;
  VICIntEnClr = (1 << 22); /* Enable the USB interrupt source */
  USBClkCtrl     = 0x00000009;
  while ((USBClkSt & 0x00000009) == 0) {.....

Und da ist das Problem, laut Datenblatt ist bit0 im USBClkCtrl gar nicht 
belegt. Sondern bit1. Ausserdem muss auch bit4 gesetzt werden.

  USBClkCtrl = 0x00000012;
Funktioniert anscheinend, es werden interrupts generiert wenn man den 
USB stick einsteckt, aber im der INT Routine:

  int_status = HcInterruptStatus;    //Read Interrupt Status

hat den Wert 0, dh. die Interruptquelle kann nicht identifiziert werden.

Hat einer hier Ahnung?

von Peter (Gast)


Lesenswert?

Sorry Schreibfehler, soll LPC2387 heissen

von Peter (Gast)


Lesenswert?

Und noch mal sorry, geht jetzt, hab mich total im Datenblatt verguckt.
Die Initialisierungssequenz ist anscheinend wichtig.
Falls es mal einer braucht:

  PCONP |= (1 << PCUSB);
  //Bit 0 = HOST_CLK_EN -> Enable USB host clock
  //Bit 3 = PORTSEL_CLK_EN a.k.a OTG_CLK_EN -> Enable USBPortSel 
register
  //Bit 4 = AHB_CLK_EN -> Enable AHB registers
  USBClkCtrl = 0x00000019;
  while((USBClkSt & 0x00000019) == 0);
  //Set as host
  USBPortSel &= ~0x03;
  USBPortSel = 0x03;
  //Set D+ P0.29, D- P0.30
  PINSEL1 = (PINSEL1 & ~0x3C000000) | 0x14000000;

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.