打印
[技术问答]

NUC029 IIC超时功能怎么用?

[复制链接]
1039|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
NUC029  IIC超时功能怎么用?我想在代码上处理,如果NUC029在操作从设备的时候,如果从设备没有响应,退出IIC

使用特权

评论回复
沙发
643757107| | 2019-7-5 09:20 | 只看该作者
你看看库函数里有没有可以实现的操作。

使用特权

评论回复
板凳
643757107| | 2019-7-5 09:21 | 只看该作者
如果没有,就自己实现,定时器实现,定时器里面检查IIC。或者直接主循环里计数检测某个标志位,如果一直没有获取到正常的就关闭他

使用特权

评论回复
地板
yiy| | 2019-7-7 18:11 | 只看该作者
这个功能要自己实现。

使用特权

评论回复
5
xuanhuanzi| | 2019-7-7 22:30 | 只看该作者
不知道还有这个功能。

使用特权

评论回复
6
jasontu| | 2019-7-8 11:05 | 只看该作者
/**
  * @brief This function enables timeout function and configures DIV4 function to support long timeout.
  * @param[in] i2c is the base address of I2C module.
  * @param[in] u8LongTimeout Enable timeout counter input clock is divide by 4.
  * @return none
  */
void I2C_EnableTimeout(I2C_T *i2c, uint8_t u8LongTimeout)
{
    if(u8LongTimeout)
        i2c->TOUT |= I2C_TOUT_DIV4_Msk;
    else
        i2c->TOUT &= ~I2C_TOUT_DIV4_Msk;

    i2c->TOUT |= I2C_TOUT_TOUTEN_Msk;
}
//interrupt time out
void I2C0_IRQHandler(void)
{
    uint32_t u32Status;

    // clear interrupt flag
    I2C0->INTSTS = I2C_INTSTS_INTSTS_Msk;

    u32Status = I2C_GET_STATUS(I2C0);
    if (I2C_GET_TIMEOUT_FLAG(I2C0))
    {
        /* Clear I2C0 Timeout Flag */
        I2C_ClearTimeoutFlag(I2C0);
    }
    else
    {
        if (s_I2C0HandlerFn != NULL)
            s_I2C0HandlerFn(u32Status);
    }
}

使用特权

评论回复
7
wahahaheihei| | 2019-7-8 11:31 | 只看该作者

使用特权

评论回复
8
wahahaheihei| | 2019-7-8 11:32 | 只看该作者
仔细看了一下官方的BSP库,头文件里是有的,说明已经帮我们实现了。

使用特权

评论回复
9
wahahaheihei| | 2019-7-8 11:32 | 只看该作者
看了一下,新唐的ARM内核的BSP都实现了这个函数。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

13

帖子

1

粉丝