打印
[技术问答]

关于M0516 I2C status 的问题

[复制链接]
2375|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xaixia|  楼主 | 2017-7-31 15:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
初学I2C,在跑官方BSP例程时,主机发送数据过程正常,主机接收数据时只能接收到发送的最后一个数据,我看了关于I2C状态的说明,status = 58时是已接受到数据,已返回NO ACK,将从DAT中读取数据并发送STOP,但是在这个状态下去读取DAT的数据只能读最后一个。想问的是,在BSP中,这些status由什么来决定呢?为什么主机接收status 不会有50 的状态,为什么从机发送不会有B8的状态呢?xieixe !!
沙发
zhuomuniao110| | 2017-7-31 16:17 | 只看该作者
循环发一个字符试试看。

使用特权

评论回复
板凳
xaixia|  楼主 | 2017-7-31 16:26 | 只看该作者
zhuomuniao110 发表于 2017-7-31 16:17
循环发一个字符试试看。

slave发送的数据时3个元素的数组Txdata,代码如下:
       else if(u32Status == 0xA8)                  /* Own SLA+R has been receive; ACK has been return */
    {
                          printf(" rev self addr+R,Send ACK,will send data and rev ACK\r\n");
                          I2C_SET_DATA(I2C0, Txdata[Txlen]);
                          printf("Txdata[%d] = %d",Txlen,Txdata[Txlen]);
                          Txlen ++;
                         
                          if(Txlen == 3)
                                {
                                            Txlen = 0;
                      I2C_SET_CONTROL_REG(I2C0, I2C_I2CON_SI_AA);
        }
    }
    else if(u32Status == 0xC0)                 /* Data byte or last data in I2CDAT has been transmitted
                                                             Not ACK has been received */
    {

                          printf("data trans was completed and send NO ACK\r\n");
                        I2C_SET_CONTROL_REG(I2C0, I2C_I2CON_SI_AA);
                               
    }
不知道这样有不有问题的。

使用特权

评论回复
地板
xaixia|  楼主 | 2017-8-2 10:43 | 只看该作者
后来我仔细看了文档,status的状态是由设置STA STO SI和AA位决定的,数据没有发送完也是由于状态不对导致的

使用特权

评论回复
5
jiekou001| | 2017-8-2 17:31 | 只看该作者
准备学单片机,听说这里高手多,注册个账号,我先水点经验。。要不权限不够用。

使用特权

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

本版积分规则

5

主题

12

帖子

0

粉丝