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