📄 main.lis
字号:
0290 86E0 ldi R24,6
0292 80930D00 sts _msg_buffer,R24
0296 .dbline 193
0296 ; msg_buffer[1] = STATUS_CMD_OK;
0296 2224 clr R2
0298 20920E00 sts _msg_buffer+1,R2
029C .dbline 194
029C ; }
029C 0FC1 xjmp L52
029E L51:
029E .dbline 196
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 197
02A4 ; {
02A4 .dbline 198
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 199
02AC ; msg_buffer[0] = CMD_CHIP_ERASE_ISP;
02AC 82E1 ldi R24,18
02AE 80930D00 sts _msg_buffer,R24
02B2 .dbline 200
02B2 ; msg_buffer[1] = STATUS_CMD_OK;
02B2 2224 clr R2
02B4 20920E00 sts _msg_buffer+1,R2
02B8 .dbline 201
02B8 ; }
02B8 01C1 xjmp L57
02BA L56:
02BA .dbline 203
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 204
02C0 ; {
02C0 .dbline 205
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 206
02C8 ; msg_buffer[0] = CMD_ENTER_PROGMODE_ISP;
02C8 80E1 ldi R24,16
02CA 80930D00 sts _msg_buffer,R24
02CE .dbline 207
02CE ; msg_buffer[1] = STATUS_CMD_OK;
02CE 2224 clr R2
02D0 20920E00 sts _msg_buffer+1,R2
02D4 .dbline 208
02D4 ; }
02D4 F3C0 xjmp L60
02D6 L59:
02D6 .dbline 210
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 211
02DC ; {
02DC .dbline 212
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 213
02E4 ; msg_buffer[0] = CMD_LEAVE_PROGMODE_ISP;
02E4 81E1 ldi R24,17
02E6 80930D00 sts _msg_buffer,R24
02EA .dbline 214
02EA ; msg_buffer[1] = STATUS_CMD_OK;
02EA 2224 clr R2
02EC 20920E00 sts _msg_buffer+1,R2
02F0 .dbline 216
02F0 ;
02F0 ; flag = 0;
02F0 20920000 sts _flag,R2
02F4 .dbline 217
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 218
02FC ; TCCR1B = 0x05;
02FC 85E0 ldi R24,5
02FE 8EBD out 0x2e,R24
0300 .dbline 219
0300 ; }
0300 DDC0 xjmp L63
0302 L62:
0302 .dbline 221
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 222
030A ; {
030A .dbline 224
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 225
0318 ; wait_page_rw_ok(); //等待擦除完成
0318 0E940000 xcall _wait_page_rw_ok
031C .dbline 226
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 227
0322 .dbline 228
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 229
0332 BA2C mov R11,R10
0334 AA24 clr R10
0336 .dbline 230
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 231
0346 9501 movw R18,R10
0348 8601 movw R16,R12
034A 0E940000 xcall _boot_page_fill
034E .dbline 232
034E L68:
034E .dbline 226
034E C601 movw R24,R12
0350 0296 adiw R24,2
0352 6C01 movw R12,R24
0354 L70:
0354 .dbline 226
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 233
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 234
036C ; wait_page_rw_ok(); //等待写入完成
036C 0E940000 xcall _wait_page_rw_ok
0370 .dbline 235
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 236
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 237
038C ; msg_buffer[0] = CMD_PROGRAM_FLASH_ISP;
038C 83E1 ldi R24,19
038E 80930D00 sts _msg_buffer,R24
0392 .dbline 238
0392 ; msg_buffer[1] = STATUS_CMD_OK;
0392 2224 clr R2
0394 20920E00 sts _msg_buffer+1,R2
0398 .dbline 239
0398 ; }
0398 91C0 xjmp L66
039A L65:
039A .dbline 241
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 242
03A0 ; {
03A0 .dbline 243
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 244
03A6 .dbline 245
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 246
03C6 L75:
03C6 .dbline 243
03C6 C601 movw R24,R12
03C8 0196 adiw R24,1
03CA 6C01 movw R12,R24
03CC L77:
03CC .dbline 243
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 247
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 248
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 249
03F2 ; msg_buffer[0] = CMD_READ_FLASH_ISP;
03F2 84E1 ldi R24,20
03F4 80930D00 sts _msg_buffer,R24
03F8 .dbline 250
03F8 ; msg_buffer[1] = STATUS_CMD_OK;
03F8 2224 clr R2
03FA 20920E00 sts _msg_buffer+1,R2
03FE .dbline 251
03FE ; msg_buffer[(SPM_PAGESIZE<<2)+2] = STATUS_CMD_OK;
03FE 20920F01 sts _msg_buffer+258,R2
0402 .dbline 252
0402 ; }
0402 5CC0 xjmp L73
0404 L72:
0404 .dbline 254
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 255
040A ; {
040A .dbline 256
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
0428 9E07 cpc R25,R30
042A 49F0 breq L88
042C 0FC0 xjmp L83
042E X3:
042E .dbline 257
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -