Hay
I am facing problem with LPC2114 inbuilt I2C, i interfaced LPC2114 with PCF8574AP Port Expander.
I have tested following code but the salve device (PCF8574AP) not responding.
My application is I have to read the Digital inputs from the PCF8574AP device
PCF8574AP device address Pins A0, A1, A2 connected to the ground
Please provide the information regarding how to read the inputs from the I2C Port Expander.
///////////////////////////////I2C-Testing-Code///////////////////////
#include<LPC21XX.h>
#define LED1 0x00000010 //P0.4
#define LED2 0x00000040 //P0.6
#define LED3 0x00000080 //P0.7
#define LED4 0x00000400 //P0.10
unsigned char I2CAddress = 0x71; // set I2C slave address for read from the chip
void init_pll()
{
PLLCFG=0x00;//multiplier and divider values are 00
PLLCON=0x00; //PLL is bypassed and the oscillator clock is used directly by the LPC2114,PLL is turned off
PLLFEED=0xAA; //Feed values
PLLFEED=0x55;
VPBDIV=0x01; //VPB bus clock is the same as the processor clock Pclk=14.7MHZ, Cclk=14.7MHZ
}
void I2C0_Isr(void) __irq
{
unsigned char st;
st = I2STAT;
switch(st)
{
case 0x08: //when start bit is enable status of the regeater is 0x08
I2CONCLR=0X20;//Clear start bit
IO0SET=LED1;
delay();
I2DAT=I2CAddress; //send the address with read bit 01110001=0x71
break;
case 0x40: //slave address +R,ACK
I2CONSET = 0x04; // enable ACK for data byte
IO0SET=LED2;
delay();
break;
case 0x48: //slave address+R, Not ACK
I2CONSET = 0x20; // Resend the start condition
IO0SET=LED3;
break;
case 0x10: //Repet Start condition Data Recived ,Not ACK
I2CONCLR = 0x20; // Clear the start condition
I2DAT=I2CAddress; //send the address with read bit 01110001
IO0SET=LED4;
delay();
break;
default:
break;
}
I2CONCLR=0x08; // clear SI
VICVectAddr = 0; // reset VIC
}
void main()
{
unsigned int i;
init_pll();
PINSEL0 |= 0x50; //select the SDA,SCL pins
IODIR0=0x00FFFFF0;
I2CONCLR=0x6c; /* clearing all flags */
I2CONSET=0x40; /* enabling I2C */
I2SCLH=0x08; /* 56.7 KHz */
I2SCLL=0x08;
/* Initialize VIC for I2C use */
VICVectAddr0 = (unsigned int) &I2C0_Isr;
VICVectCntl0 = 0x29; // Channel1 on Source#9 … enabled
VICIntEnable |= 0x200;
/* ISR address written to the respective address register*/
/* Send start bit */
I2CONSET=0x60;
delay(); //
while(1)
{
i++;
delay();
i–;
}
}
Regards
Chandu