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

C51 COMPILER V9.54 MSP_EEPROM 09/06/2024 11:24:46 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 11:24:46 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 11:24:46 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 11:24:46 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 11:24:46 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)