📄 main.lis
字号:
009A 0895 ret
009C .dbsym r PageAddressLow 22 c
009C .dbsym r PageAddressHigh 20 c
009C .dbend
009C .dbfunc e ExecCode _ExecCode fV
.even
009C _ExecCode::
009C .dbline -1
009C .dbline 120
009C ;
009C ; /*********************************************************/
009C ;
009C ; void ExecCode(void)
009C ; {
009C .dbline 121
009C ; RAMPZ = 0;
009C 2224 clr R2
009E 2BBE out 0x3b,R2
00A0 .dbline 122
00A0 ; MCUCR = 0x01; // Enable interrupt vector select
00A0 81E0 ldi R24,1
00A2 85BF out 0x35,R24
00A4 .dbline 123
00A4 ; MCUCR = 0x00; // Move interrupt vector to flash
00A4 25BE out 0x35,R2
00A6 .dbline 124
00A6 ; asm("jmp 0x0000"); // Run application code
00A6 0C940000 jmp 0x0000
00AA .dbline -2
00AA .dbline 125
00AA ; }
00AA L21:
00AA .dbline 0 ; func end
00AA 0895 ret
00AC .dbend
00AC .dbfunc e GetPage _GetPage fc
00AC ; CheckSum -> R22
00AC ; LocalCheckSum -> R10
00AC ; i -> R20,R21
.even
00AC _GetPage::
00AC 0E940000 xcall push_gset3
00B0 .dbline -1
00B0 .dbline 130
00B0 ;
00B0 ; /*********************************************************/
00B0 ;
00B0 ; char GetPage(void)
00B0 ; {
00B0 .dbline 132
00B0 ; unsigned int i;
00B0 ; unsigned char LocalCheckSum = 0;
00B0 AA24 clr R10
00B2 .dbline 133
00B2 ; unsigned char CheckSum = 0;
00B2 6627 clr R22
00B4 .dbline 135
00B4 ;
00B4 ; for (i=0;i<PageByte;i++)
00B4 4427 clr R20
00B6 5527 clr R21
00B8 11C0 xjmp L26
00BA X1:
00BA .dbline 136
00BA ; {
00BA L27:
00BA .dbline 137
00BA L28:
00BA .dbline 137
00BA 93D0 xcall _IsChar
00BC 0023 tst R16
00BE E9F3 breq L27
00C0 .dbline 138
00C0 96D0 xcall _RxChar
00C2 80E0 ldi R24,<_PageBuffer
00C4 90E0 ldi R25,>_PageBuffer
00C6 FA01 movw R30,R20
00C8 E80F add R30,R24
00CA F91F adc R31,R25
00CC 0083 std z+0,R16
00CE .dbline 139
00CE FA01 movw R30,R20
00D0 E80F add R30,R24
00D2 F91F adc R31,R25
00D4 2080 ldd R2,z+0
00D6 A20C add R10,R2
00D8 .dbline 140
00D8 L24:
00D8 .dbline 135
00D8 4F5F subi R20,255 ; offset = 1
00DA 5F4F sbci R21,255
00DC L26:
00DC .dbline 135
00DC 4030 cpi R20,0
00DE E1E0 ldi R30,1
00E0 5E07 cpc R21,R30
00E2 58F3 brlo L28
00E4 L30:
00E4 .dbline 142
00E4 L31:
00E4 .dbline 142
00E4 ; while(!IsChar());
00E4 ; PageBuffer[i]=RxChar();
00E4 ; LocalCheckSum += PageBuffer[i];
00E4 ; }
00E4 ;
00E4 ; while(!IsChar());
00E4 7ED0 xcall _IsChar
00E6 0023 tst R16
00E8 E9F3 breq L30
00EA .dbline 143
00EA ; CheckSum = RxChar();
00EA 81D0 xcall _RxChar
00EC 602F mov R22,R16
00EE .dbline 144
00EE ; if (LocalCheckSum == CheckSum) return 1;
00EE A016 cp R10,R16
00F0 11F4 brne L33
00F2 .dbline 144
00F2 01E0 ldi R16,1
00F4 01C0 xjmp L22
00F6 L33:
00F6 .dbline 145
00F6 ; else return 0;
00F6 0027 clr R16
00F8 .dbline -2
00F8 L22:
00F8 0E940000 xcall pop_gset3
00FC .dbline 0 ; func end
00FC 0895 ret
00FE .dbsym r CheckSum 22 c
00FE .dbsym r LocalCheckSum 10 c
00FE .dbsym r i 20 i
00FE .dbend
00FE .dbfunc e WriteFlash _WriteFlash fV
00FE ; TempInt -> R22,R23
00FE ; i -> R20,R21
.even
00FE _WriteFlash::
00FE 0E940000 xcall push_gset2
0102 .dbline -1
0102 .dbline 151
0102 ; }
0102 ;
0102 ; /*********************************************************/
0102 ;
0102 ; void WriteFlash(void)
0102 ; {
0102 .dbline 155
0102 ; unsigned int i;
0102 ; unsigned int TempInt;
0102 ;
0102 ; for (i=0;i<PageByte;i+=2)
0102 4427 clr R20
0104 5527 clr R21
0106 17C0 xjmp L39
0108 L36:
0108 .dbline 156
0108 .dbline 157
0108 80E0 ldi R24,<_PageBuffer
010A 90E0 ldi R25,>_PageBuffer
010C FA01 movw R30,R20
010E 3196 adiw R30,1
0110 E80F add R30,R24
0112 F91F adc R31,R25
0114 2080 ldd R2,z+0
0116 3324 clr R3
0118 322C mov R3,R2
011A 2224 clr R2
011C FA01 movw R30,R20
011E E80F add R30,R24
0120 F91F adc R31,R25
0122 6081 ldd R22,z+0
0124 7727 clr R23
0126 620D add R22,R2
0128 731D adc R23,R3
012A .dbline 158
012A 9A01 movw R18,R20
012C 8B01 movw R16,R22
012E 0E940000 xcall _fill_temp_buffer
0132 .dbline 159
0132 L37:
0132 .dbline 155
0132 4E5F subi R20,254 ; offset = 2
0134 5F4F sbci R21,255
0136 L39:
0136 .dbline 155
0136 4030 cpi R20,0
0138 E1E0 ldi R30,1
013A 5E07 cpc R21,R30
013C 28F3 brlo L36
013E .dbline 160
013E ; {
013E ; TempInt=PageBuffer[i]+(PageBuffer[i+1]<<8);
013E ; fill_temp_buffer(TempInt,i); //call asm routine.
013E ; }
013E ; if (PageAddress16) RAMPZ = 1;
013E 20900000 lds R2,_PageAddress16
0142 2220 tst R2
0144 11F0 breq L40
0146 .dbline 160
0146 81E0 ldi R24,1
0148 8BBF out 0x3b,R24
014A L40:
014A .dbline 162
014A ;
014A ; write_page(PageAddress,0x03); //Perform page ERASE
014A 23E0 ldi R18,3
014C 00910200 lds R16,_PageAddress
0150 10910300 lds R17,_PageAddress+1
0154 0E940000 xcall _write_page
0158 .dbline 163
0158 ; write_page(PageAddress,0x05); //Perform page write
0158 25E0 ldi R18,5
015A 00910200 lds R16,_PageAddress
015E 10910300 lds R17,_PageAddress+1
0162 0E940000 xcall _write_page
0166 .dbline 165
0166 ;
0166 ; enableRWW();
0166 0E940000 xcall _enableRWW
016A .dbline 166
016A ; RAMPZ = 0;
016A 2224 clr R2
016C 2BBE out 0x3b,R2
016E .dbline -2
016E .dbline 167
016E ; }
016E L35:
016E 0E940000 xcall pop_gset2
0172 .dbline 0 ; func end
0172 0895 ret
0174 .dbsym r TempInt 22 i
0174 .dbsym r i 20 i
0174 .dbend
0174 .dbfunc e CheckFlash _CheckFlash fc
0174 ; TempInt2 -> R22,R23
0174 ; TempInt -> R10,R11
0174 ; i -> R20,R21
.even
0174 _CheckFlash::
0174 0E940000 xcall push_gset3
0178 .dbline -1
0178 .dbline 172
0178 ;
0178 ; /*********************************************************/
0178 ;
0178 ; char CheckFlash(void)
0178 ; {
0178 .dbline 177
0178 ; unsigned int i;
0178 ; unsigned int TempInt;
0178 ; unsigned int TempInt2;
0178 ;
0178 ; for (i=0;i<PageByte;i+=2)
0178 4427 clr R20
017A 5527 clr R21
017C 2AC0 xjmp L46
017E L43:
017E .dbline 178
017E ; {
017E .dbline 179
017E ; if (PageAddress16) RAMPZ = 1;
017E 20900000 lds R2,_PageAddress16
0182 2220 tst R2
0184 11F0 breq L47
0186 .dbline 179
0186 81E0 ldi R24,1
0188 8BBF out 0x3b,R24
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -