Subversion Repositories svnkaklik

Rev

Rev 410 | Blame | Compare with Previous | Last modification | View Log | Download

GAS LISTING /tmp/ccfEG7oP.s                     page 1


   1                            .file   "I2CInterface.c"
   2                    __SREG__ = 0x3f
   3                    __SP_H__ = 0x3e
   4                    __SP_L__ = 0x3d
   5                    __tmp_reg__ = 0
   6                    __zero_reg__ = 1
   7                            .global __do_copy_data
   8                            .global __do_clear_bss
   9                            .stabs  "/home/kaklik/projects/programy/C/avr/AVRcam/",100,0,2,.Ltext0
  10                            .stabs  "I2CInterface.c",100,0,2,.Ltext0
  11                            .text
  12                    .Ltext0:
  13                            .stabs  "gcc2_compiled.",60,0,0,0
  14                            .stabs  "int:t(0,1)=r(0,1);-32768;32767;",128,0,0,0
  15                            .stabs  "char:t(0,2)=@s8;r(0,2);0;255;",128,0,0,0
  16                            .stabs  "long int:t(0,3)=@s32;r(0,3);020000000000;017777777777;",128,0,0,0
  17                            .stabs  "unsigned int:t(0,4)=r(0,4);0;0177777;",128,0,0,0
  18                            .stabs  "long unsigned int:t(0,5)=@s32;r(0,5);0;037777777777;",128,0,0,0
  19                            .stabs  "long long int:t(0,6)=@s64;r(0,6);01000000000000000000000;0777777777777777777777;",128,0,0,
  20                            .stabs  "long long unsigned int:t(0,7)=@s64;r(0,7);0;01777777777777777777777;",128,0,0,0
  21                            .stabs  "short int:t(0,8)=r(0,8);-32768;32767;",128,0,0,0
  22                            .stabs  "short unsigned int:t(0,9)=r(0,9);0;0177777;",128,0,0,0
  23                            .stabs  "signed char:t(0,10)=@s8;r(0,10);-128;127;",128,0,0,0
  24                            .stabs  "unsigned char:t(0,11)=@s8;r(0,11);0;255;",128,0,0,0
  25                            .stabs  "float:t(0,12)=r(0,1);4;0;",128,0,0,0
  26                            .stabs  "double:t(0,13)=r(0,1);4;0;",128,0,0,0
  27                            .stabs  "long double:t(0,14)=r(0,1);4;0;",128,0,0,0
  28                            .stabs  "void:t(0,15)=(0,15)",128,0,0,0
  29                            .stabs  "/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/io.h",130,0,0,0
  30                            .stabs  "/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/sfr_defs.h",130,0,0,0
  31                            .stabs  "/usr/lib/gcc/avr/4.2.1/../../../../avr/include/inttypes.h",130,0,0,0
  32                            .stabs  "/usr/lib/gcc/avr/4.2.1/../../../../avr/include/stdint.h",130,0,0,0
  33                            .stabs  "int8_t:t(4,1)=(0,10)",128,0,116,0
  34                            .stabs  "uint8_t:t(4,2)=(0,11)",128,0,117,0
  35                            .stabs  "int16_t:t(4,3)=(0,1)",128,0,118,0
  36                            .stabs  "uint16_t:t(4,4)=(0,4)",128,0,119,0
  37                            .stabs  "int32_t:t(4,5)=(0,3)",128,0,120,0
  38                            .stabs  "uint32_t:t(4,6)=(0,5)",128,0,121,0
  39                            .stabs  "int64_t:t(4,7)=(0,6)",128,0,122,0
  40                            .stabs  "uint64_t:t(4,8)=(0,7)",128,0,123,0
  41                            .stabs  "intptr_t:t(4,9)=(4,3)",128,0,135,0
  42                            .stabs  "uintptr_t:t(4,10)=(4,4)",128,0,140,0
  43                            .stabs  "int_least8_t:t(4,11)=(4,1)",128,0,152,0
  44                            .stabs  "uint_least8_t:t(4,12)=(4,2)",128,0,157,0
  45                            .stabs  "int_least16_t:t(4,13)=(4,3)",128,0,162,0
  46                            .stabs  "uint_least16_t:t(4,14)=(4,4)",128,0,167,0
  47                            .stabs  "int_least32_t:t(4,15)=(4,5)",128,0,172,0
  48                            .stabs  "uint_least32_t:t(4,16)=(4,6)",128,0,177,0
  49                            .stabs  "int_least64_t:t(4,17)=(4,7)",128,0,182,0
  50                            .stabs  "uint_least64_t:t(4,18)=(4,8)",128,0,187,0
  51                            .stabs  "int_fast8_t:t(4,19)=(4,1)",128,0,200,0
  52                            .stabs  "uint_fast8_t:t(4,20)=(4,2)",128,0,205,0
  53                            .stabs  "int_fast16_t:t(4,21)=(4,3)",128,0,210,0
  54                            .stabs  "uint_fast16_t:t(4,22)=(4,4)",128,0,215,0
  55                            .stabs  "int_fast32_t:t(4,23)=(4,5)",128,0,220,0
  56                            .stabs  "uint_fast32_t:t(4,24)=(4,6)",128,0,225,0
  57                            .stabs  "int_fast64_t:t(4,25)=(4,7)",128,0,230,0
GAS LISTING /tmp/ccfEG7oP.s                    page 2


  58                            .stabs  "uint_fast64_t:t(4,26)=(4,8)",128,0,235,0
  59                            .stabs  "intmax_t:t(4,27)=(4,7)",128,0,249,0
  60                            .stabs  "uintmax_t:t(4,28)=(4,8)",128,0,254,0
  61                            .stabn  162,0,0,0
  62                            .stabs  "int_farptr_t:t(3,1)=(4,5)",128,0,76,0
  63                            .stabs  "uint_farptr_t:t(3,2)=(4,6)",128,0,80,0
  64                            .stabn  162,0,0,0
  65                            .stabn  162,0,0,0
  66                            .stabn  162,0,0,0
  67                            .stabs  "CamConfig.h",130,0,0,0
  68                            .stabs  "I2CInterface.h",130,0,0,0
  69                            .stabs  "CommonDefs.h",130,0,0,0
  70                            .stabs  "bool_t:t(7,1)=(0,11)",128,0,56,0
  71                            .stabn  162,0,0,0
  72                            .stabs  "i2cCmd_t:t(6,1)=(6,2)=s2configReg:(0,11),0,8;data:(0,11),8,8;;",128,0,53,0
  73                            .stabn  162,0,0,0
  74                            .stabn  162,0,0,0
  75                            .stabs  "I2CInt_init:F(0,15)",36,0,85,I2CInt_init
  76                    .global I2CInt_init
  77                            .type   I2CInt_init, @function
  78                    I2CInt_init:
  79                            .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
  35:I2CInterface.c ****        needed registers in the OV6620 camera.  This interface
GAS LISTING /tmp/ccfEG7oP.s                    page 3


  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 **** {
  80                            .stabn  68,0,85,.LM0-.LFBB1
  81                    .LM0:
  82                    .LFBB1:
  83                    /* prologue: frame size=0 */
  84                    /* prologue end (size=0) */
  86:I2CInterface.c ****        TWSR = 0;
  85                            .stabn  68,0,86,.LM1-.LFBB1
GAS LISTING /tmp/ccfEG7oP.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-.LFBB1
  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                    .Lscope1:
  98                            .stabs  "",36,0,0,.Lscope1-.LFBB1
  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-.LFBB2
 109                    .LM3:
 110                    .LFBB2:
 111                    /* prologue: frame size=0 */
 112                    /* prologue end (size=0) */
 113 0008 982F                  mov r25,r24
 114                    .L5:
 109:I2CInterface.c ****        while(status & (1<<BUSY));              /* Bus is busy wait (or exit with error code) */
 115                            .stabn  68,0,109,.LM4-.LFBB2
 116                    .LM4:
 117 000a 8091 0000             lds r24,status
 118 000e 8823                  tst r24
 119 0010 04F0                  brlt .L5
GAS LISTING /tmp/ccfEG7oP.s                    page 5


 120                    .L9:
 110:I2CInterface.c ****        while(TWCR & (1<<TWSTO));
 121                            .stabn  68,0,110,.LM5-.LFBB2
 122                    .LM5:
 123 0012 06B6                  in __tmp_reg__,86-0x20
 124 0014 04FC                  sbrc __tmp_reg__,4
 125 0016 00C0                  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;
 126                            .stabn  68,0,113,.LM6-.LFBB2
 127                    .LM6:
 128 0018 9093 0000             sts twi_address,r25
 114:I2CInterface.c ****        twi_data = data;
 129                            .stabn  68,0,114,.LM7-.LFBB2
 130                    .LM7:
 131 001c 7093 0000             sts (twi_data)+1,r23
 132 0020 6093 0000             sts twi_data,r22
 115:I2CInterface.c ****        twi_bytes = bytes;
 133                            .stabn  68,0,115,.LM8-.LFBB2
 134                    .LM8:
 135 0024 4093 0000             sts twi_bytes,r20
 116:I2CInterface.c ****        twi_ddr = TW_WRITE;
 136                            .stabn  68,0,116,.LM9-.LFBB2
 137                    .LM9:
 138 0028 1092 0000             sts twi_ddr,__zero_reg__
 117:I2CInterface.c **** 
 118:I2CInterface.c ****        retry_cnt = 0;
 139                            .stabn  68,0,118,.LM10-.LFBB2
 140                    .LM10:
 141 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);
 142                            .stabn  68,0,122,.LM11-.LFBB2
 143                    .LM11:
 144 0030 85EA                  ldi r24,lo8(-91)
 145 0032 86BF                  out 86-0x20,r24
 123:I2CInterface.c ****        
 124:I2CInterface.c ****        status |= (1<<BUSY);
 146                            .stabn  68,0,124,.LM12-.LFBB2
 147                    .LM12:
 148 0034 8091 0000             lds r24,status
 149 0038 8068                  ori r24,lo8(-128)
 150 003a 8093 0000             sts status,r24
 151                    /* epilogue: frame size=0 */
 152 003e 0895                  ret
 153                    /* epilogue end (size=1) */
 154                    /* function I2CInt_writeData size 28 (27) */
 155                            .size   I2CInt_writeData, .-I2CInt_writeData
 156                    .Lscope2:
 157                            .stabs  "",36,0,0,.Lscope2-.LFBB2
 158                            .stabd  78,0,0
 159                            .stabs  "I2CInt_readData:F(0,15)",36,0,138,I2CInt_readData
 160                            .stabs  "address:P(0,11)",64,0,137,25
 161                            .stabs  "data:P(0,16)",64,0,137,22
GAS LISTING /tmp/ccfEG7oP.s                    page 6


 162                            .stabs  "bytes:P(0,11)",64,0,137,20
 163                    .global I2CInt_readData
 164                            .type   I2CInt_readData, @function
 165                    I2CInt_readData:
 166                            .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 **** {
 167                            .stabn  68,0,138,.LM13-.LFBB3
 168                    .LM13:
 169                    .LFBB3:
 170                    /* prologue: frame size=0 */
 171                    /* prologue end (size=0) */
 172 0040 982F                  mov r25,r24
 173                    .L15:
 139:I2CInterface.c ****     /* Bus is busy wait (or exit with error code) */
 140:I2CInterface.c ****        while(status & (1<<BUSY));                                                                      
 174                            .stabn  68,0,140,.LM14-.LFBB3
 175                    .LM14:
 176 0042 8091 0000             lds r24,status
 177 0046 8823                  tst r24
 178 0048 04F0                  brlt .L15
 141:I2CInterface.c **** 
 142:I2CInterface.c ****        twi_address = address;
 179                            .stabn  68,0,142,.LM15-.LFBB3
 180                    .LM15:
 181 004a 9093 0000             sts twi_address,r25
 143:I2CInterface.c ****        twi_data = data;
 182                            .stabn  68,0,143,.LM16-.LFBB3
 183                    .LM16:
 184 004e 7093 0000             sts (twi_data)+1,r23
 185 0052 6093 0000             sts twi_data,r22
 144:I2CInterface.c ****        twi_bytes = bytes;
 186                            .stabn  68,0,144,.LM17-.LFBB3
 187                    .LM17:
 188 0056 4093 0000             sts twi_bytes,r20
 145:I2CInterface.c ****        twi_ddr = TW_READ;
 189                            .stabn  68,0,145,.LM18-.LFBB3
 190                    .LM18:
 191 005a 81E0                  ldi r24,lo8(1)
 192 005c 8093 0000             sts twi_ddr,r24
 146:I2CInterface.c **** 
 147:I2CInterface.c ****        retry_cnt = 0;
 193                            .stabn  68,0,147,.LM19-.LFBB3
 194                    .LM19:
 195 0060 1092 0000             sts retry_cnt,__zero_reg__
GAS LISTING /tmp/ccfEG7oP.s                    page 7


 148:I2CInterface.c ****        
 149:I2CInterface.c ****        /* Generate start condition, the remainder of the transfer is interrupt driven and
 150:I2CInterface.c ****           will be performed in the background */
 151:I2CInterface.c ****        TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN)|(1<<TWIE);
 196                            .stabn  68,0,151,.LM20-.LFBB3
 197                    .LM20:
 198 0064 85EA                  ldi r24,lo8(-91)
 199 0066 86BF                  out 86-0x20,r24
 152:I2CInterface.c ****        
 153:I2CInterface.c ****        status |= (1<<BUSY);
 200                            .stabn  68,0,153,.LM21-.LFBB3
 201                    .LM21:
 202 0068 8091 0000             lds r24,status
 203 006c 8068                  ori r24,lo8(-128)
 204 006e 8093 0000             sts status,r24
 205                    /* epilogue: frame size=0 */
 206 0072 0895                  ret
 207                    /* epilogue end (size=1) */
 208                    /* function I2CInt_readData size 26 (25) */
 209                            .size   I2CInt_readData, .-I2CInt_readData
 210                    .Lscope3:
 211                            .stabs  "",36,0,0,.Lscope3-.LFBB3
 212                            .stabd  78,0,0
 213                            .stabs  "I2CInt_isI2cBusy:F(7,1)",36,0,166,I2CInt_isI2cBusy
 214                    .global I2CInt_isI2cBusy
 215                            .type   I2CInt_isI2cBusy, @function
 216                    I2CInt_isI2cBusy:
 217                            .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 **** {
 218                            .stabn  68,0,166,.LM22-.LFBB4
 219                    .LM22:
 220                    .LFBB4:
 221                    /* prologue: frame size=0 */
 222                    /* prologue end (size=0) */
 167:I2CInterface.c ****        bool_t retVal = FALSE;
 168:I2CInterface.c ****        if ( (status & (1<<BUSY)) != 0)
 223                            .stabn  68,0,168,.LM23-.LFBB4
 224                    .LM23:
 225 0074 8091 0000             lds r24,status
 226 0078 881F                  rol r24
 227 007a 8827                  clr r24
 228 007c 881F                  rol r24
 169:I2CInterface.c ****        {
 170:I2CInterface.c ****                retVal = TRUE;
 171:I2CInterface.c ****        }
GAS LISTING /tmp/ccfEG7oP.s                    page 8


 172:I2CInterface.c ****        
 173:I2CInterface.c ****        return(retVal);
 174:I2CInterface.c **** }
 229                            .stabn  68,0,174,.LM24-.LFBB4
 230                    .LM24:
 231 007e 9927                  clr r25
 232                    /* epilogue: frame size=0 */
 233 0080 0895                  ret
 234                    /* epilogue end (size=1) */
 235                    /* function I2CInt_isI2cBusy size 7 (6) */
 236                            .size   I2CInt_isI2cBusy, .-I2CInt_isI2cBusy
 237                    .Lscope4:
 238                            .stabs  "",36,0,0,.Lscope4-.LFBB4
 239                            .stabd  78,0,0
 240                            .stabs  "__vector_17:F(0,15)",36,0,185,__vector_17
 241                    .global __vector_17
 242                            .type   __vector_17, @function
 243                    __vector_17:
 244                            .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 **** {
 245                            .stabn  68,0,185,.LM25-.LFBB5
 246                    .LM25:
 247                    .LFBB5:
 248                    /* prologue: frame size=0 */
 249 0082 1F92                  push __zero_reg__
 250 0084 0F92                  push __tmp_reg__
 251 0086 0FB6                  in __tmp_reg__,__SREG__
 252 0088 0F92                  push __tmp_reg__
 253 008a 1124                  clr __zero_reg__
 254 008c 8F93                  push r24
 255 008e 9F93                  push r25
 256 0090 AF93                  push r26
 257 0092 BF93                  push r27
 258 0094 EF93                  push r30
 259 0096 FF93                  push r31
 260                    /* prologue end (size=11) */
 186:I2CInterface.c ****        unsigned char TWI_status = TWSR & TW_STATUS_MASK;   /* grab just the status bits */
 261                            .stabn  68,0,186,.LM26-.LFBB5
 262                    .LM26:
 263 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) 
 264                            .stabn  68,0,190,.LM27-.LFBB5
 265                    .LM27:
 266 009a 9927                  clr r25
GAS LISTING /tmp/ccfEG7oP.s                    page 9


 267 009c AA27                  clr r26
 268 009e BB27                  clr r27
 269 00a0 887F                  andi r24,lo8(248)
 270 00a2 9070                  andi r25,hi8(248)
 271 00a4 A070                  andi r26,hlo8(248)
 272 00a6 B070                  andi r27,hhi8(248)
 273 00a8 FC01                  movw r30,r24
 274 00aa 3897                  sbiw r30,8
 275 00ac E135                  cpi r30,81
 276 00ae F105                  cpc r31,__zero_reg__
 277 00b0 00F0                  brlo .+2
 278 00b2 00C0                  rjmp .L42
 279                            .stabn  68,0,190,.LM28-.LFBB5
 280                    .LM28:
 281 00b4 E050                  subi r30,lo8(-(pm(.L33)))
 282 00b6 F040                  sbci r31,hi8(-(pm(.L33)))
 283 00b8 0994                  ijmp
 284                            .data
 285                            .section .progmem.gcc_sw_table, "ax", @progbits
 286                            .p2align 1
 287                    .L33:
 288                            .data
 289                            .section .progmem.gcc_sw_table, "ax", @progbits
 290                            .p2align 1
 291 0000 00C0                  rjmp .L25
 292 0002 00C0                  rjmp .L42
 293 0004 00C0                  rjmp .L42
 294 0006 00C0                  rjmp .L42
 295 0008 00C0                  rjmp .L42
 296 000a 00C0                  rjmp .L42
 297 000c 00C0                  rjmp .L42
 298 000e 00C0                  rjmp .L42
 299 0010 00C0                  rjmp .L25
 300 0012 00C0                  rjmp .L42
 301 0014 00C0                  rjmp .L42
 302 0016 00C0                  rjmp .L42
 303 0018 00C0                  rjmp .L42
 304 001a 00C0                  rjmp .L42
 305 001c 00C0                  rjmp .L42
 306 001e 00C0                  rjmp .L42
 307 0020 00C0                  rjmp .L26
 308 0022 00C0                  rjmp .L42
 309 0024 00C0                  rjmp .L42
 310 0026 00C0                  rjmp .L42
 311 0028 00C0                  rjmp .L42
 312 002a 00C0                  rjmp .L42
 313 002c 00C0                  rjmp .L42
 314 002e 00C0                  rjmp .L42
 315 0030 00C0                  rjmp .L27
 316 0032 00C0                  rjmp .L42
 317 0034 00C0                  rjmp .L42
 318 0036 00C0                  rjmp .L42
 319 0038 00C0                  rjmp .L42
 320 003a 00C0                  rjmp .L42
 321 003c 00C0                  rjmp .L42
 322 003e 00C0                  rjmp .L42
 323 0040 00C0                  rjmp .L28
GAS LISTING /tmp/ccfEG7oP.s                    page 10


 324 0042 00C0                  rjmp .L42
 325 0044 00C0                  rjmp .L42
 326 0046 00C0                  rjmp .L42
 327 0048 00C0                  rjmp .L42
 328 004a 00C0                  rjmp .L42
 329 004c 00C0                  rjmp .L42
 330 004e 00C0                  rjmp .L42
 331 0050 00C0                  rjmp .L29
 332 0052 00C0                  rjmp .L42
 333 0054 00C0                  rjmp .L42
 334 0056 00C0                  rjmp .L42
 335 0058 00C0                  rjmp .L42
 336 005a 00C0                  rjmp .L42
 337 005c 00C0                  rjmp .L42
 338 005e 00C0                  rjmp .L42
 339 0060 00C0                  rjmp .L42
 340 0062 00C0                  rjmp .L42
 341 0064 00C0                  rjmp .L42
 342 0066 00C0                  rjmp .L42
 343 0068 00C0                  rjmp .L42
 344 006a 00C0                  rjmp .L42
 345 006c 00C0                  rjmp .L42
 346 006e 00C0                  rjmp .L42
 347 0070 00C0                  rjmp .L30
 348 0072 00C0                  rjmp .L42
 349 0074 00C0                  rjmp .L42
 350 0076 00C0                  rjmp .L42
 351 0078 00C0                  rjmp .L42
 352 007a 00C0                  rjmp .L42
 353 007c 00C0                  rjmp .L42
 354 007e 00C0                  rjmp .L42
 355 0080 00C0                  rjmp .L27
 356 0082 00C0                  rjmp .L42
 357 0084 00C0                  rjmp .L42
 358 0086 00C0                  rjmp .L42
 359 0088 00C0                  rjmp .L42
 360 008a 00C0                  rjmp .L42
 361 008c 00C0                  rjmp .L42
 362 008e 00C0                  rjmp .L42
 363 0090 00C0                  rjmp .L31
 364 0092 00C0                  rjmp .L42
 365 0094 00C0                  rjmp .L42
 366 0096 00C0                  rjmp .L42
 367 0098 00C0                  rjmp .L42
 368 009a 00C0                  rjmp .L42
 369 009c 00C0                  rjmp .L42
 370 009e 00C0                  rjmp .L42
 371 00a0 00C0                  rjmp .L32
 372                            .text
 373                    .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) 
 374                            .stabn  68,0,194,.LM29-.LFBB5
 375                    .LM29:
 376 00ba 8091 0000             lds r24,retry_cnt
GAS LISTING /tmp/ccfEG7oP.s                    page 11


 377 00be 8330                  cpi r24,lo8(3)
 378 00c0 00F0                  brlo .L34
 195:I2CInterface.c ****             {
 196:I2CInterface.c ****                 /* generate stop condition if we've reached our retry limit */
 197:I2CInterface.c ****                 TWCR |= (1<<TWINT)|(1<<TWSTO);                                 
 379                            .stabn  68,0,197,.LM30-.LFBB5
 380                    .LM30:
 381 00c2 86B7                  in r24,86-0x20
 382 00c4 8069                  ori r24,lo8(-112)
 383 00c6 86BF                  out 86-0x20,r24
 198:I2CInterface.c ****                 status &= ~(1<<BUSY);                                                          
 384                            .stabn  68,0,198,.LM31-.LFBB5
 385                    .LM31:
 386 00c8 8091 0000             lds r24,status
 387 00cc 8F77                  andi r24,lo8(127)
 388 00ce 8093 0000             sts status,r24
 389 00d2 00C0                  rjmp .L42
 390                    .L34:
 199:I2CInterface.c ****                 return;                                                                                                
 200:I2CInterface.c ****             }
 201:I2CInterface.c ****             /* indicate read or write */
 202:I2CInterface.c ****             TWDR = (twi_address<<1) + twi_ddr; 
 391                            .stabn  68,0,202,.LM32-.LFBB5
 392                    .LM32:
 393 00d4 8091 0000             lds r24,twi_address
 394 00d8 9091 0000             lds r25,twi_ddr
 395 00dc 880F                  lsl r24
 396 00de 890F                  add r24,r25
 397 00e0 83B9                  out 35-0x20,r24
 203:I2CInterface.c ****             /* TWSTA must be cleared...also clears TWINT */
 204:I2CInterface.c ****             TWCR &= ~(1<<TWSTA);
 398                            .stabn  68,0,204,.LM33-.LFBB5
 399                    .LM33:
 400 00e2 86B7                  in r24,86-0x20
 401 00e4 8F7D                  andi r24,lo8(-33)
 402 00e6 86BF                  out 86-0x20,r24
 403 00e8 00C0                  rjmp .L42
 404                    .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;                                     
 405                            .stabn  68,0,208,.LM34-.LFBB5
 406                    .LM34:
 407 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;                                                                          
 408                            .stabn  68,0,210,.LM35-.LFBB5
 409                    .LM35:
 410 00ee E091 0000             lds r30,twi_data
 411 00f2 F091 0000             lds r31,(twi_data)+1
 412 00f6 8191                  ld r24,Z+
 413 00f8 83B9                  out 35-0x20,r24
 211:I2CInterface.c ****             twi_data++;                        
 414                            .stabn  68,0,211,.LM36-.LFBB5
 415                    .LM36:
 416 00fa F093 0000             sts (twi_data)+1,r31
GAS LISTING /tmp/ccfEG7oP.s                    page 12


 417 00fe E093 0000             sts twi_data,r30
 212:I2CInterface.c **** 
 213:I2CInterface.c ****             /* clear the int to continue */
 214:I2CInterface.c ****             TWCR |= (1<<TWINT);                                                
 418                            .stabn  68,0,214,.LM37-.LFBB5
 419                    .LM37:
 420 0102 86B7                  in r24,86-0x20
 421 0104 8068                  ori r24,lo8(-128)
 422 0106 86BF                  out 86-0x20,r24
 423 0108 00C0                  rjmp .L42
 424                    .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++;               
 425                            .stabn  68,0,219,.LM38-.LFBB5
 426                    .LM38:
 427 010a 8091 0000             lds r24,retry_cnt
 428 010e 8F5F                  subi r24,lo8(-(1))
 429 0110 8093 0000             sts retry_cnt,r24
 220:I2CInterface.c **** 
 221:I2CInterface.c ****             /* retry...*/
 222:I2CInterface.c ****             TWCR |= (1<<TWINT)|(1<<TWSTA)|(1<<TWSTO);  
 430                            .stabn  68,0,222,.LM39-.LFBB5
 431                    .LM39:
 432 0114 86B7                  in r24,86-0x20
 433 0116 806B                  ori r24,lo8(-80)
 434 0118 86BF                  out 86-0x20,r24
 435 011a 00C0                  rjmp .L42
 436                    .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) 
 437                            .stabn  68,0,226,.LM40-.LFBB5
 438                    .LM40:
 439 011c 8091 0000             lds r24,twi_bytes
 440 0120 8150                  subi r24,lo8(-(-1))
 441 0122 8093 0000             sts twi_bytes,r24
 442 0126 8091 0000             lds r24,twi_bytes
 443 012a 8823                  tst r24
 444 012c 01F0                  breq .L36
 227:I2CInterface.c ****             {                                          
 228:I2CInterface.c ****                 /* more data to send, so send it */
 229:I2CInterface.c ****                 TWDR = *twi_data;                                                                      
 445                            .stabn  68,0,229,.LM41-.LFBB5
 446                    .LM41:
 447 012e E091 0000             lds r30,twi_data
 448 0132 F091 0000             lds r31,(twi_data)+1
 449 0136 8191                  ld r24,Z+
 450 0138 83B9                  out 35-0x20,r24
 230:I2CInterface.c ****                 twi_data++;                                                                                    
 451                            .stabn  68,0,230,.LM42-.LFBB5
 452                    .LM42:
 453 013a F093 0000             sts (twi_data)+1,r31
 454 013e E093 0000             sts twi_data,r30
GAS LISTING /tmp/ccfEG7oP.s                    page 13


 231:I2CInterface.c ****                 TWCR |= (1<<TWINT);                                                            
 455                            .stabn  68,0,231,.LM43-.LFBB5
 456                    .LM43:
 457 0142 86B7                  in r24,86-0x20
 458 0144 8068                  ori r24,lo8(-128)
 459 0146 86BF                  out 86-0x20,r24
 460 0148 00C0                  rjmp .L42
 461                    .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);                                 
 462                            .stabn  68,0,236,.LM44-.LFBB5
 463                    .LM44:
 464 014a 86B7                  in r24,86-0x20
 465 014c 8069                  ori r24,lo8(-112)
 466 014e 86BF                  out 86-0x20,r24
 237:I2CInterface.c ****                 status &= ~(1<<BUSY);                                                          
 467                            .stabn  68,0,237,.LM45-.LFBB5
 468                    .LM45:
 469 0150 8091 0000             lds r24,status
 470 0154 8F77                  andi r24,lo8(127)
 471 0156 8093 0000             sts status,r24
 472 015a 00C0                  rjmp .L42
 473                    .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);                                             
 474                            .stabn  68,0,243,.LM46-.LFBB5
 475                    .LM46:
 476 015c 86B7                  in r24,86-0x20
 477 015e 8069                  ori r24,lo8(-112)
 478 0160 86BF                  out 86-0x20,r24
 244:I2CInterface.c ****             status &= ~(1<<BUSY);                                                                      
 479                            .stabn  68,0,244,.LM47-.LFBB5
 480                    .LM47:
 481 0162 8091 0000             lds r24,status
 482 0166 8F77                  andi r24,lo8(127)
 483 0168 8093 0000             sts status,r24
 484 016c 00C0                  rjmp .L42
 485                    .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) 
 486                            .stabn  68,0,248,.LM48-.LFBB5
 487                    .LM48:
 488 016e 8091 0000             lds r24,twi_bytes
 489 0172 8150                  subi r24,lo8(-(-1))
 490 0174 8093 0000             sts twi_bytes,r24
 491 0178 8091 0000             lds r24,twi_bytes
 492 017c 8823                  tst r24
 493 017e 01F0                  breq .L38
GAS LISTING /tmp/ccfEG7oP.s                    page 14


 249:I2CInterface.c ****             {
 250:I2CInterface.c ****                 /* if there is more than one byte to read, acknowledge */
 251:I2CInterface.c ****                 TWCR |= (1<<TWEA)|(1<<TWINT);  
 494                            .stabn  68,0,251,.LM49-.LFBB5
 495                    .LM49:
 496 0180 86B7                  in r24,86-0x20
 497 0182 806C                  ori r24,lo8(-64)
 498 0184 86BF                  out 86-0x20,r24
 499 0186 00C0                  rjmp .L42
 500                    .L38:
 252:I2CInterface.c ****             }
 253:I2CInterface.c ****                        else
 254:I2CInterface.c ****             {
 255:I2CInterface.c ****                 /* no acknowledge */
 256:I2CInterface.c ****                 TWCR |= (1<<TWINT);                                    
 501                            .stabn  68,0,256,.LM50-.LFBB5
 502                    .LM50:
 503 0188 86B7                  in r24,86-0x20
 504 018a 8068                  ori r24,lo8(-128)
 505 018c 86BF                  out 86-0x20,r24
 506 018e 00C0                  rjmp .L42
 507                    .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;                                                                          
 508                            .stabn  68,0,263,.LM51-.LFBB5
 509                    .LM51:
 510 0190 E091 0000             lds r30,twi_data
 511 0194 F091 0000             lds r31,(twi_data)+1
 512 0198 83B1                  in r24,35-0x20
 513 019a 8193                  st Z+,r24
 264:I2CInterface.c ****             twi_data++;                                                                                        
 514                            .stabn  68,0,264,.LM52-.LFBB5
 515                    .LM52:
 516 019c F093 0000             sts (twi_data)+1,r31
 517 01a0 E093 0000             sts twi_data,r30
 265:I2CInterface.c ****             if(--twi_bytes > 0) 
 518                            .stabn  68,0,265,.LM53-.LFBB5
 519                    .LM53:
 520 01a4 8091 0000             lds r24,twi_bytes
 521 01a8 8150                  subi r24,lo8(-(-1))
 522 01aa 8093 0000             sts twi_bytes,r24
 523 01ae 8091 0000             lds r24,twi_bytes
 524 01b2 8823                  tst r24
 525 01b4 01F0                  breq .L40
 266:I2CInterface.c ****             {
 267:I2CInterface.c ****                 /* get the next data byte and ack */
 268:I2CInterface.c ****                 TWCR |= (1<<TWEA)|(1<<TWINT);  
 526                            .stabn  68,0,268,.LM54-.LFBB5
 527                    .LM54:
 528 01b6 86B7                  in r24,86-0x20
 529 01b8 806C                  ori r24,lo8(-64)
 530 01ba 86BF                  out 86-0x20,r24
GAS LISTING /tmp/ccfEG7oP.s                    page 15


 531 01bc 00C0                  rjmp .L42
 532                    .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);                                                    
 533                            .stabn  68,0,273,.LM55-.LFBB5
 534                    .LM55:
 535 01be 86B7                  in r24,86-0x20
 536 01c0 8F7B                  andi r24,lo8(-65)
 537 01c2 86BF                  out 86-0x20,r24
 538 01c4 00C0                  rjmp .L42
 539                    .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;                                                                          
 540                            .stabn  68,0,279,.LM56-.LFBB5
 541                    .LM56:
 542 01c6 E091 0000             lds r30,twi_data
 543 01ca F091 0000             lds r31,(twi_data)+1
 544 01ce 83B1                  in r24,35-0x20
 545 01d0 8083                  st Z,r24
 280:I2CInterface.c ****             TWCR |= (1<<TWSTO)|(1<<TWINT);                                             
 546                            .stabn  68,0,280,.LM57-.LFBB5
 547                    .LM57:
 548 01d2 86B7                  in r24,86-0x20
 549 01d4 8069                  ori r24,lo8(-112)
 550 01d6 86BF                  out 86-0x20,r24
 281:I2CInterface.c ****             status &= ~(1<<BUSY);                                                                                      
 551                            .stabn  68,0,281,.LM58-.LFBB5
 552                    .LM58:
 553 01d8 8091 0000             lds r24,status
 554 01dc 8F77                  andi r24,lo8(127)
 555 01de 8093 0000             sts status,r24
 556                    .L42:
 557                    /* epilogue: frame size=0 */
 558 01e2 FF91                  pop r31
 559 01e4 EF91                  pop r30
 560 01e6 BF91                  pop r27
 561 01e8 AF91                  pop r26
 562 01ea 9F91                  pop r25
 563 01ec 8F91                  pop r24
 564 01ee 0F90                  pop __tmp_reg__
 565 01f0 0FBE                  out __SREG__,__tmp_reg__
 566 01f2 0F90                  pop __tmp_reg__
 567 01f4 1F90                  pop __zero_reg__
 568 01f6 1895                  reti
 569                    /* epilogue end (size=11) */
 570                    /* function __vector_17 size 268 (246) */
 571                            .size   __vector_17, .-__vector_17
 572                    .Lscope5:
 573                            .stabs  "",36,0,0,.Lscope5-.LFBB5
 574                            .stabd  78,0,0
GAS LISTING /tmp/ccfEG7oP.s                    page 16


 575                            .lcomm twi_address,1
 576                            .lcomm twi_data,2
 577                            .lcomm twi_ddr,1
 578                            .lcomm twi_bytes,1
 579                            .lcomm status,1
 580                            .lcomm retry_cnt,1
 581                            .stabs  "twi_address:S(0,17)=B(0,11)",40,0,59,twi_address
 582                            .stabs  "twi_data:S(0,18)=*(0,17)",40,0,60,twi_data
 583                            .stabs  "twi_ddr:S(0,17)",40,0,61,twi_ddr
 584                            .stabs  "twi_bytes:S(0,17)",40,0,62,twi_bytes
 585                            .stabs  "status:S(0,17)",40,0,63,status
 586                            .stabs  "retry_cnt:S(0,17)",40,0,64,retry_cnt
 587                            .stabs  "",100,0,0,.Letext0
 588                    .Letext0:
 589                    /* File "I2CInterface.c": code  333 = 0x014d ( 307), prologues  11, epilogues  15 */
GAS LISTING /tmp/ccfEG7oP.s                    page 17


DEFINED SYMBOLS
                            *ABS*:00000000 I2CInterface.c
     /tmp/ccfEG7oP.s:2      *ABS*:0000003f __SREG__
     /tmp/ccfEG7oP.s:3      *ABS*:0000003e __SP_H__
     /tmp/ccfEG7oP.s:4      *ABS*:0000003d __SP_L__
     /tmp/ccfEG7oP.s:5      *ABS*:00000000 __tmp_reg__
     /tmp/ccfEG7oP.s:6      *ABS*:00000001 __zero_reg__
     /tmp/ccfEG7oP.s:78     .text:00000000 I2CInt_init
     /tmp/ccfEG7oP.s:106    .text:00000008 I2CInt_writeData
     /tmp/ccfEG7oP.s:578    .bss:00000005 status
                             .bss:00000000 twi_address
     /tmp/ccfEG7oP.s:575    .bss:00000001 twi_data
     /tmp/ccfEG7oP.s:577    .bss:00000004 twi_bytes
     /tmp/ccfEG7oP.s:576    .bss:00000003 twi_ddr
     /tmp/ccfEG7oP.s:579    .bss:00000006 retry_cnt
     /tmp/ccfEG7oP.s:165    .text:00000040 I2CInt_readData
     /tmp/ccfEG7oP.s:216    .text:00000074 I2CInt_isI2cBusy
     /tmp/ccfEG7oP.s:243    .text:00000082 __vector_17

UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss