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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.