Skip to content
Permalink
develop
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time
.syntax unified
.text
/*
* Arguments:
* r0 - source memory ptr
* r1 - target memory ptr
* r2 - count of bytes
* r3 - flash register offset
*/
.global copy
copy:
/*
* These two NOPs here are a safety precaution, added by Pekka Nikander
* while debugging the STM32F05x support. They may not be needed, but
* there were strange problems with simpler programs, like a program
* that had just a breakpoint or a program that first moved zero to register r2
* and then had a breakpoint. So, it appears safest to have these two nops.
*
* Feel free to remove them, if you dare, but then please do test the result
* rigorously. Also, if you remove these, it may be a good idea first to
* #if 0 them out, with a comment when these were taken out, and to remove
* these only a few months later... But YMMV.
*/
nop
nop
# load flash control register address
# add r3 to flash_base for support dual bank (see flash_loader.c)
ldr r7, flash_base
add r7, r7, r3
ldr r5, flash_off_sr
add r5, r5, r7
loop:
# copy 2 bytes
ldrh r4, [r0]
strh r4, [r1]
# increment address
adds r0, r0, #0x2
adds r1, r1, #0x2
# BUSY flag
ldr r7, =0x01
wait:
# get FLASH_SR
ldr r4, [r5]
# wait until BUSY flag is reset
tst r4, r7
bne wait
# test PGERR or WRPRTERR flag is reset
ldr r7, =0x14
tst r4, r7
bne exit
# loop if count > 0
subs r2, r2, #0x2
bgt loop
exit:
bkpt
.align 2
flash_base:
.word 0x40022000
flash_off_sr:
.word 0x0c