
UM10800
All information provided in this document is subject to legal disclaimers.
© NXP Semiconductors N.V. 2016. All rights reserved.
User manual
Rev. 1.2 — 5 October 2016
454 of 487
NXP Semiconductors
UM10800
Chapter 34: LPC82x Code examples
34.2.2 Interrupt handler
34.2.3 Master write one byte to slave
Table 406. I2C Code example
Interrupt handler
void I2c_IRQHandler() {
uint32_t intstat = LPC_I2C->INTSTAT;
uint32_t stat = LPC_I2C->STAT;
if(intstat & I2C_STAT_MSTPENDING) {
uint32_t mst_state = stat & I2C_STAT_MSTSTATE;
if(mst_state == I2C_STAT_MSTST_IDLE) {
LPC_I2C->MSTDAT = (0x23 << 1) | 1; // address and 1 for RWn bit in
order
// to read data
LPC_I2C->MSTCTL = I2C_MSTCTL_MSTSTART; // send start
}
if(mst_state == I2C_STAT_MSTST_RX) {
uint8_t data;
data = LPC_I2C->MSTDAT; // receive data
if(data != 0xdd) abort();
LPC_I2C->MSTDAT = (0x23 << 1) | 0; // address and 1 for RWn bit in
order
// to read data
LPC_I2C->MSTCTL = I2C_MSTCTL_MSTSTART; // repeated start (nack
implied)
}
if(mst_state == I2C_STAT_MSTSTX) {
LPC_I2C->MSTCTL = I2C_MSTCTL_MSTSTOP; // stop transaction
LPC_I2C->INTENCLR = I2C_STAT_MSTPENDING;
}
}
}
Table 407. I2C Code example
Master write one byte to slave. Address 0x23, Data 0xdd. Polling mode.
LPC_I2C->CFG = I2C_CFG_MSTEN;
while(!(LPC_I2C->STAT & I2C_STAT_MSTPENDING));
if((LPC_I2C->STAT & I2C_STAT_MSTSTATE) != I2C_STAT_MSTST_IDLE) abort();
LPC_I2C->MSTDAT = (0x23 << 1) | 0; // address and 0 for RWn bit
LPC_I2C->MSTCTL = I2C_MSTCTL_MSTSTART; // send start
while(!(LPC_I2C->STAT & I2C_STAT_MSTPENDING));
if((LPC_I2C->STAT & I2C_STAT_MSTSTATE) != I2C_STAT_MSTSTX) abort();
LPC_I2C->MSTDAT = 0xdd; // send data
LPC_I2C->MSTCTL = I2C_MSTCTL_MSTCONTINUE; // continue transaction
while(!(LPC_I2C->STAT & I2C_STAT_MSTPENDING));
if((LPC_I2C->STAT & I2C_STAT_MSTSTATE) != I2C_STAT_MSTSTX) abort();
LPC_I2C->MSTCTL = I2C_MSTCTL_MSTSTOP; // send stop
while(!(LPC_I2C->STAT & I2C_STAT_MSTPENDING));
if((LPC_I2C->STAT & I2C_STAT_MSTSTATE) != I2C_STAT_MSTST_IDLE) abort();