📄 stk500i.lst
字号:
(0215) break;
019E C004 RJMP 0x01A3
(0216) case PARAM_CONTROLLER_INIT:
(0217) param_controller_init = msg_buffer[2];
019F 90200076 LDS R2,msg_buffer+2
01A1 92200071 STS param_controller_init,R2
(0218) break;
(0219) }
(0220)
(0221) num_bytes = 2;
01A3 E082 LDI R24,2
01A4 E090 LDI R25,0
01A5 879B STD Y+11,R25
01A6 878A STD Y+10,R24
(0222) msg_buffer[0] = CMD_SET_PARAMETER;
01A7 93800074 STS msg_buffer,R24
(0223) msg_buffer[1] = STATUS_CMD_OK;
01A9 2422 CLR R2
01AA 92200075 STS msg_buffer+1,R2
(0224) }
01AC C6AD RJMP 0x085A
(0225) //////////////////////////////////////
(0226) //CMD_GET_PARAMETER
(0227) //////////////////////////////////////
(0228) else if(cmd==CMD_GET_PARAMETER)
01AD 858C LDD R24,Y+12
01AE 3083 CPI R24,3
01AF F009 BEQ 0x01B1
01B0 C058 RJMP 0x0209
(0229) {
(0230) switch(msg_buffer[1])
01B1 90A00075 LDS R10,msg_buffer+1
01B3 24BB CLR R11
01B4 01C5 MOVW R24,R10
01B5 3980 CPI R24,0x90
01B6 E0E0 LDI R30,0
01B7 079E CPC R25,R30
01B8 F179 BEQ 0x01E8
01B9 3981 CPI R24,0x91
01BA E0E0 LDI R30,0
01BB 079E CPC R25,R30
01BC F171 BEQ 0x01EB
01BD 3982 CPI R24,0x92
01BE E0E0 LDI R30,0
01BF 079E CPC R25,R30
01C0 F169 BEQ 0x01EE
01C1 E982 LDI R24,0x92
01C2 158A CP R24,R10
01C3 059B CPC R25,R11
01C4 F054 BLT 0x01CF
01C5 01C5 MOVW R24,R10
01C6 3880 CPI R24,0x80
01C7 E0E0 LDI R30,0
01C8 079E CPC R25,R30
01C9 F0C1 BEQ 0x01E2
01CA 3881 CPI R24,0x81
01CB E0E0 LDI R30,0
01CC 079E CPC R25,R30
01CD F0B9 BEQ 0x01E5
01CE C02D RJMP 0x01FC
01CF 01C5 MOVW R24,R10
01D0 3988 CPI R24,0x98
01D1 E0E0 LDI R30,0
01D2 079E CPC R25,R30
01D3 F0E9 BEQ 0x01F1
01D4 3988 CPI R24,0x98
01D5 E0E0 LDI R30,0
01D6 079E CPC R25,R30
01D7 F124 BLT 0x01FC
01D8 01C5 MOVW R24,R10
01D9 398E CPI R24,0x9E
01DA E0E0 LDI R30,0
01DB 079E CPC R25,R30
01DC F0C1 BEQ 0x01F5
01DD 398F CPI R24,0x9F
01DE E0E0 LDI R30,0
01DF 079E CPC R25,R30
01E0 F0C1 BEQ 0x01F9
01E1 C01A RJMP 0x01FC
(0231) {
(0232) case PARAM_BUILD_NUMBER_LOW:
(0233) tmp = CONFIG_PARAM_BUILD_NUMBER_LOW;
01E2 2400 CLR R0
01E3 860D STD Y+13,R0
(0234) break;
01E4 C017 RJMP 0x01FC
(0235) case PARAM_BUILD_NUMBER_HIGH:
(0236) tmp = CONFIG_PARAM_BUILD_NUMBER_HIGH;
01E5 2400 CLR R0
01E6 860D STD Y+13,R0
(0237) break;
01E7 C014 RJMP 0x01FC
(0238) case PARAM_HW_VER:
(0239) tmp = CONFIG_PARAM_HW_VER;
01E8 E08F LDI R24,0xF
01E9 878D STD Y+13,R24
(0240) break;
01EA C011 RJMP 0x01FC
(0241) case PARAM_SW_MAJOR:
(0242) tmp = CONFIG_PARAM_SW_MAJOR;
01EB E082 LDI R24,2
01EC 878D STD Y+13,R24
(0243) break;
01ED C00E RJMP 0x01FC
(0244) case PARAM_SW_MINOR:
(0245) tmp = CONFIG_PARAM_SW_MINOR;
01EE E08A LDI R24,0xA
01EF 878D STD Y+13,R24
(0246) break;
01F0 C00B RJMP 0x01FC
(0247) case PARAM_SCK_DURATION:
(0248) tmp = clock_speed;
01F1 90200073 LDS R2,clock_speed
01F3 862D STD Y+13,R2
(0249) break;
01F4 C007 RJMP 0x01FC
(0250) case PARAM_RESET_POLARITY:
(0251) tmp = reset_polarity;
01F5 90200072 LDS R2,reset_polarity
01F7 862D STD Y+13,R2
(0252) break;
01F8 C003 RJMP 0x01FC
(0253) case PARAM_CONTROLLER_INIT:
(0254) tmp = param_controller_init;
01F9 90200071 LDS R2,param_controller_init
01FB 862D STD Y+13,R2
(0255) break;
(0256) }
(0257)
(0258) num_bytes = 3;
01FC E083 LDI R24,3
01FD E090 LDI R25,0
01FE 879B STD Y+11,R25
01FF 878A STD Y+10,R24
(0259) msg_buffer[0] = CMD_GET_PARAMETER;
0200 93800074 STS msg_buffer,R24
(0260) msg_buffer[1] = STATUS_CMD_OK;
0202 2422 CLR R2
0203 92200075 STS msg_buffer+1,R2
(0261) msg_buffer[2] = tmp;
0205 840D LDD R0,Y+13
0206 92000076 STS msg_buffer+2,R0
(0262) }
0208 C651 RJMP 0x085A
(0263) //////////////////////////////////////
(0264) //CMD_LOAD_ADDRESS
(0265) //////////////////////////////////////
(0266) else if(cmd==CMD_LOAD_ADDRESS)
0209 858C LDD R24,Y+12
020A 3086 CPI R24,6
020B F009 BEQ 0x020D
020C C06C RJMP 0x0279
(0267) {
(0268) address = ((unsigned long)msg_buffer[1])<<24;
020D E188 LDI R24,0x18
020E E090 LDI R25,0
020F 90200075 LDS R2,msg_buffer+1
0211 2433 CLR R3
0212 2444 CLR R4
0213 2455 CLR R5
0214 938A ST R24,-Y
0215 0181 MOVW R16,R2
0216 0192 MOVW R18,R4
0217 D7C5 RCALL lsl32
0218 9310006D STS address+1,R17
021A 9300006C STS address,R16
021C 9330006F STS address+3,R19
021E 9320006E STS address+2,R18
(0269) address |= ((unsigned long)msg_buffer[2])<<16;
0220 90200076 LDS R2,msg_buffer+2
0222 2433 CLR R3
0223 2444 CLR R4
0224 2455 CLR R5
0225 0121 MOVW R4,R2
0226 2422 CLR R2
0227 2433 CLR R3
0228 0138 MOVW R6,R16
0229 0149 MOVW R8,R18
022A 2862 OR R6,R2
022B 2873 OR R7,R3
022C 2884 OR R8,R4
022D 2895 OR R9,R5
022E 9270006D STS address+1,R7
0230 9260006C STS address,R6
0232 9290006F STS address+3,R9
0234 9280006E STS address+2,R8
(0270) address |= ((unsigned long)msg_buffer[3])<<8;
0236 E088 LDI R24,0x8
0237 E090 LDI R25,0
0238 90200077 LDS R2,msg_buffer+3
023A 2433 CLR R3
023B 2444 CLR R4
023C 2455 CLR R5
023D 938A ST R24,-Y
023E 0181 MOVW R16,R2
023F 0192 MOVW R18,R4
0240 D79C RCALL lsl32
0241 9040006E LDS R4,address+2
0243 9050006F LDS R5,address+3
0245 9020006C LDS R2,address
0247 9030006D LDS R3,address+1
0249 2A20 OR R2,R16
024A 2A31 OR R3,R17
024B 2A42 OR R4,R18
024C 2A53 OR R5,R19
024D 9230006D STS address+1,R3
024F 9220006C STS address,R2
0251 9250006F STS address+3,R5
0253 9240006E STS address+2,R4
(0271) address |= ((unsigned long)msg_buffer[4]);
0255 90200078 LDS R2,0x78
0257 2433 CLR R3
0258 2444 CLR R4
0259 2455 CLR R5
025A 9080006E LDS R8,address+2
025C 9090006F LDS R9,address+3
025E 9060006C LDS R6,address
0260 9070006D LDS R7,address+1
0262 2862 OR R6,R2
0263 2873 OR R7,R3
0264 2884 OR R8,R4
0265 2895 OR R9,R5
0266 9270006D STS address+1,R7
0268 9260006C STS address,R6
026A 9290006F STS address+3,R9
026C 9280006E STS address+2,R8
(0272)
(0273) num_bytes = 2;
026E E082 LDI R24,2
026F E090 LDI R25,0
0270 879B STD Y+11,R25
0271 878A STD Y+10,R24
(0274) msg_buffer[0] = CMD_LOAD_ADDRESS;
0272 E086 LDI R24,6
0273 93800074 STS msg_buffer,R24
(0275) msg_buffer[1] = STATUS_CMD_OK;
0275 2422 CLR R2
0276 92200075 STS msg_buffer+1,R2
(0276) }
0278 C5E1 RJMP 0x085A
(0277) //////////////////////////////////////
(0278) //CMD_ENTER_PROGMODE_ISP
(0279) //////////////////////////////////////
(0280) else if(cmd==CMD_ENTER_PROGMODE_ISP)
0279 858C LDD R24,Y+12
027A 3180 CPI R24,0x10
027B F009 BEQ 0x027D
027C C06C RJMP 0x02E9
(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;
027D E081 LDI R24,1
027E 93800070 STS prgmode,R24
(0295)
(0296) spi_enable();
0280 D60B RCALL _spi_enable
(0297)
(0298) wait_ms(msg_buffer[2]);
0281 91000076 LDS R16,msg_buffer+2
0283 2711 CLR R17
0284 DDD7 RCALL _wait_ms
(0299)
(0300) LED_GN_ON;
0285 9A95 SBI 0x12,5
(0301) LED_RT_ON;
0286 9A96 SBI 0x12,6
(0302)
(0303) //Try to get connection with the target chip
(0304) for(i=0;i<msg_buffer[4];i++)
0287 24CC CLR R12
0288 24DD CLR R13
0289 C044 RJMP 0x02CE
(0305) {
(0306) //spi_transfer_16(0xAC53);
(0307) spi_transfer_8(msg_buffer[8]);
028A 9100007C LDS R16,0x7C
028C D664 RCALL _spi_transfer_8
(0308) wait_ms(msg_buffer[5]);
028D 91000079 LDS R16,0x79
028F 2711 CLR R17
0290 DDCB RCALL _wait_ms
(0309) spi_transfer_8(msg_buffer[9]);
0291 9100007D LDS R16,0x7D
0293 D65D RCALL _spi_transfer_8
(0310) wait_ms(msg_buffer[5]);
0294 91000079 LDS R16,0x79
0296 2711 CLR R17
0297 DDC4 RCALL _wait_ms
(0311)
(0312) if(msg_buffer[7]==3)
0298 9180007B LDS R24,0x7B
029A 3083 CPI R24,3
029B F481 BNE 0x02AC
(0313) {
(0314) tmp=spi_transfer_8(msg_buffer[10]);
029C 9100007E LDS R16,0x7E
029E D652 RCALL _spi_transfer_8
029F 870D STD Y+13,R16
(0315) wait_ms(msg_buffer[5]);
02A0 91000079 LDS R16,0x79
02A2 2711 CLR R17
02A3 DDB8 RCALL _wait_ms
(0316) spi_transfer_8(msg_buffer[11]);
02A4 9100007F LDS R16,0x7F
02A6 D64A RCALL _spi_transfer_8
(0317) wait_ms(msg_buffer[5]);
02A7 91000079 LDS R16,0x79
02A9 2711 CLR R17
02AA DDB1 RCALL _wait_ms
(0318) }
02AB C00F RJMP 0x02BB
(0319) else
(0320) {
(0321) spi_transfer_8(msg_buffer[10]);
02AC 9100007E LDS R16,0x7E
02AE D642 RCALL _spi_transfer_8
(0322) wait_ms(msg_buffer[5]);
02AF 91000079 LDS R16,0x79
02B1 2711 CLR R17
02B2 DDA9 RCALL _wait_ms
(0323) tmp=spi_transfer_8(msg_buffer[11]);
02B3 9100007F LDS R16,0x7F
02B5 D63B RCALL _spi_transfer_8
02B6 870D STD Y+13,R16
(0324) wait_ms(msg_buffer[5]);
02B7 91000079 LDS R16,0x79
02B9 2711 CLR R17
02BA DDA1 RCALL _wait_ms
(0325) }
(0326)
(0327) if((tmp==msg_buffer[6])||(msg_buffer[7]==0))
02BB 9020007A LDS R2,0x7A
02BD 840D LDD R0,Y+13
02BE 1402 CP R0,R2
02BF F021 BEQ 0x02C4
02C0 9020007B LDS R2,0x7B
02C2 2022 TST R2
02C3 F431 BNE 0x02CA
(0328) {
(0329) LED_GN_OFF;
02C4 9895 CBI 0x12,5
(0330) LED_RT_ON;
02C5 9A96 SBI 0x12,6
(0331) i=0xFF;
02C6 EF8F LDI R24,0xFF
02C7 E090 LDI R25,0
02C8 016C MOVW R12,R24
(0332) break;
02C9 C00B RJMP 0x02D5
(0333) }
(0334)
(0335) spi_clock_pulse();
02CA D616 RCALL _spi_clock_pulse
02CB 01C6 MOVW R24,R12
02CC 9601 ADIW R24,1
02CD 016C MOVW R12,R24
02CE 90200078 LDS R2,0x78
02D0 2433 CLR R3
02D1 14C2 CP R12,R2
02D2 04D3 CPC R13,R3
02D3 F408 BCC 0x02D5
02D4 CFB5 RJMP 0x028A
(0336) }
(0337)
(0338) num_bytes = 2;
02D5 E082 LDI R24,2
02D6 E090 LDI R25,0
02D7 879B STD Y+11,R25
02D8 878A STD Y+10,R24
(0339) msg_buffer[0] = CMD_ENTER_PROGMODE_ISP;
02D9 E180 LDI R24,0x10
02DA 93800074 STS msg_buffer,R24
(0340)
(0341) if(i==0xFF)
02DC 01C6 MOVW R24,R12
02DD 3F8F CPI R24,0xFF
02DE E0E0 LDI R30,0
02DF 079E CPC R25,R30
02E0 F421 BNE 0x02E5
(0342) {
(0343) msg_buffer[1] = STATUS_CMD_OK;
02E1 2422 CLR R2
02E2 92200075 STS msg_buffer+1,R2
(0344) }
02E4 C575 RJMP 0x085A
(0345) else
(0346) {
(0347) msg_buffer[1] = STATUS_CMD_FAILED;
02E5 EC80 LDI R24,0xC0
02E6 93800075 STS msg_buffer+1,R24
(0348) }
(0349) }
02E8 C571 RJMP 0x085A
(0350) //////////////////////////////////////
(0351) //CMD_LEAVE_PROGMODE_ISP
(0352) //////////////////////////////////////
(0353) else if(cmd==CMD_LEAVE_PROGMODE_ISP)
02E9 858C LDD R24,Y+12
02EA 3181 CPI R24,0x11
02EB F489 BNE 0x02FD
(0354) {
(0355) prgmode=0;
02EC 2422 CLR R2
02ED 92200070 STS prgmode,R2
(0356)
(0357) spi_disable();
02EF D5BD RCALL _spi_disable
(0358)
(0359) LED_RT_OFF;
02F0 9896 CBI 0x12,6
(0360) LED_GN_ON;
02F1 9A95 SBI 0x12,5
(0361)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -