update ldscript
[protos/xbee-avr.git] / main.c
diff --git a/main.c b/main.c
index 2bcb3ec..5f7a638 100644 (file)
--- a/main.c
+++ b/main.c
@@ -87,7 +87,7 @@ static void hexdump(const char *title, const void *buf, unsigned int len)
 #define LINE_LEN 80
        char line[LINE_LEN];    /* space needed 8+16*3+3+16 == 75 */
 
-       printf_P(PSTR("%s at [%p], len=%d\n"), title, data, len);
+       printf_P(PSTR("%s at [%p], len=%d\r\n"), title, data, len);
        ofs = 0;
        while (ofs < len) {
                /* format 1 line in the buffer, then use printk to print them */
@@ -499,24 +499,35 @@ void xbee_unload_timeout(struct xbee_ctx *ctx)
 
 void bootloader(void)
 {
-#define BOOTLOADER_ADDR 0x1f800
+#ifndef USE_USB
+#define BOOTLOADER_ADDR 0x3f000
        if (pgm_read_byte_far(BOOTLOADER_ADDR) == 0xff) {
                printf_P(PSTR("Bootloader is not present\r\n"));
                return;
        }
        cli();
        /* ... very specific :( */
+       TIMSK0 = 0;
+       TIMSK1 = 0;
+       TIMSK2 = 0;
+       TIMSK3 = 0;
+       TIMSK4 = 0;
+       TIMSK5 = 0;
        EIMSK = 0;
+       UCSR0B = 0;
+       UCSR1B = 0;
+       UCSR2B = 0;
+       UCSR3B = 0;
        SPCR = 0;
        TWCR = 0;
        ACSR = 0;
        ADCSRA = 0;
 
-       __asm__ __volatile__ ("ldi r31,0xf0\n");
+       EIND = 1;
+       __asm__ __volatile__ ("ldi r31,0xf8\n");
        __asm__ __volatile__ ("ldi r30,0x00\n");
-       __asm__ __volatile__ ("ijmp\n");
-
-       /* never returns */
+       __asm__ __volatile__ ("eijmp\n");
+#endif
 }
 
 void xbee_mainloop(void)
@@ -627,6 +638,7 @@ int main(void)
        cmdline_init();
 #ifndef USE_USB
        /* in usb mode, it's done in usb callback */
+       printf_P(PSTR("\r\n"));
        rdline_newline(&xbeeboard.rdl, xbeeboard.prompt);
 #endif
        callout_manager_init(&cm, get_time_ms);