⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.lis

📁 AVR的BOOT原代码 AVR的BOOT原代码
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 00A2                   .dbline 178
 00A2           L16:
 00A2                   .dbline 173
 00A2 A394              inc R10
 00A4           L18:
 00A4                   .dbline 173
 00A4 8A2D              mov R24,R10
 00A6 8038              cpi R24,128
 00A8 58F3              brlo L20
 00AA                   .dbline 179
 00AA           ;        while(!IsChar());
 00AA           ;        PageBuffer[i]=RecChar();
 00AA           ;        LocalCheckSum ^= PageBuffer[i];
 00AA           ;       }
 00AA           ;       for (i=0;i<PageByte/2;i++)
 00AA AA24              clr R10
 00AC 12C0              xjmp L25
 00AE           X2:
 00AE                   .dbline 180
 00AE           ;       {
 00AE           L26:
 00AE                   .dbline 181
 00AE           L27:
 00AE                   .dbline 181
 00AE 84D0              xcall _IsChar
 00B0 0023              tst R16
 00B2 E9F3              breq L26
 00B4                   .dbline 182
 00B4 89D0              xcall _RecChar
 00B6 80E0              ldi R24,<_PageBuffer+128
 00B8 90E0              ldi R25,>_PageBuffer+128
 00BA EA2D              mov R30,R10
 00BC FF27              clr R31
 00BE E80F              add R30,R24
 00C0 F91F              adc R31,R25
 00C2 0083              std z+0,R16
 00C4                   .dbline 183
 00C4 EA2D              mov R30,R10
 00C6 FF27              clr R31
 00C8 E80F              add R30,R24
 00CA F91F              adc R31,R25
 00CC 2080              ldd R2,z+0
 00CE 6225              eor R22,R2
 00D0                   .dbline 184
 00D0           L23:
 00D0                   .dbline 179
 00D0 A394              inc R10
 00D2           L25:
 00D2                   .dbline 179
 00D2 8A2D              mov R24,R10
 00D4 8038              cpi R24,128
 00D6 58F3              brlo L27
 00D8                   .dbline 185
 00D8           ;        while(!IsChar());
 00D8           ;        PageBuffer[i+PageByte/2]=RecChar();
 00D8           ;        LocalCheckSum ^= PageBuffer[i+PageByte/2];
 00D8           ;       }          
 00D8           ;     CheckSum = RecChar(); 
 00D8 77D0              xcall _RecChar
 00DA 402F              mov R20,R16
 00DC                   .dbline 187
 00DC           ;       
 00DC           ;     if (LocalCheckSum == CheckSum) 
 00DC 6017              cp R22,R16
 00DE 11F4              brne L31
 00E0                   .dbline 188
 00E0           ;         return 1;
 00E0 01E0              ldi R16,1
 00E2 01C0              xjmp L14
 00E4           L31:
 00E4                   .dbline 190
 00E4           ;     else 
 00E4           ;         return 0;
 00E4 0027              clr R16
 00E6                   .dbline -2
 00E6           L14:
 00E6 0E940000          xcall pop_gset3
 00EA                   .dbline 0 ; func end
 00EA 0895              ret
 00EC                   .dbsym r CheckSum 20 c
 00EC                   .dbsym r LocalCheckSum 22 c
 00EC                   .dbsym r i 10 c
 00EC                   .dbend
 00EC                   .dbfunc e WriteFlash _WriteFlash fV
 00EC           ;        TempInt -> R20,R21
 00EC           ;              i -> R22,R23
                        .even
 00EC           _WriteFlash::
 00EC 0E940000          xcall push_gset2
 00F0                   .dbline -1
 00F0                   .dbline 195
 00F0           ;   }
 00F0           ; 
 00F0           ; /*****************************************************************************/
 00F0           ; void WriteFlash(void)
 00F0           ;   {
 00F0                   .dbline 198
 00F0           ;     unsigned int i;
 00F0           ;     unsigned int TempInt;
 00F0           ;     for (i=0;i<PageByte;i+=2)
 00F0 6627              clr R22
 00F2 7727              clr R23
 00F4 17C0              xjmp L37
 00F6           L34:
 00F6                   .dbline 199
 00F6                   .dbline 200
 00F6 80E0              ldi R24,<_PageBuffer
 00F8 90E0              ldi R25,>_PageBuffer
 00FA FB01              movw R30,R22
 00FC 3196              adiw R30,1
 00FE E80F              add R30,R24
 0100 F91F              adc R31,R25
 0102 2080              ldd R2,z+0
 0104 3324              clr R3
 0106 322C              mov R3,R2
 0108 2224              clr R2
 010A FB01              movw R30,R22
 010C E80F              add R30,R24
 010E F91F              adc R31,R25
 0110 4081              ldd R20,z+0
 0112 5527              clr R21
 0114 420D              add R20,R2
 0116 531D              adc R21,R3
 0118                   .dbline 201
 0118 9B01              movw R18,R22
 011A 8A01              movw R16,R20
 011C 0E940000          xcall _fill_temp_buffer
 0120                   .dbline 202
 0120           L35:
 0120                   .dbline 198
 0120 6E5F              subi R22,254  ; offset = 2
 0122 7F4F              sbci R23,255
 0124           L37:
 0124                   .dbline 198
 0124 6030              cpi R22,0
 0126 E1E0              ldi R30,1
 0128 7E07              cpc R23,R30
 012A 28F3              brlo L34
 012C                   .dbline 203
 012C           ;       {
 012C           ;          TempInt=PageBuffer[i]+(PageBuffer[i+1]<<8);
 012C           ;          fill_temp_buffer(TempInt,i);    //call asm routine.
 012C           ;       } 
 012C           ;     write_page(PageAddress,0x03);       //擦除页
 012C 23E0              ldi R18,3
 012E 00910000          lds R16,_PageAddress
 0132 10910100          lds R17,_PageAddress+1
 0136 0E940000          xcall _write_page
 013A                   .dbline 204
 013A           ;     write_page(PageAddress,0x05);       //写页数据
 013A 25E0              ldi R18,5
 013C 00910000          lds R16,_PageAddress
 0140 10910100          lds R17,_PageAddress+1
 0144 0E940000          xcall _write_page
 0148                   .dbline 206
 0148           ;    
 0148           ;     enableRWW();
 0148 0E940000          xcall _enableRWW
 014C                   .dbline -2
 014C                   .dbline 207
 014C           ;   }
 014C           L33:
 014C 0E940000          xcall pop_gset2
 0150                   .dbline 0 ; func end
 0150 0895              ret
 0152                   .dbsym r TempInt 20 i
 0152                   .dbsym r i 22 i
 0152                   .dbend
 0152                   .dbfunc e CheckFlash _CheckFlash fc
 0152           ;       TempInt2 -> R20,R21
 0152           ;        TempInt -> R22,R23
 0152           ;              i -> R10
                        .even
 0152           _CheckFlash::
 0152 0E940000          xcall push_gset3
 0156                   .dbline -1
 0156                   .dbline 212
 0156           ; 
 0156           ; /*****************************************************************************/
 0156           ; 
 0156           ; char CheckFlash(void)
 0156           ;   {
 0156                   .dbline 217
 0156           ;     unsigned char i;                                                  
 0156           ;     unsigned int TempInt;
 0156           ;     unsigned int TempInt2;
 0156           ; 
 0156           ;     for (i=0;i<PageByte;i+=2)
 0156 AA24              clr R10
 0158 28C0              xjmp L42
 015A           L39:
 015A                   .dbline 218
 015A           ;       {
 015A                   .dbline 219
 015A           ;          TempInt = read_program_memory(PageAddress + i,0x00);
 015A 2227              clr R18
 015C 2A2C              mov R2,R10
 015E 3324              clr R3
 0160 00910000          lds R16,_PageAddress
 0164 10910100          lds R17,_PageAddress+1
 0168 020D              add R16,R2
 016A 131D              adc R17,R3
 016C 0E940000          xcall _read_program_memory
 0170 B801              movw R22,R16
 0172                   .dbline 220
 0172           ;          TempInt2 = PageBuffer[i] +(PageBuffer[i+1]<<8);
 0172 80E0              ldi R24,<_PageBuffer+1
 0174 90E0              ldi R25,>_PageBuffer+1
 0176 EA2D              mov R30,R10
 0178 FF27              clr R31
 017A E80F              add R30,R24
 017C F91F              adc R31,R25
 017E 2080              ldd R2,z+0
 0180 3324              clr R3
 0182 322C              mov R3,R2
 0184 2224              clr R2
 0186 80E0              ldi R24,<_PageBuffer
 0188 90E0              ldi R25,>_PageBuffer
 018A EA2D              mov R30,R10
 018C FF27              clr R31
 018E E80F              add R30,R24
 0190 F91F              adc R31,R25
 0192 4081              ldd R20,z+0
 0194 5527              clr R21
 0196 420D              add R20,R2
 0198 531D              adc R21,R3
 019A                   .dbline 221
 019A           ;          if (TempInt != TempInt2)
 019A 0417              cp R16,R20
 019C 1507              cpc R17,R21
 019E 11F0              breq L44
 01A0                   .dbline 222
 01A0           ;            return 0;
 01A0 0027              clr R16
 01A2 07C0              xjmp L38
 01A4           L44:
 01A4                   .dbline 223
 01A4           L40:
 01A4                   .dbline 217
 01A4 8A2D              mov R24,R10
 01A6 8E5F              subi R24,254    ; addi 2
 01A8 A82E              mov R10,R24
 01AA           L42:
 01AA                   .dbline 217
 01AA 8A2D              mov R24,R10
 01AC 8030              cpi R24,0
 01AE ACF2              brlt L39
 01B0                   .dbline 224
 01B0           ;       } 
 01B0           ;     return 1;
 01B0 01E0              ldi R16,1
 01B2                   .dbline -2
 01B2           L38:
 01B2 0E940000          xcall pop_gset3
 01B6                   .dbline 0 ; func end
 01B6 0895              ret
 01B8                   .dbsym r TempInt2 20 i
 01B8                   .dbsym r TempInt 22 i
 01B8                   .dbsym r i 10 c
 01B8                   .dbend
 01B8                   .dbfunc e IsChar _IsChar fc
                        .even
 01B8           _IsChar::
 01B8                   .dbline -1
 01B8                   .dbline 230
 01B8           ;   }
 01B8           ; /*****************************************************************************/
 01B8           ; /* Serial Port Code                                                                                                */
 01B8           ; /*****************************************************************************/
 01B8           ; unsigned char IsChar(void)
 01B8           ; {
 01B8                   .dbline 235
 01B8           ; #if (ChipType == Atmega8)||(ChipType == Atmega16)||(ChipType == Atmega32)
 01B8           ;    if(UCSRA & 0x80)
 01B8           ; #endif
 01B8           ; #if (ChipType == Atmega64)||(ChipType == Atmega128)
 01B8           ;    if(UCSR1A & 0x80)
 01B8 20909B00          lds R2,155
 01BC 27FE              sbrs R2,7
 01BE 02C0              rjmp L47
 01C0                   .dbline 237
 01C0           ; #endif    
 01C0           ;      return 1;
 01C0 01E0              ldi R16,1
 01C2 01C0              xjmp L46
 01C4           L47:
 01C4                   .dbline 239
 01C4           ;    else 
 01C4           ;      return 0;         
 01C4 0027              clr R16
 01C6                   .dbline -2
 01C6           L46:
 01C6                   .dbline 0 ; func end
 01C6 0895              ret
 01C8                   .dbend
 01C8                   .dbfunc e RecChar _RecChar fc
                        .even
 01C8           _RecChar::
 01C8                   .dbline -1
 01C8                   .dbline 244
 01C8           ; }
 01C8           ; /*****************************************************************************/
 01C8           ; /*            字符输入函数             */     
 01C8           ; unsigned char RecChar(void)
 01C8           ;   {
 01C8           L50:
 01C8                   .dbline 250
 01C8           L51:
 01C8                   .dbline 250
 01C8           ; #if (ChipType == Atmega8)||(ChipType == Atmega16)||(ChipType == Atmega32)  
 01C8           ;      while(!(UCSRA & 0x80));
 01C8           ;      return UDR;
 01C8           ; #endif
 01C8           ; #if (ChipType == Atmega64)||(ChipType == Atmega128)   
 01C8           ;      while(!(UCSR1A & 0x80));
 01C8 20909B00          lds R2,155
 01CC 27FE              sbrs R2,7
 01CE FCCF              rjmp L50
 01D0                   .dbline 251
 01D0           ;      return UDR1;
 01D0 00919C00          lds R16,156
 01D4                   .dbline -2
 01D4           L49:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -