1 /***************************************************************************
2 * Copyright (C) 2015 by Ivan Meleca *
5 * Copyright (C) 2016 by Tomas Vanek *
8 * This program is free software; you can redistribute it and/or modify *
9 * it under the terms of the GNU General Public License as published by *
10 * the Free Software Foundation; either version 2 of the License, or *
11 * (at your option) any later version. *
13 * This program is distributed in the hope that it will be useful, *
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
16 * GNU General Public License for more details. *
17 ***************************************************************************/
20 * r0 = flash destination address in/out
22 * r2 = workarea start address
23 * r3 = workarea end address
39 /* old longword algo: 6.680 KiB/s @ adapter_khz 2000
40 * this async algo: 19.808 KiB/s @ adapter_khz 2000
49 ldr r6, [r2, #0] /* read wp */
50 cmp r6, #0 /* abort if wp == 0 */
53 ldr r5, [r2, #4] /* read rp */
54 cmp r5, r6 /* wait until rp != wp */
57 str r0, [r4, #FTFx_FCCOB3] /* set flash address */
59 strb r7, [r4, #FTFx_FCCOB0] /* flash command */
61 ldr r7, [r5] /* set longword data = *rp */
62 str r7, [r4, #FTFx_FCCOB7]
65 strb r7, [r4, #FTFx_FSTAT]
67 add r5, #4 /* rp += 4 */
68 cmp r5, r3 /* Wrap? */
74 str r5, [r2, #4] /* Store rp */
77 ldr r6, [r2, #0] /* read wp */
78 cmp r6, #0 /* abort if wp == 0 */
81 ldrb r6, [r4, #FTFx_FSTAT]
89 add r0, #4 /* flash address += 4, do not increment before err check */
91 sub r1, #1 /* word_count-- */
98 str r5, [r2, #4] /* set rp = 0 on error */