This is the mail archive of the
ecos-discuss@sources.redhat.com
mailing list for the eCos project.
i2c bit-banging implementation
- From: "" <clifford dot joseph at clarinox dot com>
- To: ecos-discuss at ecos dot sourceware dot org
- Date: Thu, 23 Jun 2005 10:28:10 +1000
- Subject: [ECOS] i2c bit-banging implementation
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