硬件I2C的调试问题求助

2019-03-24 08:42发布

本帖最后由 火火山 于 2017-1-9 11:46 编辑

实现:读取某个寄存器的值                                                                                                                                                       问题:全速运行时,RXBUF得到的是0XFF ,当单步调试时,RXBUF得到的是0X48,得到的值是正确的
请问为什么会出现这样的结果?各位大神们可以提供一下思路吗?

代码如下,使用的是TI的driverlib库写的
初始化如下:
i2c1.PNG
读单个字节代码如下:
i2c2.PNG




此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
火火山
1楼-- · 2019-03-25 10:08
 精彩回答 2  元偷偷看……
火火山
2楼-- · 2019-03-25 15:07
皈依 发表于 2017-1-9 13:39
可以全速跑,然后示波器量一下 是不是一直是高电平

一直在用示波器在测量,示波器得到的结果跟上面说的是一样的。全速跑才能抓到波形,单步调试的话,抓不到波形
lcofjp
3楼-- · 2019-03-25 18:05
long521 发表于 2017-1-9 13:34
速率高了,拉不下来,或者说是上拉太强了
代表super captain回一贴, ...

你这个是代表玉老板说的。。
elvike
4楼-- · 2019-03-25 22:15
 精彩回答 2  元偷偷看……
火火山
5楼-- · 2019-03-26 02:54
elvike 发表于 2017-1-9 14:09
如果肯定硬件没问题,分析一下外设的读写时序,关注一下数据有效建立的时间。

硬件是没有问题的,因为同样的硬件,我师父调通了的,我现在自己调试
这个建立时间是什么意思?看了规格书,只看见有一个SCL的频率范围,就没有跟I2C有时间相关的数据了
火火山
6楼-- · 2019-03-26 04:47
感谢楼上热情的各位!
解决问题了
方法:在每次置了Start的UCTXSTT位后,需要等待UCTXSTT这个位的置起,就通信正常了,代码如下
  1.     //Send start
  2.     HWREG16(EUSCI_B0_BASE + OFS_UCBxCTLW0) |= UCTXSTT;
  3.     while(HWREG16(EUSCI_B0_BASE + OFS_UCBxCTLW0) & UCTXSTT);
复制代码

一周热门 更多>

相关问题

    相关文章