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

📄 main.s

📁 avr单片机atmage16驱动小灯的一些例程 并且包括一些收发数据的程序利用usb口
💻 S
📖 第 1 页 / 共 5 页
字号:
L66:
	movw R24,R10
	cpi R24,152
	ldi R30,0
	cpc R25,R30
	breq L62
	cpi R24,152
	ldi R30,0
	cpc R25,R30
	brlt L53
L67:
	movw R24,R10
	cpi R24,158
	ldi R30,0
	cpc R25,R30
	breq L63
	cpi R24,159
	ldi R30,0
	cpc R25,R30
	breq L64
	rjmp L53
X4:
	.dbline 231
; 		{
L57:
	.dbline 233
; 			case PARAM_BUILD_NUMBER_LOW:
; 				tmp = CONFIG_PARAM_BUILD_NUMBER_LOW;
	clr R0
	std y+13,R0
	.dbline 234
; 				break;
	rjmp L54
L58:
	.dbline 236
; 			case PARAM_BUILD_NUMBER_HIGH:
; 				tmp = CONFIG_PARAM_BUILD_NUMBER_HIGH;
	clr R0
	std y+13,R0
	.dbline 237
; 				break;
	rjmp L54
L59:
	.dbline 239
; 			case PARAM_HW_VER:
; 				tmp = CONFIG_PARAM_HW_VER;
	ldi R24,15
	std y+13,R24
	.dbline 240
; 				break;
	rjmp L54
L60:
	.dbline 242
; 			case PARAM_SW_MAJOR:
; 				tmp = CONFIG_PARAM_SW_MAJOR;
	ldi R24,2
	std y+13,R24
	.dbline 243
; 				break;
	rjmp L54
L61:
	.dbline 245
; 			case PARAM_SW_MINOR:
; 				tmp = CONFIG_PARAM_SW_MINOR;
	ldi R24,10
	std y+13,R24
	.dbline 246
; 				break;
	rjmp L54
L62:
	.dbline 248
; 			case PARAM_SCK_DURATION:
; 				tmp = clock_speed;
	lds R2,_clock_speed
	std y+13,R2
	.dbline 249
; 				break;
	rjmp L54
L63:
	.dbline 251
; 			case PARAM_RESET_POLARITY:
; 				tmp = reset_polarity;
	lds R2,_reset_polarity
	std y+13,R2
	.dbline 252
; 				break;
	rjmp L54
L64:
	.dbline 254
; 			case PARAM_CONTROLLER_INIT:
; 				tmp = param_controller_init;
	lds R2,_param_controller_init
	std y+13,R2
	.dbline 255
; 				break;
L53:
L54:
	.dbline 258
; 		}
; 		
; 		num_bytes = 3;
	ldi R24,3
	ldi R25,0
	std y+11,R25
	std y+10,R24
	.dbline 259
; 		msg_buffer[0] = CMD_GET_PARAMETER;
	sts _msg_buffer,R24
	.dbline 260
; 		msg_buffer[1] = STATUS_CMD_OK;
	clr R2
	sts _msg_buffer+1,R2
	.dbline 261
; 		msg_buffer[2] = tmp;
	ldd R0,y+13
	sts _msg_buffer+2,R0
	.dbline 262
; 	}
	rjmp L52
L51:
	.dbline 266
; 	//////////////////////////////////////
; 	//CMD_LOAD_ADDRESS
; 	//////////////////////////////////////
; 	else if(cmd==CMD_LOAD_ADDRESS)
	ldd R24,y+12
	cpi R24,6
	breq X8
	rjmp L70
X8:
	.dbline 267
; 	{
	.dbline 268
; 		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 269
; 		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 270
; 		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 271
; 		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 273
; 				
; 		num_bytes = 2;
	ldi R24,2
	ldi R25,0
	std y+11,R25
	std y+10,R24
	.dbline 274
; 		msg_buffer[0] = CMD_LOAD_ADDRESS;
	ldi R24,6
	sts _msg_buffer,R24
	.dbline 275
; 		msg_buffer[1] = STATUS_CMD_OK;
	clr R2
	sts _msg_buffer+1,R2
	.dbline 276
; 	}
	rjmp L71
L70:
	.dbline 280
; 	//////////////////////////////////////
; 	//CMD_ENTER_PROGMODE_ISP
; 	//////////////////////////////////////
; 	else if(cmd==CMD_ENTER_PROGMODE_ISP)
	ldd R24,y+12
	cpi R24,16
	breq X9
	rjmp L77
X9:
	.dbline 281
; 	{
	.dbline 294
; 		//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 296
; 
; 		spi_enable();
	rcall _spi_enable
	.dbline 298
; 												
; 		wait_ms(msg_buffer[2]);
	lds R16,_msg_buffer+2
	clr R17
	rcall _wait_ms
	.dbline 300
; 		
; 		LED_GN_ON;
	sbi 0x18,0
	.dbline 301
; 		LED_RT_ON;
	sbi 0x18,1
	.dbline 304
; 		
; 		//Try to get connection with the target chip
; 		for(i=0;i<msg_buffer[4];i++)
	clr R12
	clr R13
	rjmp L83
L80:
	.dbline 305
; 		{
	.dbline 307
; 			//spi_transfer_16(0xAC53);
; 			spi_transfer_8(msg_buffer[8]);
	lds R16,_msg_buffer+8
	rcall _spi_transfer_8
	.dbline 308
; 			wait_ms(msg_buffer[5]);
	lds R16,_msg_buffer+5
	clr R17
	rcall _wait_ms
	.dbline 309
; 			spi_transfer_8(msg_buffer[9]);
	lds R16,_msg_buffer+9
	rcall _spi_transfer_8
	.dbline 310
; 			wait_ms(msg_buffer[5]);
	lds R16,_msg_buffer+5
	clr R17
	rcall _wait_ms
	.dbline 312
; 			
; 			if(msg_buffer[7]==3)
	lds R24,_msg_buffer+7
	cpi R24,3
	brne L89
	.dbline 313
; 			{
	.dbline 314
; 				tmp=spi_transfer_8(msg_buffer[10]);
	lds R16,_msg_buffer+10
	rcall _spi_transfer_8
	std y+13,R16
	.dbline 315
; 				wait_ms(msg_buffer[5]);
	lds R16,_msg_buffer+5
	clr R17
	rcall _wait_ms
	.dbline 316
; 				spi_transfer_8(msg_buffer[11]);
	lds R16,_msg_buffer+11
	rcall _spi_transfer_8
	.dbline 317
; 				wait_ms(msg_buffer[5]);
	lds R16,_msg_buffer+5
	clr R17
	rcall _wait_ms
	.dbline 318
; 			}
	rjmp L90
L89:
	.dbline 320
; 			else
; 			{
	.dbline 321
; 				spi_transfer_8(msg_buffer[10]);
	lds R16,_msg_buffer+10
	rcall _spi_transfer_8
	.dbline 322
; 				wait_ms(msg_buffer[5]);				
	lds R16,_msg_buffer+5
	clr R17
	rcall _wait_ms
	.dbline 323
; 				tmp=spi_transfer_8(msg_buffer[11]);
	lds R16,_msg_buffer+11
	rcall _spi_transfer_8
	std y+13,R16
	.dbline 324
; 				wait_ms(msg_buffer[5]);
	lds R16,_msg_buffer+5
	clr R17
	rcall _wait_ms
	.dbline 325
; 			}				
L90:
	.dbline 327
; 					
; 			if((tmp==msg_buffer[6])||(msg_buffer[7]==0))
	lds R2,_msg_buffer+6
	ldd R0,y+13
	cp R0,R2
	breq L104
	lds R2,_msg_buffer+7
	tst R2
	brne L100
L104:
	.dbline 328
; 			{
	.dbline 329
; 				LED_GN_OFF;
	ldi R24,-2
	ldi R25,-1
	in R2,0x18
	and R2,R24
	out 0x18,R2
	.dbline 330
; 				LED_RT_ON;
	sbi 0x18,1
	.dbline 331
; 				i=0xFF;
	ldi R24,255
	ldi R25,0
	movw R12,R24
	.dbline 332
; 				break;
	rjmp L82
L100:
	.dbline 335
	rcall _spi_clock_pulse
	.dbline 336
L81:
	.dbline 304
	movw R24,R12
	adiw R24,1
	movw R12,R24
L83:
	.dbline 304
	lds R2,_msg_buffer+4
	clr R3
	cp R12,R2
	cpc R13,R3
	brsh X10
	rjmp L80
X10:
L82:
	.dbline 338
; 			}
; 		
; 			spi_clock_pulse();
; 		}
; 		
; 		num_bytes = 2;
	ldi R24,2
	ldi R25,0
	std y+11,R25
	std y+10,R24
	.dbline 339
; 		msg_buffer[0] = CMD_ENTER_PROGMODE_ISP;
	ldi R24,16
	sts _msg_buffer,R24
	.dbline 341
; 			
; 		if(i==0xFF)
	movw R24,R12
	cpi R24,255
	ldi R30,0
	cpc R25,R30
	brne L105
	.dbline 342
; 		{			
	.dbline 343
; 			msg_buffer[1] = STATUS_CMD_OK;			
	clr R2
	sts _msg_buffer+1,R2
	.dbline 344
; 		}
	rjmp L78
L105:
	.dbline 346
; 		else
; 		{			
	.dbline 347
; 			msg_buffer[1] = STATUS_CMD_FAILED;
	ldi R24,192
	sts _msg_buffer+1,R24
	.dbline 348
; 		}		
	.dbline 349
; 	}
	rjmp L78
L77:
	.dbline 353
; 	//////////////////////////////////////
; 	//CMD_LEAVE_PROGMODE_ISP
; 	//////////////////////////////////////
; 	else if(cmd==CMD_LEAVE_PROGMODE_ISP)
	ldd R24,y+12
	cpi R24,17
	brne L109
	.dbline 354
; 	{
	.dbline 355
; 		prgmode=0;
	clr R2
	sts _prgmode,R2
	.dbline 357
; 
; 		spi_disable();
	rcall _spi_disable
	.dbline 359
; 				
; 		LED_RT_OFF;
	ldi R24,-3
	ldi R25,-1
	in R2,0x18
	and R2,R24
	out 0x18,R2
	.dbline 360
; 		LED_GN_ON;
	sbi 0x18,0
	.dbline 362
; 
; 		num_bytes = 2;
	ldi R24,2
	ldi R25,0
	std y+11,R25
	std y+10,R24
	.dbline 363
; 		msg_buffer[0] = CMD_LEAVE_PROGMODE_ISP;
	ldi R24,17
	sts _msg_buffer,R24
	.dbline 364
; 		msg_buffer[1] = STATUS_CMD_OK;		
	clr R2
	sts _msg_buffer+1,R2
	.dbline 365
; 	}
	rjmp L110
L109:
	.dbline 369
; 	//////////////////////////////////////
; 	//CMD_CHIP_ERASE_ISP
; 	//////////////////////////////////////
; 	else if(cmd==CMD_CHIP_ERASE_ISP)
	ldd R24,y+12
	cpi R24,18
	brne L112
	.dbline 370
; 	{
	.dbline 371
; 		spi_transfer_8(msg_buffer[3]);
	lds R16,_msg_buffer+3
	rcall _spi_transfer_8
	.dbline 372
; 		spi_transfer_8(msg_buffer[4]);
	lds R16,_msg_buffer+4
	rcall _spi_transfer_8
	.dbline 373
; 		spi_transfer_8(msg_buffer[5]);
	lds R16,_msg_buffer+5
	rcall _spi_transfer_8
	.dbline 374
; 		spi_transfer_8(msg_buffer[6]);
	lds R16,_msg_buffer+6
	rcall _spi_transfer_8
	.dbline 378
; 		
; 		//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 L123
	.dbline 379
; 		{
	.dbline 380
; 			wait_ms(msg_buffer[1]);
	lds R16,_msg_buffer+1
	clr R17
	rcall _wait_ms
	.dbline 381
; 		}
	rjmp L119
X5:
	.dbline 383
; 		else //if(msg_buffer[2]==1)
; 		{
L122:
	.dbline 384
L123:
	.dbline 384
; 			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 L122
	.dbline 385
; 		}		
L119:
	.dbline 387
; 				
; 		num_bytes = 2;
	ldi R24,2
	ldi R25,0
	std y+11,R25
	std y+10,R24
	.dbline 388
; 		msg_buffer[0] = CMD_CHIP_ERASE_ISP;
	ldi R24,18
	sts _msg_buffer,R24
	.dbline 389
; 		msg_buffer[1] = STATUS_CMD_OK;		
	clr R2
	sts _msg_buffer+1,R2
	.dbline 390
; 	}
	rjmp L113
L112:
	.dbline 394
; 	//////////////////////////////////////
; 	//CMD_PROGRAM_FLASH_ISP
; 	//////////////////////////////////////
; 	else if(cmd==CMD_PROGRAM_FLASH_ISP)
	ldd R24,y+12
	cpi R24,19
	breq X11
	rjmp L126
X11:
	.dbline 395
; 	{
	.dbline 396
; 		block_size = ((unsigned int)msg_buffer[1])<<8;
	lds R10,_msg_buffer+1
	clr R11
	mov R11,R10
	clr R10
	.dbline 397
; 		block_size |= msg_buffer[2];
	lds R2,_msg_buffer+2
	clr R3
	or R10,R2
	or R11,R3
	.dbline 398
; 		mode = msg_buffer[3];
	lds R14,_msg_buffer+3
	.dbline 401
; 		
; 		//Word Mode
; 		if((mode&1) == 0)
	sbrc R14,0
	rjmp L131
	.dbline 402
; 		{		
	.dbline 403
; 			for(i=0;i<block_size;i++)
	clr R12
	clr R13
	rjmp L136
L133:
	.dbline 404
; 			{	
	.dbline 407
; 				//If we have an uneven byte programm the
; 				//high byte			
; 				if(i&1)
	sbrs R12,0
	rjmp L137
	.dbline 408
; 				{
	.dbline 409
; 					spi_transfer_8(msg_buffer[5]|(1<<3));
	lds R16,_msg_buffer+5
	ori R16,8
	rcall _spi_transfer_8
	.dbline 410
; 				}
	rjmp L138
L137:
	.dbline 412
; 				else
; 				{
	.dbline 413
; 					spi_transfer_8(msg_buffer[5]);
	lds R16,_msg_buffer+5
	rcall _spi_transfer_8
	.dbline 414
; 				}
L138:
	.dbline 416
; 				
; 				spi_transfer_16(address&0xFFFF);
	ldi R20,255
	ldi R21,255
	ldi R22,0
	ldi R23,0
	lds R4,_address+2
	lds R5,_address+2+1
	lds R2,_address
	lds R3,_address+1
	and R2,R20
	and R3,R21
	and R4,R22
	and R5,R23
	movw R16,R2
	rcall _spi_transfer_16
	.dbline 417
; 				spi_transfer_8(msg_buffer[i+10]);
	ldi R24,<_msg_buffer
	ldi R25,>_msg_buffer
	movw R30,R12
	adiw R30,10
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	rcall _spi_transfer_8
	.dbline 420
; 				
; 				//Check if we can do polling
; 				if(msg_buffer[8]!=msg_buffer[i+10])
	ldi R24,<_msg_buffer
	ldi R25,>_msg_buffer
	movw R30,R12
	adiw R30,10
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	lds R3,_msg_buffer+8
	cp R3,R2
	breq L141
	.dbline 421
; 				{
	.dbline 422
; 					polling_address = address&0xFFFF;
	ldi R20,255
	ldi R21,255
	ldi R22,0
	ldi R23,0
	lds R4,_address+2
	lds R5,_address+2+1
	lds R2,_address
	lds R3,_address+1
	and R2,R20
	and R3,R21
	and R4,R22

⌨️ 快捷键说明

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