Subversion Repositories svnkaklik

Rev

Details | Last modification | View Log

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