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

📄 main.lst

📁 atmel公司atmega单片机bootloader的源代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
   \   00000126   95E8               SPM
    426          #pragma diag_default=Pe1053 // Back to default.
    427          			_WAIT_FOR_SPM();
   \                     ??BlockLoad_12:
   \   00000128   B707               IN      R16, 0x37
   \   0000012A   2F10               MOV     R17, R16
   \   0000012C   FD10               SBRC    R17, 0
   \   0000012E   CFFC               RJMP    ??BlockLoad_12
    428          		}
    429          		_ENABLE_RWW_SECTION();
   \                     ??BlockLoad_11:
   \   00000130   E111               LDI     R17, 17
   \   00000132   2400               CLR     R0
   \   00000134   BF17               OUT     0x37, R17
   \   00000136   95E8               SPM
    430          
    431          		(*address) >>= 1; // Convert address back to Flash words again.
   \   00000138   01F2               MOVW    R31:R30, R5:R4
   \   0000013A   8100               LD      R16, Z
   \   0000013C   8111               LDD     R17, Z+1
   \   0000013E   8122               LDD     R18, Z+2
   \   00000140   8133               LDD     R19, Z+3
   \   00000142   9535               ASR     R19
   \   00000144   9527               ROR     R18
   \   00000146   9517               ROR     R17
   \   00000148   9507               ROR     R16
   \   0000014A   8300               ST      Z, R16
   \   0000014C   8311               STD     Z+1, R17
   \   0000014E   8322               STD     Z+2, R18
   \   00000150   8333               STD     Z+3, R19
   \   00000152   CFA2               RJMP    ??BlockLoad_7
    432          		return '\r'; // Report programming OK
    433          	}
    434          
    435          	// Invalid memory type?
    436          	else
    437          	{
    438          		return '?';
   \                     ??BlockLoad_9:
   \   00000154   E30F               LDI     R16, 63
   \                     ??BlockLoad_8:
   \   00000156   5FDF               SUBI    R29, 255
   \   00000158   E0EA               LDI     R30, 10
   \   0000015A   ........           JMP     ?EPILOGUE_B10_L09
    439          	}
    440          }
    441          
    442          
    443          
    444          /*! \brief  Read block of mem and send to serial port.
    445           *
    446           *  Read 'size' bytes from EEPROM/Flash memory 'address' and
    447           *  send to serial port. If 'mem' == 'E', then 'address' gives
    448           *  the byte address in EEPROM. If 'mem' == 'F', then 'address'
    449           *  gives the word address in Flash.
    450           */

   \                                 In segment FARCODE, align 2, keep-with-next
    451          void BlockRead(unsigned int size, unsigned char mem, long *address)
   \                     BlockRead:
    452          {
   \   00000000   ........           CALL    ?PROLOGUE4_L09
   \   00000004   01C8               MOVW    R25:R24, R17:R16
   \   00000006   01DA               MOVW    R27:R26, R21:R20
    453          	// EEPROM memory type.
    454          	if (mem=='E') // Read EEPROM
   \   00000008   3425               CPI     R18, 69
   \   0000000A   F501               BRNE    ??BlockRead_0
    455          	{
    456          		do
    457          		{
    458          			EEARL = *address; // Setup EEPROM address
   \                     ??BlockRead_1:
   \   0000000C   910D               LD      R16, X+
   \   0000000E   911D               LD      R17, X+
   \   00000010   912D               LD      R18, X+
   \   00000012   9713               SBIW    R27:R26, 3
   \   00000014   BD01               OUT     0x21, R16
    459          			EEARH = ((*address) >> 8);
   \   00000016   910D               LD      R16, X+
   \   00000018   911D               LD      R17, X+
   \   0000001A   912D               LD      R18, X+
   \   0000001C   9713               SBIW    R27:R26, 3
   \   0000001E   BD12               OUT     0x22, R17
    460          			(*address)++; // Select next EEPROM byte
   \   00000020   01FD               MOVW    R31:R30, R27:R26
   \   00000022   8100               LD      R16, Z
   \   00000024   8111               LDD     R17, Z+1
   \   00000026   8122               LDD     R18, Z+2
   \   00000028   8133               LDD     R19, Z+3
   \   0000002A   5F0F               SUBI    R16, 255
   \   0000002C   4F1F               SBCI    R17, 255
   \   0000002E   4F2F               SBCI    R18, 255
   \   00000030   4F3F               SBCI    R19, 255
   \   00000032   8300               ST      Z, R16
   \   00000034   8311               STD     Z+1, R17
   \   00000036   8322               STD     Z+2, R18
   \   00000038   8333               STD     Z+3, R19
    461          			EECR |= (1<<EERE); // Read EEPROM
   \   0000003A   9AF8               SBI     0x1F, 0x00
    462          			sendchar(EEDR); // Transmit EEPROM dat ato PC
   \   0000003C   B500               IN      R16, 0x20
   \   0000003E   ........           CALL    sendchar
    463          
    464          			size--; // Decrease number of bytes to read
   \   00000042   9701               SBIW    R25:R24, 1
    465          		} while (size); // Repeat until all block has been read
   \   00000044   2F08               MOV     R16, R24
   \   00000046   2B09               OR      R16, R25
   \   00000048   F709               BRNE    ??BlockRead_1
   \   0000004A   C049               RJMP    ??BlockRead_2
    466          	}
    467          
    468          	// Flash memory type.
    469          	else if(mem=='F')
   \                     ??BlockRead_0:
   \   0000004C   3426               CPI     R18, 70
   \   0000004E   F009               BREQ    $+2+2
   \   00000050   C046               RJMP    ??BlockRead_2
    470          	{
    471          		(*address) <<= 1; // Convert address to bytes temporarily.
   \   00000052   910D               LD      R16, X+
   \   00000054   911D               LD      R17, X+
   \   00000056   912D               LD      R18, X+
   \   00000058   913C               LD      R19, X
   \   0000005A   9713               SBIW    R27:R26, 3
   \   0000005C   0F00               LSL     R16
   \   0000005E   1F11               ROL     R17
   \   00000060   1F22               ROL     R18
   \   00000062   1F33               ROL     R19
   \   00000064   930D               ST      X+, R16
   \   00000066   931D               ST      X+, R17
   \   00000068   932D               ST      X+, R18
   \   0000006A   933C               ST      X, R19
   \   0000006C   9713               SBIW    R27:R26, 3
    472          
    473          		do
    474          		{
    475          #pragma diag_suppress=Pe1053 // Suppress warning for conversion from long-type address to flash ptr.
    476          			sendchar( _LOAD_PROGRAM_MEMORY(*address) );
   \                     ??BlockRead_3:
   \   0000006E   910D               LD      R16, X+
   \   00000070   911D               LD      R17, X+
   \   00000072   912D               LD      R18, X+
   \   00000074   9713               SBIW    R27:R26, 3
   \   00000076   01F8               MOVW    R31:R30, R17:R16
   \   00000078   BF2B               OUT     0x3B, R18
   \   0000007A   9006               ELPM    R0, Z
   \   0000007C   2D00               MOV     R16, R0
   \   0000007E   E010               LDI     R17, 0
   \   00000080   BF1B               OUT     0x3B, R17
   \   00000082   ........           CALL    sendchar
    477          			sendchar( _LOAD_PROGRAM_MEMORY((*address)+1) );
   \   00000086   910D               LD      R16, X+
   \   00000088   911D               LD      R17, X+
   \   0000008A   912D               LD      R18, X+
   \   0000008C   9713               SBIW    R27:R26, 3
   \   0000008E   5F0F               SUBI    R16, 255
   \   00000090   4F1F               SBCI    R17, 255
   \   00000092   4F2F               SBCI    R18, 255
   \   00000094   01F8               MOVW    R31:R30, R17:R16
   \   00000096   BF2B               OUT     0x3B, R18
   \   00000098   9006               ELPM    R0, Z
   \   0000009A   E000               LDI     R16, 0
   \   0000009C   BF0B               OUT     0x3B, R16
   \   0000009E   2D00               MOV     R16, R0
   \   000000A0   ........           CALL    sendchar
    478          #pragma diag_default=Pe1053 // Back to default.
    479          			(*address) += 2; // Select next word in memory.
   \   000000A4   910D               LD      R16, X+
   \   000000A6   911D               LD      R17, X+
   \   000000A8   912D               LD      R18, X+
   \   000000AA   913C               LD      R19, X
   \   000000AC   5F0E               SUBI    R16, 254
   \   000000AE   4F1F               SBCI    R17, 255
   \   000000B0   4F2F               SBCI    R18, 255
   \   000000B2   4F3F               SBCI    R19, 255
   \   000000B4   933C               ST      X, R19
   \   000000B6   932E               ST      -X, R18
   \   000000B8   931E               ST      -X, R17
   \   000000BA   930E               ST      -X, R16
    480          			size -= 2; // Subtract two bytes from number of bytes to read
   \   000000BC   9702               SBIW    R25:R24, 2
    481          		} while (size); // Repeat until all block has been read
   \   000000BE   2F08               MOV     R16, R24
   \   000000C0   2B09               OR      R16, R25
   \   000000C2   F6A9               BRNE    ??BlockRead_3
    482          
    483          		(*address) >>= 1; // Convert address back to Flash words again.
   \   000000C4   910D               LD      R16, X+
   \   000000C6   911D               LD      R17, X+
   \   000000C8   912D               LD      R18, X+
   \   000000CA   913C               LD      R19, X
   \   000000CC   9713               SBIW    R27:R26, 3
   \   000000CE   9535               ASR     R19
   \   000000D0   9527               ROR     R18
   \   000000D2   9517               ROR     R17
   \   000000D4   9507               ROR     R16
   \   000000D6   930D               ST      X+, R16
   \   000000D8   931D               ST      X+, R17
   \   000000DA   932D               ST      X+, R18
   \   000000DC   933C               ST      X, R19
    484          	}
    485          }
   \                     ??BlockRead_2:
   \   000000DE   E0E4               LDI     R30, 4
   \   000000E0   ........           JMP     ?EPILOGUE_B4_L09
    486          #endif
    487          
    488          
    489          /* end of file */
    490          

   Maximum stack usage in bytes:

     Function             CSTACK RSTACK
     --------             ------ ------
     BlockLoad              266      3
       -> recchar           266      3
       -> recchar           266      3
       -> recchar           266      3
     BlockRead                4      3
       -> sendchar            4      3
       -> sendchar            4      3
       -> sendchar            4      3
     main                     4      3
       -> initbootuart        4      3
       ->   Indirect call     4      3
       -> sendchar            4      3
       -> recchar             4      3
       -> recchar             4      3
       -> recchar             4      3
       -> recchar             4      3
       -> recchar             4      3
       -> recchar             4      3
       -> sendchar            4      3
       -> sendchar            4      3
       -> sendchar            4      3
       -> sendchar            4      3
       -> recchar             4      3
       -> recchar             4      3
       -> recchar             4      3
       -> BlockLoad           4      3
       -> sendchar            4      3
       -> recchar             4      3
       -> recchar             4      3
       -> recchar             4      3
       -> BlockRead           4      3
       -> sendchar            4      3
       -> sendchar            4      3
       -> recchar             4      3
       -> recchar             4      3
       -> sendchar            4      3
       -> recchar             4      3
       -> sendchar            4      3
       -> recchar             4      3
       -> sendchar            4      3
       -> sendchar            4      3
       -> sendchar            4      3
       -> sendchar            4      3
       -> sendchar            4      3
       -> sendchar            4      3
       -> sendchar     

⌨️ 快捷键说明

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