查看: 2185|回复: 0

[求助] LPC1549 I2C中断实现

[复制链接]

该用户从未签到

1

主题

1

帖子

0

新手上路

Rank: 1

积分
14
最后登录
2022-1-5
发表于 2022-1-4 17:15:36 | 显示全部楼层 |阅读模式
社区大神,还请指导一下。

问题:
使用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通信呢?
我知道答案 目前已有0人回答
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-26 19:15 , Processed in 0.084437 second(s), 20 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表