I want to use the function of I2C with S32K118. I've set up the slave address but I have no idea how to set up register address with slave address.
Solved! Go to Solution.
For example: Set Slave Address = 0x27,
1.Configure slave Address 0x27 (Slave address,7-bit or 10-bit) in Ipi2c1.h
lpi2c_slave_user_config_t lpi2c1_SlaveConfig0 = {
.slaveAddress = 39U,//0x27
.is10bitAddr = false,
.slaveListening = true,
.operatingMode = LPI2C_STANDARD_MODE,
.transferType = LPI2C_USING_INTERRUPTS,
.dmaChannel = 0U,
.slaveCallback = lpi2c1_SlaveCallback0,
.callbackParam = NULL,
};
2.Use "LPI2C_DRV_SlaveInit(INST_LPI2C1, &lpi2c1_SlaveConfig0, &lpi2c1SlaveState);",it will call function" LPI2C_Set_SlaveAddr0();" and then set Slave address7-bit or 10-bit.
3.Register value.
BR!
Jim,
-------------------------------------------------------------------------------
Note:
- If this post answers your question, please click the "Mark Correct" button. Thank you!
- We are following threads for 7 weeks after the last post, later replies are ignored
Please open a new thread and refer to the closed one, if you have a related question at a later point in time.
-------------------------------------------------------------------------------
Hi@Senlent,
Thanks for your reply. I've found the example project. The example seems like just init the slave. I don't how to set up certain register address base on it. Could you explain more detail of the example?
Thanks,
Allen
For example: Set Slave Address = 0x27,
1.Configure slave Address 0x27 (Slave address,7-bit or 10-bit) in Ipi2c1.h
lpi2c_slave_user_config_t lpi2c1_SlaveConfig0 = {
.slaveAddress = 39U,//0x27
.is10bitAddr = false,
.slaveListening = true,
.operatingMode = LPI2C_STANDARD_MODE,
.transferType = LPI2C_USING_INTERRUPTS,
.dmaChannel = 0U,
.slaveCallback = lpi2c1_SlaveCallback0,
.callbackParam = NULL,
};
2.Use "LPI2C_DRV_SlaveInit(INST_LPI2C1, &lpi2c1_SlaveConfig0, &lpi2c1SlaveState);",it will call function" LPI2C_Set_SlaveAddr0();" and then set Slave address7-bit or 10-bit.
3.Register value.
BR!
Jim,
-------------------------------------------------------------------------------
Note:
- If this post answers your question, please click the "Mark Correct" button. Thank you!
- We are following threads for 7 weeks after the last post, later replies are ignored
Please open a new thread and refer to the closed one, if you have a related question at a later point in time.
-------------------------------------------------------------------------------
You can refer to example "lpi2c_slave_s32k118" in S32 DS, and this example shows the LPI2C Slave functionality. The purpose of this demo application is to show you the usage of the LPI2C module available on the S32K118 MCU as a \b slave using S32 SDK.
usage or detail please refer to lpi2c_slave.dox in project.
-----------------------------------------------------------------------------------------------------------------------------------------
/*!
* @brief Configure the ADDR0 address for slave address match
*
* This function configures the ADDR0 value which is used to validate the received
* slave address. In 10-bit mode, the first address byte is compared to
* { 11110, ADDR0[10:9] } and the second address byte is compared to ADDR0[8:1].
* In 7-bit mode, the address is compared to ADDR0[7:1]
* The formula used for address validation is configured with function
* LPI2C_Set_SlaveAddrConfig().
*
* @param baseAddr base address of the LPI2C module
* @param addr ADDR0 address for slave address match
*/
static inline void LPI2C_Set_SlaveAddr0(LPI2C_Type *baseAddr, uint16_t addr)
{
uint32_t tmp = baseAddr->SAMR;
tmp &= ~(LPI2C_SAMR_ADDR0_MASK);
tmp |= LPI2C_SAMR_ADDR0(addr);
baseAddr->SAMR = tmp;
}
If you are using LPI2C as slave mode base on bare-metal, please refer to the SDK driver to modify the code as you need..
BR!
Jim,