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

📄 bldstk500.lst

📁 程序下载在M16中后
💻 LST
📖 第 1 页 / 共 3 页
字号:
    1D3B F451      BNE	0x1D46
(0088) 		{
(0089) 			if(rec_data == checkSum)
    1D3C 90200075  LDS	R2,checkSum
    1D3E 1542      CP	R20,R2
    1D3F F419      BNE	0x1D43
(0090) 			{
(0091) 				packageProcess(seqNumber);
    1D40 91000076  LDS	R16,seqNumber
    1D42 D005      RCALL	_packageProcess
(0092) 			}		
(0093) 			statusMachine = ST_START;	
    1D43 EF80      LDI	R24,0xF0
    1D44 93800070  STS	statusMachine,R24
    1D46 CF59      RJMP	0x1CA0
    1D47 9508      RET
_packageProcess:
  temp16               --> R10
  start_address        --> Y+2
  cmd                  --> R14
  tmp                  --> Y+8
  num_bytes            --> Y+6
  i                    --> R12
  seqNum               --> Y+19
    1D48 931A      ST	R17,-Y
    1D49 930A      ST	R16,-Y
    1D4A 940E1F9E  CALL	push_gset5
    1D4C 9729      SBIW	R28,0x9
(0094) 		}
(0095) 	}
(0096) }
(0097) 
(0098) 	
(0099) 	
(0100) 
(0101) /**********************************************************************
(0102) functionName:void packageProcess(uint08 seqNum) 
(0103) description:数据包的处理过程
(0104) **********************************************************************/		
(0105) void packageProcess(uint08 seqNum) 
(0106) {
(0107) 	uint08 cmd;
(0108) 	uint08 tmp=0;
    1D4D 2400      CLR	R0
    1D4E 8608      STD	Y+8,R0
(0109) 	uint16 i;
(0110) 	uint16 num_bytes=0;
    1D4F 2411      CLR	R1
    1D50 821F      STD	Y+7,R1
    1D51 820E      STD	Y+6,R0
(0111) 	uint32 start_address = address;
    1D52 9020006C  LDS	R2,address
    1D54 9030006D  LDS	R3,address+1
    1D56 2444      CLR	R4
    1D57 2455      CLR	R5
    1D58 01FE      MOVW	R30,R28
    1D59 8222      STD	Z+2,R2
    1D5A 8233      STD	Z+3,R3
    1D5B 8244      STD	Z+4,R4
    1D5C 8255      STD	Z+5,R5
(0112) 	
(0113) 	cmd = msg_buffer[0];
    1D5D 90E00077  LDS	R14,msg_buffer
(0114) 	//命令CMD_SIGN_ON
(0115) 	if(cmd==CMD_SIGN_ON)
    1D5F 2D8E      MOV	R24,R14
    1D60 3081      CPI	R24,1
    1D61 F4B1      BNE	0x1D78
(0116) 	{
(0117) 		num_bytes = 11;
    1D62 E08B      LDI	R24,0xB
    1D63 E090      LDI	R25,0
    1D64 839F      STD	Y+7,R25
    1D65 838E      STD	Y+6,R24
(0118) 		msg_buffer[0] = CMD_SIGN_ON;
    1D66 E081      LDI	R24,1
    1D67 93800077  STS	msg_buffer,R24
(0119) 		msg_buffer[1] = STATUS_CMD_OK;
    1D69 2422      CLR	R2
    1D6A 92200078  STS	msg_buffer+1,R2
(0120) 		msg_buffer[2] = 8;
    1D6C E088      LDI	R24,0x8
    1D6D 93800079  STS	msg_buffer+2,R24
(0121) 		memcpy(msg_buffer+3,"STK500_2",8);
    1D6F 8399      STD	Y+1,R25
    1D70 8388      STD	Y+0,R24
    1D71 E621      LDI	R18,0x61
    1D72 E030      LDI	R19,0
    1D73 E70A      LDI	R16,0x7A
    1D74 E010      LDI	R17,0
    1D75 940E1F8D  CALL	_memcpy
(0122) 	}
    1D77 C183      RJMP	0x1EFB
(0123) 	//命令CMD_SET_PARAMETER
(0124) 	else if(cmd==CMD_SET_PARAMETER)
    1D78 2D8E      MOV	R24,R14
    1D79 3082      CPI	R24,2
    1D7A F451      BNE	0x1D85
(0125) 	{
(0126) 		num_bytes = 2;
    1D7B E082      LDI	R24,2
    1D7C E090      LDI	R25,0
    1D7D 839F      STD	Y+7,R25
    1D7E 838E      STD	Y+6,R24
(0127) 		msg_buffer[0] = CMD_SET_PARAMETER;
    1D7F 93800077  STS	msg_buffer,R24
(0128) 		msg_buffer[1] = STATUS_CMD_OK;
    1D81 2422      CLR	R2
    1D82 92200078  STS	msg_buffer+1,R2
(0129) 	}
    1D84 C176      RJMP	0x1EFB
(0130) 	//命令CMD_GET_PARAMETER
(0131) 	else if(cmd==CMD_GET_PARAMETER)
    1D85 2D8E      MOV	R24,R14
    1D86 3083      CPI	R24,3
    1D87 F5B1      BNE	0x1DBE
(0132) 	{
(0133) 		switch(msg_buffer[1])
    1D88 90A00078  LDS	R10,msg_buffer+1
    1D8A 24BB      CLR	R11
    1D8B 01C5      MOVW	R24,R10
    1D8C 3982      CPI	R24,0x92
    1D8D E0E0      LDI	R30,0
    1D8E 079E      CPC	R25,R30
    1D8F F091      BEQ	0x1DA2
    1D90 3984      CPI	R24,0x94
    1D91 E0E0      LDI	R30,0
    1D92 079E      CPC	R25,R30
    1D93 F0A9      BEQ	0x1DA9
    1D94 3985      CPI	R24,0x95
    1D95 E0E0      LDI	R30,0
    1D96 079E      CPC	R25,R30
    1D97 F0A1      BEQ	0x1DAC
    1D98 3982      CPI	R24,0x92
    1D99 E0E0      LDI	R30,0
    1D9A 079E      CPC	R25,R30
    1D9B F09C      BLT	0x1DAF
    1D9C 01C5      MOVW	R24,R10
    1D9D 398E      CPI	R24,0x9E
    1D9E E0E0      LDI	R30,0
    1D9F 079E      CPC	R25,R30
    1DA0 F021      BEQ	0x1DA5
    1DA1 C00D      RJMP	0x1DAF
(0134) 		{
(0135) 			/*case PARAM_BUILD_NUMBER_LOW:
(0136) 				tmp = CONFIG_PARAM_BUILD_NUMBER_LOW;
(0137) 				break;
(0138) 			case PARAM_BUILD_NUMBER_HIGH:
(0139) 				tmp = CONFIG_PARAM_BUILD_NUMBER_HIGH;
(0140) 				break;
(0141) 			case PARAM_HW_VER:
(0142) 				tmp = CONFIG_PARAM_HW_VER;
(0143) 				break;
(0144) 			case PARAM_SW_MAJOR:
(0145) 				tmp = CONFIG_PARAM_SW_MAJOR;
(0146) 				break;*/
(0147) 			case PARAM_SW_MINOR:
(0148) 				tmp = CONFIG_PARAM_SW_MINOR;
    1DA2 E084      LDI	R24,4
    1DA3 8788      STD	Y+8,R24
(0149) 				break;
    1DA4 C00C      RJMP	0x1DB1
(0150) 			case PARAM_RESET_POLARITY:
(0151) 				tmp = resetPolarity;
    1DA5 90200073  LDS	R2,resetPolarity
    1DA7 8628      STD	Y+8,R2
(0152) 				break;
    1DA8 C008      RJMP	0x1DB1
(0153) 			case PARAM_VTARGET:				//目标电压
(0154) 				tmp = 50;
    1DA9 E382      LDI	R24,0x32
    1DAA 8788      STD	Y+8,R24
(0155) 				break;	
    1DAB C005      RJMP	0x1DB1
(0156) 			case PARAM_VADJUST:
(0157) 				tmp = 50;				//参考电压
    1DAC E382      LDI	R24,0x32
    1DAD 8788      STD	Y+8,R24
(0158) 				break;
    1DAE C002      RJMP	0x1DB1
(0159) 			/*case PARAM_TOPCARD_DETECT:
(0160) 				tmp = TOP_CARD_STK520;
(0161) 				break;
(0162) 			case PARAM_CONTROLLER_INIT:
(0163) 				tmp = paramControllerInit;
(0164) 				break;
(0165) 			case PARAM_SCK_DURATION:
(0166) 				tmp = clockSpeed;
(0167) 				break;*/
(0168) 			default:
(0169) 				tmp = CONFIG_PARAM_SW_MAJOR;
    1DAF E082      LDI	R24,2
    1DB0 8788      STD	Y+8,R24
(0170) 				break;		
(0171) 		}
(0172) 		num_bytes = 3;
    1DB1 E083      LDI	R24,3
    1DB2 E090      LDI	R25,0
    1DB3 839F      STD	Y+7,R25
    1DB4 838E      STD	Y+6,R24
(0173) 		msg_buffer[0] = CMD_GET_PARAMETER;
    1DB5 93800077  STS	msg_buffer,R24
(0174) 		msg_buffer[1] = STATUS_CMD_OK;
    1DB7 2422      CLR	R2
    1DB8 92200078  STS	msg_buffer+1,R2
(0175) 		msg_buffer[2] = tmp;
    1DBA 8408      LDD	R0,Y+8
    1DBB 92000079  STS	msg_buffer+2,R0
(0176) 	}
    1DBD C13D      RJMP	0x1EFB
(0177) 	//命令CMD_OSCCAL
(0178) 	/*else if(cmd==CMD_OSCCAL)
(0179) 	{
(0180) 		num_bytes = 2;
(0181) 		msg_buffer[0] = CMD_OSCCAL;
(0182) 		msg_buffer[1] = STATUS_CMD_OK;
(0183) 	}*/
(0184) 	//命令CMD_LOAD_ADDRESS
(0185) 	else if(cmd==CMD_LOAD_ADDRESS)
    1DBE 2D8E      MOV	R24,R14
    1DBF 3086      CPI	R24,6
    1DC0 F559      BNE	0x1DEC
(0186) 	{
(0187) 		//address =  ((unsigned long)msg_buffer[1])<<24;
(0188) 		//address |= ((unsigned long)msg_buffer[2])<<16;
(0189) 		address = ((unsigned long)msg_buffer[3])<<8;
    1DC1 E088      LDI	R24,0x8
    1DC2 E090      LDI	R25,0
    1DC3 9020007A  LDS	R2,msg_buffer+3
    1DC5 2433      CLR	R3
    1DC6 2444      CLR	R4
    1DC7 2455      CLR	R5
    1DC8 938A      ST	R24,-Y
    1DC9 0181      MOVW	R16,R2
    1DCA 0192      MOVW	R18,R4
    1DCB 940E1FBD  CALL	lsl32
    1DCD 9310006D  STS	address+1,R17
    1DCF 9300006C  STS	address,R16
(0190) 		address |= ((unsigned long)msg_buffer[4]);
    1DD1 9020007B  LDS	R2,0x7B
    1DD3 2433      CLR	R3
    1DD4 2444      CLR	R4
    1DD5 2455      CLR	R5
    1DD6 0138      MOVW	R6,R16
    1DD7 2488      CLR	R8
    1DD8 2499      CLR	R9
    1DD9 2862      OR	R6,R2
    1DDA 2873      OR	R7,R3
    1DDB 2884      OR	R8,R4
    1DDC 2895      OR	R9,R5
    1DDD 9270006D  STS	address+1,R7
    1DDF 9260006C  STS	address,R6
(0191) 		num_bytes = 2;
    1DE1 E082      LDI	R24,2
    1DE2 E090      LDI	R25,0
    1DE3 839F      STD	Y+7,R25
    1DE4 838E      STD	Y+6,R24
(0192) 		msg_buffer[0] = CMD_LOAD_ADDRESS;
    1DE5 E086      LDI	R24,6
    1DE6 93800077  STS	msg_buffer,R24
(0193) 		msg_buffer[1] = STATUS_CMD_OK;
    1DE8 2422      CLR	R2
    1DE9 92200078  STS	msg_buffer+1,R2
(0194) 	}
    1DEB C10F      RJMP	0x1EFB
(0195) 	//CMD_CHIP_ERASE_ISP
(0196) 	else if(cmd==CMD_CHIP_ERASE_ISP)
    1DEC 2D8E      MOV	R24,R14
    1DED 3182      CPI	R24,0x12
    1DEE F459      BNE	0x1DFA
(0197) 	{		
(0198) 		num_bytes = 2;
    1DEF E082      LDI	R24,2
    1DF0 E090      LDI	R25,0
    1DF1 839F      STD	Y+7,R25
    1DF2 838E      STD	Y+6,R24
(0199) 		msg_buffer[0] = CMD_CHIP_ERASE_ISP;
    1DF3 E182      LDI	R24,0x12
    1DF4 93800077  STS	msg_buffer,R24
(0200) 		msg_buffer[1] = STATUS_CMD_OK;		
    1DF6 2422      CLR	R2
    1DF7 92200078  STS	msg_buffer+1,R2
(0201) 	}
    1DF9 C101      RJMP	0x1EFB
(0202) 	//命令CMD_ENTER_PROGMODE_ISP
(0203) 	else if(cmd == CMD_ENTER_PROGMODE_ISP)
    1DFA 2D8E      MOV	R24,R14
    1DFB 3180      CPI	R24,0x10
    1DFC F459      BNE	0x1E08
(0204) 	{
(0205) 		num_bytes = 2;
    1DFD E082      LDI	R24,2
    1DFE E090      LDI	R25,0
    1DFF 839F      STD	Y+7,R25
    1E00 838E      STD	Y+6,R24
(0206) 		msg_buffer[0] = CMD_ENTER_PROGMODE_ISP;
    1E01 E180      LDI	R24,0x10
    1E02 93800077  STS	msg_buffer,R24
(0207) 		msg_buffer[1] = STATUS_CMD_OK;
    1E04 2422      CLR	R2
    1E05 92200078  STS	msg_buffer+1,R2
(0208) 	}
    1E07 C0F3      RJMP	0x1EFB
(0209) 	//命令 CMD_LEAVE_PROGMODE_ISP
(0210) 	else if(cmd==CMD_LEAVE_PROGMODE_ISP)
    1E08 2D8E      MOV	R24,R14
    1E09 3181      CPI	R24,0x11
    1E0A F499      BNE	0x1E1E
(0211) 	{
(0212) 		num_bytes = 2;
    1E0B E082      LDI	R24,2
    1E0C E090      LDI	R25,0
    1E0D 839F      STD	Y+7,R25
    1E0E 838E      STD	Y+6,R24
(0213) 		msg_buffer[0] = CMD_LEAVE_PROGMODE_ISP;
    1E0F E181      LDI	R24,0x11
    1E10 93800077  STS	msg_buffer,R24
(0214) 		msg_buffer[1] = STATUS_CMD_OK;	
    1E12 2422      CLR	R2
    1E13 92200078  STS	msg_buffer+1,R2
(0215) 			
(0216) 		flag = 0;
    1E15 92200060  STS	flag,R2
(0217) 		TCNT1 = 0x735F;
    1E17 E58F      LDI	R24,0x5F
    1E18 E793      LDI	R25,0x73
    1E19 BD9D      OUT	0x2D,R25
    1E1A BD8C      OUT	0x2C,R24
(0218) 		TCCR1B = 0x05;
    1E1B E085      LDI	R24,5
    1E1C BD8E      OUT	0x2E,R24
(0219) 	}
    1E1D C0DD      RJMP	0x1EFB
(0220) 	//命令CMD_PROGRAM_FLASH_ISP
(0221) 	else if(cmd==CMD_PROGRAM_FLASH_ISP)
    1E1E 2D8E      MOV	R24,R14
    1E1F 3183      CPI	R24,0x13
    1E20 F009      BEQ	0x1E22
    1E21 C048      RJMP	0x1E6A
(0222) 	{
(0223) 		uint16 temp16; 
(0224) 		boot_page_ew(address,0x03);						//擦除页
    1E22 E023      LDI	R18,3
    1E23 9100006C  LDS	R16,address
    1E25 9110006D  LDS	R17,address+1
    1E27 940E1F60  CALL	_boot_page_ew
(0225) 		wait_page_rw_ok();                            	//等待擦除完成 
    1E29 940E1F6D  CALL	_wait_page_rw_ok
(0226) 		for(i=0;i<(SPM_PAGESIZE<<1);i+=2)            		//将数据填入Flash缓冲页中 
    1E2B 24CC      CLR	R12
    1E2C 24DD      CLR	R13
    1E2D C019      RJMP	0x1E47
(0227) 		{ 
(0228) 				temp16=msg_buffer[i+11];
    1E2E E787      LDI	R24,0x77
    1E2F E090      LDI	R25,0
    1E30 01F6      MOVW	R30,R12
    1E31 963B      ADIW	R30,0xB
    1E32 0FE8      ADD	R30,R24
    1E33 1FF9      ADC	R31,R25
    1E34 80A0      LDD	R10,Z+0
    1E35 24BB      CLR	R11
(0229) 				temp16<<=8;
    1E36 2CBA      MOV	R11,R10
    1E37 24AA      CLR	R10
(0230) 				temp16+=msg_buffer[i+10];
    1E38 01F6      MOVW	R30,R12
    1E39 963A      ADIW	R30,0xA
    1E3A 0FE8      ADD	R30,R24
    1E3B 1FF9      ADC	R31,R25
    1E3C 8020      LDD	R2,Z+0
    1E3D 2433      CLR	R3
    1E3E 0CA2      ADD	R10,R2
    1E3F 1CB3      ADC	R11,R3
(0231) 				boot_page_fill(i,temp16); 
    1E40 0195      MOVW	R18,R10
    1E41 0186      MOVW	R16,R12
    1E42 940E1F65  CALL	_boot_page_fill
    1E44 01C6      MOVW	R24,R12
    1E45 9602      ADIW	R24,2
    1E46 016C      MOVW	R12,R24
    1E47 01C6      MOVW	R24,R12
    1E48 3880      CPI	R24,0x80
    1E49 E0E0      LDI	R30,0
    1E4A 079E      CPC	R25,R30
    1E4B F310      BCS	0x1E2E
(0232)     	}
(0233) 		boot_page_ew(address,0x05);                    	//将缓冲页数据写入一个Flash页 
    1E4C E025      LDI	R18,5
    1E4D 9100006C  LDS	R16,address
    1E4F 9110006D  LDS	R17,address+1
    1E51 940E1F60  CALL	_boot_page_ew
(0234)     	wait_page_rw_ok();                            	//等待写入完成 
    1E53 940E1F6D  CALL	_wait_page_rw_ok
(0235) 		address+=(SPM_PAGESIZE<<1);
    1E55 9180006C  LDS	R24,address
    1E57 9190006D  LDS	R25,address+1
    1E59 5880      SUBI	R24,0x80
    1E5A 4F9F      SBCI	R25,0xFF
    1E5B 9390006D  STS	address+1,R25
    1E5D 9380006C  STS	address,R24
(0236) 		num_bytes = 2;
    1E5F E082      LDI	R24,2
    1E60 E090      LDI	R25,0
    1E61 839F      STD	Y+7,R25
    1E62 838E      STD	Y+6,R24
(0237) 		msg_buffer[0] = CMD_PROGRAM_FLASH_ISP;
    1E63 E183      LDI	R24,0x13
    1E64 93800077  STS	msg_buffer,R24
(0238) 		msg_buffer[1] = STATUS_CMD_OK;
    1E66 2422      CLR	R2
    1E67 92200078  STS	msg_buffer+1,R2
(0239) 	}
    1E69 C091      RJMP	0x1EFB
(0240) 	//命令CMD_READ_FLASH_ISP
(0241) 	else if(cmd==CMD_READ_FLASH_ISP)
    1E6A 2D8E      MOV	R24,R14
    1E6B 3184      CPI	R24,0x14
    1E6C F591      BNE	0x1E9F
(0242) 	{
(0243) 		for(i=0;i<(SPM_PAGESIZE<<2);i++)
    1E6D 24CC      CLR	R12
    1E6E 24DD      CLR	R13
    1E6F C013      RJMP	0x1E83
(0244) 		{
(0245) 			msg_buffer[i+2] = read_program_memory (address+i,0x00);
    1E70 2722      CLR	R18
    1E71 9100006C  LDS	R16,address
    1E73 9110006D  LDS	R17,address+1
    1E75 0D0C      ADD	R16,R12
    1E76 1D1D      ADC	R17,R13
    1E77 940E1F83  CALL	_read_program_memory
    1E79 E787      LDI	R24,0x77
    1E7A E090      LDI	R25,0
    1E7B 01F6      MOVW	R30,R12
    1E7C 9632      ADIW	R30,2
    1E7D 0FE8      ADD	R30,R24
    1E7E 1FF9      ADC	R31,R25
    1E7F 8300      STD	Z+0,R16
    1E80 01C6      MOVW	R24,R12
    1E81 9601      ADIW	R24,1
    1E82 016C      MOVW	R12,R24
    1E83 01C6      MOVW	R24,R12
    1E84 3080      CPI	R24,0
    1E85 E0E1      LDI	R30,1
    1E86 079E      CPC	R25,R30
    1E87 F340      BCS	0x1E70
(0246) 		}
(0247) 		address+=SPM_PAGESIZE<<2;
    1E88 9180006C  LDS	R24,address
    1E8A 9190006D  LDS	R25,address+1

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -