⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stk500i.lst

📁 文档里面的代码是可以正常使用的
💻 LST
📖 第 1 页 / 共 5 页
字号:
    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 + -