nrf5: Include generated loader code
Dump legacy hexadecimal machine code Change-Id: I336efa461058bccc3894131cb22473785b68479c Signed-off-by: Aurélien Martin <martaurel@gmail.com> Reviewed-on: http://openocd.zylin.com/5267 Tested-by: jenkins Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
This commit is contained in:
parent
5c6e32612d
commit
65d8fdf0d1
|
@ -0,0 +1,28 @@
|
||||||
|
BIN2C = ../../../../src/helper/bin2char.sh
|
||||||
|
|
||||||
|
CROSS_COMPILE ?= arm-none-eabi-
|
||||||
|
|
||||||
|
CC=$(CROSS_COMPILE)gcc
|
||||||
|
OBJCOPY=$(CROSS_COMPILE)objcopy
|
||||||
|
OBJDUMP=$(CROSS_COMPILE)objdump
|
||||||
|
|
||||||
|
CFLAGS = -static -nostartfiles -mlittle-endian -Wa,-EL
|
||||||
|
|
||||||
|
all: nrf5.inc
|
||||||
|
|
||||||
|
.PHONY: clean
|
||||||
|
|
||||||
|
%.elf: %.S
|
||||||
|
$(CC) $(CFLAGS) $< -o $@
|
||||||
|
|
||||||
|
%.lst: %.elf
|
||||||
|
$(OBJDUMP) -S $< > $@
|
||||||
|
|
||||||
|
%.bin: %.elf
|
||||||
|
$(OBJCOPY) -Obinary $< $@
|
||||||
|
|
||||||
|
%.inc: %.bin
|
||||||
|
$(BIN2C) < $< > $@
|
||||||
|
|
||||||
|
clean:
|
||||||
|
-rm -f *.elf *.lst *.bin *.inc
|
|
@ -0,0 +1,55 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2014 Angus Gratton *
|
||||||
|
* gus@projectgus.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. *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
.text
|
||||||
|
.syntax unified
|
||||||
|
.thumb
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Params :
|
||||||
|
* r0 = byte count
|
||||||
|
* r1 = buffer start
|
||||||
|
* r2 = buffer end
|
||||||
|
* r3 = target address
|
||||||
|
*/
|
||||||
|
|
||||||
|
.thumb_func
|
||||||
|
.global _start
|
||||||
|
_start:
|
||||||
|
wait_fifo:
|
||||||
|
ldr r5, [r1, #0]
|
||||||
|
cmp r5, #0
|
||||||
|
beq.n exit
|
||||||
|
ldr r4, [r1, #4]
|
||||||
|
cmp r4, r5
|
||||||
|
beq.n wait_fifo
|
||||||
|
ldmia r4!, {r5}
|
||||||
|
stmia r3!, {r5}
|
||||||
|
cmp r4, r2
|
||||||
|
bcc.n no_wrap
|
||||||
|
mov r4, r1
|
||||||
|
adds r4, #8
|
||||||
|
no_wrap:
|
||||||
|
str r4, [r1, #4]
|
||||||
|
subs r0, #4
|
||||||
|
bne.n wait_fifo
|
||||||
|
exit:
|
||||||
|
bkpt #0x00
|
||||||
|
|
||||||
|
.pool
|
|
@ -0,0 +1,3 @@
|
||||||
|
/* Autogenerated with ../../../../src/helper/bin2char.sh */
|
||||||
|
0x0d,0x68,0x00,0x2d,0x0b,0xd0,0x4c,0x68,0xac,0x42,0xf9,0xd0,0x20,0xcc,0x20,0xc3,
|
||||||
|
0x94,0x42,0x01,0xd3,0x0c,0x46,0x08,0x34,0x4c,0x60,0x04,0x38,0xf0,0xd1,0x00,0xbe,
|
|
@ -900,30 +900,6 @@ static int nrf5_erase_page(struct flash_bank *bank,
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const uint8_t nrf5_flash_write_code[] = {
|
|
||||||
/* See contrib/loaders/flash/cortex-m0.S */
|
|
||||||
/* <wait_fifo>: */
|
|
||||||
0x0d, 0x68, /* ldr r5, [r1, #0] */
|
|
||||||
0x00, 0x2d, /* cmp r5, #0 */
|
|
||||||
0x0b, 0xd0, /* beq.n 1e <exit> */
|
|
||||||
0x4c, 0x68, /* ldr r4, [r1, #4] */
|
|
||||||
0xac, 0x42, /* cmp r4, r5 */
|
|
||||||
0xf9, 0xd0, /* beq.n 0 <wait_fifo> */
|
|
||||||
0x20, 0xcc, /* ldmia r4!, {r5} */
|
|
||||||
0x20, 0xc3, /* stmia r3!, {r5} */
|
|
||||||
0x94, 0x42, /* cmp r4, r2 */
|
|
||||||
0x01, 0xd3, /* bcc.n 18 <no_wrap> */
|
|
||||||
0x0c, 0x46, /* mov r4, r1 */
|
|
||||||
0x08, 0x34, /* adds r4, #8 */
|
|
||||||
/* <no_wrap>: */
|
|
||||||
0x4c, 0x60, /* str r4, [r1, #4] */
|
|
||||||
0x04, 0x38, /* subs r0, #4 */
|
|
||||||
0xf0, 0xd1, /* bne.n 0 <wait_fifo> */
|
|
||||||
/* <exit>: */
|
|
||||||
0x00, 0xbe /* bkpt 0x0000 */
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/* Start a low level flash write for the specified region */
|
/* Start a low level flash write for the specified region */
|
||||||
static int nrf5_ll_flash_write(struct nrf5_info *chip, uint32_t address, const uint8_t *buffer, uint32_t bytes)
|
static int nrf5_ll_flash_write(struct nrf5_info *chip, uint32_t address, const uint8_t *buffer, uint32_t bytes)
|
||||||
{
|
{
|
||||||
|
@ -935,6 +911,10 @@ static int nrf5_ll_flash_write(struct nrf5_info *chip, uint32_t address, const u
|
||||||
struct armv7m_algorithm armv7m_info;
|
struct armv7m_algorithm armv7m_info;
|
||||||
int retval = ERROR_OK;
|
int retval = ERROR_OK;
|
||||||
|
|
||||||
|
static const uint8_t nrf5_flash_write_code[] = {
|
||||||
|
#include "../../../contrib/loaders/flash/nrf5/nrf5.inc"
|
||||||
|
};
|
||||||
|
|
||||||
LOG_DEBUG("Writing buffer to flash address=0x%"PRIx32" bytes=0x%"PRIx32, address, bytes);
|
LOG_DEBUG("Writing buffer to flash address=0x%"PRIx32" bytes=0x%"PRIx32, address, bytes);
|
||||||
assert(bytes % 4 == 0);
|
assert(bytes % 4 == 0);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue