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

📄 bldstk500.lst

📁 程序下载在M16中后
💻 LST
📖 第 1 页 / 共 3 页
字号:
    1E8C 5080      SUBI	R24,0
    1E8D 4F9F      SBCI	R25,0xFF
    1E8E 9390006D  STS	address+1,R25
    1E90 9380006C  STS	address,R24
(0248) 		num_bytes = (SPM_PAGESIZE<<2)+3;
    1E92 E083      LDI	R24,3
    1E93 E091      LDI	R25,1
    1E94 839F      STD	Y+7,R25
    1E95 838E      STD	Y+6,R24
(0249) 		msg_buffer[0] = CMD_READ_FLASH_ISP;
    1E96 E184      LDI	R24,0x14
    1E97 93800077  STS	msg_buffer,R24
(0250) 		msg_buffer[1] = STATUS_CMD_OK;
    1E99 2422      CLR	R2
    1E9A 92200078  STS	msg_buffer+1,R2
(0251) 		msg_buffer[(SPM_PAGESIZE<<2)+2] = STATUS_CMD_OK;
    1E9C 92200179  STS	0x179,R2
(0252) 	}
    1E9E C05C      RJMP	0x1EFB
(0253) 	//命令CMD_READ_FUSE_ISP
(0254) 	else if(cmd==CMD_READ_FUSE_ISP)
    1E9F 2D8E      MOV	R24,R14
    1EA0 3188      CPI	R24,0x18
    1EA1 F571      BNE	0x1ED0
(0255) 	{	
(0256) 		switch(msg_buffer[2])		
    1EA2 90A00079  LDS	R10,msg_buffer+2
    1EA4 24BB      CLR	R11
    1EA5 01C5      MOVW	R24,R10
    1EA6 3580      CPI	R24,0x50
    1EA7 E0E0      LDI	R30,0
    1EA8 079E      CPC	R25,R30
    1EA9 F051      BEQ	0x1EB4
    1EAA 3580      CPI	R24,0x50
    1EAB E0E0      LDI	R30,0
    1EAC 079E      CPC	R25,R30
    1EAD F0AC      BLT	0x1EC3
    1EAE 01C5      MOVW	R24,R10
    1EAF 3588      CPI	R24,0x58
    1EB0 E0E0      LDI	R30,0
    1EB1 079E      CPC	R25,R30
    1EB2 F049      BEQ	0x1EBC
    1EB3 C00F      RJMP	0x1EC3
(0257) 		{
(0258) 			case 0x50:
(0259) 				msg_buffer[2] =	read_program_memory(0x0000,1);			//读熔丝位
    1EB4 E021      LDI	R18,1
    1EB5 2700      CLR	R16
    1EB6 2711      CLR	R17
    1EB7 940E1F83  CALL	_read_program_memory
    1EB9 93000079  STS	msg_buffer+2,R16
(0260) 				break;
    1EBB C007      RJMP	0x1EC3
(0261) 			case 0x58:	
(0262) 				msg_buffer[2] =	read_program_memory(0x0003,1);			//读高熔丝位
    1EBC E021      LDI	R18,1
    1EBD E003      LDI	R16,3
    1EBE E010      LDI	R17,0
    1EBF 940E1F83  CALL	_read_program_memory
    1EC1 93000079  STS	msg_buffer+2,R16
(0263) 				break;
(0264) 			default:
(0265) 				break;			
(0266) 		}
(0267) 		num_bytes = 4;
    1EC3 E084      LDI	R24,4
    1EC4 E090      LDI	R25,0
    1EC5 839F      STD	Y+7,R25
    1EC6 838E      STD	Y+6,R24
(0268) 		msg_buffer[0] = CMD_READ_FUSE_ISP;
    1EC7 E188      LDI	R24,0x18
    1EC8 93800077  STS	msg_buffer,R24
(0269) 		msg_buffer[1] = STATUS_CMD_OK;		
    1ECA 2422      CLR	R2
    1ECB 92200078  STS	msg_buffer+1,R2
(0270) 		msg_buffer[3] = STATUS_CMD_OK;
    1ECD 9220007A  STS	msg_buffer+3,R2
(0271) 	}
    1ECF C02B      RJMP	0x1EFB
(0272) 	//命令CMD_PROGRAM_LOCK_ISP
(0273) 	else if(cmd==CMD_PROGRAM_LOCK_ISP)
    1ED0 2D8E      MOV	R24,R14
    1ED1 3189      CPI	R24,0x19
    1ED2 F491      BNE	0x1EE5
(0274) 	{
(0275) 		write_lock_bits (msg_buffer[4]|0xC0);
    1ED3 9100007B  LDS	R16,0x7B
    1ED5 6C00      ORI	R16,0xC0
    1ED6 940E1F78  CALL	_write_lock_bits
(0276) 		num_bytes = 3;
    1ED8 E083      LDI	R24,3
    1ED9 E090      LDI	R25,0
    1EDA 839F      STD	Y+7,R25
    1EDB 838E      STD	Y+6,R24
(0277) 		msg_buffer[0] = CMD_PROGRAM_LOCK_ISP;
    1EDC E189      LDI	R24,0x19
    1EDD 93800077  STS	msg_buffer,R24
(0278) 		msg_buffer[1] = STATUS_CMD_OK;		
    1EDF 2422      CLR	R2
    1EE0 92200078  STS	msg_buffer+1,R2
(0279) 		msg_buffer[2] = STATUS_CMD_OK;
    1EE2 92200079  STS	msg_buffer+2,R2
(0280) 	}
    1EE4 C016      RJMP	0x1EFB
(0281) 	//命令CMD_READ_LOCK_ISP
(0282) 	else if(cmd==CMD_READ_LOCK_ISP)
    1EE5 2D8E      MOV	R24,R14
    1EE6 318A      CPI	R24,0x1A
    1EE7 F499      BNE	0x1EFB
(0283) 	{
(0284) 		msg_buffer[2] = read_program_memory(0x0001,1);
    1EE8 E021      LDI	R18,1
    1EE9 E001      LDI	R16,1
    1EEA E010      LDI	R17,0
    1EEB 940E1F83  CALL	_read_program_memory
    1EED 93000079  STS	msg_buffer+2,R16
(0285) 		num_bytes = 4;
    1EEF E084      LDI	R24,4
    1EF0 E090      LDI	R25,0
    1EF1 839F      STD	Y+7,R25
    1EF2 838E      STD	Y+6,R24
(0286) 		msg_buffer[0] = CMD_READ_LOCK_ISP;
    1EF3 E18A      LDI	R24,0x1A
    1EF4 93800077  STS	msg_buffer,R24
(0287) 		msg_buffer[1] = STATUS_CMD_OK;		
    1EF6 2422      CLR	R2
    1EF7 92200078  STS	msg_buffer+1,R2
(0288) 		msg_buffer[3] = STATUS_CMD_OK;
    1EF9 9220007A  STS	msg_buffer+3,R2
(0289) 	}
(0290) 	//传送缓冲区数据
(0291) 	if(num_bytes>0)
    1EFB 800E      LDD	R0,Y+6
    1EFC 801F      LDD	R1,Y+7
    1EFD 2000      TST	R0
    1EFE F419      BNE	0x1F02
    1EFF 2011      TST	R1
    1F00 F409      BNE	0x1F02
    1F01 C059      RJMP	0x1F5B
(0292) 	{		
(0293) 		putChar(MESSAGE_START);
    1F02 E10B      LDI	R16,0x1B
    1F03 940E1C53  CALL	_putChar
(0294) 		checkSum=MESSAGE_START;
    1F05 E18B      LDI	R24,0x1B
    1F06 93800075  STS	checkSum,R24
(0295) 		putChar(seqNum);
    1F08 890B      LDD	R16,Y+19
    1F09 940E1C53  CALL	_putChar
(0296) 		checkSum^=seqNum;
    1F0B 90200075  LDS	R2,checkSum
    1F0D 880B      LDD	R0,Y+19
    1F0E 2420      EOR	R2,R0
    1F0F 92200075  STS	checkSum,R2
(0297) 		tmp=(num_bytes&0xFF00)>>8;
    1F11 818E      LDD	R24,Y+6
    1F12 819F      LDD	R25,Y+7
    1F13 7080      ANDI	R24,0
    1F14 2F89      MOV	R24,R25
    1F15 2799      CLR	R25
    1F16 8788      STD	Y+8,R24
(0298) 		putChar(tmp);
    1F17 2F08      MOV	R16,R24
    1F18 940E1C53  CALL	_putChar
(0299) 		checkSum^=tmp;
    1F1A 90200075  LDS	R2,checkSum
    1F1C 8408      LDD	R0,Y+8
    1F1D 2420      EOR	R2,R0
    1F1E 92200075  STS	checkSum,R2
(0300) 		tmp=num_bytes&0x00FF;
    1F20 818E      LDD	R24,Y+6
    1F21 819F      LDD	R25,Y+7
    1F22 7090      ANDI	R25,0
    1F23 8788      STD	Y+8,R24
(0301) 		putChar(tmp);
    1F24 2F08      MOV	R16,R24
    1F25 940E1C53  CALL	_putChar
(0302) 		checkSum^=tmp;
    1F27 90200075  LDS	R2,checkSum
    1F29 8408      LDD	R0,Y+8
    1F2A 2420      EOR	R2,R0
    1F2B 92200075  STS	checkSum,R2
(0303) 		putChar(TOKEN);
    1F2D E00E      LDI	R16,0xE
    1F2E 940E1C53  CALL	_putChar
(0304) 		checkSum^=TOKEN;
    1F30 E08E      LDI	R24,0xE
    1F31 90200075  LDS	R2,checkSum
    1F33 2628      EOR	R2,R24
    1F34 92200075  STS	checkSum,R2
(0305) 		for(i=0;i<num_bytes;i++)
    1F36 24CC      CLR	R12
    1F37 24DD      CLR	R13
    1F38 C016      RJMP	0x1F4F
(0306) 		{
(0307) 			putChar(msg_buffer[i]);
    1F39 E787      LDI	R24,0x77
    1F3A E090      LDI	R25,0
    1F3B 01F6      MOVW	R30,R12
    1F3C 0FE8      ADD	R30,R24
    1F3D 1FF9      ADC	R31,R25
    1F3E 8100      LDD	R16,Z+0
    1F3F 940E1C53  CALL	_putChar
(0308) 			checkSum^=msg_buffer[i];
    1F41 E787      LDI	R24,0x77
    1F42 E090      LDI	R25,0
    1F43 01F6      MOVW	R30,R12
    1F44 0FE8      ADD	R30,R24
    1F45 1FF9      ADC	R31,R25
    1F46 8020      LDD	R2,Z+0
    1F47 90300075  LDS	R3,checkSum
    1F49 2432      EOR	R3,R2
    1F4A 92300075  STS	checkSum,R3
    1F4C 01C6      MOVW	R24,R12
    1F4D 9601      ADIW	R24,1
    1F4E 016C      MOVW	R12,R24
    1F4F 800E      LDD	R0,Y+6
    1F50 801F      LDD	R1,Y+7
    1F51 14C0      CP	R12,R0
    1F52 04D1      CPC	R13,R1
    1F53 F328      BCS	0x1F39
(0309) 		}		
(0310) 		putChar(checkSum);
    1F54 91000075  LDS	R16,checkSum
    1F56 940E1C53  CALL	_putChar
(0311) 		checkSum=0x00;		
    1F58 2422      CLR	R2
    1F59 92200075  STS	checkSum,R2
(0312) 	}
    1F5B 9629      ADIW	R28,0x9
    1F5C 940E1F9B  CALL	pop_gset5
    1F5E 9622      ADIW	R28,2
    1F5F 9508      RET
FILE: D:\iccv7avr\AVRBOO~1\self_prog.c
(0001) /****************************************Copyright (c)*****************************
(0002)  文件名:			self_prog.c
(0003)  修改日期:			2006-1-24 13:00
(0004)  描述: 				SPM操作函数
(0005)  版本:				V1.0,根据machao程序改编
(0006)  主控  芯 片:		M16  晶振频率:7.3728MHZ
(0007) ********************************************************************************/
(0008) #include<iom16v.h>
(0009) #include<macros.h>
(0010) #include"define.h"
(0011) #include"extern.h"
(0012) 
(0013) 
(0014) /**********************************************************************
(0015) functionName:void someNop(void)
(0016) description: 擦除(code=0x03)和写入(code=0x05)一个Flash页 
(0017) **********************************************************************/
(0018) void boot_page_ew(uint16 pageAddr,uint08 code) 
(0019) { 
(0020)    	asm("mov r30,r16\n" 
_boot_page_ew:
  code                 --> R18
  pageAddr             --> R16
    1F60 2FE0      MOV	R30,R16
    1F61 2FF1      MOV	R31,R17
(0021)         "mov r31,r17\n");            	//将页地址放入Z寄存器和RAMPZ的Bit0中 
(0022)    	SPMCR = code;                		//寄存器SPMCSR中为操作码 
    1F62 BF27      OUT	0x37,R18
(0023)    	asm("spm\n");                    	//对指定Flash页进行操作 
    1F63 95E8      SPM
    1F64 9508      RET
(0024) }         
(0025) 
(0026) /**********************************************************************
(0027) functionName:void boot_page_fill(uint16 address,uint16 data)  
(0028) description: 填充Flash缓冲页中的一个字 
(0029) **********************************************************************/
(0030) void boot_page_fill(uint16 address,uint16 data) 
(0031) { 
(0032)     asm("mov r30,r16\n" 
_boot_page_fill:
  data                 --> R18
  address              --> R16
    1F65 2FE0      MOV	R30,R16
    1F66 2FF1      MOV	R31,R17
    1F67 2E02      MOV	R0,R18
    1F68 2E13      MOV	R1,R19
(0033)     	"mov r31,r17\n"             //Z寄存器中为填冲页内地址 
(0034)     	"mov r0,r18\n" 
(0035)         "mov r1,r19\n");            //R0R1中为一个指令字 
(0036)     SPMCR = 0x01; 
    1F69 E081      LDI	R24,1
    1F6A BF87      OUT	0x37,R24
(0037)     asm("spm\n"); 
    1F6B 95E8      SPM
    1F6C 9508      RET
(0038) } 
(0039) 
(0040) /**********************************************************************
(0041) functionName:void wait_page_rw_ok(void) 
(0042) description: 等待一个Flash页的写完成 
(0043) **********************************************************************/
(0044) void wait_page_rw_ok(void) 
(0045) { 
_wait_page_rw_ok:
    1F6D C006      RJMP	0x1F74
(0046) 	while(SPMCR & 0x40) 
(0047) 	{ 
(0048)     	while(SPMCR & 0x01); 
    1F6E B627      IN	R2,0x37
    1F6F FC20      SBRC	R2,0
    1F70 CFFD      RJMP	0x1F6E
(0049)         SPMCR = 0x11; 
    1F71 E181      LDI	R24,0x11
    1F72 BF87      OUT	0x37,R24
(0050)         asm("spm\n"); 
    1F73 95E8      SPM
    1F74 B627      IN	R2,0x37
    1F75 FC26      SBRC	R2,6
    1F76 CFF7      RJMP	0x1F6E
    1F77 9508      RET
(0051)      } 
(0052) } 
(0053) 
(0054) 
(0055) 
(0056) 
(0057) /**********************************************************************
(0058) functionName:void write_lock_bits (unsigned char val)
(0059) description:写锁定位
(0060) **********************************************************************/
(0061) void write_lock_bits (unsigned char val)
(0062) {
(0063) 	asm("mov r0,r16\n");
_write_lock_bits:
  val                  --> R16
    1F78 2E00      MOV	R0,R16
(0064) 	SPMCR=0x09;
    1F79 E089      LDI	R24,0x9
    1F7A BF87      OUT	0x37,R24
(0065) 	asm("spm\n");
    1F7B 95E8      SPM
(0066) 	while(SPMCR&BIT(0));
    1F7C B627      IN	R2,0x37
    1F7D FC20      SBRC	R2,0
    1F7E CFFD      RJMP	0x1F7C
(0067) 	SPMCR = 0x11; 
    1F7F E181      LDI	R24,0x11
    1F80 BF87      OUT	0x37,R24
(0068)     asm("spm\n"); 
    1F81 95E8      SPM
    1F82 9508      RET
(0069) }
(0070) 
(0071) /**********************************************************************
(0072) functionName:uint08 read_program_memory (uint16 addr,uint08 cmd)
(0073) description: 返回addr地址数据,以字节为单位
(0074) cmd:
(0075) 0:读flashrom
(0076) 1:读熔丝位或者锁定位 
(0077) addr=0x0001		锁定位
(0078) addr=0x0000		熔丝位低字节
(0079) addr=0x0003 	熔丝位高字节
(0080) **********************************************************************/
(0081) uint08 read_program_memory(uint16 addr,uint08 cmd)
(0082) {
(0083) 	asm("mov r30,r16\n" 		
_read_program_memory:
  cmd                  --> R18
  addr                 --> R16
    1F83 2FE0      MOV	R30,R16
    1F84 2FF1      MOV	R31,R17
(0084)         "mov r31,r17\n");  
(0085)     if(cmd)
    1F85 2322      TST	R18
    1F86 F011      BEQ	0x1F89
(0086)     {
(0087)     	SPMCR=0x09;
    1F87 E089      LDI	R24,0x9
    1F88 BF87      OUT	0x37,R24
(0088)     }               
(0089) 	asm("lpm r0,z\n");
    1F89 9004      LPM	R0,0(Z)
(0090) 	return(R0);
FILE: <library>
    1F8A 91000000  LDS	R16,0x0
    1F8C 9508      RET
_memcpy:
    1F8D 2FA0      MOV	R26,R16
    1F8E 2FB1      MOV	R27,R17
    1F8F 2FE2      MOV	R30,R18
    1F90 2FF3      MOV	R31,R19
    1F91 8188      LDD	R24,Y+0
    1F92 8199      LDD	R25,Y+1
    1F93 3080      CPI	R24,0
    1F94 0798      CPC	R25,R24
    1F95 C003      RJMP	0x1F99
    1F96 9001      LD	R0,Z+
    1F97 920D      ST	R0,X+
    1F98 9701      SBIW	R24,1
    1F99 F7E1      BNE	0x1F96
    1F9A 9508      RET
pop_gset5:
    1F9B 27EE      CLR	R30
    1F9C 940C1FAA  JMP	pop
push_gset5:
    1F9E 92FA      ST	R15,-Y
    1F9F 92EA      ST	R14,-Y
push_gset4:
    1FA0 92DA      ST	R13,-Y
    1FA1 92CA      ST	R12,-Y
push_gset3:
    1FA2 92BA      ST	R11,-Y
    1FA3 92AA      ST	R10,-Y
push_gset2:
    1FA4 937A      ST	R23,-Y
    1FA5 936A      ST	R22,-Y
push_gset1:
    1FA6 935A      ST	R21,-Y
    1FA7 934A      ST	R20,-Y
    1FA8 9508      RET
pop_gset1:
    1FA9 E0E1      LDI	R30,1
pop:
    1FAA 9149      LD	R20,Y+
    1FAB 9159      LD	R21,Y+
    1FAC FDE0      SBRC	R30,0
    1FAD 9508      RET
    1FAE 9169      LD	R22,Y+
    1FAF 9179      LD	R23,Y+
    1FB0 FDE1      SBRC	R30,1
    1FB1 9508      RET
    1FB2 90A9      LD	R10,Y+
    1FB3 90B9      LD	R11,Y+
    1FB4 FDE2      SBRC	R30,2
    1FB5 9508      RET
    1FB6 90C9      LD	R12,Y+
    1FB7 90D9      LD	R13,Y+
    1FB8 FDE3      SBRC	R30,3
    1FB9 9508      RET
    1FBA 90E9      LD	R14,Y+
    1FBB 90F9      LD	R15,Y+
    1FBC 9508      RET
lsl32:
    1FBD 920F      PUSH	R0
    1FBE 9009      LD	R0,Y+
    1FBF 2000      TST	R0
    1FC0 F031      BEQ	0x1FC7
    1FC1 0F00      LSL	R16
    1FC2 1F11      ROL	R17
    1FC3 1F22      ROL	R18
    1FC4 1F33      ROL	R19
    1FC5 940A      DEC	R0
    1FC6 CFF8      RJMP	0x1FBF
    1FC7 900F      POP	R0
    1FC8 9508      RET

⌨️ 快捷键说明

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