Описание библиотеки микросхемы 5023ВС016 процессора "Спутник"
memory.c
См. документацию.
1 
29 #include "memory.h"
30 #include "chip_5023BC016.h"
31 #include "string.h"
32 #include "types.h"
33 
34 
35 
42 void MEM_ReadBlock32(uint32_t Addr, uint32_t *pBlock, uint32_t Size)
43 {
44  for(uint32_t OffSet = 0; OffSet < Size; OffSet++)
45  {
46  *pBlock = MEM_Read32(Addr+OffSet);
47  pBlock++;
48  }
49 }
50 
51 typedef enum
52 {
53  a,
54  b,
55 }TYPE_T;
56 
63 void MEM_WriteBlock32(uint32_t Addr, uint32_t *pBlock, uint32_t Size)
64 {
65  //TYPE_T a;
66  for(uint32_t OffSet = 0; OffSet < Size; OffSet++)
67  {
68  MEM_Write32( Addr+OffSet, *pBlock);
69  pBlock++;
70  }
71 }
72 
79 void MEM_ReadBlock16(uint32_t Addr, uint16_t *pBlock, uint32_t Size)
80 {
81  for(uint32_t OffSet = 0; OffSet < Size; OffSet++)
82  {
83  *pBlock = MEM_Read16(Addr+OffSet);
84  pBlock++;
85  }
86 }
87 
94 void MEM_WriteBlock16(uint32_t Addr, uint16_t *pBlock, uint32_t Size)
95 {
96  for(uint32_t OffSet = 0; OffSet < Size; OffSet++)
97  {
98  MEM_Write16( Addr+OffSet, *pBlock);
99  pBlock++;
100  }
101 }
102 
109 void MEM_ReadBlock8(uint32_t Addr, uint8_t *pBlock, uint32_t Size)
110 {
111  for(uint32_t OffSet = 0; OffSet < Size; OffSet++)
112  {
113  *pBlock = MEM_Read8(Addr+OffSet);
114  pBlock++;
115  }
116 }
117 
124 void MEM_WriteBlock8(uint32_t Addr, uint8_t *pBlock, uint32_t Size)
125 {
126  for(uint32_t OffSet = 0; OffSet < Size; OffSet++)
127  {
128  MEM_Write8( Addr+OffSet, *pBlock);
129  pBlock++;
130  }
131 }
132 
138 {
139  MEMORY_CONTROL_REGISTER->CE = MemChip;
140 }
141 
146 uint8_t MEM_GetChip()
147 {
148  return (uint8_t)(MEMORY_CONTROL_REGISTER->CE);
149 }
150 
155 {
156  CMN_REG->CACHE_HIGH_ADDR = 0x4ffff;
157  CMN_REG->CACHE_MAIN |= CACHE_ENABLE(1)|CACHE_READY(1);
158  for (int i = 0;i<4096;i++); // 4096 тактов - время включения
159 }
160 
165 {
166  CMN_REG->CACHE_MAIN = CACHE_ENABLE(0)|CACHE_READY(0);
167 }
168 
175 void Func_Scraber_Set(uint32_t rng_addr,
176  uint32_t prd_stop,
177  uint32_t prd_scan,
178  BLOCK_NUMBER number)
179 {
180  switch (number)
181  {
182  case BLOCK1:
183  CMN_REG->INTMEM_SCR_RNG_ADDR = rng_addr;
184  CMN_REG->INTMEM_SCR_PRD_STOP = prd_stop;
185  CMN_REG->INTMEM_SCR_PRD_SCAN = prd_scan;
186 
187  CMN_REG->INTMEMS_SCR_MAIN |= (1<<0);
188  break;
189  case BLOCK2:
190  CMN_REG->INTMEM2_SCR_RNG_ADDR = rng_addr;
191  CMN_REG->INTMEM2_SCR_PRD_STOP = prd_stop;
192  CMN_REG->INTMEM2_SCR_PRD_SCAN = prd_scan;
193 
194  CMN_REG->INTMEMS_SCR_MAIN |= (1<<1);
195  break;
196  default:
197  break;
198  }
199 }
200 
205 uint8_t MEM_GetPage()
206 {
207  return (uint8_t)(MEMORY_CONTROL_REGISTER->MEMADD);
208 }
209 
214 void MEM_SetPage(uint8_t NumPage)
215 {
216  MEMORY_CONTROL_REGISTER->MEMADD = (uint16_t)(NumPage);
217 }
218 
224 void MEM_Write8(uint32_t Addr, uint8_t Data)
225 {
226  *(uint8_t*)(MEMORY_DATA_ADDRESS_8 + Addr) = Data;
227 }
228 
234 void MEM_Write16(uint32_t Addr, uint16_t Data)
235 {
236  *(uint16_t*)(MEMORY_DATA_ADDRESS_16 + Addr) = Data;
237 }
238 
244 void MEM_Write32(uint32_t Addr, uint32_t Data)
245 {
246  *(uint32_t*)(MEMORY_DATA_ADDRESS_32 + Addr) = Data;
247 }
248 
254 uint8_t MEM_Read8(uint32_t Addr)
255 {
256  return *(uint8_t*)(MEMORY_DATA_ADDRESS_8 + Addr);
257 }
258 
264 uint16_t MEM_Read16(uint32_t Addr)
265 {
266  return *(uint16_t*)(MEMORY_DATA_ADDRESS_16 + Addr);
267 }
268 
274 uint32_t MEM_Read32(uint32_t Addr)
275 {
276  return *(uint32_t*)(MEMORY_DATA_ADDRESS_32 + Addr);
277 }
278 
Definition: memory.h:58
uint32_t MEM_Read32(uint32_t Addr)
Чтение четырех байтного слова
Definition: memory.c:274
Этот файл содержит структуры, макросы и функции необходимые для работы с дополнительными типами...
Этот файл содержит структуры, макросы и функции необходимые для работы с памятью. ...
uint8_t MEM_GetPage()
Взять установленную страницу памяти
Definition: memory.c:205
void Func_Scraber_Set(uint32_t rng_addr, uint32_t prd_stop, uint32_t prd_scan, BLOCK_NUMBER number)
Функция установки скраберов
Definition: memory.c:175
Definition: memory.h:59
TYPE_T
Definition: memory.c:51
Этот файл содержит описание адресного пространства микроконтроллера 5023ВС016.
#define CACHE_ENABLE(x)
Макросы для регистра CACHE_MAIN.
Definition: system.h:563
#define MEMORY_CONTROL_REGISTER
Структура регистров для переключения страниц MRAM.
Definition: memory.h:36
void MEM_Write16(uint32_t Addr, uint16_t Data)
Запись двух байтного слова
Definition: memory.c:234
#define MEMORY_DATA_ADDRESS_8
uint8_t*
Definition: memory.h:39
#define MEMORY_DATA_ADDRESS_16
uint16_t*
Definition: memory.h:38
void MEM_WriteBlock32(uint32_t Addr, uint32_t *pBlock, uint32_t Size)
Запись блок данных транзакциями по четыре байта
Definition: memory.c:63
void MEM_SetPage(uint8_t NumPage)
Установка страницы памяти
Definition: memory.c:214
uint16_t MEM_Read16(uint32_t Addr)
Чтение двух байтного слова
Definition: memory.c:264
#define MEMORY_DATA_ADDRESS_32
uint32_t*
Definition: memory.h:37
BLOCK_NUMBER
Блок памяти.
Definition: memory.h:56
void MEM_Write8(uint32_t Addr, uint8_t Data)
Запись байтного слова
Definition: memory.c:224
void MEM_WriteBlock8(uint32_t Addr, uint8_t *pBlock, uint32_t Size)
Запись блок данных транзакциями по одному байту
Definition: memory.c:124
void Func_Cache_Enable()
функция включения КЭШа
Definition: memory.c:154
Definition: memory.c:54
void MEM_ReadBlock16(uint32_t Addr, uint16_t *pBlock, uint32_t Size)
Чтение блок данных транзакциями по два байта
Definition: memory.c:79
enum MEMORY_CHIP_ MEMORY_CHIP
Тип микросхемы памяти.
void MEM_ReadBlock32(uint32_t Addr, uint32_t *pBlock, uint32_t Size)
Чтение блок данных транзакциями по четыре байта
Definition: memory.c:42
void MEM_WriteBlock16(uint32_t Addr, uint16_t *pBlock, uint32_t Size)
Запись блок данных транзакциями по два байта
Definition: memory.c:94
#define CACHE_READY(x)
Definition: system.h:564
void MEM_SetChip(MEMORY_CHIP MemChip)
Выбор микросхемы памяти
Definition: memory.c:137
uint8_t MEM_GetChip()
Взять выбранную микросхему
Definition: memory.c:146
#define CMN_REG
Указатель на структуру CMN_REG.
void MEM_Write32(uint32_t Addr, uint32_t Data)
Запись четырех байтного слова
Definition: memory.c:244
Definition: memory.c:53
uint8_t MEM_Read8(uint32_t Addr)
Чтение байтного слова
Definition: memory.c:254
void MEM_ReadBlock8(uint32_t Addr, uint8_t *pBlock, uint32_t Size)
Чтение блок данных транзакциями по одному байту
Definition: memory.c:109
void Func_Cache_Disable()
Функция выключения КЭШа
Definition: memory.c:164