| ??? 10/14/08 14:14 Read: times |
#159051 - I need baby steps now. I 'm staying crazy with it. Responding to: ???'s previous message |
Hi ,
You tell me in the second message what code I have to added it. I created a global var named unsigned char i2cVector[30]; And created also two more variables unsigned int: IndexTx and IndexRx, to pointed to correct variable position. In the Callback rotines, I did it: unsigned char i2c_master_getbyte(unsigned int bytenum)
{
return i2cVector[bytenum];
}
void i2c_master_receivedbyte(unsigned int bytenum, unsigned char value)
{
i2cVector[bytenum]=value;
}
unsigned char i2c_master_islasttxbyte(unsigned int bytenum)
{
if(bytenum==(IndexTx-1))
return(1);
else
return(0);
}
unsigned char i2c_master_islastrxbyte(unsigned int bytenum)
{
if(bytenum==(IndexRx-1))
return(1);
else
return(0);
}
void i2c_transfer_finished(void)
{
IndexTx=0;
IndexRx=0;
}
I didn't change anything in the others functions. Are anything correct code ? Now, I'm trying to write a byte using :
#define AT24C256 0x50 // 0101 0000
void main(void)
{
i2c_init(0x00, 0);
EA=1;
IndexTx=3; // bytes to write to memory
i2cVector[0]=0x00;
i2cVector[1]=0x00;
i2cVector[2]=0x5A;
while(1)
{
if (i2c_getstatus() == I2C_OK)
i2c_transmit(AT24C256);
IndexRx=1; // bytes to read from memory
if (i2c_getstatus() == I2C_OK)
i2c_receive(AT24C256);
}
while(1);
}
Are these anything correct code? I undestood how the I2C interrupt work. The I2C interrupt is called a lot of time to transmit a sigle byte. (start condition, putting address slave in i2c bus, putting address e2prom (high and low), putting data to write and finally, stop condition. Is it correct ? Jorge |



