NIIETCM4 PD  v0.10.5
Драйвер периферии для микроконтроллеров на базе ядра ARM Cortex-M4
 Указатель Структуры данных Файлы Функции Переменные Перечисления Элементы перечислений Группы Страницы
niietcm4_bootflash.c
См. документацию.
1 
30 /* Includes ------------------------------------------------------------------*/
31 #include "niietcm4_bootflash.h"
32 
65 #define LEVELS_NUMBER 5
66 
71 #define IS_VALID_FREQ(SYS_FREQ) ((SYS_FREQ) <= 100000000)
72 
87 void BOOTFLASH_Init(uint32_t SysClkFreq)
88 {
89  assert_param(IS_VALID_FREQ(SysClkFreq));
90 
91  /*
92  * The cycle checks the levels. With the level up Tacc increases.
93  */
94  uint32_t Tacc = 1;
95 
96  /*
97  * Таблица 7.3 – Значения параметра Tacc в зависимости от частоты.
98  */
99  const uint32_t Levels[LEVELS_NUMBER] = {15000000, 30000000, 48000000, 60000000, 80000000};
100 
101  for (uint32_t Index = 0; Index < LEVELS_NUMBER; Index++)
102  {
103  if (Levels[Index] < SysClkFreq)
104  {
105  Tacc++;
106  }
107  else
108  {
109  break;
110  }
111  }
112 
113  NT_BOOTFLASH->T_ACC = Tacc;
114  NT_BOOTFLASH->T_PROG = (uint32_t)(SysClkFreq * 0.00003F);
115  NT_BOOTFLASH->T_ERASE = (uint32_t)(SysClkFreq * 0.03F);
116  NT_BOOTFLASH->T_ME = (uint32_t)(SysClkFreq * 0.03F);
117 }
118 
126 {
128 
129  Status = BOOTFLASH_Status_None;
130 
131  NT_BOOTFLASH->FCIC = BOOTFLASH_FCIC_CLR_OPCMLT_Msk | BOOTFLASH_FCIC_CLR_OPERROR_Msk;
132  NT_BOOTFLASH->FMC = BOOTFLASH_MAGIC_KEY | BOOTFLASH_FMC_FULL_ERASE_Msk;
133 
134  while (Status == BOOTFLASH_Status_None)
135  {
136  Status = (BOOTFLASH_Status_TypeDef)(NT_BOOTFLASH->FCIS & (BOOTFLASH_FCIS_OP_CMLT_Msk | BOOTFLASH_FCIS_OP_ERROR_Msk));
137  }
138 
139  return Status;
140 }
141 
154 __RAMFUNC BOOTFLASH_Status_TypeDef BOOTFLASH_Write(uint32_t Address, uint32_t Data0, uint32_t Data1, uint32_t Data2, uint32_t Data3)
155 {
157 
158  Status = BOOTFLASH_Status_None;
159 
160  NT_BOOTFLASH->FCIC = BOOTFLASH_FCIC_CLR_OPCMLT_Msk | BOOTFLASH_FCIC_CLR_OPERROR_Msk;
161  NT_BOOTFLASH->FMA = Address;
162  NT_BOOTFLASH->FMD0 = Data0;
163  NT_BOOTFLASH->FMD1 = Data1;
164  NT_BOOTFLASH->FMD2 = Data2;
165  NT_BOOTFLASH->FMD3 = Data3;
166  NT_BOOTFLASH->FMC = BOOTFLASH_MAGIC_KEY | BOOTFLASH_FMC_WRITE_Msk;
167 
168  while (Status == BOOTFLASH_Status_None)
169  {
170  Status = (BOOTFLASH_Status_TypeDef)(NT_BOOTFLASH->FCIS & (BOOTFLASH_FCIS_OP_CMLT_Msk | BOOTFLASH_FCIS_OP_ERROR_Msk));
171  }
172 
173  return Status;
174 }
175 
184 {
185  assert_param(IS_BOOTFLASH_PAGE_NUM(PageNum));
186 
188 
189  Status = BOOTFLASH_Status_None;
190 
191  NT_BOOTFLASH->FCIC = BOOTFLASH_FCIC_CLR_OPCMLT_Msk | BOOTFLASH_FCIC_CLR_OPERROR_Msk;
192  NT_BOOTFLASH->FMA = PageNum * BOOTFLASH_PAGE_SIZE_BYTES;
193  NT_BOOTFLASH->FMC = BOOTFLASH_MAGIC_KEY | BOOTFLASH_FMC_PAGE_ERASE_Msk;
194 
195  while (Status == BOOTFLASH_Status_None)
196  {
197  Status = (BOOTFLASH_Status_TypeDef)(NT_BOOTFLASH->FCIS & (BOOTFLASH_FCIS_OP_CMLT_Msk | BOOTFLASH_FCIS_OP_ERROR_Msk));
198  }
199 
200  return Status;
201 }
202 
215 __RAMFUNC BOOTFLASH_Status_TypeDef BOOTFLASH_Info_Write(uint32_t Address, uint32_t Data0, uint32_t Data1, uint32_t Data2, uint32_t Data3)
216 {
218 
219  Status = BOOTFLASH_Status_None;
220 
221  NT_BOOTFLASH->FCIC = BOOTFLASH_FCIC_CLR_OPCMLT_Msk | BOOTFLASH_FCIC_CLR_OPERROR_Msk;
222  NT_BOOTFLASH->FMA = Address;
223  NT_BOOTFLASH->FMD0 = Data0;
224  NT_BOOTFLASH->FMD1 = Data1;
225  NT_BOOTFLASH->FMD2 = Data2;
226  NT_BOOTFLASH->FMD3 = Data3;
227  NT_BOOTFLASH->FMC = BOOTFLASH_MAGIC_KEY | BOOTFLASH_FMC_WRITE_IFB_Msk;
228 
229  while (Status == BOOTFLASH_Status_None)
230  {
231  Status = (BOOTFLASH_Status_TypeDef)(NT_BOOTFLASH->FCIS & (BOOTFLASH_FCIS_OP_CMLT_Msk | BOOTFLASH_FCIS_OP_ERROR_Msk));
232  }
233 
234  return Status;
235 }
236 
245 {
246  assert_param(IS_BOOTFLASH_INFO_PAGE_NUM(PageNum));
247 
249 
250  Status = BOOTFLASH_Status_None;
251 
252  NT_BOOTFLASH->FCIC = BOOTFLASH_FCIC_CLR_OPCMLT_Msk | BOOTFLASH_FCIC_CLR_OPERROR_Msk;
253  NT_BOOTFLASH->FMA = PageNum * BOOTFLASH_PAGE_SIZE_BYTES;
254  NT_BOOTFLASH->FMC = BOOTFLASH_MAGIC_KEY | BOOTFLASH_FMC_PAGEERASE_IFB_Msk;
255 
256  while (Status == BOOTFLASH_Status_None)
257  {
258  Status = (BOOTFLASH_Status_TypeDef)(NT_BOOTFLASH->FCIS & (BOOTFLASH_FCIS_OP_CMLT_Msk | BOOTFLASH_FCIS_OP_ERROR_Msk));
259  }
260 
261  return Status;
262 }
263 
272 {
273  assert_param(IS_FUNCTIONAL_STATE(State));
274 
275  NT_BOOTFLASH->FCIM_bit.MASK_OPCMLT = (uint32_t)State;
276 }
277 
294 /******************* (C) COPYRIGHT 2015 NIIET *****END OF FILE****/
#define IS_BOOTFLASH_INFO_PAGE_NUM(PAGE_NUM)
Макрос проверки номера страницы информационной области загрузочной флеш на попадание в допустимый диа...
#define IS_VALID_FREQ(SYS_FREQ)
Макрос проверки допустимости значения системной частоты.
BOOTFLASH_Status_TypeDef
Статус работы контроллера загрузочной флеш-памяти.
__RAMFUNC BOOTFLASH_Status_TypeDef BOOTFLASH_Write(uint32_t Address, uint32_t Data0, uint32_t Data1, uint32_t Data2, uint32_t Data3)
Запись 128 бит информации в основную область загрузочной флеш, начиная с указанного адреса...
__RAMFUNC BOOTFLASH_Status_TypeDef BOOTFLASH_FullErase(void)
Полная очистка основной области загрузочной флеш.
__RAMFUNC BOOTFLASH_Status_TypeDef BOOTFLASH_Info_PageErase(uint32_t PageNum)
Стирание указнной страницы информационной области загрузочной флеш.
Файл содержит все прототипы функций для загрузочной флеш.
__RAMFUNC BOOTFLASH_Status_TypeDef BOOTFLASH_Info_Write(uint32_t Address, uint32_t Data0, uint32_t Data1, uint32_t Data2, uint32_t Data3)
Запись 128 бит информации в информационную область загрузочной флеш, начиная с указанного адреса...
#define IS_BOOTFLASH_PAGE_NUM(PAGE_NUM)
Макрос проверки номера страницы основной области загрузочной флеш на попадание в допустимый диапазон...
FunctionalState
Описывает логическое состояние периферии. Используется для операций включения/выключения периферийных...
Definition: niietcm4.h:169
void BOOTFLASH_ITCmd(FunctionalState State)
Включение прерывания по завершению чтении/записи/стирания.
#define IS_FUNCTIONAL_STATE(STATE)
Макрос проверки аргументов типа FunctionalState.
Definition: niietcm4.h:179
void BOOTFLASH_Init(uint32_t SysClkFreq)
Инициализирует тайминги доступа для контроллера загрузочной флеш.
#define LEVELS_NUMBER
Количество уровней системной частоты (Таблица 7.3).
__RAMFUNC BOOTFLASH_Status_TypeDef BOOTFLASH_PageErase(uint32_t PageNum)
Стирание указнной страницы основной области загрузочной флеш.
#define BOOTFLASH_MAGIC_KEY
Ключ для проведения операций с контроллером загрузочной флеш.
#define BOOTFLASH_PAGE_SIZE_BYTES