Mercurial > public > ostc4
comparison Small_CPU/Src/tm_stm32f4_otp.c @ 38:5f11787b4f42
include in ostc4 repository
author | heinrichsweikamp |
---|---|
date | Sat, 28 Apr 2018 11:52:34 +0200 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
37:ccc45c0e1ea2 | 38:5f11787b4f42 |
---|---|
1 /** | |
2 * |---------------------------------------------------------------------- | |
3 * | Copyright (C) Tilen Majerle, 2014 | |
4 * | | |
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 3 of the License, or | |
8 * | any later version. | |
9 * | | |
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 * | | |
15 * | You should have received a copy of the GNU General Public License | |
16 * | along with this program. If not, see <http://www.gnu.org/licenses/>. | |
17 * |---------------------------------------------------------------------- | |
18 */ | |
19 #include "tm_stm32f4_otp.h" | |
20 | |
21 HAL_StatusTypeDef TM_OTP_Write(uint8_t block, uint8_t byte, uint8_t data) | |
22 { | |
23 HAL_StatusTypeDef answer; | |
24 | |
25 /* Check input parameters */ | |
26 if ( | |
27 block >= OTP_BLOCKS || | |
28 byte >= OTP_BYTES_IN_BLOCK | |
29 ) { | |
30 /* Invalid parameters */ | |
31 return HAL_ERROR; | |
32 } | |
33 | |
34 if(*(uint8_t *)(OTP_START_ADDR + block * OTP_BYTES_IN_BLOCK + byte) != 0xFF) | |
35 return HAL_ERROR; | |
36 | |
37 /* Unlock FLASH */ | |
38 HAL_FLASH_Unlock(); | |
39 | |
40 answer = HAL_FLASH_Program(FLASH_TYPEPROGRAM_BYTE, (OTP_START_ADDR + block * OTP_BYTES_IN_BLOCK + byte), data); | |
41 | |
42 /* Lock FLASH */ | |
43 HAL_FLASH_Lock(); | |
44 | |
45 return answer; | |
46 } | |
47 | |
48 | |
49 uint8_t TM_OTP_Read(uint8_t block, uint8_t byte) { | |
50 uint8_t data; | |
51 | |
52 /* Check input parameters */ | |
53 if ( | |
54 block >= OTP_BLOCKS || | |
55 byte >= OTP_BYTES_IN_BLOCK | |
56 ) { | |
57 /* Invalid parameters */ | |
58 return HAL_ERROR; | |
59 } | |
60 | |
61 /* Get value */ | |
62 data = *(__IO uint8_t *)(OTP_START_ADDR + block * OTP_BYTES_IN_BLOCK + byte); | |
63 | |
64 /* Return data */ | |
65 return data; | |
66 } |