?? main.s
字號:
.dbline 202
; num_bytes = 2;
ldi R24,2
ldi R25,0
std y+7,R25
std y+6,R24
.dbline 203
; msg_buffer[0] = CMD_LOAD_ADDRESS;
ldi R24,6
sts _msg_buffer,R24
.dbline 204
; msg_buffer[1] = STATUS_CMD_OK;
clr R2
sts _msg_buffer+1,R2
.dbline 205
; }
xjmp L52
L51:
.dbline 207
; //CMD_CHIP_ERASE_ISP
; else if(cmd==CMD_CHIP_ERASE_ISP)
mov R24,R14
cpi R24,18
brne L56
.dbline 208
; {
.dbline 209
; num_bytes = 2;
ldi R24,2
ldi R25,0
std y+7,R25
std y+6,R24
.dbline 210
; msg_buffer[0] = CMD_CHIP_ERASE_ISP;
ldi R24,18
sts _msg_buffer,R24
.dbline 211
; msg_buffer[1] = STATUS_CMD_OK;
clr R2
sts _msg_buffer+1,R2
.dbline 212
; }
xjmp L57
L56:
.dbline 214
; //命令CMD_ENTER_PROGMODE_ISP
; else if(cmd == CMD_ENTER_PROGMODE_ISP)
mov R24,R14
cpi R24,16
brne L59
.dbline 215
; {
.dbline 216
; num_bytes = 2;
ldi R24,2
ldi R25,0
std y+7,R25
std y+6,R24
.dbline 217
; msg_buffer[0] = CMD_ENTER_PROGMODE_ISP;
ldi R24,16
sts _msg_buffer,R24
.dbline 218
; msg_buffer[1] = STATUS_CMD_OK;
clr R2
sts _msg_buffer+1,R2
.dbline 219
; }
xjmp L60
L59:
.dbline 221
; //命令 CMD_LEAVE_PROGMODE_ISP
; else if(cmd==CMD_LEAVE_PROGMODE_ISP)
mov R24,R14
cpi R24,17
brne L62
.dbline 222
; {
.dbline 223
; num_bytes = 2;
ldi R24,2
ldi R25,0
std y+7,R25
std y+6,R24
.dbline 224
; msg_buffer[0] = CMD_LEAVE_PROGMODE_ISP;
ldi R24,17
sts _msg_buffer,R24
.dbline 225
; msg_buffer[1] = STATUS_CMD_OK;
clr R2
sts _msg_buffer+1,R2
.dbline 227
;
; flag = 0;
sts _flag,R2
.dbline 228
; TCNT1 = 0x2d11;
ldi R25,45
out 0x2d,R25
out 0x2c,R24
.dbline 229
; TCCR1B = 0x05;
ldi R24,5
out 0x2e,R24
.dbline 230
; }
xjmp L63
L62:
.dbline 232
; //命令CMD_PROGRAM_FLASH_ISP
; else if(cmd==CMD_PROGRAM_FLASH_ISP)
mov R24,R14
cpi R24,19
breq X5
xjmp L65
X5:
.dbline 233
; {
.dbline 235
; uint16 temp16;
; boot_page_ew(address,0x03); //擦除頁
ldi R18,3
lds R16,_address
lds R17,_address+1
xcall _boot_page_ew
.dbline 236
; wait_page_rw_ok(); //等待擦除完成
xcall _wait_page_rw_ok
.dbline 237
; for(i=0;i<(SPM_PAGESIZE<<1);i+=2) //將數據填入Flash緩沖頁中
clr R12
clr R13
xjmp L70
L67:
.dbline 238
.dbline 239
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 240
mov R11,R10
clr R10
.dbline 241
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 242
movw R18,R10
movw R16,R12
xcall _boot_page_fill
.dbline 243
L68:
.dbline 237
movw R24,R12
adiw R24,2
movw R12,R24
L70:
.dbline 237
movw R24,R12
cpi R24,128
ldi R30,0
cpc R25,R30
brlo L67
.dbline 244
; {
; 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 245
; wait_page_rw_ok(); //等待寫入完成
xcall _wait_page_rw_ok
.dbline 246
; 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 247
; num_bytes = 2;
ldi R24,2
ldi R25,0
std y+7,R25
std y+6,R24
.dbline 248
; msg_buffer[0] = CMD_PROGRAM_FLASH_ISP;
ldi R24,19
sts _msg_buffer,R24
.dbline 249
; msg_buffer[1] = STATUS_CMD_OK;
clr R2
sts _msg_buffer+1,R2
.dbline 250
; }
xjmp L66
L65:
.dbline 252
; //命令CMD_READ_FLASH_ISP
; else if(cmd==CMD_READ_FLASH_ISP)
mov R24,R14
cpi R24,20
brne L72
.dbline 253
; {
.dbline 254
; for(i=0;i<(SPM_PAGESIZE<<2);i++)
clr R12
clr R13
xjmp L77
L74:
.dbline 255
.dbline 256
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 257
L75:
.dbline 254
movw R24,R12
adiw R24,1
movw R12,R24
L77:
.dbline 254
movw R24,R12
cpi R24,0
ldi R30,1
cpc R25,R30
brlo L74
.dbline 258
; {
; 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 259
; num_bytes = (SPM_PAGESIZE<<2)+3;
ldi R24,259
ldi R25,1
std y+7,R25
std y+6,R24
.dbline 260
; msg_buffer[0] = CMD_READ_FLASH_ISP;
ldi R24,20
sts _msg_buffer,R24
.dbline 261
; msg_buffer[1] = STATUS_CMD_OK;
clr R2
sts _msg_buffer+1,R2
.dbline 262
; msg_buffer[(SPM_PAGESIZE<<2)+2] = STATUS_CMD_OK;
sts _msg_buffer+258,R2
.dbline 263
; }
xjmp L73
L72:
.dbline 265
; //命令CMD_READ_FUSE_ISP
; else if(cmd==CMD_READ_FUSE_ISP)
mov R24,R14
cpi R24,24
brne L80
.dbline 266
; {
.dbline 267
; 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 268
; {
L86:
.dbline 270
; 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 271
; break;
xjmp L83
L88:
.dbline 273
; 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 274
; break;
.dbline 276
; default:
; break;
L83:
.dbline 278
; }
; num_bytes = 4;
ldi R24,4
ldi R25,0
std y+7,R25
std y+6,R24
.dbline 279
; msg_buffer[0] = CMD_READ_FUSE_ISP;
ldi R24,24
sts _msg_buffer,R24
.dbline 280
; msg_buffer[1] = STATUS_CMD_OK;
clr R2
sts _msg_buffer+1,R2
.dbline 281
; msg_buffer[3] = STATUS_CMD_OK;
sts _msg_buffer+3,R2
.dbline 282
; }
xjmp L81
L80:
.dbline 284
; //命令CMD_PROGRAM_LOCK_ISP
; else if(cmd==CMD_PROGRAM_LOCK_ISP)
mov R24,R14
cpi R24,25
brne L93
.dbline 285
; {
.dbline 286
; write_lock_bits (msg_buffer[4]|0xC0);
lds R16,_msg_buffer+4
ori R16,192
xcall _write_lock_bits
.dbline 287
; num_bytes = 3;
ldi R24,3
ldi R25,0
std y+7,R25
std y+6,R24
.dbline 288
; msg_buffer[0] = CMD_PROGRAM_LOCK_ISP;
ldi R24,25
sts _msg_buffer,R24
.dbline 289
; msg_buffer[1] = STATUS_CMD_OK;
clr R2
sts _msg_buffer+1,R2
.dbline 290
; msg_buffer[2] = STATUS_CMD_OK;
sts _msg_buffer+2,R2
.dbline 291
; }
xjmp L94
L93:
.dbline 293
; //命令CMD_READ_LOCK_ISP
; else if(cmd==CMD_READ_LOCK_ISP)
mov R24,R14
cpi R24,26
brne L98
.dbline 294
; {
.dbline 295
; 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 296
; num_bytes = 4;
ldi R24,4
ldi R25,0
std y+7,R25
std y+6,R24
.dbline 297
; msg_buffer[0] = CMD_READ_LOCK_ISP;
ldi R24,26
sts _msg_buffer,R24
.dbline 298
; msg_buffer[1] = STATUS_CMD_OK;
clr R2
sts _msg_buffer+1,R2
.dbline 299
; msg_buffer[3] = STATUS_CMD_OK;
sts _msg_buffer+3,R2
.dbline 300
; }
L98:
L94:
L81:
L73:
L66:
L63:
L60:
L57:
L52:
L39:
L36:
L30:
.dbline 302
; //傳送緩沖區數據
; 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 303
; {
.dbline 304
; putChar(MESSAGE_START);
ldi R16,27
xcall _putChar
.dbline 305
; checkSum=MESSAGE_START;
ldi R24,27
sts _checkSum,R24
.dbline 306
; putChar(seqNum);
ldd R16,y+19
xcall _putChar
.dbline 307
; checkSum^=seqNum;
lds R2,_checkSum
ldd R0,y+19
eor R2,R0
sts _checkSum,R2
.dbline 308
; 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 309
; putChar(tmp);
mov R16,R24
xcall _putChar
.dbline 310
; checkSum^=tmp;
lds R2,_checkSum
ldd R0,y+8
eor R2,R0
sts _checkSum,R2
.dbline 311
; tmp=num_bytes&0x00FF;
ldd R24,y+6
ldd R25,y+7
andi R25,0
std y+8,R24
.dbline 312
; putChar(tmp);
mov R16,R24
xcall _putChar
.dbline 313
; checkSum^=tmp;
lds R2,_checkSum
ldd R0,y+8
eor R2,R0
sts _checkSum,R2
.dbline 314
; putChar(TOKEN);
ldi R16,14
xcall _putChar
.dbline 315
; checkSum^=TOKEN;
ldi R24,14
lds R2,_checkSum
eor R2,R24
sts _checkSum,R2
.dbline 316
; for(i=0;i<num_bytes;i++)
clr R12
clr R13
xjmp L108
L105:
.dbline 317
.dbline 318
ldi R24,<_msg_buffer
ldi R25,>_msg_buffer
movw R30,R12
add R30,R24
adc R31,R25
ldd R16,z+0
xcall _putChar
.dbline 319
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 320
L106:
.dbline 316
movw R24,R12
adiw R24,1
movw R12,R24
L108:
.dbline 316
ldd R0,y+6
ldd R1,y+7
cp R12,R0
cpc R13,R1
brlo L105
.dbline 321
lds R16,_checkSum
xcall _putChar
.dbline 322
clr R2
sts _checkSum,R2
.dbline 323
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 F:\job\stk500\AVRMEG~1\bldSTK500\main.c
_address::
.blkb 2
.dbfile F:\job\stk500\AVRMEG~1\bldSTK500\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 F:\job\stk500\AVRMEG~1\bldSTK500\para.h
L34:
.blkb 9
.area idata
.byte 'S,'T,'K,53,48,48,95,50,0
.area data(ram, con, rel)
.dbfile F:\job\stk500\AVRMEG~1\bldSTK500\para.h
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -