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

📄 stk500i.lst

📁 AVR单片机,STK500下载线制作全套资料,包括程序,电路图
💻 LST
📖 第 1 页 / 共 5 页
字号:
(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 + -