main.s

来自「文档里面的代码是可以正常使用的」· S 代码 · 共 3,673 行 · 第 1/5 页

S
3,673
字号
	breq L71
	.dbline 212
	.dbline 213
; 					eeprom_sck_period = clock_speed;
	sts _eeprom_sck_period,R2
	.dbline 214
; 					}
L71:
	.dbline 215
; 				spi_set_speed(clock_speed);
	lds R16,_clock_speed
	rcall _spi_set_speed
	.dbline 216
; 				break;
	rjmp L49
L73:
	.dbline 218
; 			case PARAM_RESET_POLARITY:
; 				reset_polarity = msg_buffer[2];
	lds R2,_msg_buffer+2
	sts _reset_polarity,R2
	.dbline 219
; 				break;
	rjmp L49
L75:
	.dbline 221
; 			case PARAM_CONTROLLER_INIT:
; 				param_controller_init = msg_buffer[2];
	lds R2,_msg_buffer+2
	sts _param_controller_init,R2
	.dbline 222
; 				break;
L48:
L49:
	.dbline 225
; 		}
; 		
; 		num_bytes = 2;
	ldi R24,2
	ldi R25,0
	std y+11,R25
	std y+10,R24
	.dbline 226
; 		msg_buffer[0] = CMD_SET_PARAMETER;
	sts _msg_buffer,R24
	.dbline 227
; 		msg_buffer[1] = STATUS_CMD_OK;
	clr R2
	sts _msg_buffer+1,R2
	.dbline 228
; 	}
	rjmp L47
L46:
	.dbline 232
; 	//////////////////////////////////////
; 	//CMD_GET_PARAMETER
; 	//////////////////////////////////////
; 	else if(cmd==CMD_GET_PARAMETER)
	ldd R24,y+12
	cpi R24,3
	breq X11
	rjmp L79
X11:
	.dbline 233
; 	{
	.dbline 234
; 		switch(msg_buffer[1])
	lds R10,_msg_buffer+1
	clr R11
	movw R24,R10
	cpi R24,144
	ldi R30,0
	cpc R25,R30
	breq L87
	cpi R24,145
	ldi R30,0
	cpc R25,R30
	breq L88
	cpi R24,146
	ldi R30,0
	cpc R25,R30
	breq L89
	ldi R24,146
	cp R24,R10
	cpc R25,R11
	brlt L94
L93:
	movw R24,R10
	cpi R24,128
	ldi R30,0
	cpc R25,R30
	breq L85
	cpi R24,129
	ldi R30,0
	cpc R25,R30
	breq L86
	rjmp L81
L94:
	movw R24,R10
	cpi R24,152
	ldi R30,0
	cpc R25,R30
	breq L90
	cpi R24,152
	ldi R30,0
	cpc R25,R30
	brlt L81
L95:
	movw R24,R10
	cpi R24,158
	ldi R30,0
	cpc R25,R30
	breq L91
	cpi R24,159
	ldi R30,0
	cpc R25,R30
	breq L92
	rjmp L81
X4:
	.dbline 235
; 		{
L85:
	.dbline 237
; 			case PARAM_BUILD_NUMBER_LOW:
; 				tmp = CONFIG_PARAM_BUILD_NUMBER_LOW;
	clr R0
	std y+13,R0
	.dbline 238
; 				break;
	rjmp L82
L86:
	.dbline 240
; 			case PARAM_BUILD_NUMBER_HIGH:
; 				tmp = CONFIG_PARAM_BUILD_NUMBER_HIGH;
	clr R0
	std y+13,R0
	.dbline 241
; 				break;
	rjmp L82
L87:
	.dbline 243
; 			case PARAM_HW_VER:
; 				tmp = CONFIG_PARAM_HW_VER;
	ldi R24,15
	std y+13,R24
	.dbline 244
; 				break;
	rjmp L82
L88:
	.dbline 246
; 			case PARAM_SW_MAJOR:
; 				tmp = CONFIG_PARAM_SW_MAJOR;
	ldi R24,2
	std y+13,R24
	.dbline 247
; 				break;
	rjmp L82
L89:
	.dbline 249
; 			case PARAM_SW_MINOR:
; 				tmp = CONFIG_PARAM_SW_MINOR;
	ldi R24,10
	std y+13,R24
	.dbline 250
; 				break;
	rjmp L82
L90:
	.dbline 252
; 			case PARAM_SCK_DURATION:
; 				tmp = clock_speed;
	lds R2,_clock_speed
	std y+13,R2
	.dbline 253
; 				break;
	rjmp L82
L91:
	.dbline 255
; 			case PARAM_RESET_POLARITY:
; 				tmp = reset_polarity;
	lds R2,_reset_polarity
	std y+13,R2
	.dbline 256
; 				break;
	rjmp L82
L92:
	.dbline 258
; 			case PARAM_CONTROLLER_INIT:
; 				tmp = param_controller_init;
	lds R2,_param_controller_init
	std y+13,R2
	.dbline 259
; 				break;
L81:
L82:
	.dbline 262
; 		}
; 		
; 		num_bytes = 3;
	ldi R24,3
	ldi R25,0
	std y+11,R25
	std y+10,R24
	.dbline 263
; 		msg_buffer[0] = CMD_GET_PARAMETER;
	sts _msg_buffer,R24
	.dbline 264
; 		msg_buffer[1] = STATUS_CMD_OK;
	clr R2
	sts _msg_buffer+1,R2
	.dbline 265
; 		msg_buffer[2] = tmp;
	ldd R0,y+13
	sts _msg_buffer+2,R0
	.dbline 266
; 	}
	rjmp L80
L79:
	.dbline 270
; 	//////////////////////////////////////
; 	//CMD_LOAD_ADDRESS
; 	//////////////////////////////////////
; 	else if(cmd==CMD_LOAD_ADDRESS)
	ldd R24,y+12
	cpi R24,6
	breq X12
	rjmp L98
X12:
	.dbline 271
; 	{
	.dbline 272
; 		address =  ((unsigned long)msg_buffer[1])<<24;
	ldi R24,24
	ldi R25,0
	lds R2,_msg_buffer+1
	clr R3
	clr R4
	clr R5
	st -y,R24
	movw R16,R2
	movw R18,R4
	rcall lsl32
	sts _address+1,R17
	sts _address,R16
	sts _address+2+1,R19
	sts _address+2,R18
	.dbline 273
; 		address |= ((unsigned long)msg_buffer[2])<<16;
	lds R2,_msg_buffer+2
	clr R3
	clr R4
	clr R5
	movw R4,R2
	clr R2
	clr R3
	movw R6,R16
	movw R8,R18
	or R6,R2
	or R7,R3
	or R8,R4
	or R9,R5
	sts _address+1,R7
	sts _address,R6
	sts _address+2+1,R9
	sts _address+2,R8
	.dbline 274
; 		address |= ((unsigned long)msg_buffer[3])<<8;
	ldi R24,8
	ldi R25,0
	lds R2,_msg_buffer+3
	clr R3
	clr R4
	clr R5
	st -y,R24
	movw R16,R2
	movw R18,R4
	rcall lsl32
	lds R4,_address+2
	lds R5,_address+2+1
	lds R2,_address
	lds R3,_address+1
	or R2,R16
	or R3,R17
	or R4,R18
	or R5,R19
	sts _address+1,R3
	sts _address,R2
	sts _address+2+1,R5
	sts _address+2,R4
	.dbline 275
; 		address |= ((unsigned long)msg_buffer[4]);
	lds R2,_msg_buffer+4
	clr R3
	clr R4
	clr R5
	lds R8,_address+2
	lds R9,_address+2+1
	lds R6,_address
	lds R7,_address+1
	or R6,R2
	or R7,R3
	or R8,R4
	or R9,R5
	sts _address+1,R7
	sts _address,R6
	sts _address+2+1,R9
	sts _address+2,R8
	.dbline 277
; 				
; 		num_bytes = 2;
	ldi R24,2
	ldi R25,0
	std y+11,R25
	std y+10,R24
	.dbline 278
; 		msg_buffer[0] = CMD_LOAD_ADDRESS;
	ldi R24,6
	sts _msg_buffer,R24
	.dbline 279
; 		msg_buffer[1] = STATUS_CMD_OK;
	clr R2
	sts _msg_buffer+1,R2
	.dbline 280
; 	}
	rjmp L99
L98:
	.dbline 284
; 	//////////////////////////////////////
; 	//CMD_ENTER_PROGMODE_ISP
; 	//////////////////////////////////////
; 	else if(cmd==CMD_ENTER_PROGMODE_ISP)
	ldd R24,y+12
	cpi R24,16
	breq X13
	rjmp L105
X13:
	.dbline 285
; 	{
	.dbline 298
; 		//msg_buffer[1] //timeout		//Command time-out (in ms)
; 		//msg_buffer[2] //stabDelay		//Delay (in ms) used for pin stabilization
; 		//msg_buffer[3] //cmdexeDelay	//Delay (in ms) in connection with the EnterProgMode command execution
; 		//msg_buffer[4] //synchLoops	//Number of synchronization loops
; 		//msg_buffer[5] //byteDelay		//Delay (in ms) between each byte in the EnterProgMode command.
; 		//msg_buffer[6] //pollValue		//Poll value: 0x53 for AVR, 0x69 for AT89xx
; 		//msg_buffer[7] //pollIndex		//Start address, received byte: 0 = no polling, 3 = AVR, 4 = AT89xx
; 		//msg_buffer[8] //cmd1			//Command Byte # 1 to be transmitted
; 		//msg_buffer[9] //cmd2			//Command Byte # 2 to be transmitted
; 		//msg_buffer[10]//cmd3			//Command Byte # 3 to be transmitted
; 		//msg_buffer[11]//cmd4			//Command Byte # 4 to be transmitted
; 		
; 		prgmode=1;
	ldi R24,1
	sts _prgmode,R24
	.dbline 300
; 
; 		spi_enable();
	rcall _spi_enable
	.dbline 302
; 												
; 		wait_ms(msg_buffer[2]);
	lds R16,_msg_buffer+2
	clr R17
	rcall _wait_ms
	.dbline 304
; 		
; 		LED_GN_ON;
	sbi 0x5,0
	.dbline 305
; 		LED_RT_ON;
	sbi 0x5,1
	.dbline 308
; 		
; 		//Try to get connection with the target chip
; 		for(i=0;i<msg_buffer[4];i++)
	clr R12
	clr R13
	rjmp L111
L108:
	.dbline 309
; 		{
	.dbline 311
; 			//spi_transfer_16(0xAC53);
; 			spi_transfer_8(msg_buffer[8]);
	lds R16,_msg_buffer+8
	rcall _spi_transfer_8
	.dbline 312
; 			wait_ms(msg_buffer[5]);
	lds R16,_msg_buffer+5
	clr R17
	rcall _wait_ms
	.dbline 313
; 			spi_transfer_8(msg_buffer[9]);
	lds R16,_msg_buffer+9
	rcall _spi_transfer_8
	.dbline 314
; 			wait_ms(msg_buffer[5]);
	lds R16,_msg_buffer+5
	clr R17
	rcall _wait_ms
	.dbline 316
; 			
; 			if(msg_buffer[7]==3)
	lds R24,_msg_buffer+7
	cpi R24,3
	brne L117
	.dbline 317
; 			{
	.dbline 318
; 				tmp=spi_transfer_8(msg_buffer[10]);
	lds R16,_msg_buffer+10
	rcall _spi_transfer_8
	std y+13,R16
	.dbline 319
; 				wait_ms(msg_buffer[5]);
	lds R16,_msg_buffer+5
	clr R17
	rcall _wait_ms
	.dbline 320
; 				spi_transfer_8(msg_buffer[11]);
	lds R16,_msg_buffer+11
	rcall _spi_transfer_8
	.dbline 321
; 				wait_ms(msg_buffer[5]);
	lds R16,_msg_buffer+5
	clr R17
	rcall _wait_ms
	.dbline 322
; 			}
	rjmp L118
L117:
	.dbline 324
; 			else
; 			{
	.dbline 325
; 				spi_transfer_8(msg_buffer[10]);
	lds R16,_msg_buffer+10
	rcall _spi_transfer_8
	.dbline 326
; 				wait_ms(msg_buffer[5]);				
	lds R16,_msg_buffer+5
	clr R17
	rcall _wait_ms
	.dbline 327
; 				tmp=spi_transfer_8(msg_buffer[11]);
	lds R16,_msg_buffer+11
	rcall _spi_transfer_8
	std y+13,R16
	.dbline 328
; 				wait_ms(msg_buffer[5]);
	lds R16,_msg_buffer+5
	clr R17
	rcall _wait_ms
	.dbline 329
; 			}				
L118:
	.dbline 331
; 					
; 			if((tmp==msg_buffer[6])||(msg_buffer[7]==0))
	lds R2,_msg_buffer+6
	ldd R0,y+13
	cp R0,R2
	breq L132
	lds R2,_msg_buffer+7
	tst R2
	brne L128
L132:
	.dbline 332
; 			{
	.dbline 333
; 				LED_GN_OFF;
	ldi R24,-2
	ldi R25,-1
	in R2,0x5
	and R2,R24
	out 0x5,R2
	.dbline 334
; 				LED_RT_ON;
	sbi 0x5,1
	.dbline 335
; 				i=0xFF;
	ldi R24,255
	ldi R25,0
	movw R12,R24
	.dbline 336
; 				break;
	rjmp L110
L128:
	.dbline 339
	rcall _spi_clock_pulse
	.dbline 340
L109:
	.dbline 308
	movw R24,R12
	adiw R24,1
	movw R12,R24
L111:
	.dbline 308
	lds R2,_msg_buffer+4
	clr R3
	cp R12,R2
	cpc R13,R3
	brsh X14
	rjmp L108
X14:
L110:
	.dbline 342
; 			}
; 		
; 			spi_clock_pulse();
; 		}
; 		
; 		num_bytes = 2;
	ldi R24,2
	ldi R25,0
	std y+11,R25
	std y+10,R24
	.dbline 343
; 		msg_buffer[0] = CMD_ENTER_PROGMODE_ISP;
	ldi R24,16
	sts _msg_buffer,R24
	.dbline 345
; 			
; 		if(i==0xFF)
	movw R24,R12
	cpi R24,255
	ldi R30,0
	cpc R25,R30
	brne L133
	.dbline 346
; 		{			
	.dbline 347
; 			msg_buffer[1] = STATUS_CMD_OK;			
	clr R2
	sts _msg_buffer+1,R2
	.dbline 348
; 		}
	rjmp L106
L133:
	.dbline 350
; 		else
; 		{			
	.dbline 351
; 			msg_buffer[1] = STATUS_CMD_FAILED;
	ldi R24,192
	sts _msg_buffer+1,R24
	.dbline 352
; 		}		
	.dbline 353
; 	}
	rjmp L106
L105:
	.dbline 357
; 	//////////////////////////////////////
; 	//CMD_LEAVE_PROGMODE_ISP
; 	//////////////////////////////////////
; 	else if(cmd==CMD_LEAVE_PROGMODE_ISP)
	ldd R24,y+12
	cpi R24,17
	brne L137
	.dbline 358
; 	{
	.dbline 359
; 		prgmode=0;
	clr R2
	sts _prgmode,R2
	.dbline 361
; 
; 		spi_disable();
	rcall _spi_disable
	.dbline 363
; 				
; 		LED_RT_OFF;
	ldi R24,-3
	ldi R25,-1
	in R2,0x5
	and R2,R24
	out 0x5,R2
	.dbline 364
; 		LED_GN_ON;
	sbi 0x5,0
	.dbline 366
; 
; 		num_bytes = 2;
	ldi R24,2
	ldi R25,0
	std y+11,R25
	std y+10,R24
	.dbline 367
; 		msg_buffer[0] = CMD_LEAVE_PROGMODE_ISP;
	ldi R24,17
	sts _msg_buffer,R24
	.dbline 368
; 		msg_buffer[1] = STATUS_CMD_OK;		
	clr R2
	sts _msg_buffer+1,R2
	.dbline 369
; 	}
	rjmp L138
L137:
	.dbline 373
; 	//////////////////////////////////////
; 	//CMD_CHIP_ERASE_ISP
; 	//////////////////////////////////////
; 	else if(cmd==CMD_CHIP_ERASE_ISP)
	ldd R24,y+12
	cpi R24,18
	brne L140
	.dbline 374
; 	{
	.dbline 375
; 		spi_transfer_8(msg_buffer[3]);
	lds R16,_msg_buffer+3
	rcall _spi_transfer_8
	.dbline 376
; 		spi_transfer_8(msg_buffer[4]);
	lds R16,_msg_buffer+4
	rcall _spi_transfer_8
	.dbline 377
; 		spi_transfer_8(msg_buffer[5]);
	lds R16,_msg_buffer+5
	rcall _spi_transfer_8
	.dbline 378
; 		spi_transfer_8(msg_buffer[6]);
	lds R16,_msg_buffer+6
	rcall _spi_transfer_8
	.dbline 382
; 		
; 		//Newer AVR's seems to have a busy bit
; 		//cant test this because I don't have any of these new chips
; 		if(msg_buffer[2]==0)
	lds R2,_msg_buffer+2
	tst R2
	brne L151
	.dbline 383
; 		{
	.dbline 384
; 			wait_ms(msg_buffer[1]);
	lds R16,_msg_buffer+1
	clr R17
	rcall _wait_ms
	.dbline 385
; 		}
	rjmp L147
X5:
	.dbline 387
; 		else //if(msg_buffer[2]==1)
; 		{
L150:
	.dbline 388
L151:
	.dbline 388
; 			while(spi_transfer_32(0xF0000000)&1);
	ldi R16,0
	ldi R17,0
	ldi R18,0
	ldi R19,240
	rcall _spi_transfer_32
	sbrc R16,0
	rjmp L150
	.dbline 389
; 		}		
L147:
	.dbline 391
; 				
; 		num_bytes = 2;
	ldi R24,2
	ldi R25,0
	std y+11,R25
	std y+10,R24
	.dbline 392
; 		msg_buffer[0] = CMD_CHIP_ERASE_ISP;
	ldi R24,18
	sts _msg_buffer,R24
	.dbline 393
; 		msg_buffer[1] = STATUS_CMD_OK;		
	clr R2
	sts _msg_buffer+1,R2
	.dbline 394
; 	}
	rjmp L141
L140:
	.dbline 398
; 	//////////////////////////////////////
; 	//CMD_PROGRAM_FLASH_ISP
; 	//////////////////////////////////////
; 	else if(cmd==CMD_PROGRAM_FLASH_ISP)
	ldd R24,y+12
	cpi R24,19
	breq X15
	rjmp L154
X15:
	.dbline 399
; 	{
	.dbline 400
; 		block_size = ((unsigned int)msg_buffer[1])<<8;
	lds R10,_msg_buffer+1
	clr R11
	mov R11,R10
	clr R10
	.dbline 401
; 		block_size |= msg_buffer[2];
	lds R2,_msg_buffer+2
	clr R3
	or R10,R2
	or R11,R3
	.dbline 402
; 		mode = msg_buffer[3];
	lds R14,_msg_buffer+3
	.dbline 405
; 		
; 		//Word Mode
; 		if((mode&1) == 0)
	sbrc R14,0
	rjmp L159
	.dbline 406
; 		{		
	.dbline 407
; 			for(i=0;i<block_size;i++)
	clr R12
	clr R13
	rjmp L164
L161:
	.dbline 408
; 			{	
	.dbline 411
; 				//If we have an uneven byte programm the
; 				//high byte			
; 				if(i&1)
	sbrs R12,0
	rjmp L165
	.dbline 412
; 				{
	.dbline 413
; 					spi_transfer_8(msg_buffer[5]|(1<<3));
	lds R16,_msg_buffer+5

⌨️ 快捷键说明

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