2 * Infineon XMC1000 flash sector erase check
4 * Copyright (c) 2016 Andreas Färber
6 * Based on XMC1100 AA-Step Reference Manual
13 .macro verify_block, nvmbase, addr, tmp, tmp2
17 str \tmp, [\addr, #0x0]
18 str \tmp, [\addr, #0x4]
19 str \tmp, [\addr, #0x8]
20 str \tmp, [\addr, #0xC]
22 busy_wait \nvmbase, \tmp, \tmp2
27 .macro erase_check, nvmbase, addr, end, tmp, tmp2
29 ldrh \tmp, [\nvmbase, #NVMCONF]
30 movs \tmp2, #NVMCONF_HRLEV_MASK
32 ands \tmp, \tmp, \tmp2
33 movs \tmp2, #NVMCONF_HRLEV_HRE
34 orrs \tmp, \tmp, \tmp2
35 strh \tmp, [\nvmbase, #NVMCONF]
37 movs \tmp, #NVMPROG_ACTION_VERIFY_CONTINUOUS
38 strh \tmp, [\nvmbase, #NVMPROG]
40 verify_block \nvmbase, \addr, \tmp, \tmp2
42 ldrh \tmp, [\nvmbase, #NVMSTATUS]
43 movs \tmp2, #NVMSTATUS_VERR_MASK
44 ands \tmp, \tmp, \tmp2
45 cmp \tmp, #NVMSTATUS_VERR_NOFAIL
48 adds \addr, \addr, #NVM_BLOCK_SIZE
52 movs \tmp, #NVMPROG_ACTION_IDLE
53 strh \tmp, [\nvmbase, #NVMPROG]
60 * r1 = e.g. 0x10001000
61 * r2 = e.g. 0x10002000
62 * NVMPROG.ACTION = 0x00
65 erase_check r0, r1, r2, r3, r4