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

📄 stk500_isp.lst

📁 很好的制作AVR32 ICE的资料
💻 LST
📖 第 1 页 / 共 5 页
字号:
     38F 9330 0070 STS	address+3,R19
     391 9320 006F STS	address+2,R18
(0300)       address |= ((unsigned long)msg_buffer[2])<<16;
     393 9020 0077 LDS	R2,msg_buffer+2
     395 2433      CLR	R3
     396 2444      CLR	R4
     397 2455      CLR	R5
     398 0121      MOVW	R4,R2
     399 2422      CLR	R2
     39A 2433      CLR	R3
     39B 0138      MOVW	R6,R16
     39C 0149      MOVW	R8,R18
     39D 2862      OR	R6,R2
     39E 2873      OR	R7,R3
     39F 2884      OR	R8,R4
     3A0 2895      OR	R9,R5
     3A1 9270 006E STS	address+1,R7
     3A3 9260 006D STS	address,R6
     3A5 9290 0070 STS	address+3,R9
     3A7 9280 006F STS	address+2,R8
(0301)       address |= ((unsigned long)msg_buffer[3])<<8;
     3A9 E088      LDI	R24,0x8
     3AA E090      LDI	R25,0
     3AB 9100 0078 LDS	R16,msg_buffer+3
     3AD 2711      CLR	R17
     3AE 2722      CLR	R18
     3AF 2733      CLR	R19
     3B0 938A      ST	R24,-Y
     3B1 940E 0B3A CALL	lsl32
     3B3 9040 006F LDS	R4,address+2
     3B5 9050 0070 LDS	R5,address+3
     3B7 9020 006D LDS	R2,address
     3B9 9030 006E LDS	R3,address+1
     3BB 2A20      OR	R2,R16
     3BC 2A31      OR	R3,R17
     3BD 2A42      OR	R4,R18
     3BE 2A53      OR	R5,R19
     3BF 9230 006E STS	address+1,R3
     3C1 9220 006D STS	address,R2
     3C3 9250 0070 STS	address+3,R5
     3C5 9240 006F STS	address+2,R4
(0302)       address |= ((unsigned long)msg_buffer[4]);
     3C7 9020 0079 LDS	R2,0x0079
     3C9 2433      CLR	R3
     3CA 2444      CLR	R4
     3CB 2455      CLR	R5
     3CC 9080 006F LDS	R8,address+2
     3CE 9090 0070 LDS	R9,address+3
     3D0 9060 006D LDS	R6,address
     3D2 9070 006E LDS	R7,address+1
     3D4 2862      OR	R6,R2
     3D5 2873      OR	R7,R3
     3D6 2884      OR	R8,R4
     3D7 2895      OR	R9,R5
     3D8 9270 006E STS	address+1,R7
     3DA 9260 006D STS	address,R6
     3DC 9290 0070 STS	address+3,R9
     3DE 9280 006F STS	address+2,R8
(0303) 
(0304)       num_bytes = 2;
     3E0 E082      LDI	R24,2
     3E1 E090      LDI	R25,0
     3E2 015C      MOVW	R10,R24
(0305)       msg_buffer[0] = CMD_LOAD_ADDRESS;
     3E3 E086      LDI	R24,6
     3E4 9380 0075 STS	msg_buffer,R24
(0306)       msg_buffer[1] = STATUS_CMD_OK;
     3E6 2422      CLR	R2
     3E7 9220 0076 STS	msg_buffer+1,R2
(0307)     }
     3E9 C6E4      RJMP	0x0ACE
(0308)   //////////////////////////////////////
(0309)   //CMD_ENTER_PROGMODE_ISP
(0310)   //////////////////////////////////////
(0311)   else if (cmd==CMD_ENTER_PROGMODE_ISP)
     3EA 858A      LDD	R24,Y+10
     3EB 3180      CPI	R24,0x10
     3EC F009      BEQ	0x03EE
     3ED C07F      RJMP	0x046D
(0312)     {
(0313)       //msg_buffer[1] //timeout		//Command time-out (in ms)
(0314)       //msg_buffer[2] //stabDelay		//Delay (in ms) used for pin stabilization
(0315)       //msg_buffer[3] //cmdexeDelay	//Delay (in ms) in connection with the EnterProgMode command execution
(0316)       //msg_buffer[4] //synchLoops	//Number of synchronization loops
(0317)       //msg_buffer[5] //byteDelay		//Delay (in ms) between each byte in the EnterProgMode command.
(0318)       //msg_buffer[6] //pollValue		//Poll value: 0x53 for AVR, 0x69 for AT89xx
(0319)       //msg_buffer[7] //pollIndex		//Start address, received byte: 0 = no polling, 3 = AVR, 4 = AT89xx
(0320)       //msg_buffer[8] //cmd1			//Command Byte # 1 to be transmitted
(0321)       //msg_buffer[9] //cmd2			//Command Byte # 2 to be transmitted
(0322)       //msg_buffer[10]//cmd3			//Command Byte # 3 to be transmitted
(0323)       //msg_buffer[11]//cmd4			//Command Byte # 4 to be transmitted
(0324) 
(0325)       prgmode=1;
     3EE E081      LDI	R24,1
     3EF 9380 0071 STS	prgmode,R24
(0326) 
(0327)       spi_enable();
     3F1 940E 0093 CALL	_spi_enable
(0328) 
(0329)       wait_ms(msg_buffer[2]);
     3F3 9100 0077 LDS	R16,msg_buffer+2
     3F5 2711      CLR	R17
     3F6 940E 01E4 CALL	_wait_ms
(0330) 
(0331)       LED_GN_ON;
     3F8 9A92      SBI	0x12,2
(0332)       LED_RT_ON;
     3F9 9A93      SBI	0x12,3
(0333) 
(0334)       //Try to get connection with the target chip
(0335)       for (i=0;i<msg_buffer[4];i++)
     3FA 24CC      CLR	R12
     3FB 24DD      CLR	R13
     3FC C056      RJMP	0x0453
(0336)         {
(0337)           //spi_transfer_16(0xAC53);
(0338)           spi_transfer_8(msg_buffer[8]);
     3FD 9100 007D LDS	R16,0x007D
     3FF 940E 0125 CALL	_spi_transfer_8
(0339)           wait_ms(msg_buffer[5]);
     401 9100 007A LDS	R16,0x007A
     403 2711      CLR	R17
     404 940E 01E4 CALL	_wait_ms
(0340)           spi_transfer_8(msg_buffer[9]);
     406 9100 007E LDS	R16,0x007E
     408 940E 0125 CALL	_spi_transfer_8
(0341)           wait_ms(msg_buffer[5]);
     40A 9100 007A LDS	R16,0x007A
     40C 2711      CLR	R17
     40D 940E 01E4 CALL	_wait_ms
(0342) 
(0343)           if (msg_buffer[7]==3)
     40F 9180 007C LDS	R24,0x007C
     411 3083      CPI	R24,3
     412 F4A1      BNE	0x0427
(0344)             {
(0345)               tmp=spi_transfer_8(msg_buffer[10]);
     413 9100 007F LDS	R16,0x007F
     415 940E 0125 CALL	_spi_transfer_8
     417 2EE0      MOV	R14,R16
(0346)               wait_ms(msg_buffer[5]);
     418 9100 007A LDS	R16,0x007A
     41A 2711      CLR	R17
     41B 940E 01E4 CALL	_wait_ms
(0347)               spi_transfer_8(msg_buffer[11]);
     41D 9100 0080 LDS	R16,0x0080
     41F 940E 0125 CALL	_spi_transfer_8
(0348)               wait_ms(msg_buffer[5]);
     421 9100 007A LDS	R16,0x007A
     423 2711      CLR	R17
     424 940E 01E4 CALL	_wait_ms
(0349)             }
     426 C015      RJMP	0x043C
(0350)           else
(0351)             {
(0352)               spi_transfer_8(msg_buffer[10]);
     427 9100 007F LDS	R16,0x007F
     429 940E 0125 CALL	_spi_transfer_8
(0353)               wait_ms(msg_buffer[5]);
     42B 9100 007A LDS	R16,0x007A
     42D 2711      CLR	R17
     42E 940E 01E4 CALL	_wait_ms
(0354)               tmp=spi_transfer_8(msg_buffer[11]);
     430 9100 0080 LDS	R16,0x0080
     432 940E 0125 CALL	_spi_transfer_8
     434 871F      STD	Y+15,R17
     435 870E      STD	Y+14,R16
     436 0178      MOVW	R14,R16
(0355)               wait_ms(msg_buffer[5]);
     437 9100 007A LDS	R16,0x007A
     439 2711      CLR	R17
     43A 940E 01E4 CALL	_wait_ms
(0356)             }
(0357) 
(0358)           if ((tmp==msg_buffer[6])||(msg_buffer[7]==0))
     43C 9020 007B LDS	R2,0x007B
     43E 14E2      CP	R14,R2
     43F F021      BEQ	0x0444
     440 9020 007C LDS	R2,0x007C
     442 2022      TST	R2
     443 F451      BNE	0x044E
(0359)             {
(0360)               LED_GN_OFF;
     444 EF8B      LDI	R24,0xFB
     445 EF9F      LDI	R25,0xFF
     446 B222      IN	R2,0x12
     447 2228      AND	R2,R24
     448 BA22      OUT	0x12,R2
(0361)               LED_RT_ON;
     449 9A93      SBI	0x12,3
(0362)               i=0xFF;
     44A EF8F      LDI	R24,0xFF
     44B E090      LDI	R25,0
     44C 016C      MOVW	R12,R24
(0363)               break;
     44D C00C      RJMP	0x045A
(0364)             }
(0365) 
(0366)           spi_clock_pulse();
     44E 940E 0110 CALL	_spi_clock_pulse
     450 01C6      MOVW	R24,R12
     451 9601      ADIW	R24,1
     452 016C      MOVW	R12,R24
     453 9020 0079 LDS	R2,0x0079
     455 2433      CLR	R3
     456 14C2      CP	R12,R2
     457 04D3      CPC	R13,R3
     458 F408      BCC	0x045A
     459 CFA3      RJMP	0x03FD
(0367)         }
(0368) 
(0369)       num_bytes = 2;
     45A E082      LDI	R24,2
     45B E090      LDI	R25,0
     45C 015C      MOVW	R10,R24
(0370)       msg_buffer[0] = CMD_ENTER_PROGMODE_ISP;
     45D E180      LDI	R24,0x10
     45E 9380 0075 STS	msg_buffer,R24
(0371) 
(0372)       if (i==0xFF)
     460 01C6      MOVW	R24,R12
     461 3F8F      CPI	R24,0xFF
     462 E0E0      LDI	R30,0
     463 079E      CPC	R25,R30
     464 F421      BNE	0x0469
(0373)         {
(0374)           msg_buffer[1] = STATUS_CMD_OK;
     465 2422      CLR	R2
     466 9220 0076 STS	msg_buffer+1,R2
(0375)         }
     468 C665      RJMP	0x0ACE
(0376)       else
(0377)         {
(0378)           msg_buffer[1] = STATUS_CMD_FAILED;
     469 EC80      LDI	R24,0xC0
     46A 9380 0076 STS	msg_buffer+1,R24
(0379)         }
(0380)     }
     46C C661      RJMP	0x0ACE
(0381)   //////////////////////////////////////
(0382)   //CMD_LEAVE_PROGMODE_ISP
(0383)   //////////////////////////////////////
(0384)   else if (cmd==CMD_LEAVE_PROGMODE_ISP)
     46D 858A      LDD	R24,Y+10
     46E 3181      CPI	R24,0x11
     46F F4A9      BNE	0x0485
(0385)     {
(0386)       prgmode=0;
     470 2422      CLR	R2
     471 9220 0071 STS	prgmode,R2
(0387) 
(0388)       spi_disable();
     473 940E 00CA CALL	_spi_disable
(0389) 
(0390)       LED_RT_OFF;
     475 EF87      LDI	R24,0xF7
     476 EF9F      LDI	R25,0xFF
     477 B222      IN	R2,0x12
     478 2228      AND	R2,R24
     479 BA22      OUT	0x12,R2
(0391)       LED_GN_ON;
     47A 9A92      SBI	0x12,2
(0392) 
(0393)       num_bytes = 2;
     47B E082      LDI	R24,2
     47C E090      LDI	R25,0
     47D 015C      MOVW	R10,R24
(0394)       msg_buffer[0] = CMD_LEAVE_PROGMODE_ISP;
     47E E181      LDI	R24,0x11
     47F 9380 0075 STS	msg_buffer,R24
(0395)       msg_buffer[1] = STATUS_CMD_OK;
     481 2422      CLR	R2
     482 9220 0076 STS	msg_buffer+1,R2
(0396)     }
     484 C649      RJMP	0x0ACE
(0397)   //////////////////////////////////////
(0398)   //CMD_CHIP_ERASE_ISP
(0399)   //////////////////////////////////////
(0400)   else if (cmd==CMD_CHIP_ERASE_ISP)
     485 858A      LDD	R24,Y+10
     486 3182      CPI	R24,0x12
     487 F569      BNE	0x04B5
(0401)     {
(0402)       spi_transfer_8(msg_buffer[3]);
     488 9100 0078 LDS	R16,msg_buffer+3
     48A 940E 0125 CALL	_spi_transfer_8
(0403)       spi_transfer_8(msg_buffer[4]);
     48C 9100 0079 LDS	R16,0x0079
     48E 940E 0125 CALL	_spi_transfer_8
(0404)       spi_transfer_8(msg_buffer[5]);
     490 9100 007A LDS	R16,0x007A
     492 940E 0125 CALL	_spi_transfer_8
(0405)       spi_transfer_8(msg_buffer[6]);
     494 9100 007B LDS	R16,0x007B
     496 940E 0125 CALL	_spi_transfer_8
(0406) 
(0407)       //Newer AVR's seems to have a busy bit
(0408)       //cant test this because I don't have any of these new chips
(0409)       if (msg_buffer[2]==0)
     498 9020 0077 LDS	R2,msg_buffer+2
     49A 2022      TST	R2
     49B F431      BNE	0x04A2
(0410)         {
(0411)           wait_ms(msg_buffer[1]);
     49C 9100 0076 LDS	R16,msg_buffer+1
     49E 2711      CLR	R17
     49F 940E 01E4 CALL	_wait_ms
(0412)         }
     4A1 C009      RJMP	0x04AB
(0413)       else //if(msg_buffer[2]==1)
(0414)         {
(0415)           while (spi_transfer_32(0xF0000000)&1);
     4A2 E000      LDI	R16,0
     4A3 E010      LDI	R17,0
     4A4 E020      LDI	R18,0
     4A5 EF30      LDI	R19,0xF0
     4A6 940E 017B CALL	_spi_transfer_32
     4A8 2EC0      MOV	R12,R16
     4A9 FD00      SBRC	R16,0
     4AA CFF7      RJMP	0x04A2
(0416)         }
(0417) 
(0418)       num_bytes = 2;
     4AB E082      LDI	R24,2
     4AC E090      LDI	R25,0
     4AD 015C      MOVW	R10,R24
(0419)       msg_buffer[0] = CMD_CHIP_ERASE_ISP;
     4AE E182      LDI	R24,0x12
     4AF 9380 0075 STS	msg_buffer,R24
(0420)       msg_buffer[1] = STATUS_CMD_OK;
     4B1 2422      CLR	R2
     4B2 9220 0076 STS	msg_buffer+1,R2
(0421)     }
     4B4 C619      RJMP	0x0ACE
(0422)   //////////////////////////////////////
(0423)   //CMD_PROGRAM_FLASH_ISP
(0424)   //////////////////////////////////////
(0425)   else if (cmd==CMD_PROGRAM_FLASH_ISP)
     4B5 858A      LDD	R24,Y+10
     4B6 3183      CPI	R24,0x13
     4B7 F009      BEQ	0x04B9
     4B8 C1F5      RJMP	0x06AE
(0426)     {
(0427)       block_size = ((unsigned int)msg_buffer[1])<<8;
     4B9 9020 0076 LDS	R2,msg_buffer+1
     4BB 2433      CLR	R3
     4BC 2C32      MOV	R3,R2
     4BD 2422      CLR	R2
     4BE 863F      STD	Y+15,R3
     4BF 862E      STD	Y+14,R2
(0428)       block_size |= msg_buffer[2];
     4C0 9020 0077 LDS	R2,msg_buffer+2
     4C2 2433      CLR	R3
     4C3 840E      LDD	R0,Y+14
     4C4 841F      LDD	R1,Y+15
     4C5 2802      OR	R0,R2
     4C6 2813      OR	R1,R3
     4C7 861F      STD	Y+15,R1
     4C8 860E      STD	Y+14,R0
(0429)       mode = msg_buffer[3];
     4C9 9020 0078 LDS	R2,msg_buffer+3
     4CB 862C      STD	Y+12,R2
(0430) 
(0431)       //Word Mode
(0432)       if ((mode&1) == 0)
     4CC 2C02      MOV	R0,R2
     4CD FC20      SBRC	R2,0
     4CE C0CA      RJMP	0x0599
(0433)         {
(0434)           for (i=0;i<block_size;i++)
     4CF 24EE      CLR	R14
     4D0 24FF      CLR	R15
     4D1 C0C0      RJMP	0x0592
(0435)             {
(0436)               //If we have an uneven byte programm the
(0437)               //high byte
(0438)               if (i&1)
     4D2 01C7      MOVW	R24,R14
     4D3 7081      ANDI	R24,1
     4D4 7090      ANDI	R25,0
     4D5 016C      MOVW	R12,R24
     4D6 3080      CPI	R24,0
     4D7 0789      CPC	R24,R25
     4D8 F031      BEQ	0x04DF
(0439)                 {
(0440)                   spi_transfer_8(msg_buffer[5]|(1<<3));
     4D9 9100 007A LDS	R16,0x007A
     4DB 6008      ORI	R16,0x8
     4DC 940E 0125 CALL	_spi_transfer_8
(0441)                 }
     4DE C004      RJMP	0x04E3
(0442)               else
(0443)                 {
(0444)                   spi_transfer_8(msg_buffer[5]);
     4DF 9100 007A LDS	R16,0x007A
     4E1 940E 0125 CALL	_spi_transfer_8
(0445)                 }
(0446) 
(0447)               spi_transfer_16(address&0xFFFF);
     4E3 EF4F      LDI	R20,0xFF
     4E4 EF5F      LDI	R21,0xFF
     4E5 E060      LDI	R22,0
     4E6 E070      LDI	R23,0
     4E7 9040 006F LDS	R4,address+2
     4E9 9050 0070 LDS	R5,address+3
     4EB 9020 006D LDS	R2,address
     4ED 9030 006E LDS	R3,address+1
     4EF 2224      AND	R2,R20
     4F0 2235      AND	R3,R21
     4F1 2246      AND	R4,R22
     4F2 2257      AND	R5,R23
     4F3 0181      MOVW	R16,R2
     4F4 940E 016D CALL	_spi_transfer_16
(0448)               spi_transfer_8(msg_buffer[i+10]);
     4F6 01C7      MOVW	R24,R14
     4F7 960A      ADIW	R24,0xA
     4F8 8B99      STD	Y+17,R25
     4F9 8B88      STD	Y+16,R24
     4FA E785      LDI	R24,0x75
     4FB E090      LDI	R25,0
     4FC 89E8      LDD	R30,Y+16
     4FD 89F9      LDD	R31,Y+17
     4FE 0FE8      ADD	R30,R24
     4FF 

⌨️ 快捷键说明

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