Hallo,
ich versuche gerade, "AVR Bootloader in C - eine einfache Anleitung" für 
einen ATXMEGA128A Rev. H zu adaptieren. Ich bin noch ganz am Anfang, 
habe aber schon die ersten Stolpersteine.
Die Fleury-Lib habe ich angepasst. Ich habe das ganze mal im Debug-Mode 
durchgetackert. Bis
1  | uart_puts("Hallo hier ist der Bootloader\n\r");
 | 
 läuft alles. Wenn ich dann in der uart_putc
1  |  USARTF0_CTRLA |= USART_DREINTLVL_LO_gc;
  | 
setze, gibt es irgendwie eine Art Reset, aber nur einmal. Das merke ich 
daran, das 0x55 ('U') vom Programmanfang zweimal gesendet wird. Auch 
funktioniert die UART-Ausgabe per Interrupt nicht.
Zusatzinfo: Atmel Studio 6, Fuse BOOTRST gesetzt (0), 
Projekteinstellungen->AVR/GNU Linker->Miscellanious->  -Ttext=0x10000
folgender Code:
1  | int main()
  | 
2  | {
 | 
3  |     unsigned int  c=0;               /* Empfangenes Zeichen + Statuscode */
  | 
4  |     unsigned char  temp,              /* Variable */
  | 
5  |                     flag=1,            /* Flag zum steuern der Endlosschleife */
  | 
6  |           p_mode=0;     /* Flag zum steuern des Programmiermodus */
  | 
7  |     
  | 
8  |   void (*start)( void ) = 0x0000;        /* Funktionspointer auf 0x0000 */
  | 
9  |  
  | 
10  |     /* Interrupt Vektoren verbiegen */
  | 
11  |  
  | 
12  |   SYS_CLK_Init();
  | 
13  |     
  | 
14  |   PORTH.DIRSET = PIN4_bm;  //Periphery on
  | 
15  |   PORTH.OUTSET = PIN4_bm;
  | 
16  |     
  | 
17  |   PORTJ.DIRSET = PIN2_bm | PIN1_bm | PIN0_bm;
  | 
18  |   PORTJ.OUTTGL = PIN2_bm | PIN1_bm | PIN0_bm;
  | 
19  |   
  | 
20  |   PORTF.DIRSET = PIN3_bm;  // PORTF3 (TX) as output
  | 
21  |   PORTF.DIRCLR = PIN2_bm;  // PORTF2 (RX) as input
  | 
22  |     
  | 
23  |   uart_init(); 
  | 
24  |   USARTF0_DATA = 0x55;
  | 
25  |     
  | 
26  |   char sregtemp = SREG;
  | 
27  |   cli();
  | 
28  |     
  | 
29  |   PMIC.CTRL |= PMIC_LOLVLEN_bm;   // Enable PMIC interrupt levels
  | 
30  |   
  | 
31  |   temp = PMIC.CTRL | PMIC_IVSEL_bm;
  | 
32  |   CCP = CCP_IOREG_gc;
  | 
33  |   PMIC.CTRL = temp;
  | 
34  |   
  | 
35  |   SREG = sregtemp;
  | 
36  |   
  | 
37  |   /* Einstellen der Baudrate und aktivieren der Interrupts */
  | 
38  |     
  | 
39  |     
  | 
40  |   sei();
  | 
41  |  
  | 
42  |   uart_puts("Hallo hier ist der Bootloader\n\r");
 | 
43  |     _delay_ms(1000);
  | 
44  |   
  | 
45  |   while(1);
  | 
46  | }
  | 
Für hilfreiche Tipps wäre ich sehr dankbar.
Grüße, Alex