kopia lustrzana https://github.com/stlink-org/stlink
33 wiersze
1.0 KiB
ArmAsm
33 wiersze
1.0 KiB
ArmAsm
/* Adopted from STM AN4065 stm32f0xx_flash.c:FLASH_ProgramWord */
|
|
|
|
write:
|
|
ldr r4, STM32_FLASH_BASE
|
|
mov r5, #1 /* FLASH_CR_PG, FLASH_SR_BUSY */
|
|
mov r6, #4 /* PGERR */
|
|
write_half_word:
|
|
ldr r3, [r4, #16] /* FLASH->CR */
|
|
orr r3, r5
|
|
str r3, [r4, #16] /* FLASH->CR |= FLASH_CR_PG */
|
|
ldrh r3, [r0] /* r3 = *sram */
|
|
strh r3, [r1] /* *flash = r3 */
|
|
busy:
|
|
ldr r3, [r4, #12] /* FLASH->SR */
|
|
tst r3, r5 /* FLASH_SR_BUSY */
|
|
beq busy
|
|
|
|
tst r3, r6 /* PGERR */
|
|
bne exit
|
|
|
|
add r0, r0, #2 /* sram += 2 */
|
|
add r1, r1, #2 /* flash += 2 */
|
|
sub r2, r2, #0x01 /* count-- */
|
|
cmp r2, #0
|
|
bne write_half_word
|
|
exit:
|
|
ldr r3, [r4, #16] /* FLASH->CR */
|
|
bic r3, r5
|
|
str r3, [r4, #16] /* FLASH->CR &= ~FLASH_CR_PG */
|
|
bkpt #0x00
|
|
|
|
STM32_FLASH_BASE: .word 0x40022000
|