0,0 → 1,942 |
GAS LISTING /tmp/ccQb65z2.s page 1 |
|
|
1 .file "I2CInterface.c" |
2 .arch atmega8 |
3 __SREG__ = 0x3f |
4 __SP_H__ = 0x3e |
5 __SP_L__ = 0x3d |
6 __tmp_reg__ = 0 |
7 __zero_reg__ = 1 |
8 .global __do_copy_data |
9 .global __do_clear_bss |
10 .stabs "/home/kaklik/projects/programy/Atmel_C/AVRcam/",100,0,2,.Ltext0 |
11 .stabs "I2CInterface.c",100,0,2,.Ltext0 |
12 .text |
13 .Ltext0: |
14 .stabs "gcc2_compiled.",60,0,0,0 |
15 .stabs "int:t(0,1)=r(0,1);-32768;32767;",128,0,0,0 |
16 .stabs "char:t(0,2)=@s8;r(0,2);0;255;",128,0,0,0 |
17 .stabs "long int:t(0,3)=@s32;r(0,3);020000000000;017777777777;",128,0,0,0 |
18 .stabs "unsigned int:t(0,4)=r(0,4);0;0177777;",128,0,0,0 |
19 .stabs "long unsigned int:t(0,5)=@s32;r(0,5);0;037777777777;",128,0,0,0 |
20 .stabs "long long int:t(0,6)=@s64;r(0,6);01000000000000000000000;0777777777777777777777;",128,0,0, |
21 .stabs "long long unsigned int:t(0,7)=@s64;r(0,7);0;01777777777777777777777;",128,0,0,0 |
22 .stabs "short int:t(0,8)=r(0,8);-32768;32767;",128,0,0,0 |
23 .stabs "short unsigned int:t(0,9)=r(0,9);0;0177777;",128,0,0,0 |
24 .stabs "signed char:t(0,10)=@s8;r(0,10);-128;127;",128,0,0,0 |
25 .stabs "unsigned char:t(0,11)=@s8;r(0,11);0;255;",128,0,0,0 |
26 .stabs "float:t(0,12)=r(0,1);4;0;",128,0,0,0 |
27 .stabs "double:t(0,13)=r(0,1);4;0;",128,0,0,0 |
28 .stabs "long double:t(0,14)=r(0,1);4;0;",128,0,0,0 |
29 .stabs "void:t(0,15)=(0,15)",128,0,0,0 |
30 .stabs "/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/io.h",130,0,0,0 |
31 .stabs "/usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/sfr_defs.h",130,0,0,0 |
32 .stabs "/usr/lib/gcc/avr/4.1.0/../../../../avr/include/inttypes.h",130,0,0,0 |
33 .stabs "/usr/lib/gcc/avr/4.1.0/../../../../avr/include/stdint.h",130,0,0,0 |
34 .stabs "int8_t:t(4,1)=(0,10)",128,0,116,0 |
35 .stabs "uint8_t:t(4,2)=(0,11)",128,0,117,0 |
36 .stabs "int16_t:t(4,3)=(0,1)",128,0,118,0 |
37 .stabs "uint16_t:t(4,4)=(0,4)",128,0,119,0 |
38 .stabs "int32_t:t(4,5)=(0,3)",128,0,120,0 |
39 .stabs "uint32_t:t(4,6)=(0,5)",128,0,121,0 |
40 .stabs "int64_t:t(4,7)=(0,6)",128,0,122,0 |
41 .stabs "uint64_t:t(4,8)=(0,7)",128,0,123,0 |
42 .stabs "intptr_t:t(4,9)=(4,3)",128,0,135,0 |
43 .stabs "uintptr_t:t(4,10)=(4,4)",128,0,140,0 |
44 .stabs "int_least8_t:t(4,11)=(4,1)",128,0,152,0 |
45 .stabs "uint_least8_t:t(4,12)=(4,2)",128,0,157,0 |
46 .stabs "int_least16_t:t(4,13)=(4,3)",128,0,162,0 |
47 .stabs "uint_least16_t:t(4,14)=(4,4)",128,0,167,0 |
48 .stabs "int_least32_t:t(4,15)=(4,5)",128,0,172,0 |
49 .stabs "uint_least32_t:t(4,16)=(4,6)",128,0,177,0 |
50 .stabs "int_least64_t:t(4,17)=(4,7)",128,0,182,0 |
51 .stabs "uint_least64_t:t(4,18)=(4,8)",128,0,187,0 |
52 .stabs "int_fast8_t:t(4,19)=(4,1)",128,0,200,0 |
53 .stabs "uint_fast8_t:t(4,20)=(4,2)",128,0,205,0 |
54 .stabs "int_fast16_t:t(4,21)=(4,3)",128,0,210,0 |
55 .stabs "uint_fast16_t:t(4,22)=(4,4)",128,0,215,0 |
56 .stabs "int_fast32_t:t(4,23)=(4,5)",128,0,220,0 |
57 .stabs "uint_fast32_t:t(4,24)=(4,6)",128,0,225,0 |
GAS LISTING /tmp/ccQb65z2.s page 2 |
|
|
58 .stabs "int_fast64_t:t(4,25)=(4,7)",128,0,230,0 |
59 .stabs "uint_fast64_t:t(4,26)=(4,8)",128,0,235,0 |
60 .stabs "intmax_t:t(4,27)=(4,7)",128,0,249,0 |
61 .stabs "uintmax_t:t(4,28)=(4,8)",128,0,254,0 |
62 .stabn 162,0,0,0 |
63 .stabs "int_farptr_t:t(3,1)=(4,5)",128,0,76,0 |
64 .stabs "uint_farptr_t:t(3,2)=(4,6)",128,0,80,0 |
65 .stabn 162,0,0,0 |
66 .stabn 162,0,0,0 |
67 .stabn 162,0,0,0 |
68 .stabs "CamConfig.h",130,0,0,0 |
69 .stabs "I2CInterface.h",130,0,0,0 |
70 .stabs "CommonDefs.h",130,0,0,0 |
71 .stabs "bool_t:t(7,1)=(0,11)",128,0,56,0 |
72 .stabn 162,0,0,0 |
73 .stabs "i2cCmd_t:t(6,1)=(6,2)=s2configReg:(0,11),0,8;data:(0,11),8,8;;",128,0,53,0 |
74 .stabn 162,0,0,0 |
75 .stabn 162,0,0,0 |
76 .stabs "I2CInt_init:F(0,15)",36,0,85,I2CInt_init |
77 .global I2CInt_init |
78 .type I2CInt_init, @function |
79 I2CInt_init: |
80 .stabd 46,0,0 |
1:I2CInterface.c **** /* |
2:I2CInterface.c **** Copyright (C) 2004 John Orlando |
3:I2CInterface.c **** |
4:I2CInterface.c **** AVRcam: a small real-time image processing engine. |
5:I2CInterface.c **** |
6:I2CInterface.c **** This program is free software; you can redistribute it and/or |
7:I2CInterface.c **** modify it under the terms of the GNU General Public |
8:I2CInterface.c **** License as published by the Free Software Foundation; either |
9:I2CInterface.c **** version 2 of the License, or (at your option) any later version. |
10:I2CInterface.c **** |
11:I2CInterface.c **** This program is distributed in the hope that it will be useful, |
12:I2CInterface.c **** but WITHOUT ANY WARRANTY; without even the implied warranty of |
13:I2CInterface.c **** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
14:I2CInterface.c **** General Public License for more details. |
15:I2CInterface.c **** |
16:I2CInterface.c **** You should have received a copy of the GNU General Public |
17:I2CInterface.c **** License along with this program; if not, write to the Free Software |
18:I2CInterface.c **** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
19:I2CInterface.c **** |
20:I2CInterface.c **** For more information on the AVRcam, please contact: |
21:I2CInterface.c **** |
22:I2CInterface.c **** john@jrobot.net |
23:I2CInterface.c **** |
24:I2CInterface.c **** or go to www.jrobot.net for more details regarding the system. |
25:I2CInterface.c **** */ |
26:I2CInterface.c **** /*********************************************************** |
27:I2CInterface.c **** Module Name: I2CInterface.c |
28:I2CInterface.c **** Module Date: 4/10/2004 |
29:I2CInterface.c **** Module Auth: John Orlando |
30:I2CInterface.c **** |
31:I2CInterface.c **** Description: This module is responsible for providing a |
32:I2CInterface.c **** low-level interface to the I2C hardware resident on the |
33:I2CInterface.c **** mega8 processor (also known as the Two-Wire Interface, |
34:I2CInterface.c **** or TWI). The interface is needed to configure the |
GAS LISTING /tmp/ccQb65z2.s page 3 |
|
|
35:I2CInterface.c **** needed registers in the OV6620 camera. This interface |
36:I2CInterface.c **** is interrupt-driven based on the events that should |
37:I2CInterface.c **** occur upon successful writing of an I2C register. |
38:I2CInterface.c **** |
39:I2CInterface.c **** Revision History: |
40:I2CInterface.c **** Date Rel Ver. Notes |
41:I2CInterface.c **** 4/10/2004 0.1 Module created |
42:I2CInterface.c **** 6/30/2004 1.0 Initial release for Circuit Cellar |
43:I2CInterface.c **** contest. |
44:I2CInterface.c **** |
45:I2CInterface.c **** ***********************************************************/ |
46:I2CInterface.c **** |
47:I2CInterface.c **** /* Includes */ |
48:I2CInterface.c **** #include <avr/io.h> |
49:I2CInterface.c **** #include <util/twi.h> |
50:I2CInterface.c **** #include <avr/interrupt.h> |
51:I2CInterface.c **** #include "CamConfig.h" |
52:I2CInterface.c **** #include "CommonDefs.h" |
53:I2CInterface.c **** |
54:I2CInterface.c **** /* Local Variables */ |
55:I2CInterface.c **** |
56:I2CInterface.c **** /* These variables are used as storage space for the current |
57:I2CInterface.c **** I2C command being sent over the interface. They need to |
58:I2CInterface.c **** be volatile since they are dealt with an the TWI ISR */ |
59:I2CInterface.c **** volatile static unsigned char twi_address; |
60:I2CInterface.c **** volatile static unsigned char *twi_data; |
61:I2CInterface.c **** volatile static unsigned char twi_ddr; |
62:I2CInterface.c **** volatile static unsigned char twi_bytes; |
63:I2CInterface.c **** volatile static unsigned char status; |
64:I2CInterface.c **** volatile static unsigned char retry_cnt; |
65:I2CInterface.c **** |
66:I2CInterface.c **** /* Local Structures and Typedefs */ |
67:I2CInterface.c **** |
68:I2CInterface.c **** /* Extern Variables */ |
69:I2CInterface.c **** |
70:I2CInterface.c **** /* Definitions */ |
71:I2CInterface.c **** /* Bit definitions for the tw_status register */ |
72:I2CInterface.c **** #define MAX_TWI_RETRIES 2 |
73:I2CInterface.c **** #define BUSY 7 |
74:I2CInterface.c **** |
75:I2CInterface.c **** /*********************************************************** |
76:I2CInterface.c **** Function Name: I2CInt_init |
77:I2CInterface.c **** Function Description: This function is responsible |
78:I2CInterface.c **** for setting up the registers needed for the TWI |
79:I2CInterface.c **** interface |
80:I2CInterface.c **** |
81:I2CInterface.c **** Inputs: none |
82:I2CInterface.c **** Outputs: none |
83:I2CInterface.c **** ***********************************************************/ |
84:I2CInterface.c **** void I2CInt_init(void) |
85:I2CInterface.c **** { |
81 .stabn 68,0,85,.LM0-I2CInt_init |
82 .LM0: |
83 /* prologue: frame size=0 */ |
84 /* prologue end (size=0) */ |
86:I2CInterface.c **** TWSR = 0; |
85 .stabn 68,0,86,.LM1-I2CInt_init |
GAS LISTING /tmp/ccQb65z2.s page 4 |
|
|
86 .LM1: |
87 0000 11B8 out 33-0x20,__zero_reg__ |
87:I2CInterface.c **** |
88:I2CInterface.c **** /* init the speed of the I2C interface, running at |
89:I2CInterface.c **** 100 Kbps */ |
90:I2CInterface.c **** TWBR = (FOSC / I2C_SPEED - 16)/2; |
88 .stabn 68,0,90,.LM2-I2CInt_init |
89 .LM2: |
90 0002 88E4 ldi r24,lo8(72) |
91 0004 80B9 out 32-0x20,r24 |
92 /* epilogue: frame size=0 */ |
93 0006 0895 ret |
94 /* epilogue end (size=1) */ |
95 /* function I2CInt_init size 4 (3) */ |
96 .size I2CInt_init, .-I2CInt_init |
97 .Lscope0: |
98 .stabs "",36,0,0,.Lscope0-I2CInt_init |
99 .stabd 78,0,0 |
100 .stabs "I2CInt_writeData:F(0,15)",36,0,108,I2CInt_writeData |
101 .stabs "address:P(0,11)",64,0,107,25 |
102 .stabs "data:P(0,16)=*(0,11)",64,0,107,22 |
103 .stabs "bytes:P(0,11)",64,0,107,20 |
104 .global I2CInt_writeData |
105 .type I2CInt_writeData, @function |
106 I2CInt_writeData: |
107 .stabd 46,0,0 |
91:I2CInterface.c **** } |
92:I2CInterface.c **** |
93:I2CInterface.c **** /*********************************************************** |
94:I2CInterface.c **** Function Name: I2CInt_writeData |
95:I2CInterface.c **** Function Description: This function is responsible for |
96:I2CInterface.c **** initiating the process of writing a sequence of bytes |
97:I2CInterface.c **** an I2C slave address. This function will try to write |
98:I2CInterface.c **** the data three times before giving up. |
99:I2CInterface.c **** Inputs: address: the address of the I2C slave device |
100:I2CInterface.c **** data: a pointer to the data to be written |
101:I2CInterface.c **** to the slave...for camera interfacing, |
102:I2CInterface.c **** the data follows a <register #><data> |
103:I2CInterface.c **** format |
104:I2CInterface.c **** bytes: the number of bytes to write |
105:I2CInterface.c **** Outputs: none |
106:I2CInterface.c **** ***********************************************************/ |
107:I2CInterface.c **** void I2CInt_writeData(unsigned char address, unsigned char *data, unsigned char bytes) |
108:I2CInterface.c **** { |
108 .stabn 68,0,108,.LM3-I2CInt_writeData |
109 .LM3: |
110 /* prologue: frame size=0 */ |
111 /* prologue end (size=0) */ |
112 0008 982F mov r25,r24 |
113 .L5: |
109:I2CInterface.c **** while(status & (1<<BUSY)); /* Bus is busy wait (or exit with error code) */ |
114 .stabn 68,0,109,.LM4-I2CInt_writeData |
115 .LM4: |
116 000a 8091 0000 lds r24,status |
117 000e 8823 tst r24 |
118 0010 E4F3 brlt .L5 |
119 .L9: |
GAS LISTING /tmp/ccQb65z2.s page 5 |
|
|
110:I2CInterface.c **** while(TWCR & (1<<TWSTO)); |
120 .stabn 68,0,110,.LM5-I2CInt_writeData |
121 .LM5: |
122 0012 06B6 in __tmp_reg__,86-0x20 |
123 0014 04FC sbrc __tmp_reg__,4 |
124 0016 FDCF rjmp .L9 |
111:I2CInterface.c **** |
112:I2CInterface.c **** /* copy the needed data and state info to our local I2C command structure */ |
113:I2CInterface.c **** twi_address = address; |
125 .stabn 68,0,113,.LM6-I2CInt_writeData |
126 .LM6: |
127 0018 9093 0000 sts twi_address,r25 |
114:I2CInterface.c **** twi_data = data; |
128 .stabn 68,0,114,.LM7-I2CInt_writeData |
129 .LM7: |
130 001c 7093 0000 sts (twi_data)+1,r23 |
131 0020 6093 0000 sts twi_data,r22 |
115:I2CInterface.c **** twi_bytes = bytes; |
132 .stabn 68,0,115,.LM8-I2CInt_writeData |
133 .LM8: |
134 0024 4093 0000 sts twi_bytes,r20 |
116:I2CInterface.c **** twi_ddr = TW_WRITE; |
135 .stabn 68,0,116,.LM9-I2CInt_writeData |
136 .LM9: |
137 0028 1092 0000 sts twi_ddr,__zero_reg__ |
117:I2CInterface.c **** |
118:I2CInterface.c **** retry_cnt = 0; |
138 .stabn 68,0,118,.LM10-I2CInt_writeData |
139 .LM10: |
140 002c 1092 0000 sts retry_cnt,__zero_reg__ |
119:I2CInterface.c **** |
120:I2CInterface.c **** /* Generate start condition, the remainder of the transfer is interrupt driven and |
121:I2CInterface.c **** will be performed in the background */ |
122:I2CInterface.c **** TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN)|(1<<TWIE); |
141 .stabn 68,0,122,.LM11-I2CInt_writeData |
142 .LM11: |
143 0030 85EA ldi r24,lo8(-91) |
144 0032 86BF out 86-0x20,r24 |
123:I2CInterface.c **** |
124:I2CInterface.c **** status |= (1<<BUSY); |
145 .stabn 68,0,124,.LM12-I2CInt_writeData |
146 .LM12: |
147 0034 8091 0000 lds r24,status |
148 0038 8068 ori r24,lo8(-128) |
149 003a 8093 0000 sts status,r24 |
150 /* epilogue: frame size=0 */ |
151 003e 0895 ret |
152 /* epilogue end (size=1) */ |
153 /* function I2CInt_writeData size 28 (27) */ |
154 .size I2CInt_writeData, .-I2CInt_writeData |
155 .Lscope1: |
156 .stabs "",36,0,0,.Lscope1-I2CInt_writeData |
157 .stabd 78,0,0 |
158 .stabs "I2CInt_readData:F(0,15)",36,0,138,I2CInt_readData |
159 .stabs "address:P(0,11)",64,0,137,25 |
160 .stabs "data:P(0,16)",64,0,137,22 |
161 .stabs "bytes:P(0,11)",64,0,137,20 |
GAS LISTING /tmp/ccQb65z2.s page 6 |
|
|
162 .global I2CInt_readData |
163 .type I2CInt_readData, @function |
164 I2CInt_readData: |
165 .stabd 46,0,0 |
125:I2CInterface.c **** } |
126:I2CInterface.c **** |
127:I2CInterface.c **** /*********************************************************** |
128:I2CInterface.c **** Function Name: I2CInt_readData |
129:I2CInterface.c **** Function Description: This funcion is responsible for |
130:I2CInterface.c **** reading the specified number of bytes from a slave |
131:I2CInterface.c **** device. |
132:I2CInterface.c **** Inputs: address: the slave address to read from |
133:I2CInterface.c **** data: a pointer to where the data will be stored |
134:I2CInterface.c **** bytes: the number of bytes to read |
135:I2CInterface.c **** Outputs: none |
136:I2CInterface.c **** ***********************************************************/ |
137:I2CInterface.c **** void I2CInt_readData(unsigned char address, unsigned char *data, unsigned char bytes) |
138:I2CInterface.c **** { |
166 .stabn 68,0,138,.LM13-I2CInt_readData |
167 .LM13: |
168 /* prologue: frame size=0 */ |
169 /* prologue end (size=0) */ |
170 0040 982F mov r25,r24 |
171 .L15: |
139:I2CInterface.c **** /* Bus is busy wait (or exit with error code) */ |
140:I2CInterface.c **** while(status & (1<<BUSY)); |
172 .stabn 68,0,140,.LM14-I2CInt_readData |
173 .LM14: |
174 0042 8091 0000 lds r24,status |
175 0046 8823 tst r24 |
176 0048 E4F3 brlt .L15 |
141:I2CInterface.c **** |
142:I2CInterface.c **** twi_address = address; |
177 .stabn 68,0,142,.LM15-I2CInt_readData |
178 .LM15: |
179 004a 9093 0000 sts twi_address,r25 |
143:I2CInterface.c **** twi_data = data; |
180 .stabn 68,0,143,.LM16-I2CInt_readData |
181 .LM16: |
182 004e 7093 0000 sts (twi_data)+1,r23 |
183 0052 6093 0000 sts twi_data,r22 |
144:I2CInterface.c **** twi_bytes = bytes; |
184 .stabn 68,0,144,.LM17-I2CInt_readData |
185 .LM17: |
186 0056 4093 0000 sts twi_bytes,r20 |
145:I2CInterface.c **** twi_ddr = TW_READ; |
187 .stabn 68,0,145,.LM18-I2CInt_readData |
188 .LM18: |
189 005a 81E0 ldi r24,lo8(1) |
190 005c 8093 0000 sts twi_ddr,r24 |
146:I2CInterface.c **** |
147:I2CInterface.c **** retry_cnt = 0; |
191 .stabn 68,0,147,.LM19-I2CInt_readData |
192 .LM19: |
193 0060 1092 0000 sts retry_cnt,__zero_reg__ |
148:I2CInterface.c **** |
149:I2CInterface.c **** /* Generate start condition, the remainder of the transfer is interrupt driven and |
GAS LISTING /tmp/ccQb65z2.s page 7 |
|
|
150:I2CInterface.c **** will be performed in the background */ |
151:I2CInterface.c **** TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN)|(1<<TWIE); |
194 .stabn 68,0,151,.LM20-I2CInt_readData |
195 .LM20: |
196 0064 85EA ldi r24,lo8(-91) |
197 0066 86BF out 86-0x20,r24 |
152:I2CInterface.c **** |
153:I2CInterface.c **** status |= (1<<BUSY); |
198 .stabn 68,0,153,.LM21-I2CInt_readData |
199 .LM21: |
200 0068 8091 0000 lds r24,status |
201 006c 8068 ori r24,lo8(-128) |
202 006e 8093 0000 sts status,r24 |
203 /* epilogue: frame size=0 */ |
204 0072 0895 ret |
205 /* epilogue end (size=1) */ |
206 /* function I2CInt_readData size 26 (25) */ |
207 .size I2CInt_readData, .-I2CInt_readData |
208 .Lscope2: |
209 .stabs "",36,0,0,.Lscope2-I2CInt_readData |
210 .stabd 78,0,0 |
211 .stabs "I2CInt_isI2cBusy:F(7,1)",36,0,166,I2CInt_isI2cBusy |
212 .global I2CInt_isI2cBusy |
213 .type I2CInt_isI2cBusy, @function |
214 I2CInt_isI2cBusy: |
215 .stabd 46,0,0 |
154:I2CInterface.c **** } |
155:I2CInterface.c **** |
156:I2CInterface.c **** /*********************************************************** |
157:I2CInterface.c **** Function Name: I2CInt_isI2cBusy |
158:I2CInterface.c **** Function Description: This funcion is responsible for |
159:I2CInterface.c **** indicating if the I2C bus is currently busy to external |
160:I2CInterface.c **** modules. |
161:I2CInterface.c **** device. |
162:I2CInterface.c **** Inputs: none |
163:I2CInterface.c **** Outputs: bool_t - indicating if bus is busy |
164:I2CInterface.c **** ***********************************************************/ |
165:I2CInterface.c **** bool_t I2CInt_isI2cBusy(void) |
166:I2CInterface.c **** { |
216 .stabn 68,0,166,.LM22-I2CInt_isI2cBusy |
217 .LM22: |
218 /* prologue: frame size=0 */ |
219 /* prologue end (size=0) */ |
167:I2CInterface.c **** bool_t retVal = FALSE; |
168:I2CInterface.c **** if ( (status & (1<<BUSY)) != 0) |
220 .stabn 68,0,168,.LM23-I2CInt_isI2cBusy |
221 .LM23: |
222 0074 8091 0000 lds r24,status |
223 0078 881F rol r24 |
224 007a 8827 clr r24 |
225 007c 881F rol r24 |
169:I2CInterface.c **** { |
170:I2CInterface.c **** retVal = TRUE; |
171:I2CInterface.c **** } |
172:I2CInterface.c **** |
173:I2CInterface.c **** return(retVal); |
174:I2CInterface.c **** } |
GAS LISTING /tmp/ccQb65z2.s page 8 |
|
|
226 .stabn 68,0,174,.LM24-I2CInt_isI2cBusy |
227 .LM24: |
228 007e 9927 clr r25 |
229 /* epilogue: frame size=0 */ |
230 0080 0895 ret |
231 /* epilogue end (size=1) */ |
232 /* function I2CInt_isI2cBusy size 7 (6) */ |
233 .size I2CInt_isI2cBusy, .-I2CInt_isI2cBusy |
234 .Lscope3: |
235 .stabs "",36,0,0,.Lscope3-I2CInt_isI2cBusy |
236 .stabd 78,0,0 |
237 .stabs "__vector_17:F(0,15)",36,0,185,__vector_17 |
238 .global __vector_17 |
239 .type __vector_17, @function |
240 __vector_17: |
241 .stabd 46,0,0 |
175:I2CInterface.c **** |
176:I2CInterface.c **** /*********************************************************** |
177:I2CInterface.c **** Function Name: <interrupt handler for I2C> |
178:I2CInterface.c **** Function Description: This function is responsible for |
179:I2CInterface.c **** implementing the control logic needed to perform a |
180:I2CInterface.c **** read or write operation with an I2C slave. |
181:I2CInterface.c **** Inputs: none |
182:I2CInterface.c **** Outputs: none |
183:I2CInterface.c **** ***********************************************************/ |
184:I2CInterface.c **** SIGNAL(SIG_2WIRE_SERIAL) |
185:I2CInterface.c **** { |
242 .stabn 68,0,185,.LM25-__vector_17 |
243 .LM25: |
244 /* prologue: frame size=0 */ |
245 0082 1F92 push __zero_reg__ |
246 0084 0F92 push __tmp_reg__ |
247 0086 0FB6 in __tmp_reg__,__SREG__ |
248 0088 0F92 push __tmp_reg__ |
249 008a 1124 clr __zero_reg__ |
250 008c 8F93 push r24 |
251 008e 9F93 push r25 |
252 0090 AF93 push r26 |
253 0092 BF93 push r27 |
254 0094 EF93 push r30 |
255 0096 FF93 push r31 |
256 /* prologue end (size=11) */ |
186:I2CInterface.c **** unsigned char TWI_status = TWSR & TW_STATUS_MASK; /* grab just the status bits */ |
257 .stabn 68,0,186,.LM26-__vector_17 |
258 .LM26: |
259 0098 81B1 in r24,33-0x20 |
187:I2CInterface.c **** |
188:I2CInterface.c **** /* the entire I2C handler is state-based...determine |
189:I2CInterface.c **** what needs to be done based on TWI_status */ |
190:I2CInterface.c **** switch(TWI_status) |
260 .stabn 68,0,190,.LM27-__vector_17 |
261 .LM27: |
262 009a 9927 clr r25 |
263 009c AA27 clr r26 |
264 009e BB27 clr r27 |
265 00a0 887F andi r24,lo8(248) |
266 00a2 9070 andi r25,hi8(248) |
GAS LISTING /tmp/ccQb65z2.s page 9 |
|
|
267 00a4 A070 andi r26,hlo8(248) |
268 00a6 B070 andi r27,hhi8(248) |
269 00a8 FC01 movw r30,r24 |
270 00aa 3897 sbiw r30,8 |
271 00ac E135 cpi r30,81 |
272 00ae F105 cpc r31,__zero_reg__ |
273 00b0 08F0 brlo .+2 |
274 00b2 9AC0 rjmp .L42 |
275 .stabn 68,0,190,.LM28-__vector_17 |
276 .LM28: |
277 00b4 E050 subi r30,lo8(-(pm(.L33))) |
278 00b6 F040 sbci r31,hi8(-(pm(.L33))) |
279 00b8 0994 ijmp |
280 .data |
281 .section .progmem.gcc_sw_table, "ax", @progbits |
282 .p2align 1 |
283 .L33: |
284 .data |
285 .section .progmem.gcc_sw_table, "ax", @progbits |
286 .p2align 1 |
287 0000 00C0 rjmp .L25 |
288 0002 00C0 rjmp .L42 |
289 0004 00C0 rjmp .L42 |
290 0006 00C0 rjmp .L42 |
291 0008 00C0 rjmp .L42 |
292 000a 00C0 rjmp .L42 |
293 000c 00C0 rjmp .L42 |
294 000e 00C0 rjmp .L42 |
295 0010 00C0 rjmp .L25 |
296 0012 00C0 rjmp .L42 |
297 0014 00C0 rjmp .L42 |
298 0016 00C0 rjmp .L42 |
299 0018 00C0 rjmp .L42 |
300 001a 00C0 rjmp .L42 |
301 001c 00C0 rjmp .L42 |
302 001e 00C0 rjmp .L42 |
303 0020 00C0 rjmp .L26 |
304 0022 00C0 rjmp .L42 |
305 0024 00C0 rjmp .L42 |
306 0026 00C0 rjmp .L42 |
307 0028 00C0 rjmp .L42 |
308 002a 00C0 rjmp .L42 |
309 002c 00C0 rjmp .L42 |
310 002e 00C0 rjmp .L42 |
311 0030 00C0 rjmp .L27 |
312 0032 00C0 rjmp .L42 |
313 0034 00C0 rjmp .L42 |
314 0036 00C0 rjmp .L42 |
315 0038 00C0 rjmp .L42 |
316 003a 00C0 rjmp .L42 |
317 003c 00C0 rjmp .L42 |
318 003e 00C0 rjmp .L42 |
319 0040 00C0 rjmp .L28 |
320 0042 00C0 rjmp .L42 |
321 0044 00C0 rjmp .L42 |
322 0046 00C0 rjmp .L42 |
323 0048 00C0 rjmp .L42 |
GAS LISTING /tmp/ccQb65z2.s page 10 |
|
|
324 004a 00C0 rjmp .L42 |
325 004c 00C0 rjmp .L42 |
326 004e 00C0 rjmp .L42 |
327 0050 00C0 rjmp .L29 |
328 0052 00C0 rjmp .L42 |
329 0054 00C0 rjmp .L42 |
330 0056 00C0 rjmp .L42 |
331 0058 00C0 rjmp .L42 |
332 005a 00C0 rjmp .L42 |
333 005c 00C0 rjmp .L42 |
334 005e 00C0 rjmp .L42 |
335 0060 00C0 rjmp .L42 |
336 0062 00C0 rjmp .L42 |
337 0064 00C0 rjmp .L42 |
338 0066 00C0 rjmp .L42 |
339 0068 00C0 rjmp .L42 |
340 006a 00C0 rjmp .L42 |
341 006c 00C0 rjmp .L42 |
342 006e 00C0 rjmp .L42 |
343 0070 00C0 rjmp .L30 |
344 0072 00C0 rjmp .L42 |
345 0074 00C0 rjmp .L42 |
346 0076 00C0 rjmp .L42 |
347 0078 00C0 rjmp .L42 |
348 007a 00C0 rjmp .L42 |
349 007c 00C0 rjmp .L42 |
350 007e 00C0 rjmp .L42 |
351 0080 00C0 rjmp .L27 |
352 0082 00C0 rjmp .L42 |
353 0084 00C0 rjmp .L42 |
354 0086 00C0 rjmp .L42 |
355 0088 00C0 rjmp .L42 |
356 008a 00C0 rjmp .L42 |
357 008c 00C0 rjmp .L42 |
358 008e 00C0 rjmp .L42 |
359 0090 00C0 rjmp .L31 |
360 0092 00C0 rjmp .L42 |
361 0094 00C0 rjmp .L42 |
362 0096 00C0 rjmp .L42 |
363 0098 00C0 rjmp .L42 |
364 009a 00C0 rjmp .L42 |
365 009c 00C0 rjmp .L42 |
366 009e 00C0 rjmp .L42 |
367 00a0 00C0 rjmp .L32 |
368 .text |
369 .L25: |
191:I2CInterface.c **** { |
192:I2CInterface.c **** case TW_START: /* Start condition */ |
193:I2CInterface.c **** case TW_REP_START: /* Repeated start condition */ |
194:I2CInterface.c **** if(retry_cnt > MAX_TWI_RETRIES) |
370 .stabn 68,0,194,.LM29-__vector_17 |
371 .LM29: |
372 00ba 8091 0000 lds r24,retry_cnt |
373 00be 8330 cpi r24,lo8(3) |
374 00c0 48F0 brlo .L34 |
195:I2CInterface.c **** { |
196:I2CInterface.c **** /* generate stop condition if we've reached our retry limit */ |
GAS LISTING /tmp/ccQb65z2.s page 11 |
|
|
197:I2CInterface.c **** TWCR |= (1<<TWINT)|(1<<TWSTO); |
375 .stabn 68,0,197,.LM30-__vector_17 |
376 .LM30: |
377 00c2 86B7 in r24,86-0x20 |
378 00c4 8069 ori r24,lo8(-112) |
379 00c6 86BF out 86-0x20,r24 |
198:I2CInterface.c **** status &= ~(1<<BUSY); |
380 .stabn 68,0,198,.LM31-__vector_17 |
381 .LM31: |
382 00c8 8091 0000 lds r24,status |
383 00cc 8F77 andi r24,lo8(127) |
384 00ce 8093 0000 sts status,r24 |
385 00d2 8AC0 rjmp .L42 |
386 .L34: |
199:I2CInterface.c **** return; |
200:I2CInterface.c **** } |
201:I2CInterface.c **** /* indicate read or write */ |
202:I2CInterface.c **** TWDR = (twi_address<<1) + twi_ddr; |
387 .stabn 68,0,202,.LM32-__vector_17 |
388 .LM32: |
389 00d4 8091 0000 lds r24,twi_address |
390 00d8 9091 0000 lds r25,twi_ddr |
391 00dc 880F lsl r24 |
392 00de 890F add r24,r25 |
393 00e0 83B9 out 35-0x20,r24 |
203:I2CInterface.c **** /* TWSTA must be cleared...also clears TWINT */ |
204:I2CInterface.c **** TWCR &= ~(1<<TWSTA); |
394 .stabn 68,0,204,.LM33-__vector_17 |
395 .LM33: |
396 00e2 86B7 in r24,86-0x20 |
397 00e4 8F7D andi r24,lo8(-33) |
398 00e6 86BF out 86-0x20,r24 |
399 00e8 7FC0 rjmp .L42 |
400 .L26: |
205:I2CInterface.c **** break; |
206:I2CInterface.c **** |
207:I2CInterface.c **** case TW_MT_SLA_ACK: /* Slave acknowledged address, */ |
208:I2CInterface.c **** retry_cnt = 0; |
401 .stabn 68,0,208,.LM34-__vector_17 |
402 .LM34: |
403 00ea 1092 0000 sts retry_cnt,__zero_reg__ |
209:I2CInterface.c **** /* tx the data, and increment the data pointer */ |
210:I2CInterface.c **** TWDR = *twi_data; |
404 .stabn 68,0,210,.LM35-__vector_17 |
405 .LM35: |
406 00ee E091 0000 lds r30,twi_data |
407 00f2 F091 0000 lds r31,(twi_data)+1 |
408 00f6 8081 ld r24,Z |
409 00f8 83B9 out 35-0x20,r24 |
211:I2CInterface.c **** twi_data++; |
410 .stabn 68,0,211,.LM36-__vector_17 |
411 .LM36: |
412 00fa 3196 adiw r30,1 |
413 00fc F093 0000 sts (twi_data)+1,r31 |
414 0100 E093 0000 sts twi_data,r30 |
212:I2CInterface.c **** |
213:I2CInterface.c **** /* clear the int to continue */ |
GAS LISTING /tmp/ccQb65z2.s page 12 |
|
|
214:I2CInterface.c **** TWCR |= (1<<TWINT); |
415 .stabn 68,0,214,.LM37-__vector_17 |
416 .LM37: |
417 0104 86B7 in r24,86-0x20 |
418 0106 8068 ori r24,lo8(-128) |
419 0108 86BF out 86-0x20,r24 |
420 010a 6EC0 rjmp .L42 |
421 .L27: |
215:I2CInterface.c **** break; |
216:I2CInterface.c **** |
217:I2CInterface.c **** case TW_MT_SLA_NACK: /* Slave didn't acknowledge address, */ |
218:I2CInterface.c **** case TW_MR_SLA_NACK: |
219:I2CInterface.c **** retry_cnt++; |
422 .stabn 68,0,219,.LM38-__vector_17 |
423 .LM38: |
424 010c 8091 0000 lds r24,retry_cnt |
425 0110 8F5F subi r24,lo8(-(1)) |
426 0112 8093 0000 sts retry_cnt,r24 |
220:I2CInterface.c **** |
221:I2CInterface.c **** /* retry...*/ |
222:I2CInterface.c **** TWCR |= (1<<TWINT)|(1<<TWSTA)|(1<<TWSTO); |
427 .stabn 68,0,222,.LM39-__vector_17 |
428 .LM39: |
429 0116 86B7 in r24,86-0x20 |
430 0118 806B ori r24,lo8(-80) |
431 011a 86BF out 86-0x20,r24 |
432 011c 65C0 rjmp .L42 |
433 .L28: |
223:I2CInterface.c **** break; |
224:I2CInterface.c **** |
225:I2CInterface.c **** case TW_MT_DATA_ACK: /* Slave Acknowledged data, */ |
226:I2CInterface.c **** if(--twi_bytes > 0) |
434 .stabn 68,0,226,.LM40-__vector_17 |
435 .LM40: |
436 011e 8091 0000 lds r24,twi_bytes |
437 0122 8150 subi r24,lo8(-(-1)) |
438 0124 8093 0000 sts twi_bytes,r24 |
439 0128 8091 0000 lds r24,twi_bytes |
440 012c 8823 tst r24 |
441 012e 79F0 breq .L36 |
227:I2CInterface.c **** { |
228:I2CInterface.c **** /* more data to send, so send it */ |
229:I2CInterface.c **** TWDR = *twi_data; |
442 .stabn 68,0,229,.LM41-__vector_17 |
443 .LM41: |
444 0130 E091 0000 lds r30,twi_data |
445 0134 F091 0000 lds r31,(twi_data)+1 |
446 0138 8081 ld r24,Z |
447 013a 83B9 out 35-0x20,r24 |
230:I2CInterface.c **** twi_data++; |
448 .stabn 68,0,230,.LM42-__vector_17 |
449 .LM42: |
450 013c 3196 adiw r30,1 |
451 013e F093 0000 sts (twi_data)+1,r31 |
452 0142 E093 0000 sts twi_data,r30 |
231:I2CInterface.c **** TWCR |= (1<<TWINT); |
453 .stabn 68,0,231,.LM43-__vector_17 |
GAS LISTING /tmp/ccQb65z2.s page 13 |
|
|
454 .LM43: |
455 0146 86B7 in r24,86-0x20 |
456 0148 8068 ori r24,lo8(-128) |
457 014a 86BF out 86-0x20,r24 |
458 014c 4DC0 rjmp .L42 |
459 .L36: |
232:I2CInterface.c **** } |
233:I2CInterface.c **** else |
234:I2CInterface.c **** { |
235:I2CInterface.c **** /* generate the stop condition if needed */ |
236:I2CInterface.c **** TWCR |= (1<<TWSTO)|(1<<TWINT); |
460 .stabn 68,0,236,.LM44-__vector_17 |
461 .LM44: |
462 014e 86B7 in r24,86-0x20 |
463 0150 8069 ori r24,lo8(-112) |
464 0152 86BF out 86-0x20,r24 |
237:I2CInterface.c **** status &= ~(1<<BUSY); |
465 .stabn 68,0,237,.LM45-__vector_17 |
466 .LM45: |
467 0154 8091 0000 lds r24,status |
468 0158 8F77 andi r24,lo8(127) |
469 015a 8093 0000 sts status,r24 |
470 015e 44C0 rjmp .L42 |
471 .L29: |
238:I2CInterface.c **** } |
239:I2CInterface.c **** break; |
240:I2CInterface.c **** |
241:I2CInterface.c **** case TW_MT_DATA_NACK: /* Slave didn't acknowledge data */ |
242:I2CInterface.c **** /* send the stop condition */ |
243:I2CInterface.c **** TWCR |= (1<<TWINT)|(1<<TWSTO); |
472 .stabn 68,0,243,.LM46-__vector_17 |
473 .LM46: |
474 0160 86B7 in r24,86-0x20 |
475 0162 8069 ori r24,lo8(-112) |
476 0164 86BF out 86-0x20,r24 |
244:I2CInterface.c **** status &= ~(1<<BUSY); |
477 .stabn 68,0,244,.LM47-__vector_17 |
478 .LM47: |
479 0166 8091 0000 lds r24,status |
480 016a 8F77 andi r24,lo8(127) |
481 016c 8093 0000 sts status,r24 |
482 0170 3BC0 rjmp .L42 |
483 .L30: |
245:I2CInterface.c **** break; |
246:I2CInterface.c **** |
247:I2CInterface.c **** case TW_MR_SLA_ACK: /* Slave acknowledged address */ |
248:I2CInterface.c **** if(--twi_bytes > 0) |
484 .stabn 68,0,248,.LM48-__vector_17 |
485 .LM48: |
486 0172 8091 0000 lds r24,twi_bytes |
487 0176 8150 subi r24,lo8(-(-1)) |
488 0178 8093 0000 sts twi_bytes,r24 |
489 017c 8091 0000 lds r24,twi_bytes |
490 0180 8823 tst r24 |
491 0182 21F0 breq .L38 |
249:I2CInterface.c **** { |
250:I2CInterface.c **** /* if there is more than one byte to read, acknowledge */ |
GAS LISTING /tmp/ccQb65z2.s page 14 |
|
|
251:I2CInterface.c **** TWCR |= (1<<TWEA)|(1<<TWINT); |
492 .stabn 68,0,251,.LM49-__vector_17 |
493 .LM49: |
494 0184 86B7 in r24,86-0x20 |
495 0186 806C ori r24,lo8(-64) |
496 0188 86BF out 86-0x20,r24 |
497 018a 2EC0 rjmp .L42 |
498 .L38: |
252:I2CInterface.c **** } |
253:I2CInterface.c **** else |
254:I2CInterface.c **** { |
255:I2CInterface.c **** /* no acknowledge */ |
256:I2CInterface.c **** TWCR |= (1<<TWINT); |
499 .stabn 68,0,256,.LM50-__vector_17 |
500 .LM50: |
501 018c 86B7 in r24,86-0x20 |
502 018e 8068 ori r24,lo8(-128) |
503 0190 86BF out 86-0x20,r24 |
504 0192 2AC0 rjmp .L42 |
505 .L31: |
257:I2CInterface.c **** } |
258:I2CInterface.c **** break; |
259:I2CInterface.c **** |
260:I2CInterface.c **** case TW_MR_DATA_ACK: /* Master acknowledged data */ |
261:I2CInterface.c **** |
262:I2CInterface.c **** /* grab the received data */ |
263:I2CInterface.c **** *twi_data = TWDR; |
506 .stabn 68,0,263,.LM51-__vector_17 |
507 .LM51: |
508 0194 E091 0000 lds r30,twi_data |
509 0198 F091 0000 lds r31,(twi_data)+1 |
510 019c 83B1 in r24,35-0x20 |
511 019e 8083 st Z,r24 |
264:I2CInterface.c **** twi_data++; |
512 .stabn 68,0,264,.LM52-__vector_17 |
513 .LM52: |
514 01a0 3196 adiw r30,1 |
515 01a2 F093 0000 sts (twi_data)+1,r31 |
516 01a6 E093 0000 sts twi_data,r30 |
265:I2CInterface.c **** if(--twi_bytes > 0) |
517 .stabn 68,0,265,.LM53-__vector_17 |
518 .LM53: |
519 01aa 8091 0000 lds r24,twi_bytes |
520 01ae 8150 subi r24,lo8(-(-1)) |
521 01b0 8093 0000 sts twi_bytes,r24 |
522 01b4 8091 0000 lds r24,twi_bytes |
523 01b8 8823 tst r24 |
524 01ba 21F0 breq .L40 |
266:I2CInterface.c **** { |
267:I2CInterface.c **** /* get the next data byte and ack */ |
268:I2CInterface.c **** TWCR |= (1<<TWEA)|(1<<TWINT); |
525 .stabn 68,0,268,.LM54-__vector_17 |
526 .LM54: |
527 01bc 86B7 in r24,86-0x20 |
528 01be 806C ori r24,lo8(-64) |
529 01c0 86BF out 86-0x20,r24 |
530 01c2 12C0 rjmp .L42 |
GAS LISTING /tmp/ccQb65z2.s page 15 |
|
|
531 .L40: |
269:I2CInterface.c **** } |
270:I2CInterface.c **** else |
271:I2CInterface.c **** { |
272:I2CInterface.c **** /* clear out the enable acknowledge bit */ |
273:I2CInterface.c **** TWCR &= ~(1<<TWEA); |
532 .stabn 68,0,273,.LM55-__vector_17 |
533 .LM55: |
534 01c4 86B7 in r24,86-0x20 |
535 01c6 8F7B andi r24,lo8(-65) |
536 01c8 86BF out 86-0x20,r24 |
537 01ca 0EC0 rjmp .L42 |
538 .L32: |
274:I2CInterface.c **** } |
275:I2CInterface.c **** break; |
276:I2CInterface.c **** |
277:I2CInterface.c **** case TW_MR_DATA_NACK: /* Master didn't acknowledge data -> end of read process */ |
278:I2CInterface.c **** /* read data, and generate the stop condition */ |
279:I2CInterface.c **** *twi_data = TWDR; |
539 .stabn 68,0,279,.LM56-__vector_17 |
540 .LM56: |
541 01cc E091 0000 lds r30,twi_data |
542 01d0 F091 0000 lds r31,(twi_data)+1 |
543 01d4 83B1 in r24,35-0x20 |
544 01d6 8083 st Z,r24 |
280:I2CInterface.c **** TWCR |= (1<<TWSTO)|(1<<TWINT); |
545 .stabn 68,0,280,.LM57-__vector_17 |
546 .LM57: |
547 01d8 86B7 in r24,86-0x20 |
548 01da 8069 ori r24,lo8(-112) |
549 01dc 86BF out 86-0x20,r24 |
281:I2CInterface.c **** status &= ~(1<<BUSY); |
550 .stabn 68,0,281,.LM58-__vector_17 |
551 .LM58: |
552 01de 8091 0000 lds r24,status |
553 01e2 8F77 andi r24,lo8(127) |
554 01e4 8093 0000 sts status,r24 |
555 .L42: |
556 /* epilogue: frame size=0 */ |
557 01e8 FF91 pop r31 |
558 01ea EF91 pop r30 |
559 01ec BF91 pop r27 |
560 01ee AF91 pop r26 |
561 01f0 9F91 pop r25 |
562 01f2 8F91 pop r24 |
563 01f4 0F90 pop __tmp_reg__ |
564 01f6 0FBE out __SREG__,__tmp_reg__ |
565 01f8 0F90 pop __tmp_reg__ |
566 01fa 1F90 pop __zero_reg__ |
567 01fc 1895 reti |
568 /* epilogue end (size=11) */ |
569 /* function __vector_17 size 271 (249) */ |
570 .size __vector_17, .-__vector_17 |
571 .Lscope4: |
572 .stabs "",36,0,0,.Lscope4-__vector_17 |
573 .stabd 78,0,0 |
574 .lcomm twi_address,1 |
GAS LISTING /tmp/ccQb65z2.s page 16 |
|
|
575 .lcomm twi_data,2 |
576 .lcomm twi_ddr,1 |
577 .lcomm twi_bytes,1 |
578 .lcomm status,1 |
579 .lcomm retry_cnt,1 |
580 .stabs "twi_address:S(0,17)=B(0,11)",40,0,59,twi_address |
581 .stabs "twi_data:S(0,18)=*(0,17)",40,0,60,twi_data |
582 .stabs "twi_ddr:S(0,17)",40,0,61,twi_ddr |
583 .stabs "twi_bytes:S(0,17)",40,0,62,twi_bytes |
584 .stabs "status:S(0,17)",40,0,63,status |
585 .stabs "retry_cnt:S(0,17)",40,0,64,retry_cnt |
586 .stabs "",100,0,0,.Letext0 |
587 .Letext0: |
588 /* File "I2CInterface.c": code 336 = 0x0150 ( 310), prologues 11, epilogues 15 */ |
GAS LISTING /tmp/ccQb65z2.s page 17 |
|
|
DEFINED SYMBOLS |
*ABS*:00000000 I2CInterface.c |
/tmp/ccQb65z2.s:3 *ABS*:0000003f __SREG__ |
/tmp/ccQb65z2.s:4 *ABS*:0000003e __SP_H__ |
/tmp/ccQb65z2.s:5 *ABS*:0000003d __SP_L__ |
/tmp/ccQb65z2.s:6 *ABS*:00000000 __tmp_reg__ |
/tmp/ccQb65z2.s:7 *ABS*:00000001 __zero_reg__ |
/tmp/ccQb65z2.s:79 .text:00000000 I2CInt_init |
/tmp/ccQb65z2.s:106 .text:00000008 I2CInt_writeData |
/tmp/ccQb65z2.s:577 .bss:00000005 status |
.bss:00000000 twi_address |
/tmp/ccQb65z2.s:574 .bss:00000001 twi_data |
/tmp/ccQb65z2.s:576 .bss:00000004 twi_bytes |
/tmp/ccQb65z2.s:575 .bss:00000003 twi_ddr |
/tmp/ccQb65z2.s:578 .bss:00000006 retry_cnt |
/tmp/ccQb65z2.s:164 .text:00000040 I2CInt_readData |
/tmp/ccQb65z2.s:214 .text:00000074 I2CInt_isI2cBusy |
/tmp/ccQb65z2.s:240 .text:00000082 __vector_17 |
|
UNDEFINED SYMBOLS |
__do_copy_data |
__do_clear_bss |