在线时间1 小时
UID3814211
注册时间2022-1-4
NXP金币0
该用户从未签到
新手上路

- 积分
- 14
- 最后登录
- 2022-1-5
|
社区大神,还请指导一下。
问题:
使用uint32_t Chip_I2CM_XferBlocking(LPC_I2C_T *pI2C, I2CM_XFER_T *xfer);可以同从机进行I2C通信,并且能够正确读取从机寄存器的值。
但是使用它的话,大概有16ms的阻塞。
/**
* @brief Transmit and Receive data in master mode
* @param pI2C : Pointer to selected I2C peripheral
* @param xfer : Pointer to a I2CM_XFER_T structure see notes below
* @return Returns non-zero value on succesful completion of transfer.
* @note
* This function operates same as Chip_I2CM_Xfer(), but is a blocking call.
*/
uint32_t Chip_I2CM_XferBlocking(LPC_I2C_T *pI2C, I2CM_XFER_T *xfer);
因为阻塞会导致主程序运行异常,所以改成了下面的方式:
先调用:
void Chip_I2CM_Xfer(LPC_I2C_T *pI2C, I2CM_XFER_T *xfer);
static INLINE void Chip_I2C_EnableInt(LPC_I2C_T *pI2C, uint32_t intEn);
然后在I2C的中断函数中,调用:
uint32_t Chip_I2CM_XferHandler(LPC_I2C_T *pI2C, I2CM_XFER_T *xfer);
static INLINE void Chip_I2C_ClearInt(LPC_I2C_T *pI2C, uint32_t intEn);
但是这种方式无法读出寄存器的值(显示都是0),并且还会返回:
#define I2CM_STATUS_ERROR 0x01 /*!< Unknown error condition. */
上面是参照例程代码写的,不过好像与预想的结果不一样。
应该如何实现异步或非阻塞的I2C通信呢?
|
|