📄 main.s
字号:
; msg_buffer[0] = CMD_LOAD_ADDRESS;
ldi R24,6
sts _msg_buffer,R24
.dbline 193
; msg_buffer[1] = STATUS_CMD_OK;
clr R2
sts _msg_buffer+1,R2
.dbline 194
; }
xjmp L52
L51:
.dbline 196
; //CMD_CHIP_ERASE_ISP
; else if(cmd==CMD_CHIP_ERASE_ISP)
mov R24,R14
cpi R24,18
brne L56
.dbline 197
; {
.dbline 198
; num_bytes = 2;
ldi R24,2
ldi R25,0
std y+7,R25
std y+6,R24
.dbline 199
; msg_buffer[0] = CMD_CHIP_ERASE_ISP;
ldi R24,18
sts _msg_buffer,R24
.dbline 200
; msg_buffer[1] = STATUS_CMD_OK;
clr R2
sts _msg_buffer+1,R2
.dbline 201
; }
xjmp L57
L56:
.dbline 203
; //命令CMD_ENTER_PROGMODE_ISP
; else if(cmd == CMD_ENTER_PROGMODE_ISP)
mov R24,R14
cpi R24,16
brne L59
.dbline 204
; {
.dbline 205
; num_bytes = 2;
ldi R24,2
ldi R25,0
std y+7,R25
std y+6,R24
.dbline 206
; msg_buffer[0] = CMD_ENTER_PROGMODE_ISP;
ldi R24,16
sts _msg_buffer,R24
.dbline 207
; msg_buffer[1] = STATUS_CMD_OK;
clr R2
sts _msg_buffer+1,R2
.dbline 208
; }
xjmp L60
L59:
.dbline 210
; //命令 CMD_LEAVE_PROGMODE_ISP
; else if(cmd==CMD_LEAVE_PROGMODE_ISP)
mov R24,R14
cpi R24,17
brne L62
.dbline 211
; {
.dbline 212
; num_bytes = 2;
ldi R24,2
ldi R25,0
std y+7,R25
std y+6,R24
.dbline 213
; msg_buffer[0] = CMD_LEAVE_PROGMODE_ISP;
ldi R24,17
sts _msg_buffer,R24
.dbline 214
; msg_buffer[1] = STATUS_CMD_OK;
clr R2
sts _msg_buffer+1,R2
.dbline 216
;
; flag = 0;
sts _flag,R2
.dbline 217
; TCNT1 = 0x735F;
ldi R24,29535
ldi R25,115
out 0x2d,R25
out 0x2c,R24
.dbline 218
; TCCR1B = 0x05;
ldi R24,5
out 0x2e,R24
.dbline 219
; }
xjmp L63
L62:
.dbline 221
; //命令CMD_PROGRAM_FLASH_ISP
; else if(cmd==CMD_PROGRAM_FLASH_ISP)
mov R24,R14
cpi R24,19
breq X5
xjmp L65
X5:
.dbline 222
; {
.dbline 224
; uint16 temp16;
; boot_page_ew(address,0x03); //擦除页
ldi R18,3
lds R16,_address
lds R17,_address+1
xcall _boot_page_ew
.dbline 225
; wait_page_rw_ok(); //等待擦除完成
xcall _wait_page_rw_ok
.dbline 226
; for(i=0;i<(SPM_PAGESIZE<<1);i+=2) //将数据填入Flash缓冲页中
clr R12
clr R13
xjmp L70
L67:
.dbline 227
.dbline 228
ldi R24,<_msg_buffer
ldi R25,>_msg_buffer
movw R30,R12
adiw R30,11
add R30,R24
adc R31,R25
ldd R10,z+0
clr R11
.dbline 229
mov R11,R10
clr R10
.dbline 230
movw R30,R12
adiw R30,10
add R30,R24
adc R31,R25
ldd R2,z+0
clr R3
add R10,R2
adc R11,R3
.dbline 231
movw R18,R10
movw R16,R12
xcall _boot_page_fill
.dbline 232
L68:
.dbline 226
movw R24,R12
adiw R24,2
movw R12,R24
L70:
.dbline 226
movw R24,R12
cpi R24,128
ldi R30,0
cpc R25,R30
brlo L67
.dbline 233
; {
; temp16=msg_buffer[i+11];
; temp16<<=8;
; temp16+=msg_buffer[i+10];
; boot_page_fill(i,temp16);
; }
; boot_page_ew(address,0x05); //将缓冲页数据写入一个Flash页
ldi R18,5
lds R16,_address
lds R17,_address+1
xcall _boot_page_ew
.dbline 234
; wait_page_rw_ok(); //等待写入完成
xcall _wait_page_rw_ok
.dbline 235
; address+=(SPM_PAGESIZE<<1);
lds R24,_address
lds R25,_address+1
subi R24,128 ; offset = 128
sbci R25,255
sts _address+1,R25
sts _address,R24
.dbline 236
; num_bytes = 2;
ldi R24,2
ldi R25,0
std y+7,R25
std y+6,R24
.dbline 237
; msg_buffer[0] = CMD_PROGRAM_FLASH_ISP;
ldi R24,19
sts _msg_buffer,R24
.dbline 238
; msg_buffer[1] = STATUS_CMD_OK;
clr R2
sts _msg_buffer+1,R2
.dbline 239
; }
xjmp L66
L65:
.dbline 241
; //命令CMD_READ_FLASH_ISP
; else if(cmd==CMD_READ_FLASH_ISP)
mov R24,R14
cpi R24,20
brne L72
.dbline 242
; {
.dbline 243
; for(i=0;i<(SPM_PAGESIZE<<2);i++)
clr R12
clr R13
xjmp L77
L74:
.dbline 244
.dbline 245
clr R18
lds R16,_address
lds R17,_address+1
add R16,R12
adc R17,R13
xcall _read_program_memory
ldi R24,<_msg_buffer
ldi R25,>_msg_buffer
movw R30,R12
adiw R30,2
add R30,R24
adc R31,R25
std z+0,R16
.dbline 246
L75:
.dbline 243
movw R24,R12
adiw R24,1
movw R12,R24
L77:
.dbline 243
movw R24,R12
cpi R24,0
ldi R30,1
cpc R25,R30
brlo L74
.dbline 247
; {
; msg_buffer[i+2] = read_program_memory (address+i,0x00);
; }
; address+=SPM_PAGESIZE<<2;
lds R24,_address
lds R25,_address+1
subi R24,0 ; offset = 256
sbci R25,255
sts _address+1,R25
sts _address,R24
.dbline 248
; num_bytes = (SPM_PAGESIZE<<2)+3;
ldi R24,259
ldi R25,1
std y+7,R25
std y+6,R24
.dbline 249
; msg_buffer[0] = CMD_READ_FLASH_ISP;
ldi R24,20
sts _msg_buffer,R24
.dbline 250
; msg_buffer[1] = STATUS_CMD_OK;
clr R2
sts _msg_buffer+1,R2
.dbline 251
; msg_buffer[(SPM_PAGESIZE<<2)+2] = STATUS_CMD_OK;
sts _msg_buffer+258,R2
.dbline 252
; }
xjmp L73
L72:
.dbline 254
; //命令CMD_READ_FUSE_ISP
; else if(cmd==CMD_READ_FUSE_ISP)
mov R24,R14
cpi R24,24
brne L80
.dbline 255
; {
.dbline 256
; switch(msg_buffer[2])
lds R10,_msg_buffer+2
clr R11
movw R24,R10
cpi R24,80
ldi R30,0
cpc R25,R30
breq L86
cpi R24,80
ldi R30,0
cpc R25,R30
brlt L83
L90:
movw R24,R10
cpi R24,88
ldi R30,0
cpc R25,R30
breq L88
xjmp L83
X3:
.dbline 257
; {
L86:
.dbline 259
; case 0x50:
; msg_buffer[2] = read_program_memory(0x0000,1); //读熔丝位
ldi R18,1
clr R16
clr R17
xcall _read_program_memory
sts _msg_buffer+2,R16
.dbline 260
; break;
xjmp L83
L88:
.dbline 262
; case 0x58:
; msg_buffer[2] = read_program_memory(0x0003,1); //读高熔丝位
ldi R18,1
ldi R16,3
ldi R17,0
xcall _read_program_memory
sts _msg_buffer+2,R16
.dbline 263
; break;
.dbline 265
; default:
; break;
L83:
.dbline 267
; }
; num_bytes = 4;
ldi R24,4
ldi R25,0
std y+7,R25
std y+6,R24
.dbline 268
; msg_buffer[0] = CMD_READ_FUSE_ISP;
ldi R24,24
sts _msg_buffer,R24
.dbline 269
; msg_buffer[1] = STATUS_CMD_OK;
clr R2
sts _msg_buffer+1,R2
.dbline 270
; msg_buffer[3] = STATUS_CMD_OK;
sts _msg_buffer+3,R2
.dbline 271
; }
xjmp L81
L80:
.dbline 273
; //命令CMD_PROGRAM_LOCK_ISP
; else if(cmd==CMD_PROGRAM_LOCK_ISP)
mov R24,R14
cpi R24,25
brne L93
.dbline 274
; {
.dbline 275
; write_lock_bits (msg_buffer[4]|0xC0);
lds R16,_msg_buffer+4
ori R16,192
xcall _write_lock_bits
.dbline 276
; num_bytes = 3;
ldi R24,3
ldi R25,0
std y+7,R25
std y+6,R24
.dbline 277
; msg_buffer[0] = CMD_PROGRAM_LOCK_ISP;
ldi R24,25
sts _msg_buffer,R24
.dbline 278
; msg_buffer[1] = STATUS_CMD_OK;
clr R2
sts _msg_buffer+1,R2
.dbline 279
; msg_buffer[2] = STATUS_CMD_OK;
sts _msg_buffer+2,R2
.dbline 280
; }
xjmp L94
L93:
.dbline 282
; //命令CMD_READ_LOCK_ISP
; else if(cmd==CMD_READ_LOCK_ISP)
mov R24,R14
cpi R24,26
brne L98
.dbline 283
; {
.dbline 284
; msg_buffer[2] = read_program_memory(0x0001,1);
ldi R18,1
ldi R16,1
ldi R17,0
xcall _read_program_memory
sts _msg_buffer+2,R16
.dbline 285
; num_bytes = 4;
ldi R24,4
ldi R25,0
std y+7,R25
std y+6,R24
.dbline 286
; msg_buffer[0] = CMD_READ_LOCK_ISP;
ldi R24,26
sts _msg_buffer,R24
.dbline 287
; msg_buffer[1] = STATUS_CMD_OK;
clr R2
sts _msg_buffer+1,R2
.dbline 288
; msg_buffer[3] = STATUS_CMD_OK;
sts _msg_buffer+3,R2
.dbline 289
; }
L98:
L94:
L81:
L73:
L66:
L63:
L60:
L57:
L52:
L39:
L36:
L30:
.dbline 291
; //传送缓冲区数据
; if(num_bytes>0)
ldd R0,y+6
ldd R1,y+7
tst R0
brne X4
tst R1
brne X6
xjmp L103
X6:
X4:
.dbline 292
; {
.dbline 293
; putChar(MESSAGE_START);
ldi R16,27
xcall _putChar
.dbline 294
; checkSum=MESSAGE_START;
ldi R24,27
sts _checkSum,R24
.dbline 295
; putChar(seqNum);
ldd R16,y+19
xcall _putChar
.dbline 296
; checkSum^=seqNum;
lds R2,_checkSum
ldd R0,y+19
eor R2,R0
sts _checkSum,R2
.dbline 297
; tmp=(num_bytes&0xFF00)>>8;
ldd R24,y+6
ldd R25,y+7
andi R24,0
mov R24,R25
clr R25
std y+8,R24
.dbline 298
; putChar(tmp);
mov R16,R24
xcall _putChar
.dbline 299
; checkSum^=tmp;
lds R2,_checkSum
ldd R0,y+8
eor R2,R0
sts _checkSum,R2
.dbline 300
; tmp=num_bytes&0x00FF;
ldd R24,y+6
ldd R25,y+7
andi R25,0
std y+8,R24
.dbline 301
; putChar(tmp);
mov R16,R24
xcall _putChar
.dbline 302
; checkSum^=tmp;
lds R2,_checkSum
ldd R0,y+8
eor R2,R0
sts _checkSum,R2
.dbline 303
; putChar(TOKEN);
ldi R16,14
xcall _putChar
.dbline 304
; checkSum^=TOKEN;
ldi R24,14
lds R2,_checkSum
eor R2,R24
sts _checkSum,R2
.dbline 305
; for(i=0;i<num_bytes;i++)
clr R12
clr R13
xjmp L108
L105:
.dbline 306
.dbline 307
ldi R24,<_msg_buffer
ldi R25,>_msg_buffer
movw R30,R12
add R30,R24
adc R31,R25
ldd R16,z+0
xcall _putChar
.dbline 308
ldi R24,<_msg_buffer
ldi R25,>_msg_buffer
movw R30,R12
add R30,R24
adc R31,R25
ldd R2,z+0
lds R3,_checkSum
eor R3,R2
sts _checkSum,R3
.dbline 309
L106:
.dbline 305
movw R24,R12
adiw R24,1
movw R12,R24
L108:
.dbline 305
ldd R0,y+6
ldd R1,y+7
cp R12,R0
cpc R13,R1
brlo L105
.dbline 310
lds R16,_checkSum
xcall _putChar
.dbline 311
clr R2
sts _checkSum,R2
.dbline 312
L103:
.dbline -2
L28:
adiw R28,9
xcall pop_gset5
adiw R28,2
.dbline 0 ; func end
ret
.dbsym r temp16 10 i
.dbsym l start_address 2 l
.dbsym r cmd 14 c
.dbsym l tmp 8 c
.dbsym l num_bytes 6 i
.dbsym r i 12 i
.dbsym l seqNum 19 c
.dbend
.area bss(ram, con, rel)
.dbfile D:\iccv7avr\AVRBOO~1\main.c
_address::
.blkb 2
.dbfile D:\iccv7avr\AVRBOO~1/para.h
.dbsym e address _address i
_msgSize::
.blkb 2
.dbsym e msgSize _msgSize i
_statusMachine::
.blkb 1
.dbsym e statusMachine _statusMachine c
_prgMode::
.blkb 1
.dbsym e prgMode _prgMode c
_paramControllerInit::
.blkb 1
.dbsym e paramControllerInit _paramControllerInit c
_resetPolarity::
.blkb 1
.dbsym e resetPolarity _resetPolarity c
_clockSpeed::
.blkb 1
.dbsym e clockSpeed _clockSpeed c
_checkSum::
.blkb 1
.dbsym e checkSum _checkSum c
_seqNumber::
.blkb 1
.dbsym e seqNumber _seqNumber c
_msg_buffer::
.blkb 300
.dbsym e msg_buffer _msg_buffer A[300:300]c
.area data(ram, con, rel)
.dbfile D:\iccv7avr\AVRBOO~1/para.h
L34:
.blkb 9
.area idata
.byte 'S,'T,'K,53,48,48,95,50,0
.area data(ram, con, rel)
.dbfile D:\iccv7avr\AVRBOO~1/para.h
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -