www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SETUP flag funktioniert nicht


Autor: M.S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: M.S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.