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)