Описание библиотеки микросхемы 5023ВС016 процессора "Спутник"
flash.c
См. документацию.
1 
29 #include "chip_5023BC016.h"
30 #include "system.h"
31 #include "flash.h"
32 
33 /* Функция для получения статуса операций записи и стирания */
34 uint8_t FLASH_CheckStatus(void)
35 {
36  uint16_t DQ6T0, DQ6T1, DQ5;
37  do {
38  DQ6T0 = *((uint16_t*)(0x0000FB00));
39  DQ6T1 = *((uint16_t*)(0x0000FB00));
40 // DQ5 = *((uint16_t*)(0x00000FB00));
41  } while ((DQ6T0 != DQ6T1));// && (!DQ5));
42  return 0;//DQ5;
43 }
44 uint8_t FLASH_CheckStatus_t(uint32_t timeout)
45 {
46  uint16_t DQ6T0, DQ6T1, DQ5;
47  do {
48  DQ6T0 = *((uint16_t*)(0x0000FB00));
49  DQ6T1 = *((uint16_t*)(0x0000FB00));
50 // DQ5 = *((uint16_t*)(0x00000FB00));
51  timeout--;
52  } while ((DQ6T0 != DQ6T1)&&(timeout!=0));// && (!DQ5));
53  return 0;//DQ5;
54 }
55 /* Функция для переключения флеш-памяти в режим чтения */
57 {
58  FLASH_PROG_REG0 = 0xAAAA;
59  FLASH_PROG_REG1 = 0x5555;
60  FLASH_PROG_REG_ANY = 0xF0F0;
61 }
62 
63 /* Функция для переключения флеш-памяти в режим AutoSelect */
64 void FLASH_AutoSelectMode(uint32_t* ManufacturerCode, uint32_t* DeviceCode)
65 {
66  FLASH_PROG_REG0 = 0xAAAA;
67  FLASH_PROG_REG1 = 0x5555;
68  FLASH_PROG_REG0 = 0x9090;
69  if (ManufacturerCode != _NULL) {
70  *ManufacturerCode = *(uint16_t *)(0x00000008);}
71  if (DeviceCode != _NULL) {
72  *DeviceCode = *(uint16_t *)(0x0000000A);}
73 }
74 
75 /* Функция записи 16-битного слова во флеш-память. */
76 uint8_t FLASH_Program(uint32_t Address, uint16_t Data)
77 {
78  FLASH_PROG_REG0 = 0xAAAA;
79  FLASH_PROG_REG1 = 0x5555;
80  FLASH_PROG_REG0 = 0xA0A0;
81  *(volatile uint16_t *)(Address) = Data;
82  return FLASH_CheckStatus_t(1000000000);
83 }
84 
85 /* Функция для переключения флеш-памяти в режим Bypass. */
87 {
88  FLASH_PROG_REG0 = 0xAAAA;
89  FLASH_PROG_REG1 = 0x5555;
90  FLASH_PROG_REG0 = 0x2020;
91 }
92 
93 /* Функция для записи 16-битного слова во флеш-память в режиме Bypass.*/
94 uint8_t FLASH_BypassProgram(uint32_t Address, uint16_t Data)
95 {
96  FLASH_PROG_REG_ANY = 0xA0A0;
97  *(volatile uint16_t *)(Address) = Data;
98 // return FLASH_CheckStatus();
99  return FLASH_CheckStatus_t(1000000);
100 
101  }
102 
103 /* Функция для выхода флеш-памяти из режима Bypass. */
105 {
106  FLASH_PROG_REG_ANY = 0x9090;
107  FLASH_PROG_REG_ANY = 0x0000;
108 }
109 
110 /* Функция стирания флеш-памяти. После стирания читается 0xFFFF */
111 uint8_t FLASH_ChipErase(void)
112 {
113  FLASH_PROG_REG0 = 0xAAAA;
114  FLASH_PROG_REG1 = 0x5555;
115  FLASH_PROG_REG0 = 0x8080;
116  FLASH_PROG_REG0 = 0xAAAA;
117  FLASH_PROG_REG1 = 0x5555;
118  FLASH_PROG_REG0 = 0x1010;
119  return FLASH_CheckStatus();
120 }
121 
122 /* Функция стирания блока флеш-памяти. После стирания читается 0xFFFF */
123 uint8_t FLASH_BlockErase(uint32_t BlockAddress)
124 {
125  FLASH_PROG_REG0 = 0xAAAA;
126  FLASH_PROG_REG1 = 0x5555;
127  FLASH_PROG_REG0 = 0x8080;
128  FLASH_PROG_REG0 = 0xAAAA;
129  FLASH_PROG_REG1 = 0x5555;
130  *(volatile uint16_t *)(BlockAddress) = 0x3030;
131  return FLASH_CheckStatus();
132 }
133 
134 /* Функция для приостановления стирания флеш-памяти */
136 {
137  FLASH_PROG_REG_ANY = 0xB0B0;
138 }
139 
140 /* Функция для возобновления стирания флеш-памяти */
142 {
143  FLASH_PROG_REG_ANY = 0x3030;
144 }
145 
146 /* Функция для переключения флеш-памяти в режим CFI */
147 void FLASH_CFIMode(void)
148 {
149  *(volatile uint16_t *)(0x000000AA) = 0x9898;
150 }
151 
152 /* Функция записи массива данных во флеш память по указанному адресу */
153 void FLASH_Write(uint32_t base_addr, uint8_t *data_ptr, uint16_t data_count)
154 {
155  for(uint16_t i = 0; i < data_count; i+=2) {
156  FLASH_Program((base_addr+i), *((uint16_t *)(data_ptr+i)));
157  for(int l =0;l<1000;l++);
158  }
159 }
160 
161 /* Функция записи массива данных во флеш память по указанному адресу в режиме Bypass*/
162 void FLASH_BypassWrite(uint32_t base_addr, uint8_t *data_ptr, uint16_t data_count)
163 {
165  for(uint16_t i = 0; i < data_count; i+=2) {
166  FLASH_BypassProgram((base_addr+i), *((uint16_t *)(data_ptr+i)));
167  for(int l =0;l<1000;l++);
168  }
170 
171 }
uint8_t FLASH_BlockErase(uint32_t BlockAddress)
Definition: flash.c:123
void FLASH_ReadResetMode(void)
Definition: flash.c:56
void FLASH_BypassReset(void)
Definition: flash.c:104
void FLASH_UnlockBypass(void)
Definition: flash.c:86
void FLASH_Write(uint32_t base_addr, uint8_t *data_ptr, uint16_t data_count)
Функция записи файла конфигурации памяти программ процессора(прошивки)
Definition: flash.c:153
#define FLASH_PROG_REG_ANY
Definition: flash.h:37
uint8_t FLASH_Program(uint32_t Address, uint16_t Data)
Definition: flash.c:76
uint8_t FLASH_CheckStatus_t(uint32_t timeout)
Definition: flash.c:44
void FLASH_BypassWrite(uint32_t base_addr, uint8_t *data_ptr, uint16_t data_count)
Definition: flash.c:162
Этот файл содержит описание адресного пространства микроконтроллера 5023ВС016.
void FLASH_EraseResume(void)
Definition: flash.c:141
#define FLASH_PROG_REG1
Definition: flash.h:36
void FLASH_EraseSuspend(void)
Definition: flash.c:135
uint8_t FLASH_BypassProgram(uint32_t Address, uint16_t Data)
Definition: flash.c:94
void FLASH_AutoSelectMode(uint32_t *ManufacturerCode, uint32_t *DeviceCode)
Definition: flash.c:64
Этот файл содержит структуры, макросы и функции необходимые для взаимодействия с регистрами общего на...
void FLASH_CFIMode(void)
Definition: flash.c:147
Этот файл содержит структуры, макросы и функции необходимые для взаимодействия с микросхемой параллел...
uint8_t FLASH_ChipErase(void)
Definition: flash.c:111
uint8_t FLASH_CheckStatus(void)
Definition: flash.c:34
#define FLASH_PROG_REG0
Definition: flash.h:35