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

📄 main.lst

📁 atmel公司atmega单片机bootloader的源代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
    193          				if( address >= (APP_END>>1) ) // Protect bootloader area.
    194          				{
    195          					sendchar('?');
    196          				} else
    197          				{
    198          					_WAIT_FOR_SPM();
    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.
    201          #pragma diag_default=Pe1053 // Back to default.
    202          				}
    203          
    204          				sendchar('\r'); // Send OK back.
    205          			}
    206          #endif
    207          
    208          #ifndef REMOVE_EEPROM_BYTE_SUPPORT
    209          			// Write EEPROM memory.
    210          			else if (val == 'D')
    211          			{
    212          				_WAIT_FOR_SPM();
    213          				EEARL = address; // Setup EEPROM address.
    214          				EEARH = (address >> 8);
    215          				EEDR = recchar(); // Get byte.
    216          				EECR |= (1<<EEMWE); // Write byte.
    217          				EECR |= (1<<EEWE);
    218          				while (EECR & (1<<EEWE)) // Wait for write operation to finish.
    219          					;
    220          
    221          				address++; // Auto-advance to next EEPROM byte.
    222          				sendchar('\r');// Send OK back.
    223          			}
    224          
    225          
    226          			// Read EEPROM memory.
    227          			else if (val == 'd')
    228          			{
    229          				EEARL = address; // Setup EEPROM address.
    230          				EEARH = (address >> 8);
    231          				EECR |= (1<<EERE); // Read byte...
    232          				sendchar(EEDR); // ...and send it back.
    233          				address++; // Auto-advance to next EEPROM byte.
    234          			}
    235          #endif
    236          
    237          #ifndef REMOVE_FUSE_AND_LOCK_BIT_SUPPORT
    238          			// Write lockbits.
    239          			else if(val=='l')
    240          			{
    241          				_WAIT_FOR_SPM();
    242          				_SET_LOCK_BITS( recchar() ); // Read and set lock bits.
    243          				sendchar('\r'); // Send OK back.
    244          			}
    245          
    246          
    247          			// Read lock bits.
    248          			else if(val=='r')
    249          			{
    250          				_WAIT_FOR_SPM();
    251          				sendchar( _GET_LOCK_BITS() );
    252          			}
    253          
    254          
    255          			// Read fuse bits.
    256          			else if(val=='F')
    257          			{
    258          				_WAIT_FOR_SPM();
    259          				sendchar( _GET_LOW_FUSES() );
    260          			}
    261          
    262          
    263          			// Read high fuse bits.
    264          			else if(val=='N')
    265          			{
    266          				_WAIT_FOR_SPM();
    267          				sendchar( _GET_HIGH_FUSES() );
    268          			}
    269          
    270          
    271          			// Read extended fuse bits.
    272          			else if(val=='Q')
    273          			{
    274          				_WAIT_FOR_SPM();
    275          				sendchar( _GET_EXTENDED_FUSES() );
    276          			}
    277          #endif
    278          
    279          #ifndef REMOVE_AVRPROG_SUPPORT
    280          			// Enter and leave programming mode.
    281          			else if((val=='P')||(val=='L'))
    282          			{
    283          				sendchar('\r'); // Nothing special to do, just answer OK.
    284          			}
    285          
    286          
    287          			// Exit bootloader.
    288          			else if(val=='E')
    289          			{
    290          				_WAIT_FOR_SPM();
    291          				_ENABLE_RWW_SECTION();
    292          				sendchar('\r');
    293          				funcptr(); // Jump to Reset vector 0x0000 in Application Section.
    294          			}
    295          
    296          
    297          			// Get programmer type.
    298          			else if (val=='p')
    299          			{
    300          				sendchar('S'); // Answer 'SERIAL'.
    301          			}
    302          
    303          
    304          			// Return supported device codes.
    305          			else if(val=='t')
    306          			{
    307          				sendchar( PARTCODE ); // Supports only this device, of course.
    308          				sendchar( 0 ); // Send list terminator.
    309          			}
    310          
    311          
    312          			// Set LED, clear LED and set device type.
    313          			else if((val=='x')||(val=='y')||(val=='T'))
    314          			{
    315          				recchar(); // Ignore the command and it's parameter.
    316          				sendchar('\r'); // Send OK back.
    317          			}
    318          #endif
    319          
    320          			// Return programmer identifier.
    321          			else if(val=='S')
    322          			{
    323          				sendchar('A'); // Return 'AVRBOOT'.
    324          				sendchar('V'); // Software identifier (aka programmer signature) is always 7 characters.
    325          				sendchar('R');
    326          				sendchar('B');
    327          				sendchar('O');
    328          				sendchar('O');
    329          				sendchar('T');
    330          			}
    331          
    332          
    333          			// Return software version.
    334          			else if(val=='V')
    335          			{
    336          				sendchar('1');
    337          				sendchar('5');
    338          			}
    339          
    340          
    341          			// Return signature bytes.
    342          			else if(val=='s')
    343          			{
    344          				sendchar( SIGNATURE_BYTE_3 );
    345          				sendchar( SIGNATURE_BYTE_2 );
    346          				sendchar( SIGNATURE_BYTE_1 );
    347          			}
    348          
    349          
    350          			// The last command to accept is ESC (synchronization).
    351          			else if(val!=0x1b)                  // If not ESC, then it is unrecognized...
    352          			{
    353          				sendchar('?');
    354          			}
    355          		} // end: for(;;)
    356          	}
    357          	else
    358          	{
    359          		_WAIT_FOR_SPM();
   \                     ??main_1:
   \   0000000C   B707               IN      R16, 0x37
   \   0000000E   2F10               MOV     R17, R16
   \   00000010   FD10               SBRC    R17, 0
   \   00000012   CFFC               RJMP    ??main_1
    360          		_ENABLE_RWW_SECTION();
   \   00000014   E111               LDI     R17, 17
   \   00000016   2400               CLR     R0
   \   00000018   BF17               OUT     0x37, R17
   \   0000001A   95E8               SPM
    361          		funcptr(); // Jump to Reset vector 0x0000 in Application Section.
   \   0000001C   E0E0               LDI     R30, 0
   \   0000001E   E0F0               LDI     R31, 0
   \   00000020   BFEC               OUT     0x3C, R30
   \   00000022   9519               EICALL
    362          	}
    363          } // end: main
   \   00000024   9624               ADIW    R29:R28, 4
   \   00000026   9508               RET
   \                     ??main_2:
   \   00000028   E509               LDI     R16, 89
   \                     ??main_3:
   \   0000002A   ........           CALL    sendchar
   \                     ??main_0:
   \   0000002E   ........           CALL    recchar
   \   00000032   3601               CPI     R16, 97
   \   00000034   F3C9               BREQ    ??main_2
   \   00000036   3401               CPI     R16, 65
   \   00000038   F459               BRNE    ??main_4
   \   0000003A   ........           CALL    recchar
   \   0000003E   2FA0               MOV     R26, R16
   \   00000040   ........           CALL    recchar
   \   00000044   E020               LDI     R18, 0
   \   00000046   8308               ST      Y, R16
   \   00000048   83A9               STD     Y+1, R26
   \   0000004A   832A               STD     Y+2, R18
   \   0000004C   832B               STD     Y+3, R18
   \   0000004E   C03C               RJMP    ??main_5
   \                     ??main_4:
   \   00000050   3408               CPI     R16, 72
   \   00000052   F471               BRNE    ??main_6
   \   00000054   ........           CALL    recchar
   \   00000058   2FB0               MOV     R27, R16
   \   0000005A   ........           CALL    recchar
   \   0000005E   2FA0               MOV     R26, R16
   \   00000060   ........           CALL    recchar
   \   00000064   E030               LDI     R19, 0
   \   00000066   8308               ST      Y, R16
   \   00000068   83A9               STD     Y+1, R26
   \   0000006A   83BA               STD     Y+2, R27
   \                     ??main_7:
   \   0000006C   833B               STD     Y+3, R19
   \   0000006E   C02C               RJMP    ??main_5
   \                     ??main_6:
   \   00000070   3605               CPI     R16, 101
   \   00000072   F561               BRNE    ??main_8
   \   00000074   E000               LDI     R16, 0
   \   00000076   8308               ST      Y, R16
   \   00000078   8309               STD     Y+1, R16
   \   0000007A   830A               STD     Y+2, R16
   \   0000007C   830B               STD     Y+3, R16
   \   0000007E   C018               RJMP    ??main_9
   \                     ??main_10:
   \   00000080   B707               IN      R16, 0x37
   \   00000082   2F10               MOV     R17, R16
   \   00000084   FD10               SBRC    R17, 0
   \   00000086   CFFC               RJMP    ??main_10
   \   00000088   E003               LDI     R16, 3
   \   0000008A   8148               LD      R20, Y
   \   0000008C   8159               LDD     R21, Y+1
   \   0000008E   816A               LDD     R22, Y+2
   \   00000090   01FA               MOVW    R31:R30, R21:R20
   \   00000092   BF6B               OUT     0x3B, R22
   \   00000094   BF07               OUT     0x37, R16
   \   00000096   95E8               SPM
   \   00000098   8108               LD      R16, Y
   \   0000009A   8119               LDD     R17, Y+1
   \   0000009C   812A               LDD     R18, Y+2
   \   0000009E   813B               LDD     R19, Y+3
   \   000000A0   5000               SUBI    R16, 0
   \   000000A2   4F1F               SBCI    R17, 255
   \   000000A4   4F2F               SBCI    R18, 255
   \   000000A6   4F3F               SBCI    R19, 255
   \   000000A8   8308               ST      Y, R16
   \   000000AA   8319               STD     Y+1, R17
   \   000000AC   832A               STD     Y+2, R18
   \   000000AE   833B               STD     Y+3, R19
   \                     ??main_9:
   \   000000B0   8108               LD      R16, Y
   \   000000B2   8119               LDD     R17, Y+1
   \   000000B4   812A               LDD     R18, Y+2
   \   000000B6   813B               LDD     R19, Y+3
   \   000000B8   3000               CPI     R16, 0
   \   000000BA   EF40               LDI     R20, 240
   \   000000BC   0714               CPC     R17, R20
   \   000000BE   E043               LDI     R20, 3
   \   000000C0   0724               CPC     R18, R20

⌨️ 快捷键说明

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