You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
280 lines
13 KiB
280 lines
13 KiB
C51 COMPILER V9.54 MSP_EEPROM 09/06/2024 14:31:11 PAGE 1
|
|
|
|
|
|
C51 COMPILER V9.54, COMPILATION OF MODULE MSP_EEPROM
|
|
OBJECT MODULE PLACED IN ..\out\msp_eeprom.obj
|
|
COMPILER INVOKED BY: E:\KeilC51\C51\BIN\C51.EXE ..\source\msp\msp_eeprom.c LARGE OMF2 OPTIMIZE(0,SIZE) BROWSE ORDER NOIN
|
|
-TPROMOTE INCDIR(..\source\bsp;..\source\msp;..\source\app;..\source\clib;..\source\cpu;..\source\ctask;..\source\tpc;..\
|
|
-source\asp;..\source\debug;..\source\msp\uart;..\source\msp\simiic;..\source\bsp\oled;..\source\bsp\TTSSbsp) DEBUG PRINT
|
|
-(..\out\msp_eeprom.lst) TABS(2) OBJECT(..\out\msp_eeprom.obj)
|
|
|
|
line level source
|
|
|
|
1 ////////////////////////////////////////////////////////////////////////////
|
|
2 ///@copyright Copyright (c) 2018, ä¼ æŽ§ç§‘æŠ€ All rights reserved.
|
|
3 ///-------------------------------------------------------------------------
|
|
4 /// @file msp_eeprom.c
|
|
5 /// @brief msp @ driver config
|
|
6 ///-------------------------------------------------------------------------
|
|
7 /// @version 1.0
|
|
8 /// @author CC
|
|
9 /// @date 20190106
|
|
10 /// @note cc_AS_stc02 ç”±stc-isp v6.0860
|
|
11 //////////////////////////////////////////////////////////////////////////////
|
|
12
|
|
13 ///cc 2023/04/07--8:44:38
|
|
14 /*
|
|
15 EEPROM 的写æ“�作å�ªèƒ½å°†å—节ä¸çš„ 1 写为 0,当需è¦�å°†å—节ä¸çš„ 0 写为 1,则必须执è¡
|
|
-Œæ‰‡åŒº 擦除æ“�作。
|
|
16 EEPROM 的读/写æ“�作是以 1 å—节为å�•ä½�进行,而 EEPROM 擦除æ“�作是以 1 扇区(512 å—èŠ
|
|
-‚) 为å�•ä½�进行,
|
|
17 在执行擦除æ“�ä½œæ—¶ï¼Œå¦‚æžœç›®æ ‡æ‰‡åŒºä¸æœ‰éœ€è¦�ä¿�留的数æ�®ï¼Œåˆ™å¿…须预先将这些数æ�®è
|
|
-¯»å�–到 RAM 䏿š‚å˜ï¼Œ
|
|
18 待擦除完æˆ�å�Žå†�å°†ä¿�å˜çš„æ•°æ�®å’Œéœ€è¦�更新的数æ�®ä¸€èµ·å†�写回
|
|
19 EEPROM Write operation can only write 1 in the byte as 0, when you need to write 0 in the byte as 1,
|
|
20 you must be sector erased. EEPROM Read / write operation is conducted in 1 byte,
|
|
21 while EEPROM, erasure operation is conducted in 1 sector (512 bytes). During the wipe operation,
|
|
22 if the data in the target sector, the data must be read in the RAM in advance,
|
|
23 and the saved data will be written back together with the data to be updated
|
|
24
|
|
25 fixme:注�时钟和flash 相关 �时关注掉电和容错
|
|
26
|
|
27 */
|
|
28
|
|
29 #include "msp_eeprom.h"
|
|
*** WARNING C320 IN LINE 51 OF ..\source\bsp\TTSSbsp\bsp_config.h: "MainFre_22M"
|
|
30
|
|
31 #include "debug_drv.h"
|
|
32
|
|
33 #if(TYPE_MCU == TYPE_MCU_STC_8A || TYPE_MCU == TYPE_MCU_STC_8F)
|
|
xxx
|
|
#define WT_30M 0x80
|
|
#define WT_24M 0x81
|
|
#define WT_20M 0x82
|
|
#define WT_12M 0x83
|
|
#define WT_6M 0x84
|
|
#define WT_3M 0x85
|
|
#define WT_2M 0x86
|
|
#define WT_1M 0x87
|
|
|
|
sdfasdfasdf
|
|
void L0_Iap_Idle()
|
|
{
|
|
IAP_CONTR = 0; //å…³é—IAP功能
|
|
IAP_CMD = 0; //清除命令寄å˜å™¨
|
|
C51 COMPILER V9.54 MSP_EEPROM 09/06/2024 14:31:11 PAGE 2
|
|
|
|
IAP_TRIG = 0; //清除触å�‘寄å˜å™¨
|
|
IAP_ADDRH = 0x80; //将地�设置到�IAP区域
|
|
IAP_ADDRL = 0;
|
|
}
|
|
|
|
char L0_Iap_Read(vU16 addr)
|
|
{
|
|
char dat;
|
|
|
|
IAP_CONTR = WT_12M; //使能IAP
|
|
IAP_CMD = 1; //设置IAP读命令
|
|
IAP_ADDRL = addr; //设置IAP低地�
|
|
IAP_ADDRH = addr >> 8; //设置IAP高地�
|
|
IAP_TRIG = 0x5a; //写触�命令(0x5a)
|
|
IAP_TRIG = 0xa5; //写触�命令(0xa5)
|
|
_nop_();
|
|
dat = IAP_DATA; //读IAP数�
|
|
L0_Iap_Idle(); //å…³é—IAP功能
|
|
|
|
return dat;
|
|
}
|
|
|
|
void L0_Iap_Program(vU16 addr, char dat)
|
|
{
|
|
IAP_CONTR = WT_12M; //使能IAP
|
|
IAP_CMD = 2; //设置IAP写命令
|
|
IAP_ADDRL = addr; //设置IAP低地�
|
|
IAP_ADDRH = addr >> 8; //设置IAP高地�
|
|
IAP_DATA = dat; //写IAP数�
|
|
IAP_TRIG = 0x5a; //写触�命令(0x5a)
|
|
IAP_TRIG = 0xa5; //写触�命令(0xa5)
|
|
_nop_();
|
|
L0_Iap_Idle(); //å…³é—IAP功能
|
|
}
|
|
|
|
///æ¯�个扇区512å—节
|
|
///指定地��以为当�扇区内的任�地�,都会完整擦除当�扇区
|
|
void L0_Iap_Erase(vU16 addr)
|
|
{
|
|
IAP_CONTR = WT_12M; //使能IAP
|
|
IAP_CMD = 3; //设置IAP擦除命令
|
|
IAP_ADDRL = addr; //设置IAP低地�
|
|
IAP_ADDRH = addr >> 8; //设置IAP高地�
|
|
IAP_TRIG = 0x5a; //写触�命令(0x5a)
|
|
IAP_TRIG = 0xa5; //写触�命令(0xa5)
|
|
_nop_(); //
|
|
L0_Iap_Idle(); //å…³é—IAP功能
|
|
}
|
|
|
|
#elif (TYPE_MCU == TYPE_MCU_STC_8G || TYPE_MCU == TYPE_MCU_STC_8H)
|
|
99 void L0_Iap_Idle()
|
|
100 {
|
|
101 1 IAP_CONTR = 0; //å…³é—IAP功能
|
|
102 1 IAP_CMD = 0; //清除命令寄å˜å™¨
|
|
103 1 IAP_TRIG = 0; //清除触å�‘寄å˜å™¨
|
|
104 1 IAP_ADDRH = 0x80; //将地�设置到�IAP区域
|
|
105 1 IAP_ADDRL = 0;
|
|
106 1 }
|
|
107
|
|
108 char L0_Iap_Read(vU16 addr)
|
|
109 {
|
|
110 1 char dat;
|
|
C51 COMPILER V9.54 MSP_EEPROM 09/06/2024 14:31:11 PAGE 3
|
|
|
|
111 1
|
|
112 1 IAP_CONTR = 0x80; //使能IAP
|
|
113 1 IAP_TPS = 12;
|
|
114 1 IAP_CMD = 1; //设置IAP读命令
|
|
115 1 IAP_ADDRL = addr; //设置IAP低地�
|
|
116 1 IAP_ADDRH = addr >> 8; //设置IAP高地�
|
|
117 1 IAP_TRIG = 0x5a; //写触�命令(0x5a)
|
|
118 1 IAP_TRIG = 0xa5; //写触�命令(0xa5)
|
|
119 1 _nop_();
|
|
120 1 dat = IAP_DATA; //读IAP数�
|
|
121 1 L0_Iap_Idle(); //å…³é—IAP功能
|
|
122 1
|
|
123 1 return dat;
|
|
124 1 }
|
|
125
|
|
126 void L0_Iap_Program(vU16 addr, char dat)
|
|
127 {
|
|
128 1 IAP_CONTR = 0x80; //使能IAP
|
|
129 1 IAP_TPS = 12; //设置擦除ç‰å¾…å�‚æ•° 12MHz
|
|
130 1 IAP_CMD = 2; //设置IAP写命令
|
|
131 1 IAP_ADDRL = addr; //设置IAP低地�
|
|
132 1 IAP_ADDRH = addr >> 8; //设置IAP高地�
|
|
133 1 IAP_DATA = dat; //写IAP数�
|
|
134 1 IAP_TRIG = 0x5a; //写触�命令(0x5a)
|
|
135 1 IAP_TRIG = 0xa5; //写触�命令(0xa5)
|
|
136 1 _nop_();
|
|
137 1 L0_Iap_Idle(); //å…³é—IAP功能
|
|
138 1 }
|
|
139
|
|
140 ///æ¯�个扇区512å—节
|
|
141 ///指定地��以为当�扇区内的任�地�,都会完整擦除当�扇区
|
|
142 void L0_Iap_Erase(vU16 addr)
|
|
143 {
|
|
144 1 IAP_CONTR = 0x80; //使能IAP
|
|
145 1 IAP_TPS = 12; //设置擦除ç‰å¾…å�‚æ•° 12MHz
|
|
146 1 IAP_CMD = 3; //设置IAP擦除命令
|
|
147 1 IAP_ADDRL = addr; //设置IAP低地�
|
|
148 1 IAP_ADDRH = addr >> 8; //设置IAP高地�
|
|
149 1 IAP_TRIG = 0x5a; //写触�命令(0x5a)
|
|
150 1 IAP_TRIG = 0xa5; //写触�命令(0xa5)
|
|
151 1 _nop_(); //
|
|
152 1 L0_Iap_Idle(); //å…³é—IAP功能
|
|
153 1 }
|
|
154 #endif
|
|
155
|
|
156
|
|
157 void L0_Iap_Program_array(vU16 addr,U8 *buf,U8 len)
|
|
158 {
|
|
159 1 U8 i = 0;
|
|
160 1 L0_Iap_Erase(addr);/////fixme: 需è¦�å’Œaddré…�å�ˆå¥½ 一次就擦除512å—节
|
|
161 1 for(i=0;i<len;i++)
|
|
162 1 {
|
|
163 2 L0_Iap_Program(addr + i,buf[i]);
|
|
164 2 }
|
|
165 1 }
|
|
166
|
|
167 void L0_Iap_Read_array(vU16 addr,U8 *buf,U8 len)
|
|
168 {
|
|
169 1 U8 i = 0;
|
|
170 1 for(i = 0;i < len;i ++)
|
|
171 1 {
|
|
172 2 buf[i] = L0_Iap_Read(addr + i);
|
|
C51 COMPILER V9.54 MSP_EEPROM 09/06/2024 14:31:11 PAGE 4
|
|
|
|
173 2 }
|
|
174 1 /// L1_uartD_uchexArray(buf,len);
|
|
175 1 }
|
|
176
|
|
177 /****************************************************
|
|
178
|
|
179 U_F16 uf_ee_add;
|
|
180
|
|
181 //// AX CMD R2 R3 R4
|
|
182 /// Ae 01 01 03 04
|
|
183 ///L3_GC032A_fun
|
|
184 // bsp/bsp_debug
|
|
185 void L1_Iap_main(void)
|
|
186 {
|
|
187
|
|
188 int i;char m;
|
|
189 L0_Iap_Erase(0);
|
|
190
|
|
191
|
|
192 for(i = 0;i <100; i++)
|
|
193 {
|
|
194 L0_Iap_Program(i,i);
|
|
195 }
|
|
196 for(i = 0;i <200; i++)
|
|
197 {
|
|
198 m = L0_Iap_Read(i);
|
|
199 L0_uart0_uc(m);
|
|
200 }
|
|
201
|
|
202 /// while(1);
|
|
203
|
|
204
|
|
205
|
|
206 }
|
|
207
|
|
208 ///
|
|
209 void L3_eeprom_fun(U8 *pPara)
|
|
210 {
|
|
211 TS_P_debug *p = pPara;
|
|
212 switch(p->cmd)
|
|
213 {
|
|
214 //Ae 03 03 04 00
|
|
215 //xx 03 R2 R3 xx
|
|
216 case 4:
|
|
217 L0_Iap_Erase(uf_ee_add.us);
|
|
218 break;
|
|
219 case 5:
|
|
220 L0_Iap_Program(uf_ee_add.us,p->R2);
|
|
221 break;
|
|
222 case 6:
|
|
223 L0_uart0_uc(L0_Iap_Read(uf_ee_add.us));
|
|
224 break;
|
|
225 case 7:///选择地�
|
|
226 uf_ee_add.BYTE2.H = p->R2; //h
|
|
227 uf_ee_add.BYTE2.L = p->R3; //L
|
|
228 break;
|
|
229 default:
|
|
230 break;
|
|
231 };
|
|
232 }
|
|
233
|
|
234
|
|
C51 COMPILER V9.54 MSP_EEPROM 09/06/2024 14:31:11 PAGE 5
|
|
|
|
235 ****************************************************/
|
|
236
|
|
237
|
|
238
|
|
|
|
|
|
MODULE INFORMATION: STATIC OVERLAYABLE
|
|
CODE SIZE = 390 ----
|
|
CONSTANT SIZE = ---- ----
|
|
XDATA SIZE = 22 ----
|
|
PDATA SIZE = ---- ----
|
|
DATA SIZE = ---- ----
|
|
IDATA SIZE = ---- ----
|
|
BIT SIZE = ---- ----
|
|
EDATA SIZE = ---- ----
|
|
HDATA SIZE = ---- ----
|
|
XDATA CONST SIZE = ---- ----
|
|
FAR CONST SIZE = ---- ----
|
|
END OF MODULE INFORMATION.
|
|
|
|
|
|
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
|
|
|