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

📄 main.lst

📁 atmel公司atmega单片机bootloader的源代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
   \   00000220   F521               BRNE    ??main_17
    192          			{
    193          				if( address >= (APP_END>>1) ) // Protect bootloader area.
   \   00000222   8108               LD      R16, Y
   \   00000224   8119               LDD     R17, Y+1
   \   00000226   812A               LDD     R18, Y+2
   \   00000228   813B               LDD     R19, Y+3
   \   0000022A   3000               CPI     R16, 0
   \   0000022C   EF48               LDI     R20, 248
   \   0000022E   0714               CPC     R17, R20
   \   00000230   E041               LDI     R20, 1
   \   00000232   0724               CPC     R18, R20
   \   00000234   E040               LDI     R20, 0
   \   00000236   0734               CPC     R19, R20
   \   00000238   F024               BRLT    ??main_18
    194          				{
    195          					sendchar('?');
   \   0000023A   E30F               LDI     R16, 63
   \   0000023C   ........           CALL    sendchar
   \   00000240   C010               RJMP    ??main_19
    196          				} else
    197          				{
    198          					_WAIT_FOR_SPM();
   \                     ??main_18:
   \   00000242   B707               IN      R16, 0x37
   \   00000244   2F10               MOV     R17, R16
   \   00000246   FD10               SBRC    R17, 0
   \   00000248   CFFC               RJMP    ??main_18
    199          #pragma diag_suppress=Pe1053 // Suppress warning for conversion from long-type address to flash ptr.
    200          					_PAGE_WRITE( address << 1 ); // Convert word-address to byte-address and write.
   \   0000024A   E005               LDI     R16, 5
   \   0000024C   8148               LD      R20, Y
   \   0000024E   8159               LDD     R21, Y+1
   \   00000250   816A               LDD     R22, Y+2
   \   00000252   0F44               LSL     R20
   \   00000254   1F55               ROL     R21
   \   00000256   1F66               ROL     R22
   \   00000258   01FA               MOVW    R31:R30, R21:R20
   \   0000025A   2F36               MOV     R19, R22
   \   0000025C   BF3B               OUT     0x3B, R19
   \   0000025E   BF07               OUT     0x37, R16
   \   00000260   95E8               SPM
    201          #pragma diag_default=Pe1053 // Back to default.
    202          				}
    203          
    204          				sendchar('\r'); // Send OK back.
   \                     ??main_19:
   \   00000262   E00D               LDI     R16, 13
   \   00000264   ........           CALL    sendchar
   \   00000268   CED6               RJMP    ??main_1
    205          			}
    206          #endif
    207          
    208          #ifndef REMOVE_EEPROM_BYTE_SUPPORT
    209          			// Write EEPROM memory.
    210          			else if (val == 'D')
   \                     ??main_17:
   \   0000026A   34A4               CPI     R26, 68
   \   0000026C   F501               BRNE    ??main_20
    211          			{
    212          				_WAIT_FOR_SPM();
   \                     ??main_21:
   \   0000026E   B707               IN      R16, 0x37
   \   00000270   2F10               MOV     R17, R16
   \   00000272   FD10               SBRC    R17, 0
   \   00000274   CFFC               RJMP    ??main_21
    213          				EEARL = address; // Setup EEPROM address.
   \   00000276   8108               LD      R16, Y
   \   00000278   BD01               OUT     0x21, R16
    214          				EEARH = (address >> 8);
   \   0000027A   8119               LDD     R17, Y+1
   \   0000027C   2F01               MOV     R16, R17
   \   0000027E   BD02               OUT     0x22, R16
    215          				EEDR = recchar(); // Get byte.
   \   00000280   ........           CALL    recchar
   \   00000284   BD00               OUT     0x20, R16
    216          				EECR |= (1<<EEMWE); // Write byte.
   \   00000286   9AFA               SBI     0x1F, 0x02
    217          				EECR |= (1<<EEWE);
   \   00000288   9AF9               SBI     0x1F, 0x01
    218          				while (EECR & (1<<EEWE)) // Wait for write operation to finish.
   \                     ??main_22:
   \   0000028A   99F9               SBIC    0x1F, 0x01
   \   0000028C   CFFE               RJMP    ??main_22
    219          					;
    220          
    221          				address++; // Auto-advance to next EEPROM byte.
   \   0000028E   8108               LD      R16, Y
   \   00000290   8119               LDD     R17, Y+1
   \   00000292   812A               LDD     R18, Y+2
   \   00000294   813B               LDD     R19, Y+3
   \   00000296   5F0F               SUBI    R16, 255
   \   00000298   4F1F               SBCI    R17, 255
   \   0000029A   4F2F               SBCI    R18, 255
   \   0000029C   4F3F               SBCI    R19, 255
   \   0000029E   8308               ST      Y, R16
   \   000002A0   8319               STD     Y+1, R17
   \   000002A2   832A               STD     Y+2, R18
   \   000002A4   833B               STD     Y+3, R19
    222          				sendchar('\r');// Send OK back.
   \   000002A6   E00D               LDI     R16, 13
   \   000002A8   ........           CALL    sendchar
   \   000002AC   CEB4               RJMP    ??main_1
    223          			}
    224          
    225          
    226          			// Read EEPROM memory.
    227          			else if (val == 'd')
   \                     ??main_20:
   \   000002AE   36A4               CPI     R26, 100
   \   000002B0   F4B1               BRNE    ??main_23
    228          			{
    229          				EEARL = address; // Setup EEPROM address.
   \   000002B2   8108               LD      R16, Y
   \   000002B4   BD01               OUT     0x21, R16
    230          				EEARH = (address >> 8);
   \   000002B6   8119               LDD     R17, Y+1
   \   000002B8   2F01               MOV     R16, R17
   \   000002BA   BD02               OUT     0x22, R16
    231          				EECR |= (1<<EERE); // Read byte...
   \   000002BC   9AF8               SBI     0x1F, 0x00
    232          				sendchar(EEDR); // ...and send it back.
   \   000002BE   B500               IN      R16, 0x20
   \   000002C0   ........           CALL    sendchar
    233          				address++; // Auto-advance to next EEPROM byte.
   \   000002C4   8108               LD      R16, Y
   \   000002C6   8119               LDD     R17, Y+1
   \   000002C8   812A               LDD     R18, Y+2
   \   000002CA   813B               LDD     R19, Y+3
   \   000002CC   5F0F               SUBI    R16, 255
   \   000002CE   4F1F               SBCI    R17, 255
   \   000002D0   4F2F               SBCI    R18, 255
   \   000002D2   4F3F               SBCI    R19, 255
   \   000002D4   8308               ST      Y, R16
   \   000002D6   8319               STD     Y+1, R17
   \   000002D8   832A               STD     Y+2, R18
   \   000002DA   833B               STD     Y+3, R19
   \   000002DC   CE9C               RJMP    ??main_1
    234          			}
    235          #endif
    236          
    237          #ifndef REMOVE_FUSE_AND_LOCK_BIT_SUPPORT
    238          			// Write lockbits.
    239          			else if(val=='l')
   \                     ??main_23:
   \   000002DE   36AC               CPI     R26, 108
   \   000002E0   F479               BRNE    ??main_24
    240          			{
    241          				_WAIT_FOR_SPM();
   \                     ??main_25:
   \   000002E2   B707               IN      R16, 0x37
   \   000002E4   2F10               MOV     R17, R16
   \   000002E6   FD10               SBRC    R17, 0
   \   000002E8   CFFC               RJMP    ??main_25
    242          				_SET_LOCK_BITS( recchar() ); // Read and set lock bits.
   \   000002EA   ........           CALL    recchar
   \   000002EE   2F10               MOV     R17, R16
   \   000002F0   E009               LDI     R16, 9
   \   000002F2   2E01               MOV     R0, R17
   \   000002F4   BF07               OUT     0x37, R16
   \   000002F6   95E8               SPM
    243          				sendchar('\r'); // Send OK back.
   \   000002F8   E00D               LDI     R16, 13
   \   000002FA   ........           CALL    sendchar
   \   000002FE   CE8B               RJMP    ??main_1
    244          			}
    245          
    246          
    247          			// Read lock bits.
    248          			else if(val=='r')
   \                     ??main_24:
   \   00000300   37A2               CPI     R26, 114
   \   00000302   F469               BRNE    ??main_26
    249          			{
    250          				_WAIT_FOR_SPM();
   \                     ??main_27:
   \   00000304   B707               IN      R16, 0x37
   \   00000306   2F10               MOV     R17, R16
   \   00000308   FD10               SBRC    R17, 0
   \   0000030A   CFFC               RJMP    ??main_27
    251          				sendchar( _GET_LOCK_BITS() );
   \   0000030C   E009               LDI     R16, 9
   \   0000030E   E0E1               LDI     R30, 1
   \   00000310   E0F0               LDI     R31, 0
   \   00000312   BF07               OUT     0x37, R16
   \   00000314   9114               LPM     R17, Z
   \   00000316   2F01               MOV     R16, R17
   \   00000318   ........           CALL    sendchar
   \   0000031C   CE7C               RJMP    ??main_1
    252          			}
    253          
    254          
    255          			// Read fuse bits.
    256          			else if(val=='F')
   \                     ??main_26:
   \   0000031E   34A6               CPI     R26, 70
   \   00000320   F469               BRNE    ??main_28
    257          			{
    258          				_WAIT_FOR_SPM();
   \                     ??main_29:
   \   00000322   B707               IN      R16, 0x37
   \   00000324   2F10               MOV     R17, R16
   \   00000326   FD10               SBRC    R17, 0
   \   00000328   CFFC               RJMP    ??main_29
    259          				sendchar( _GET_LOW_FUSES() );
   \   0000032A   E009               LDI     R16, 9
   \   0000032C   E0E0               LDI     R30, 0
   \   0000032E   E0F0               LDI     R31, 0
   \   00000330   BF07               OUT     0x37, R16
   \   00000332   9114               LPM     R17, Z
   \   00000334   2F01               MOV     R16, R17
   \   00000336   ........           CALL    sendchar
   \   0000033A   CE6D               RJMP    ??main_1
    260          			}
    261          
    262          
    263          			// Read high fuse bits.
    264          			else if(val=='N')
   \                     ??main_28:
   \   0000033C   34AE               CPI     R26, 78
   \   0000033E   F469               BRNE    ??main_30
    265          			{
    266          				_WAIT_FOR_SPM();
   \                     ??main_31:
   \   00000340   B707               IN      R16, 0x37
   \   00000342   2F10               MOV     R17, R16
   \   00000344   FD10               SBRC    R17, 0
   \   00000346   CFFC               RJMP    ??main_31
    267          				sendchar( _GET_HIGH_FUSES() );
   \   00000348   E009               LDI     R16, 9
   \   0000034A   E0E3               LDI     R30, 3
   \   0000034C   E0F0               LDI     R31, 0
   \   0000034E   BF07               OUT     0x37, R16
   \   00000350   9114               LPM     R17, Z
   \   00000352   2F01               MOV     R16, R17
   \   00000354   ........           CALL    sendchar
   \   00000358   CE5E               RJMP    ??main_1
    268          			}
    269          
    270          
    271          			// Read extended fuse bits.
    272          			else if(val=='Q')
   \                     ??main_30:
   \   0000035A   35A1               CPI     R26, 81
   \   0000035C   F469               BRNE    ??main_32
    273          			{
    274          				_WAIT_FOR_SPM();
   \                     ??main_33:
   \   0000035E   B707               IN      R16, 0x37
   \   00000360   2F10               MOV     R17, R16
   \   00000362   FD10               SBRC    R17, 0
   \   00000364   CFFC               RJMP    ??main_33
    275          				sendchar( _GET_EXTENDED_FUSES() );
   \   00000366   E009               LDI     R16, 9
   \   00000368   E0E2               LDI     R30, 2
   \   0000036A   E0F0               LDI     R31, 0
   \   0000036C   BF07               OUT     0x37, R16
   \   0000036E   9114               LPM     R17, Z
   \   00000370   2F01               MOV     R16, R17
   \   00000372   ........           CALL    sendchar

⌨️ 快捷键说明

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