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

📄 main.lis

📁 使用STK500_2 协议的bootloader
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 0282                   .dbline 202
 0282           ;               num_bytes = 2;
 0282 82E0              ldi R24,2
 0284 90E0              ldi R25,0
 0286 9F83              std y+7,R25
 0288 8E83              std y+6,R24
 028A                   .dbline 203
 028A           ;               msg_buffer[0] = CMD_LOAD_ADDRESS;
 028A 86E0              ldi R24,6
 028C 80930D00          sts _msg_buffer,R24
 0290                   .dbline 204
 0290           ;               msg_buffer[1] = STATUS_CMD_OK;
 0290 2224              clr R2
 0292 20920E00          sts _msg_buffer+1,R2
 0296                   .dbline 205
 0296           ;       }
 0296 0EC1              xjmp L52
 0298           L51:
 0298                   .dbline 207
 0298           ;       //CMD_CHIP_ERASE_ISP
 0298           ;       else if(cmd==CMD_CHIP_ERASE_ISP)
 0298 8E2D              mov R24,R14
 029A 8231              cpi R24,18
 029C 59F4              brne L56
 029E                   .dbline 208
 029E           ;       {               
 029E                   .dbline 209
 029E           ;               num_bytes = 2;
 029E 82E0              ldi R24,2
 02A0 90E0              ldi R25,0
 02A2 9F83              std y+7,R25
 02A4 8E83              std y+6,R24
 02A6                   .dbline 210
 02A6           ;               msg_buffer[0] = CMD_CHIP_ERASE_ISP;
 02A6 82E1              ldi R24,18
 02A8 80930D00          sts _msg_buffer,R24
 02AC                   .dbline 211
 02AC           ;               msg_buffer[1] = STATUS_CMD_OK;          
 02AC 2224              clr R2
 02AE 20920E00          sts _msg_buffer+1,R2
 02B2                   .dbline 212
 02B2           ;       }
 02B2 00C1              xjmp L57
 02B4           L56:
 02B4                   .dbline 214
 02B4           ;       //命令CMD_ENTER_PROGMODE_ISP
 02B4           ;       else if(cmd == CMD_ENTER_PROGMODE_ISP)
 02B4 8E2D              mov R24,R14
 02B6 8031              cpi R24,16
 02B8 59F4              brne L59
 02BA                   .dbline 215
 02BA           ;       {
 02BA                   .dbline 216
 02BA           ;               num_bytes = 2;
 02BA 82E0              ldi R24,2
 02BC 90E0              ldi R25,0
 02BE 9F83              std y+7,R25
 02C0 8E83              std y+6,R24
 02C2                   .dbline 217
 02C2           ;               msg_buffer[0] = CMD_ENTER_PROGMODE_ISP;
 02C2 80E1              ldi R24,16
 02C4 80930D00          sts _msg_buffer,R24
 02C8                   .dbline 218
 02C8           ;               msg_buffer[1] = STATUS_CMD_OK;
 02C8 2224              clr R2
 02CA 20920E00          sts _msg_buffer+1,R2
 02CE                   .dbline 219
 02CE           ;       }
 02CE F2C0              xjmp L60
 02D0           L59:
 02D0                   .dbline 221
 02D0           ;       //命令 CMD_LEAVE_PROGMODE_ISP
 02D0           ;       else if(cmd==CMD_LEAVE_PROGMODE_ISP)
 02D0 8E2D              mov R24,R14
 02D2 8131              cpi R24,17
 02D4 91F4              brne L62
 02D6                   .dbline 222
 02D6           ;       {
 02D6                   .dbline 223
 02D6           ;               num_bytes = 2;
 02D6 82E0              ldi R24,2
 02D8 90E0              ldi R25,0
 02DA 9F83              std y+7,R25
 02DC 8E83              std y+6,R24
 02DE                   .dbline 224
 02DE           ;               msg_buffer[0] = CMD_LEAVE_PROGMODE_ISP;
 02DE 81E1              ldi R24,17
 02E0 80930D00          sts _msg_buffer,R24
 02E4                   .dbline 225
 02E4           ;               msg_buffer[1] = STATUS_CMD_OK;  
 02E4 2224              clr R2
 02E6 20920E00          sts _msg_buffer+1,R2
 02EA                   .dbline 227
 02EA           ;                       
 02EA           ;               flag = 0;
 02EA 20920000          sts _flag,R2
 02EE                   .dbline 228
 02EE           ;               TCNT1 = 0x2d11;
 02EE 9DE2              ldi R25,45
 02F0 9DBD              out 0x2d,R25
 02F2 8CBD              out 0x2c,R24
 02F4                   .dbline 229
 02F4           ;               TCCR1B = 0x05;
 02F4 85E0              ldi R24,5
 02F6 8EBD              out 0x2e,R24
 02F8                   .dbline 230
 02F8           ;       }
 02F8 DDC0              xjmp L63
 02FA           L62:
 02FA                   .dbline 232
 02FA           ;       //命令CMD_PROGRAM_FLASH_ISP
 02FA           ;       else if(cmd==CMD_PROGRAM_FLASH_ISP)
 02FA 8E2D              mov R24,R14
 02FC 8331              cpi R24,19
 02FE 09F0              breq X5
 0300 48C0              xjmp L65
 0302           X5:
 0302                   .dbline 233
 0302           ;       {
 0302                   .dbline 235
 0302           ;               uint16 temp16; 
 0302           ;               boot_page_ew(address,0x03);                                             //擦除页
 0302 23E0              ldi R18,3
 0304 00910200          lds R16,_address
 0308 10910300          lds R17,_address+1
 030C 0E940000          xcall _boot_page_ew
 0310                   .dbline 236
 0310           ;               wait_page_rw_ok();                              //等待擦除完成 
 0310 0E940000          xcall _wait_page_rw_ok
 0314                   .dbline 237
 0314           ;               for(i=0;i<(SPM_PAGESIZE<<1);i+=2)                       //将数据填入Flash缓冲页中 
 0314 CC24              clr R12
 0316 DD24              clr R13
 0318 19C0              xjmp L70
 031A           L67:
 031A                   .dbline 238
 031A                   .dbline 239
 031A 80E0              ldi R24,<_msg_buffer
 031C 90E0              ldi R25,>_msg_buffer
 031E F601              movw R30,R12
 0320 3B96              adiw R30,11
 0322 E80F              add R30,R24
 0324 F91F              adc R31,R25
 0326 A080              ldd R10,z+0
 0328 BB24              clr R11
 032A                   .dbline 240
 032A BA2C              mov R11,R10
 032C AA24              clr R10
 032E                   .dbline 241
 032E F601              movw R30,R12
 0330 3A96              adiw R30,10
 0332 E80F              add R30,R24
 0334 F91F              adc R31,R25
 0336 2080              ldd R2,z+0
 0338 3324              clr R3
 033A A20C              add R10,R2
 033C B31C              adc R11,R3
 033E                   .dbline 242
 033E 9501              movw R18,R10
 0340 8601              movw R16,R12
 0342 0E940000          xcall _boot_page_fill
 0346                   .dbline 243
 0346           L68:
 0346                   .dbline 237
 0346 C601              movw R24,R12
 0348 0296              adiw R24,2
 034A 6C01              movw R12,R24
 034C           L70:
 034C                   .dbline 237
 034C C601              movw R24,R12
 034E 8038              cpi R24,128
 0350 E0E0              ldi R30,0
 0352 9E07              cpc R25,R30
 0354 10F3              brlo L67
 0356                   .dbline 244
 0356           ;               { 
 0356           ;                               temp16=msg_buffer[i+11];
 0356           ;                               temp16<<=8;
 0356           ;                               temp16+=msg_buffer[i+10];
 0356           ;                               boot_page_fill(i,temp16); 
 0356           ;       }
 0356           ;               boot_page_ew(address,0x05);                     //将缓冲页数据写入一个Flash页 
 0356 25E0              ldi R18,5
 0358 00910200          lds R16,_address
 035C 10910300          lds R17,_address+1
 0360 0E940000          xcall _boot_page_ew
 0364                   .dbline 245
 0364           ;       wait_page_rw_ok();                              //等待写入完成 
 0364 0E940000          xcall _wait_page_rw_ok
 0368                   .dbline 246
 0368           ;               address+=(SPM_PAGESIZE<<1);
 0368 80910200          lds R24,_address
 036C 90910300          lds R25,_address+1
 0370 8058              subi R24,128  ; offset = 128
 0372 9F4F              sbci R25,255
 0374 90930300          sts _address+1,R25
 0378 80930200          sts _address,R24
 037C                   .dbline 247
 037C           ;               num_bytes = 2;
 037C 82E0              ldi R24,2
 037E 90E0              ldi R25,0
 0380 9F83              std y+7,R25
 0382 8E83              std y+6,R24
 0384                   .dbline 248
 0384           ;               msg_buffer[0] = CMD_PROGRAM_FLASH_ISP;
 0384 83E1              ldi R24,19
 0386 80930D00          sts _msg_buffer,R24
 038A                   .dbline 249
 038A           ;               msg_buffer[1] = STATUS_CMD_OK;
 038A 2224              clr R2
 038C 20920E00          sts _msg_buffer+1,R2
 0390                   .dbline 250
 0390           ;       }
 0390 91C0              xjmp L66
 0392           L65:
 0392                   .dbline 252
 0392           ;       //命令CMD_READ_FLASH_ISP
 0392           ;       else if(cmd==CMD_READ_FLASH_ISP)
 0392 8E2D              mov R24,R14
 0394 8431              cpi R24,20
 0396 91F5              brne L72
 0398                   .dbline 253
 0398           ;       {
 0398                   .dbline 254
 0398           ;               for(i=0;i<(SPM_PAGESIZE<<2);i++)
 0398 CC24              clr R12
 039A DD24              clr R13
 039C 13C0              xjmp L77
 039E           L74:
 039E                   .dbline 255
 039E                   .dbline 256
 039E 2227              clr R18
 03A0 00910200          lds R16,_address
 03A4 10910300          lds R17,_address+1
 03A8 0C0D              add R16,R12
 03AA 1D1D              adc R17,R13
 03AC 0E940000          xcall _read_program_memory
 03B0 80E0              ldi R24,<_msg_buffer
 03B2 90E0              ldi R25,>_msg_buffer
 03B4 F601              movw R30,R12
 03B6 3296              adiw R30,2
 03B8 E80F              add R30,R24
 03BA F91F              adc R31,R25
 03BC 0083              std z+0,R16
 03BE                   .dbline 257
 03BE           L75:
 03BE                   .dbline 254
 03BE C601              movw R24,R12
 03C0 0196              adiw R24,1
 03C2 6C01              movw R12,R24
 03C4           L77:
 03C4                   .dbline 254
 03C4 C601              movw R24,R12
 03C6 8030              cpi R24,0
 03C8 E1E0              ldi R30,1
 03CA 9E07              cpc R25,R30
 03CC 40F3              brlo L74
 03CE                   .dbline 258
 03CE           ;               {
 03CE           ;                       msg_buffer[i+2] = read_program_memory (address+i,0x00);
 03CE           ;               }
 03CE           ;               address+=SPM_PAGESIZE<<2;
 03CE 80910200          lds R24,_address
 03D2 90910300          lds R25,_address+1
 03D6 8050              subi R24,0  ; offset = 256
 03D8 9F4F              sbci R25,255
 03DA 90930300          sts _address+1,R25
 03DE 80930200          sts _address,R24
 03E2                   .dbline 259
 03E2           ;               num_bytes = (SPM_PAGESIZE<<2)+3;
 03E2 83E0              ldi R24,259
 03E4 91E0              ldi R25,1
 03E6 9F83              std y+7,R25
 03E8 8E83              std y+6,R24
 03EA                   .dbline 260
 03EA           ;               msg_buffer[0] = CMD_READ_FLASH_ISP;
 03EA 84E1              ldi R24,20
 03EC 80930D00          sts _msg_buffer,R24
 03F0                   .dbline 261
 03F0           ;               msg_buffer[1] = STATUS_CMD_OK;
 03F0 2224              clr R2
 03F2 20920E00          sts _msg_buffer+1,R2
 03F6                   .dbline 262
 03F6           ;               msg_buffer[(SPM_PAGESIZE<<2)+2] = STATUS_CMD_OK;
 03F6 20920F01          sts _msg_buffer+258,R2
 03FA                   .dbline 263
 03FA           ;       }
 03FA 5CC0              xjmp L73
 03FC           L72:
 03FC                   .dbline 265
 03FC           ;       //命令CMD_READ_FUSE_ISP
 03FC           ;       else if(cmd==CMD_READ_FUSE_ISP)
 03FC 8E2D              mov R24,R14
 03FE 8831              cpi R24,24
 0400 71F5              brne L80
 0402                   .dbline 266
 0402           ;       {       
 0402                   .dbline 267
 0402           ;               switch(msg_buffer[2])           
 0402 A0900F00          lds R10,_msg_buffer+2
 0406 BB24              clr R11
 0408 C501              movw R24,R10
 040A 8035              cpi R24,80
 040C E0E0              ldi R30,0
 040E 9E07              cpc R25,R30
 0410 51F0              breq L86
 0412 8035              cpi R24,80
 0414 E0E0              ldi R30,0
 0416 9E07              cpc R25,R30
 0418 ACF0              brlt L83
 041A           L90:
 041A C501              movw R24,R10
 041C 8835              cpi R24,88
 041E E0E0              ldi R30,0

⌨️ 快捷键说明

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