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

📄 main.lis

📁 Atmeag16 bootloader 测试程序 测试通过
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .module main.c
                        .area text(rom, con, rel)
 0000                   .dbfile C:\DOCUME~1\zhuji\桌面\AVR_BO~1.2\main.c
 0000                   .dbfunc e FlashLoad _FlashLoad fV
                        .even
 0000           _FlashLoad::
 0000                   .dbline -1
 0000                   .dbline 63
 0000           ; #include <macros.h>
 0000           ; #include "assembly.h"
 0000           ;  
 0000           ; #define  ChipType     Atmega16       
 0000           ;       
 0000           ; //*********************************************************
 0000           ; //选择BOOT区大小  此必须与ICC options中的选项相对应
 0000           ; //#define  BootSize     'a'    //128   
 0000           ; //#define  BootSize     'b'    //256
 0000           ; //#define  BootSize     'c'    //512
 0000           ; #define    BootSize       'd'    //1024
 0000           ; //选择BootLoad版本号
 0000           ; #define  BootVer        'f'    //1.0版本
 0000           ; 
 0000           ; //**********************************************************
 0000           ; 
 0000           ; #define  Atmega16       0x31
 0000           ; 
 0000           ; //*****************************************************************************
 0000           ; #define  InteClk                 //是否使用内部时钟
 0000           ; #define  OscAddress     0x1fff   //时钟校准值存储地址
 0000           ; 
 0000           ; //*****************************************************************************
 0000           ; //7.3728M时钟下的波特率为19200的设置,此设置可根据ICC生成,选对芯片,时钟,波特率既可
 0000           ; //由此语句调用UBRR = BAU;
 0000           ; #define  BAU  23    // 7.3728M 19200
 0000           ; //#define  BAU  191 // 7.3728M 2400
 0000           ; //#define  BAU  95  // 7.3728M 4800
 0000           ; //#define  BAU  47  // 7.3728M 9600
 0000           ; //#define  BAU  31  // 7.3728M 14400
 0000           ; //#define  BAU  23  // 7.3728M 19200
 0000           ; //#define  BAU  15  // 7.3728M 28800
 0000           ; 
 0000           ; //#define  BAU  38  // 12M 19200
 0000           ; 
 0000           ; //*****************************************************************************
 0000           ; 
 0000           ; #include  <iom16v.h>
 0000           ; #define   PageByte             128    
 0000           ; #define   AddressShift         7
 0000           ; #define       INTVECREG                GICR
 0000           ; 
 0000           ; 
 0000           ; void          FlashLoad        (void);
 0000           ; void          GetPageNumber    (void);
 0000           ; void          ExecCode         (void);
 0000           ; char          GetPage          (void);
 0000           ; void          WriteFlash       (void);
 0000           ; char          CheckFlash       (void);
 0000           ; unsigned char IsChar           (void);
 0000           ; void          SendChar         (unsigned char c);
 0000           ; void          delay            (void);                 //1ms延时函数
 0000           ; unsigned char RecChar          (void);
 0000           ; 
 0000           ; unsigned char PageBuffer[PageByte];
 0000           ; unsigned int  RealPageAddress;
 0000           ; unsigned int  PageAddress;
 0000           ; 
 0000           ; /*****************************************************************************/
 0000           ; //Flash编程                                                                                
 0000           ; /*****************************************************************************/
 0000           ; void FlashLoad(void)
 0000           ;   {
 0000                   .dbline 64
 0000           ;     SendChar('!');
 0000 01E2              ldi R16,33
 0002 D8D0              rcall _SendChar
 0004 19C0              rjmp L3
 0006           L2:
 0006                   .dbline 66
 0006           ;     while (1)
 0006           ;     {
 0006                   .dbline 67
 0006           ;        GetPageNumber();
 0006 1AD0              rcall _GetPageNumber
 0008                   .dbline 69
 0008           ; 
 0008           ;        if (RealPageAddress == 0xffff) 
 0008 80910200          lds R24,_RealPageAddress
 000C 90910300          lds R25,_RealPageAddress+1
 0010 8F3F              cpi R24,255
 0012 EFEF              ldi R30,255
 0014 9E07              cpc R25,R30
 0016 09F4              brne L5
 0018                   .dbline 70
 0018           ;          return;
 0018 10C0              rjmp L1
 001A           L5:
 001A                   .dbline 72
 001A           ;         
 001A           ;        if (GetPage())
 001A 26D0              rcall _GetPage
 001C 0023              tst R16
 001E 51F0              breq L7
 0020                   .dbline 73
 0020           ;         {
 0020                   .dbline 74
 0020           ;               WriteFlash();
 0020 5DD0              rcall _WriteFlash
 0022                   .dbline 75
 0022           ;           if (CheckFlash()) 
 0022 8DD0              rcall _CheckFlash
 0024 0023              tst R16
 0026 19F0              breq L9
 0028                   .dbline 76
 0028           ;                 SendChar('!');
 0028 01E2              ldi R16,33
 002A C4D0              rcall _SendChar
 002C 05C0              rjmp L8
 002E           L9:
 002E                   .dbline 78
 002E           ;           else 
 002E           ;                 SendChar('@');
 002E 00E4              ldi R16,64
 0030 C1D0              rcall _SendChar
 0032                   .dbline 79
 0032           ;         }
 0032 02C0              rjmp L8
 0034           L7:
 0034                   .dbline 81
 0034           ;        else 
 0034           ;          SendChar('@');
 0034 00E4              ldi R16,64
 0036 BED0              rcall _SendChar
 0038           L8:
 0038                   .dbline 82
 0038           L3:
 0038                   .dbline 65
 0038 E6CF              rjmp L2
 003A           X0:
 003A                   .dbline -2
 003A                   .dbline 83
 003A           ;     }
 003A           ;   }
 003A           L1:
 003A                   .dbline 0 ; func end
 003A 0895              ret
 003C                   .dbend
 003C                   .dbfunc e GetPageNumber _GetPageNumber fV
 003C           ;   PageAddressL -> R20
 003C           ;   PageAddressH -> R22
                        .even
 003C           _GetPageNumber::
 003C 00D0              rcall push_gset2
 003E                   .dbline -1
 003E                   .dbline 87
 003E           ; 
 003E           ; /*****************************************************************************/
 003E           ; void GetPageNumber(void)
 003E           ;   {
 003E                   .dbline 91
 003E           ;     unsigned char PageAddressH;
 003E           ;     unsigned char PageAddressL;
 003E           ; 
 003E           ;     PageAddressH = RecChar();
 003E B6D0              rcall _RecChar
 0040 602F              mov R22,R16
 0042                   .dbline 93
 0042           ; 
 0042           ;     PageAddressL = RecChar();
 0042 B4D0              rcall _RecChar
 0044 402F              mov R20,R16
 0046                   .dbline 95
 0046           ; 
 0046           ;     RealPageAddress=(int)((PageAddressH << 8) + PageAddressL);
 0046 362E              mov R3,R22
 0048 242E              mov R2,R20
 004A 30920300          sts _RealPageAddress+1,R3
 004E 20920200          sts _RealPageAddress,R2
 0052                   .dbline 96
 0052           ;       PageAddress=RealPageAddress<<AddressShift;
 0052 27E0              ldi R18,7
 0054 30E0              ldi R19,0
 0056 022D              mov R16,R2
 0058 132D              mov R17,R3
 005A 00D0              rcall lsl16
 005C 10930100          sts _PageAddress+1,R17
 0060 00930000          sts _PageAddress,R16
 0064                   .dbline -2
 0064                   .dbline 103
 0064           ; #ifdef RAMPZ_FLAG
 0064           ;     if (PageAddressH) 
 0064           ;          RAMPZ = 1; 
 0064           ;     else 
 0064           ;          RAMPZ = 0;
 0064           ; #endif        
 0064           ;   }
 0064           L11:
 0064 00D0              rcall pop_gset2
 0066                   .dbline 0 ; func end
 0066 0895              ret
 0068                   .dbsym r PageAddressL 20 c
 0068                   .dbsym r PageAddressH 22 c
 0068                   .dbend
 0068                   .dbfunc e GetPage _GetPage fc
 0068           ;       CheckSum -> R20
 0068           ;  LocalCheckSum -> R22
 0068           ;              i -> R10
                        .even
 0068           _GetPage::
 0068 00D0              rcall push_gset3
 006A                   .dbline -1
 006A                   .dbline 107
 006A           ; 
 006A           ; /*****************************************************************************/
 006A           ; char GetPage(void)
 006A           ;   {
 006A                   .dbline 109
 006A           ;     unsigned char i;
 006A           ;     unsigned char LocalCheckSum = 0;
 006A 6627              clr R22
 006C                   .dbline 110
 006C           ;     unsigned char CheckSum = 0;
 006C 4427              clr R20
 006E                   .dbline 112
 006E           ; 
 006E           ;     for (i=0;i<PageByte/2;i++)
 006E AA24              clr R10
 0070 12C0              rjmp L16
 0072           X1:
 0072                   .dbline 113
 0072           ;       {
 0072           L17:
 0072                   .dbline 114
 0072           L18:
 0072                   .dbline 114
 0072 96D0              rcall _IsChar
 0074 0023              tst R16
 0076 E9F3              breq L17
 0078                   .dbline 115
 0078 99D0              rcall _RecChar
 007A 80E0              ldi R24,<_PageBuffer
 007C 90E0              ldi R25,>_PageBuffer
 007E EA2D              mov R30,R10
 0080 FF27              clr R31
 0082 E80F              add R30,R24
 0084 F91F              adc R31,R25
 0086 0083              std z+0,R16
 0088                   .dbline 116
 0088 EA2D              mov R30,R10
 008A FF27              clr R31
 008C E80F              add R30,R24
 008E F91F              adc R31,R25
 0090 2080              ldd R2,z+0
 0092 6225              eor R22,R2
 0094                   .dbline 117
 0094           L14:
 0094                   .dbline 112
 0094 A394              inc R10
 0096           L16:
 0096                   .dbline 112
 0096 8A2D              mov R24,R10
 0098 8034              cpi R24,64
 009A 58F3              brlo L18
 009C                   .dbline 118
 009C           ;        while(!IsChar());
 009C           ;        PageBuffer[i]=RecChar();
 009C           ;        LocalCheckSum ^= PageBuffer[i];
 009C           ;       }
 009C           ;       for (i=0;i<PageByte/2;i++)
 009C AA24              clr R10
 009E 12C0              rjmp L23
 00A0           X2:
 00A0                   .dbline 119
 00A0           ;       {
 00A0           L24:
 00A0                   .dbline 120
 00A0           L25:
 00A0                   .dbline 120
 00A0 7FD0              rcall _IsChar
 00A2 0023              tst R16
 00A4 E9F3              breq L24
 00A6                   .dbline 121
 00A6 82D0              rcall _RecChar
 00A8 80E0              ldi R24,<_PageBuffer+64
 00AA 90E0              ldi R25,>_PageBuffer+64
 00AC EA2D              mov R30,R10
 00AE FF27              clr R31
 00B0 E80F              add R30,R24
 00B2 F91F              adc R31,R25
 00B4 0083              std z+0,R16
 00B6                   .dbline 122

⌨️ 快捷键说明

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