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

📄 main.lis

📁 很好的制作AVR32 ICE的资料
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 0510           ;       num_bytes = 2;
 0510 82E0              ldi R24,2
 0512 90E0              ldi R25,0
 0514 5C01              movw R10,R24
 0516                   .dbline 394
 0516           ;       msg_buffer[0] = CMD_LEAVE_PROGMODE_ISP;
 0516 81E1              ldi R24,17
 0518 80930800          sts _msg_buffer,R24
 051C                   .dbline 395
 051C           ;       msg_buffer[1] = STATUS_CMD_OK;
 051C 2224              clr R2
 051E 20920900          sts _msg_buffer+1,R2
 0522                   .dbline 396
 0522           ;     }
 0522 49C6              xjmp L138
 0524           L137:
 0524                   .dbline 400
 0524           ;   //////////////////////////////////////
 0524           ;   //CMD_CHIP_ERASE_ISP
 0524           ;   //////////////////////////////////////
 0524           ;   else if (cmd==CMD_CHIP_ERASE_ISP)
 0524 8A85              ldd R24,y+10
 0526 8231              cpi R24,18
 0528 69F5              brne L140
 052A           X50:
 052A                   .dbline 401
 052A           ;     {
 052A                   .dbline 402
 052A           ;       spi_transfer_8(msg_buffer[3]);
 052A 00910B00          lds R16,_msg_buffer+3
 052E 0E940000          xcall _spi_transfer_8
 0532                   .dbline 403
 0532           ;       spi_transfer_8(msg_buffer[4]);
 0532 00910C00          lds R16,_msg_buffer+4
 0536 0E940000          xcall _spi_transfer_8
 053A                   .dbline 404
 053A           ;       spi_transfer_8(msg_buffer[5]);
 053A 00910D00          lds R16,_msg_buffer+5
 053E 0E940000          xcall _spi_transfer_8
 0542                   .dbline 405
 0542           ;       spi_transfer_8(msg_buffer[6]);
 0542 00910E00          lds R16,_msg_buffer+6
 0546 0E940000          xcall _spi_transfer_8
 054A                   .dbline 409
 054A           ; 
 054A           ;       //Newer AVR's seems to have a busy bit
 054A           ;       //cant test this because I don't have any of these new chips
 054A           ;       if (msg_buffer[2]==0)
 054A 20900A00          lds R2,_msg_buffer+2
 054E 2220              tst R2
 0550 31F4              brne L151
 0552           X51:
 0552                   .dbline 410
 0552           ;         {
 0552                   .dbline 411
 0552           ;           wait_ms(msg_buffer[1]);
 0552 00910900          lds R16,_msg_buffer+1
 0556 1127              clr R17
 0558 0E940000          xcall _wait_ms
 055C                   .dbline 412
 055C           ;         }
 055C 09C0              xjmp L147
 055E           L150:
 055E                   .dbline 415
 055E           ;       else //if(msg_buffer[2]==1)
 055E           ;         {
 055E           ;           while (spi_transfer_32(0xF0000000)&1);
 055E           L151:
 055E                   .dbline 415
 055E 00E0              ldi R16,0
 0560 10E0              ldi R17,0
 0562 20E0              ldi R18,0
 0564 30EF              ldi R19,240
 0566 0E940000          xcall _spi_transfer_32
 056A C02E              mov R12,R16
 056C 00FD              sbrc R16,0
 056E F7CF              rjmp L150
 0570           X52:
 0570                   .dbline 416
 0570           ;         }
 0570           L147:
 0570                   .dbline 418
 0570           ; 
 0570           ;       num_bytes = 2;
 0570 82E0              ldi R24,2
 0572 90E0              ldi R25,0
 0574 5C01              movw R10,R24
 0576                   .dbline 419
 0576           ;       msg_buffer[0] = CMD_CHIP_ERASE_ISP;
 0576 82E1              ldi R24,18
 0578 80930800          sts _msg_buffer,R24
 057C                   .dbline 420
 057C           ;       msg_buffer[1] = STATUS_CMD_OK;
 057C 2224              clr R2
 057E 20920900          sts _msg_buffer+1,R2
 0582                   .dbline 421
 0582           ;     }
 0582 19C6              xjmp L141
 0584           L140:
 0584                   .dbline 425
 0584           ;   //////////////////////////////////////
 0584           ;   //CMD_PROGRAM_FLASH_ISP
 0584           ;   //////////////////////////////////////
 0584           ;   else if (cmd==CMD_PROGRAM_FLASH_ISP)
 0584 8A85              ldd R24,y+10
 0586 8331              cpi R24,19
 0588 09F0              breq X143
 058A F5C1              xjmp L154
 058C           X143:
 058C           X53:
 058C                   .dbline 426
 058C           ;     {
 058C                   .dbline 427
 058C           ;       block_size = ((unsigned int)msg_buffer[1])<<8;
 058C 20900900          lds R2,_msg_buffer+1
 0590 3324              clr R3
 0592 322C              mov R3,R2
 0594 2224              clr R2
 0596 3F86              std y+15,R3
 0598 2E86              std y+14,R2
 059A                   .dbline 428
 059A           ;       block_size |= msg_buffer[2];
 059A 20900A00          lds R2,_msg_buffer+2
 059E 3324              clr R3
 05A0 0E84              ldd R0,y+14
 05A2 1F84              ldd R1,y+15
 05A4 0228              or R0,R2
 05A6 1328              or R1,R3
 05A8 1F86              std y+15,R1
 05AA 0E86              std y+14,R0
 05AC                   .dbline 429
 05AC           ;       mode = msg_buffer[3];
 05AC 20900B00          lds R2,_msg_buffer+3
 05B0 2C86              std y+12,R2
 05B2                   .dbline 432
 05B2           ; 
 05B2           ;       //Word Mode
 05B2           ;       if ((mode&1) == 0)
 05B2 022C              mov R0,R2
 05B4 20FC              sbrc R2,0
 05B6 CAC0              rjmp L159
 05B8           X54:
 05B8                   .dbline 433
 05B8           ;         {
 05B8                   .dbline 434
 05B8           ;           for (i=0;i<block_size;i++)
 05B8 EE24              clr R14
 05BA FF24              clr R15
 05BC C0C0              xjmp L164
 05BE           L161:
 05BE                   .dbline 435
 05BE           ;             {
 05BE                   .dbline 438
 05BE           ;               //If we have an uneven byte programm the
 05BE           ;               //high byte
 05BE           ;               if (i&1)
 05BE C701              movw R24,R14
 05C0 8170              andi R24,1
 05C2 9070              andi R25,0
 05C4 6C01              movw R12,R24
 05C6 8030              cpi R24,0
 05C8 8907              cpc R24,R25
 05CA 31F0              breq L165
 05CC           X55:
 05CC                   .dbline 439
 05CC           ;                 {
 05CC                   .dbline 440
 05CC           ;                   spi_transfer_8(msg_buffer[5]|(1<<3));
 05CC 00910D00          lds R16,_msg_buffer+5
 05D0 0860              ori R16,8
 05D2 0E940000          xcall _spi_transfer_8
 05D6                   .dbline 441
 05D6           ;                 }
 05D6 04C0              xjmp L166
 05D8           L165:
 05D8                   .dbline 443
 05D8           ;               else
 05D8           ;                 {
 05D8                   .dbline 444
 05D8           ;                   spi_transfer_8(msg_buffer[5]);
 05D8 00910D00          lds R16,_msg_buffer+5
 05DC 0E940000          xcall _spi_transfer_8
 05E0                   .dbline 445
 05E0           ;                 }
 05E0           L166:
 05E0                   .dbline 447
 05E0           ; 
 05E0           ;               spi_transfer_16(address&0xFFFF);
 05E0 4FEF              ldi R20,255
 05E2 5FEF              ldi R21,255
 05E4 60E0              ldi R22,0
 05E6 70E0              ldi R23,0
 05E8 40900200          lds R4,_address+2
 05EC 50900300          lds R5,_address+2+1
 05F0 20900000          lds R2,_address
 05F4 30900100          lds R3,_address+1
 05F8 2422              and R2,R20
 05FA 3522              and R3,R21
 05FC 4622              and R4,R22
 05FE 5722              and R5,R23
 0600 8101              movw R16,R2
 0602 0E940000          xcall _spi_transfer_16
 0606                   .dbline 448
 0606           ;               spi_transfer_8(msg_buffer[i+10]);
 0606 C701              movw R24,R14
 0608 0A96              adiw R24,10
 060A 998B              std y+17,R25
 060C 888B              std y+16,R24
 060E 80E0              ldi R24,<_msg_buffer
 0610 90E0              ldi R25,>_msg_buffer
 0612 E889              ldd R30,y+16
 0614 F989              ldd R31,y+17
 0616 E80F              add R30,R24
 0618 F91F              adc R31,R25
 061A 0081              ldd R16,z+0
 061C 0E940000          xcall _spi_transfer_8
 0620                   .dbline 451
 0620           ; 
 0620           ;               //Check if we can do polling
 0620           ;               if (msg_buffer[8]!=msg_buffer[i+10])
 0620 80E0              ldi R24,<_msg_buffer
 0622 90E0              ldi R25,>_msg_buffer
 0624 E889              ldd R30,y+16
 0626 F989              ldd R31,y+17
 0628 E80F              add R30,R24
 062A F91F              adc R31,R25
 062C 2080              ldd R2,z+0
 062E 30901000          lds R3,_msg_buffer+8
 0632 3214              cp R3,R2
 0634 A9F0              breq L169
 0636           X56:
 0636                   .dbline 452
 0636           ;                 {
 0636                   .dbline 453
 0636           ;                   polling_address = address&0xFFFF;
 0636 4FEF              ldi R20,255
 0638 5FEF              ldi R21,255
 063A 60E0              ldi R22,0
 063C 70E0              ldi R23,0
 063E 40900200          lds R4,_address+2
 0642 50900300          lds R5,_address+2+1
 0646 20900000          lds R2,_address
 064A 30900100          lds R3,_address+1
 064E 2422              and R2,R20
 0650 3522              and R3,R21
 0652 4622              and R4,R22
 0654 5722              and R5,R23
 0656 2A82              std y+2,R2
 0658 3B82              std y+3,R3
 065A 4C82              std y+4,R4
 065C 5D82              std y+5,R5
 065E                   .dbline 454
 065E           ;                 }
 065E 04C0              xjmp L170
 0660           L169:
 0660                   .dbline 457
 0660           ;               //If not switch the mode hard waiting
 0660           ;               else
 0660           ;                 {
 0660                   .dbline 458
 0660           ;                   mode = (mode&(~0x0E)) | 0x02;
 0660 8C85              ldd R24,y+12
 0662 817F              andi R24,241
 0664 8260              ori R24,2
 0666 8C87              std y+12,R24
 0668                   .dbline 459
 0668           ;                 }
 0668           L170:
 0668                   .dbline 463
 0668           ; 
 0668           ;               //Different polling methods
 0668           ;               //Hard waiting
 0668           ;               if ((mode&0x0E) == 0x02)
 0668 8C85              ldd R24,y+12
 066A 9927              clr R25
 066C 8E70              andi R24,14
 066E 9070              andi R25,0
 0670 998B              std y+17,R25
 0672 888B              std y+16,R24
 0674 8230              cpi R24,2
 0676 E0E0              ldi R30,0
 0678 9E07              cpc R25,R30
 067A 31F4              brne L172
 067C           X57:
 067C                   .dbline 464
 067C           ;                 {
 067C                   .dbline 465
 067C           ;                   wait_ms(msg_buffer[4]);
 067C 00910C00          lds R16,_msg_buffer+4
 0680 1127              clr R17
 0682 0E940000          xcall _wait_ms
 0686                   .dbline 466
 0686           ;                 }
 0686 3CC0              xjmp L173
 0688           L172:
 0688                   .dbline 468
 0688           ;               //Data polling
 0688           ;               else if ((mode&0x0E) == 0x04)
 0688 8889              ldd R24,y+16
 068A 9989              ldd R25,y+17
 068C 8430              cpi R24,4
 068E E0E0              ldi R30,0
 0690 9E07              cpc R25,R30
 0692 F9F4              brne L175
 0694           X58:
 0694                   .dbline 469
 0694           ;                 {
 0694           L177:
 0694                   .dbline 471
 0694           ;                   do
 0694           ;                     {
 0694                   .dbline 474
 0694           ;                       //If we have an uneven byte read the
 0694           ;                       //high byte
 0694           ;                       if (i&1)
 0694 CC20              tst R12
 0696 11F4              brne X59
 0698 DD20              tst R13
 069A 31F0              breq L180
 069C           X59:
 069C                   .dbline 475
 069C           ;                         {
 069C                   .dbline 476
 069C           ;                           spi_transfer_8(msg_buffer[7]|(1<<3));
 069C 00910F00          lds R16,_msg_buffer+7
 06A0 0860              ori R16,8
 06A2 0E940000          xcall _spi_transfer_8
 06A6                   .dbline 477
 06A6           ;                         }
 06A6 04C0              xjmp L181
 06A8           L180:
 06A8                   .dbline 479
 06A8           ;                       else
 06A8           ;                         {
 06A8                   .dbline 480
 06A8           ;                           spi_transfer_8(msg_buffer[7]);
 06A8 00910F00          lds R16,_msg_buffer+7
 06AC 0E940000      

⌨️ 快捷键说明

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