Hi,
ich versuche gerade mein board mit dem AT90USB1287 so einzurichten, dass
mein PC es erkennen kann. Er kommt soweit, dass ein Gerär erkannt ist,
aber es ist unbekannt! Er kommt also nie zur Enumeration, was auch Sinn
macht, weil das Programm auf die SETUP datei vom host wartet. Und da
kommt das Problem, die flag wird niemals gesetzt und ich weiß nicht
woran es liegen kann.
Hier is der code für meine usb_init funktion:
/*! \brief USB-Aktivierung (Full-Speed 12Mbit/s) und Interrupts erlauben
*/
void usb_init_device(void)
{
// usb_reset() falls mit Bootloader gearbeitet wird (siehe Saleski)
UHWCON = ((1<<UIMOD) | (1<<UVREGE)); // 0x81
USBCON = ((1<<USBE) | (1<<FRZCLK) | (1<<OTGPADE)); // 0xB0
// FRZCLK = 0 (0x90) noetig, da sonst kein Transfer moeglich und somit
EORSTI
USBCON = ((1<<USBE) | (1<<OTGPADE)); // nicht ausloesen kann
(getestet!)
USBCON = ((1<<USBE) | (1<<FRZCLK) | (1<<OTGPADE)); //0xB0 Strom sparen
//starte PLL
PLLCSR = ((1<<PLLP2) | (1<<PLLP1));// 0x0C Vorteiler 16MHz Quarz
AT90USB1287
PLLCSR = ((1<<PLLP2) | (1<<PLLP1)| (1<<PLLE)); //0x0E starte PLL
(PLLEnable=1)
while (!(PLLCSR &(1<<PLOCK))) // Warte bis PLOCK = 1 (PLL
eingerastet)
NOP();
USBCON = ((1<<USBE) | (1<<OTGPADE)); // 0x90 FRZCLK=0: aktiviere Takt
UDCON &= ~(1<<DETACH); // Attach: Verbinde das Device
UDIEN = (1<<EORSTE) | (1<<SUSPE) | (1<<EORSME) | (1<<SOFE);
//configure interrupt enables
sei(); // Interrupts global erlauben
}
Und dann in General Interrupt wird das Einrichten des Endpoints
aufgerufen und auch der SETUP interrupt aktiviert:
/*! \brief USB General Interrupt (S253)*/
ISR(USB_GEN_vect)
{
if (UDINT & (1<<EORSTI)) // End Of ReSeT?
{
SET_LED1();
CBI (UDINT,EORSTI); // sperre EORSTI
// Initialisiere EP0
usb_init_endpoint(0,Ep0_ty, Ep0_di, Ep0_si, Ep0_ba);
SBI(UEIENX,RXSTPE);
}
}
Vielen Dank für jegliche Hilfe.
Hab das Problem endlich gefunden! Der prescalar im datenblatt ist flasch angegeben für 16Mhz oszillator! PLLP2..0 sollten 101 sein anstatt 110, wie es im datenblatt angegeben ist!
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.