forked from auracaster/openocd
flash/nor, contrib/loaders: move numicro M4 write assembly to contrib/loaders
Simply move numicro M4 flash write assembly to contrib/loaders. Also, add corresponding Makefile and generated numicro_m4.inc. Signed-off-by: Jian-Hong Pan <chienhung.pan@gmail.com> Change-Id: I22b8be0a245857335b11bd0b538db415fc34748d Reviewed-on: https://review.openocd.org/c/openocd/+/7343 Tested-by: jenkins Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
This commit is contained in:
committed by
Antonio Borneo
parent
21b14028ad
commit
63336f4aaf
31
contrib/loaders/flash/numicro_m4/Makefile
Normal file
31
contrib/loaders/flash/numicro_m4/Makefile
Normal file
@@ -0,0 +1,31 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
BIN2C = ../../../../src/helper/bin2char.sh
|
||||
|
||||
CROSS_COMPILE ?= arm-none-eabi-
|
||||
|
||||
CC=$(CROSS_COMPILE)gcc
|
||||
OBJCOPY=$(CROSS_COMPILE)objcopy
|
||||
OBJDUMP=$(CROSS_COMPILE)objdump
|
||||
|
||||
|
||||
AFLAGS = -static -nostartfiles -mlittle-endian -mcpu=cortex-m4 -Wa,-EL
|
||||
|
||||
all: numicro_m4.inc
|
||||
|
||||
.PHONY: clean
|
||||
|
||||
%.elf: %.S
|
||||
$(CC) $(AFLAGS) $< -o $@
|
||||
|
||||
%.lst: %.elf
|
||||
$(OBJDUMP) -S $< > $@
|
||||
|
||||
%.bin: %.elf
|
||||
$(OBJCOPY) -Obinary $< $@
|
||||
|
||||
%.inc: %.bin
|
||||
$(BIN2C) < $< > $@
|
||||
|
||||
clean:
|
||||
-rm -f *.elf *.lst *.bin *.inc
|
||||
70
contrib/loaders/flash/numicro_m4/numicro_m4.S
Normal file
70
contrib/loaders/flash/numicro_m4/numicro_m4.S
Normal file
@@ -0,0 +1,70 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2017 Zale Yu *
|
||||
* CYYU@nuvoton.com *
|
||||
* *
|
||||
* Copyright (C) 2022 Jian-Hong Pan *
|
||||
* chienhung.pan@gmail.com *
|
||||
***************************************************************************/
|
||||
|
||||
.text
|
||||
.cpu cortex-m4
|
||||
.thumb
|
||||
|
||||
/* Params:
|
||||
* r0 - workarea buffer / result
|
||||
* r1 - target address
|
||||
* r2 - wordcount
|
||||
* Clobbered:
|
||||
* r4 - tmp
|
||||
* r5 - tmp
|
||||
* r6 - tmp
|
||||
* r7 - tmp
|
||||
*/
|
||||
|
||||
.L1:
|
||||
/* for(register uint32_t i=0;i<wcount;i++){ */
|
||||
mov r4, r0
|
||||
mov r3, #0
|
||||
.L2:
|
||||
sub r5, r1, r0
|
||||
add r7, r4, r5
|
||||
cmp r3, r2
|
||||
beq .L7
|
||||
.L4:
|
||||
/* NUMICRO_FLASH_ISPADR = faddr; */
|
||||
ldr r6, .L8
|
||||
str r7, [r6]
|
||||
/* NUMICRO_FLASH_ISPDAT = *pLW; */
|
||||
ldmia r4!, {r7}
|
||||
ldr r5, .L8+4
|
||||
str r7, [r5]
|
||||
/* faddr += 4; */
|
||||
/* pLW++; */
|
||||
/* Trigger write action */
|
||||
/* NUMICRO_FLASH_ISPTRG = ISPTRG_ISPGO; */
|
||||
ldr r5, .L8+8
|
||||
mov r6, #1
|
||||
str r6, [r5]
|
||||
.L3:
|
||||
/* while((NUMICRO_FLASH_ISPTRG & ISPTRG_ISPGO) == ISPTRG_ISPGO){}; */
|
||||
ldr r7, [r5]
|
||||
lsl r7, r7, #31
|
||||
bmi .L3
|
||||
|
||||
add r3, r3, #1
|
||||
b .L2
|
||||
.L7:
|
||||
/* return (NUMICRO_FLASH_ISPCON & ISPCON_ISPFF); */
|
||||
ldr r3, .L8+12
|
||||
ldr r0, [r3]
|
||||
mov r1, #64
|
||||
and r0, r1
|
||||
.L9:
|
||||
bkpt #0
|
||||
.L8:
|
||||
.word 0x4000C004
|
||||
.word 0x4000C008
|
||||
.word 0x4000C010
|
||||
.word 0x4000C000
|
||||
5
contrib/loaders/flash/numicro_m4/numicro_m4.inc
Normal file
5
contrib/loaders/flash/numicro_m4/numicro_m4.inc
Normal file
@@ -0,0 +1,5 @@
|
||||
/* Autogenerated with ../../../../src/helper/bin2char.sh */
|
||||
0x04,0x1c,0x00,0x23,0x0d,0x1a,0x67,0x19,0x93,0x42,0x0c,0xd0,0x08,0x4e,0x37,0x60,
|
||||
0x80,0xcc,0x08,0x4d,0x2f,0x60,0x08,0x4d,0x01,0x26,0x2e,0x60,0x2f,0x68,0xff,0x07,
|
||||
0xfc,0xd4,0x01,0x33,0xee,0xe7,0x05,0x4b,0x18,0x68,0x40,0x21,0x08,0x40,0x00,0xbe,
|
||||
0x04,0xc0,0x00,0x40,0x08,0xc0,0x00,0x40,0x10,0xc0,0x00,0x40,0x00,0xc0,0x00,0x40,
|
||||
Reference in New Issue
Block a user