?? main.lis
字號:
.module main.c
.area text(rom, con, rel)
0000 .dbfile F:\job\stk500\AVRMEG~1\bldSTK500\main.c
.area data(ram, con, rel)
0000 .dbfile F:\job\stk500\AVRMEG~1\bldSTK500\main.c
0000 _flag::
0000 .blkb 1
.area idata
0000 00 .byte 0
.area data(ram, con, rel)
0001 .dbfile F:\job\stk500\AVRMEG~1\bldSTK500\main.c
0001 .dbfile F:\job\stk500\AVRMEG~1\bldSTK500\para.h
0001 .dbsym e flag _flag c
.area bss(ram, con, rel)
0000 .dbfile F:\job\stk500\AVRMEG~1\bldSTK500\para.h
0000 L2:
0000 .blkb 2
.area text(rom, con, rel)
0000 .dbfile F:\job\stk500\AVRMEG~1\bldSTK500\para.h
0000 .dbfile F:\job\stk500\AVRMEG~1\bldSTK500\main.c
0000 .dbfunc e main _main fV
0000 .dbsym s msgCounter L2 i
0000 ; rec_data -> R20
.even
0000 _main::
0000 .dbline -1
0000 .dbline 40
0000 ; /****************************************Copyright (c)**************************************************
0000 ; **
0000 ; ** 小松工程出品 ilan2003@163.com 2006-1-30
0000 ; **
0000 ; ** 文 件 名: main.c
0000 ; ** 描 述: M16_BOOTLOADER
0000 ; ** 版 本: V1.0
0000 ; ** 主 控 芯 片: M16 晶振頻率:7.3728MHZ, 波特率115200
0000 ; ** 編 譯 環 境:ICCAVR 6.31A
0000 ;
0000 ; 描 述:使用STK500_2 協議的bootloader,監控芯片 M16,數據通訊RS232
0000 ; 已經非常精簡的使用STK500_2 協議的MEGA16的bootloader.使用
0000 ; ATMEL AVRStudio 4.xx STK500工具的進行軟件升級。
0000 ;
0000 ; 本軟件適合于個人學習,用于商業用途建議加加密措施
0000 ;
0000 ; 注意事項:在升級firmware后,進行verify,總是出錯,這是正常現象
0000 ; 因為升級的firmware文件不含bootloader程序,而verify時將讀取整片
0000 ; flash的內容,所以總是校驗出錯。如果你不放心,讀取flash的內容和
0000 ; 你燒寫的firmware對比一下,看看哪里不一致就是了。
0000 ;
0000 ; 大家看看有沒有什么寫的不好的地方,請提出寶貴的意見!
0000 ;
0000 ; **********************************************************************************************************/
0000 ; #include <iom16v.h>
0000 ; #include <macros.h>
0000 ; #include <string.h>
0000 ; #include "define.h"
0000 ; #include "function.h"
0000 ; #include "command.h"
0000 ; #include "para.h"
0000 ;
0000 ;
0000 ;
0000 ; /**********************************************************************
0000 ; functionName:void main(void)
0000 ; description:主函數
0000 ; **********************************************************************/
0000 ; void main(void)
0000 ; {
0000 .dbline 43
0000 ; uint08 rec_data;
0000 ; static uint16 msgCounter;
0000 ; allInit();
0000 0E940000 xcall _allInit
0004 A6C0 xjmp L4
0006 L3:
0006 .dbline 45
0006 ; while(1)
0006 ; {
0006 .dbline 46
0006 ; rec_data=getChar();
0006 0E940000 xcall _getChar
000A 402F mov R20,R16
000C .dbline 47
000C ; if(statusMachine == ST_START)
000C 80910600 lds R24,_statusMachine
0010 803F cpi R24,240
0012 79F4 brne L6
0014 .dbline 48
0014 ; {
0014 .dbline 49
0014 ; flag = 1;
0014 81E0 ldi R24,1
0016 80930000 sts _flag,R24
001A .dbline 50
001A ; TCCR1B = 0x00;
001A 2224 clr R2
001C 2EBC out 0x2e,R2
001E .dbline 51
001E ; if(rec_data==MESSAGE_START)
001E 0B31 cpi R16,27
0020 09F0 breq X1
0022 97C0 xjmp L7
0024 X1:
0024 .dbline 52
0024 ; {
0024 .dbline 53
0024 ; statusMachine = ST_GET_SEQ_NUM;
0024 81EF ldi R24,241
0026 80930600 sts _statusMachine,R24
002A .dbline 54
002A ; checkSum = MESSAGE_START;
002A 8BE1 ldi R24,27
002C 80930B00 sts _checkSum,R24
0030 .dbline 55
0030 ; }
0030 .dbline 56
0030 ; }
0030 90C0 xjmp L7
0032 L6:
0032 .dbline 57
0032 ; else if(statusMachine == ST_GET_SEQ_NUM)
0032 80910600 lds R24,_statusMachine
0036 813F cpi R24,241
0038 59F4 brne L10
003A .dbline 58
003A ; {
003A .dbline 59
003A ; seqNumber = rec_data;
003A 40930C00 sts _seqNumber,R20
003E .dbline 60
003E ; checkSum ^= rec_data;
003E 20900B00 lds R2,_checkSum
0042 2426 eor R2,R20
0044 20920B00 sts _checkSum,R2
0048 .dbline 61
0048 ; statusMachine = ST_MSG_SIZE_1;
0048 82EF ldi R24,242
004A 80930600 sts _statusMachine,R24
004E .dbline 62
004E ; }
004E 81C0 xjmp L11
0050 L10:
0050 .dbline 63
0050 ; else if(statusMachine == ST_MSG_SIZE_1)
0050 80910600 lds R24,_statusMachine
0054 823F cpi R24,242
0056 A9F4 brne L12
0058 .dbline 64
0058 ; {
0058 .dbline 65
0058 ; msgSize = rec_data;
0058 242E mov R2,R20
005A 3324 clr R3
005C 30920500 sts _msgSize+1,R3
0060 20920400 sts _msgSize,R2
0064 .dbline 66
0064 ; msgSize <<=8;
0064 322C mov R3,R2
0066 2224 clr R2
0068 30920500 sts _msgSize+1,R3
006C 20920400 sts _msgSize,R2
0070 .dbline 67
0070 ; checkSum ^= rec_data;
0070 20900B00 lds R2,_checkSum
0074 2426 eor R2,R20
0076 20920B00 sts _checkSum,R2
007A .dbline 68
007A ; statusMachine = ST_MSG_SIZE_2;
007A 83EF ldi R24,243
007C 80930600 sts _statusMachine,R24
0080 .dbline 69
0080 ; }
0080 68C0 xjmp L13
0082 L12:
0082 .dbline 70
0082 ; else if(statusMachine == ST_MSG_SIZE_2)
0082 80910600 lds R24,_statusMachine
0086 833F cpi R24,243
0088 A9F4 brne L14
008A .dbline 71
008A ; {
008A .dbline 72
008A ; msgSize |= rec_data;
008A 242E mov R2,R20
008C 3324 clr R3
008E 40900400 lds R4,_msgSize
0092 50900500 lds R5,_msgSize+1
0096 4228 or R4,R2
0098 5328 or R5,R3
009A 50920500 sts _msgSize+1,R5
009E 40920400 sts _msgSize,R4
00A2 .dbline 73
00A2 ; checkSum ^= rec_data;
00A2 20900B00 lds R2,_checkSum
00A6 2426 eor R2,R20
00A8 20920B00 sts _checkSum,R2
00AC .dbline 74
00AC ; statusMachine = ST_GET_TOKEN;
00AC 84EF ldi R24,244
00AE 80930600 sts _statusMachine,R24
00B2 .dbline 75
00B2 ; }
00B2 4FC0 xjmp L15
00B4 L14:
00B4 .dbline 76
00B4 ; else if(statusMachine == ST_GET_TOKEN)
00B4 80910600 lds R24,_statusMachine
00B8 843F cpi R24,244
00BA A9F4 brne L16
00BC .dbline 77
00BC ; {
00BC .dbline 78
00BC ; if(rec_data==TOKEN)
00BC 4E30 cpi R20,14
00BE 79F4 brne L18
00C0 .dbline 79
00C0 ; {
00C0 .dbline 80
00C0 ; checkSum ^= rec_data;
00C0 20900B00 lds R2,_checkSum
00C4 2426 eor R2,R20
00C6 20920B00 sts _checkSum,R2
00CA .dbline 81
00CA ; statusMachine = ST_GET_DATA;
00CA 85EF ldi R24,245
00CC 80930600 sts _statusMachine,R24
00D0 .dbline 82
00D0 ; msgCounter=0;
00D0 2224 clr R2
00D2 3324 clr R3
00D4 30920100 sts L2+1,R3
00D8 20920000 sts L2,R2
00DC .dbline 83
00DC ; }
00DC 3AC0 xjmp L17
00DE L18:
00DE .dbline 85
00DE ; else
00DE ; {
00DE .dbline 86
00DE ; statusMachine = ST_START;
00DE 80EF ldi R24,240
00E0 80930600 sts _statusMachine,R24
00E4 .dbline 87
00E4 ; }
00E4 .dbline 88
00E4 ; }
00E4 36C0 xjmp L17
00E6 L16:
00E6 .dbline 89
00E6 ; else if(statusMachine == ST_GET_DATA)
00E6 80910600 lds R24,_statusMachine
00EA 853F cpi R24,245
00EC 21F5 brne L20
00EE .dbline 90
00EE ; {
00EE .dbline 91
00EE ; msg_buffer[msgCounter++]=rec_data;
00EE 20900000 lds R2,L2
00F2 30900100 lds R3,L2+1
00F6 C101 movw R24,R2
00F8 0196 adiw R24,1
00FA 90930100 sts L2+1,R25
00FE 80930000 sts L2,R24
0102 80E0 ldi R24,<_msg_buffer
0104 90E0 ldi R25,>_msg_buffer
0106 F101 movw R30,R2
0108 E80F add R30,R24
010A F91F adc R31,R25
010C 4083 std z+0,R20
010E .dbline 92
010E ; checkSum ^= rec_data;
010E 20900B00 lds R2,_checkSum
0112 2426 eor R2,R20
0114 20920B00 sts _checkSum,R2
0118 .dbline 93
0118 ; if(msgCounter==msgSize)
0118 20900400 lds R2,_msgSize
011C 30900500 lds R3,_msgSize+1
0120 40900000 lds R4,L2
0124 50900100 lds R5,L2+1
0128 4214 cp R4,R2
012A 5304 cpc R5,R3
012C 91F4 brne L21
012E .dbline 94
012E ; {
012E .dbline 95
012E ; statusMachine = ST_GET_CHECK;
012E 86EF ldi R24,246
0130 80930600 sts _statusMachine,R24
0134 .dbline 96
0134 ; }
0134 .dbline 97
0134 ; }
0134 0EC0 xjmp L21
0136 L20:
0136 .dbline 98
0136 ; else if(statusMachine == ST_GET_CHECK)
0136 80910600 lds R24,_statusMachine
013A 863F cpi R24,246
013C 51F4 brne L24
013E .dbline 99
013E ; {
013E .dbline 100
013E ; if(rec_data == checkSum)
013E 20900B00 lds R2,_checkSum
0142 4215 cp R20,R2
0144 19F4 brne L26
0146 .dbline 101
0146 ; {
0146 .dbline 102
0146 ; packageProcess(seqNumber);
0146 00910C00 lds R16,_seqNumber
014A 05D0 xcall _packageProcess
014C .dbline 103
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -