ZDBMS/output/McuLib.lst

387 lines
17 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

C51 COMPILER V9.01 MCULIB 02/13/2025 10:07:28 PAGE 1
C51 COMPILER V9.01, COMPILATION OF MODULE MCULIB
OBJECT MODULE PLACED IN .\output\McuLib.obj
COMPILER INVOKED BY: D:\Tool\Keil\C51\BIN\C51.EXE code_drv\McuLib.c LARGE OPTIMIZE(7,SIZE) REGFILE(.\output\MCUCore_Load
-.ORC) BROWSE INTVECTOR(0X1000) INCDIR(.\header_app;.\header_drv;.\code_gasguage;.\code_classb\iec60730_lib\include;.\cod
-e_classb\iec60730_proc\Include;.\code_classb\config) DEBUG OBJECTEXTEND PRINT(.\output\McuLib.lst) OBJECT(.\output\McuLi
-b.obj)
line level source
1 /********************************************************************************
2 Copyright (C), Sinowealth Electronic. Ltd.
3 Author: Sino
4 Version: V0.0
5 Date: 2020/04/26
6 History:
7 V2.0 2020/04/26 Preliminary
8 ********************************************************************************/
9 #include "Main.h"
10
11
12
13 /*************************************************************************************************
14 * 函数名: McuTimer3Set
15 * 参 数: ClkSource: 定时器的基准源分别为32KHz128KHz24MHz的系统时钟
16 XmS定时器周期当周期小于1000mS时可选择以上三个时钟当周期大于1000mS时只能选择32KHz和128K
-Hz
17 * 返回值: 无
18 * 描 述: 初始化Timer3定时器并开启定时器
19 *************************************************************************************************/
20 void McuTimer3Set(U8 ClkSource, U16 XmS)
21 {
22 1 U16 TempVal;
23 1
24 1 McuBank1Sel();
25 1
26 1 // if(ClkSource == TIM_CLK_32KHz)
27 1 // {
28 1 // if(XmS < 1000)
29 1 // {
30 1 // T3CON = 0x02; //外部32.768kHz为时钟源1分频最大2S
31 1 // TempVal = (U32)0x10000 - (U32)32.768*XmS;
32 1 // }
33 1 // else
34 1 // {
35 1 // T3CON = 0x22; //外部32.768kHz为时钟源64分频最大128s
36 1 // TempVal = 0x10000 - (U32)32.768*XmS/64;
37 1 // }
38 1 // }
39 1 // else if(ClkSource == TIM_CLK_128KHz)
40 1 // {
41 1 // if(XmS < 4000)
42 1 // {
43 1 // T3CON = 0x12; //外部128kHz为时钟源8分频最大4.096S
44 1 // TempVal = 0x10000 - (U32)128*XmS/8;
45 1 // }
46 1 // else
47 1 // {
48 1 // T3CON = 0x32; //外部128kHz为时钟源256分频最大131.072S
49 1 // TempVal = 0x10000 - (U32)128*XmS/256;
50 1 // }
51 1 // }
C51 COMPILER V9.01 MCULIB 02/13/2025 10:07:28 PAGE 2
52 1 // else if(ClkSource == TIM_CLK_24MHz)
53 1 // {
54 1 // if(XmS < 500)
55 1 // {
56 1 // T3CON = 0x30; //系统24MHz为时钟源256分频最大669.5ms
57 1 // TempVal = 0x10000 - (U32)24000*XmS/256;
58 1 // }
59 1 // else
60 1 // {
61 1 // T3CON = 0x32; //外部128kHz为时钟源256分频最大131.072S
62 1 // TempVal = 0x10000 - (U32)128*XmS/256;
63 1 // }
64 1 // }
65 1
66 1 //8MHz晶振
67 1 T3CON = 0x30; //系统8MHz为时钟源256分频最大669.5ms
68 1 TempVal = 0x10000 - (U32)8000*XmS/256;
69 1
70 1 TL3 = TempVal;
71 1 TH3 = TempVal>>8;
72 1 TR3 = 1; //启动定时器3
73 1
74 1 McuBank0Sel();
75 1 }
*** WARNING C280 IN LINE 20 OF CODE_DRV\MCULIB.C: 'ClkSource': unreferenced local variable
76
77
78 /*************************************************************************************************
79 * 函数名: McuClockSet
80 * 参 数: SysClock当前所需设置的系统时钟
81 * 返回值: 无
82 * 描 述: 初始化AFE
83 *************************************************************************************************/
84 void McuClockSet(U8 SysClock)
85 {
86 1 U8 ea;
87 1
88 1 ea = EA;
89 1 EA = 0;
90 1
91 1 CLKCON |= 0x08; //SETB HFON
92 1
93 1 _nop_();
94 1 _nop_();
95 1 _nop_();
96 1 _nop_();
97 1 _nop_();
98 1 _nop_();
99 1 _nop_();
100 1 _nop_();
101 1
102 1 CLKCON &= 0x60;
103 1
104 1 CLKCON |= 0x04; //SETB FS, SYSCLK=24M
105 1
106 1 EA = ea;
107 1 }
*** WARNING C280 IN LINE 84 OF CODE_DRV\MCULIB.C: 'SysClock': unreferenced local variable
108
109
110 /*************************************************************************************************
111 * 函数名: McuPWM0Set、McuPWM1Set、McuPWM2Set
C51 COMPILER V9.01 MCULIB 02/13/2025 10:07:28 PAGE 3
112 * 参 数: PwmFreqPWM的频率HzDutyRatioPWM的高电平占空比
113 * 返回值: 无
114 * 描 述: 初始化AFE
115 *************************************************************************************************/
116 void McuPWM0Set(U16 PwmFreq, U8 DutyRatio)
117 {
118 1 PWM0CON = 0xb0; //系统时钟/64
119 1 PWM0PL = 375000/PwmFreq; //PWM2P=24000000/(64*E2uiDSG1PWMFreq);
120 1 PWM0PH = (375000/PwmFreq) >> 8;
121 1 PWM0DL = (U16)(PWM0PL+PWM0PH*256)*DutyRatio/100;
122 1 PWM0DH = ((U16)(PWM0PL+PWM0PH*256)*DutyRatio/100) >> 8;
123 1 }
124
125 void McuPWM1Set(U16 PwmFreq, U8 DutyRatio)
126 {
127 1 PWM1CON = 0xb0; //系统时钟/64
128 1 PWM1PL = 375000/PwmFreq; //PWM2P=24000000/(64*E2uiDSG1PWMFreq);
129 1 PWM1PH = (375000/PwmFreq) >> 8;
130 1 PWM1DL = (U16)(PWM1PL+(U16)PWM1PH*256)*DutyRatio/100;
131 1 PWM1DH = ((U16)(PWM1PL+(U16)PWM1PH*256)*DutyRatio/100) >> 8;
132 1 }
133
134 void McuPWM2Set(U16 PwmFreq, U8 DutyRatio)
135 {
136 1 PWM2CON = 0xb0; //系统时钟/64
137 1 PWM2PL = 375000/PwmFreq; //PWM2P=24000000/(64*E2uiDSG1PWMFreq);
138 1 PWM2PH = (375000/PwmFreq) >> 8;
139 1 PWM2DL = (U16)(PWM2PL+(U16)PWM2PH*256)*DutyRatio/100;
140 1 PWM2DH = ((U16)(PWM2PL+(U16)PWM2PH*256)*DutyRatio/100) >> 8;
141 1 }
142
143
144 /*************************************************************************************************
145 * 函数名: Delay1ms
146 * 参 数: Xms延迟多少mS
147 * 返回值: 无
148 * 描 述: 延时函数单位为1mS
149 特别注意该函数的延时准确性问题,在不同优化等级时,反汇编不同造成延时不一致,实测如下:
150 1.当配置选项里的代码优化等级设置为3时j=1670若禁止所有中断则实际延时为3.484ms,不禁止中断则受中断影响
-达到3.804ms
151 2.当配置选项里的代码优化等级设置为3时j=480若禁止所有中断则实际延时为1.010ms不禁止中断则受中断影响<EFBFBD>
-<2D><EFBFBD>1.104ms
152 3.当配置选项里的代码优化等级设置为7时j=1670若禁止所有中断则实际延时为1.002ms,不禁止中断则受中断影响
-达到1.090ms
153 *************************************************************************************************/
154 void Delay1ms(U8 Xms)
155 {
156 1 U8 i;
157 1 U16 j, Tcnt;
158 1
159 1 if((CLKCON&0x70) == MCU_CLK_24MHz)
160 1 {
161 2 Tcnt = 1670;
162 2 }
163 1 else if((CLKCON&0x70) == MCU_CLK_12MHz)
164 1 {
165 2 Tcnt = 1670/2;
166 2 }
167 1 else if((CLKCON&0x70) == MCU_CLK_6MHz)
168 1 {
169 2 Tcnt = 1670/4;
170 2 }
C51 COMPILER V9.01 MCULIB 02/13/2025 10:07:28 PAGE 4
171 1 else //2MHz
172 1 {
173 2 Tcnt = 1670/12;
174 2 }
175 1
176 1
177 1 for(i=0; i<Xms; i++) //system clock = 24MHz
178 1 {
179 2 for(j=0; j<Tcnt; j++)
180 2 {
181 3 }
182 2 }
183 1 }
184
185
186
187 /*************************************************************************************************
188 * 函数名: ClrRam
189 * 参 数: 无
190 * 返回值: 无
191 * 描 述: 清零DATA、IDATA、XRAM区域堆栈区域不清零
192 *************************************************************************************************/
193 //void ClrRam(void)
194 //{
195 // U8 idata *ptr1;
196 // U8 xdata *ptr2;
197 // U8 xdata i;
198 // U16 idata j;
199
200 // for(i=0x08; i<=STACK_ADDR-1; i++) //clear ram address: 08H~STACK_ADDR-1
201 // {
202 // ptr1 = (U8 idata *)i;
203 // *ptr1 = 0;
204 // }
205
206 // for(j=0; j<=0xAFF; j++) //clear XDATA address:0000H-0AFFH
207 // {
208 // ptr2 = (U8 xdata *)j;
209 // *ptr2 = 0;
210 // }
211 //}
212
213
214 /*************************************************************************************************
215 * 函数名: RamCheckProcess
216 * 参 数: 无
217 * 返回值: 无
218 * 描 述: 定时检测系统参数XRAM区的标志是否正确如果不正确则初始化
219 *************************************************************************************************/
220 BOOL RamCheckProcess(void)
221 {
222 1 if((E2ucRamCheckFlg0 != RAM_CHECK_DATA)
223 1 || (E2ucRamCheckFlg1 != RAM_CHECK_DATA)
224 1 || (E2ucRamCheckFlg2 != RAM_CHECK_DATA)
225 1 || (E2ucRamCheckFlg3 != RAM_CHECK_DATA)
226 1 || (E2ucRamCheckFlg5 != RAM_CHECK_DATA)
227 1 || (E2ucRamCheckFlg6 != RAM_CHECK_DATA)
228 1 || (E2ucRamCheckFlg7 != RAM_CHECK_DATA)
229 1 || (E2ucRamCheckFlg8 != RAM_CHECK_DATA)
230 1 || (E2ucRamCheckFlg9 != RAM_CHECK_DATA)
231 1 || (E2ucRamCheckFlgA != RAM_CHECK_DATA)
232 1 || (E2ucRamCheckFlgB != RAM_CHECK_DATA)
C51 COMPILER V9.01 MCULIB 02/13/2025 10:07:28 PAGE 5
233 1 || (E2uiCheckFlag != 0x5AA5))
234 1 {
235 2 return 0;
236 2 }
237 1 else
238 1 {
239 2 return 1;
240 2 }
241 1 }
242
243
244 /*************************************************************************************************
245 * 函数名: MemorySet
246 * 参 数: pt--memory指针
247 setval---需要赋值的数据
248 length---需要赋值的memory长度(Byres)
249 * 返回值: 无
250 * 描 述: 定时检测系统参数XRAM区的标志是否正确如果不正确则初始化
251 *************************************************************************************************/
252 void MemorySet(U8 xdata *pt, U8 setval, U8 length)
253 {
254 1 U8 i;
255 1 for(i=0; i<length; i++)
256 1 {
257 2 *pt = setval;
258 2 pt++;
259 2 }
260 1 }
261
262
263 /*************************************************************************************************
264 * 函数名: MemoryCopy
265 * 参 数: source--源Memory指针
266 target---目的Memory指针
267 length---需要拷贝的数据长度(Byres)
268 * 返回值: 无
269 * 描 述: 定时检测系统参数XRAM区的标志是否正确如果不正确则初始化
270 *************************************************************************************************/
271 void MemoryCopy(U8 xdata *source, U8 xdata *target, U8 length)
272 {
273 1 U8 i;
274 1 for(i=0; i<length; i++)
275 1 {
276 2 *target = *source;
277 2 target++;
278 2 source++;
279 2 }
280 1 }
281
282
283 /*************************************************************************************************
284 * 函数名: McuIntoIdle、McuIntoPD
285 * 参 数: 无
286 * 返回值: 无
287 * 描 述: MCU进入PD掉电模式和IDLE模式以降低功耗
288 *************************************************************************************************/
289 void McuIntoIdle(void)
290 {
291 1 SUSLO = 0x55;
292 1 PCON |= 0x01;
293 1 _nop_();
294 1 _nop_();
C51 COMPILER V9.01 MCULIB 02/13/2025 10:07:28 PAGE 6
295 1 _nop_();
296 1 _nop_();
297 1 _nop_();
298 1 }
299
300 void McuIntoPD(void)
301 {
302 1 SUSLO = 0x55;
303 1 PCON |= 0x02;
304 1 _nop_();
305 1 _nop_();
306 1 _nop_();
307 1 _nop_();
308 1 _nop_();
309 1 }
310
311
312 /*************************************************************************************************
313 * 函数名: SystemResetProcess
314 * 参 数: 无
315 * 返回值: 无
316 * 描 述: 系统复位,从程序起始地址开始执行
317 *************************************************************************************************/
318 void SystemResetProcess(void)
319 {
320 1 if( (ucResetFlag==0x12) && (bUart0SndAckFlg||bUart1SndAckFlg||bUart2SndAckFlg) //Software reset
- occurs, and ended UART communication
321 1 && (!bMcuFlashWrWaitFlg) && (!bMcuFlashWrFlg) ) //Flash has been updated
322 1 {
323 2 IrqDis();
324 2 IEN0 = 0x00; //Disable Interrupt
325 2 IEN1 = 0x00;
326 2 TCON = 0x00;
327 2 EXF0 = 0x00;
328 2
329 2 SBRTH = 0x00; //Disable UART0
330 2 SBRTL = 0x00;
331 2 SCON = 0x00;
332 2
333 2 ((void(code*)(void))0x0000)(); //指向起始地址
334 2 }
335 1 }
336
337
338
339
340
341
342
343
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 804 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- 15
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 2 WARNING(S), 0 ERROR(S)