?? bldstk500.lst
字號:
__text_start:
__start:
1C2F E001 LDI R16,1
1C30 BF05 OUT 0x35,R16
1C31 E002 LDI R16,2
1C32 BF05 OUT 0x35,R16
1C33 E5CF LDI R28,0x5F
1C34 E0D4 LDI R29,4
1C35 BFCD OUT 0x3D,R28
1C36 BFDE OUT 0x3E,R29
1C37 51C0 SUBI R28,0x10
1C38 40D0 SBCI R29,0
1C39 EA0A LDI R16,0xAA
1C3A 8308 STD Y+0,R16
1C3B 2400 CLR R0
1C3C E6EA LDI R30,0x6A
1C3D E0F0 LDI R31,0
1C3E E011 LDI R17,1
1C3F 3AE3 CPI R30,0xA3
1C40 07F1 CPC R31,R17
1C41 F011 BEQ 0x1C44
1C42 9201 ST R0,Z+
1C43 CFFB RJMP 0x1C3F
1C44 8300 STD Z+0,R16
1C45 E5E4 LDI R30,0x54
1C46 E3F8 LDI R31,0x38
1C47 E6A0 LDI R26,0x60
1C48 E0B0 LDI R27,0
1C49 E318 LDI R17,0x38
1C4A 35EE CPI R30,0x5E
1C4B 07F1 CPC R31,R17
1C4C F021 BEQ 0x1C51
1C4D 95C8 LPM
1C4E 9631 ADIW R30,1
1C4F 920D ST R0,X+
1C50 CFF9 RJMP 0x1C4A
1C51 D056 RCALL _main
_exit:
1C52 CFFF RJMP _exit
FILE: F:\job\stk500\AVRMEG~1\bldSTK500\uart.c
(0001) /****************************************Copyright (c)**************************************************
(0002) **
(0003) ** 開 發(fā) 部
(0004) **
(0005) ** 文 件 名: uart.c
(0006) ** 最后修改日期: 2005-7-9 20:36
(0007) ** 描 述: ATmega16L的操作函數(shù)
(0008) ** 版 本: V1.0
(0009) ** 主 控 芯 片:M16 晶振頻率:7.3728MHZ,
(0010) **********************************************************************************************************/
(0011) #include <iom16v.h>
(0012) #include <macros.h>
(0013) #include "define.h"
(0014) #include "function.h"
(0015) #include "extern.h"
(0016)
(0017) /**********************************************************************
(0018) functionName:putChar(uint8 sentData)
(0019) description:通過串口發(fā)送數(shù)據(jù)sentData
(0020) **********************************************************************/
(0021) void putChar(uint08 sentData)
(0022) {
(0023) while(!(UCSRA&(1<<UDRE)));
_putChar:
sentData --> R16
1C53 9B5D SBIS 0x0B,5
1C54 CFFE RJMP _putChar
(0024) UDR=sentData;
1C55 B90C OUT 0x0C,R16
1C56 9508 RET
(0025) }
(0026)
(0027) /**********************************************************************
(0028) functionName:putChars(uint08 *sentData)
(0029) description:通過串口接受數(shù)據(jù)
(0030) **********************************************************************/
(0031) uint08 getChar(void)
(0032) {
_getChar:
1C57 C00C RJMP 0x1C64
(0033) while(!(UCSRA&BIT(RXC)))
(0034) {
(0035) if(!flag)
1C58 90200060 LDS R2,flag
1C5A 2022 TST R2
1C5B F441 BNE 0x1C64
(0036) if(TCNT1 < 20)
1C5C B58C IN R24,0x2C
1C5D B59D IN R25,0x2D
1C5E 3184 CPI R24,0x14
1C5F E0E0 LDI R30,0
1C60 079E CPC R25,R30
1C61 F410 BCC 0x1C64
(0037) asm("jmp 0x000000\n");
1C62 940C0000 JMP 0x0
1C64 9B5F SBIS 0x0B,7
1C65 CFF2 RJMP 0x1C58
(0038) };
(0039) return(UDR);
1C66 B10C IN R16,0x0C
1C67 9508 RET
FILE: F:\job\stk500\AVRMEG~1\bldSTK500\initial.c
(0001) /****************************************Copyright (c)**************************************************
(0002) **
(0003) ** 開 發(fā) 部
(0004) **
(0005) ** 文 件 名: initial.c
(0006) ** 最后修改日期: 2006-1-23 13:47
(0007) ** 描 述: 初始化程序
(0008) ** 版 本: V1.0
(0009) ** 主 控 芯 片:M16 晶振頻率:7.3728MHZ,
(0010) **********************************************************************************************************/
(0011) #include <iom16v.h>
(0012) #include <macros.h>
(0013) #include "define.h"
(0014) #include "extern.h"
(0015) #include "function.h"
(0016) #include "command.h"
(0017)
(0018)
(0019) /**********************************************************************
(0020) functionName:void paraInit(void)
(0021) description:變量初始化
(0022) **********************************************************************/
(0023) void globalParaInit(void)
(0024) {
(0025) statusMachine = ST_START;
_globalParaInit:
1C68 EF80 LDI R24,0xF0
1C69 93800070 STS statusMachine,R24
(0026) paramControllerInit=0x00;
1C6B 2422 CLR R2
1C6C 92200072 STS paramControllerInit,R2
(0027) prgMode=0;
1C6E 92200071 STS prgMode,R2
1C70 9508 RET
(0028)
(0029) }
(0030) //TIMER1 initialize - prescale:1024
(0031) // WGM: 0) Normal, TOP=0xFFFF
(0032) // desired value: 15Sec
(0033) // actual value: 15.000Sec (0.0%)
(0034) void timer1_init(void)
(0035) {
(0036) TCCR1B = 0x00; //stop
_timer1_init:
1C71 2422 CLR R2
1C72 BC2E OUT 0x2E,R2
(0037) TCNT1H = 0x2D; //setup
1C73 E28D LDI R24,0x2D
1C74 BD8D OUT 0x2D,R24
(0038) TCNT1L = 0x11;
1C75 E181 LDI R24,0x11
1C76 BD8C OUT 0x2C,R24
(0039) OCR1AH = 0xD2;
1C77 ED82 LDI R24,0xD2
1C78 BD8B OUT 0x2B,R24
(0040) OCR1AL = 0xEF;
1C79 EE8F LDI R24,0xEF
1C7A BD8A OUT 0x2A,R24
(0041) OCR1BH = 0xD2;
1C7B ED82 LDI R24,0xD2
1C7C BD89 OUT 0x29,R24
(0042) OCR1BL = 0xEF;
1C7D EE8F LDI R24,0xEF
1C7E BD88 OUT 0x28,R24
(0043) ICR1H = 0xD2;
1C7F ED82 LDI R24,0xD2
1C80 BD87 OUT 0x27,R24
(0044) ICR1L = 0xEF;
1C81 EE8F LDI R24,0xEF
1C82 BD86 OUT 0x26,R24
(0045) TCCR1A = 0x00;
1C83 BC2F OUT 0x2F,R2
(0046) TCCR1B = 0x05; //start Timer
1C84 E085 LDI R24,5
1C85 BD8E OUT 0x2E,R24
1C86 9508 RET
(0047) }
(0048)
(0049) /**********************************************************************
(0050) functionName:void uart0Init(void)
(0051) description:串口初始化函數(shù)
(0052) desired baud rate: UBRRL決定
(0053) UBRRL = 3; //115200
(0054) UBRRL = 7; //57600
(0055) UBRRL = 23; //19200
(0056) UBRRL = 47; //9600
(0057) char size: 8 bit
(0058) parity: Disabled
(0059) **********************************************************************/
(0060) void uart0Init(void)
(0061) {
(0062) UCSRB = 0x00; //disable while setting baud rate
_uart0Init:
1C87 2422 CLR R2
1C88 B82A OUT 0x0A,R2
(0063) UCSRA = 0x02;
1C89 E082 LDI R24,2
1C8A B98B OUT 0x0B,R24
(0064) UCSRC = 0x86;
1C8B E886 LDI R24,0x86
1C8C BD80 OUT 0x20,R24
(0065) UBRRL = BAUD115200; //set baud rate lo
1C8D E083 LDI R24,3
1C8E B989 OUT 0x09,R24
(0066) UBRRH = 0x00; //set baud rate hi
1C8F BC20 OUT 0x20,R2
(0067) // UCSRB = 0x98; //使用中斷
(0068) UCSRB = 0x18;
1C90 E188 LDI R24,0x18
1C91 B98A OUT 0x0A,R24
1C92 9508 RET
(0069)
(0070) }
(0071)
(0072)
(0073)
(0074) /**********************************************************************
(0075) functionName:void portInit(void)
(0076) description:M16 IO初始化
(0077) **********************************************************************/
(0078) void portInit(void)
(0079) {
(0080) PORTA=0xFF;
_portInit:
1C93 EF8F LDI R24,0xFF
1C94 BB8B OUT 0x1B,R24
(0081) DDRA=0x00;
1C95 2422 CLR R2
1C96 BA2A OUT 0x1A,R2
(0082) PORTB=0xFF;
1C97 BB88 OUT 0x18,R24
(0083) DDRB=0x00;
1C98 BA27 OUT 0x17,R2
(0084) PORTC=0xFF;
1C99 BB85 OUT 0x15,R24
(0085) DDRC=0x00;
1C9A BA24 OUT 0x14,R2
(0086) PORTD=0xFF;
1C9B BB82 OUT 0x12,R24
(0087) DDRD=0x00;
1C9C BA21 OUT 0x11,R2
1C9D 9508 RET
(0088) }
(0089)
(0090)
(0091)
(0092)
(0093) /**********************************************************************
(0094) functionName:void allInit(void)
(0095) description:初始化所有的器件以及變量
(0096) **********************************************************************/
(0097) void allInit(void)
(0098) {
(0099) //開始初始化工作
(0100) CLI(); //關(guān)閉中斷源
_allInit:
1C9E 94F8 BCLR 7
(0101) globalParaInit(); //變量初始化
1C9F DFC8 RCALL _globalParaInit
(0102) portInit(); //M16 IO初始化
1CA0 DFF2 RCALL _portInit
(0103) uart0Init(); //串口初始化函數(shù)
1CA1 DFE5 RCALL _uart0Init
(0104) timer1_init();
1CA2 DFCE RCALL _timer1_init
(0105) MCUCR = 0x00;
1CA3 2422 CLR R2
1CA4 BE25 OUT 0x35,R2
(0106) GICR = 0x00;
1CA5 BE2B OUT 0x3B,R2
(0107) TIMSK = 0x00;
1CA6 BE29 OUT 0x39,R2
1CA7 9508 RET
FILE: F:\job\stk500\AVRMEG~1\bldSTK500\main.c
(0001) /****************************************Copyright (c)**************************************************
(0002) **
(0003) ** 小松工程出品 ilan2003@163.com 2006-1-30
(0004) **
(0005) ** 文 件 名: main.c
(0006) ** 描 述: M16_BOOTLOADER
(0007) ** 版 本: V1.0
(0008) ** 主 控 芯 片: M16 晶振頻率:7.3728MHZ, 波特率115200
(0009) ** 編 譯 環(huán) 境:ICCAVR 6.31A
(0010)
(0011) 描 述:使用STK500_2 協(xié)議的bootloader,監(jiān)控芯片 M16,數(shù)據(jù)通訊RS232
(0012) 已經(jīng)非常精簡的使用STK500_2 協(xié)議的MEGA16的bootloader.使用
(0013) ATMEL AVRStudio 4.xx STK500工具的進(jìn)行軟件升級。
(0014)
(0015) 本軟件適合于個人學(xué)習(xí),用于商業(yè)用途建議加加密措施
(0016)
(0017) 注意事項:在升級firmware后,進(jìn)行verify,總是出錯,這是正常現(xiàn)象
(0018) 因為升級的firmware文件不含bootloader程序,而verify時將讀取整片
(0019) flash的內(nèi)容,所以總是校驗出錯。如果你不放心,讀取flash的內(nèi)容和
(0020) 你燒寫的firmware對比一下,看看哪里不一致就是了。
(0021)
(0022) 大家看看有沒有什么寫的不好的地方,請?zhí)岢鰧氋F的意見!
(0023)
(0024) **********************************************************************************************************/
(0025) #include <iom16v.h>
(0026) #include <macros.h>
(0027) #include <string.h>
(0028) #include "define.h"
(0029) #include "function.h"
(0030) #include "command.h"
(0031) #include "para.h"
(0032)
(0033)
(0034)
(0035) /**********************************************************************
(0036) functionName:void main(void)
(0037) description:主函數(shù)
(0038) **********************************************************************/
(0039) void main(void)
(0040) {
(0041) uint08 rec_data;
(0042) static uint16 msgCounter;
(0043) allInit();
_main:
rec_data --> R20
1CA8 940E1C9E CALL _allInit
1CAA C0A6 RJMP 0x1D51
(0044) while(1)
(0045) {
(0046) rec_data=getChar();
1CAB 940E1C57 CALL _getChar
1CAD 2F40 MOV R20,R16
(0047) if(statusMachine == ST_START)
1CAE 91800070 LDS R24,statusMachine
1CB0 3F80 CPI R24,0xF0
1CB1 F479 BNE 0x1CC1
(0048) {
(0049) flag = 1;
1CB2 E081 LDI R24,1
1CB3 93800060 STS flag,R24
(0050) TCCR1B = 0x00;
1CB5 2422 CLR R2
1CB6 BC2E OUT 0x2E,R2
(0051) if(rec_data==MESSAGE_START)
1CB7 310B CPI R16,0x1B
1CB8 F009 BEQ 0x1CBA
1CB9 C097 RJMP 0x1D51
(0052) {
(0053) statusMachine = ST_GET_SEQ_NUM;
1CBA EF81 LDI R24,0xF1
1CBB 93800070 STS statusMachine,R24
(0054) checkSum = MESSAGE_START;
1CBD E18B LDI R24,0x1B
1CBE 93800075 STS checkSum,R24
(0055) }
(0056) }
1CC0 C090 RJMP 0x1D51
(0057) else if(statusMachine == ST_GET_SEQ_NUM)
1CC1 91800070 LDS R24,statusMachine
1CC3 3F81 CPI R24,0xF1
1CC4 F459 BNE 0x1CD0
(0058) {
(0059) seqNumber = rec_data;
1CC5 93400076 STS seqNumber,R20
(0060) checkSum ^= rec_data;
1CC7 90200075 LDS R2,checkSum
1CC9 2624 EOR R2,R20
1CCA 92200075 STS checkSum,R2
(0061) statusMachine = ST_MSG_SIZE_1;
1CCC EF82 LDI R24,0xF2
1CCD 93800070 STS statusMachine,R24
(0062) }
1CCF C081 RJMP 0x1D51
(0063) else if(statusMachine == ST_MSG_SIZE_1)
1CD0 91800070 LDS R24,statusMachine
1CD2 3F82 CPI R24,0xF2
1CD3 F4A9 BNE 0x1CE9
(0064) {
(0065) msgSize = rec_data;
1CD4 2E24 MOV R2,R20
1CD5 2433 CLR R3
1CD6 9230006F STS msgSize+1,R3
1CD8 9220006E STS msgSize,R2
(0066) msgSize <<=8;
1CDA 2C32 MOV R3,R2
1CDB 2422 CLR R2
1CDC 9230006F STS msgSize+1,R3
1CDE 9220006E STS msgSize,R2
(0067) checkSum ^= rec_data;
1CE0 90200075 LDS R2,checkSum
1CE2 2624 EOR R2,R20
1CE3 92200075 STS checkSum,R2
(0068) statusMachine = ST_MSG_SIZE_2;
1CE5 EF83 LDI R24,0xF3
1CE6 93800070 STS statusMachine,R24
(0069) }
1CE8 C068 RJMP 0x1D51
(0070) else if(statusMachine == ST_MSG_SIZE_2)
1CE9 91800070 LDS R24,statusMachine
1CEB 3F83 CPI R24,0xF3
1CEC F4A9 BNE 0x1D02
(0071) {
(0072) msgSize |= rec_data;
1CED 2E24 MOV R2,R20
1CEE 2433 CLR R3
1CEF 9040006E LDS R4,msgSize
1CF1 9050006F LDS R5,msgSize+1
1CF3 2842 OR R4,R2
1CF4 2853 OR R5,R3
1CF5 9250006F STS msgSize+1,R5
1CF7 9240006E STS msgSize,R4
(0073) checkSum ^= rec_data;
1CF9 90200075 LDS R2,checkSum
1CFB 2624 EOR R2,R20
1CFC 92200075 STS checkSum,R2
(0074) statusMachine = ST_GET_TOKEN;
1CFE EF84 LDI R24,0xF4
1CFF 93800070 STS statusMachine,R24
(0075) }
1D01 C04F RJMP 0x1D51
(0076) else if(statusMachine == ST_GET_TOKEN)
1D02 91800070 LDS R24,statusMachine
1D04 3F84 CPI R24,0xF4
1D05 F4A9 BNE 0x1D1B
(0077) {
(0078) if(rec_data==TOKEN)
1D06 304E CPI R20,0xE
1D07 F479 BNE 0x1D17
(0079) {
(0080) checkSum ^= rec_data;
1D08 90200075 LDS R2,checkSum
1D0A 2624 EOR R2,R20
1D0B 92200075 STS checkSum,R2
(0081) statusMachine = ST_GET_DATA;
1D0D EF85 LDI R24,0xF5
1D0E 93800070 STS statusMachine,R24
(0082) msgCounter=0;
1D10 2422 CLR R2
1D11 2433 CLR R3
1D12 9230006B STS msgCounter+1,R3
1D14 9220006A STS msgCounter,R2
(0083) }
1D16 C03A RJMP 0x1D51
(0084) else
(0085) {
(0086) statusMachine = ST_START;
1D17 EF80 LDI R24,0xF0
1D18 93800070 STS statusMachine,R24
(0087) }
(0088) }
1D1A C036 RJMP 0x1D51
(0089) else if(statusMachine == ST_GET_DATA)
1D1B 91800070 LDS R24,statusMachine
1D1D 3F85 CPI R24,0xF5
1D1E F521 BNE 0x1D43
(0090) {
(0091) msg_buffer[msgCounter++]=rec_data;
1D1F 9020006A LDS R2,msgCounter
1D21 9030006B LDS R3,msgCounter+1
1D23 01C1 MOVW R24,R2
1D24 9601 ADIW R24,1
1D25 9390006B STS msgCounter+1,R25
1D27 9380006A STS msgCounter,R24
1D29 E787 LDI R24,0x77
1D2A E090 LDI R25,0
1D2B 01F1 MOVW R30,R2
1D2C 0FE8 ADD R30,R24
1D2D 1FF9 ADC R31,R25
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -