📄 common.lis
字号:
01D6 ; crc1 = UpdateFCS_16(crc1, 10); // update crc
01D6 2AE0 ldi R18,10
01D8 8A01 movw R16,R20
01DA 0E940000 xcall _UpdateFCS_16
01DE .dbline 398
01DE ; crc1 = UpdateFCS_16(crc1, (u8)(len & 0xff)); // update crc
01DE 2889 ldd R18,y+16
01E0 3989 ldd R19,y+17
01E2 3070 andi R19,0
01E4 0E940000 xcall _UpdateFCS_16
01E8 .dbline 399
01E8 ; crc1 = UpdateFCS_16(crc1, (u8)(len >> 8)); // update crc
01E8 2889 ldd R18,y+16
01EA 3989 ldd R19,y+17
01EC 232F mov R18,R19
01EE 3327 clr R19
01F0 0E940000 xcall _UpdateFCS_16
01F4 A801 movw R20,R16
01F6 .dbline 400
01F6 ; i = Addr; // eeprom address to read from
01F6 EC84 ldd R14,y+12
01F8 FD84 ldd R15,y+13
01FA .dbline 401
01FA ; for (j = len; j; j--) //
01FA C888 ldd R12,y+16
01FC D988 ldd R13,y+17
01FE 0FC0 xjmp L39
0200 L36:
0200 .dbline 402
0200 .dbline 403
0200 1701 movw R2,R14
0202 C101 movw R24,R2
0204 0196 adiw R24,1
0206 7C01 movw R14,R24
0208 8101 movw R16,R2
020A 6ADF xcall _EPROMRead
020C 602F mov R22,R16
020E .dbline 404
020E 262F mov R18,R22
0210 8A01 movw R16,R20
0212 0E940000 xcall _UpdateFCS_16
0216 A801 movw R20,R16
0218 .dbline 405
0218 L37:
0218 .dbline 401
0218 C601 movw R24,R12
021A 0197 sbiw R24,1
021C 6C01 movw R12,R24
021E L39:
021E .dbline 401
021E CC20 tst R12
0220 79F7 brne L36
0222 DD20 tst R13
0224 69F7 brne L36
0226 X5:
0226 .dbline 406
0226 ; { //
0226 ; c = EPROMRead(i++); // read byte from eeprom
0226 ; crc1 = UpdateFCS_16(crc1, c); // update crc
0226 ; } //
0226 ; crc1 = ~crc1; // finalize the crc
0226 4095 com R20
0228 5095 com R21
022A .dbline 407
022A ; crc2 = (u16)EPROMRead(i++); // read LS-Byte of crc
022A 1701 movw R2,R14
022C C101 movw R24,R2
022E 0196 adiw R24,1
0230 7C01 movw R14,R24
0232 8101 movw R16,R2
0234 55DF xcall _EPROMRead
0236 A02E mov R10,R16
0238 BB24 clr R11
023A .dbline 408
023A ; crc2 |= ((u16)EPROMRead(i)) << 8; // read MS-Byte of crc
023A 8701 movw R16,R14
023C 51DF xcall _EPROMRead
023E 202E mov R2,R16
0240 3324 clr R3
0242 322C mov R3,R2
0244 2224 clr R2
0246 A228 or R10,R2
0248 B328 or R11,R3
024A .dbline 409
024A ; if (crc1 != crc2) //
024A 4A15 cp R20,R10
024C 5B05 cpc R21,R11
024E F9F0 breq L45
0250 .dbline 410
0250 ; { //
0250 .dbline 411
0250 ; memset(dest, 0, len); //
0250 0888 ldd R0,y+16
0252 1988 ldd R1,y+17
0254 1982 std y+1,R1
0256 0882 std y+0,R0
0258 2227 clr R18
025A 3327 clr R19
025C 0E85 ldd R16,y+14
025E 1F85 ldd R17,y+15
0260 0E940000 xcall _memset
0264 .dbline 412
0264 ; return false; // data is invalid
0264 0027 clr R16
0266 1AC0 xjmp L33
0268 X6:
0268 .dbline 416
0268 L42:
0268 .dbline 416
0268 2C84 ldd R2,y+12
026A 3D84 ldd R3,y+13
026C C101 movw R24,R2
026E 0196 adiw R24,1
0270 9D87 std y+13,R25
0272 8C87 std y+12,R24
0274 8101 movw R16,R2
0276 34DF xcall _EPROMRead
0278 202E mov R2,R16
027A EE85 ldd R30,y+14
027C FF85 ldd R31,y+15
027E 2192 st Z+,R2
0280 FF87 std y+15,R31
0282 EE87 std y+14,R30
0284 L43:
0284 .dbline 416
0284 8889 ldd R24,y+16
0286 9989 ldd R25,y+17
0288 0197 sbiw R24,1
028A 998B std y+17,R25
028C 888B std y+16,R24
028E L45:
028E .dbline 416
028E ; } //
028E ;
028E ; // go get the data from the eeprom
028E ; for (; len; len--) *dest++ = EPROMRead(Addr++); // read byte from eeprom
028E 0888 ldd R0,y+16
0290 1988 ldd R1,y+17
0292 0020 tst R0
0294 49F7 brne L42
0296 1120 tst R1
0298 39F7 brne L42
029A X7:
029A .dbline 418
029A ; //
029A ; return true; // data is valid
029A 01E0 ldi R16,1
029C .dbline -2
029C L33:
029C 2296 adiw R28,2
029E 0E940000 xcall pop_gset5
02A2 2496 adiw R28,4
02A4 .dbline 0 ; func end
02A4 0895 ret
02A6 .dbsym r crc2 10 s
02A6 .dbsym r i 14 s
02A6 .dbsym r c 22 c
02A6 .dbsym r j 12 s
02A6 .dbsym r crc1 20 s
02A6 .dbsym l len 16 s
02A6 .dbsym l dest 14 pc
02A6 .dbsym l Addr 12 s
02A6 .dbend
02A6 .dbfunc e Set_UnitID _Set_UnitID fV
02A6 ; UnitID -> y+2
02A6 ; i -> R22,R23
02A6 ; s -> R20,R21
.even
02A6 _Set_UnitID::
02A6 0E940000 xcall push_gset2
02AA A801 movw R20,R16
02AC A297 sbiw R28,34
02AE .dbline -1
02AE .dbline 429
02AE ; }
02AE ;
02AE ; #endif
02AE ;
02AE ; // *********************************************************************************
02AE ; // set/get the unit id
02AE ;
02AE ; #ifdef CPU_ATmega128
02AE ;
02AE ; void Set_UnitID(char *s)
02AE ; {
02AE .dbline 434
02AE ; int i;
02AE ;
02AE ; char UnitID[Unit_ID_Len];
02AE ;
02AE ; if (!s) //
02AE 4030 cpi R20,0
02B0 4507 cpc R20,R21
02B2 51F4 brne L47
02B4 X8:
02B4 .dbline 435
02B4 ; { //
02B4 .dbline 436
02B4 ; EPROMWrite_Data((u16)&Unit_ID, 0, Unit_ID_Len); //
02B4 80E2 ldi R24,32
02B6 90E0 ldi R25,0
02B8 9983 std y+1,R25
02BA 8883 std y+0,R24
02BC 2227 clr R18
02BE 3327 clr R19
02C0 00E0 ldi R16,<_Unit_ID
02C2 10E0 ldi R17,>_Unit_ID
02C4 18DF xcall _EPROMWrite_Data
02C6 .dbline 437
02C6 ; return; //
02C6 27C0 xjmp L46
02C8 L47:
02C8 .dbline 440
02C8 ; } //
02C8 ;
02C8 ; memset(UnitID, 0, Unit_ID_Len); //
02C8 80E2 ldi R24,32
02CA 90E0 ldi R25,0
02CC 9983 std y+1,R25
02CE 8883 std y+0,R24
02D0 2227 clr R18
02D2 3327 clr R19
02D4 8E01 movw R16,R28
02D6 0E5F subi R16,254 ; offset = 2
02D8 1F4F sbci R17,255
02DA 0E940000 xcall _memset
02DE .dbline 441
02DE ; i = strlen(s); //
02DE 8A01 movw R16,R20
02E0 0E940000 xcall _strlen
02E4 B801 movw R22,R16
02E6 .dbline 442
02E6 ; if (i >= Unit_ID_Len) i = Unit_ID_Len - 1; //
02E6 0032 cpi R16,32
02E8 E0E0 ldi R30,0
02EA 1E07 cpc R17,R30
02EC 14F0 brlt L49
02EE .dbline 442
02EE 6FE1 ldi R22,31
02F0 70E0 ldi R23,0
02F2 L49:
02F2 .dbline 443
02F2 ; strncpy(UnitID, s, i); //
02F2 7983 std y+1,R23
02F4 6883 std y+0,R22
02F6 9A01 movw R18,R20
02F8 8E01 movw R16,R28
02FA 0E5F subi R16,254 ; offset = 2
02FC 1F4F sbci R17,255
02FE 0E940000 xcall _strncpy
0302 .dbline 444
0302 ; EPROMWrite_Data((u16)&Unit_ID, (u8*)UnitID, Unit_ID_Len); // write it to eeprom
0302 80E2 ldi R24,32
0304 90E0 ldi R25,0
0306 9983 std y+1,R25
0308 8883 std y+0,R24
030A 9E01 movw R18,R28
030C 2E5F subi R18,254 ; offset = 2
030E 3F4F sbci R19,255
0310 00E0 ldi R16,<_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -