查看: 2634|回复: 3

[求助] KL04 I2C不能读取数据?

[复制链接]

该用户从未签到

27

主题

71

帖子

0

中级会员

Rank: 3Rank: 3

积分
262
最后登录
1970-1-1
发表于 2014-1-24 14:41:14 | 显示全部楼层 |阅读模式
 
用KL04 I2C0连接TSL一款芯片,发现总是能读取。代码如下:
    I2C_Start();
    I2C_CycleWrite(TSL_ADD_SLAVE
我知道答案 目前已有2人回答
回复

使用道具 举报

该用户从未签到

10

主题

459

帖子

0

中级会员

Rank: 3Rank: 3

积分
303
最后登录
2024-10-24
发表于 2014-1-24 15:43:11 | 显示全部楼层

回复:KL04 I2C不能读取数据?

 KL系列I2C的读Data时需要一次dummy read,这一点容易被忽略。以下是KL25例程代码中I2C读取单字节的代码,
u8 hal_dev_mma8451_read_reg(u8 addr)
{
    u8 result;
 
    i2c_start(I2C0_B);
 
    i2c_write_byte(I2C0_B, I2C_ADDR_MMA8451 | I2C_WRITE);
    i2c_wait(I2C0_B);
    i2c_get_ack(I2C0_B);
 
    i2c_write_byte(I2C0_B, addr);
    i2c_wait(I2C0_B);
    i2c_get_ack(I2C0_B);
 
    i2c_repeated_start(I2C0_B);
    i2c_write_byte(I2C0_B, I2C_ADDR_MMA8451 | I2C_READ);
    i2c_wait(I2C0_B);
    i2c_get_ack(I2C0_B);
 
    i2c_set_rx_mode(I2C0_B);
 
    i2c_give_nack(I2C0_B);       //提前给出ACK信号
    result = i2c_read_byte(I2C0_B);    //空读
    i2c_wait(I2C0_B);
 
    i2c_stop(I2C0_B);
    result = i2c_read_byte(I2C0_B);  //数据实际的读操作
    pause();
    return result;
}
 
回复 支持 反对

使用道具 举报

该用户从未签到

27

主题

71

帖子

0

中级会员

Rank: 3Rank: 3

积分
262
最后登录
1970-1-1
 楼主| 发表于 2014-1-24 16:34:35 | 显示全部楼层

回复:KL04 I2C不能读取数据?

回复第 2 楼 于2014-01-24 15:43:11发表:
 KL系列I2C的读Data时需要一次dummy read,这一点容易被忽略。以下是KL25例程代码中I2C读取单字节的代码,
u8 hal_dev_mma8451_read_reg(u8 addr)
{
    u8 result;
 
    i2c_start(I2C0_B);
 
    i2c_write_byte(I2C0_B, I2C_ADDR_MMA8451 | I2C_WRITE);
    i2c_wait(I2C0_B);
    i2c_get_ack(I2C0_B);
 
    i2c_write_byte(I2C0_B, addr);
    i2c_wait(I2C0_B);
    i2c_get_ack(I2C0_B);
 
    i2c_repeated_start(I2C0_B);
    i2c_write_byte(I2C0_B, I2C_ADDR_MMA8451 | I2C_READ);
    i2c_wait(I2C0_B);
    i2c_get_ack(I2C0_B);
 
    i2c_set_rx_mode(I2C0_B);
 
    i2c_give_nack(I2C0_B);       //提前给出ACK信号
    result = i2c_read_byte(I2C0_B);    //空读
    i2c_wait(I2C0_B);
 
    i2c_stop(I2C0_B);
    result = i2c_read_byte(I2C0_B);  //数据实际的读操作
    pause();
    return result;
}
 
 

谢谢回复
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2018-7-2 06:04
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

    积分
    6020
    最后登录
    2020-9-28
    发表于 2014-1-26 09:28:03 | 显示全部楼层

    回复:KL04 I2C不能读取数据?

    楼主你可以参考一下中断读写方式的流程图,见KL04P48M48SF1RM参考手册中的图Figure 35-30. Typical I2C interrupt routine
    I2c KL04.jpg
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-18 22:38 , Processed in 0.094725 second(s), 24 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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