📄 com2iic.lss
字号:
COM2IIC.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 00000bd8 00000000 00000000 00000094 2**0
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 0000001e 00800060 00000bd8 00000c6c 2**0
CONTENTS, ALLOC, LOAD, DATA
2 .bss 00000046 0080007e 0080007e 00000c8a 2**0
ALLOC
3 .noinit 00000000 008000c4 008000c4 00000c8a 2**0
CONTENTS
4 .eeprom 00000000 00810000 00810000 00000c8a 2**0
CONTENTS
5 .stab 000010b0 00000000 00000000 00000c8c 2**2
CONTENTS, READONLY, DEBUGGING
6 .stabstr 00000b65 00000000 00000000 00001d3c 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
0: 0c 94 2a 00 jmp 0x54
4: 0c 94 45 00 jmp 0x8a
8: 0c 94 45 00 jmp 0x8a
c: 0c 94 45 00 jmp 0x8a
10: 0c 94 45 00 jmp 0x8a
14: 0c 94 45 00 jmp 0x8a
18: 0c 94 45 00 jmp 0x8a
1c: 0c 94 45 00 jmp 0x8a
20: 0c 94 45 00 jmp 0x8a
24: 0c 94 45 00 jmp 0x8a
28: 0c 94 45 00 jmp 0x8a
2c: 0c 94 7c 05 jmp 0xaf8
30: 0c 94 45 00 jmp 0x8a
34: 0c 94 1f 05 jmp 0xa3e
38: 0c 94 45 00 jmp 0x8a
3c: 0c 94 45 00 jmp 0x8a
40: 0c 94 45 00 jmp 0x8a
44: 0c 94 07 01 jmp 0x20e
48: 0c 94 45 00 jmp 0x8a
4c: 0c 94 45 00 jmp 0x8a
50: 0c 94 45 00 jmp 0x8a
00000054 <__ctors_end>:
54: 11 24 eor r1, r1
56: 1f be out 0x3f, r1 ; 63
58: cf e5 ldi r28, 0x5F ; 95
5a: d4 e0 ldi r29, 0x04 ; 4
5c: de bf out 0x3e, r29 ; 62
5e: cd bf out 0x3d, r28 ; 61
00000060 <__do_copy_data>:
60: 10 e0 ldi r17, 0x00 ; 0
62: a0 e6 ldi r26, 0x60 ; 96
64: b0 e0 ldi r27, 0x00 ; 0
66: e8 ed ldi r30, 0xD8 ; 216
68: fb e0 ldi r31, 0x0B ; 11
6a: 02 c0 rjmp .+4 ; 0x70
0000006c <.do_copy_data_loop>:
6c: 05 90 lpm r0, Z+
6e: 0d 92 st X+, r0
00000070 <.do_copy_data_start>:
70: ae 37 cpi r26, 0x7E ; 126
72: b1 07 cpc r27, r17
74: d9 f7 brne .-10 ; 0x6c
00000076 <__do_clear_bss>:
76: 10 e0 ldi r17, 0x00 ; 0
78: ae e7 ldi r26, 0x7E ; 126
7a: b0 e0 ldi r27, 0x00 ; 0
7c: 01 c0 rjmp .+2 ; 0x80
0000007e <.do_clear_bss_loop>:
7e: 1d 92 st X+, r1
00000080 <.do_clear_bss_start>:
80: a4 3c cpi r26, 0xC4 ; 196
82: b1 07 cpc r27, r17
84: e1 f7 brne .-8 ; 0x7e
86: 0c 94 47 00 jmp 0x8e
0000008a <__bad_interrupt>:
8a: 0c 94 00 00 jmp 0x0
0000008e <main>:
extern struct IIC_BUFFER IIC_Buffer_In,IIC_Buffer_Out;
extern U8 ucIICTimeoutCount; // IIC Time out counter
int main(void)
{
8e: ce e5 ldi r28, 0x5E ; 94
90: d4 e0 ldi r29, 0x04 ; 4
92: de bf out 0x3e, r29 ; 62
94: cd bf out 0x3d, r28 ; 61
U8 i;
IIC_Init(IIC_SLAVE_ADDRESS,IIC_BAUDRATE_100K);
96: 61 e0 ldi r22, 0x01 ; 1
98: 81 e0 ldi r24, 0x01 ; 1
9a: 0e 94 a5 00 call 0x14a
SerialInit();
9e: 0e 94 d2 05 call 0xba4
IIC_Buffer_Out.ucDestinationAddress=10;
a2: 8a e0 ldi r24, 0x0A ; 10
a4: 80 93 a7 00 sts 0x00A7, r24
while(1)
{
if(inbufful)
a8: 80 91 b6 00 lds r24, 0x00B6
ac: 86 95 lsr r24
ae: 86 95 lsr r24
b0: 99 27 eor r25, r25
b2: 81 70 andi r24, 0x01 ; 1
b4: 90 70 andi r25, 0x00 ; 0
b6: 00 97 sbiw r24, 0x00 ; 0
b8: 49 f1 breq .+82 ; 0x10c
{// Uart Rx buffer full
while(!IIC_Buffer_Out.ucIICBufferStatus.bEnAccess);
ba: 80 91 a8 00 lds r24, 0x00A8
be: 99 27 eor r25, r25
c0: 81 70 andi r24, 0x01 ; 1
c2: 90 70 andi r25, 0x00 ; 0
c4: 00 97 sbiw r24, 0x00 ; 0
c6: 09 f4 brne .+2 ; 0xca
c8: f8 cf rjmp .-16 ; 0xba
for(i=0;i<ILEN;i++)
ca: 19 82 std Y+1, r1 ; 0x01
cc: 89 81 ldd r24, Y+1 ; 0x01
ce: 8c 30 cpi r24, 0x0C ; 12
d0: 90 f4 brcc .+36 ; 0xf6
{
IIC_Buffer_Out.ucIICBufferStatus.bEnAccess=0;
d2: 80 91 a8 00 lds r24, 0x00A8
d6: 8e 7f andi r24, 0xFE ; 254
d8: 80 93 a8 00 sts 0x00A8, r24
IIC_Buffer_Out.IIC_BUFFER_UNION.ucData[i]=GetByte();
dc: 89 81 ldd r24, Y+1 ; 0x01
de: 99 27 eor r25, r25
e0: 8c 01 movw r16, r24
e2: 0b 56 subi r16, 0x6B ; 107
e4: 1f 4f sbci r17, 0xFF ; 255
e6: 0e 94 d4 04 call 0x9a8
ea: f8 01 movw r30, r16
ec: 80 83 st Z, r24
ee: 89 81 ldd r24, Y+1 ; 0x01
f0: 8f 5f subi r24, 0xFF ; 255
f2: 89 83 std Y+1, r24 ; 0x01
f4: eb cf rjmp .-42 ; 0xcc
}
IIC_Buffer_Out.ucWriteP=i;
f6: 89 81 ldd r24, Y+1 ; 0x01
f8: 80 93 a5 00 sts 0x00A5, r24
IIC_START;
fc: 80 91 56 00 lds r24, 0x0056
100: 85 6a ori r24, 0xA5 ; 165
102: 80 93 56 00 sts 0x0056, r24
106: 8f ef ldi r24, 0xFF ; 255
108: 80 93 7f 00 sts 0x007F, r24
}
if(IIC_Buffer_In.ucIICBufferStatus.bEnAccess)
10c: 80 91 93 00 lds r24, 0x0093
110: 99 27 eor r25, r25
112: 81 70 andi r24, 0x01 ; 1
114: 90 70 andi r25, 0x00 ; 0
116: 00 97 sbiw r24, 0x00 ; 0
118: 39 f2 breq .-114 ; 0xa8
{// Recieved a frame from IIC
IIC_Buffer_In.ucIICBufferStatus.bEnAccess=0;
11a: 80 91 93 00 lds r24, 0x0093
11e: 8e 7f andi r24, 0xFE ; 254
120: 80 93 93 00 sts 0x0093, r24
for(i=0;i<IIC_Buffer_In.ucWriteP;i++)
124: 19 82 std Y+1, r1 ; 0x01
126: 90 91 90 00 lds r25, 0x0090
12a: 89 81 ldd r24, Y+1 ; 0x01
12c: 89 17 cp r24, r25
12e: 08 f0 brcs .+2 ; 0x132
130: bb cf rjmp .-138 ; 0xa8
{
PutByte(IIC_Buffer_In.IIC_BUFFER_UNION.ucData[i]);
132: 89 81 ldd r24, Y+1 ; 0x01
134: 99 27 eor r25, r25
136: fc 01 movw r30, r24
138: e0 58 subi r30, 0x80 ; 128
13a: ff 4f sbci r31, 0xFF ; 255
13c: 80 81 ld r24, Z
13e: 0e 94 9d 03 call 0x73a
142: 89 81 ldd r24, Y+1 ; 0x01
144: 8f 5f subi r24, 0xFF ; 255
146: 89 83 std Y+1, r24 ; 0x01
148: ee cf rjmp .-36 ; 0x126
0000014a <IIC_Init>:
// Output:
// NONE
///////////////////////////////////////////
void IIC_Init(U8 ucSlaveAddr,U8 ucBaudrate)
{
14a: cf 93 push r28
14c: df 93 push r29
14e: cd b7 in r28, 0x3d ; 61
150: de b7 in r29, 0x3e ; 62
152: 23 97 sbiw r28, 0x03 ; 3
154: 0f b6 in r0, 0x3f ; 63
156: f8 94 cli
158: de bf out 0x3e, r29 ; 62
15a: 0f be out 0x3f, r0 ; 63
15c: cd bf out 0x3d, r28 ; 61
15e: 89 83 std Y+1, r24 ; 0x01
160: 6a 83 std Y+2, r22 ; 0x02
unsigned char i;
//Initlize baudrate
TWBR=IIC_BaudrateConfig[ucBaudrate][0];
162: 8a 81 ldd r24, Y+2 ; 0x02
164: 28 2f mov r18, r24
166: 33 27 eor r19, r19
168: c9 01 movw r24, r18
16a: 82 0f add r24, r18
16c: 93 1f adc r25, r19
16e: fc 01 movw r30, r24
170: e0 5a subi r30, 0xA0 ; 160
172: ff 4f sbci r31, 0xFF ; 255
174: 80 81 ld r24, Z
176: 80 93 20 00 sts 0x0020, r24
TWSR=IIC_BaudrateConfig[ucBaudrate][1];
17a: 8a 81 ldd r24, Y+2 ; 0x02
17c: 28 2f mov r18, r24
17e: 33 27 eor r19, r19
180: c9 01 movw r24, r18
182: 82 0f add r24, r18
184: 93 1f adc r25, r19
186: fc 01 movw r30, r24
188: ef 59 subi r30, 0x9F ; 159
18a: ff 4f sbci r31, 0xFF ; 255
18c: 80 81 ld r24, Z
18e: 80 93 21 00 sts 0x0021, r24
//Set IIC Slave address, enable broadcast respond
TWAR=(ucSlaveAddr<<1 | _BV(TWGCE));
192: 89 81 ldd r24, Y+1 ; 0x01
194: 99 27 eor r25, r25
196: 88 0f add r24, r24
198: 99 1f adc r25, r25
19a: 81 60 ori r24, 0x01 ; 1
19c: 80 93 22 00 sts 0x0022, r24
ucIICMode=IIC_MODE_SLAVE_RECEIVE; //Default mode
1a0: 81 e0 ldi r24, 0x01 ; 1
1a2: 80 93 7e 00 sts 0x007E, r24
ucIICError=IIC_ERROR_NOERROR;
1a6: 10 92 94 00 sts 0x0094, r1
//Clear IIC buffer
for(i=0;i<IIC_MAX_BUFFER_LEN;i++)
1aa: 1b 82 std Y+3, r1 ; 0x03
1ac: 8b 81 ldd r24, Y+3 ; 0x03
1ae: 80 31 cpi r24, 0x10 ; 16
1b0: 80 f4 brcc .+32 ; 0x1d2
{
IIC_Buffer_In.IIC_BUFFER_UNION.ucData[i]=0;
1b2: 8b 81 ldd r24, Y+3 ; 0x03
1b4: 99 27 eor r25, r25
1b6: fc 01 movw r30, r24
1b8: e0 58 subi r30, 0x80 ; 128
1ba: ff 4f sbci r31, 0xFF ; 255
1bc: 10 82 st Z, r1
IIC_Buffer_Out.IIC_BUFFER_UNION.ucData[i]=0;
1be: 8b 81 ldd r24, Y+3 ; 0x03
1c0: 99 27 eor r25, r25
1c2: fc 01 movw r30, r24
1c4: eb 56 subi r30, 0x6B ; 107
1c6: ff 4f sbci r31, 0xFF ; 255
1c8: 10 82 st Z, r1
1ca: 8b 81 ldd r24, Y+3 ; 0x03
1cc: 8f 5f subi r24, 0xFF ; 255
1ce: 8b 83 std Y+3, r24 ; 0x03
1d0: ed cf rjmp .-38 ; 0x1ac
}
//Clear buffer status
IIC_Buffer_In.ucReadP=0;
1d2: 10 92 91 00 sts 0x0091, r1
IIC_Buffer_In.ucWriteP=0;
1d6: 10 92 90 00 sts 0x0090, r1
IIC_Buffer_In.ucIICBufferStatus.bEnAccess=0; //In Buffer Disable Access
1da: 80 91 93 00 lds r24, 0x0093
1de: 8e 7f andi r24, 0xFE ; 254
1e0: 80 93 93 00 sts 0x0093, r24
IIC_Buffer_Out.ucReadP=0;
1e4: 10 92 a6 00 sts 0x00A6, r1
IIC_Buffer_Out.ucWriteP=0;
1e8: 10 92 a5 00 sts 0x00A5, r1
IIC_Buffer_Out.ucIICBufferStatus.bEnAccess=1;//Out Buffer Enable Access
1ec: 80 91 a8 00 lds r24, 0x00A8
1f0: 81 60 ori r24, 0x01 ; 1
1f2: 80 93 a8 00 sts 0x00A8, r24
// Clear TWINT , enabel TWI ack ,enable TWI port ,enable TWI Interrupt
TWCR=(_BV(TWINT) | _BV(TWEA) | _BV(TWEN) | _BV(TWIE) );
1f6: 85 ec ldi r24, 0xC5 ; 197
1f8: 80 93 56 00 sts 0x0056, r24
1fc: 23 96 adiw r28, 0x03 ; 3
1fe: 0f b6 in r0, 0x3f ; 63
200: f8 94 cli
202: de bf out 0x3e, r29 ; 62
204: 0f be out 0x3f, r0 ; 63
206: cd bf out 0x3d, r28 ; 61
208: df 91 pop r29
20a: cf 91 pop r28
20c: 08 95 ret
0000020e <__vector_17>:
}
///////////////////////////////////////////
// IIC_handle
// Function: IIC Interrupt handler
// Input:
// NONE
// Output:
// NONE
///////////////////////////////////////////
#ifdef ICC_AVR
void IIC_handler(void)
#endif
#ifdef GCC_AVR
SIGNAL(SIG_2WIRE_SERIAL)
#endif
{
20e: 1f 92 push r1
210: 0f 92 push r0
212: 0f b6 in r0, 0x3f ; 63
214: 0f 92 push r0
216: 11 24 eor r1, r1
218: 2f 93 push r18
21a: 3f 93 push r19
21c: 8f 93 push r24
21e: 9f 93 push r25
220: af 93 push r26
222: bf 93 push r27
224: ef 93 push r30
226: ff 93 push r31
228: cf 93 push r28
22a: df 93 push r29
22c: cd b7 in r28, 0x3d ; 61
22e: de b7 in r29, 0x3e ; 62
230: 23 97 sbiw r28, 0x03 ; 3
232: de bf out 0x3e, r29 ; 62
234: cd bf out 0x3d, r28 ; 61
U8 ucTwiStatus;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -