2008-02-28 03:30:06 -06:00
|
|
|
|
/***************************************************************************
|
|
|
|
|
* Copyright (C) 2008 <EFBFBD>yvind Harboe *
|
|
|
|
|
* oyvind.harboe@zylin.com *
|
|
|
|
|
* *
|
|
|
|
|
* This program 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 of the License, or *
|
|
|
|
|
* (at your option) any later version. *
|
|
|
|
|
* *
|
|
|
|
|
* This program 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 this program; if not, write to the *
|
|
|
|
|
* Free Software Foundation, Inc., *
|
|
|
|
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
|
|
|
|
***************************************************************************/
|
2008-02-28 02:25:46 -06:00
|
|
|
|
/*
|
|
|
|
|
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:
|