GAS LISTING /tmp/ccZHfAgR.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/ccZHfAgR.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/ccZHfAgR.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/ccZHfAgR.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/ccZHfAgR.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/ccZHfAgR.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/ccZHfAgR.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/ccZHfAgR.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/ccZHfAgR.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/ccZHfAgR.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/ccZHfAgR.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/ccZHfAgR.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/ccZHfAgR.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/ccZHfAgR.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/ccZHfAgR.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/ccZHfAgR.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/ccZHfAgR.s 			page 17


DEFINED SYMBOLS
                            *ABS*:00000000 I2CInterface.c
     /tmp/ccZHfAgR.s:3      *ABS*:0000003f __SREG__
     /tmp/ccZHfAgR.s:4      *ABS*:0000003e __SP_H__
     /tmp/ccZHfAgR.s:5      *ABS*:0000003d __SP_L__
     /tmp/ccZHfAgR.s:6      *ABS*:00000000 __tmp_reg__
     /tmp/ccZHfAgR.s:7      *ABS*:00000001 __zero_reg__
     /tmp/ccZHfAgR.s:79     .text:00000000 I2CInt_init
     /tmp/ccZHfAgR.s:106    .text:00000008 I2CInt_writeData
     /tmp/ccZHfAgR.s:577    .bss:00000005 status
                             .bss:00000000 twi_address
     /tmp/ccZHfAgR.s:574    .bss:00000001 twi_data
     /tmp/ccZHfAgR.s:576    .bss:00000004 twi_bytes
     /tmp/ccZHfAgR.s:575    .bss:00000003 twi_ddr
     /tmp/ccZHfAgR.s:578    .bss:00000006 retry_cnt
     /tmp/ccZHfAgR.s:164    .text:00000040 I2CInt_readData
     /tmp/ccZHfAgR.s:214    .text:00000074 I2CInt_isI2cBusy
     /tmp/ccZHfAgR.s:240    .text:00000082 __vector_17

UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
