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

📄 main.s

📁 程序下载在M16中后
💻 S
📖 第 1 页 / 共 2 页
字号:
; 		msg_buffer[0] = CMD_LOAD_ADDRESS;
	ldi R24,6
	sts _msg_buffer,R24
	.dbline 193
; 		msg_buffer[1] = STATUS_CMD_OK;
	clr R2
	sts _msg_buffer+1,R2
	.dbline 194
; 	}
	xjmp L52
L51:
	.dbline 196
; 	//CMD_CHIP_ERASE_ISP
; 	else if(cmd==CMD_CHIP_ERASE_ISP)
	mov R24,R14
	cpi R24,18
	brne L56
	.dbline 197
; 	{		
	.dbline 198
; 		num_bytes = 2;
	ldi R24,2
	ldi R25,0
	std y+7,R25
	std y+6,R24
	.dbline 199
; 		msg_buffer[0] = CMD_CHIP_ERASE_ISP;
	ldi R24,18
	sts _msg_buffer,R24
	.dbline 200
; 		msg_buffer[1] = STATUS_CMD_OK;		
	clr R2
	sts _msg_buffer+1,R2
	.dbline 201
; 	}
	xjmp L57
L56:
	.dbline 203
; 	//命令CMD_ENTER_PROGMODE_ISP
; 	else if(cmd == CMD_ENTER_PROGMODE_ISP)
	mov R24,R14
	cpi R24,16
	brne L59
	.dbline 204
; 	{
	.dbline 205
; 		num_bytes = 2;
	ldi R24,2
	ldi R25,0
	std y+7,R25
	std y+6,R24
	.dbline 206
; 		msg_buffer[0] = CMD_ENTER_PROGMODE_ISP;
	ldi R24,16
	sts _msg_buffer,R24
	.dbline 207
; 		msg_buffer[1] = STATUS_CMD_OK;
	clr R2
	sts _msg_buffer+1,R2
	.dbline 208
; 	}
	xjmp L60
L59:
	.dbline 210
; 	//命令 CMD_LEAVE_PROGMODE_ISP
; 	else if(cmd==CMD_LEAVE_PROGMODE_ISP)
	mov R24,R14
	cpi R24,17
	brne L62
	.dbline 211
; 	{
	.dbline 212
; 		num_bytes = 2;
	ldi R24,2
	ldi R25,0
	std y+7,R25
	std y+6,R24
	.dbline 213
; 		msg_buffer[0] = CMD_LEAVE_PROGMODE_ISP;
	ldi R24,17
	sts _msg_buffer,R24
	.dbline 214
; 		msg_buffer[1] = STATUS_CMD_OK;	
	clr R2
	sts _msg_buffer+1,R2
	.dbline 216
; 			
; 		flag = 0;
	sts _flag,R2
	.dbline 217
; 		TCNT1 = 0x735F;
	ldi R24,29535
	ldi R25,115
	out 0x2d,R25
	out 0x2c,R24
	.dbline 218
; 		TCCR1B = 0x05;
	ldi R24,5
	out 0x2e,R24
	.dbline 219
; 	}
	xjmp L63
L62:
	.dbline 221
; 	//命令CMD_PROGRAM_FLASH_ISP
; 	else if(cmd==CMD_PROGRAM_FLASH_ISP)
	mov R24,R14
	cpi R24,19
	breq X5
	xjmp L65
X5:
	.dbline 222
; 	{
	.dbline 224
; 		uint16 temp16; 
; 		boot_page_ew(address,0x03);						//擦除页
	ldi R18,3
	lds R16,_address
	lds R17,_address+1
	xcall _boot_page_ew
	.dbline 225
; 		wait_page_rw_ok();                            	//等待擦除完成 
	xcall _wait_page_rw_ok
	.dbline 226
; 		for(i=0;i<(SPM_PAGESIZE<<1);i+=2)            		//将数据填入Flash缓冲页中 
	clr R12
	clr R13
	xjmp L70
L67:
	.dbline 227
	.dbline 228
	ldi R24,<_msg_buffer
	ldi R25,>_msg_buffer
	movw R30,R12
	adiw R30,11
	add R30,R24
	adc R31,R25
	ldd R10,z+0
	clr R11
	.dbline 229
	mov R11,R10
	clr R10
	.dbline 230
	movw R30,R12
	adiw R30,10
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	clr R3
	add R10,R2
	adc R11,R3
	.dbline 231
	movw R18,R10
	movw R16,R12
	xcall _boot_page_fill
	.dbline 232
L68:
	.dbline 226
	movw R24,R12
	adiw R24,2
	movw R12,R24
L70:
	.dbline 226
	movw R24,R12
	cpi R24,128
	ldi R30,0
	cpc R25,R30
	brlo L67
	.dbline 233
; 		{ 
; 				temp16=msg_buffer[i+11];
; 				temp16<<=8;
; 				temp16+=msg_buffer[i+10];
; 				boot_page_fill(i,temp16); 
;     	}
; 		boot_page_ew(address,0x05);                    	//将缓冲页数据写入一个Flash页 
	ldi R18,5
	lds R16,_address
	lds R17,_address+1
	xcall _boot_page_ew
	.dbline 234
;     	wait_page_rw_ok();                            	//等待写入完成 
	xcall _wait_page_rw_ok
	.dbline 235
; 		address+=(SPM_PAGESIZE<<1);
	lds R24,_address
	lds R25,_address+1
	subi R24,128  ; offset = 128
	sbci R25,255
	sts _address+1,R25
	sts _address,R24
	.dbline 236
; 		num_bytes = 2;
	ldi R24,2
	ldi R25,0
	std y+7,R25
	std y+6,R24
	.dbline 237
; 		msg_buffer[0] = CMD_PROGRAM_FLASH_ISP;
	ldi R24,19
	sts _msg_buffer,R24
	.dbline 238
; 		msg_buffer[1] = STATUS_CMD_OK;
	clr R2
	sts _msg_buffer+1,R2
	.dbline 239
; 	}
	xjmp L66
L65:
	.dbline 241
; 	//命令CMD_READ_FLASH_ISP
; 	else if(cmd==CMD_READ_FLASH_ISP)
	mov R24,R14
	cpi R24,20
	brne L72
	.dbline 242
; 	{
	.dbline 243
; 		for(i=0;i<(SPM_PAGESIZE<<2);i++)
	clr R12
	clr R13
	xjmp L77
L74:
	.dbline 244
	.dbline 245
	clr R18
	lds R16,_address
	lds R17,_address+1
	add R16,R12
	adc R17,R13
	xcall _read_program_memory
	ldi R24,<_msg_buffer
	ldi R25,>_msg_buffer
	movw R30,R12
	adiw R30,2
	add R30,R24
	adc R31,R25
	std z+0,R16
	.dbline 246
L75:
	.dbline 243
	movw R24,R12
	adiw R24,1
	movw R12,R24
L77:
	.dbline 243
	movw R24,R12
	cpi R24,0
	ldi R30,1
	cpc R25,R30
	brlo L74
	.dbline 247
; 		{
; 			msg_buffer[i+2] = read_program_memory (address+i,0x00);
; 		}
; 		address+=SPM_PAGESIZE<<2;
	lds R24,_address
	lds R25,_address+1
	subi R24,0  ; offset = 256
	sbci R25,255
	sts _address+1,R25
	sts _address,R24
	.dbline 248
; 		num_bytes = (SPM_PAGESIZE<<2)+3;
	ldi R24,259
	ldi R25,1
	std y+7,R25
	std y+6,R24
	.dbline 249
; 		msg_buffer[0] = CMD_READ_FLASH_ISP;
	ldi R24,20
	sts _msg_buffer,R24
	.dbline 250
; 		msg_buffer[1] = STATUS_CMD_OK;
	clr R2
	sts _msg_buffer+1,R2
	.dbline 251
; 		msg_buffer[(SPM_PAGESIZE<<2)+2] = STATUS_CMD_OK;
	sts _msg_buffer+258,R2
	.dbline 252
; 	}
	xjmp L73
L72:
	.dbline 254
; 	//命令CMD_READ_FUSE_ISP
; 	else if(cmd==CMD_READ_FUSE_ISP)
	mov R24,R14
	cpi R24,24
	brne L80
	.dbline 255
; 	{	
	.dbline 256
; 		switch(msg_buffer[2])		
	lds R10,_msg_buffer+2
	clr R11
	movw R24,R10
	cpi R24,80
	ldi R30,0
	cpc R25,R30
	breq L86
	cpi R24,80
	ldi R30,0
	cpc R25,R30
	brlt L83
L90:
	movw R24,R10
	cpi R24,88
	ldi R30,0
	cpc R25,R30
	breq L88
	xjmp L83
X3:
	.dbline 257
; 		{
L86:
	.dbline 259
; 			case 0x50:
; 				msg_buffer[2] =	read_program_memory(0x0000,1);			//读熔丝位
	ldi R18,1
	clr R16
	clr R17
	xcall _read_program_memory
	sts _msg_buffer+2,R16
	.dbline 260
; 				break;
	xjmp L83
L88:
	.dbline 262
; 			case 0x58:	
; 				msg_buffer[2] =	read_program_memory(0x0003,1);			//读高熔丝位
	ldi R18,1
	ldi R16,3
	ldi R17,0
	xcall _read_program_memory
	sts _msg_buffer+2,R16
	.dbline 263
; 				break;
	.dbline 265
; 			default:
; 				break;			
L83:
	.dbline 267
; 		}
; 		num_bytes = 4;
	ldi R24,4
	ldi R25,0
	std y+7,R25
	std y+6,R24
	.dbline 268
; 		msg_buffer[0] = CMD_READ_FUSE_ISP;
	ldi R24,24
	sts _msg_buffer,R24
	.dbline 269
; 		msg_buffer[1] = STATUS_CMD_OK;		
	clr R2
	sts _msg_buffer+1,R2
	.dbline 270
; 		msg_buffer[3] = STATUS_CMD_OK;
	sts _msg_buffer+3,R2
	.dbline 271
; 	}
	xjmp L81
L80:
	.dbline 273
; 	//命令CMD_PROGRAM_LOCK_ISP
; 	else if(cmd==CMD_PROGRAM_LOCK_ISP)
	mov R24,R14
	cpi R24,25
	brne L93
	.dbline 274
; 	{
	.dbline 275
; 		write_lock_bits (msg_buffer[4]|0xC0);
	lds R16,_msg_buffer+4
	ori R16,192
	xcall _write_lock_bits
	.dbline 276
; 		num_bytes = 3;
	ldi R24,3
	ldi R25,0
	std y+7,R25
	std y+6,R24
	.dbline 277
; 		msg_buffer[0] = CMD_PROGRAM_LOCK_ISP;
	ldi R24,25
	sts _msg_buffer,R24
	.dbline 278
; 		msg_buffer[1] = STATUS_CMD_OK;		
	clr R2
	sts _msg_buffer+1,R2
	.dbline 279
; 		msg_buffer[2] = STATUS_CMD_OK;
	sts _msg_buffer+2,R2
	.dbline 280
; 	}
	xjmp L94
L93:
	.dbline 282
; 	//命令CMD_READ_LOCK_ISP
; 	else if(cmd==CMD_READ_LOCK_ISP)
	mov R24,R14
	cpi R24,26
	brne L98
	.dbline 283
; 	{
	.dbline 284
; 		msg_buffer[2] = read_program_memory(0x0001,1);
	ldi R18,1
	ldi R16,1
	ldi R17,0
	xcall _read_program_memory
	sts _msg_buffer+2,R16
	.dbline 285
; 		num_bytes = 4;
	ldi R24,4
	ldi R25,0
	std y+7,R25
	std y+6,R24
	.dbline 286
; 		msg_buffer[0] = CMD_READ_LOCK_ISP;
	ldi R24,26
	sts _msg_buffer,R24
	.dbline 287
; 		msg_buffer[1] = STATUS_CMD_OK;		
	clr R2
	sts _msg_buffer+1,R2
	.dbline 288
; 		msg_buffer[3] = STATUS_CMD_OK;
	sts _msg_buffer+3,R2
	.dbline 289
; 	}
L98:
L94:
L81:
L73:
L66:
L63:
L60:
L57:
L52:
L39:
L36:
L30:
	.dbline 291
; 	//传送缓冲区数据
; 	if(num_bytes>0)
	ldd R0,y+6
	ldd R1,y+7
	tst R0
	brne X4
	tst R1
	brne X6
	xjmp L103
X6:
X4:
	.dbline 292
; 	{		
	.dbline 293
; 		putChar(MESSAGE_START);
	ldi R16,27
	xcall _putChar
	.dbline 294
; 		checkSum=MESSAGE_START;
	ldi R24,27
	sts _checkSum,R24
	.dbline 295
; 		putChar(seqNum);
	ldd R16,y+19
	xcall _putChar
	.dbline 296
; 		checkSum^=seqNum;
	lds R2,_checkSum
	ldd R0,y+19
	eor R2,R0
	sts _checkSum,R2
	.dbline 297
; 		tmp=(num_bytes&0xFF00)>>8;
	ldd R24,y+6
	ldd R25,y+7
	andi R24,0
	mov R24,R25
	clr R25
	std y+8,R24
	.dbline 298
; 		putChar(tmp);
	mov R16,R24
	xcall _putChar
	.dbline 299
; 		checkSum^=tmp;
	lds R2,_checkSum
	ldd R0,y+8
	eor R2,R0
	sts _checkSum,R2
	.dbline 300
; 		tmp=num_bytes&0x00FF;
	ldd R24,y+6
	ldd R25,y+7
	andi R25,0
	std y+8,R24
	.dbline 301
; 		putChar(tmp);
	mov R16,R24
	xcall _putChar
	.dbline 302
; 		checkSum^=tmp;
	lds R2,_checkSum
	ldd R0,y+8
	eor R2,R0
	sts _checkSum,R2
	.dbline 303
; 		putChar(TOKEN);
	ldi R16,14
	xcall _putChar
	.dbline 304
; 		checkSum^=TOKEN;
	ldi R24,14
	lds R2,_checkSum
	eor R2,R24
	sts _checkSum,R2
	.dbline 305
; 		for(i=0;i<num_bytes;i++)
	clr R12
	clr R13
	xjmp L108
L105:
	.dbline 306
	.dbline 307
	ldi R24,<_msg_buffer
	ldi R25,>_msg_buffer
	movw R30,R12
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	xcall _putChar
	.dbline 308
	ldi R24,<_msg_buffer
	ldi R25,>_msg_buffer
	movw R30,R12
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	lds R3,_checkSum
	eor R3,R2
	sts _checkSum,R3
	.dbline 309
L106:
	.dbline 305
	movw R24,R12
	adiw R24,1
	movw R12,R24
L108:
	.dbline 305
	ldd R0,y+6
	ldd R1,y+7
	cp R12,R0
	cpc R13,R1
	brlo L105
	.dbline 310
	lds R16,_checkSum
	xcall _putChar
	.dbline 311
	clr R2
	sts _checkSum,R2
	.dbline 312
L103:
	.dbline -2
L28:
	adiw R28,9
	xcall pop_gset5
	adiw R28,2
	.dbline 0 ; func end
	ret
	.dbsym r temp16 10 i
	.dbsym l start_address 2 l
	.dbsym r cmd 14 c
	.dbsym l tmp 8 c
	.dbsym l num_bytes 6 i
	.dbsym r i 12 i
	.dbsym l seqNum 19 c
	.dbend
	.area bss(ram, con, rel)
	.dbfile D:\iccv7avr\AVRBOO~1\main.c
_address::
	.blkb 2
	.dbfile D:\iccv7avr\AVRBOO~1/para.h
	.dbsym e address _address i
_msgSize::
	.blkb 2
	.dbsym e msgSize _msgSize i
_statusMachine::
	.blkb 1
	.dbsym e statusMachine _statusMachine c
_prgMode::
	.blkb 1
	.dbsym e prgMode _prgMode c
_paramControllerInit::
	.blkb 1
	.dbsym e paramControllerInit _paramControllerInit c
_resetPolarity::
	.blkb 1
	.dbsym e resetPolarity _resetPolarity c
_clockSpeed::
	.blkb 1
	.dbsym e clockSpeed _clockSpeed c
_checkSum::
	.blkb 1
	.dbsym e checkSum _checkSum c
_seqNumber::
	.blkb 1
	.dbsym e seqNumber _seqNumber c
_msg_buffer::
	.blkb 300
	.dbsym e msg_buffer _msg_buffer A[300:300]c
	.area data(ram, con, rel)
	.dbfile D:\iccv7avr\AVRBOO~1/para.h
L34:
	.blkb 9
	.area idata
	.byte 'S,'T,'K,53,48,48,95,50,0
	.area data(ram, con, rel)
	.dbfile D:\iccv7avr\AVRBOO~1/para.h

⌨️ 快捷键说明

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