📄 main.lss
字号:
delay_ms(rx_buf[9]);
}
}
void cmdloadaddress(void)
{
3116: 10 92 85 01 sts 0x0185, r1
tx_buf[messagesize1]=0; // set message length
tx_buf[messagesize0]=2;
311a: 82 e0 ldi r24, 0x02 ; 2
311c: 80 93 86 01 sts 0x0186, r24
address_eeprom = rx_buf[8]*256+rx_buf[9]; //set eeprom address
3120: 20 91 78 00 lds r18, 0x0078
3124: 33 27 eor r19, r19
3126: 32 2f mov r19, r18
3128: 22 27 eor r18, r18
312a: 60 91 79 00 lds r22, 0x0079
312e: c9 01 movw r24, r18
3130: 86 0f add r24, r22
3132: 91 1d adc r25, r1
3134: 90 93 6d 00 sts 0x006D, r25
3138: 80 93 6c 00 sts 0x006C, r24
address_flash = (rx_buf[7]*65536+rx_buf[8]*256+rx_buf[9])*2; //set flash word address
313c: 44 27 eor r20, r20
313e: 37 fd sbrc r19, 7
3140: 40 95 com r20
3142: 54 2f mov r21, r20
3144: 80 91 77 00 lds r24, 0x0077
3148: 99 27 eor r25, r25
314a: aa 27 eor r26, r26
314c: bb 27 eor r27, r27
314e: dc 01 movw r26, r24
3150: 99 27 eor r25, r25
3152: 88 27 eor r24, r24
3154: 86 0f add r24, r22
3156: 91 1d adc r25, r1
3158: a1 1d adc r26, r1
315a: b1 1d adc r27, r1
315c: 28 0f add r18, r24
315e: 39 1f adc r19, r25
3160: 4a 1f adc r20, r26
3162: 5b 1f adc r21, r27
3164: 22 0f add r18, r18
3166: 33 1f adc r19, r19
3168: 44 1f adc r20, r20
316a: 55 1f adc r21, r21
316c: 20 93 68 00 sts 0x0068, r18
3170: 30 93 69 00 sts 0x0069, r19
3174: 40 93 6a 00 sts 0x006A, r20
3178: 50 93 6b 00 sts 0x006B, r21
if(rx_buf[6]&0x80)
317c: 80 91 76 00 lds r24, 0x0076
3180: 87 ff sbrs r24, 7
3182: 03 c0 rjmp .+6 ; 0x318a <cmdloadaddress+0x74>
extended_address=1; //bit 31 is true so extended read should executed
3184: 81 e0 ldi r24, 0x01 ; 1
3186: 80 93 6e 00 sts 0x006E, r24
tx_buf[5] = CMD_LOAD_ADDRESS;
318a: 86 e0 ldi r24, 0x06 ; 6
318c: 80 93 88 01 sts 0x0188, r24
tx_buf[6] = STATUS_CMD_OK;
3190: 10 92 89 01 sts 0x0189, r1
3194: 08 95 ret
00003196 <cmdreadflashisp>:
}
void cmdreadflashisp(void)
{
3196: ff 92 push r15
3198: 0f 93 push r16
319a: 1f 93 push r17
319c: cf 93 push r28
319e: df 93 push r29
int j,k;
k=rx_buf[6]*256+rx_buf[7];
31a0: 80 91 76 00 lds r24, 0x0076
31a4: 99 27 eor r25, r25
31a6: f8 2f mov r31, r24
31a8: ee 27 eor r30, r30
31aa: 80 91 77 00 lds r24, 0x0077
31ae: e8 0f add r30, r24
31b0: f1 1d adc r31, r1
j=k+3;
31b2: 9f 01 movw r18, r30
31b4: 2d 5f subi r18, 0xFD ; 253
31b6: 3f 4f sbci r19, 0xFF ; 255
tx_buf[messagesize1]=(unsigned char) (j >> 8); // set message length
31b8: 83 2f mov r24, r19
31ba: 99 27 eor r25, r25
31bc: 87 fd sbrc r24, 7
31be: 9a 95 dec r25
31c0: 80 93 85 01 sts 0x0185, r24
tx_buf[messagesize0]=(unsigned char) (j & 0xFF);
31c4: 20 93 86 01 sts 0x0186, r18
tx_buf[5] = CMD_READ_FLASH_ISP;
31c8: 84 e1 ldi r24, 0x14 ; 20
31ca: 80 93 88 01 sts 0x0188, r24
tx_buf[6] = STATUS_CMD_OK;
31ce: 10 92 89 01 sts 0x0189, r1
if(extended_address) //flash with large memory
31d2: 80 91 6e 00 lds r24, 0x006E
31d6: 88 23 and r24, r24
31d8: 91 f4 brne .+36 ; 0x31fe <cmdreadflashisp+0x68>
{
spi(0x4d);
spi(0);
spi(address_flash>>16);
spi(0);
}
for(j=0;j<k;j+=2)
{
spi(rx_buf[8]);
31da: 00 91 78 00 lds r16, 0x0078
spi(address_flash>>8);
spi(address_flash);
tx_buf[j+7]=spi(0xff);
spi(rx_buf[8]|8);
31de: 88 e0 ldi r24, 0x08 ; 8
31e0: f8 2e mov r15, r24
31e2: f0 2a or r15, r16
31e4: 20 91 68 00 lds r18, 0x0068
31e8: 30 91 69 00 lds r19, 0x0069
31ec: 40 91 6a 00 lds r20, 0x006A
31f0: 50 91 6b 00 lds r21, 0x006B
31f4: 60 e0 ldi r22, 0x00 ; 0
31f6: 70 e0 ldi r23, 0x00 ; 0
31f8: c3 e8 ldi r28, 0x83 ; 131
31fa: d1 e0 ldi r29, 0x01 ; 1
31fc: 4e c0 rjmp .+156 ; 0x329a <cmdreadflashisp+0x104>
spi(address_flash>>8);
spi(address_flash);
tx_buf[j+8]=spi(0xff);
address_flash++;
}
tx_buf[k+7] = STATUS_CMD_OK;
}
void cmdprogrameepromisp(void)
{
tx_buf[messagesize1]=0; // set message length
tx_buf[messagesize0]=2;
tx_buf[5] = CMD_PROGRAM_EEPROM_ISP;
tx_buf[6] = STATUS_CMD_OK;
int a,b;
unsigned char c,d;
b=rx_buf[6]*256+rx_buf[7]; //eeprom nData bytes
for(a=0;a<b;a++)
{
spi(0xa0); //read eeprom if differ then write
spi(address_eeprom>>8);
spi(address_eeprom);
c=spi(0xff);
d=rx_buf[a+15]^c;
if(d)
{
spi(rx_buf[10]); //write Program Memory
spi(address_eeprom>>8);
spi(address_eeprom);
spi(rx_buf[a+15]);
delay_ms(rx_buf[9]);
}
address_eeprom++;
}
}
void cmdreadeepromisp(void)
{
int j,k;
k=rx_buf[6]*256+rx_buf[7];
j=k+3;
tx_buf[messagesize1]=(unsigned char) (j >> 8); // set message length
tx_buf[messagesize0]=(unsigned char) (j & 0xFF);
tx_buf[5] = CMD_READ_EEPROM_ISP;
tx_buf[6] = STATUS_CMD_OK;
k=rx_buf[6]*256+rx_buf[7];
for(j=0;j<k;j++)
{
spi(rx_buf[8]);
spi(address_eeprom>>8);
spi(address_eeprom);
tx_buf[j+7]=spi(0xff);
address_eeprom++;
}
tx_buf[k+7] = STATUS_CMD_OK;
}
void cmdosccal(void)
{
tx_buf[messagesize1]=0; // set message length
tx_buf[messagesize0]=2;
tx_buf[5] = CMD_OSCCAL;
tx_buf[6] = STATUS_CMD_OK;
}
void delay_ms(int time)
{
while(time--)
_delay_ms(1);
}
char spi(char data)
{
SPDR = data;
31fe: 8d e4 ldi r24, 0x4D ; 77
3200: 8f b9 out 0x0f, r24 ; 15
/* Wait for transmission complete */
/* Wait for reception complete */
while(!(SPSR & (1<<SPIF)));
3202: 77 9b sbis 0x0e, 7 ; 14
3204: fe cf rjmp .-4 ; 0x3202 <cmdreadflashisp+0x6c>
/* Return data register */
return SPDR;
3206: 8f b1 in r24, 0x0f ; 15
3208: 1f b8 out 0x0f, r1 ; 15
320a: 77 9b sbis 0x0e, 7 ; 14
320c: fe cf rjmp .-4 ; 0x320a <cmdreadflashisp+0x74>
320e: 8f b1 in r24, 0x0f ; 15
3210: 80 91 68 00 lds r24, 0x0068
3214: 90 91 69 00 lds r25, 0x0069
3218: a0 91 6a 00 lds r26, 0x006A
321c: b0 91 6b 00 lds r27, 0x006B
3220: cd 01 movw r24, r26
3222: aa 27 eor r26, r26
3224: bb 27 eor r27, r27
3226: 8f b9 out 0x0f, r24 ; 15
3228: 77 9b sbis 0x0e, 7 ; 14
322a: fe cf rjmp .-4 ; 0x3228 <cmdreadflashisp+0x92>
322c: 8f b1 in r24, 0x0f ; 15
322e: 1f b8 out 0x0f, r1 ; 15
3230: 77 9b sbis 0x0e, 7 ; 14
3232: fe cf rjmp .-4 ; 0x3230 <cmdreadflashisp+0x9a>
3234: 8f b1 in r24, 0x0f ; 15
3236: d1 cf rjmp .-94 ; 0x31da <cmdreadflashisp+0x44>
3238: 0f b9 out 0x0f, r16 ; 15
323a: 77 9b sbis 0x0e, 7 ; 14
323c: fe cf rjmp .-4 ; 0x323a <cmdreadflashisp+0xa4>
323e: 8f b1 in r24, 0x0f ; 15
3240: bb 27 eor r27, r27
3242: a5 2f mov r26, r21
3244: 94 2f mov r25, r20
3246: 83 2f mov r24, r19
3248: 18 2f mov r17, r24
324a: 8f b9 out 0x0f, r24 ; 15
324c: 77 9b sbis 0x0e, 7 ; 14
324e: fe cf rjmp .-4 ; 0x324c <cmdreadflashisp+0xb6>
3250: 8f b1 in r24, 0x0f ; 15
3252: 92 2f mov r25, r18
3254: 2f b9 out 0x0f, r18 ; 15
3256: 77 9b sbis 0x0e, 7 ; 14
3258: fe cf rjmp .-4 ; 0x3256 <cmdreadflashisp+0xc0>
325a: 8f b1 in r24, 0x0f ; 15
325c: 8f ef ldi r24, 0xFF ; 255
325e: 8f b9 out 0x0f, r24 ; 15
3260: 77 9b sbis 0x0e, 7 ; 14
3262: fe cf rjmp .-4 ; 0x3260 <cmdreadflashisp+0xca>
3264: 8f b1 in r24, 0x0f ; 15
3266: 8f 83 std Y+7, r24 ; 0x07
3268: ff b8 out 0x0f, r15 ; 15
326a: 77 9b sbis 0x0e, 7 ; 14
326c: fe cf rjmp .-4 ; 0x326a <cmdreadflashisp+0xd4>
326e: 8f b1 in r24, 0x0f ; 15
3270: 1f b9 out 0x0f, r17 ; 15
3272: 77 9b sbis 0x0e, 7 ; 14
3274: fe cf rjmp .-4 ; 0x3272 <cmdreadflashisp+0xdc>
3276: 8f b1 in r24, 0x0f ; 15
3278: 9f b9 out 0x0f, r25 ; 15
327a: 77 9b sbis 0x0e, 7 ; 14
327c: fe cf rjmp .-4 ; 0x327a <cmdreadflashisp+0xe4>
327e: 8f b1 in r24, 0x0f ; 15
3280: 8f ef ldi r24, 0xFF ; 255
3282: 8f b9 out 0x0f, r24 ; 15
3284: 77 9b sbis 0x0e, 7 ; 14
3286: fe cf rjmp .-4 ; 0x3284 <cmdreadflashisp+0xee>
3288: 8f b1 in r24, 0x0f ; 15
328a: 88 87 std Y+8, r24 ; 0x08
328c: 6e 5f subi r22, 0xFE ; 254
328e: 7f 4f sbci r23, 0xFF ; 255
3290: 2f 5f subi r18, 0xFF ; 255
3292: 3f 4f sbci r19, 0xFF ; 255
3294: 4f 4f sbci r20, 0xFF ; 255
3296: 5f 4f sbci r21, 0xFF ; 255
3298: 22 96 adiw r28, 0x02 ; 2
329a: 6e 17 cp r22, r30
329c: 7f 07 cpc r23, r31
329e: 64 f2 brlt .-104 ; 0x3238 <cmdreadflashisp+0xa2>
32a0: 20 93 68 00 sts 0x0068, r18
32a4: 30 93 69 00 sts 0x0069, r19
32a8: 40 93 6a 00 sts 0x006A, r20
32ac: 50 93 6b 00 sts 0x006B, r21
32b0: ed 57 subi r30, 0x7D ; 125
32b2: fe 4f sbci r31, 0xFE ; 254
32b4: 17 82 std Z+7, r1 ; 0x07
32b6: df 91 pop r29
32b8: cf 91 pop r28
32ba: 1f 91 pop r17
32bc: 0f 91 pop r16
32be: ff 90 pop r15
32c0: 08 95 ret
000032c2 <cmdreadeepromisp>:
32c2: 80 91 76 00 lds r24, 0x0076
32c6: 99 27 eor r25, r25
32c8: f8 2f mov r31, r24
32ca: ee 27 eor r30, r30
32cc: 80 91 77 00 lds r24, 0x0077
32d0: e8 0f add r30, r24
32d2: f1 1d adc r31, r1
32d4: 9f 01 movw r18, r30
32d6: 2d 5f subi r18, 0xFD ; 253
32d8: 3f 4f sbci r19, 0xFF ; 255
32da: 83 2f mov r24, r19
32dc: 99 27 eor r25, r25
32de: 87 fd sbrc r24, 7
32e0: 9a 95 dec r25
32e2: 80 93 85 01 sts 0x0185, r24
32e6: 20 93 86 01 sts 0x0186, r18
32ea: 86 e1 ldi r24, 0x16 ; 22
32ec: 80 93 88 01 sts 0x0188, r24
32f0: 10 92 89 01 sts 0x0189, r1
32f4: 60 91 78 00 lds r22, 0x0078
32f8: 20 91 6c 00 lds r18, 0x006C
32fc: 30 91 6d 00 lds r19, 0x006D
3300: 40 e0 ldi r20, 0x00 ; 0
3302: 50 e0 ldi r21, 0x00 ; 0
3304: aa e8 ldi r26, 0x8A ; 138
3306: b1 e0 ldi r27, 0x01 ; 1
3308: 7f ef ldi r23, 0xFF ; 255
330a: 17 c0 rjmp .+46 ; 0x333a <cmdreadeepromisp+0x78>
330c: 6f b9 out 0x0f, r22 ; 15
330e: 77 9b sbis 0x0e, 7 ; 14
3310: fe cf rjmp .-4 ; 0x330e <cmdreadeepromisp+0x4c>
3312: 8f b1 in r24, 0x0f ; 15
3314: 83 2f mov r24, r19
3316: 99 27 eor r25, r25
3318: 8f b9 out 0x0f, r24 ; 15
331a: 77 9b sbis 0x0e, 7 ; 14
331c: fe cf rjmp .-4 ; 0x331a <cmdreadeepromisp+0x58>
331e: 8f b1 in r24, 0x0f ; 15
3320: 2f b9 out 0x0f, r18 ; 15
3322: 77 9b sbis 0x0e, 7 ; 14
3324: fe cf rjmp .-4 ; 0x3322 <cmdreadeepromisp+0x60>
3326: 8f b1 in r24, 0x0f ; 15
3328: 7f b9 out 0x0f, r23 ; 15
332a: 77 9b sbis 0x0e, 7 ; 14
332c: fe cf rjmp .-4 ; 0x332a <cmdreadeepromisp+0x68>
332e: 8f b1 in r24, 0x0f ; 15
3330: 8d 93 st X+, r24
3332: 4f 5f subi r20, 0xFF ; 255
3334: 5f 4f sbci r21, 0xFF ; 255
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -