|
- /*
- #####ECOSGPLCOPYRIGHTBEGIN####
- ## -------------------------------------------
- ## This file is part of eCos, the Embedded Configurable Operating System.
- ## Copyright (C) 2008 Øyvind Harboe
- ##
- ## eCos is free software; you can redistribute it and/or modify it under
- ## the terms of the GNU General Public License as published by the Free
- ## Software Foundation; either version 2 or (at your option) any later version.
- ##
- ## eCos is distributed in the hope that it will be useful, but WITHOUT ANY
- ## WARRANTY; without even the implied warranty of MERCHANTABILITY or
- ## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- ## for more details.
- ##
- ## You should have received a copy of the GNU General Public License along
- ## with eCos; if not, write to the Free Software Foundation, Inc.,
- ## 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
- ##
- ## As a special exception, if other files instantiate templates or use macros
- ## or inline functions from this file, or you compile this file and link it
- ## with other works to produce a work based on this file, this file does not
- ## by itself cause the resulting work to be covered by the GNU General Public
- ## License. However the source code for this file must still be made available
- ## in accordance with section (3) of the GNU General Public License.
- ##
- ## This exception does not invalidate any other reasons why a work based on
- ## this file might be covered by the GNU General Public License.
- ## -------------------------------------------
- #####ECOSGPLCOPYRIGHTEND####
- */
-
- /*
- Jump table for flash driver
-
- Registers in ARM callling convention is to place args in registers
- starting at r0.
-
- So for:
-
- void foo(int a, int b, int c).
-
- a=r0
- b=r1
- c=r2
-
-
- */
- .global _stack_base
- .global _stack_start
- .global _workarea
- .global _start
- .global _start_bss_clear
- _start:
- // offset=0
- // int erase(void *address, int len)
- ldr sp,=_stack_start
- bl erase
- nop // Stop CPU here using hw breakpoint
-
- // offset=0xc
- // int program(void *buffer, void *address, int len)
- ldr sp,=_stack_start
- bl program
- nop // Stop CPU here using hw breakpoint
-
- // offset=0x18
- ldr r0,=_workarea
- nop // Stop CPU here using hw breakpoint
-
- // offset=0x20
- // int init() - returns error message if the flash chip can't be detected
- ldr sp,=_stack_start
- bl init
- nop // Stop CPU here using hw breakpoint
-
- .section ".bss"
- .balign 4
- _stack_base:
- .rept 4096
- .byte 0
- .endr
- _stack_start:
- .balign 4
- _workarea:
- .rept 8192
- .byte 0
- .endr
- // NB!!! we clear bss while the stack is in use, so we start BSS clearing here !!! :-)
- _start_bss_clear:
|