📄 stk500i.lst
字号:
019F 2D02 MOV R16,R2
01A0 D73A RCALL _spi_set_speed
(0212) break;
01A1 C009 RJMP 0x01AB
(0213) case PARAM_RESET_POLARITY:
(0214) reset_polarity = msg_buffer[2];
01A2 90200076 LDS R2,msg_buffer+2
01A4 92200072 STS reset_polarity,R2
(0215) break;
01A6 C004 RJMP 0x01AB
(0216) case PARAM_CONTROLLER_INIT:
(0217) param_controller_init = msg_buffer[2];
01A7 90200076 LDS R2,msg_buffer+2
01A9 92200071 STS param_controller_init,R2
(0218) break;
(0219) }
(0220)
(0221) num_bytes = 2;
01AB E082 LDI R24,2
01AC E090 LDI R25,0
01AD 879B STD Y+11,R25
01AE 878A STD Y+10,R24
(0222) msg_buffer[0] = CMD_SET_PARAMETER;
01AF 93800074 STS msg_buffer,R24
(0223) msg_buffer[1] = STATUS_CMD_OK;
01B1 2422 CLR R2
01B2 92200075 STS msg_buffer+1,R2
(0224) }
01B4 C6B5 RJMP 0x086A
(0225) //////////////////////////////////////
(0226) //CMD_GET_PARAMETER
(0227) //////////////////////////////////////
(0228) else if(cmd==CMD_GET_PARAMETER)
01B5 858C LDD R24,Y+12
01B6 3083 CPI R24,3
01B7 F009 BEQ 0x01B9
01B8 C058 RJMP 0x0211
(0229) {
(0230) switch(msg_buffer[1])
01B9 90A00075 LDS R10,msg_buffer+1
01BB 24BB CLR R11
01BC 01C5 MOVW R24,R10
01BD 3980 CPI R24,0x90
01BE E0E0 LDI R30,0
01BF 079E CPC R25,R30
01C0 F179 BEQ 0x01F0
01C1 3981 CPI R24,0x91
01C2 E0E0 LDI R30,0
01C3 079E CPC R25,R30
01C4 F171 BEQ 0x01F3
01C5 3982 CPI R24,0x92
01C6 E0E0 LDI R30,0
01C7 079E CPC R25,R30
01C8 F169 BEQ 0x01F6
01C9 E982 LDI R24,0x92
01CA 158A CP R24,R10
01CB 059B CPC R25,R11
01CC F054 BLT 0x01D7
01CD 01C5 MOVW R24,R10
01CE 3880 CPI R24,0x80
01CF E0E0 LDI R30,0
01D0 079E CPC R25,R30
01D1 F0C1 BEQ 0x01EA
01D2 3881 CPI R24,0x81
01D3 E0E0 LDI R30,0
01D4 079E CPC R25,R30
01D5 F0B9 BEQ 0x01ED
01D6 C02D RJMP 0x0204
01D7 01C5 MOVW R24,R10
01D8 3988 CPI R24,0x98
01D9 E0E0 LDI R30,0
01DA 079E CPC R25,R30
01DB F0E9 BEQ 0x01F9
01DC 3988 CPI R24,0x98
01DD E0E0 LDI R30,0
01DE 079E CPC R25,R30
01DF F124 BLT 0x0204
01E0 01C5 MOVW R24,R10
01E1 398E CPI R24,0x9E
01E2 E0E0 LDI R30,0
01E3 079E CPC R25,R30
01E4 F0C1 BEQ 0x01FD
01E5 398F CPI R24,0x9F
01E6 E0E0 LDI R30,0
01E7 079E CPC R25,R30
01E8 F0C1 BEQ 0x0201
01E9 C01A RJMP 0x0204
(0231) {
(0232) case PARAM_BUILD_NUMBER_LOW:
(0233) tmp = CONFIG_PARAM_BUILD_NUMBER_LOW;
01EA 2400 CLR R0
01EB 860D STD Y+13,R0
(0234) break;
01EC C017 RJMP 0x0204
(0235) case PARAM_BUILD_NUMBER_HIGH:
(0236) tmp = CONFIG_PARAM_BUILD_NUMBER_HIGH;
01ED 2400 CLR R0
01EE 860D STD Y+13,R0
(0237) break;
01EF C014 RJMP 0x0204
(0238) case PARAM_HW_VER:
(0239) tmp = CONFIG_PARAM_HW_VER;
01F0 E08F LDI R24,0xF
01F1 878D STD Y+13,R24
(0240) break;
01F2 C011 RJMP 0x0204
(0241) case PARAM_SW_MAJOR:
(0242) tmp = CONFIG_PARAM_SW_MAJOR;
01F3 E082 LDI R24,2
01F4 878D STD Y+13,R24
(0243) break;
01F5 C00E RJMP 0x0204
(0244) case PARAM_SW_MINOR:
(0245) tmp = CONFIG_PARAM_SW_MINOR;
01F6 E08A LDI R24,0xA
01F7 878D STD Y+13,R24
(0246) break;
01F8 C00B RJMP 0x0204
(0247) case PARAM_SCK_DURATION:
(0248) tmp = clock_speed;
01F9 90200073 LDS R2,clock_speed
01FB 862D STD Y+13,R2
(0249) break;
01FC C007 RJMP 0x0204
(0250) case PARAM_RESET_POLARITY:
(0251) tmp = reset_polarity;
01FD 90200072 LDS R2,reset_polarity
01FF 862D STD Y+13,R2
(0252) break;
0200 C003 RJMP 0x0204
(0253) case PARAM_CONTROLLER_INIT:
(0254) tmp = param_controller_init;
0201 90200071 LDS R2,param_controller_init
0203 862D STD Y+13,R2
(0255) break;
(0256) }
(0257)
(0258) num_bytes = 3;
0204 E083 LDI R24,3
0205 E090 LDI R25,0
0206 879B STD Y+11,R25
0207 878A STD Y+10,R24
(0259) msg_buffer[0] = CMD_GET_PARAMETER;
0208 93800074 STS msg_buffer,R24
(0260) msg_buffer[1] = STATUS_CMD_OK;
020A 2422 CLR R2
020B 92200075 STS msg_buffer+1,R2
(0261) msg_buffer[2] = tmp;
020D 840D LDD R0,Y+13
020E 92000076 STS msg_buffer+2,R0
(0262) }
0210 C659 RJMP 0x086A
(0263) //////////////////////////////////////
(0264) //CMD_LOAD_ADDRESS
(0265) //////////////////////////////////////
(0266) else if(cmd==CMD_LOAD_ADDRESS)
0211 858C LDD R24,Y+12
0212 3086 CPI R24,6
0213 F009 BEQ 0x0215
0214 C06C RJMP 0x0281
(0267) {
(0268) address = ((unsigned long)msg_buffer[1])<<24;
0215 E188 LDI R24,0x18
0216 E090 LDI R25,0
0217 90200075 LDS R2,msg_buffer+1
0219 2433 CLR R3
021A 2444 CLR R4
021B 2455 CLR R5
021C 938A ST R24,-Y
021D 0181 MOVW R16,R2
021E 0192 MOVW R18,R4
021F D7D9 RCALL lsl32
0220 9310006D STS address+1,R17
0222 9300006C STS address,R16
0224 9330006F STS address+3,R19
0226 9320006E STS address+2,R18
(0269) address |= ((unsigned long)msg_buffer[2])<<16;
0228 90200076 LDS R2,msg_buffer+2
022A 2433 CLR R3
022B 2444 CLR R4
022C 2455 CLR R5
022D 0121 MOVW R4,R2
022E 2422 CLR R2
022F 2433 CLR R3
0230 0138 MOVW R6,R16
0231 0149 MOVW R8,R18
0232 2862 OR R6,R2
0233 2873 OR R7,R3
0234 2884 OR R8,R4
0235 2895 OR R9,R5
0236 9270006D STS address+1,R7
0238 9260006C STS address,R6
023A 9290006F STS address+3,R9
023C 9280006E STS address+2,R8
(0270) address |= ((unsigned long)msg_buffer[3])<<8;
023E E088 LDI R24,0x8
023F E090 LDI R25,0
0240 90200077 LDS R2,msg_buffer+3
0242 2433 CLR R3
0243 2444 CLR R4
0244 2455 CLR R5
0245 938A ST R24,-Y
0246 0181 MOVW R16,R2
0247 0192 MOVW R18,R4
0248 D7B0 RCALL lsl32
0249 9040006E LDS R4,address+2
024B 9050006F LDS R5,address+3
024D 9020006C LDS R2,address
024F 9030006D LDS R3,address+1
0251 2A20 OR R2,R16
0252 2A31 OR R3,R17
0253 2A42 OR R4,R18
0254 2A53 OR R5,R19
0255 9230006D STS address+1,R3
0257 9220006C STS address,R2
0259 9250006F STS address+3,R5
025B 9240006E STS address+2,R4
(0271) address |= ((unsigned long)msg_buffer[4]);
025D 90200078 LDS R2,0x78
025F 2433 CLR R3
0260 2444 CLR R4
0261 2455 CLR R5
0262 9080006E LDS R8,address+2
0264 9090006F LDS R9,address+3
0266 9060006C LDS R6,address
0268 9070006D LDS R7,address+1
026A 2862 OR R6,R2
026B 2873 OR R7,R3
026C 2884 OR R8,R4
026D 2895 OR R9,R5
026E 9270006D STS address+1,R7
0270 9260006C STS address,R6
0272 9290006F STS address+3,R9
0274 9280006E STS address+2,R8
(0272)
(0273) num_bytes = 2;
0276 E082 LDI R24,2
0277 E090 LDI R25,0
0278 879B STD Y+11,R25
0279 878A STD Y+10,R24
(0274) msg_buffer[0] = CMD_LOAD_ADDRESS;
027A E086 LDI R24,6
027B 93800074 STS msg_buffer,R24
(0275) msg_buffer[1] = STATUS_CMD_OK;
027D 2422 CLR R2
027E 92200075 STS msg_buffer+1,R2
(0276) }
0280 C5E9 RJMP 0x086A
(0277) //////////////////////////////////////
(0278) //CMD_ENTER_PROGMODE_ISP
(0279) //////////////////////////////////////
(0280) else if(cmd==CMD_ENTER_PROGMODE_ISP)
0281 858C LDD R24,Y+12
0282 3180 CPI R24,0x10
0283 F009 BEQ 0x0285
0284 C070 RJMP 0x02F5
(0281) {
(0282) //msg_buffer[1] //timeout //Command time-out (in ms)
(0283) //msg_buffer[2] //stabDelay //Delay (in ms) used for pin stabilization
(0284) //msg_buffer[3] //cmdexeDelay //Delay (in ms) in connection with the EnterProgMode command execution
(0285) //msg_buffer[4] //synchLoops //Number of synchronization loops
(0286) //msg_buffer[5] //byteDelay //Delay (in ms) between each byte in the EnterProgMode command.
(0287) //msg_buffer[6] //pollValue //Poll value: 0x53 for AVR, 0x69 for AT89xx
(0288) //msg_buffer[7] //pollIndex //Start address, received byte: 0 = no polling, 3 = AVR, 4 = AT89xx
(0289) //msg_buffer[8] //cmd1 //Command Byte # 1 to be transmitted
(0290) //msg_buffer[9] //cmd2 //Command Byte # 2 to be transmitted
(0291) //msg_buffer[10]//cmd3 //Command Byte # 3 to be transmitted
(0292) //msg_buffer[11]//cmd4 //Command Byte # 4 to be transmitted
(0293)
(0294) prgmode=1;
0285 E081 LDI R24,1
0286 93800070 STS prgmode,R24
(0295)
(0296) spi_enable();
0288 D613 RCALL _spi_enable
(0297)
(0298) wait_ms(msg_buffer[2]);
0289 91000076 LDS R16,msg_buffer+2
028B 2711 CLR R17
028C DDCF RCALL _wait_ms
(0299)
(0300) LED_GN_ON;
028D 9AC0 SBI 0x18,0
(0301) LED_RT_ON;
028E 9AC1 SBI 0x18,1
(0302)
(0303) //Try to get connection with the target chip
(0304) for(i=0;i<msg_buffer[4];i++)
028F 24CC CLR R12
0290 24DD CLR R13
0291 C048 RJMP 0x02DA
(0305) {
(0306) //spi_transfer_16(0xAC53);
(0307) spi_transfer_8(msg_buffer[8]);
0292 9100007C LDS R16,0x7C
0294 D678 RCALL _spi_transfer_8
(0308) wait_ms(msg_buffer[5]);
0295 91000079 LDS R16,0x79
0297 2711 CLR R17
0298 DDC3 RCALL _wait_ms
(0309) spi_transfer_8(msg_buffer[9]);
0299 9100007D LDS R16,0x7D
029B D671 RCALL _spi_transfer_8
(0310) wait_ms(msg_buffer[5]);
029C 91000079 LDS R16,0x79
029E 2711 CLR R17
029F DDBC RCALL _wait_ms
(0311)
(0312) if(msg_buffer[7]==3)
02A0 9180007B LDS R24,0x7B
02A2 3083 CPI R24,3
02A3 F481 BNE 0x02B4
(0313) {
(0314) tmp=spi_transfer_8(msg_buffer[10]);
02A4 9100007E LDS R16,0x7E
02A6 D666 RCALL _spi_transfer_8
02A7 870D STD Y+13,R16
(0315) wait_ms(msg_buffer[5]);
02A8 91000079 LDS R16,0x79
02AA 2711 CLR R17
02AB DDB0 RCALL _wait_ms
(0316) spi_transfer_8(msg_buffer[11]);
02AC 9100007F LDS R16,0x7F
02AE D65E RCALL _spi_transfer_8
(0317) wait_ms(msg_buffer[5]);
02AF 91000079 LDS R16,0x79
02B1 2711 CLR R17
02B2 DDA9 RCALL _wait_ms
(0318) }
02B3 C00F RJMP 0x02C3
(0319) else
(0320) {
(0321) spi_transfer_8(msg_buffer[10]);
02B4 9100007E LDS R16,0x7E
02B6 D656 RCALL _spi_transfer_8
(0322) wait_ms(msg_buffer[5]);
02B7 91000079 LDS R16,0x79
02B9 2711 CLR R17
02BA DDA1 RCALL _wait_ms
(0323) tmp=spi_transfer_8(msg_buffer[11]);
02BB 9100007F LDS R16,0x7F
02BD D64F RCALL _spi_transfer_8
02BE 870D STD Y+13,R16
(0324) wait_ms(msg_buffer[5]);
02BF 91000079 LDS R16,0x79
02C1 2711 CLR R17
02C2 DD99 RCALL _wait_ms
(0325) }
(0326)
(0327) if((tmp==msg_buffer[6])||(msg_buffer[7]==0))
02C3 9020007A LDS R2,0x7A
02C5 840D LDD R0,Y+13
02C6 1402 CP R0,R2
02C7 F021 BEQ 0x02CC
02C8 9020007B LDS R2,0x7B
02CA 2022 TST R2
02CB F451 BNE 0x02D6
(0328) {
(0329) LED_GN_OFF;
02CC EF8E LDI R24,0xFE
02CD EF9F LDI R25,0xFF
02CE B228 IN R2,0x18
02CF 2228 AND R2,R24
02D0 BA28 OUT 0x18,R2
(0330) LED_RT_ON;
02D1 9AC1 SBI 0x18,1
(0331) i=0xFF;
02D2 EF8F LDI R24,0xFF
02D3 E090 LDI R25,0
02D4 016C MOVW R12,R24
(0332) break;
02D5 C00B RJMP 0x02E1
(0333) }
(0334)
(0335) spi_clock_pulse();
02D6 D626 RCALL _spi_clock_pulse
02D7 01C6 MOVW R24,R12
02D8 9601 ADIW R24,1
02D9 016C MOVW R12,R24
02DA 90200078 LDS R2,0x78
02DC 2433 CLR R3
02DD 14C2 CP R12,R2
02DE 04D3 CPC R13,R3
02DF F408 BCC 0x02E1
02E0 CFB1 RJMP 0x0292
(0336) }
(0337)
(0338) num_bytes = 2;
02E1 E082 LDI R24,2
02E2 E090 LDI R25,0
02E3 879B STD Y+11,R25
02E4 878A STD Y+10,R24
(0339) msg_buffer[0] = CMD_ENTER_PROGMODE_ISP;
02E5 E180 LDI R24,0x10
02E6 93800074 STS msg_buffer,R24
(0340)
(0341) if(i==0xFF)
02E8 01C6 MOVW R24,R12
02E9 3F8F CPI R24,0xFF
02EA E0E0 LDI R30,0
02EB 079E CPC R25,R30
02EC F421 BNE 0x02F1
(0342) {
(0343) msg_buffer[1] = STATUS_CMD_OK;
02ED 2422 CLR R2
02EE 92200075 STS msg_buffer+1,R2
(0344) }
02F0 C579 RJMP 0x086A
(0345) else
(0346) {
(0347) msg_buffer[1] = STATUS_CMD_FAILED;
02F1 EC80 LDI R24,0xC0
02F2 93800075 STS msg_buffer+1,R24
(0348) }
(0349) }
02F4 C575 RJMP 0x086A
(0350) //////////////////////////////////////
(0351) //CMD_LEAVE_PROGMODE_ISP
(0352) //////////////////////////////////////
(0353) else if(cmd==CMD_LEAVE_PROGMODE_ISP)
02F5 858C LDD R24,Y+12
02F6 3181 CPI R24,0x11
02F7 F4A9 BNE 0x030D
(0354) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -