📄 stk500_isp.lst
字号:
(0161) else if (state==ST_GET_CHECK)
27D 3046 CPI R20,6
27E EFE0 LDI R30,0xF0
27F 075E CPC R21,R30
280 F431 BNE 0x0287
(0162) {
(0163) if (t==checksum)
281 16A6 CP R10,R22
282 F411 BNE 0x0285
(0164) {
(0165) process_command(seq_num);
283 810A LDD R16,Y+2
284 D014 RCALL _process_command
(0166) }
(0167)
(0168) state = ST_START;
285 E040 LDI R20,0
286 EF50 LDI R21,0xF0
287 CF93 RJMP 0x021B
288 9624 ADIW R28,4
289 9508 RET
(0169) }
(0170)
(0171) }//if(rec_data!=-1)
(0172) }//while(2)
(0173)
(0174) return 0;
(0175)
(0176) }
(0177)
(0178) /**
(0179) Returns the value of the selected adc channel
(0180)
(0181) @param n Number of ADC channel
(0182)
(0183) @return Value of ADC channel
(0184) */
(0185) unsigned char adc_get(char n)
(0186) {
(0187) ADMUX&=0xF0;
_adc_get:
n --> R16
28A B187 IN R24,0x07
28B 7F80 ANDI R24,0xF0
28C B987 OUT 0x07,R24
(0188) ADMUX|=n&0x7;
28D 2F80 MOV R24,R16
28E 7087 ANDI R24,7
28F B027 IN R2,0x07
290 2A28 OR R2,R24
291 B827 OUT 0x07,R2
(0189)
(0190) while (ADCSRA&0x40);
292 9936 SBIC 0x06,6
293 CFFE RJMP 0x0292
(0191) ADCSRA|=(1<<ADSC);
294 9A36 SBI 0x06,6
(0192) while (ADCSRA&0x40);
295 9936 SBIC 0x06,6
296 CFFE RJMP 0x0295
(0193)
(0194) return ADCH;
297 B105 IN R16,0x05
298 9508 RET
_process_command:
bytes_to_transmit0 --> Y,+12
rx_from0 --> Y,+14
rx_bytes0 --> R12
tx_bytes0 --> Y,+10
Reg9 --> R12
Reg80 --> Y,+14
Reg26 --> Y,+16
Reg48 --> R12
Reg17 --> Y,+16
Reg39 --> R12
Reg65 --> Y,+16
Reg72 --> Y,+16
Reg59 --> R12
Reg29 --> Y,+20
Reg12 --> Y,+16
i29 --> R12
tmp47 --> R14
i23 --> R12
i20 --> R14
tmp39 --> R14
i16 --> R14
mode7 --> Y,+12
block_size6 --> Y,+14
i13 --> R14
tmp37 --> Y,+14
block_size4 --> Y,+12
i10 --> R14
tmp31 --> R12
i6 --> R14
mode0 --> Y,+14
block_size2 --> Y,+12
i3 --> R12
tmp29 --> Y,+12
block_size0 --> Y,+14
tmp24 --> R14
tmp23 --> R14
tmp22 --> R14
tmp21 --> R14
tmp16 --> R14
tmp15 --> R14
tmp14 --> R14
tmp13 --> R14
tmp12 --> R14
tmp11 --> R14
tmp10 --> R14
tmp9 --> R14
tmp8 --> R14
tmp7 --> R14
tmp6 --> R14
tmp5 --> R14
tmp2 --> R12
num_bytes1 --> R10
i0 --> R14
cmd0 --> Y,+10
start_address0 --> Y,+6
polling_address0 --> Y,+2
tmp0 --> Y,+18
seq_num --> Y,+32
299 931A ST R17,-Y
29A 930A ST R16,-Y
29B 940E 0B2F CALL push_xgsetF0FC
29D 9766 SBIW R28,0x16
(0195) }
(0196)
(0197) /**
(0198) Processes a command packet received in main loop and located in the global buffer
(0199)
(0200) @param seq_num The sequence number of the command packet
(0201) */
(0202) void process_command(unsigned char seq_num)
(0203) {
(0204) unsigned char cmd;
(0205) unsigned char tmp=0;
29E 2400 CLR R0
29F 8A0A STD Y+18,R0
(0206) unsigned char mode;
(0207) unsigned int block_size;
(0208) unsigned int i;
(0209) unsigned int num_bytes=0;
2A0 24AA CLR R10
2A1 24BB CLR R11
(0210) unsigned long polling_address=0;
2A2 E040 LDI R20,0
2A3 E050 LDI R21,0
2A4 E060 LDI R22,0
2A5 E070 LDI R23,0
2A6 834A STD Y+2,R20
2A7 835B STD Y+3,R21
2A8 836C STD Y+4,R22
2A9 837D STD Y+5,R23
(0211) unsigned long start_address = address;
2AA 9040 006F LDS R4,address+2
2AC 9050 0070 LDS R5,address+3
2AE 9020 006D LDS R2,address
2B0 9030 006E LDS R3,address+1
2B2 822E STD Y+6,R2
2B3 823F STD Y+7,R3
2B4 8648 STD Y+8,R4
2B5 8659 STD Y+9,R5
(0212)
(0213) cmd = msg_buffer[0];
2B6 9020 0075 LDS R2,msg_buffer
2B8 862A STD Y+10,R2
(0214)
(0215) //////////////////////////////////////
(0216) //CMD_SIGN_ON
(0217) //////////////////////////////////////
(0218) if (cmd==CMD_SIGN_ON)
2B9 2D82 MOV R24,R2
2BA 3081 CPI R24,1
2BB F4A9 BNE 0x02D1
(0219) {
(0220) num_bytes = 11;
2BC E08B LDI R24,0xB
2BD E090 LDI R25,0
2BE 015C MOVW R10,R24
(0221) msg_buffer[0] = CMD_SIGN_ON;
2BF E081 LDI R24,1
2C0 9380 0075 STS msg_buffer,R24
(0222) msg_buffer[1] = STATUS_CMD_OK;
2C2 2422 CLR R2
2C3 9220 0076 STS msg_buffer+1,R2
(0223) msg_buffer[2] = 8;
2C5 E088 LDI R24,0x8
2C6 9380 0077 STS msg_buffer+2,R24
(0224) memcpy(msg_buffer+3,"AVRISP_2",8);
2C8 8399 STD Y+1,R25
2C9 8388 STD Y+0,R24
2CA E621 LDI R18,0x61
2CB E030 LDI R19,0
2CC E708 LDI R16,0x78
2CD E010 LDI R17,0
2CE 940E 0B11 CALL _memcpy
(0225) }
2D0 C7FD RJMP 0x0ACE
(0226) //////////////////////////////////////
(0227) //CMD_SET_PARAMETER
(0228) //////////////////////////////////////
(0229) else if (cmd==CMD_SET_PARAMETER)
2D1 858A LDD R24,Y+10
2D2 3082 CPI R24,2
2D3 F009 BEQ 0x02D5
2D4 C061 RJMP 0x0336
(0230) {
(0231) switch (msg_buffer[1])
2D5 90C0 0076 LDS R12,msg_buffer+1
2D7 2D8C MOV R24,R12
2D8 3988 CPI R24,0x98
2D9 F059 BEQ 0x02E5
2DA 3988 CPI R24,0x98
2DB F408 BCC 0x02DD
2DC C050 RJMP 0x032D
2DD 2D8C MOV R24,R12
2DE 398E CPI R24,0x9E
2DF F409 BNE 0x02E1
2E0 C043 RJMP 0x0324
2E1 398F CPI R24,0x9F
2E2 F409 BNE 0x02E4
2E3 C045 RJMP 0x0329
2E4 C048 RJMP 0x032D
(0232) {
(0233) case PARAM_SCK_DURATION:
(0234) clock_speed=SPI_SPEED_2MHZ;
2E5 E081 LDI R24,1
2E6 9380 0074 STS clock_speed,R24
(0235) if ((msg_buffer[2]) >= 1 ) clock_speed=SPI_SPEED_2MHZ;
2E8 9180 0077 LDS R24,msg_buffer+2
2EA 3081 CPI R24,1
2EB F018 BCS 0x02EF
2EC E081 LDI R24,1
2ED 9380 0074 STS clock_speed,R24
(0236) if ((msg_buffer[2]) >= 2 ) clock_speed=SPI_SPEED_1MHZ;
2EF 9180 0077 LDS R24,msg_buffer+2
2F1 3082 CPI R24,2
2F2 F018 BCS 0x02F6
2F3 E082 LDI R24,2
2F4 9380 0074 STS clock_speed,R24
(0237) if ((msg_buffer[2]) >= 4 ) clock_speed=SPI_SPEED_500KHZ;
2F6 9180 0077 LDS R24,msg_buffer+2
2F8 3084 CPI R24,4
2F9 F018 BCS 0x02FD
2FA E083 LDI R24,3
2FB 9380 0074 STS clock_speed,R24
(0238) if ((msg_buffer[2]) >= 8 ) clock_speed=SPI_SPEED_250KHZ;
2FD 9180 0077 LDS R24,msg_buffer+2
2FF 3088 CPI R24,0x8
300 F018 BCS 0x0304
301 E084 LDI R24,4
302 9380 0074 STS clock_speed,R24
(0239) if ((msg_buffer[2]) >= 16 ) clock_speed=SPI_SPEED_125KHZ;
304 9180 0077 LDS R24,msg_buffer+2
306 3180 CPI R24,0x10
307 F018 BCS 0x030B
308 E085 LDI R24,5
309 9380 0074 STS clock_speed,R24
(0240) if ((msg_buffer[2]) >= 32 ) clock_speed=SPI_SPEED_62KHZ;
30B 9180 0077 LDS R24,msg_buffer+2
30D 3280 CPI R24,0x20
30E F018 BCS 0x0312
30F E086 LDI R24,6
310 9380 0074 STS clock_speed,R24
(0241) if (EEPROMread((int)&eeprom_sck_period)!=clock_speed) EEPROMwrite((int)&eeprom_sck_period,clock_speed);
312 E000 LDI R16,0
313 E010 LDI R17,0
314 940E 0B52 CALL _EEPROMread
316 9020 0074 LDS R2,clock_speed
318 1502 CP R16,R2
319 F029 BEQ 0x031F
31A 2D22 MOV R18,R2
31B E000 LDI R16,0
31C E010 LDI R17,0
31D 940E 0B59 CALL _EEPROMwrite
(0242) spi_set_speed(clock_speed);
31F 9100 0074 LDS R16,clock_speed
321 940E 00DD CALL _spi_set_speed
(0243) break;
323 C009 RJMP 0x032D
(0244) case PARAM_RESET_POLARITY:
(0245) reset_polarity = msg_buffer[2];
324 9020 0077 LDS R2,msg_buffer+2
326 9220 0073 STS reset_polarity,R2
(0246) break;
328 C004 RJMP 0x032D
(0247) case PARAM_CONTROLLER_INIT:
(0248) param_controller_init = msg_buffer[2];
329 9020 0077 LDS R2,msg_buffer+2
32B 9220 0072 STS param_controller_init,R2
(0249) break;
(0250) }
(0251)
(0252) num_bytes = 2;
32D E082 LDI R24,2
32E E090 LDI R25,0
32F 015C MOVW R10,R24
(0253) msg_buffer[0] = CMD_SET_PARAMETER;
330 9380 0075 STS msg_buffer,R24
(0254) msg_buffer[1] = STATUS_CMD_OK;
332 2422 CLR R2
333 9220 0076 STS msg_buffer+1,R2
(0255) }
335 C798 RJMP 0x0ACE
(0256) //////////////////////////////////////
(0257) //CMD_GET_PARAMETER
(0258) //////////////////////////////////////
(0259) else if (cmd==CMD_GET_PARAMETER)
336 858A LDD R24,Y+10
337 3083 CPI R24,3
338 F009 BEQ 0x033A
339 C043 RJMP 0x037D
(0260) {
(0261) switch (msg_buffer[1])
33A 90C0 0076 LDS R12,msg_buffer+1
33C 2D8C MOV R24,R12
33D 3980 CPI R24,0x90
33E F0F1 BEQ 0x035D
33F 3981 CPI R24,0x91
340 F0F9 BEQ 0x0360
341 3982 CPI R24,0x92
342 F101 BEQ 0x0363
343 E982 LDI R24,0x92
344 158C CP R24,R12
345 F030 BCS 0x034C
346 2D8C MOV R24,R12
347 3880 CPI R24,0x80
348 F071 BEQ 0x0357
349 3881 CPI R24,0x81
34A F079 BEQ 0x035A
34B C025 RJMP 0x0371
34C 2D8C MOV R24,R12
34D 3988 CPI R24,0x98
34E F0B9 BEQ 0x0366
34F 3988 CPI R24,0x98
350 F100 BCS 0x0371
351 2D8C MOV R24,R12
352 398E CPI R24,0x9E
353 F0B1 BEQ 0x036A
354 398F CPI R24,0x9F
355 F0C1 BEQ 0x036E
356 C01A RJMP 0x0371
(0262) {
(0263) case PARAM_BUILD_NUMBER_LOW:
(0264) tmp = CONFIG_PARAM_BUILD_NUMBER_LOW;
357 2400 CLR R0
358 8A0A STD Y+18,R0
(0265) break;
359 C017 RJMP 0x0371
(0266) case PARAM_BUILD_NUMBER_HIGH:
(0267) tmp = CONFIG_PARAM_BUILD_NUMBER_HIGH;
35A 2400 CLR R0
35B 8A0A STD Y+18,R0
(0268) break;
35C C014 RJMP 0x0371
(0269) case PARAM_HW_VER:
(0270) tmp = CONFIG_PARAM_HW_VER;
35D E08F LDI R24,0xF
35E 8B8A STD Y+18,R24
(0271) break;
35F C011 RJMP 0x0371
(0272) case PARAM_SW_MAJOR:
(0273) tmp = CONFIG_PARAM_SW_MAJOR;
360 E082 LDI R24,2
361 8B8A STD Y+18,R24
(0274) break;
362 C00E RJMP 0x0371
(0275) case PARAM_SW_MINOR:
(0276) tmp = CONFIG_PARAM_SW_MINOR;
363 E08A LDI R24,0xA
364 8B8A STD Y+18,R24
(0277) break;
365 C00B RJMP 0x0371
(0278) case PARAM_SCK_DURATION:
(0279) tmp = clock_speed;
366 9020 0074 LDS R2,clock_speed
368 8A2A STD Y+18,R2
(0280) break;
369 C007 RJMP 0x0371
(0281) case PARAM_RESET_POLARITY:
(0282) tmp = reset_polarity;
36A 9020 0073 LDS R2,reset_polarity
36C 8A2A STD Y+18,R2
(0283) break;
36D C003 RJMP 0x0371
(0284) case PARAM_CONTROLLER_INIT:
(0285) tmp = param_controller_init;
36E 9020 0072 LDS R2,param_controller_init
370 8A2A STD Y+18,R2
(0286) break;
(0287) }
(0288)
(0289) num_bytes = 3;
371 E083 LDI R24,3
372 E090 LDI R25,0
373 015C MOVW R10,R24
(0290) msg_buffer[0] = CMD_GET_PARAMETER;
374 9380 0075 STS msg_buffer,R24
(0291) msg_buffer[1] = STATUS_CMD_OK;
376 2422 CLR R2
377 9220 0076 STS msg_buffer+1,R2
(0292) msg_buffer[2] = tmp;
379 880A LDD R0,Y+18
37A 9200 0077 STS msg_buffer+2,R0
(0293) }
37C C751 RJMP 0x0ACE
(0294) //////////////////////////////////////
(0295) //CMD_LOAD_ADDRESS
(0296) //////////////////////////////////////
(0297) else if (cmd==CMD_LOAD_ADDRESS)
37D 858A LDD R24,Y+10
37E 3086 CPI R24,6
37F F009 BEQ 0x0381
380 C069 RJMP 0x03EA
(0298) {
(0299) address = ((unsigned long)msg_buffer[1])<<24;
381 E188 LDI R24,0x18
382 E090 LDI R25,0
383 9100 0076 LDS R16,msg_buffer+1
385 2711 CLR R17
386 2722 CLR R18
387 2733 CLR R19
388 938A ST R24,-Y
389 940E 0B3A CALL lsl32
38B 9310 006E STS address+1,R17
38D 9300 006D STS address,R16
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -