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.
281 lines
13 KiB
281 lines
13 KiB
10 months ago
|
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)
|