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