Forum: Mikrocontroller und Digitale Elektronik Atmel AVR USB Bootloader per Software starten - funktioniert nicht


von Rico F. (rico90)


Lesenswert?

Hallo Zusammen,

ich habe folgendes Problem. Vorab sei gesagt, dass ich es schon seit 
mehreren Wochen mit mir rumschleppe und noch keine Lösung gefunden habe, 
auch hier im Forum steht nichts dazu.

Ich möchte den Atmel USB-Bootloader meines AT90USB1287 per Software 
starten, da die Buttons meiner Platine im verbauten Zustand schwer 
zugänglich sind.

Dazu habe ich eine im Forum gefundene Funktion genutzt:

Funktionsvektor am Anfang des Codes:
1
void (*start_bootloader) (void)=(void (*)(void))0xf000;
Beim auswählen des Menüpunktes "Bootloader starten" wird folgende 
Funktion ausgeführt:
1
void bootloader()
2
{
3
  PORTB = 0x00; // drivers off
4
  PORTC = 0x00; // drivers off
5
   
6
  backlight_red = 0;     // backlight off
7
        backlight_green = 0; 
8
        backlight_blue = 0; 
9
        TCCR2B=0x00;                    // backlight timer off
10
  
11
  PORTD |= (1<<PD7); // GREEN on
12
  
13
  TIMSK0 = 0x00;
14
  TIMSK2 = 0x00;
15
16
   lcd_clear_area_xy(4,132,INVERT,0,0);
17
  lcd_put_string_xy(FONT_PROP_16,INVERT,"USB-Bootloader",0,20);
18
   lcd_put_string_xy(FONT_PROP_8,INVERT,"PC -> Serimus",2,34);
19
   lcd_put_string_xy(FONT_PROP_8,INVERT,"hard reset nach flashen!",3,8);
20
  SPCR &= ~(1<<SPE);    // turn SPI off
21
  _delay_ms(700);
22
   (*start_bootloader)();
23
}
So jetzt zu meinem Problem:
Am Anfang meines Projektes hat das Alles wunderbar funktioniert. Doch 
ich habe mich dann doch zu einer Software-PWM für meine 
Hintergrundbeleuchtung entschieden und den Timer 2 dazu benutzt. Diesen 
schalte ich in meiner GPIO-Initialisierungsroutine ein.
Wenn ich jetzt den Bootloader per SW starte kommt im PC nur eine 
Fehlermeldung dass das USB Gerät nicht richtig erkannt wurde. Wenn ich 
meinen ganzen Code so belasse, nur "TCCR2B |= (1<<CS20);" (aktivierung 
von Timer 2) auskommentiere funktioniert alles wieder.

Ich verstehe das ganze Problem nicht, da dies ein unlogisches Verhalten 
ist. Bei den anderen Timern ( 0, 1 & 3 ) funktioniert das auch, nur bei 
Timer 2 nicht. Selbst wenn ich ihn wie oben beschrieben vor start des 
Booltoaders deaktiviere. Ich habe schon sämtliche Kombinationen 
probiert, nur die auskommentierung der ersten Aktivierung hilft.

Nutzt jmd auch den USB-Bootloader per SW und hatz den Timer 2 in 
betrieb?

: Bearbeitet durch User
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.