diff options
author | Keith Packard <keithp@keithp.com> | 2013-06-24 14:23:53 -0700 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2013-06-24 14:30:22 -0700 |
commit | 0dd148e388944d8d265da51d62806c4a00b2c13d (patch) | |
tree | e1212b3cbc0d5a77d0fe1d676e07f86fef91a52f /src/lpc/ao_interrupt.c | |
parent | 2568b36ae9d38ae1607ec08b84b06e0fe84bd3ba (diff) |
altos/lpc: Add boot loader
Support the USB boot loader, add USB pull-up support.
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src/lpc/ao_interrupt.c')
-rw-r--r-- | src/lpc/ao_interrupt.c | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/src/lpc/ao_interrupt.c b/src/lpc/ao_interrupt.c index b5e67007..c4dc7867 100644 --- a/src/lpc/ao_interrupt.c +++ b/src/lpc/ao_interrupt.c @@ -17,12 +17,25 @@ #include <ao.h> #include <string.h> +#include <ao_boot.h> + +#ifndef IS_FLASH_LOADER +#error Should define IS_FLASH_LOADER +#define IS_FLASH_LOADER 0 +#endif + +#if !IS_FLASH_LOADER +#define RELOCATE_INTERRUPT 1 +#endif extern void main(void); extern char __stack__; extern char __text_start__, __text_end__; extern char __data_start__, __data_end__; extern char __bss_start__, __bss_end__; +#if RELOCATE_INTERRUPT +extern char __interrupt_rom__, __interrupt_start__, __interrupt_end__; +#endif /* Interrupt functions */ @@ -35,10 +48,18 @@ void lpc_ignore_isr(void) { } -int x; - void start(void) { - x = 0; +#ifdef AO_BOOT_CHAIN + if (ao_boot_check_chain()) { +#ifdef AO_BOOT_PIN + ao_boot_check_pin(); +#endif + } +#endif +#if RELOCATE_INTERRUPT + memcpy(&__interrupt_start__, &__interrupt_rom__, &__interrupt_end__ - &__interrupt_start__); + lpc_scb.sysmemremap = LPC_SCB_SYSMEMREMAP_MAP_RAM << LPC_SCB_SYSMEMREMAP_MAP; +#endif memcpy(&__data_start__, &__text_end__, &__data_end__ - &__data_start__); memset(&__bss_start__, '\0', &__bss_end__ - &__bss_start__); main(); |