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

📄 main.lis

📁 本源码为C语言环境的ATMAGE8的BootLoader开发程序
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 00AC 11F4              brne L18
 00AE           X6:
 00AE                   .dbline 152
 00AE 01E0              ldi R16,1
 00B0 01C0              rjmp L11
 00B2           L18:
 00B2                   .dbline 153
 00B2           ;     else return 0;
 00B2 0027              clr R16
 00B4                   .dbline -2
 00B4           L11:
 00B4                   .dbline 0 ; func end
 00B4 00C0              rjmp pop_xgset30FC
 00B6                   .dbsym r CheckSum 12 c
 00B6                   .dbsym r AddL 14 c
 00B6                   .dbsym r AddH 20 c
 00B6                   .dbsym r LocalCheckSum 10 c
 00B6                   .dbsym r i 20 c
 00B6                   .dbend
 00B6                   .dbfunc e WriteFlash _WriteFlash fV
 00B6           ;        TempInt -> R10,R11
 00B6           ;              i -> R20,R21
                        .even
 00B6           _WriteFlash::
 00B6 00D0              rcall push_xgset300C
 00B8                   .dbline -1
 00B8                   .dbline 158
 00B8           ;   }
 00B8           ; 
 00B8           ; /*****************************************************************************/
 00B8           ; void WriteFlash(void)
 00B8           ;   {
 00B8                   .dbline 162
 00B8           ;     unsigned int i;
 00B8           ;     unsigned int TempInt;
 00B8           ; 
 00B8           ;     for (i=0;i<PageByte;i+=2)
 00B8 4427              clr R20
 00BA 5527              clr R21
 00BC 16C0              rjmp L24
 00BE           L21:
 00BE                   .dbline 163
 00BE           ;       {
 00BE                   .dbline 164
 00BE           ;       TempInt=PageBuffer[i]+(PageBuffer[i+1]<<8);
 00BE 80E0              ldi R24,<_PageBuffer
 00C0 90E0              ldi R25,>_PageBuffer
 00C2 FA01              movw R30,R20
 00C4 3196              adiw R30,1
 00C6 E80F              add R30,R24
 00C8 F91F              adc R31,R25
 00CA 2080              ldd R2,z+0
 00CC 3324              clr R3
 00CE 322C              mov R3,R2
 00D0 2224              clr R2
 00D2 FA01              movw R30,R20
 00D4 E80F              add R30,R24
 00D6 F91F              adc R31,R25
 00D8 A080              ldd R10,z+0
 00DA BB24              clr R11
 00DC A20C              add R10,R2
 00DE B31C              adc R11,R3
 00E0                   .dbline 165
 00E0           ;       fill_temp_buffer(TempInt,i);    //call asm routine.
 00E0 9A01              movw R18,R20
 00E2 8501              movw R16,R10
 00E4 00D0              rcall _fill_temp_buffer
 00E6                   .dbline 166
 00E6           ;       }
 00E6           L22:
 00E6                   .dbline 162
 00E6 4E5F              subi R20,254  ; offset = 2
 00E8 5F4F              sbci R21,255
 00EA           L24:
 00EA                   .dbline 162
 00EA 4034              cpi R20,64
 00EC E0E0              ldi R30,0
 00EE 5E07              cpc R21,R30
 00F0 30F3              brlo L21
 00F2           X7:
 00F2                   .dbline 168
 00F2           ;       
 00F2           ;     write_page(PageAddress,0x03);       //擦除页
 00F2 23E0              ldi R18,3
 00F4 00910000          lds R16,_PageAddress
 00F8 10910100          lds R17,_PageAddress+1
 00FC 00D0              rcall _write_page
 00FE                   .dbline 169
 00FE           ;     write_page(PageAddress,0x05);       //写页数据
 00FE 25E0              ldi R18,5
 0100 00910000          lds R16,_PageAddress
 0104 10910100          lds R17,_PageAddress+1
 0108 00D0              rcall _write_page
 010A                   .dbline 171
 010A           ;    
 010A           ;     enableRWW();
 010A 00D0              rcall _enableRWW
 010C                   .dbline -2
 010C           L20:
 010C                   .dbline 0 ; func end
 010C 00C0              rjmp pop_xgset300C
 010E                   .dbsym r TempInt 10 i
 010E                   .dbsym r i 20 i
 010E                   .dbend
 010E                   .dbfunc e CheckFlash _CheckFlash fc
 010E           ;       TempInt2 -> R12,R13
 010E           ;        TempInt -> R10,R11
 010E           ;              i -> R20
                        .even
 010E           _CheckFlash::
 010E 00D0              rcall push_xgset303C
 0110                   .dbline -1
 0110                   .dbline 177
 0110           ;   }
 0110           ; 
 0110           ; /*****************************************************************************/
 0110           ; 
 0110           ; char CheckFlash(void)
 0110           ;   {
 0110                   .dbline 182
 0110           ;     unsigned char i;                                                  
 0110           ;     unsigned int TempInt;
 0110           ;     unsigned int TempInt2;
 0110           ; 
 0110           ;     for (i=0;i<PageByte;i+=2)
 0110 4427              clr R20
 0112 25C0              rjmp L29
 0114           L26:
 0114                   .dbline 183
 0114           ;       {
 0114                   .dbline 184
 0114           ;       TempInt = read_program_memory(PageAddress + i,0x00);
 0114 2227              clr R18
 0116 242E              mov R2,R20
 0118 3324              clr R3
 011A 00910000          lds R16,_PageAddress
 011E 10910100          lds R17,_PageAddress+1
 0122 020D              add R16,R2
 0124 131D              adc R17,R3
 0126 00D0              rcall _read_program_memory
 0128 5801              movw R10,R16
 012A                   .dbline 185
 012A           ;       TempInt2 = PageBuffer[i] +(PageBuffer[i+1]<<8);
 012A 80E0              ldi R24,<_PageBuffer+1
 012C 90E0              ldi R25,>_PageBuffer+1
 012E E42F              mov R30,R20
 0130 FF27              clr R31
 0132 E80F              add R30,R24
 0134 F91F              adc R31,R25
 0136 2080              ldd R2,z+0
 0138 3324              clr R3
 013A 322C              mov R3,R2
 013C 2224              clr R2
 013E 80E0              ldi R24,<_PageBuffer
 0140 90E0              ldi R25,>_PageBuffer
 0142 E42F              mov R30,R20
 0144 FF27              clr R31
 0146 E80F              add R30,R24
 0148 F91F              adc R31,R25
 014A C080              ldd R12,z+0
 014C DD24              clr R13
 014E C20C              add R12,R2
 0150 D31C              adc R13,R3
 0152                   .dbline 186
 0152           ;       if (TempInt != TempInt2) return 0;
 0152 0C15              cp R16,R12
 0154 1D05              cpc R17,R13
 0156 11F0              breq L31
 0158           X8:
 0158                   .dbline 186
 0158 0027              clr R16
 015A 04C0              rjmp L25
 015C           L31:
 015C                   .dbline 187
 015C           ;       }
 015C           L27:
 015C                   .dbline 182
 015C 4E5F              subi R20,254    ; addi 2
 015E           L29:
 015E                   .dbline 182
 015E 4034              cpi R20,64
 0160 C8F2              brlo L26
 0162           X9:
 0162                   .dbline 188
 0162           ;     return 1;
 0162 01E0              ldi R16,1
 0164                   .dbline -2
 0164           L25:
 0164                   .dbline 0 ; func end
 0164 00C0              rjmp pop_xgset303C
 0166                   .dbsym r TempInt2 12 i
 0166                   .dbsym r TempInt 10 i
 0166                   .dbsym r i 20 c
 0166                   .dbend
 0166                   .dbfunc e RecChar _RecChar fc
                        .even
 0166           _RecChar::
 0166                   .dbline -1
 0166                   .dbline 194
 0166           ;   }
 0166           ; 
 0166           ; /*****************************************************************************/
 0166           ; /*            字符输入函数             */     
 0166           ; unsigned char RecChar(void)
 0166           ;   {
 0166           L34:
 0166                   .dbline 195
 0166           ;      while(!(UCSRA & 0x80));
 0166           L35:
 0166                   .dbline 195
 0166 5F9B              sbis 0xb,7
 0168 FECF              rjmp L34
 016A           X10:
 016A                   .dbline 196
 016A           ;      return UDR;
 016A 0CB1              in R16,0xc
 016C                   .dbline -2
 016C           L33:
 016C                   .dbline 0 ; func end
 016C 0895              ret
 016E                   .dbend
 016E                   .dbfunc e SendChar _SendChar fV
 016E           ;              c -> R16
                        .even
 016E           _SendChar::
 016E                   .dbline -1
 016E                   .dbline 200
 016E           ;   }           
 016E           ; /*****************************************************************************/
 016E           ; void SendChar(unsigned char c)
 016E           ;   {    
 016E           L38:
 016E                   .dbline 201
 016E           ;     while (!(UCSRA&(1<<UDRE)));
 016E           L39:
 016E                   .dbline 201
 016E 5D9B              sbis 0xb,5
 0170 FECF              rjmp L38
 0172           X11:
 0172                   .dbline 202
 0172           ;     UDR=c;
 0172 0CB9              out 0xc,R16
 0174                   .dbline -2
 0174           L37:
 0174                   .dbline 0 ; func end
 0174 0895              ret
 0176                   .dbsym r c 16 c
 0176                   .dbend
 0176                   .dbfunc e delay _delay fV
 0176           ;              i -> R16,R17
                        .even
 0176           _delay::
 0176                   .dbline -1
 0176                   .dbline 205
 0176           ;   }
 0176           ; void delay(void)  
 0176           ;   {
 0176                   .dbline 207
 0176           ;     unsigned int i;
 0176           ;     for (i=0;i<65530;i++);
 0176 0027              clr R16
 0178 1127              clr R17
 017A 02C0              rjmp L45
 017C           L42:
 017C                   .dbline 207
 017C           L43:
 017C                   .dbline 207
 017C 0F5F              subi R16,255  ; offset = 1
 017E 1F4F              sbci R17,255
 0180           L45:
 0180                   .dbline 207
 0180 8AEF              ldi R24,250
 0182 9FEF              ldi R25,255
 0184 A0E0              ldi R26,0
 0186 B0E0              ldi R27,0
 0188 1801              movw R2,R16
 018A 4424              clr R4
 018C 5524              clr R5
 018E 2816              cp R2,R24
 0190 3906              cpc R3,R25
 0192 4A06              cpc R4,R26
 0194 5B06              cpc R5,R27
 0196 94F3              brlt L42
 0198           X12:
 0198                   .dbline -2
 0198           L41:
 0198                   .dbline 0 ; func end
 0198 0895              ret
 019A                   .dbsym r i 16 i
 019A                   .dbend
 019A                   .dbfunc e ExecCode _ExecCode fV
                        .even
 019A           _ExecCode::
 019A                   .dbline -1
 019A                   .dbline 212
 019A           ;   }
 019A           ; 
 019A           ; /*****************************************************************************/
 019A           ; void ExecCode(void)
 019A           ;   {
 019A                   .dbline 213
 019A           ;     GICR=0X01;           //中断向量表移位允许
 019A 81E0              ldi R24,1
 019C 8BBF              out 0x3b,R24

⌨️ 快捷键说明

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