Hi Micha and Daniel,
I have tested the lpcopen_2_10_keil_iar_nxp_lpcxpresso_1769 periph_i2c project on my LPCXpresso LPC1769 today, at beginning, I also meet the same problem as Micha,
But now, please check the following code modification, I also use the interrupt mode, I can enter I2C1_IRQHandler and it works OK, the code won't stop at Chip_I2C_EventHandler.
1. Most important area, board.c, Board_I2C_Init
void Board_I2C_Init(I2C_ID_T id)
{
switch (id) {
case I2C0:
Chip_IOCON_PinMux(LPC_IOCON, 0, 27, IOCON_MODE_INACT, IOCON_FUNC1);
Chip_IOCON_PinMux(LPC_IOCON, 0, 28, IOCON_MODE_INACT, IOCON_FUNC1);
Chip_IOCON_SetI2CPad(LPC_IOCON, I2CPADCFG_STD_MODE);
break;
case I2C1:
Chip_IOCON_PinMux(LPC_IOCON, 0, 19, IOCON_MODE_INACT, IOCON_FUNC3);
Chip_IOCON_PinMux(LPC_IOCON, 0, 20, IOCON_MODE_INACT, IOCON_FUNC3);
Chip_IOCON_EnableOD(LPC_IOCON, 0, 19);
Chip_IOCON_EnableOD(LPC_IOCON, 0, 20);
break;
case I2C2:
Chip_IOCON_PinMux(LPC_IOCON, 0, 10, IOCON_MODE_INACT, IOCON_FUNC2);
Chip_IOCON_PinMux(LPC_IOCON, 0, 11, IOCON_MODE_INACT, IOCON_FUNC2);
Chip_IOCON_EnableOD(LPC_IOCON, 0, 10);
Chip_IOCON_EnableOD(LPC_IOCON, 0, 11);
break;
}
}
Please note, I2C1 pin p0.19 and p0.20 FUNC3 is the I2C function, not FUCN2.

So, if you choose the FUNC2, the I2C data won't be sent out, the code will stop at the loop.
2. For easy testing, I modify the main code like the following code.
The hardware connection:
- LPCXpresso 1769 (using UART3)
- P0.19(SDA1) connected to P0.27(SDA0)
- P0.20(SCL1) connected to P0.28(SCL0)
int main(void)
{
int tmp;
int xflag = 0;
static I2C_XFER_T xfer;
SystemCoreClockUpdate();
Board_Init();
i2c_app_init(I2C0, SPEED_100KHZ);
i2c_app_init(I2C1, SPEED_100KHZ);
i2c_eeprom_init(I2C_EEPROM_BUS);
i2c_iox_init(I2C_IOX_BUS);
i2c_set_mode(I2C1, 0);
i2cDev = I2C1;
xfer.slaveAddr = 0X5B;
xfer.rxBuff = 0;
xfer.txBuff = 0;
xfer.txSz = 0;
xfer.rxSz = 0;
buffer[0][0] = 6;
xfer.txSz = 1;
xfer.txBuff = buffer[0];
tmp = Chip_I2C_MasterSend(i2cDev, xfer.slaveAddr, xfer.txBuff, xfer.txSz);
DEBUGOUT("Written %d bytes of data to slave 0x%02X.\r\n", tmp, xfer.slaveAddr);
while(1)
{}
}
Now, give you the test result and the I2C bus wave:

I send 7 bit ADDR=0X5B, so the first byte is 0X0x5b<<1=0xB6, correct, the second byte is 0X6, correct.
Micha said the code can't enter the interrupt, please check my following debug information.


You can find my I2C1 handler can be entered, and at last, the code stay in the main while(1) after I send all the I2C data.
So, all the function works.
I also attach my modified file, just for your reference.
Besides, about the document of the lpcopen I2C, please refer to this online document:
LPCOpen Platform: LPC17xx/40xx I2C example
Wish it helps you!
Have a great day,
Kerry
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------