📄 main.lss
字号:
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 + -