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

📄 main.lis

📁 AVR单片机,STK500下载线制作全套资料,包括程序,电路图
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 04AC                   .dbline 365
 04AC           ;       }
 04AC 5DC5              rjmp L110
 04AE           L109:
 04AE                   .dbline 369
 04AE           ;       //////////////////////////////////////
 04AE           ;       //CMD_CHIP_ERASE_ISP
 04AE           ;       //////////////////////////////////////
 04AE           ;       else if(cmd==CMD_CHIP_ERASE_ISP)
 04AE 8C85              ldd R24,y+12
 04B0 8231              cpi R24,18
 04B2 39F5              brne L112
 04B4                   .dbline 370
 04B4           ;       {
 04B4                   .dbline 371
 04B4           ;               spi_transfer_8(msg_buffer[3]);
 04B4 00910B00          lds R16,_msg_buffer+3
 04B8 00D0              rcall _spi_transfer_8
 04BA                   .dbline 372
 04BA           ;               spi_transfer_8(msg_buffer[4]);
 04BA 00910C00          lds R16,_msg_buffer+4
 04BE 00D0              rcall _spi_transfer_8
 04C0                   .dbline 373
 04C0           ;               spi_transfer_8(msg_buffer[5]);
 04C0 00910D00          lds R16,_msg_buffer+5
 04C4 00D0              rcall _spi_transfer_8
 04C6                   .dbline 374
 04C6           ;               spi_transfer_8(msg_buffer[6]);
 04C6 00910E00          lds R16,_msg_buffer+6
 04CA 00D0              rcall _spi_transfer_8
 04CC                   .dbline 378
 04CC           ;               
 04CC           ;               //Newer AVR's seems to have a busy bit
 04CC           ;               //cant test this because I don't have any of these new chips
 04CC           ;               if(msg_buffer[2]==0)
 04CC 20900A00          lds R2,_msg_buffer+2
 04D0 2220              tst R2
 04D2 29F4              brne L123
 04D4                   .dbline 379
 04D4           ;               {
 04D4                   .dbline 380
 04D4           ;                       wait_ms(msg_buffer[1]);
 04D4 00910900          lds R16,_msg_buffer+1
 04D8 1127              clr R17
 04DA 00D0              rcall _wait_ms
 04DC                   .dbline 381
 04DC           ;               }
 04DC 07C0              rjmp L119
 04DE           X5:
 04DE                   .dbline 383
 04DE           ;               else //if(msg_buffer[2]==1)
 04DE           ;               {
 04DE           L122:
 04DE                   .dbline 384
 04DE           L123:
 04DE                   .dbline 384
 04DE           ;                       while(spi_transfer_32(0xF0000000)&1);
 04DE 00E0              ldi R16,0
 04E0 10E0              ldi R17,0
 04E2 20E0              ldi R18,0
 04E4 30EF              ldi R19,240
 04E6 00D0              rcall _spi_transfer_32
 04E8 00FD              sbrc R16,0
 04EA F9CF              rjmp L122
 04EC                   .dbline 385
 04EC           ;               }               
 04EC           L119:
 04EC                   .dbline 387
 04EC           ;                               
 04EC           ;               num_bytes = 2;
 04EC 82E0              ldi R24,2
 04EE 90E0              ldi R25,0
 04F0 9B87              std y+11,R25
 04F2 8A87              std y+10,R24
 04F4                   .dbline 388
 04F4           ;               msg_buffer[0] = CMD_CHIP_ERASE_ISP;
 04F4 82E1              ldi R24,18
 04F6 80930800          sts _msg_buffer,R24
 04FA                   .dbline 389
 04FA           ;               msg_buffer[1] = STATUS_CMD_OK;          
 04FA 2224              clr R2
 04FC 20920900          sts _msg_buffer+1,R2
 0500                   .dbline 390
 0500           ;       }
 0500 33C5              rjmp L113
 0502           L112:
 0502                   .dbline 394
 0502           ;       //////////////////////////////////////
 0502           ;       //CMD_PROGRAM_FLASH_ISP
 0502           ;       //////////////////////////////////////
 0502           ;       else if(cmd==CMD_PROGRAM_FLASH_ISP)
 0502 8C85              ldd R24,y+12
 0504 8331              cpi R24,19
 0506 09F0              breq X11
 0508 BCC1              rjmp L126
 050A           X11:
 050A                   .dbline 395
 050A           ;       {
 050A                   .dbline 396
 050A           ;               block_size = ((unsigned int)msg_buffer[1])<<8;
 050A A0900900          lds R10,_msg_buffer+1
 050E BB24              clr R11
 0510 BA2C              mov R11,R10
 0512 AA24              clr R10
 0514                   .dbline 397
 0514           ;               block_size |= msg_buffer[2];
 0514 20900A00          lds R2,_msg_buffer+2
 0518 3324              clr R3
 051A A228              or R10,R2
 051C B328              or R11,R3
 051E                   .dbline 398
 051E           ;               mode = msg_buffer[3];
 051E E0900B00          lds R14,_msg_buffer+3
 0522                   .dbline 401
 0522           ;               
 0522           ;               //Word Mode
 0522           ;               if((mode&1) == 0)
 0522 E0FC              sbrc R14,0
 0524 A2C0              rjmp L131
 0526                   .dbline 402
 0526           ;               {               
 0526                   .dbline 403
 0526           ;                       for(i=0;i<block_size;i++)
 0526 CC24              clr R12
 0528 DD24              clr R13
 052A 9AC0              rjmp L136
 052C           L133:
 052C                   .dbline 404
 052C           ;                       {       
 052C                   .dbline 407
 052C           ;                               //If we have an uneven byte programm the
 052C           ;                               //high byte                     
 052C           ;                               if(i&1)
 052C C0FE              sbrs R12,0
 052E 05C0              rjmp L137
 0530                   .dbline 408
 0530           ;                               {
 0530                   .dbline 409
 0530           ;                                       spi_transfer_8(msg_buffer[5]|(1<<3));
 0530 00910D00          lds R16,_msg_buffer+5
 0534 0860              ori R16,8
 0536 00D0              rcall _spi_transfer_8
 0538                   .dbline 410
 0538           ;                               }
 0538 03C0              rjmp L138
 053A           L137:
 053A                   .dbline 412
 053A           ;                               else
 053A           ;                               {
 053A                   .dbline 413
 053A           ;                                       spi_transfer_8(msg_buffer[5]);
 053A 00910D00          lds R16,_msg_buffer+5
 053E 00D0              rcall _spi_transfer_8
 0540                   .dbline 414
 0540           ;                               }
 0540           L138:
 0540                   .dbline 416
 0540           ;                               
 0540           ;                               spi_transfer_16(address&0xFFFF);
 0540 4FEF              ldi R20,255
 0542 5FEF              ldi R21,255
 0544 60E0              ldi R22,0
 0546 70E0              ldi R23,0
 0548 40900200          lds R4,_address+2
 054C 50900300          lds R5,_address+2+1
 0550 20900000          lds R2,_address
 0554 30900100          lds R3,_address+1
 0558 2422              and R2,R20
 055A 3522              and R3,R21
 055C 4622              and R4,R22
 055E 5722              and R5,R23
 0560 8101              movw R16,R2
 0562 00D0              rcall _spi_transfer_16
 0564                   .dbline 417
 0564           ;                               spi_transfer_8(msg_buffer[i+10]);
 0564 80E0              ldi R24,<_msg_buffer
 0566 90E0              ldi R25,>_msg_buffer
 0568 F601              movw R30,R12
 056A 3A96              adiw R30,10
 056C E80F              add R30,R24
 056E F91F              adc R31,R25
 0570 0081              ldd R16,z+0
 0572 00D0              rcall _spi_transfer_8
 0574                   .dbline 420
 0574           ;                               
 0574           ;                               //Check if we can do polling
 0574           ;                               if(msg_buffer[8]!=msg_buffer[i+10])
 0574 80E0              ldi R24,<_msg_buffer
 0576 90E0              ldi R25,>_msg_buffer
 0578 F601              movw R30,R12
 057A 3A96              adiw R30,10
 057C E80F              add R30,R24
 057E F91F              adc R31,R25
 0580 2080              ldd R2,z+0
 0582 30901000          lds R3,_msg_buffer+8
 0586 3214              cp R3,R2
 0588 B1F0              breq L141
 058A                   .dbline 421
 058A           ;                               {
 058A                   .dbline 422
 058A           ;                                       polling_address = address&0xFFFF;
 058A 4FEF              ldi R20,255
 058C 5FEF              ldi R21,255
 058E 60E0              ldi R22,0
 0590 70E0              ldi R23,0
 0592 40900200          lds R4,_address+2
 0596 50900300          lds R5,_address+2+1
 059A 20900000          lds R2,_address
 059E 30900100          lds R3,_address+1
 05A2 2422              and R2,R20
 05A4 3522              and R3,R21
 05A6 4622              and R4,R22
 05A8 5722              and R5,R23
 05AA FE01              movw R30,R28
 05AC 2282              std z+2,R2
 05AE 3382              std z+3,R3
 05B0 4482              std z+4,R4
 05B2 5582              std z+5,R5
 05B4                   .dbline 423
 05B4           ;                               }
 05B4 04C0              rjmp L142
 05B6           L141:
 05B6                   .dbline 426
 05B6           ;                               //If not switch the mode hard waiting
 05B6           ;                               else
 05B6           ;                               {
 05B6                   .dbline 427
 05B6           ;                                       mode = (mode&(~0x0E)) | 0x02;
 05B6 8E2D              mov R24,R14
 05B8 817F              andi R24,241
 05BA 8260              ori R24,2
 05BC E82E              mov R14,R24
 05BE                   .dbline 428
 05BE           ;                               }
 05BE           L142:
 05BE                   .dbline 432
 05BE           ;                               
 05BE           ;                               //Different polling methods
 05BE           ;                               //Hard waiting
 05BE           ;                               if((mode&0x0E) == 0x02)
 05BE 8E2D              mov R24,R14
 05C0 8E70              andi R24,14
 05C2 8230              cpi R24,2
 05C4 29F4              brne L144
 05C6                   .dbline 433
 05C6           ;                               {
 05C6                   .dbline 434
 05C6           ;                                       wait_ms(msg_buffer[4]);
 05C6 00910C00          lds R16,_msg_buffer+4
 05CA 1127              clr R17
 05CC 00D0              rcall _wait_ms
 05CE                   .dbline 435
 05CE           ;                               }
 05CE 2BC0              rjmp L145
 05D0           L144:
 05D0                   .dbline 437
 05D0           ;                               //Data polling
 05D0           ;                               else if((mode&0x0E) == 0x04)
 05D0 8E2D              mov R24,R14
 05D2 8E70              andi R24,14
 05D4 8430              cpi R24,4
 05D6 B9F4              brne L147
 05D8                   .dbline 438
 05D8           ;                               {
 05D8           L149:
 05D8                   .dbline 439
 05D8           ;                                       do{
 05D8                   .dbline 442
 05D8           ;                                               //If we have an uneven byte read the
 05D8           ;                                               //high byte                     
 05D8           ;                                               if(i&1)
 05D8 C0FE              sbrs R12,0
 05DA 05C0              rjmp L152
 05DC                   .dbline 443
 05DC           ;                                               {
 05DC                   .dbline 444
 05DC           ;                                                       spi_transfer_8(msg_buffer[7]|(1<<3));
 05DC 00910F00          lds R16,_msg_buffer+7
 05E0 0860              ori R16,8
 05E2 00D0              rcall _spi_transfer_8
 05E4                   .dbline 445
 05E4           ;                                               }
 05E4 03C0              rjmp L153
 05E6           L152:
 05E6                   .dbline 447
 05E6           ;                                               else
 05E6           ;                                               {
 05E6                   .dbline 448
 05E6           ;                                                       spi_transfer_8(msg_buffer[7]);
 05E6 00910F00          lds R16,_msg_buffer+7
 05EA 00D0              rcall _spi_transfer_8
 05EC                   .dbline 449
 05EC           ;                                               }
 05EC           L153:
 05EC                   .dbline 450
 05EC           ;                                               spi_transfer_16(polling_address);
 05EC FE01              movw R30,R28
 05EE 0281          

⌨️ 快捷键说明

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