1 /***************************************************************************
2 * Copyright (C) 2014 by Ladislav Bábel *
3 * ladababel@seznam.cz *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) any later version. *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
14 ***************************************************************************/
16 #define INITIAL_UNLOCK 0x5A
17 #define MULTIPLE_UNLOCK 0xF2
19 #define FLASHCTRL_KEY 0x4002E0C0
20 #define FLASHCTRL_CONFIG 0x4002E000
21 #define FLASHCTRL_WRADDR 0x4002E0A0
22 #define FLASHCTRL_WRDATA 0x4002E0B0
23 #define BUSYF 0x00100000
26 /* Write the initial unlock value to KEY (0xA5) */
27 movs
r6, #INITIAL_UNLOCK
28 str
r6, [r0, #FLASHCTRL_KEY]
30 /* Write the multiple unlock value to KEY (0xF2) */
31 movs
r6, #MULTIPLE_UNLOCK
32 str
r6, [r0, #FLASHCTRL_KEY]
42 /* wait for BUSYF flag */
44 ldr
r6, [r0, #FLASHCTRL_CONFIG]
48 /* Write the destination address to WRADDR */
49 str
r4, [r0, #FLASHCTRL_WRADDR]
51 /* Write the data half-word to WRDATA in right-justified format */
53 str
r6, [r0, #FLASHCTRL_WRDATA]
58 /* wrap rp at end of buffer */
72 movs
r6, #MULTIPLE_LOCK
73 str
r6, [r0, #FLASHCTRL_KEY]
75 /* wait for BUSYF flag */
77 ldr
r6, [r0, #FLASHCTRL_CONFIG]