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

📄 main.lss

📁 这是用M16做的jtag与stk500(正确说应该是ISP)合二为一的
💻 LSS
📖 第 1 页 / 共 5 页
字号:
    2fac:	f8 07       	cpc	r31, r24
    2fae:	b1 f7       	brne	.-20     	; 0x2f9c <sendResponse+0x1e>
    2fb0:	60 93 67 00 	sts	0x0067, r22
		putch(tx_buf[j]);
	}
	
	j=tx_buf[messagesize1]*256+tx_buf[messagesize0];
    2fb4:	80 91 85 01 	lds	r24, 0x0185
    2fb8:	99 27       	eor	r25, r25
    2fba:	38 2f       	mov	r19, r24
    2fbc:	22 27       	eor	r18, r18
    2fbe:	80 91 86 01 	lds	r24, 0x0186
    2fc2:	28 0f       	add	r18, r24
    2fc4:	31 1d       	adc	r19, r1
    2fc6:	40 e0       	ldi	r20, 0x00	; 0
    2fc8:	50 e0       	ldi	r21, 0x00	; 0
    2fca:	08 c0       	rjmp	.+16     	; 0x2fdc <sendResponse+0x5e>
	for(k=0;k<j;k++)
	{
		tx_chm^=tx_buf[k+5];								//start from message body
    2fcc:	80 81       	ld	r24, Z
    2fce:	68 27       	eor	r22, r24
    2fd0:	5d 9b       	sbis	0x0b, 5	; 11
    2fd2:	fe cf       	rjmp	.-4      	; 0x2fd0 <sendResponse+0x52>
    2fd4:	8c b9       	out	0x0c, r24	; 12
    2fd6:	4f 5f       	subi	r20, 0xFF	; 255
    2fd8:	5f 4f       	sbci	r21, 0xFF	; 255
    2fda:	31 96       	adiw	r30, 0x01	; 1
    2fdc:	42 17       	cp	r20, r18
    2fde:	53 07       	cpc	r21, r19
    2fe0:	ac f3       	brlt	.-22     	; 0x2fcc <sendResponse+0x4e>
    2fe2:	60 93 67 00 	sts	0x0067, r22
    2fe6:	5d 9b       	sbis	0x0b, 5	; 11
    2fe8:	fe cf       	rjmp	.-4      	; 0x2fe6 <sendResponse+0x68>
    2fea:	6c b9       	out	0x0c, r22	; 12
    2fec:	08 95       	ret

00002fee <cmdSignOn>:
		putch(tx_buf[k+5]);
	}
	
	putch(tx_chm);

}

void cmdSignOn(void)
{
    2fee:	10 92 85 01 	sts	0x0185, r1
	tx_buf[messagesize1]=0;  		// set message length
	tx_buf[messagesize0]=11;
    2ff2:	8b e0       	ldi	r24, 0x0B	; 11
    2ff4:	80 93 86 01 	sts	0x0186, r24
	
	tx_buf[5]= CMD_SIGN_ON;
    2ff8:	81 e0       	ldi	r24, 0x01	; 1
    2ffa:	80 93 88 01 	sts	0x0188, r24
	tx_buf[6]= STATUS_CMD_OK;
    2ffe:	10 92 89 01 	sts	0x0189, r1
	
	tx_buf[7]= 0x08;  	// send signature length
    3002:	88 e0       	ldi	r24, 0x08	; 8
    3004:	80 93 8a 01 	sts	0x018A, r24
	tx_buf[8]= 'S';		// send identifier
    3008:	83 e5       	ldi	r24, 0x53	; 83
    300a:	80 93 8b 01 	sts	0x018B, r24
	tx_buf[9] = 'T';
    300e:	84 e5       	ldi	r24, 0x54	; 84
    3010:	80 93 8c 01 	sts	0x018C, r24
	tx_buf[10] = 'K';
    3014:	8b e4       	ldi	r24, 0x4B	; 75
    3016:	80 93 8d 01 	sts	0x018D, r24
	tx_buf[11] = '5';
    301a:	85 e3       	ldi	r24, 0x35	; 53
    301c:	80 93 8e 01 	sts	0x018E, r24
	tx_buf[12] = '0';
    3020:	80 e3       	ldi	r24, 0x30	; 48
    3022:	80 93 8f 01 	sts	0x018F, r24
	tx_buf[13] = '0';
    3026:	80 93 90 01 	sts	0x0190, r24
	tx_buf[14] = '_';
    302a:	8f e5       	ldi	r24, 0x5F	; 95
    302c:	80 93 91 01 	sts	0x0191, r24
	tx_buf[15] = '2';
    3030:	82 e3       	ldi	r24, 0x32	; 50
    3032:	80 93 92 01 	sts	0x0192, r24
    3036:	08 95       	ret

00003038 <cmdGetParameter>:

}
void cmdGetParameter(void)
{
    3038:	10 92 85 01 	sts	0x0185, r1
	tx_buf[messagesize1]=0;  		// set message length
	tx_buf[messagesize0]=3;
    303c:	83 e0       	ldi	r24, 0x03	; 3
    303e:	80 93 86 01 	sts	0x0186, r24
	
	tx_buf[5] = CMD_GET_PARAMETER;
    3042:	80 93 88 01 	sts	0x0188, r24
	tx_buf[6] = STATUS_CMD_OK;
    3046:	10 92 89 01 	sts	0x0189, r1

	switch( rx_buf[6] )  {
    304a:	80 91 76 00 	lds	r24, 0x0076
    304e:	85 39       	cpi	r24, 0x95	; 149
    3050:	d9 f0       	breq	.+54     	; 0x3088 <cmdGetParameter+0x50>
    3052:	86 39       	cpi	r24, 0x96	; 150
    3054:	60 f4       	brcc	.+24     	; 0x306e <cmdGetParameter+0x36>
    3056:	81 39       	cpi	r24, 0x91	; 145
    3058:	99 f0       	breq	.+38     	; 0x3080 <cmdGetParameter+0x48>
    305a:	82 39       	cpi	r24, 0x92	; 146
    305c:	18 f4       	brcc	.+6      	; 0x3064 <cmdGetParameter+0x2c>
    305e:	80 39       	cpi	r24, 0x90	; 144
    3060:	11 f5       	brne	.+68     	; 0x30a6 <cmdGetParameter+0x6e>
    3062:	0e c0       	rjmp	.+28     	; 0x3080 <cmdGetParameter+0x48>
    3064:	82 39       	cpi	r24, 0x92	; 146
    3066:	71 f0       	breq	.+28     	; 0x3084 <cmdGetParameter+0x4c>
    3068:	84 39       	cpi	r24, 0x94	; 148
    306a:	e9 f4       	brne	.+58     	; 0x30a6 <cmdGetParameter+0x6e>
    306c:	0d c0       	rjmp	.+26     	; 0x3088 <cmdGetParameter+0x50>
    306e:	87 39       	cpi	r24, 0x97	; 151
    3070:	81 f0       	breq	.+32     	; 0x3092 <cmdGetParameter+0x5a>
    3072:	87 39       	cpi	r24, 0x97	; 151
    3074:	58 f0       	brcs	.+22     	; 0x308c <cmdGetParameter+0x54>
    3076:	88 39       	cpi	r24, 0x98	; 152
    3078:	79 f0       	breq	.+30     	; 0x3098 <cmdGetParameter+0x60>
    307a:	8a 39       	cpi	r24, 0x9A	; 154
    307c:	a1 f4       	brne	.+40     	; 0x30a6 <cmdGetParameter+0x6e>
    307e:	0f c0       	rjmp	.+30     	; 0x309e <cmdGetParameter+0x66>
		case PARAM_HW_VER: 
            tx_buf[7] = HARDWARE_VERSION;  // send hardware version          				
			break;
		case PARAM_SW_MAJOR: 
            tx_buf[7] = SOFTWARE_MAJOR; // send software major version         				
    3080:	82 e0       	ldi	r24, 0x02	; 2
    3082:	0e c0       	rjmp	.+28     	; 0x30a0 <cmdGetParameter+0x68>
			break;        			
		case PARAM_SW_MINOR: 
            tx_buf[7] = SOFTWARE_MINOR;  // send software minor version          				
    3084:	87 e0       	ldi	r24, 0x07	; 7
    3086:	0c c0       	rjmp	.+24     	; 0x30a0 <cmdGetParameter+0x68>
			break;			
		case PARAM_VTARGET: 
            tx_buf[7] = VTARGET; // target supply voltage         				
			break;        			
		case PARAM_VADJUST: 
            tx_buf[7] = VADJUST; // target VREF voltage          				
    3088:	82 e3       	ldi	r24, 0x32	; 50
    308a:	0a c0       	rjmp	.+20     	; 0x30a0 <cmdGetParameter+0x68>
			break;  
		case PARAM_OSC_PSCALE: 
            tx_buf[7] = pscalefsys; // oscilator prescaler value         				
    308c:	80 91 61 00 	lds	r24, 0x0061
    3090:	07 c0       	rjmp	.+14     	; 0x30a0 <cmdGetParameter+0x68>
			break;
		case PARAM_OSC_CMATCH: 
            tx_buf[7] = cmatchdef; // oscilator compare value         				
    3092:	80 91 6f 00 	lds	r24, 0x006F
    3096:	04 c0       	rjmp	.+8      	; 0x30a0 <cmdGetParameter+0x68>
			break;			
		case PARAM_SCK_DURATION: 
            tx_buf[7] = sckdurationdef; // oscilator compare value         				
    3098:	80 91 60 00 	lds	r24, 0x0060
    309c:	01 c0       	rjmp	.+2      	; 0x30a0 <cmdGetParameter+0x68>
			break;        			       			        			        			

		case PARAM_TOPCARD_DETECT: 
            tx_buf[7] =  STK501; // STK501 is expected          				
    309e:	8a ea       	ldi	r24, 0xAA	; 170
    30a0:	80 93 8a 01 	sts	0x018A, r24
    30a4:	08 95       	ret
			break;		

		default: 	
            tx_buf[7] = 0x00; // send dummy value for not supported parameters   
    30a6:	10 92 8a 01 	sts	0x018A, r1
    30aa:	08 95       	ret

000030ac <cmdLeaveProgmodeIsp>:
        break;      			
	}			
}
void cmdSetParameter(void)
{
	tx_buf[messagesize1]=0;  		// set message length
	tx_buf[messagesize0]=2;
	
	SetParameter();											//set selected parameter
	
	tx_buf[5] = CMD_SET_PARAMETER;
	tx_buf[6] = STATUS_CMD_OK; 

}
void cmdReadSignatureIsp(void) 
{

	tx_buf[5] = CMD_READ_SIGNATURE_ISP;
	ReadfusebitIsp();

}

void cmdEnterProgmodeIsp(void)
{
	tx_buf[messagesize1]=0;  		// set message length
	tx_buf[messagesize0]=2;
	
	EnterProgmodeIsp();
}

void cmdLeaveProgmodeIsp(void)
{
    30ac:	10 92 85 01 	sts	0x0185, r1
	tx_buf[messagesize1]=0;  		// set message length
	tx_buf[messagesize0]=2;
    30b0:	82 e0       	ldi	r24, 0x02	; 2
    30b2:	80 93 86 01 	sts	0x0186, r24
	
	DDRB&=31;												//leave spi pins High ampedance
    30b6:	87 b3       	in	r24, 0x17	; 23
    30b8:	8f 71       	andi	r24, 0x1F	; 31
    30ba:	87 bb       	out	0x17, r24	; 23
	reset_DDR&=~_BV(reset);
    30bc:	b9 98       	cbi	0x17, 1	; 23
	PORTB&=31;												//leave spi pins High ampedance
    30be:	88 b3       	in	r24, 0x18	; 24
    30c0:	8f 71       	andi	r24, 0x1F	; 31
    30c2:	88 bb       	out	0x18, r24	; 24
	reset_PORT&=~_BV(reset);
    30c4:	c1 98       	cbi	0x18, 1	; 24
	
	tx_buf[5] = CMD_LEAVE_PROGMODE_ISP;
    30c6:	81 e1       	ldi	r24, 0x11	; 17
    30c8:	80 93 88 01 	sts	0x0188, r24
	tx_buf[6] = STATUS_CMD_OK;
    30cc:	10 92 89 01 	sts	0x0189, r1
    30d0:	08 95       	ret

000030d2 <cmdspimulti>:
	
}

void cmdreadosccalisp(void)
{
	tx_buf[5] = CMD_READ_OSCCAL_ISP;						//read osccal byte
	ReadfusebitIsp();
}
void cmdreadlockisp(void)
{
	tx_buf[5] = CMD_READ_LOCK_ISP;							//read lock bits
	ReadfusebitIsp();
}
void cmdreadfuseisp(void)
{
	tx_buf[5] = CMD_READ_FUSE_ISP;							//read fuse bits
	ReadfusebitIsp();
}
void cmdprogramlockisp(void)
{
	programfuseisp();										//program lock bits
	tx_buf[5] =CMD_PROGRAM_LOCK_ISP;
}
void cmdprogramfuseisp(void)
{
	programfuseisp();
	tx_buf[5] = CMD_PROGRAM_FUSE_ISP;						//program fuse bits
}
void cmdspimulti(void)
{
    30d2:	20 91 77 00 	lds	r18, 0x0077
    30d6:	e2 2f       	mov	r30, r18
    30d8:	ff 27       	eor	r31, r31
    30da:	cf 01       	movw	r24, r30
    30dc:	60 e0       	ldi	r22, 0x00	; 0
    30de:	71 e0       	ldi	r23, 0x01	; 1
    30e0:	0e 94 ce 1c 	call	0x399c	; 0x399c <__divmodhi4>
    30e4:	60 93 85 01 	sts	0x0185, r22
	int j;
	tx_buf[messagesize1]=rx_buf[7]/256;  		// set message length
	tx_buf[messagesize0]=rx_buf[7]+3;
    30e8:	2d 5f       	subi	r18, 0xFD	; 253
    30ea:	20 93 86 01 	sts	0x0186, r18

	
	tx_buf[5] = CMD_SPI_MULTI;
    30ee:	8d e1       	ldi	r24, 0x1D	; 29
    30f0:	80 93 88 01 	sts	0x0188, r24
	tx_buf[6] = STATUS_CMD_OK;
    30f4:	10 92 89 01 	sts	0x0189, r1
    30f8:	80 e0       	ldi	r24, 0x00	; 0
    30fa:	90 e0       	ldi	r25, 0x00	; 0
    30fc:	aa e8       	ldi	r26, 0x8A	; 138
    30fe:	b1 e0       	ldi	r27, 0x01	; 1
    3100:	22 e2       	ldi	r18, 0x22	; 34
    3102:	02 c0       	rjmp	.+4      	; 0x3108 <cmdspimulti+0x36>
	for(j=0;j<rx_buf[7];j++)
	{
		tx_buf[j+7]=0x22;		//data send back
    3104:	2d 93       	st	X+, r18
    3106:	01 96       	adiw	r24, 0x01	; 1
    3108:	8e 17       	cp	r24, r30
    310a:	9f 07       	cpc	r25, r31
    310c:	dc f3       	brlt	.-10     	; 0x3104 <cmdspimulti+0x32>
		
	}
	
	tx_buf[rx_buf[7]+7] = STATUS_CMD_OK;
    310e:	ed 57       	subi	r30, 0x7D	; 125
    3110:	fe 4f       	sbci	r31, 0xFE	; 254
    3112:	17 82       	std	Z+7, r1	; 0x07
    3114:	08 95       	ret

00003116 <cmdloadaddress>:
	
}
void cmdchiperaseisp(void)
{
	tx_buf[messagesize1]=0;  		// set message length
	tx_buf[messagesize0]=2;

	tx_buf[5] = CMD_CHIP_ERASE_ISP;
	tx_buf[6] = STATUS_CMD_OK;
	
	spi(rx_buf[8]);											//erase dvice
	spi(rx_buf[9]);
	spi(rx_buf[10]);
	spi(rx_buf[11]);
	
	delay_ms(rx_buf[6]);
	
}
void cmdprogramflashisp(void)
{
	int a,b;
	long add;
	tx_buf[messagesize1]=0;  		// set message length
	tx_buf[messagesize0]=2;

	tx_buf[5] = CMD_PROGRAM_FLASH_ISP;
	tx_buf[6] = STATUS_CMD_OK;

	if(extended_address)									//flash with large memory
	{
		spi(0x4d);
		spi(0);
		spi(address_flash>>16);
		spi(0);
	}
	
	b=rx_buf[6]*256+rx_buf[7];
	add=address_flash;
	for(a=0;a<b;a+=2)
	{
		spi(rx_buf[10]);									//load Program Memory
		spi(address_flash>>8);
		spi(address_flash);
		spi(rx_buf[a+15]);

		spi(rx_buf[10]|8);									//load Program Memory
		spi(0);
		spi(address_flash);
		spi(rx_buf[a+16]);

		address_flash++;
	}

	if(rx_buf[8]&0x80)
		{
			spi(rx_buf[11]);									//write program memory
			spi(add>>8);
			spi(add);
			spi(0);

⌨️ 快捷键说明

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