📄 common.lis
字号:
00DE .dbline 0 ; func end
00DE 0895 ret
00E0 .dbsym r savedSREG 20 c
00E0 .dbsym r Data 18 c
00E0 .dbsym r Addr 16 s
00E0 .dbend
00E0 .dbfunc e EPROMRead _EPROMRead fc
00E0 ; Addr -> R16,R17
.even
00E0 _EPROMRead::
00E0 .dbline -1
00E0 .dbline 351
00E0 ; }
00E0 ;
00E0 ; u8 EPROMRead(u16 Addr)
00E0 ; {
00E0 .dbline 352
00E0 L18:
00E0 .dbline 352
00E0 L19:
00E0 .dbline 352
00E0 L21:
00E0 .dbline 352
00E0 ; for (; bit_is_set(EECR, EEWE); ); // wait for previous write to finish
00E0 E199 sbic 0x1c,1
00E2 FECF rjmp L18
00E4 .dbline 353
00E4 ; EEAR = Addr; // set address
00E4 1FBB out 0x1f,R17
00E6 0EBB out 0x1e,R16
00E8 .dbline 354
00E8 ; sbi(EECR, EERE); // set "read enable" bit
00E8 E09A sbi 0x1c,0
00EA .dbline 355
00EA ; EEAR = 0; //
00EA 2224 clr R2
00EC 3324 clr R3
00EE 3FBA out 0x1f,R3
00F0 2EBA out 0x1e,R2
00F2 .dbline 356
00F2 ; return (u8)EEDR; // return the EEPROM byte
00F2 0DB3 in R16,0x1d
00F4 .dbline -2
00F4 L17:
00F4 .dbline 0 ; func end
00F4 0895 ret
00F6 .dbsym r Addr 16 s
00F6 .dbend
00F6 .dbfunc e EPROMWrite_Data _EPROMWrite_Data fV
00F6 ; c -> R20
00F6 ; crc -> R22,R23
00F6 ; len -> R10,R11
00F6 ; src -> R12,R13
00F6 ; Addr -> R14,R15
.even
00F6 _EPROMWrite_Data::
00F6 0E940000 xcall push_gset5
00FA 6901 movw R12,R18
00FC 7801 movw R14,R16
00FE AA84 ldd R10,y+10
0100 BB84 ldd R11,y+11
0102 .dbline -1
0102 .dbline 360
0102 ; }
0102 ;
0102 ; void EPROMWrite_Data(u16 Addr, u8 *src, u16 len)
0102 ; {
0102 .dbline 364
0102 ; u8 c;
0102 ; u16 crc;
0102 ;
0102 ; if (!src) //
0102 CC20 tst R12
0104 E1F4 brne L23
0106 DD20 tst R13
0108 D1F4 brne L23
010A X1:
010A .dbline 365
010A ; { // fill with '0'
010A .dbline 366
010A 0AC0 xjmp L28
010C L25:
010C .dbline 366
010C 2227 clr R18
010E 1701 movw R2,R14
0110 C101 movw R24,R2
0112 0196 adiw R24,1
0114 7C01 movw R14,R24
0116 8101 movw R16,R2
0118 D0DF xcall _EPROMWrite
011A L26:
011A .dbline 366
011A C501 movw R24,R10
011C 0197 sbiw R24,1
011E 5C01 movw R10,R24
0120 L28:
0120 .dbline 366
0120 ; for (; len; len--) EPROMWrite(Addr++, 0); // data
0120 AA20 tst R10
0122 A1F7 brne L25
0124 BB20 tst R11
0126 91F7 brne L25
0128 X2:
0128 .dbline 367
0128 ; EPROMWrite(Addr++, 0xff); // crc LS-Byte
0128 2FEF ldi R18,255
012A 1701 movw R2,R14
012C C101 movw R24,R2
012E 0196 adiw R24,1
0130 7C01 movw R14,R24
0132 8101 movw R16,R2
0134 C2DF xcall _EPROMWrite
0136 .dbline 368
0136 ; EPROMWrite(Addr, 0xff); // crc MS-Byte
0136 2FEF ldi R18,255
0138 8701 movw R16,R14
013A BFDF xcall _EPROMWrite
013C .dbline 369
013C ; return; //
013C 3AC0 xjmp L22
013E L23:
013E .dbline 372
013E ; }
013E ;
013E ; crc = 0xffff; // init crc
013E 6FEF ldi R22,65535
0140 7FEF ldi R23,255
0142 .dbline 373
0142 ; crc = UpdateFCS_16(crc, 10); // update crc
0142 2AE0 ldi R18,10
0144 8B01 movw R16,R22
0146 0E940000 xcall _UpdateFCS_16
014A .dbline 374
014A ; crc = UpdateFCS_16(crc, (u8)(len & 0xff)); // update crc
014A 2A2D mov R18,R10
014C 3070 andi R19,0
014E 0E940000 xcall _UpdateFCS_16
0152 .dbline 375
0152 ; crc = UpdateFCS_16(crc, (u8)(len >> 8)); // update crc
0152 9501 movw R18,R10
0154 232F mov R18,R19
0156 3327 clr R19
0158 0E940000 xcall _UpdateFCS_16
015C B801 movw R22,R16
015E .dbline 376
015E ; for (; len; len--) //
015E 12C0 xjmp L32
0160 L29:
0160 .dbline 377
0160 .dbline 378
0160 F601 movw R30,R12
0162 4191 ld R20,Z+
0164 6F01 movw R12,R30
0166 .dbline 379
0166 242F mov R18,R20
0168 8B01 movw R16,R22
016A 0E940000 xcall _UpdateFCS_16
016E B801 movw R22,R16
0170 .dbline 380
0170 242F mov R18,R20
0172 1701 movw R2,R14
0174 C101 movw R24,R2
0176 0196 adiw R24,1
0178 7C01 movw R14,R24
017A 8101 movw R16,R2
017C 9EDF xcall _EPROMWrite
017E .dbline 381
017E L30:
017E .dbline 376
017E C501 movw R24,R10
0180 0197 sbiw R24,1
0182 5C01 movw R10,R24
0184 L32:
0184 .dbline 376
0184 AA20 tst R10
0186 61F7 brne L29
0188 BB20 tst R11
018A 51F7 brne L29
018C X3:
018C .dbline 382
018C ; { //
018C ; c = *src++; // get byte
018C ; crc = UpdateFCS_16(crc, c); // update crc
018C ; EPROMWrite(Addr++, c); // save it into the eeprom
018C ; } //
018C ; crc = ~crc; // finalize the crc
018C 6095 com R22
018E 7095 com R23
0190 .dbline 383
0190 ; EPROMWrite(Addr++, (u8)(crc & 0xff)); // save LS-Byte of crc
0190 262F mov R18,R22
0192 3070 andi R19,0
0194 1701 movw R2,R14
0196 C101 movw R24,R2
0198 0196 adiw R24,1
019A 7C01 movw R14,R24
019C 8101 movw R16,R2
019E 8DDF xcall _EPROMWrite
01A0 .dbline 384
01A0 ; EPROMWrite(Addr++, (u8)(crc >> 8)); // save MS-Byte of crc
01A0 9B01 movw R18,R22
01A2 232F mov R18,R19
01A4 3327 clr R19
01A6 1701 movw R2,R14
01A8 C101 movw R24,R2
01AA 0196 adiw R24,1
01AC 7C01 movw R14,R24
01AE 8101 movw R16,R2
01B0 84DF xcall _EPROMWrite
01B2 .dbline -2
01B2 L22:
01B2 0E940000 xcall pop_gset5
01B6 .dbline 0 ; func end
01B6 0895 ret
01B8 .dbsym r c 20 c
01B8 .dbsym r crc 22 s
01B8 .dbsym r len 10 s
01B8 .dbsym r src 12 pc
01B8 .dbsym r Addr 14 s
01B8 .dbend
01B8 .dbfunc e EPROMRead_Data _EPROMRead_Data fc
01B8 ; crc2 -> R10,R11
01B8 ; i -> R14,R15
01B8 ; c -> R22
01B8 ; j -> R12,R13
01B8 ; crc1 -> R20,R21
01B8 ; len -> y+16
01B8 ; dest -> y+14
01B8 ; Addr -> y+12
.even
01B8 _EPROMRead_Data::
01B8 0E940000 xcall push_arg4
01BC 0E940000 xcall push_gset5
01C0 2297 sbiw R28,2
01C2 .dbline -1
01C2 .dbline 388
01C2 ; }
01C2 ;
01C2 ; bool EPROMRead_Data(u16 Addr, u8 *dest, u16 len)
01C2 ; {
01C2 .dbline 393
01C2 ; u8 c;
01C2 ; u16 i, j;
01C2 ; u16 crc1, crc2;
01C2 ;
01C2 ; if (!dest) return false;
01C2 0E84 ldd R0,y+14
01C4 1F84 ldd R1,y+15
01C6 0020 tst R0
01C8 21F4 brne L34
01CA 1120 tst R1
01CC 11F4 brne L34
01CE X4:
01CE .dbline 393
01CE 0027 clr R16
01D0 65C0 xjmp L33
01D2 L34:
01D2 .dbline 396
01D2 ;
01D2 ; // first check the data is valid
01D2 ; crc1 = 0xffff; // init crc
01D2 4FEF ldi R20,65535
01D4 5FEF ldi R21,255
01D6 .dbline 397
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -