📄 nflash32.lis
字号:
; 对于FLASH的写操作原理是,写之前
; 必须擦除,FLASH写是按页写,但是擦
; 除是按块擦除,1块 = 32页,所以在
; 一块内只有部分页被写入时就需要先
; 将块内其他页保存,代整块擦除后一起
; 写入,这里用0XFA,0X00作为头块缓冲,
; 0XFB,0X00作为最后块缓冲,中间块采
; 用直接擦除处理
; **********************************/
; flashErase(0xfa, 0x00);
007A 2227 clr R18
007C 0AEF ldi R16,250
007E 6F92 push R6
0080 7F92 push R7
0082 BEDF rcall _flashErase
0084 7F90 pop R7
0086 6F90 pop R6
0088 .dbline 125
; Sour_addh = XmtBuff.b[19];
0088 20901300 lds R2,_XmtBuff+19
008C 2A8A std y+18,R2
008E .dbline 126
; Sour_addl = (XmtBuff.b[20]/0x20) * 0x20;
008E 10E2 ldi R17,32
0090 00911400 lds R16,_XmtBuff+20
0094 00D0 rcall div8u
0096 202E mov R2,R16
0098 220C lsl R2
009A 220C lsl R2
009C 220C lsl R2
009E 220C lsl R2
00A0 220C lsl R2
00A2 2B86 std y+11,R2
00A4 .dbline 127
; Dest_addh = 0xfa;
00A4 8AEF ldi R24,250
00A6 8B8B std y+19,R24
00A8 .dbline 128
; Dest_addl = (XmtBuff.b[20]/0x20) * 0x20;
00A8 10E2 ldi R17,32
00AA 00911400 lds R16,_XmtBuff+20
00AE 00D0 rcall div8u
00B0 202E mov R2,R16
00B2 220C lsl R2
00B4 220C lsl R2
00B6 220C lsl R2
00B8 220C lsl R2
00BA 220C lsl R2
00BC 2C86 std y+12,R2
00BE .dbline 129
; CopyBack_Count = XmtBuff.b[20]%0x20;
00BE 20E2 ldi R18,32
00C0 30E0 ldi R19,0
00C2 00911400 lds R16,_XmtBuff+20
00C6 1127 clr R17
00C8 00D0 rcall mod16s
00CA 0E87 std y+14,R16
00CC 1F87 std y+15,R17
00CE .dbline 130
00CE 6624 clr R6
00D0 7724 clr R7
00D2 16C0 rjmp L19
00D4 L16:
00D4 .dbline 130
00D4 .dbline 131
00D4 0C84 ldd R0,y+12
00D6 0A82 std y+2,R0
00D8 0B88 ldd R0,y+19
00DA 0882 std y+0,R0
00DC 2B85 ldd R18,y+11
00DE 0A89 ldd R16,y+18
00E0 6F92 push R6
00E2 7F92 push R7
00E4 74D1 rcall _flashCopyBLack
00E6 7F90 pop R7
00E8 6F90 pop R6
00EA .dbline 132
00EA 0B84 ldd R0,y+11
00EC 0394 inc R0
00EE 0B86 std y+11,R0
00F0 .dbline 133
00F0 0C84 ldd R0,y+12
00F2 0394 inc R0
00F4 0C86 std y+12,R0
00F6 .dbline 134
00F6 L17:
00F6 .dbline 130
00F6 862D mov R24,R6
00F8 972D mov R25,R7
00FA 0196 adiw R24,1
00FC 682E mov R6,R24
00FE 792E mov R7,R25
0100 L19:
0100 .dbline 130
; for(i=0;i<CopyBack_Count;i++){
0100 0E84 ldd R0,y+14
0102 1F84 ldd R1,y+15
0104 6014 cp R6,R0
0106 7104 cpc R7,R1
0108 28F3 brlo L16
010A .dbline 135
; flashCopyBLack(Sour_addh,Sour_addl,Dest_addh,Dest_addl);
; Sour_addl ++;
; Dest_addl ++;
; }
; Erase_addl = (XmtBuff.b[20]/0x20) * 0x20;
010A 10E2 ldi R17,32
010C 00911400 lds R16,_XmtBuff+20
0110 00D0 rcall div8u
0112 202E mov R2,R16
0114 220C lsl R2
0116 220C lsl R2
0118 220C lsl R2
011A 220C lsl R2
011C 220C lsl R2
011E 2D86 std y+13,R2
0120 .dbline 136
; Erase_addh = XmtBuff.b[19];
0120 E0901300 lds R14,_XmtBuff+19
0124 .dbline 137
; WritePageNum = (XmtBuff.b[22]<<8)+XmtBuff.b[23];
0124 20901700 lds R2,_XmtBuff+23
0128 3324 clr R3
012A 40901600 lds R4,_XmtBuff+22
012E 5524 clr R5
0130 542C mov R5,R4
0132 4424 clr R4
0134 420C add R4,R2
0136 531C adc R5,R3
0138 4D82 std y+5,R4
013A 5E82 std y+6,R5
013C .dbline 138
; Erase_Count = WritePageNum / 0x20;
013C 25E0 ldi R18,5
013E 30E0 ldi R19,0
0140 0D81 ldd R16,y+5
0142 1E81 ldd R17,y+6
0144 00D0 rcall lsr16
0146 0B83 std y+3,R16
0148 1C83 std y+4,R17
014A .dbline 139
; if(WritePageNum % 0x20){
014A 8D81 ldd R24,y+5
014C 9E81 ldd R25,y+6
014E 8F71 andi R24,31
0150 9070 andi R25,0
0152 8030 cpi R24,0
0154 8907 cpc R24,R25
0156 E1F0 breq L24
0158 .dbline 139
0158 .dbline 140
; Erase_Count ++;
0158 8B81 ldd R24,y+3
015A 9C81 ldd R25,y+4
015C 0196 adiw R24,1
015E 8B83 std y+3,R24
0160 9C83 std y+4,R25
0162 .dbline 141
; if((WritePageNum % 0x20) > (0x20 - (XmtBuff.b[20] % 0x20)))
0162 20E2 ldi R18,32
0164 30E0 ldi R19,0
0166 00911400 lds R16,_XmtBuff+20
016A 1127 clr R17
016C 00D0 rcall mod16s
016E 80E2 ldi R24,32
0170 90E0 ldi R25,0
0172 801B sub R24,R16
0174 910B sbc R25,R17
0176 ED81 ldd R30,y+5
0178 FE81 ldd R31,y+6
017A EF71 andi R30,31
017C F070 andi R31,0
017E 8E17 cp R24,R30
0180 9F07 cpc R25,R31
0182 88F4 brsh L25
0184 .dbline 142
; Erase_Count ++;
0184 8B81 ldd R24,y+3
0186 9C81 ldd R25,y+4
0188 0196 adiw R24,1
018A 8B83 std y+3,R24
018C 9C83 std y+4,R25
018E .dbline 143
018E 0BC0 rjmp L25
0190 L24:
0190 .dbline 143
; }else if(XmtBuff.b[20] % 0x20){
0190 10E2 ldi R17,32
0192 00911400 lds R16,_XmtBuff+20
0196 00D0 rcall mod8u
0198 0023 tst R16
019A 29F0 breq L29
019C .dbline 143
019C .dbline 144
; Erase_Count ++;
019C 8B81 ldd R24,y+3
019E 9C81 ldd R25,y+4
01A0 0196 adiw R24,1
01A2 8B83 std y+3,R24
01A4 9C83 std y+4,R25
01A6 .dbline 145
; }
01A6 L29:
01A6 L25:
01A6 .dbline 146
; Start_add.add = (XmtBuff.b[19]<<8)+XmtBuff.b[20];
01A6 20901400 lds R2,_XmtBuff+20
01AA 3324 clr R3
01AC 40901300 lds R4,_XmtBuff+19
01B0 5524 clr R5
01B2 542C mov R5,R4
01B4 4424 clr R4
01B6 420C add R4,R2
01B8 531C adc R5,R3
01BA 4986 std y+9,R4
01BC 5A86 std y+10,R5
01BE .dbline 147
; End_add.add = Start_add.add + WritePageNum;
01BE 2D80 ldd R2,y+5
01C0 3E80 ldd R3,y+6
01C2 420C add R4,R2
01C4 531C adc R5,R3
01C6 4F82 std y+7,R4
01C8 5886 std y+8,R5
01CA .dbline 148
; flashErase(0xfb, 0x00);
01CA 2227 clr R18
01CC 0BEF ldi R16,251
01CE 6F92 push R6
01D0 7F92 push R7
01D2 16DF rcall _flashErase
01D4 7F90 pop R7
01D6 6F90 pop R6
01D8 .dbline 149
; Sour_two_addh = End_add.c[1];
01D8 A884 ldd R10,y+8
01DA .dbline 150
; Sour_two_addl = End_add.c[0];
01DA 4F81 ldd R20,y+7
01DC .dbline 151
; Dest_two_addh = 0xfb;
01DC 6BEF ldi R22,251
01DE .dbline 152
; Dest_two_addl = End_add.c[0];
01DE CF80 ldd R12,y+7
01E0 .dbline 153
; CopyBack_two_count = (Erase_Count * 0x20) - CopyBack_Count -WritePageNum;
01E0 25E0 ldi R18,5
01E2 30E0 ldi R19,0
01E4 0B81 ldd R16,y+3
01E6 1C81 ldd R17,y+4
01E8 00D0 rcall lsl16
01EA 202E mov R2,R16
01EC 312E mov R3,R17
01EE 0E84 ldd R0,y+14
01F0 1F84 ldd R1,y+15
01F2 2018 sub R2,R0
01F4 3108 sbc R3,R1
01F6 4D80 ldd R4,y+5
01F8 5E80 ldd R5,y+6
01FA 2418 sub R2,R4
01FC 3508 sbc R3,R5
01FE 288A std y+16,R2
0200 398A std y+17,R3
0202 .dbline 154
0202 6624 clr R6
0204 7724 clr R7
0206 10C0 rjmp L38
0208 L35:
0208 .dbline 154
0208 .dbline 155
0208 CA82 std y+2,R12
020A 6883 std y+0,R22
020C 242F mov R18,R20
020E 0A2D mov R16,R10
0210 6F92 push R6
0212 7F92 push R7
0214 DCD0 rcall _flashCopyBLack
0216 7F90 pop R7
0218 6F90 pop R6
021A .dbline 156
021A 4395 inc R20
021C .dbline 157
021C C394 inc R12
021E .dbline 158
021E L36:
021E .dbline 154
021E 862D mov R24,R6
0220 972D mov R25,R7
0222 0196 adiw R24,1
0224 682E mov R6,R24
0226 792E mov R7,R25
0228 L38:
0228 .dbline 154
; for(i=0;i<CopyBack_two_count;i++){
0228 0888 ldd R0,y+16
022A 1988 ldd R1,y+17
022C 6014 cp R6,R0
022E 7104 cpc R7,R1
0230 58F3 brlo L35
0232 .dbline 159
0232 6624 clr R6
0234 7724 clr R7
0236 16C0 rjmp L42
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -