AVR Bootloader in C - eine einfache Anleitung für XMEGA adaptieren

OP #3915503
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren