hi everyone i trying to communicate between two lpc2148’s using I2C. there seems to be problem in the slave side i think so. while using logic analyser i always receive NACK.
Mastercode
`void I2C_Initi(void);
__irq void I2C_ISR(void);
void ISR_8(void);
void ISR_18(void);
void ISR_10(void);
void ISR_28(void);
int i,Temp,f;
int main()
{
PINSEL0&=0xFFFFFF0F;
PINSEL0|=0x00000050;// using i2c0
I2C_Initi();
I2C0CONSET|=0x20;/* Send start bit */
if(I2C0STAT){}
}
void I2C_Initi(void)
{
I2C0CONCLR=0X6C;
I2C0CONSET=0X40; // configuring as master
I2C0SCLH= 0x01;
I2C0SCLL= 0x90;
VICVectCntl0 = 0x20 | 9;
VICIntEnable |= (1<<9);
VICVectAddr0 = (unsigned long)I2C_ISR;
}
__irq void I2C_ISR()
{
Temp=I2C0STAT;
switch(Temp)
{
case 0x08:
ISR_8();
break;
case 0x18:
ISR_18();
break;
case 0x28:
ISR_28();
break;
}
VICVectAddr = 0xff;
}
void ISR_8(void)
{
I2C0DAT=0x60; //slave address//
I2C0CONSET=0x04;
I2C0CONCLR=0x08;
}
void ISR_18(void)
{
I2C0DAT=0x32 ; // sample data
I2C0CONSET=0X04;
I2C0CONCLR=0x08;
}
void ISR_28(void)
{
I2C0DAT=0x24 ; // next data
I2C0CONSET=0X04;
I2C0CONCLR=0x08;
}
`
slave Code
`
void I2C_Slave_Initi(void);
__irq void I2C_ISR(void);
void ISR_60(void);
void ISR_80(void);
int i,temp;
int8 f;
int main()
{
PINSEL0&=0xFFFFFF0F;
PINSEL0|=0x00000050;
I2C_Slave_Initi();
LCD_Init();
//if(I2C0STAT)
Display_String("s");
Display_Hex(f,2);
}
void I2C_Slave_Initi(void)
{
I2C0ADR=0x60; // slave address
I2C0CONCLR = 0XFF;
I2C0CONSET = 0x44;
VICVectCntl0 = 0x20 | 9;
VICIntEnable |= (1<<9);
VICVectAddr0= (unsigned long)I2C_ISR;
VICVectAddr =0xFF;
}
__irq void I2C_ISR()
{
temp=I2C0STAT;
switch(temp)
{
case 0x60:
ISR_60();
break;
case 0x80:
ISR_80();
break;
}
}
void ISR_60(void)
{
IOCLR0=0x10;
I2C0CONSET=0x04; //slave address//
I2C0CONCLR=0x28;
IOSET0=0x10;
f=I2C0DAT;
}
void ISR_80(void)
{
f=I2C0DAT;
I2C0CONSET=0X04;
I2C0CONCLR=0x08;
}`
any ideas what is wrong in this, suggestions to solve issue , tell me
Thanks in advance