public inbox for ecos-discuss@sourceware.org
 help / color / mirror / Atom feed
* [ECOS] i2c bit-banging implementation
@ 2005-06-23  0:28 clifford.joseph
  2005-06-25 13:10 ` Bart Veer
  0 siblings, 1 reply; 4+ messages in thread
From: clifford.joseph @ 2005-06-23  0:28 UTC (permalink / raw)
  To: ecos-discuss

Hi

I am trying to implement an i2c transfer by bit-banging.

I have successfully added the hardware package CYGPKG_IO_I2C to my configuration file. (.ecc)

Iam working on the eb40a evaluation board which has already an i2c device at24c512 eeprom. 

I am using  arm-elf-gcc version 3.2.1

As described I have added this in  the plf_io.h

#define HAL_I2C_EXPORTED_DEVICES                    	          \
    extern cyg_i2c_bus                  cyg_i2c_xyzzy_bus;        \
    extern cyg_i2c_device               cyg_i2c_wallclock_ds1307; \
    extern cyg_i2c_device               cyg_i2c_eeprom;

and in the application  main.cpp file I have implemented the following function

static cyg_bool
hal_alaia_i2c_bitbang(cyg_i2c_bus* bus, cyg_i2c_bitbang_op op)
{
    cyg_bool result    = 0;
    
    switch(op) 
    {

        case CYG_I2C_BITBANG_INIT:
           {
            }
        case CYG_I2C_BITBANG_SCL_HIGH:
            {
            }
…..
…..
….
…..
.
    }
    return result;
}




This is the definition in the i2c.h file

typedef struct cyg_i2c_device {
    struct cyg_i2c_bus* i2c_bus;
    cyg_uint16          i2c_address;
    cyg_uint16          i2c_flags;
    cyg_uint32          i2c_delay;
} cyg_i2c_device;

#define CYG_I2C_DEFAULT_DELAY   10000

// A utility macro for defining an I2C device
#define CYG_I2C_DEVICE(_name_, _bus_, _address_, _flags_, _delay_)  \
    cyg_i2c_device _name_ = {                         	        \
        .i2c_bus        = _bus_,                            		        \
        .i2c_address    = _address_,                                        \
        .i2c_flags      = _flags_,                                                \
        .i2c_delay      = _delay_                                               \
    }

CYG_I2C_DEVICE(cyg_i2c_eeprom, &cyg_i2c_xyzzy_bus, 0xA0, 0x00,CYG_I2C_DEFAULT_DELAY);

It still returns the same error when I compile 

The error is

parse error before ‘.’ token

I am able create my own device without using the macro CYG_I2C_DEVICE by writing the code

extern cyg_i2c_device       cyg_i2c_eeprom;
    cyg_i2c_eeprom.i2c_bus     = &cyg_i2c_xyzzy_bus;
    cyg_i2c_eeprom.i2c_address = 0xA0;  //   10100000;
    cyg_i2c_eeprom.i2c_flags   = 0;
    cyg_i2c_eeprom.i2c_delay   = CYG_I2C_DEFAULT_DELAY;

but then i get an error at line..

   CYG_I2C_BITBANG_BUS( &cyg_i2c_xyzzy_bus, &hal_alaia_i2c_bitbang);
   
parse error before ‘.’ Token

looking at the i2c.h file the implementation of  macro

#define CYG_I2C_BUS(_name_, _init_fn_, _tx_fn_, _rx_fn_, _stop_fn_, _extra_)    \
    cyg_i2c_bus _name_  CYG_HAL_TABLE_ENTRY( i2c_buses ) = {                    \
        .i2c_init_fn    = _init_fn_,                                            \
        .i2c_tx_fn      = _tx_fn_,                                              \
        .i2c_rx_fn      = _rx_fn_,                                              \
        .i2c_stop_fn    = _stop_fn_,                                            \
        .i2c_extra      = _extra_                                               \
    }
Looking at the varios instances where the CYG_HAL_TABLE_ENTRY has been used in the other files

It has been implemented  in this way
Example:

 cyg_httpd_table_entry __name CYG_HAL_TABLE_ENTRY( httpd_table ) = { __pattern, __handler, __arg }

where __pattern, __handler, __arg are the arguments passed on to the httpd_table

Can somebody help me regarding this 

Has anybody been successful in implementing a bit-banging using the i2c package. 

Any idea why there is an error ? 

parse error before ‘.’ Token




--
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss

^ permalink raw reply	[flat|nested] 4+ messages in thread
* Re: Re: [ECOS] i2c bit-banging implementation
@ 2005-07-01  5:10 clifford.joseph
  2005-07-02 16:10 ` Bart Veer
  0 siblings, 1 reply; 4+ messages in thread
From: clifford.joseph @ 2005-07-01  5:10 UTC (permalink / raw)
  To: Bart Veer; +Cc: ecos-discuss

Thank you for the reply

I am sending you the exact information printed after compiling

L2CapDataClientMain.cpp is where main() is

i have compiled the code with g++ -E -g 

this is the message i get 


arm-elf-g++ -L/opt/ecos/gnutools/arm-elf/arm-elf/lib -L../../../Lib -L/opt/ecos/
work/ram_debug/ram_debug_install/lib -Ttarget.ld -nostdlib -mcpu=arm7tdmi -mno-s
hort-load-words -nostartfiles -Wl,-static -Wl,-Map,map_file -Wl,--gc-sections -O
1 -E -g  -o L2capDataClient L2capDataClient.o L2capDataClientMain.o BoardSpecifi
c.o  -lprofiles -lapi -lsofttools -lstack -ltransport -lportability -lcommon

arm-elf-g++: -static: linker input file unused because linking not done
arm-elf-g++: -Map: linker input file unused because linking not done
arm-elf-g++: map_file: linker input file unused because linking not done
arm-elf-g++: --gc-sections: linker input file unused because linking not done
arm-elf-g++: L2capDataClient.o: linker input file unused because linking not don
e
.........(for all files)

Does this mean that there are no errors after compilation of preprocessors?


i have compiled the code with g++ -g  (as our usual compilation)

arm-elf-g++ -c -o L2capDataClientMain.o -I/opt/ecos/work/ram_debug/ram_debug_ins
tall/include -I. -I/opt/ecos/gnutools/arm-elf/arm-elf/include -I. -I/opt/ecos/gn
utools/arm-elf/arm-elf/include/arm-elf -fno-exceptions -Wall -Wno-deprecated -Wi
mplicit -Wreturn-type -Wunused -Wswitch -Wcomment -Wparentheses -Wpointer-arith
-Wmissing-prototypes -mstructure-size-boundary=8 -mcpu=arm7tdmi -mno-short-load-
words -Wstrict-prototypes -Winline -Wundef -Woverloaded-virtual -ffunction-secti
ons -fdata-sections -fno-rtti -finit-priority -O1 -g  -I. -I../../../System/Audi
o -I../../../System/Api -I../../../System/Common -I../../../System/Profiles -I..
/../../System/SoftTools -I../../../System/Stack -I../../../System/Transport -I..
/../../System/Portability L2capDataClientMain.cpp
L2capDataClientMain.cpp: In function `int main(int, char**)':
L2capDataClientMain.cpp:56: parse error before `.' token
L2capDataClientMain.cpp:56: warning: unused variable `cyg_i2c_device
   cyg_i2c_eeprom'
L2capDataClientMain.cpp: At global scope:
L2capDataClientMain.cpp:113: conflicting types for `
   cyg_i2c_bus&hal_alaia_i2c_bus'
L2capDataClientMain.cpp:45: previous declaration as `cyg_i2c_bus
   hal_alaia_i2c_bus'
L2capDataClientMain.cpp:113: parse error before `.' token
L2capDataClientMain.cpp:113: ISO C++ forbids use of initializer list to
   initialize reference `hal_alaia_i2c_bus'
L2capDataClientMain.cpp:74: warning: `cyg_bool
   hal_alaia_i2c_bitbang(cyg_i2c_bus*, cyg_i2c_bitbang_op)' defined but not
   used
make: *** [L2capDataClientMain.o] Error 1



I am not sure of what this error is referring to 

L2capDataClientMain.cpp:113: ISO C++ forbids use of initializer list to
   initialize reference `hal_alaia_i2c_bus'

the code at this line is

   CYG_I2C_BITBANG_BUS( &hal_alaia_i2c_bus, &hal_alaia_i2c_bitbang);

Thank you

Clifford



----- Original Message -----
From: Bart Veer [mailto:bartv@ecoscentric.com]
Sent: 6/25/2005 11:10:35 PM
To: clifford.joseph@clarinox.com
Cc: ecos-discuss@ecos.sourceware.org
Subject: Re: [ECOS] i2c bit-banging implementation

> >>>>> " " ==   <clifford.joseph@clarinox.com> writes:

> 

>      > I am trying to implement an i2c transfer by bit-banging

>      <snip>

> 

>      > It still returns the same error when I compile

>      > The error is

>      > parse error before ?.? token

> 

>      <snip>

> 

>      > Looking at the varios instances where the CYG_HAL_TABLE_ENTRY

>      > has been used in the other files it has been implemented in

>      > this way. Example:

> 

>      >  cyg_httpd_table_entry __name CYG_HAL_TABLE_ENTRY( httpd_table ) =

>      >     { __pattern, __handler, __arg }

> 

>      > where __pattern, __handler, __arg are the arguments passed on to the httpd_table

> 

>      > Can somebody help me regarding this

> 

>      > Has anybody been successful in implementing a bit-banging using the i2c package

> 

>      > Any idea why there is an error ?

> 

>      > parse error before ?.? Token

> 

> Yes, there have been successful implementations of the bit-bang code.

> In fact the first ever I2C driver used bit-banging.

> 

> There is no significant difference between the cyg_httpd_table_entry

> macro and the I2C bus one. The latter uses a gcc extension called

> Designated Initializers,

> http://gcc.gnu.org/onlinedocs/gcc-3.2.3/gcc/Designated-Inits.html#Designated%20Inits

> The aim is to allow the cyg_i2c_bus structure to be changed in future,

> including adding new fields at the start or in the middle of the

> structure, without invalidating existing instances of the

> CYG_I2C_BUS() macro.

> 

> Unfortunately it is not possible to tell from the error message

> exactly what the problem is. To confuse things further I suspect the

> original email has been garbled somewhere along the way.

> 

> I suggest you try compiling the source code in two steps. First use

> gcc -E to just run the preprocessor on the file. Then compile the

> resulting file normally. This should give you a line number for the

> parse error, and a matching source file without the potentially

> confusing macros.

> 

> Bart

> 

> -- 

> Bart Veer                       eCos Configuration Architect

> http://www.ecoscentric.com/     The eCos and RedBoot experts

> 

> 

> -- 

> Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos

> and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss

> 

> 


--
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss

^ permalink raw reply	[flat|nested] 4+ messages in thread
* Re: [ECOS] i2c bit-banging implementation
@ 2005-07-14  2:13 clifford.joseph
  0 siblings, 0 replies; 4+ messages in thread
From: clifford.joseph @ 2005-07-14  2:13 UTC (permalink / raw)
  To: bartv; +Cc: ecos-discuss

Hi Bart 

I have successfully implemented the I2C bit-banging by writing the macros in C file.

I am able to communicate succesfully with the Eeprom on the eb40a board

Thank you 



--
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2005-07-14  2:13 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-06-23  0:28 [ECOS] i2c bit-banging implementation clifford.joseph
2005-06-25 13:10 ` Bart Veer
2005-07-01  5:10 clifford.joseph
2005-07-02 16:10 ` Bart Veer
2005-07-14  2:13 clifford.joseph

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).