387 lines
17 KiB
Plaintext
387 lines
17 KiB
Plaintext
C51 COMPILER V9.01 MCULIB 02/19/2025 10:42:27 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: 定时器的基准源(分别为32KHz,128KHz,24MHz的系统时钟)
|
||
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/19/2025 10:42:27 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/19/2025 10:42:27 PAGE 3
|
||
|
||
112 * 参 数: PwmFreq:PWM的频率Hz;DutyRatio:PWM的高电平占空比
|
||
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/19/2025 10:42:27 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/19/2025 10:42:27 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/19/2025 10:42:27 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)
|