Files

753 lines
48 KiB
Plaintext

1 ;--------------------------------------------------------
2 ; File Created by SDCC : free open source ANSI-C Compiler
3 ; Version 4.2.0 #13081 (Linux)
4 ;--------------------------------------------------------
5 .module eeprom
6 .optsdcc -mmcs51 --model-small
7
8 ;--------------------------------------------------------
9 ; Public variables in this module
10 ;--------------------------------------------------------
11 .globl _delay_ms
12 .globl _EADC
13 .globl _ET1
14 .globl _ET0
15 .globl _ES
16 .globl _EA
17 .globl _REN
18 .globl _RI
19 .globl _TI
20 .globl _TR1
21 .globl _TF1
22 .globl _IT0
23 .globl _IE0
24 .globl _TR0
25 .globl _TF0
26 .globl _CMPCR2
27 .globl _CMPCR1
28 .globl _TA
29 .globl _IRCBAND_REG
30 .globl _IAP_TPS
31 .globl _IAP_CONTR
32 .globl _IAP_TRIG
33 .globl _IAP_CMD
34 .globl _IAP_ADDRL
35 .globl _IAP_ADDRH
36 .globl _IAP_DATA
37 .globl _WDT_CONTR
38 .globl _PCA_PWM3
39 .globl _PCA_PWM2
40 .globl _PCA_PWM1
41 .globl _PCA_PWM0
42 .globl _CCAP3L
43 .globl _CCAP2L
44 .globl _CCAP1L
45 .globl _CCAP0L
46 .globl _CCAPM3
47 .globl _CCAPM2
48 .globl _CCAPM1
49 .globl _CCAPM0
50 .globl _CMOD
51 .globl _CCON
52 .globl _ADCTIM_X
53 .globl _ADCCFG
54 .globl _ADC_RESL
55 .globl _ADC_RES
56 .globl _ADC_CONTR
57 .globl _SPDAT
58 .globl _SPCTL
59 .globl _SPSTAT
60 .globl _IP2H
61 .globl _IP2
62 .globl _IP
63 .globl _IE2
64 .globl _IE
65 .globl _BRT
66 .globl _P_SW1
67 .globl _SADEN
68 .globl _SADDR
69 .globl _S2BUF
70 .globl _S2CON
71 .globl _SBUF
72 .globl _SCON
73 .globl _TM4PS_X
74 .globl _TM3PS_X
75 .globl _TM2PS_X
76 .globl _T4T3M
77 .globl _T4L
78 .globl _T4H
79 .globl _T3L
80 .globl _T3H
81 .globl _T2L
82 .globl _T2H
83 .globl _INTCLKO
84 .globl _AUXR
85 .globl _TH1
86 .globl _TH0
87 .globl _TL1
88 .globl _TL0
89 .globl _TMOD
90 .globl _TCON
91 .globl _P_SW2
92 .globl _P5M0
93 .globl _P5M1
94 .globl _P4M0
95 .globl _P4M1
96 .globl _P3M0
97 .globl _P3M1
98 .globl _P2M0
99 .globl _P2M1
100 .globl _P1M0
101 .globl _P1M1
102 .globl _P0M0
103 .globl _P0M1
104 .globl _PSW
105 .globl _B
106 .globl _ACC
107 .globl _PCON
108 .globl _DPH
109 .globl _DPL
110 .globl _SP
111 .globl _P5
112 .globl _P4
113 .globl _P3
114 .globl _P2
115 .globl _P1
116 .globl _P0
117 .globl _eeprom_write_PARM_3
118 .globl _eeprom_write_PARM_2
119 .globl _eeprom_read_PARM_3
120 .globl _eeprom_read_PARM_2
121 .globl _eeprom_init
122 .globl _eeprom_read
123 .globl _eeprom_write
124 .globl _eeprom_format
125 ;--------------------------------------------------------
126 ; special function registers
127 ;--------------------------------------------------------
128 .area RSEG (ABS,DATA)
000000 129 .org 0x0000
000080 130 _P0 = 0x0080
000090 131 _P1 = 0x0090
0000A0 132 _P2 = 0x00a0
0000B0 133 _P3 = 0x00b0
0000C0 134 _P4 = 0x00c0
0000C8 135 _P5 = 0x00c8
000081 136 _SP = 0x0081
000082 137 _DPL = 0x0082
000083 138 _DPH = 0x0083
000087 139 _PCON = 0x0087
0000E0 140 _ACC = 0x00e0
0000F0 141 _B = 0x00f0
0000D0 142 _PSW = 0x00d0
000093 143 _P0M1 = 0x0093
000094 144 _P0M0 = 0x0094
000091 145 _P1M1 = 0x0091
000092 146 _P1M0 = 0x0092
000095 147 _P2M1 = 0x0095
000096 148 _P2M0 = 0x0096
0000B1 149 _P3M1 = 0x00b1
0000B2 150 _P3M0 = 0x00b2
0000B3 151 _P4M1 = 0x00b3
0000B4 152 _P4M0 = 0x00b4
0000C9 153 _P5M1 = 0x00c9
0000CA 154 _P5M0 = 0x00ca
0000BA 155 _P_SW2 = 0x00ba
000088 156 _TCON = 0x0088
000089 157 _TMOD = 0x0089
00008A 158 _TL0 = 0x008a
00008B 159 _TL1 = 0x008b
00008C 160 _TH0 = 0x008c
00008D 161 _TH1 = 0x008d
00008E 162 _AUXR = 0x008e
00008F 163 _INTCLKO = 0x008f
0000D6 164 _T2H = 0x00d6
0000D7 165 _T2L = 0x00d7
0000D4 166 _T3H = 0x00d4
0000D5 167 _T3L = 0x00d5
0000D2 168 _T4H = 0x00d2
0000D3 169 _T4L = 0x00d3
0000D1 170 _T4T3M = 0x00d1
00FEA1 171 _TM2PS_X = 0xfea1
00FEA2 172 _TM3PS_X = 0xfea2
00FEA3 173 _TM4PS_X = 0xfea3
000098 174 _SCON = 0x0098
000099 175 _SBUF = 0x0099
00009A 176 _S2CON = 0x009a
00009B 177 _S2BUF = 0x009b
0000A9 178 _SADDR = 0x00a9
0000B9 179 _SADEN = 0x00b9
0000A2 180 _P_SW1 = 0x00a2
00009C 181 _BRT = 0x009c
0000A8 182 _IE = 0x00a8
0000AF 183 _IE2 = 0x00af
0000B8 184 _IP = 0x00b8
0000B6 185 _IP2 = 0x00b6
0000B7 186 _IP2H = 0x00b7
0000CD 187 _SPSTAT = 0x00cd
0000CE 188 _SPCTL = 0x00ce
0000CF 189 _SPDAT = 0x00cf
0000BC 190 _ADC_CONTR = 0x00bc
0000BD 191 _ADC_RES = 0x00bd
0000BE 192 _ADC_RESL = 0x00be
0000DE 193 _ADCCFG = 0x00de
00FEA8 194 _ADCTIM_X = 0xfea8
0000D8 195 _CCON = 0x00d8
0000D9 196 _CMOD = 0x00d9
0000DA 197 _CCAPM0 = 0x00da
0000DB 198 _CCAPM1 = 0x00db
0000DC 199 _CCAPM2 = 0x00dc
0000DD 200 _CCAPM3 = 0x00dd
0000EA 201 _CCAP0L = 0x00ea
0000EB 202 _CCAP1L = 0x00eb
0000EC 203 _CCAP2L = 0x00ec
0000ED 204 _CCAP3L = 0x00ed
0000F2 205 _PCA_PWM0 = 0x00f2
0000F3 206 _PCA_PWM1 = 0x00f3
0000F4 207 _PCA_PWM2 = 0x00f4
0000F5 208 _PCA_PWM3 = 0x00f5
0000C1 209 _WDT_CONTR = 0x00c1
0000C2 210 _IAP_DATA = 0x00c2
0000C3 211 _IAP_ADDRH = 0x00c3
0000C4 212 _IAP_ADDRL = 0x00c4
0000C5 213 _IAP_CMD = 0x00c5
0000C6 214 _IAP_TRIG = 0x00c6
0000C7 215 _IAP_CONTR = 0x00c7
0000F7 216 _IAP_TPS = 0x00f7
00009D 217 _IRCBAND_REG = 0x009d
0000AE 218 _TA = 0x00ae
0000E6 219 _CMPCR1 = 0x00e6
0000E7 220 _CMPCR2 = 0x00e7
221 ;--------------------------------------------------------
222 ; special function bits
223 ;--------------------------------------------------------
224 .area RSEG (ABS,DATA)
000000 225 .org 0x0000
00008D 226 _TF0 = 0x008d
00008C 227 _TR0 = 0x008c
000089 228 _IE0 = 0x0089
000088 229 _IT0 = 0x0088
00008F 230 _TF1 = 0x008f
00008E 231 _TR1 = 0x008e
000099 232 _TI = 0x0099
000098 233 _RI = 0x0098
00009C 234 _REN = 0x009c
0000AF 235 _EA = 0x00af
0000AC 236 _ES = 0x00ac
0000A9 237 _ET0 = 0x00a9
0000AB 238 _ET1 = 0x00ab
0000AD 239 _EADC = 0x00ad
240 ;--------------------------------------------------------
241 ; overlayable register banks
242 ;--------------------------------------------------------
243 .area REG_BANK_0 (REL,OVR,DATA)
000000 244 .ds 8
245 ;--------------------------------------------------------
246 ; internal ram data
247 ;--------------------------------------------------------
248 .area DSEG (DATA)
000000 249 _iap_write_PARM_2:
000000 250 .ds 1
000001 251 _eeprom_read_PARM_2:
000001 252 .ds 3
000004 253 _eeprom_read_PARM_3:
000004 254 .ds 3
000007 255 _eeprom_write_PARM_2:
000007 256 .ds 1
000008 257 _eeprom_write_PARM_3:
000008 258 .ds 3
259 ;--------------------------------------------------------
260 ; overlayable items in internal ram
261 ;--------------------------------------------------------
262 ;--------------------------------------------------------
263 ; indirectly addressable internal ram data
264 ;--------------------------------------------------------
265 .area ISEG (DATA)
266 ;--------------------------------------------------------
267 ; absolute internal ram data
268 ;--------------------------------------------------------
269 .area IABS (ABS,DATA)
270 .area IABS (ABS,DATA)
271 ;--------------------------------------------------------
272 ; bit data
273 ;--------------------------------------------------------
274 .area BSEG (BIT)
275 ;--------------------------------------------------------
276 ; paged external ram data
277 ;--------------------------------------------------------
278 .area PSEG (PAG,XDATA)
279 ;--------------------------------------------------------
280 ; external ram data
281 ;--------------------------------------------------------
282 .area XSEG (XDATA)
283 ;--------------------------------------------------------
284 ; absolute external ram data
285 ;--------------------------------------------------------
286 .area XABS (ABS,XDATA)
287 ;--------------------------------------------------------
288 ; external initialized ram data
289 ;--------------------------------------------------------
290 .area XISEG (XDATA)
291 .area HOME (CODE)
292 .area GSINIT0 (CODE)
293 .area GSINIT1 (CODE)
294 .area GSINIT2 (CODE)
295 .area GSINIT3 (CODE)
296 .area GSINIT4 (CODE)
297 .area GSINIT5 (CODE)
298 .area GSINIT (CODE)
299 .area GSFINAL (CODE)
300 .area CSEG (CODE)
301 ;--------------------------------------------------------
302 ; global & static initialisations
303 ;--------------------------------------------------------
304 .area HOME (CODE)
305 .area GSINIT (CODE)
306 .area GSFINAL (CODE)
307 .area GSINIT (CODE)
308 ;--------------------------------------------------------
309 ; Home
310 ;--------------------------------------------------------
311 .area HOME (CODE)
312 .area HOME (CODE)
313 ;--------------------------------------------------------
314 ; code
315 ;--------------------------------------------------------
316 .area CSEG (CODE)
317 ;------------------------------------------------------------
318 ;Allocation info for local variables in function 'unlock_special'
319 ;------------------------------------------------------------
320 ; src/eeprom.c:31: static void unlock_special(void)
321 ; -----------------------------------------
322 ; function unlock_special
323 ; -----------------------------------------
000000 324 _unlock_special:
000007 325 ar7 = 0x07
000006 326 ar6 = 0x06
000005 327 ar5 = 0x05
000004 328 ar4 = 0x04
000003 329 ar3 = 0x03
000002 330 ar2 = 0x02
000001 331 ar1 = 0x01
000000 332 ar0 = 0x00
333 ; src/eeprom.c:33: TA = 0xAA;
000000 75 AE AA [24] 334 mov _TA,#0xaa
335 ; src/eeprom.c:34: TA = 0x55;
000003 75 AE 55 [24] 336 mov _TA,#0x55
337 ; src/eeprom.c:35: }
000006 22 [24] 338 ret
339 ;------------------------------------------------------------
340 ;Allocation info for local variables in function 'iap_idle'
341 ;------------------------------------------------------------
342 ; src/eeprom.c:38: static void iap_idle(void)
343 ; -----------------------------------------
344 ; function iap_idle
345 ; -----------------------------------------
000007 346 _iap_idle:
347 ; src/eeprom.c:40: IAP_CONTR = 0;
000007 75 C7 00 [24] 348 mov _IAP_CONTR,#0x00
349 ; src/eeprom.c:41: IAP_CMD = 0;
00000A 75 C5 00 [24] 350 mov _IAP_CMD,#0x00
351 ; src/eeprom.c:42: IAP_TRIG = 0;
00000D 75 C6 00 [24] 352 mov _IAP_TRIG,#0x00
353 ; src/eeprom.c:43: }
000010 22 [24] 354 ret
355 ;------------------------------------------------------------
356 ;Allocation info for local variables in function 'iap_read'
357 ;------------------------------------------------------------
358 ;addr Allocated to registers r6 r7
359 ;val Allocated to registers r7
360 ;------------------------------------------------------------
361 ; src/eeprom.c:45: static uint8_t iap_read(uint16_t addr)
362 ; -----------------------------------------
363 ; function iap_read
364 ; -----------------------------------------
000011 365 _iap_read:
000011 AE 82 [24] 366 mov r6,dpl
000013 AF 83 [24] 367 mov r7,dph
368 ; src/eeprom.c:48: EA = 0;
369 ; assignBit
000015 C2 AF [12] 370 clr _EA
371 ; src/eeprom.c:49: IAP_CONTR = IAP_EN | IAP_CMD_WAIT;
000017 75 C7 80 [24] 372 mov _IAP_CONTR,#0x80
373 ; src/eeprom.c:50: IAP_CMD = 1; /* READ */
00001A 75 C5 01 [24] 374 mov _IAP_CMD,#0x01
375 ; src/eeprom.c:51: IAP_ADDRH = (uint8_t)(addr >> 8);
00001D 8F C3 [24] 376 mov _IAP_ADDRH,r7
377 ; src/eeprom.c:52: IAP_ADDRL = (uint8_t)(addr & 0xFF);
00001F 8E C4 [24] 378 mov _IAP_ADDRL,r6
379 ; src/eeprom.c:53: IAP_TRIG = 0x5A;
000021 75 C6 5A [24] 380 mov _IAP_TRIG,#0x5a
381 ; src/eeprom.c:54: IAP_TRIG = 0xA5;
000024 75 C6 A5 [24] 382 mov _IAP_TRIG,#0xa5
383 ; src/eeprom.c:55: _nop_();
000027 12r00r00 [24] 384 lcall __nop_
385 ; src/eeprom.c:56: _nop_();
00002A 12r00r00 [24] 386 lcall __nop_
387 ; src/eeprom.c:57: val = IAP_DATA;
00002D AF C2 [24] 388 mov r7,_IAP_DATA
389 ; src/eeprom.c:58: iap_idle();
00002F C0 07 [24] 390 push ar7
000031 12r00r07 [24] 391 lcall _iap_idle
000034 D0 07 [24] 392 pop ar7
393 ; src/eeprom.c:59: EA = 1;
394 ; assignBit
000036 D2 AF [12] 395 setb _EA
396 ; src/eeprom.c:60: return val;
000038 8F 82 [24] 397 mov dpl,r7
398 ; src/eeprom.c:61: }
00003A 22 [24] 399 ret
400 ;------------------------------------------------------------
401 ;Allocation info for local variables in function 'iap_erase'
402 ;------------------------------------------------------------
403 ;sector_addr Allocated to registers r6 r7
404 ;------------------------------------------------------------
405 ; src/eeprom.c:64: static void iap_erase(uint16_t sector_addr)
406 ; -----------------------------------------
407 ; function iap_erase
408 ; -----------------------------------------
00003B 409 _iap_erase:
00003B AE 82 [24] 410 mov r6,dpl
00003D AF 83 [24] 411 mov r7,dph
412 ; src/eeprom.c:66: EA = 0;
413 ; assignBit
00003F C2 AF [12] 414 clr _EA
415 ; src/eeprom.c:67: IAP_CONTR = IAP_EN | IAP_CMD_WAIT;
000041 75 C7 80 [24] 416 mov _IAP_CONTR,#0x80
417 ; src/eeprom.c:68: IAP_CMD = 3; /* ERASE */
000044 75 C5 03 [24] 418 mov _IAP_CMD,#0x03
419 ; src/eeprom.c:69: IAP_ADDRH = (uint8_t)(sector_addr >> 8);
000047 8F C3 [24] 420 mov _IAP_ADDRH,r7
421 ; src/eeprom.c:70: IAP_ADDRL = (uint8_t)(sector_addr & 0xFF);
000049 8E C4 [24] 422 mov _IAP_ADDRL,r6
423 ; src/eeprom.c:71: IAP_TRIG = 0x5A;
00004B 75 C6 5A [24] 424 mov _IAP_TRIG,#0x5a
425 ; src/eeprom.c:72: IAP_TRIG = 0xA5;
00004E 75 C6 A5 [24] 426 mov _IAP_TRIG,#0xa5
427 ; src/eeprom.c:74: delay_ms(10);
000051 90 00 0A [24] 428 mov dptr,#0x000a
000054 12r00r00 [24] 429 lcall _delay_ms
430 ; src/eeprom.c:75: iap_idle();
000057 12r00r07 [24] 431 lcall _iap_idle
432 ; src/eeprom.c:76: EA = 1;
433 ; assignBit
00005A D2 AF [12] 434 setb _EA
435 ; src/eeprom.c:77: }
00005C 22 [24] 436 ret
437 ;------------------------------------------------------------
438 ;Allocation info for local variables in function 'iap_write'
439 ;------------------------------------------------------------
440 ;val Allocated with name '_iap_write_PARM_2'
441 ;addr Allocated to registers r6 r7
442 ;------------------------------------------------------------
443 ; src/eeprom.c:79: static void iap_write(uint16_t addr, uint8_t val)
444 ; -----------------------------------------
445 ; function iap_write
446 ; -----------------------------------------
00005D 447 _iap_write:
00005D AE 82 [24] 448 mov r6,dpl
00005F AF 83 [24] 449 mov r7,dph
450 ; src/eeprom.c:81: EA = 0;
451 ; assignBit
000061 C2 AF [12] 452 clr _EA
453 ; src/eeprom.c:82: IAP_CONTR = IAP_EN | IAP_CMD_WAIT;
000063 75 C7 80 [24] 454 mov _IAP_CONTR,#0x80
455 ; src/eeprom.c:83: IAP_CMD = 2; /* WRITE */
000066 75 C5 02 [24] 456 mov _IAP_CMD,#0x02
457 ; src/eeprom.c:84: IAP_ADDRH = (uint8_t)(addr >> 8);
000069 8F C3 [24] 458 mov _IAP_ADDRH,r7
459 ; src/eeprom.c:85: IAP_ADDRL = (uint8_t)(addr & 0xFF);
00006B 8E C4 [24] 460 mov _IAP_ADDRL,r6
461 ; src/eeprom.c:86: IAP_DATA = val;
00006D 85*00 C2 [24] 462 mov _IAP_DATA,_iap_write_PARM_2
463 ; src/eeprom.c:87: IAP_TRIG = 0x5A;
000070 75 C6 5A [24] 464 mov _IAP_TRIG,#0x5a
465 ; src/eeprom.c:88: IAP_TRIG = 0xA5;
000073 75 C6 A5 [24] 466 mov _IAP_TRIG,#0xa5
467 ; src/eeprom.c:89: _nop_();
000076 12r00r00 [24] 468 lcall __nop_
469 ; src/eeprom.c:90: _nop_();
000079 12r00r00 [24] 470 lcall __nop_
471 ; src/eeprom.c:91: iap_idle();
00007C 12r00r07 [24] 472 lcall _iap_idle
473 ; src/eeprom.c:92: EA = 1;
474 ; assignBit
00007F D2 AF [12] 475 setb _EA
476 ; src/eeprom.c:93: }
000081 22 [24] 477 ret
478 ;------------------------------------------------------------
479 ;Allocation info for local variables in function 'eeprom_init'
480 ;------------------------------------------------------------
481 ;m0 Allocated to registers r7
482 ;m1 Allocated to registers r6
483 ;------------------------------------------------------------
484 ; src/eeprom.c:95: uint8_t eeprom_init(void)
485 ; -----------------------------------------
486 ; function eeprom_init
487 ; -----------------------------------------
000082 488 _eeprom_init:
489 ; src/eeprom.c:98: uint8_t m0 = iap_read(IAP_EEPROM_BASE);
000082 90 FC 00 [24] 490 mov dptr,#0xfc00
000085 12r00r11 [24] 491 lcall _iap_read
000088 AF 82 [24] 492 mov r7,dpl
493 ; src/eeprom.c:99: uint8_t m1 = iap_read(IAP_EEPROM_BASE + 1);
00008A 90 FC 01 [24] 494 mov dptr,#0xfc01
00008D C0 07 [24] 495 push ar7
00008F 12r00r11 [24] 496 lcall _iap_read
000092 AE 82 [24] 497 mov r6,dpl
000094 D0 07 [24] 498 pop ar7
499 ; src/eeprom.c:100: if (m0 == 'L' && m1 == '3') return EEPROM_OK;
000096 BF 4C 07 [24] 500 cjne r7,#0x4c,00102$
000099 BE 33 04 [24] 501 cjne r6,#0x33,00102$
00009C 75 82 00 [24] 502 mov dpl,#0x00
00009F 22 [24] 503 ret
0000A0 504 00102$:
505 ; src/eeprom.c:101: return EEPROM_ERR;
0000A0 75 82 01 [24] 506 mov dpl,#0x01
507 ; src/eeprom.c:102: }
0000A3 22 [24] 508 ret
509 ;------------------------------------------------------------
510 ;Allocation info for local variables in function 'eeprom_read'
511 ;------------------------------------------------------------
512 ;ch Allocated with name '_eeprom_read_PARM_2'
513 ;addr Allocated with name '_eeprom_read_PARM_3'
514 ;mode Allocated to registers r5 r6 r7
515 ;i Allocated to registers r7
516 ;------------------------------------------------------------
517 ; src/eeprom.c:104: uint8_t eeprom_read(uint8_t *mode, uint8_t *ch, uint8_t addr[5])
518 ; -----------------------------------------
519 ; function eeprom_read
520 ; -----------------------------------------
0000A4 521 _eeprom_read:
0000A4 AD 82 [24] 522 mov r5,dpl
0000A6 AE 83 [24] 523 mov r6,dph
0000A8 AF F0 [24] 524 mov r7,b
525 ; src/eeprom.c:106: if (mode) *mode = iap_read(IAP_EEPROM_BASE + 4);
0000AA ED [12] 526 mov a,r5
0000AB 4E [12] 527 orl a,r6
0000AC 60 1E [24] 528 jz 00102$
0000AE 90 FC 04 [24] 529 mov dptr,#0xfc04
0000B1 C0 07 [24] 530 push ar7
0000B3 C0 06 [24] 531 push ar6
0000B5 C0 05 [24] 532 push ar5
0000B7 12r00r11 [24] 533 lcall _iap_read
0000BA AC 82 [24] 534 mov r4,dpl
0000BC D0 05 [24] 535 pop ar5
0000BE D0 06 [24] 536 pop ar6
0000C0 D0 07 [24] 537 pop ar7
0000C2 8D 82 [24] 538 mov dpl,r5
0000C4 8E 83 [24] 539 mov dph,r6
0000C6 8F F0 [24] 540 mov b,r7
0000C8 EC [12] 541 mov a,r4
0000C9 12r00r00 [24] 542 lcall __gptrput
0000CC 543 00102$:
544 ; src/eeprom.c:107: if (ch) *ch = iap_read(IAP_EEPROM_BASE + 5);
0000CC E5*01 [12] 545 mov a,_eeprom_read_PARM_2
0000CE 45*02 [12] 546 orl a,(_eeprom_read_PARM_2 + 1)
0000D0 60 24 [24] 547 jz 00104$
0000D2 AD*01 [24] 548 mov r5,_eeprom_read_PARM_2
0000D4 AE*02 [24] 549 mov r6,(_eeprom_read_PARM_2 + 1)
0000D6 AF*03 [24] 550 mov r7,(_eeprom_read_PARM_2 + 2)
0000D8 90 FC 05 [24] 551 mov dptr,#0xfc05
0000DB C0 07 [24] 552 push ar7
0000DD C0 06 [24] 553 push ar6
0000DF C0 05 [24] 554 push ar5
0000E1 12r00r11 [24] 555 lcall _iap_read
0000E4 AC 82 [24] 556 mov r4,dpl
0000E6 D0 05 [24] 557 pop ar5
0000E8 D0 06 [24] 558 pop ar6
0000EA D0 07 [24] 559 pop ar7
0000EC 8D 82 [24] 560 mov dpl,r5
0000EE 8E 83 [24] 561 mov dph,r6
0000F0 8F F0 [24] 562 mov b,r7
0000F2 EC [12] 563 mov a,r4
0000F3 12r00r00 [24] 564 lcall __gptrput
0000F6 565 00104$:
566 ; src/eeprom.c:108: if (addr) {
0000F6 E5*04 [12] 567 mov a,_eeprom_read_PARM_3
0000F8 45*05 [12] 568 orl a,(_eeprom_read_PARM_3 + 1)
0000FA 60 43 [24] 569 jz 00107$
570 ; src/eeprom.c:109: for (uint8_t i = 0; i < 5; i++) {
0000FC 7F 00 [12] 571 mov r7,#0x00
0000FE 572 00109$:
0000FE BF 05 00 [24] 573 cjne r7,#0x05,00137$
000101 574 00137$:
000101 50 3C [24] 575 jnc 00107$
576 ; src/eeprom.c:110: addr[i] = iap_read(IAP_EEPROM_BASE + 6 + i);
000103 EF [12] 577 mov a,r7
000104 25*04 [12] 578 add a,_eeprom_read_PARM_3
000106 FC [12] 579 mov r4,a
000107 E4 [12] 580 clr a
000108 35*05 [12] 581 addc a,(_eeprom_read_PARM_3 + 1)
00010A FD [12] 582 mov r5,a
00010B AE*06 [24] 583 mov r6,(_eeprom_read_PARM_3 + 2)
00010D 8F 02 [24] 584 mov ar2,r7
00010F 7B 00 [12] 585 mov r3,#0x00
000111 74 06 [12] 586 mov a,#0x06
000113 2A [12] 587 add a,r2
000114 FA [12] 588 mov r2,a
000115 74 FC [12] 589 mov a,#0xfc
000117 3B [12] 590 addc a,r3
000118 FB [12] 591 mov r3,a
000119 8A 82 [24] 592 mov dpl,r2
00011B 8B 83 [24] 593 mov dph,r3
00011D C0 07 [24] 594 push ar7
00011F C0 06 [24] 595 push ar6
000121 C0 05 [24] 596 push ar5
000123 C0 04 [24] 597 push ar4
000125 12r00r11 [24] 598 lcall _iap_read
000128 AB 82 [24] 599 mov r3,dpl
00012A D0 04 [24] 600 pop ar4
00012C D0 05 [24] 601 pop ar5
00012E D0 06 [24] 602 pop ar6
000130 D0 07 [24] 603 pop ar7
000132 8C 82 [24] 604 mov dpl,r4
000134 8D 83 [24] 605 mov dph,r5
000136 8E F0 [24] 606 mov b,r6
000138 EB [12] 607 mov a,r3
000139 12r00r00 [24] 608 lcall __gptrput
609 ; src/eeprom.c:109: for (uint8_t i = 0; i < 5; i++) {
00013C 0F [12] 610 inc r7
00013D 80 BF [24] 611 sjmp 00109$
00013F 612 00107$:
613 ; src/eeprom.c:113: return EEPROM_OK;
00013F 75 82 00 [24] 614 mov dpl,#0x00
615 ; src/eeprom.c:114: }
000142 22 [24] 616 ret
617 ;------------------------------------------------------------
618 ;Allocation info for local variables in function 'eeprom_write'
619 ;------------------------------------------------------------
620 ;ch Allocated with name '_eeprom_write_PARM_2'
621 ;addr Allocated with name '_eeprom_write_PARM_3'
622 ;mode Allocated to registers r7
623 ;i Allocated to registers r6
624 ;cksum Allocated to registers r7
625 ;i Allocated to registers r6
626 ;------------------------------------------------------------
627 ; src/eeprom.c:116: uint8_t eeprom_write(uint8_t mode, uint8_t ch, const uint8_t addr[5])
628 ; -----------------------------------------
629 ; function eeprom_write
630 ; -----------------------------------------
000143 631 _eeprom_write:
000143 AF 82 [24] 632 mov r7,dpl
633 ; src/eeprom.c:119: iap_erase(IAP_EEPROM_BASE);
000145 90 FC 00 [24] 634 mov dptr,#0xfc00
000148 C0 07 [24] 635 push ar7
00014A 12r00r3B [24] 636 lcall _iap_erase
637 ; src/eeprom.c:122: iap_write(IAP_EEPROM_BASE + 0, 'L');
00014D 75*00 4C [24] 638 mov _iap_write_PARM_2,#0x4c
000150 90 FC 00 [24] 639 mov dptr,#0xfc00
000153 12r00r5D [24] 640 lcall _iap_write
641 ; src/eeprom.c:123: iap_write(IAP_EEPROM_BASE + 1, '3');
000156 75*00 33 [24] 642 mov _iap_write_PARM_2,#0x33
000159 90 FC 01 [24] 643 mov dptr,#0xfc01
00015C 12r00r5D [24] 644 lcall _iap_write
00015F D0 07 [24] 645 pop ar7
646 ; src/eeprom.c:124: iap_write(IAP_EEPROM_BASE + 4, mode);
000161 8F*00 [24] 647 mov _iap_write_PARM_2,r7
000163 90 FC 04 [24] 648 mov dptr,#0xfc04
000166 C0 07 [24] 649 push ar7
000168 12r00r5D [24] 650 lcall _iap_write
651 ; src/eeprom.c:125: iap_write(IAP_EEPROM_BASE + 5, ch);
00016B 85*07*00 [24] 652 mov _iap_write_PARM_2,_eeprom_write_PARM_2
00016E 90 FC 05 [24] 653 mov dptr,#0xfc05
000171 12r00r5D [24] 654 lcall _iap_write
000174 D0 07 [24] 655 pop ar7
656 ; src/eeprom.c:126: for (uint8_t i = 0; i < 5; i++) {
000176 7E 00 [12] 657 mov r6,#0x00
000178 658 00104$:
000178 BE 05 00 [24] 659 cjne r6,#0x05,00129$
00017B 660 00129$:
00017B 50 33 [24] 661 jnc 00101$
662 ; src/eeprom.c:127: iap_write(IAP_EEPROM_BASE + 6 + i, addr[i]);
00017D 8E 04 [24] 663 mov ar4,r6
00017F 7D 00 [12] 664 mov r5,#0x00
000181 74 06 [12] 665 mov a,#0x06
000183 2C [12] 666 add a,r4
000184 FC [12] 667 mov r4,a
000185 74 FC [12] 668 mov a,#0xfc
000187 3D [12] 669 addc a,r5
000188 FD [12] 670 mov r5,a
000189 EE [12] 671 mov a,r6
00018A 25*08 [12] 672 add a,_eeprom_write_PARM_3
00018C F9 [12] 673 mov r1,a
00018D E4 [12] 674 clr a
00018E 35*09 [12] 675 addc a,(_eeprom_write_PARM_3 + 1)
000190 FA [12] 676 mov r2,a
000191 AB*0A [24] 677 mov r3,(_eeprom_write_PARM_3 + 2)
000193 89 82 [24] 678 mov dpl,r1
000195 8A 83 [24] 679 mov dph,r2
000197 8B F0 [24] 680 mov b,r3
000199 12r00r00 [24] 681 lcall __gptrget
00019C F5*00 [12] 682 mov _iap_write_PARM_2,a
00019E 8C 82 [24] 683 mov dpl,r4
0001A0 8D 83 [24] 684 mov dph,r5
0001A2 C0 07 [24] 685 push ar7
0001A4 C0 06 [24] 686 push ar6
0001A6 12r00r5D [24] 687 lcall _iap_write
0001A9 D0 06 [24] 688 pop ar6
0001AB D0 07 [24] 689 pop ar7
690 ; src/eeprom.c:126: for (uint8_t i = 0; i < 5; i++) {
0001AD 0E [12] 691 inc r6
0001AE 80 C8 [24] 692 sjmp 00104$
0001B0 693 00101$:
694 ; src/eeprom.c:130: uint8_t cksum = mode ^ ch;
0001B0 E5*07 [12] 695 mov a,_eeprom_write_PARM_2
0001B2 62 07 [12] 696 xrl ar7,a
697 ; src/eeprom.c:131: for (uint8_t i = 0; i < 5; i++) cksum ^= addr[i];
0001B4 7E 00 [12] 698 mov r6,#0x00
0001B6 699 00107$:
0001B6 BE 05 00 [24] 700 cjne r6,#0x05,00131$
0001B9 701 00131$:
0001B9 50 19 [24] 702 jnc 00102$
0001BB EE [12] 703 mov a,r6
0001BC 25*08 [12] 704 add a,_eeprom_write_PARM_3
0001BE FB [12] 705 mov r3,a
0001BF E4 [12] 706 clr a
0001C0 35*09 [12] 707 addc a,(_eeprom_write_PARM_3 + 1)
0001C2 FC [12] 708 mov r4,a
0001C3 AD*0A [24] 709 mov r5,(_eeprom_write_PARM_3 + 2)
0001C5 8B 82 [24] 710 mov dpl,r3
0001C7 8C 83 [24] 711 mov dph,r4
0001C9 8D F0 [24] 712 mov b,r5
0001CB 12r00r00 [24] 713 lcall __gptrget
0001CE FB [12] 714 mov r3,a
0001CF 62 07 [12] 715 xrl ar7,a
0001D1 0E [12] 716 inc r6
0001D2 80 E2 [24] 717 sjmp 00107$
0001D4 718 00102$:
719 ; src/eeprom.c:132: iap_write(IAP_EEPROM_BASE + 11, cksum);
0001D4 8F*00 [24] 720 mov _iap_write_PARM_2,r7
0001D6 90 FC 0B [24] 721 mov dptr,#0xfc0b
0001D9 12r00r5D [24] 722 lcall _iap_write
723 ; src/eeprom.c:134: return EEPROM_OK;
0001DC 75 82 00 [24] 724 mov dpl,#0x00
725 ; src/eeprom.c:135: }
0001DF 22 [24] 726 ret
727 ;------------------------------------------------------------
728 ;Allocation info for local variables in function 'eeprom_format'
729 ;------------------------------------------------------------
730 ; src/eeprom.c:137: uint8_t eeprom_format(void)
731 ; -----------------------------------------
732 ; function eeprom_format
733 ; -----------------------------------------
0001E0 734 _eeprom_format:
735 ; src/eeprom.c:139: return eeprom_write(MODE_SBUS, DEFAULT_RF_CH, DEFAULT_ADDR);
0001E0 75*08r00 [24] 736 mov _eeprom_write_PARM_3,#_DEFAULT_ADDR
0001E3 75*09s00 [24] 737 mov (_eeprom_write_PARM_3 + 1),#(_DEFAULT_ADDR >> 8)
0001E6 75*0A 80 [24] 738 mov (_eeprom_write_PARM_3 + 2),#0x80
0001E9 75*07 4C [24] 739 mov _eeprom_write_PARM_2,#0x4c
0001EC 75 82 00 [24] 740 mov dpl,#0x00
741 ; src/eeprom.c:140: }
0001EF 02r01r43 [24] 742 ljmp _eeprom_write
743 .area CSEG (CODE)
744 .area CONST (CODE)
000000 745 _DEFAULT_ADDR:
000000 E7 746 .db #0xe7 ; 231
000001 E7 747 .db #0xe7 ; 231
000002 E7 748 .db #0xe7 ; 231
000003 E7 749 .db #0xe7 ; 231
000004 C2 750 .db #0xc2 ; 194
751 .area XINIT (CODE)
752 .area CABS (ABS,CODE)