📄 atmega103.lst
字号:
.area bss
--- 0000 .dbfile C:\Documents\Software\AVR\ATmega103\code\buttons.c
--- 0000 _LastButton:
--- 0000 .blkb 2
--- 0001 .dbfile c:/documents/software/avr/atmega103/include/button.h
--- 0001 .dbsym s LastButton _LastButton I
--- 0001 _PushedButton:
--- 0001 .blkb 2
--- 0002 .dbsym s PushedButton _PushedButton I
--- 0002 _Buffer:
--- 0002 .blkb 2
--- 0003 .dbsym s Buffer _Buffer i
.module crc.c
.text
--- 0000 .dbfile C:\Documents\Software\AVR\ATmega103\code\crc.c
.area text
--- 0000 .dbfile C:\Documents\Software\AVR\ATmega103\code\crc.c
--- 0000 .dbfunc s CRCInitialise _CRCInitialise fI
.even
0C11 _CRCInitialise::
0C11 .dbline 20{
; /* ATmega103 crc.c file
;
; Author : Robert Stuart
; Company : PDL Industries Ltd
; Date of Creation : 2 November 1999
; Tested : not yet
;
; Function :
; Performs a 16-bit CRC check on the program memory. Memory locations from
; START_PROGRAM_MEMORY_ADDRESS (0x0000) to END_PROGRAM_MEMORY_ADDRESS - 1 (0xE777)
; are applied to the CRC calculation. At addresses END_PROGRAM_MEMORY_ADDRESS and
; END_PROGRAM_MEMORY_ADDRESS + 1 are 16-bit CRC value, therefore once subtracked
; should give zero. Any non-zero answer applies a memory program fault.
; */
;
; /* include */
; #include "crc.h"
;
; void CRCInitialise( void )
; {
0C11 .dbline 21
; CRC16 = 0;
0C11 2422 clr R2
0C12 2433 clr R3
0C13 92300155 sts _CRC16+1,R3
0C15 92200154 sts _CRC16,R2
0C17 .dbline 22
; ProgramMemory = START_PROGRAM_MEMORY_ADDRESS;
0C17 2422 clr R2
0C18 2433 clr R3
0C19 9230014C sts _ProgramMemory+1,R3
0C1B 9220014B sts _ProgramMemory,R2
0C1D .dbline 24}
; /* starting address */
; }
0C1D L1:
0C1D 9508 ret
.area bss
--- 0000 .dbfile C:\Documents\Software\AVR\ATmega103\code\crc.c
--- 0000 L3:
--- 0000 .blkb 1
--- 0000 L4:
--- 0000 .blkb 2
.area text
--- 000D .dbfile C:\Documents\Software\AVR\ATmega103\code\crc.c
--- 000D .dbfunc s CheckCRC _CheckCRC fI
--- 000D .dbsym s c L4 i
--- 000D .dbsym s i L3 c
; ptr -> R16,R17
.even
0C1E _CheckCRC::
0C1E .dbline 27{
;
; void CheckCRC( void )
; {
0C1E .dbline 32
; static unsigned char i;
; const unsigned char *ptr;
; static unsigned int c;
;
; if ( ProgramMemory < END_PROGRAM_MEMORY_ADDRESS )
0C1E 9190014C lds R25,_ProgramMemory+1
0C20 9180014B lds R24,_ProgramMemory
0C22 3F8D cpi R24,253
0C23 EF8F ldi R24,255
0C24 0798 cpc R25,R24
0C25 F010 brlo X0
0C26 940C0C97 jmp L5
0C28 X0:
0C28 .dbline 33
; {
0C28 .dbline 34
; if ( !CRC16 ) /* reset counter at the start */
0C28 90300155 lds R3,_CRC16+1
0C2A 90200154 lds R2,_CRC16
0C2C 2022 tst R2
0C2D F429 brne L7
0C2E 2033 tst R3
0C2F F419 brne L7
0C30 .dbline 35
; i = 0;
0C30 2422 clr R2
0C31 92200148 sts L3,R2
0C33 L7:
0C33 .dbline 37
;
; if ( !i )
0C33 90200148 lds R2,L3
0C35 2022 tst R2
0C36 F4E1 brne L9
0C37 .dbline 38
; {
0C37 .dbline 39
; ptr = ( unsigned char * ) ProgramMemory++;
0C37 9030014C lds R3,_ProgramMemory+1
0C39 9020014B lds R2,_ProgramMemory
0C3B 2D82 mov R24,R2
0C3C 2D93 mov R25,R3
0C3D 9601 adiw R24,1
0C3E 9390014C sts _ProgramMemory+1,R25
0C40 9380014B sts _ProgramMemory,R24
0C42 2D02 mov R16,R2
0C43 2D13 mov R17,R3
0C44 .dbline 41
; /* read 8-bits from the program memory */
; c = *ptr;
0C44 2FE0 mov R30,R16
0C45 2FF1 mov R31,R17
0C46 95C8 lpm
0C47 2C20 mov R2,R0
0C48 2433 clr R3
0C49 9230014A sts L4+1,R3
0C4B 92200149 sts L4,R2
0C4D .dbline 42
; c <<= 8; /* convert to 16-bit */
0C4D 2C32 mov R3,R2
0C4E 2422 clr R2
0C4F 9230014A sts L4+1,R3
0C51 92200149 sts L4,R2
0C53 .dbline 43
; }
0C53 L9:
0C53 .dbline 45
;
; if ( ( CRC16 ^ c ) & CRC_DIVISOR ) /* adjust crc */
0C53 9030014A lds R3,L4+1
0C55 90200149 lds R2,L4
0C57 91900155 lds R25,_CRC16+1
0C59 91800154 lds R24,_CRC16
0C5B 2582 eor R24,R2
0C5C 2593 eor R25,R3
0C5D 7080 andi R24,0
0C5E 7890 andi R25,128
0C5F 2388 tst R24
0C60 F411 brne X1
0C61 2399 tst R25
0C62 F081 breq L11
0C63 X1:
0C63 .dbline 46
; CRC16 = (CRC16 << 1) ^ CRC_16_MASK;
0C63 E081 ldi R24,1
0C64 EA90 ldi R25,160
0C65 90300155 lds R3,_CRC16+1
0C67 90200154 lds R2,_CRC16
0C69 0C22 lsl R2
0C6A 1C33 rol R3
0C6B 2628 eor R2,R24
0C6C 2639 eor R3,R25
0C6D 92300155 sts _CRC16+1,R3
0C6F 92200154 sts _CRC16,R2
0C71 940C0C7D jmp L12
0C73 L11:
0C73 .dbline 48
; else
; CRC16 <<= 1;
0C73 90300155 lds R3,_CRC16+1
0C75 90200154 lds R2,_CRC16
0C77 0C22 lsl R2
0C78 1C33 rol R3
0C79 92300155 sts _CRC16+1,R3
0C7B 92200154 sts _CRC16,R2
0C7D L12:
0C7D .dbline 49
; c <<= 1;
0C7D 9030014A lds R3,L4+1
0C7F 90200149 lds R2,L4
0C81 0C22 lsl R2
0C82 1C33 rol R3
0C83 9230014A sts L4+1,R3
0C85 92200149 sts L4,R2
0C87 .dbline 51
;
; if ( ++i > 7 )
0C87 91800148 lds R24,L3
0C89 5F8F subi R24,255 ; addi 1
0C8A 2E28 mov R2,R24
0C8B 92200148 sts L3,R2
0C8D E087 ldi R24,7
0C8E 1582 cp R24,R2
0C8F F010 brlo X2
0C90 940C0CE1 jmp L6
0C92 X2:
0C92 .dbline 52
; i = 0;
0C92 2422 clr R2
0C93 92200148 sts L3,R2
0C95 .dbline 53
; }
0C95 940C0CE1 jmp L6
0C97 L5:
0C97 .dbline 54
; else if ( ProgramMemory == END_PROGRAM_MEMORY_ADDRESS )
0C97 9190014C lds R25,_ProgramMemory+1
0C99 9180014B lds R24,_ProgramMemory
0C9B 3F8D cpi R24,253
0C9C EFAF ldi R26,255
0C9D 079A cpc R25,R26
0C9E F011 breq X3
0C9F 940C0CE1 jmp L15
0CA1 X3:
0CA1 .dbline 55
; {
0CA1 .dbline 59
; /* read the last two memory locations are subtack in 16-bit from CRC value, if zero
; then CRC is correct
; */
; ptr = ( unsigned char * ) ProgramMemory++;
0CA1 2E28 mov R2,R24
0CA2 2E39 mov R3,R25
0CA3 9601 adiw R24,1
0CA4 9390014C sts _ProgramMemory+1,R25
0CA6 9380014B sts _ProgramMemory,R24
0CA8 2D02 mov R16,R2
0CA9 2D13 mov R17,R3
0CAA .dbline 60
; CRC16 -= *ptr;
0CAA 2FE0 mov R30,R16
0CAB 2FF1 mov R31,R17
0CAC 95C8 lpm
0CAD 2C20 mov R2,R0
0CAE 2433 clr R3
0CAF 90500155 lds R5,_CRC16+1
0CB1 90400154 lds R4,_CRC16
0CB3 1842 sub R4,R2
0CB4 0853 sbc R5,R3
0CB5 92500155 sts _CRC16+1,R5
0CB7 92400154 sts _CRC16,R4
0CB9 .dbline 61
; ptr = ( unsigned char * ) ProgramMemory++;
0CB9 2E28 mov R2,R24
0CBA 2E39 mov R3,R25
0CBB 9601 adiw R24,1
0CBC 9390014C sts _ProgramMemory+1,R25
0CBE 9380014B sts _ProgramMemory,R24
0CC0 2D02 mov R16,R2
0CC1 2D13 mov R17,R3
0CC2 .dbline 62
; CRC16 -= (*ptr) << 8;
0CC2 2FE0 mov R30,R16
0CC3 2FF1 mov R31,R17
0CC4 95C8 lpm
0CC5 2C20 mov R2,R0
0CC6 2433 clr R3
0CC7 2C32 mov R3,R2
0CC8 2422 clr R2
0CC9 1842 sub R4,R2
0CCA 0853 sbc R5,R3
0CCB 92500155 sts _CRC16+1,R5
0CCD 92400154 sts _CRC16,R4
0CCF .dbline 64
;
; if ( CRC16 )
0CCF 2C24 mov R2,R4
0CD0 2C35 mov R3,R5
0CD1 2022 tst R2
0CD2 F411 brne X4
0CD3 2033 tst R3
0CD4 F039 breq L17
0CD5 X4:
0CD5 .dbline 65
; SETBIT( SystemStatus, BIT(FAULT_CRC_CHECK) );/* flag crc fault therefore program could have been corrupted */
0CD5 91800159 lds R24,_SystemStatus
0CD7 6082 ori R24,2
0CD8 93800159 sts _SystemStatus,R24
0CDA 940C0CE1 jmp L18
0CDC L17:
0CDC .dbline 67
; else
; CLEARBIT( SystemStatus, BIT(FAULT_CRC_CHECK) );
0CDC 91800159 lds R24,_SystemStatus
0CDE 7F8D andi R24,253
0CDF 93800159 sts _SystemStatus,R24
0CE1 L18:
0CE1 .dbline 68
; }
0CE1 L15:
0CE1 L6:
0CE1 .dbline 69}
; }
0CE1 L2:
0CE1 9508 ret
0CE2 .dbsym r ptr 16 pc
.area bss
--- 0001 .dbfile C:\Documents\Software\AVR\ATmega103\code\crc.c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -