LPC2378 als USB-Host

Gast #2391404
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?
Gast #2391671
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;

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren