Cypress技术william hill官网
直播中

罗玉婧

7年用户 246经验值
私信 关注
[问答]

如何从基于I2C的从设备寄存器读取数据?

你好,
我用I2C块读取一个字节在一个无限循环中的从属设备寄存器值。我使用的逻辑是:
I2C*START();
I2C.MistCurrStaseSube();
I2CyMasksEngStEnter(设备地址,0x00);
I2C.MigWrimeWrimeEnter(地址);
I2C.MaskestEntRead(设备地址,0xFF);
RDYBuff==I2C*MaultRead字节(0);
I2CyMasksEdStestStor();
I2C~();
我在RDI Buffi中获得了注册值。这工作时间很长,但逻辑在某个地方挂起,而我的代码没有进一步运行。原因何在?我使用调试器检查代码停止的位置。我发现,当师父正在产生重启时,我会因为等待而陷入困境。
请建议。

回帖(3)

王琳

2019-10-18 08:20:32
我无法从您的代码中看到0x00在I2C.MeaveStEngESTRT(设备地址,0x00)中的含义,请使用所提供的γ定义。当使用不同的PSoC家庭时,它们是不同的。
同样适用于I2C.MaskestEntRead(设备地址,0xFF)和0xFF。
最后,I2C的标准是:I2C的最后一个字节应该是赤裸裸的。I2C*MaultRead字节(0)中的(0)是ACK还是NACK?
鲍勃
举报

罗玉婧

2019-10-18 08:36:09
我像这样修改了我的代码
I2C*START();
I2C.MistCurrStaseSube();
I2C.MaskestEngEngt(0x18,I2CX Wrad EX-Felx模式);
I2C.MigWrimeWrimeEnter(地址);
I2C.MasksEntRead重新启动(0x18,I2Ca Read xFelx模式);
//StistFixStase= I2C.MasksEngESTEnter(0x181);
RDYBuff= I2C*MaultRead字节(I2CnNakl DATA);
I2CyMasksEdStestStor();
I2C.MistCurrStaseSube();
I2C~();
我发现,在I2C3Mealth.C中提到函数的副作用是I2C*MaultRead字节。
在I2CYCSR寄存器中写入没有输入“字节完成”位的函数。它不会退出,直到它将被设置。因此,I2C*MaultRead Byter()不能不作为寄存器NIT退出吗?
举报

王琳

2019-10-18 08:46:34
离开Mist5CurrStaseUs()。
每个调用返回一个状态(除了Read Byter()之外)。第一个状态!=0表示一个错误,有定义说明原因。因此,调试时检查返回的值。
I2CYSTATE会杀死任何正在进行的传输,不使用它,在初始化时只调用Stand()一次,并保持接口运行。
鲍勃
举报

更多回帖

发帖
×
20
完善资料,
赚取积分