楼主: FSL_TICS_TIANZH

[求助] 手把手学会官方例程<三>:Kinetis 100MHz I2C(有更新在40楼)

[复制链接]

该用户从未签到

0

主题

4

帖子

0

新手上路

Rank: 1

积分
4
最后登录
1970-1-1
发表于 2013-8-14 09:52:04 | 显示全部楼层

RE:手把手学会官方例程<三>:Kinetis 100MHz I2C

非常感谢
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

4

帖子

0

新手上路

Rank: 1

积分
4
最后登录
1970-1-1
发表于 2013-8-14 09:58:10 | 显示全部楼层

RE:手把手学会官方例程<三>:Kinetis 100MHz I2C

火前留名!
回复 支持 反对

使用道具 举报

该用户从未签到

35

主题

508

帖子

0

金牌会员

Rank: 6Rank: 6

积分
2167
最后登录
1970-1-1
发表于 2013-8-14 10:46:29 | 显示全部楼层

RE:手把手学会官方例程<三>:Kinetis 100MHz I2C

欢迎大家踊跃下载。
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

5

帖子

0

新手上路

Rank: 1

积分
5
最后登录
1970-1-1
发表于 2013-8-14 11:45:57 | 显示全部楼层

RE:手把手学会官方例程<三>:Kinetis 100MHz I2C

好东西
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

9

帖子

0

新手上路

Rank: 1

积分
16
最后登录
2022-12-30
发表于 2013-8-14 22:43:00 | 显示全部楼层

回复:手把手学会官方例程<三>:Kinetis 100MHz I2C

学习下
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

16

帖子

0

新手上路

Rank: 1

积分
6
最后登录
1970-1-1
发表于 2013-8-14 23:01:53 | 显示全部楼层

RE:手把手学会官方例程<三>:Kinetis 100MHz I2C

学习一下,不知里面是否介绍了I2C的中断服务函数,流程图很复杂呀!
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

16

帖子

0

新手上路

Rank: 1

积分
6
最后登录
1970-1-1
发表于 2013-8-14 23:43:47 | 显示全部楼层

RE:手把手学会官方例程<三>:Kinetis 100MHz I2C

谢谢楼主的辛勤劳动,请问一下楼主,在hal_dev_mma8451_read_reg(u8 addr)函数中,函数i2c_give_nack(I2C0_B)是不是应该放在
result = i2c_read_byte(I2C0_B);
    i2c_wait(I2C0_B);
两句话后面?修改为
i2c_set_rx_mode(I2C0_B);
    result = i2c_read_byte(I2C0_B);
    i2c_wait(I2C0_B);
    i2c_give_nack(I2C0_B);
    i2c_stop(I2C0_B);
    另外还有,这句result = i2c_read_byte(I2C0_B)在运行完I2C_stop之后数字不会改变吗?是不是应该在I2C_stop之前读取数值呢?
回复 支持 1 反对 0

使用道具 举报

  • TA的每日心情
    开心
    2019-8-16 10:32
  • 签到天数: 105 天

    连续签到: 1 天

    [LV.6]常住居民II

    19

    主题

    549

    帖子

    4

    金牌会员

    Rank: 6Rank: 6

    积分
    1084
    最后登录
    2021-6-22
    发表于 2013-8-15 17:43:25 | 显示全部楼层

    回复:手把手学会官方例程<三>:Kinetis 100MHz I2C

     标记
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    38

    帖子

    0

    注册会员

    Rank: 2

    积分
    109
    最后登录
    1970-1-1
    发表于 2013-8-16 09:33:44 | 显示全部楼层

    RE:手把手学会官方例程<三>:Kinetis 100MHz I2C

    先下来看看,准备学一下
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

    积分
    6020
    最后登录
    2020-9-28
    发表于 2013-8-16 10:42:23 | 显示全部楼层

    回复:手把手学会官方例程<三>:Kinetis 100MHz I2C

    回复第 37 楼 于2013-08-14 23:43:47发表:
    谢谢楼主的辛勤劳动,请问一下楼主,在hal_dev_mma8451_read_reg(u8 addr)函数中,函数i2c_give_nack(I2C0_B)是不是应该放在
    result = i2c_read_byte(I2C0_B);
    i2c_wait(I2C0_B);
    两句话后面?修改为
    i2c_set_rx_mode(I2C0_B);
    result = i2c_read_byte(I2C0_B);
    i2c_wait(I2C0_B);
    i2c_give_nack(I2C0_B);
    i2c_stop(I2C0_B);
    另外还有,这句result = i2c_read_byte(I2C0_B)在运行完I2C_stop之后数字不会改变吗?是不是应该在I2C_stop之前读取数值呢?
     

     
    1、关于i2c_give_nack(I2C0_B)这句话你要看下i2c的C1寄存器中TXAK位描述
    1.jpg
     
    FACK=0,我个人理解TXAK=1后,只有在接收完下一字节数据后nack才会发上总线。并不是一旦TXAK=1后SDA上就立马出现nack信号。我测试了下你的程序,单次读MMA8451寄存器后因为你那么写nack信号没出现在SDA线上导致MMA8451理解成多次读,但是主机又没按多次读时序图操作故与MMA8451通信卡死。(一旦卡死,我是断电了一会后重新上电debug才能在正常通信的)
    2、关于result = i2c_read_byte(I2C0_B);我注释有点小问题。我觉得i2c_give_nack(I2C0_B);后的那句读数据寄存器作用是启动接收下一字节数据(类似主机发送模式给数据寄存器写值启动了一帧数据的发送),而I2C_stop之后读数据寄存器才是真正将数据取出。
    2.jpg
    我测试了一下result = i2c_read_byte(I2C0_B)在I2C_stop之前,但SDA线上的波形有问题导致与MMA8451的i2c通信出错。
    如果有什么问题,欢迎提出讨论
    该会员没有填写今日想说内容.
    回复 支持 1 反对 0

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-21 11:17 , Processed in 0.106469 second(s), 30 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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