查看: 2085|回复: 1

[求助] freescale MKL27 I2C模块 读铁电

[复制链接]

该用户从未签到

7

主题

13

帖子

0

注册会员

Rank: 2

积分
146
最后登录
2019-7-8
发表于 2017-7-3 15:04:49 | 显示全部楼层 |阅读模式
为什么读操作每次读的都是同一个值0X80,而且这个值不是我写到铁电里面的值啊。代码如下,不知道什么问题。。。
*********************************************************************************************************/
void i2c_read_selective(INT8U slave_add, INT16U mem_add, INT8U* value, INT16U num)
{
        volatile INT8U dummy = 0;
       
        i2c_start_fram();

        I2C0_D = slave_add;
        while((I2C0_S & I2C_S_RXAK_MASK) == I2C_S_RXAK_MASK);
        I2C0_D = (INT8U)((mem_add & 0xFF00) >> 8);
        while((I2C0_S & I2C_S_RXAK_MASK) == I2C_S_RXAK_MASK);
        I2C0_D = (INT8U)(mem_add & 0x00FF);
        while((I2C0_S & I2C_S_RXAK_MASK) == I2C_S_RXAK_MASK);
       
        i2c_restart_fram();

        I2C0_C1 |= I2C_C1_MST_MASK | I2C_C1_TX_MASK;
       
        I2C0_D = (slave_add) | 0x01;
        while((I2C0_S & I2C_S_RXAK_MASK) == I2C_S_RXAK_MASK);

        I2C0_C1 &= ~(I2C_C1_TX_MASK | I2C_C1_TXAK_MASK);

        if (num == 1)
    {
        I2C0_C1 |= I2C_C1_TXAK_MASK;
    }
        dummy = I2C0_D;
        while((num--))
        {
                if(num == 0)
                {
                    i2c_stop_fram();
                }
                if(num == 1)
                {
                    I2C0_C1 |= I2C_C1_TXAK_MASK;
                }
                *value = I2C0_D;
                value++;
        }
}

我知道答案 目前已有1人回答
回复

使用道具 举报

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
24874
最后登录
2025-7-18
发表于 2017-7-4 11:25:25 | 显示全部楼层
如何你使用的例程的函数,我建议你最好用示波器或者逻辑分析仪看看时序是否数据手册的要求
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-7-20 05:29 , Processed in 0.088632 second(s), 22 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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