Hallo Leute,
vielen Dank für eure Hilfe, leider habe ich das Problem immer noch nicht
gelöst. Zum Testzwecken, habe ich mal versucht die Bootloader-Adresse in
0x7000 umzuändern. Ohne Erfolg!
Wie ich aus dem Handbuch ATmega16/32u4 entnehmen kann, sollte das
IVSEL-Bit auf 1 gesetzt werden damit der Sprung zum Bootloader möglich
wird.
Leider war dieser Schritt auch nicht erfolgreich. Ich habe zusätzlich
noch 2 Zeilen hinzugefügt, die mir den Interrupt ein- bzw. ausschaltet.
Muß ich im Programm noch was ergänzen, damit es aus dem Programm zum
Bootloader springen kann? Hat jemand noch eine andere Idee?
Viele Grüsse
Rheingold
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include "usb_srs_hid_v1_2.h"
#include "TWI_IO.h"
struct struct_interrupt
{
uint8_t t0ocA;
} interrupt;
typedef void (*boot_reset_fptr_t)(void);
int main(void)
{
UINT Bootloader = 0;
sei();
boot_reset_fptr_t start_bootloader = (boot_reset_fptr_t) 0x3800;
//boot_reset_fptr_t start_bootloader = (boot_reset_fptr_t)
0x7000;
:
:
:
while(1)
{
uint8_t volatile port, port_alt;
// Portpins
port = ReadPortPins();
:
:
if(Bootloader==1)
{
cli();
MCUCR |= (1 << IVSEL); //IVSEL-Bit auf 1 setzen
sei();
start_bootloader(); //Sprung zur
//Bootloader Adresse
:
}
}