📄 stk500i.lst
字号:
01DA 93800113 STS clock_speed,R24
(0208) if((msg_buffer[2]) >= 8 ) clock_speed=SPI_SPEED_250KHZ;
01DC 91800116 LDS R24,msg_buffer+2
01DE 3088 CPI R24,0x8
01DF F018 BCS 0x01E3
01E0 E084 LDI R24,4
01E1 93800113 STS clock_speed,R24
(0209) if((msg_buffer[2]) >= 16 ) clock_speed=SPI_SPEED_125KHZ;
01E3 91800116 LDS R24,msg_buffer+2
01E5 3180 CPI R24,0x10
01E6 F018 BCS 0x01EA
01E7 E085 LDI R24,5
01E8 93800113 STS clock_speed,R24
(0210) if((msg_buffer[2]) >= 32 ) clock_speed=SPI_SPEED_62KHZ;
01EA 91800116 LDS R24,msg_buffer+2
01EC 3280 CPI R24,0x20
01ED F018 BCS 0x01F1
01EE E086 LDI R24,6
01EF 93800113 STS clock_speed,R24
(0211) //if(eeprom_read_byte(&eeprom_sck_period)!=clock_speed) eeprom_write_byte(&eeprom_sck_period,clock_speed);
(0212) if (eeprom_sck_period != clock_speed) {
01F1 90200113 LDS R2,clock_speed
01F3 90300100 LDS R3,eeprom_sck_period
01F5 1432 CP R3,R2
01F6 F011 BEQ 0x01F9
(0213) eeprom_sck_period = clock_speed;
01F7 92200100 STS eeprom_sck_period,R2
(0214) }
(0215) spi_set_speed(clock_speed);
01F9 91000113 LDS R16,clock_speed
01FB D746 RCALL _spi_set_speed
(0216) break;
01FC C009 RJMP 0x0206
(0217) case PARAM_RESET_POLARITY:
(0218) reset_polarity = msg_buffer[2];
01FD 90200116 LDS R2,msg_buffer+2
01FF 92200112 STS reset_polarity,R2
(0219) break;
0201 C004 RJMP 0x0206
(0220) case PARAM_CONTROLLER_INIT:
(0221) param_controller_init = msg_buffer[2];
0202 90200116 LDS R2,msg_buffer+2
0204 92200111 STS param_controller_init,R2
(0222) break;
(0223) }
(0224)
(0225) num_bytes = 2;
0206 E082 LDI R24,2
0207 E090 LDI R25,0
0208 879B STD Y+11,R25
0209 878A STD Y+10,R24
(0226) msg_buffer[0] = CMD_SET_PARAMETER;
020A 93800114 STS msg_buffer,R24
(0227) msg_buffer[1] = STATUS_CMD_OK;
020C 2422 CLR R2
020D 92200115 STS msg_buffer+1,R2
(0228) }
020F C6B5 RJMP 0x08C5
(0229) //////////////////////////////////////
(0230) //CMD_GET_PARAMETER
(0231) //////////////////////////////////////
(0232) else if(cmd==CMD_GET_PARAMETER)
0210 858C LDD R24,Y+12
0211 3083 CPI R24,3
0212 F009 BEQ 0x0214
0213 C058 RJMP 0x026C
(0233) {
(0234) switch(msg_buffer[1])
0214 90A00115 LDS R10,msg_buffer+1
0216 24BB CLR R11
0217 01C5 MOVW R24,R10
0218 3980 CPI R24,0x90
0219 E0E0 LDI R30,0
021A 079E CPC R25,R30
021B F179 BEQ 0x024B
021C 3981 CPI R24,0x91
021D E0E0 LDI R30,0
021E 079E CPC R25,R30
021F F171 BEQ 0x024E
0220 3982 CPI R24,0x92
0221 E0E0 LDI R30,0
0222 079E CPC R25,R30
0223 F169 BEQ 0x0251
0224 E982 LDI R24,0x92
0225 158A CP R24,R10
0226 059B CPC R25,R11
0227 F054 BLT 0x0232
0228 01C5 MOVW R24,R10
0229 3880 CPI R24,0x80
022A E0E0 LDI R30,0
022B 079E CPC R25,R30
022C F0C1 BEQ 0x0245
022D 3881 CPI R24,0x81
022E E0E0 LDI R30,0
022F 079E CPC R25,R30
0230 F0B9 BEQ 0x0248
0231 C02D RJMP 0x025F
0232 01C5 MOVW R24,R10
0233 3988 CPI R24,0x98
0234 E0E0 LDI R30,0
0235 079E CPC R25,R30
0236 F0E9 BEQ 0x0254
0237 3988 CPI R24,0x98
0238 E0E0 LDI R30,0
0239 079E CPC R25,R30
023A F124 BLT 0x025F
023B 01C5 MOVW R24,R10
023C 398E CPI R24,0x9E
023D E0E0 LDI R30,0
023E 079E CPC R25,R30
023F F0C1 BEQ 0x0258
0240 398F CPI R24,0x9F
0241 E0E0 LDI R30,0
0242 079E CPC R25,R30
0243 F0C1 BEQ 0x025C
0244 C01A RJMP 0x025F
(0235) {
(0236) case PARAM_BUILD_NUMBER_LOW:
(0237) tmp = CONFIG_PARAM_BUILD_NUMBER_LOW;
0245 2400 CLR R0
0246 860D STD Y+13,R0
(0238) break;
0247 C017 RJMP 0x025F
(0239) case PARAM_BUILD_NUMBER_HIGH:
(0240) tmp = CONFIG_PARAM_BUILD_NUMBER_HIGH;
0248 2400 CLR R0
0249 860D STD Y+13,R0
(0241) break;
024A C014 RJMP 0x025F
(0242) case PARAM_HW_VER:
(0243) tmp = CONFIG_PARAM_HW_VER;
024B E08F LDI R24,0xF
024C 878D STD Y+13,R24
(0244) break;
024D C011 RJMP 0x025F
(0245) case PARAM_SW_MAJOR:
(0246) tmp = CONFIG_PARAM_SW_MAJOR;
024E E082 LDI R24,2
024F 878D STD Y+13,R24
(0247) break;
0250 C00E RJMP 0x025F
(0248) case PARAM_SW_MINOR:
(0249) tmp = CONFIG_PARAM_SW_MINOR;
0251 E08A LDI R24,0xA
0252 878D STD Y+13,R24
(0250) break;
0253 C00B RJMP 0x025F
(0251) case PARAM_SCK_DURATION:
(0252) tmp = clock_speed;
0254 90200113 LDS R2,clock_speed
0256 862D STD Y+13,R2
(0253) break;
0257 C007 RJMP 0x025F
(0254) case PARAM_RESET_POLARITY:
(0255) tmp = reset_polarity;
0258 90200112 LDS R2,reset_polarity
025A 862D STD Y+13,R2
(0256) break;
025B C003 RJMP 0x025F
(0257) case PARAM_CONTROLLER_INIT:
(0258) tmp = param_controller_init;
025C 90200111 LDS R2,param_controller_init
025E 862D STD Y+13,R2
(0259) break;
(0260) }
(0261)
(0262) num_bytes = 3;
025F E083 LDI R24,3
0260 E090 LDI R25,0
0261 879B STD Y+11,R25
0262 878A STD Y+10,R24
(0263) msg_buffer[0] = CMD_GET_PARAMETER;
0263 93800114 STS msg_buffer,R24
(0264) msg_buffer[1] = STATUS_CMD_OK;
0265 2422 CLR R2
0266 92200115 STS msg_buffer+1,R2
(0265) msg_buffer[2] = tmp;
0268 840D LDD R0,Y+13
0269 92000116 STS msg_buffer+2,R0
(0266) }
026B C659 RJMP 0x08C5
(0267) //////////////////////////////////////
(0268) //CMD_LOAD_ADDRESS
(0269) //////////////////////////////////////
(0270) else if(cmd==CMD_LOAD_ADDRESS)
026C 858C LDD R24,Y+12
026D 3086 CPI R24,6
026E F009 BEQ 0x0270
026F C06C RJMP 0x02DC
(0271) {
(0272) address = ((unsigned long)msg_buffer[1])<<24;
0270 E188 LDI R24,0x18
0271 E090 LDI R25,0
0272 90200115 LDS R2,msg_buffer+1
0274 2433 CLR R3
0275 2444 CLR R4
0276 2455 CLR R5
0277 938A ST R24,-Y
0278 0181 MOVW R16,R2
0279 0192 MOVW R18,R4
027A D80D RCALL lsl32
027B 9310010D STS address+1,R17
027D 9300010C STS address,R16
027F 9330010F STS address+3,R19
0281 9320010E STS address+2,R18
(0273) address |= ((unsigned long)msg_buffer[2])<<16;
0283 90200116 LDS R2,msg_buffer+2
0285 2433 CLR R3
0286 2444 CLR R4
0287 2455 CLR R5
0288 0121 MOVW R4,R2
0289 2422 CLR R2
028A 2433 CLR R3
028B 0138 MOVW R6,R16
028C 0149 MOVW R8,R18
028D 2862 OR R6,R2
028E 2873 OR R7,R3
028F 2884 OR R8,R4
0290 2895 OR R9,R5
0291 9270010D STS address+1,R7
0293 9260010C STS address,R6
0295 9290010F STS address+3,R9
0297 9280010E STS address+2,R8
(0274) address |= ((unsigned long)msg_buffer[3])<<8;
0299 E088 LDI R24,0x8
029A E090 LDI R25,0
029B 90200117 LDS R2,msg_buffer+3
029D 2433 CLR R3
029E 2444 CLR R4
029F 2455 CLR R5
02A0 938A ST R24,-Y
02A1 0181 MOVW R16,R2
02A2 0192 MOVW R18,R4
02A3 D7E4 RCALL lsl32
02A4 9040010E LDS R4,address+2
02A6 9050010F LDS R5,address+3
02A8 9020010C LDS R2,address
02AA 9030010D LDS R3,address+1
02AC 2A20 OR R2,R16
02AD 2A31 OR R3,R17
02AE 2A42 OR R4,R18
02AF 2A53 OR R5,R19
02B0 9230010D STS address+1,R3
02B2 9220010C STS address,R2
02B4 9250010F STS address+3,R5
02B6 9240010E STS address+2,R4
(0275) address |= ((unsigned long)msg_buffer[4]);
02B8 90200118 LDS R2,0x118
02BA 2433 CLR R3
02BB 2444 CLR R4
02BC 2455 CLR R5
02BD 9080010E LDS R8,address+2
02BF 9090010F LDS R9,address+3
02C1 9060010C LDS R6,address
02C3 9070010D LDS R7,address+1
02C5 2862 OR R6,R2
02C6 2873 OR R7,R3
02C7 2884 OR R8,R4
02C8 2895 OR R9,R5
02C9 9270010D STS address+1,R7
02CB 9260010C STS address,R6
02CD 9290010F STS address+3,R9
02CF 9280010E STS address+2,R8
(0276)
(0277) num_bytes = 2;
02D1 E082 LDI R24,2
02D2 E090 LDI R25,0
02D3 879B STD Y+11,R25
02D4 878A STD Y+10,R24
(0278) msg_buffer[0] = CMD_LOAD_ADDRESS;
02D5 E086 LDI R24,6
02D6 93800114 STS msg_buffer,R24
(0279) msg_buffer[1] = STATUS_CMD_OK;
02D8 2422 CLR R2
02D9 92200115 STS msg_buffer+1,R2
(0280) }
02DB C5E9 RJMP 0x08C5
(0281) //////////////////////////////////////
(0282) //CMD_ENTER_PROGMODE_ISP
(0283) //////////////////////////////////////
(0284) else if(cmd==CMD_ENTER_PROGMODE_ISP)
02DC 858C LDD R24,Y+12
02DD 3180 CPI R24,0x10
02DE F009 BEQ 0x02E0
02DF C070 RJMP 0x0350
(0285) {
(0286) //msg_buffer[1] //timeout //Command time-out (in ms)
(0287) //msg_buffer[2] //stabDelay //Delay (in ms) used for pin stabilization
(0288) //msg_buffer[3] //cmdexeDelay //Delay (in ms) in connection with the EnterProgMode command execution
(0289) //msg_buffer[4] //synchLoops //Number of synchronization loops
(0290) //msg_buffer[5] //byteDelay //Delay (in ms) between each byte in the EnterProgMode command.
(0291) //msg_buffer[6] //pollValue //Poll value: 0x53 for AVR, 0x69 for AT89xx
(0292) //msg_buffer[7] //pollIndex //Start address, received byte: 0 = no polling, 3 = AVR, 4 = AT89xx
(0293) //msg_buffer[8] //cmd1 //Command Byte # 1 to be transmitted
(0294) //msg_buffer[9] //cmd2 //Command Byte # 2 to be transmitted
(0295) //msg_buffer[10]//cmd3 //Command Byte # 3 to be transmitted
(0296) //msg_buffer[11]//cmd4 //Command Byte # 4 to be transmitted
(0297)
(0298) prgmode=1;
02E0 E081 LDI R24,1
02E1 93800110 STS prgmode,R24
(0299)
(0300) spi_enable();
02E3 D61E RCALL _spi_enable
(0301)
(0302) wait_ms(msg_buffer[2]);
02E4 91000116 LDS R16,msg_buffer+2
02E6 2711 CLR R17
02E7 DD6C RCALL _wait_ms
(0303)
(0304) LED_GN_ON;
02E8 9A28 SBI 0x05,0
(0305) LED_RT_ON;
02E9 9A29 SBI 0x05,1
(0306)
(0307) //Try to get connection with the target chip
(0308) for(i=0;i<msg_buffer[4];i++)
02EA 24CC CLR R12
02EB 24DD CLR R13
02EC C048 RJMP 0x0335
(0309) {
(0310) //spi_transfer_16(0xAC53);
(0311) spi_transfer_8(msg_buffer[8]);
02ED 9100011C LDS R16,0x11C
02EF D6AB RCALL _spi_transfer_8
(0312) wait_ms(msg_buffer[5]);
02F0 91000119 LDS R16,0x119
02F2 2711 CLR R17
02F3 DD60 RCALL _wait_ms
(0313) spi_transfer_8(msg_buffer[9]);
02F4 9100011D LDS R16,0x11D
02F6 D6A4 RCALL _spi_transfer_8
(0314) wait_ms(msg_buffer[5]);
02F7 91000119 LDS R16,0x119
02F9 2711 CLR R17
02FA DD59 RCALL _wait_ms
(0315)
(0316) if(msg_buffer[7]==3)
02FB 9180011B LDS R24,0x11B
02FD 3083 CPI R24,3
02FE F481 BNE 0x030F
(0317) {
(0318) tmp=spi_transfer_8(msg_buffer[10]);
02FF 9100011E LDS R16,0x11E
0301 D699 RCALL _spi_transfer_8
0302 870D STD Y+13,R16
(0319) wait_ms(msg_buffer[5]);
0303 91000119 LDS R16,0x119
0305 2711 CLR R17
0306 DD4D RCALL _wait_ms
(0320) spi_transfer_8(msg_buffer[11]);
0307 9100011F LDS R16,0x11F
0309 D691 RCALL _spi_transfer_8
(0321) wait_ms(msg_buffer[5]);
030A 91000119 LDS R16,0x119
030C 2711 CLR R17
030D DD46 RCALL _wait_ms
(0322) }
030E C00F RJMP 0x031E
(0323) else
(0324) {
(0325) spi_transfer_8(msg_buffer[10]);
030F 9100011E LDS R16,0x11E
0311 D689 RCALL _spi_transfer_8
(0326) wait_ms(msg_buffer[5]);
0312 91000119 LDS R16,0x119
0314 2711 CLR R17
0315 DD3E RCALL _wait_ms
(0327) tmp=spi_transfer_8(msg_buffer[11]);
0316 9100011F LDS R16,0x11F
0318 D682 RCALL _spi_transfer_8
0319 870D STD Y+13,R16
(0328) wait_ms(msg_buffer[5]);
031A 91000119 LDS R16,0x119
031C 2711 CLR R17
031D DD36 RCALL _wait_ms
(0329) }
(0330)
(0331) if((tmp==msg_buffer[6])||(msg_buffer[7]==0))
031E 9020011A LDS R2,0x11A
0320 840D LDD R0,Y+13
0321 1402 CP R0,R2
0322 F021 BEQ 0x0327
0323 9020011B LDS R2,0x11B
0325 2022 TST R2
0326 F451 BNE 0x0331
(0332) {
(0333) LED_GN_OFF;
0327 EF8E LDI R24,0xFE
0328 EF9F LDI R25,0xFF
0329 B025 IN R2,0x05
032A 2228 AND R2,R24
032B B825 OUT 0x05,R2
(0334) LED_RT_ON;
032C 9A29 SBI 0x05,1
(0335) i=0xFF;
032D EF8F LDI R24,0xFF
032E E090 LDI R25,0
032F 016C MOVW R12,R24
(0336) break;
0330 C00B RJMP 0x033C
(0337) }
(0338)
(0339) spi_clock_pulse();
0331 D657 RCALL _spi_clock_pulse
0332 01C6 MOVW R24,R12
0333 9601 ADIW R24,1
0334 016C MOVW R12,R24
0335 90200118 LDS R2,0x118
0337 2433 CLR R3
0338 14C2 CP R12,R2
0339 04D3 CPC R13,R3
033A F408 BCC 0x033C
033B CFB1 RJMP 0x02ED
(0340) }
(0341)
(0342) num_bytes = 2;
033C E082 LDI R24,2
033D E090 LDI R25,0
033E 879B STD Y+11,R25
033F 878A STD Y+10,R24
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -