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

📄 main.lst

📁 atmel公司atmega单片机bootloader的源代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
   \   000000A6   0734               CPC     R19, R20
   \   000000A8   F4D4               BRGE    ??main_7
    115          				{ // NOTE: Here we use address as a byte-address, not word-address, for convenience.
    116          					_WAIT_FOR_SPM();
   \                     ??main_8:
   \   000000AA   B707               IN      R16, 0x37
   \   000000AC   2F10               MOV     R17, R16
   \   000000AE   FD10               SBRC    R17, 0
   \   000000B0   CFFC               RJMP    ??main_8
    117          #pragma diag_suppress=Pe1053 // Suppress warning for conversion from long-type address to flash ptr.
    118          					_PAGE_ERASE( address );
   \   000000B2   E003               LDI     R16, 3
   \   000000B4   8148               LD      R20, Y
   \   000000B6   8159               LDD     R21, Y+1
   \   000000B8   816A               LDD     R22, Y+2
   \   000000BA   01FA               MOVW    R31:R30, R21:R20
   \   000000BC   2F36               MOV     R19, R22
   \   000000BE   BF3B               OUT     0x3B, R19
   \   000000C0   BF07               OUT     0x37, R16
   \   000000C2   95E8               SPM
    119          #pragma diag_default=Pe1053 // Back to default.
    120          				}
   \   000000C4   8108               LD      R16, Y
   \   000000C6   8119               LDD     R17, Y+1
   \   000000C8   812A               LDD     R18, Y+2
   \   000000CA   813B               LDD     R19, Y+3
   \   000000CC   5000               SUBI    R16, 0
   \   000000CE   4F1F               SBCI    R17, 255
   \   000000D0   4F2F               SBCI    R18, 255
   \   000000D2   4F3F               SBCI    R19, 255
   \   000000D4   8308               ST      Y, R16
   \   000000D6   8319               STD     Y+1, R17
   \   000000D8   832A               STD     Y+2, R18
   \   000000DA   833B               STD     Y+3, R19
   \   000000DC   CFDA               RJMP    ??main_6
    121          
    122          				sendchar('\r'); // Send OK back.
   \                     ??main_7:
   \   000000DE   E00D               LDI     R16, 13
   \   000000E0   ........           CALL    sendchar
   \   000000E4   CF98               RJMP    ??main_1
    123          			}
    124          
    125          #ifndef REMOVE_BLOCK_SUPPORT
    126          			// Check block load support.
    127          			else if(val=='b')
   \                     ??main_5:
   \   000000E6   36A2               CPI     R26, 98
   \   000000E8   F451               BRNE    ??main_9
    128          			{
    129          				sendchar('Y'); // Report block load supported.
   \   000000EA   E509               LDI     R16, 89
   \   000000EC   ........           CALL    sendchar
    130          				sendchar((BLOCKSIZE>>8) & 0xFF); // MSB first.
   \   000000F0   E001               LDI     R16, 1
   \   000000F2   ........           CALL    sendchar
    131          				sendchar(BLOCKSIZE&0xFF); // Report BLOCKSIZE (bytes).
   \   000000F6   E000               LDI     R16, 0
   \   000000F8   ........           CALL    sendchar
   \   000000FC   CF8C               RJMP    ??main_1
    132          			}
    133          
    134          
    135          			// Start block load.
    136          			else if(val=='B')
   \                     ??main_9:
   \   000000FE   34A2               CPI     R26, 66
   \   00000100   F489               BRNE    ??main_10
    137          			{
    138          				temp_int = (recchar()<<8) | recchar(); // Get block size.
   \   00000102   ........           CALL    recchar
   \   00000106   2FB0               MOV     R27, R16
   \   00000108   ........           CALL    recchar
   \   0000010C   2F1B               MOV     R17, R27
   \   0000010E   01C8               MOVW    R25:R24, R17:R16
    139          				val = recchar(); // Get memtype.
   \   00000110   ........           CALL    recchar
   \   00000114   2FA0               MOV     R26, R16
    140          				sendchar( BlockLoad(temp_int,val,&address) ); // Block load.
   \   00000116   01AE               MOVW    R21:R20, R29:R28
   \   00000118   2F2A               MOV     R18, R26
   \   0000011A   018C               MOVW    R17:R16, R25:R24
   \   0000011C   ....               RCALL   BlockLoad
   \   0000011E   ........           CALL    sendchar
   \   00000122   CF79               RJMP    ??main_1
    141          			}
    142          
    143          
    144          			// Start block read.
    145          			else if(val=='g')
   \                     ??main_10:
   \   00000124   36A7               CPI     R26, 103
   \   00000126   F479               BRNE    ??main_11
    146          			{
    147          				temp_int = (recchar()<<8) | recchar(); // Get block size.
   \   00000128   ........           CALL    recchar
   \   0000012C   2FB0               MOV     R27, R16
   \   0000012E   ........           CALL    recchar
   \   00000132   2F1B               MOV     R17, R27
   \   00000134   01C8               MOVW    R25:R24, R17:R16
    148          				val = recchar(); // Get memtype
   \   00000136   ........           CALL    recchar
   \   0000013A   2FA0               MOV     R26, R16
    149          				BlockRead(temp_int,val,&address); // Block read
   \   0000013C   01AE               MOVW    R21:R20, R29:R28
   \   0000013E   2F2A               MOV     R18, R26
   \   00000140   018C               MOVW    R17:R16, R25:R24
   \   00000142   ....               RCALL   BlockRead
   \   00000144   CF68               RJMP    ??main_1
    150          			}
    151          #endif
    152          
    153          #ifndef REMOVE_FLASH_BYTE_SUPPORT
    154          			// Read program memory.
    155          			else if(val=='R')
   \                     ??main_11:
   \   00000146   35A2               CPI     R26, 82
   \   00000148   F5B9               BRNE    ??main_12
    156          			{
    157          				// Send high byte, then low byte of flash word.
    158          				_WAIT_FOR_SPM();
   \                     ??main_13:
   \   0000014A   B707               IN      R16, 0x37
   \   0000014C   2F10               MOV     R17, R16
   \   0000014E   FD10               SBRC    R17, 0
   \   00000150   CFFC               RJMP    ??main_13
    159          				_ENABLE_RWW_SECTION();
   \   00000152   E111               LDI     R17, 17
   \   00000154   E000               LDI     R16, 0
   \   00000156   2E00               MOV     R0, R16
   \   00000158   BF17               OUT     0x37, R17
   \   0000015A   95E8               SPM
    160          #pragma diag_suppress=Pe1053 // Suppress warning for conversion from long-type address to flash ptr.
    161          				sendchar( _LOAD_PROGRAM_MEMORY( (address << 1)+1 ) );
   \   0000015C   8108               LD      R16, Y
   \   0000015E   8119               LDD     R17, Y+1
   \   00000160   812A               LDD     R18, Y+2
   \   00000162   0F00               LSL     R16
   \   00000164   1F11               ROL     R17
   \   00000166   1F22               ROL     R18
   \   00000168   5F0F               SUBI    R16, 255
   \   0000016A   4F1F               SBCI    R17, 255
   \   0000016C   4F2F               SBCI    R18, 255
   \   0000016E   01F8               MOVW    R31:R30, R17:R16
   \   00000170   2F32               MOV     R19, R18
   \   00000172   BF3B               OUT     0x3B, R19
   \   00000174   9006               ELPM    R0, Z
   \   00000176   E000               LDI     R16, 0
   \   00000178   BF0B               OUT     0x3B, R16
   \   0000017A   2D00               MOV     R16, R0
   \   0000017C   ........           CALL    sendchar
    162          				sendchar( _LOAD_PROGRAM_MEMORY( (address << 1)+0 ) );
   \   00000180   8108               LD      R16, Y
   \   00000182   8119               LDD     R17, Y+1
   \   00000184   812A               LDD     R18, Y+2
   \   00000186   0F00               LSL     R16
   \   00000188   1F11               ROL     R17
   \   0000018A   1F22               ROL     R18
   \   0000018C   01F8               MOVW    R31:R30, R17:R16
   \   0000018E   2F32               MOV     R19, R18
   \   00000190   BF3B               OUT     0x3B, R19
   \   00000192   9006               ELPM    R0, Z
   \   00000194   2D00               MOV     R16, R0
   \   00000196   E010               LDI     R17, 0
   \   00000198   BF1B               OUT     0x3B, R17
   \   0000019A   ........           CALL    sendchar
    163          #pragma diag_default=Pe1053 // Back to default.
    164          
    165          				address++; // Auto-advance to next Flash word.
   \   0000019E   8108               LD      R16, Y
   \   000001A0   8119               LDD     R17, Y+1
   \   000001A2   812A               LDD     R18, Y+2
   \   000001A4   813B               LDD     R19, Y+3
   \   000001A6   5F0F               SUBI    R16, 255
   \   000001A8   4F1F               SBCI    R17, 255
   \   000001AA   4F2F               SBCI    R18, 255
   \   000001AC   4F3F               SBCI    R19, 255
   \   000001AE   8308               ST      Y, R16
   \   000001B0   8319               STD     Y+1, R17
   \   000001B2   832A               STD     Y+2, R18
   \   000001B4   833B               STD     Y+3, R19
   \   000001B6   CF2F               RJMP    ??main_1
    166          			}
    167          
    168          
    169          			// Write program memory, low byte.
    170          			else if(val=='c')
   \                     ??main_12:
   \   000001B8   36A3               CPI     R26, 99
   \   000001BA   F441               BRNE    ??main_14
    171          			{ // NOTE: Always use this command before sending high byte.
    172          				temp_int=recchar(); // Get low byte for later _FILL_TEMP_WORD.
   \   000001BC   ........           CALL    recchar
   \   000001C0   E010               LDI     R17, 0
   \   000001C2   01C8               MOVW    R25:R24, R17:R16
    173          				sendchar('\r'); // Send OK back.
   \   000001C4   E00D               LDI     R16, 13
   \   000001C6   ........           CALL    sendchar
   \   000001CA   CF25               RJMP    ??main_1
    174          			}
    175          
    176          
    177          			// Write program memory, high byte.
    178          			else if(val=='C')
   \                     ??main_14:
   \   000001CC   34A3               CPI     R26, 67
   \   000001CE   F539               BRNE    ??main_15
    179          			{
    180          				temp_int |= (recchar()<<8); // Get and insert high byte.
   \   000001D0   ........           CALL    recchar
   \   000001D4   2F30               MOV     R19, R16
   \   000001D6   E020               LDI     R18, 0
   \   000001D8   2B82               OR      R24, R18
   \   000001DA   2B93               OR      R25, R19
    181          				_WAIT_FOR_SPM();
   \                     ??main_16:
   \   000001DC   B707               IN      R16, 0x37
   \   000001DE   2F10               MOV     R17, R16
   \   000001E0   FD10               SBRC    R17, 0
   \   000001E2   CFFC               RJMP    ??main_16
    182          #pragma diag_suppress=Pe1053 // Suppress warning for conversion from long-type address to flash ptr.
    183          				_FILL_TEMP_WORD( (address << 1), temp_int ); // Convert word-address to byte-address and fill.
   \   000001E4   E001               LDI     R16, 1
   \   000001E6   8148               LD      R20, Y
   \   000001E8   8159               LDD     R21, Y+1
   \   000001EA   816A               LDD     R22, Y+2
   \   000001EC   0F44               LSL     R20
   \   000001EE   1F55               ROL     R21
   \   000001F0   1F66               ROL     R22
   \   000001F2   01FA               MOVW    R31:R30, R21:R20
   \   000001F4   2F36               MOV     R19, R22
   \   000001F6   BF3B               OUT     0x3B, R19
   \   000001F8   010C               MOVW    R1:R0, R25:R24
   \   000001FA   BF07               OUT     0x37, R16
   \   000001FC   95E8               SPM
    184          #pragma diag_default=Pe1053 // Back to default.
    185          				address++; // Auto-advance to next Flash word.
   \   000001FE   8108               LD      R16, Y
   \   00000200   8119               LDD     R17, Y+1
   \   00000202   812A               LDD     R18, Y+2
   \   00000204   813B               LDD     R19, Y+3
   \   00000206   5F0F               SUBI    R16, 255
   \   00000208   4F1F               SBCI    R17, 255
   \   0000020A   4F2F               SBCI    R18, 255
   \   0000020C   4F3F               SBCI    R19, 255
   \   0000020E   8308               ST      Y, R16
   \   00000210   8319               STD     Y+1, R17
   \   00000212   832A               STD     Y+2, R18
   \   00000214   833B               STD     Y+3, R19
    186          				sendchar('\r'); // Send OK back.
   \   00000216   E00D               LDI     R16, 13
   \   00000218   ........           CALL    sendchar
   \   0000021C   CEFC               RJMP    ??main_1
    187          			}
    188          
    189          
    190          			// Write page.
    191          			else if(val== 'm')
   \                     ??main_15:
   \   0000021E   36AD               CPI     R26, 109

⌨️ 快捷键说明

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