?? bldstk500.lst
字號:
1D2E 8340 STD Z+0,R20
(0092) checkSum ^= rec_data;
1D2F 90200075 LDS R2,checkSum
1D31 2624 EOR R2,R20
1D32 92200075 STS checkSum,R2
(0093) if(msgCounter==msgSize)
1D34 9020006E LDS R2,msgSize
1D36 9030006F LDS R3,msgSize+1
1D38 9040006A LDS R4,msgCounter
1D3A 9050006B LDS R5,msgCounter+1
1D3C 1442 CP R4,R2
1D3D 0453 CPC R5,R3
1D3E F491 BNE 0x1D51
(0094) {
(0095) statusMachine = ST_GET_CHECK;
1D3F EF86 LDI R24,0xF6
1D40 93800070 STS statusMachine,R24
(0096) }
(0097) }
1D42 C00E RJMP 0x1D51
(0098) else if(statusMachine == ST_GET_CHECK)
1D43 91800070 LDS R24,statusMachine
1D45 3F86 CPI R24,0xF6
1D46 F451 BNE 0x1D51
(0099) {
(0100) if(rec_data == checkSum)
1D47 90200075 LDS R2,checkSum
1D49 1542 CP R20,R2
1D4A F419 BNE 0x1D4E
(0101) {
(0102) packageProcess(seqNumber);
1D4B 91000076 LDS R16,seqNumber
1D4D D005 RCALL _packageProcess
(0103) }
(0104) statusMachine = ST_START;
1D4E EF80 LDI R24,0xF0
1D4F 93800070 STS statusMachine,R24
1D51 CF59 RJMP 0x1CAB
1D52 9508 RET
_packageProcess:
temp16 --> R10
start_address --> Y+2
cmd --> R14
tmp --> Y+8
num_bytes --> Y+6
i --> R12
seqNum --> Y+19
1D53 931A ST R17,-Y
1D54 930A ST R16,-Y
1D55 940E1FA6 CALL push_gset5
1D57 9729 SBIW R28,0x9
(0105) }
(0106) }
(0107) }
(0108)
(0109)
(0110)
(0111)
(0112) /**********************************************************************
(0113) functionName:void packageProcess(uint08 seqNum)
(0114) description:數據包的處理過程
(0115) **********************************************************************/
(0116) void packageProcess(uint08 seqNum)
(0117) {
(0118) uint08 cmd;
(0119) uint08 tmp=0;
1D58 2400 CLR R0
1D59 8608 STD Y+8,R0
(0120) uint16 i;
(0121) uint16 num_bytes=0;
1D5A 2411 CLR R1
1D5B 821F STD Y+7,R1
1D5C 820E STD Y+6,R0
(0122) uint32 start_address = address;
1D5D 9020006C LDS R2,address
1D5F 9030006D LDS R3,address+1
1D61 2444 CLR R4
1D62 2455 CLR R5
1D63 822A STD Y+2,R2
1D64 823B STD Y+3,R3
1D65 824C STD Y+4,R4
1D66 825D STD Y+5,R5
(0123)
(0124) cmd = msg_buffer[0];
1D67 90E00077 LDS R14,msg_buffer
(0125) //命令CMD_SIGN_ON
(0126) if(cmd==CMD_SIGN_ON)
1D69 2D8E MOV R24,R14
1D6A 3081 CPI R24,1
1D6B F4B1 BNE 0x1D82
(0127) {
(0128) num_bytes = 11;
1D6C E08B LDI R24,0xB
1D6D E090 LDI R25,0
1D6E 839F STD Y+7,R25
1D6F 838E STD Y+6,R24
(0129) msg_buffer[0] = CMD_SIGN_ON;
1D70 E081 LDI R24,1
1D71 93800077 STS msg_buffer,R24
(0130) msg_buffer[1] = STATUS_CMD_OK;
1D73 2422 CLR R2
1D74 92200078 STS msg_buffer+1,R2
(0131) msg_buffer[2] = 8;
1D76 E088 LDI R24,0x8
1D77 93800079 STS msg_buffer+2,R24
(0132) memcpy(msg_buffer+3,"STK500_2",8);
1D79 8399 STD Y+1,R25
1D7A 8388 STD Y+0,R24
1D7B E621 LDI R18,0x61
1D7C E030 LDI R19,0
1D7D E70A LDI R16,0x7A
1D7E E010 LDI R17,0
1D7F 940E1F95 CALL _memcpy
(0133) }
1D81 C180 RJMP 0x1F02
(0134) //命令CMD_SET_PARAMETER
(0135) else if(cmd==CMD_SET_PARAMETER)
1D82 2D8E MOV R24,R14
1D83 3082 CPI R24,2
1D84 F451 BNE 0x1D8F
(0136) {
(0137) num_bytes = 2;
1D85 E082 LDI R24,2
1D86 E090 LDI R25,0
1D87 839F STD Y+7,R25
1D88 838E STD Y+6,R24
(0138) msg_buffer[0] = CMD_SET_PARAMETER;
1D89 93800077 STS msg_buffer,R24
(0139) msg_buffer[1] = STATUS_CMD_OK;
1D8B 2422 CLR R2
1D8C 92200078 STS msg_buffer+1,R2
(0140) }
1D8E C173 RJMP 0x1F02
(0141) //命令CMD_GET_PARAMETER
(0142) else if(cmd==CMD_GET_PARAMETER)
1D8F 2D8E MOV R24,R14
1D90 3083 CPI R24,3
1D91 F5B1 BNE 0x1DC8
(0143) {
(0144) switch(msg_buffer[1])
1D92 90A00078 LDS R10,msg_buffer+1
1D94 24BB CLR R11
1D95 01C5 MOVW R24,R10
1D96 3982 CPI R24,0x92
1D97 E0E0 LDI R30,0
1D98 079E CPC R25,R30
1D99 F091 BEQ 0x1DAC
1D9A 3984 CPI R24,0x94
1D9B E0E0 LDI R30,0
1D9C 079E CPC R25,R30
1D9D F0A9 BEQ 0x1DB3
1D9E 3985 CPI R24,0x95
1D9F E0E0 LDI R30,0
1DA0 079E CPC R25,R30
1DA1 F0A1 BEQ 0x1DB6
1DA2 3982 CPI R24,0x92
1DA3 E0E0 LDI R30,0
1DA4 079E CPC R25,R30
1DA5 F09C BLT 0x1DB9
1DA6 01C5 MOVW R24,R10
1DA7 398E CPI R24,0x9E
1DA8 E0E0 LDI R30,0
1DA9 079E CPC R25,R30
1DAA F021 BEQ 0x1DAF
1DAB C00D RJMP 0x1DB9
(0145) {
(0146) /*case PARAM_BUILD_NUMBER_LOW:
(0147) tmp = CONFIG_PARAM_BUILD_NUMBER_LOW;
(0148) break;
(0149) case PARAM_BUILD_NUMBER_HIGH:
(0150) tmp = CONFIG_PARAM_BUILD_NUMBER_HIGH;
(0151) break;
(0152) case PARAM_HW_VER:
(0153) tmp = CONFIG_PARAM_HW_VER;
(0154) break;
(0155) case PARAM_SW_MAJOR:
(0156) tmp = CONFIG_PARAM_SW_MAJOR;
(0157) break;*/
(0158) case PARAM_SW_MINOR:
(0159) tmp = CONFIG_PARAM_SW_MINOR;
1DAC E084 LDI R24,4
1DAD 8788 STD Y+8,R24
(0160) break;
1DAE C00C RJMP 0x1DBB
(0161) case PARAM_RESET_POLARITY:
(0162) tmp = resetPolarity;
1DAF 90200073 LDS R2,resetPolarity
1DB1 8628 STD Y+8,R2
(0163) break;
1DB2 C008 RJMP 0x1DBB
(0164) case PARAM_VTARGET: //目標電壓
(0165) tmp = 50;
1DB3 E382 LDI R24,0x32
1DB4 8788 STD Y+8,R24
(0166) break;
1DB5 C005 RJMP 0x1DBB
(0167) case PARAM_VADJUST:
(0168) tmp = 50; //參考電壓
1DB6 E382 LDI R24,0x32
1DB7 8788 STD Y+8,R24
(0169) break;
1DB8 C002 RJMP 0x1DBB
(0170) /*case PARAM_TOPCARD_DETECT:
(0171) tmp = TOP_CARD_STK520;
(0172) break;
(0173) case PARAM_CONTROLLER_INIT:
(0174) tmp = paramControllerInit;
(0175) break;
(0176) case PARAM_SCK_DURATION:
(0177) tmp = clockSpeed;
(0178) break;*/
(0179) default:
(0180) tmp = CONFIG_PARAM_SW_MAJOR;
1DB9 E082 LDI R24,2
1DBA 8788 STD Y+8,R24
(0181) break;
(0182) }
(0183) num_bytes = 3;
1DBB E083 LDI R24,3
1DBC E090 LDI R25,0
1DBD 839F STD Y+7,R25
1DBE 838E STD Y+6,R24
(0184) msg_buffer[0] = CMD_GET_PARAMETER;
1DBF 93800077 STS msg_buffer,R24
(0185) msg_buffer[1] = STATUS_CMD_OK;
1DC1 2422 CLR R2
1DC2 92200078 STS msg_buffer+1,R2
(0186) msg_buffer[2] = tmp;
1DC4 8408 LDD R0,Y+8
1DC5 92000079 STS msg_buffer+2,R0
(0187) }
1DC7 C13A RJMP 0x1F02
(0188) //命令CMD_OSCCAL
(0189) /*else if(cmd==CMD_OSCCAL)
(0190) {
(0191) num_bytes = 2;
(0192) msg_buffer[0] = CMD_OSCCAL;
(0193) msg_buffer[1] = STATUS_CMD_OK;
(0194) }*/
(0195) //命令CMD_LOAD_ADDRESS
(0196) else if(cmd==CMD_LOAD_ADDRESS)
1DC8 2D8E MOV R24,R14
1DC9 3086 CPI R24,6
1DCA F549 BNE 0x1DF4
(0197) {
(0198) //address = ((unsigned long)msg_buffer[1])<<24;
(0199) //address |= ((unsigned long)msg_buffer[2])<<16;
(0200) address = ((unsigned long)msg_buffer[3])<<8;
1DCB E088 LDI R24,0x8
1DCC E090 LDI R25,0
1DCD 9100007A LDS R16,msg_buffer+3
1DCF 2711 CLR R17
1DD0 2722 CLR R18
1DD1 2733 CLR R19
1DD2 938A ST R24,-Y
1DD3 940E1FC5 CALL lsl32
1DD5 9310006D STS address+1,R17
1DD7 9300006C STS address,R16
(0201) address |= ((unsigned long)msg_buffer[4]);
1DD9 9020007B LDS R2,0x7B
1DDB 2433 CLR R3
1DDC 2444 CLR R4
1DDD 2455 CLR R5
1DDE 0138 MOVW R6,R16
1DDF 2488 CLR R8
1DE0 2499 CLR R9
1DE1 2862 OR R6,R2
1DE2 2873 OR R7,R3
1DE3 2884 OR R8,R4
1DE4 2895 OR R9,R5
1DE5 9270006D STS address+1,R7
1DE7 9260006C STS address,R6
(0202) num_bytes = 2;
1DE9 E082 LDI R24,2
1DEA E090 LDI R25,0
1DEB 839F STD Y+7,R25
1DEC 838E STD Y+6,R24
(0203) msg_buffer[0] = CMD_LOAD_ADDRESS;
1DED E086 LDI R24,6
1DEE 93800077 STS msg_buffer,R24
(0204) msg_buffer[1] = STATUS_CMD_OK;
1DF0 2422 CLR R2
1DF1 92200078 STS msg_buffer+1,R2
(0205) }
1DF3 C10E RJMP 0x1F02
(0206) //CMD_CHIP_ERASE_ISP
(0207) else if(cmd==CMD_CHIP_ERASE_ISP)
1DF4 2D8E MOV R24,R14
1DF5 3182 CPI R24,0x12
1DF6 F459 BNE 0x1E02
(0208) {
(0209) num_bytes = 2;
1DF7 E082 LDI R24,2
1DF8 E090 LDI R25,0
1DF9 839F STD Y+7,R25
1DFA 838E STD Y+6,R24
(0210) msg_buffer[0] = CMD_CHIP_ERASE_ISP;
1DFB E182 LDI R24,0x12
1DFC 93800077 STS msg_buffer,R24
(0211) msg_buffer[1] = STATUS_CMD_OK;
1DFE 2422 CLR R2
1DFF 92200078 STS msg_buffer+1,R2
(0212) }
1E01 C100 RJMP 0x1F02
(0213) //命令CMD_ENTER_PROGMODE_ISP
(0214) else if(cmd == CMD_ENTER_PROGMODE_ISP)
1E02 2D8E MOV R24,R14
1E03 3180 CPI R24,0x10
1E04 F459 BNE 0x1E10
(0215) {
(0216) num_bytes = 2;
1E05 E082 LDI R24,2
1E06 E090 LDI R25,0
1E07 839F STD Y+7,R25
1E08 838E STD Y+6,R24
(0217) msg_buffer[0] = CMD_ENTER_PROGMODE_ISP;
1E09 E180 LDI R24,0x10
1E0A 93800077 STS msg_buffer,R24
(0218) msg_buffer[1] = STATUS_CMD_OK;
1E0C 2422 CLR R2
1E0D 92200078 STS msg_buffer+1,R2
(0219) }
1E0F C0F2 RJMP 0x1F02
(0220) //命令 CMD_LEAVE_PROGMODE_ISP
(0221) else if(cmd==CMD_LEAVE_PROGMODE_ISP)
1E10 2D8E MOV R24,R14
1E11 3181 CPI R24,0x11
1E12 F491 BNE 0x1E25
(0222) {
(0223) num_bytes = 2;
1E13 E082 LDI R24,2
1E14 E090 LDI R25,0
1E15 839F STD Y+7,R25
1E16 838E STD Y+6,R24
(0224) msg_buffer[0] = CMD_LEAVE_PROGMODE_ISP;
1E17 E181 LDI R24,0x11
1E18 93800077 STS msg_buffer,R24
(0225) msg_buffer[1] = STATUS_CMD_OK;
1E1A 2422 CLR R2
1E1B 92200078 STS msg_buffer+1,R2
(0226)
(0227) flag = 0;
1E1D 92200060 STS flag,R2
(0228) TCNT1 = 0x2d11;
1E1F E29D LDI R25,0x2D
1E20 BD9D OUT 0x2D,R25
1E21 BD8C OUT 0x2C,R24
(0229) TCCR1B = 0x05;
1E22 E085 LDI R24,5
1E23 BD8E OUT 0x2E,R24
(0230) }
1E24 C0DD RJMP 0x1F02
(0231) //命令CMD_PROGRAM_FLASH_ISP
(0232) else if(cmd==CMD_PROGRAM_FLASH_ISP)
1E25 2D8E MOV R24,R14
1E26 3183 CPI R24,0x13
1E27 F009 BEQ 0x1E29
1E28 C048 RJMP 0x1E71
(0233) {
(0234) uint16 temp16;
(0235) boot_page_ew(address,0x03); //擦除頁
1E29 E023 LDI R18,3
1E2A 9100006C LDS R16,address
1E2C 9110006D LDS R17,address+1
1E2E 940E1F67 CALL _boot_page_ew
(0236) wait_page_rw_ok(); //等待擦除完成
1E30 940E1F74 CALL _wait_page_rw_ok
(0237) for(i=0;i<(SPM_PAGESIZE<<1);i+=2) //將數據填入Flash緩沖頁中
1E32 24CC CLR R12
1E33 24DD CLR R13
1E34 C019 RJMP 0x1E4E
(0238) {
(0239) temp16=msg_buffer[i+11];
1E35 E787 LDI R24,0x77
1E36 E090 LDI R25,0
1E37 01F6 MOVW R30,R12
1E38 963B ADIW R30,0xB
1E39 0FE8 ADD R30,R24
1E3A 1FF9 ADC R31,R25
1E3B 80A0 LDD R10,Z+0
1E3C 24BB CLR R11
(0240) temp16<<=8;
1E3D 2CBA MOV R11,R10
1E3E 24AA CLR R10
(0241) temp16+=msg_buffer[i+10];
1E3F 01F6 MOVW R30,R12
1E40 963A ADIW R30,0xA
1E41 0FE8 ADD R30,R24
1E42 1FF9 ADC R31,R25
1E43 8020 LDD R2,Z+0
1E44 2433 CLR R3
1E45 0CA2 ADD R10,R2
1E46 1CB3 ADC R11,R3
(0242) boot_page_fill(i,temp16);
1E47 0195 MOVW R18,R10
1E48 0186 MOVW R16,R12
1E49 940E1F6C CALL _boot_page_fill
1E4B 01C6 MOVW R24,R12
1E4C 9602 ADIW R24,2
1E4D 016C MOVW R12,R24
1E4E 01C6 MOVW R24,R12
1E4F 3880 CPI R24,0x80
1E50 E0E0 LDI R30,0
1E51 079E CPC R25,R30
1E52 F310 BCS 0x1E35
(0243) }
(0244) boot_page_ew(address,0x05); //將緩沖頁數據寫入一個Flash頁
1E53 E025 LDI R18,5
1E54 9100006C LDS R16,address
1E56 9110006D LDS R17,address+1
1E58 940E1F67 CALL _boot_page_ew
(0245) wait_page_rw_ok(); //等待寫入完成
1E5A 940E1F74 CALL _wait_page_rw_ok
(0246) address+=(SPM_PAGESIZE<<1);
1E5C 9180006C LDS R24,address
1E5E 9190006D LDS R25,address+1
1E60 5880 SUBI R24,0x80
1E61 4F9F SBCI R25,0xFF
1E62 9390006D STS address+1,R25
1E64 9380006C STS address,R24
(0247) num_bytes = 2;
1E66 E082 LDI R24,2
1E67 E090 LDI R25,0
1E68 839F STD Y+7,R25
1E69 838E STD Y+6,R24
(0248) msg_buffer[0] = CMD_PROGRAM_FLASH_ISP;
1E6A E183 LDI R24,0x13
1E6B 93800077 STS msg_buffer,R24
(0249) msg_buffer[1] = STATUS_CMD_OK;
1E6D 2422 CLR R2
1E6E 92200078 STS msg_buffer+1,R2
(0250) }
1E70 C091 RJMP 0x1F02
(0251) //命令CMD_READ_FLASH_ISP
(0252) else if(cmd==CMD_READ_FLASH_ISP)
1E71 2D8E MOV R24,R14
1E72 3184 CPI R24,0x14
1E73 F591 BNE 0x1EA6
(0253) {
(0254) for(i=0;i<(SPM_PAGESIZE<<2);i++)
1E74 24CC CLR R12
1E75 24DD CLR R13
1E76 C013 RJMP 0x1E8A
(0255) {
(0256) msg_buffer[i+2] = read_program_memory (address+i,0x00);
1E77 2722 CLR R18
1E78 9100006C LDS R16,address
1E7A 9110006D LDS R17,address+1
1E7C 0D0C ADD R16,R12
1E7D 1D1D ADC R17,R13
1E7E 940E1F8A CALL _read_program_memory
1E80 E787 LDI R24,0x77
1E81 E090 LDI R25,0
1E82 01F6 MOVW R30,R12
1E83 9632 ADIW R30,2
1E84 0FE8 ADD R30,R24
1E85 1FF9 ADC R31,R25
1E86 8300 STD Z+0,R16
1E87 01C6 MOVW R24,R12
1E88 9601 ADIW R24,1
1E89 016C MOVW R12,R24
1E8A 01C6 MOVW R24,R12
1E8B 3080 CPI R24,0
1E8C E0E1 LDI R30,1
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -