尊敬的所有人:
我正在尝试通过 eUSCI_B0在我的 MSP420FR599x 程序中实现 I2C 传感器(LIS3DH)。 遗憾的是,在阅读了“家庭数据表”之后,我对如何设置它比以前更加困惑,但我希望您能够帮助我。 对于熟悉 I2C 协议和/或 MSP…的人来说、这个问题无疑是一个简单的问题。 我也是;)。
传感器将通信定义为以下(第26页 DS):
起始--从地址+写入位--等待 AK --发送8位子地址--等待 AK --重新启动--从地址+读取位--等待 AK --获取8位数据--无主器件确认--停止
因此,MSP 需要发送一个子地址/命令作为第一个“数据库字节”,在 AK 之后,MSP 应执行重复的启动,然后对从地址执行读操作。
在这种情况下,我不知道如何初始化 i2c USCI,也不知道如何使用后续读出…执行此传输 是否可以或我是否需要通过软件“手动”执行所有操作?
目前、我通过以下方式初始化 USCI:
UCB0CTLW0 = UCSWRST; //复位状态
UCB0CTLW0 |= UCMODE_3 | UCMST | UCSLA10_0 | UCTXSTT; // I2C |主控模式| SLADD 7位|重复启动
UCB0CTLW0 |= UCSSEL_2;//SMCLK
UCB0BRW = 20; //MCLK = 2MHz ->波特率:MCLK / 20 = 100kHz
UCB0CTLW1 = UCASTP_0; //无停止有效
UCB0TBCNT = 1; // 1字节数据
UCB0CTLW0 &=~UCSWRST;
在一个读取字节函数中、我将设置从器件地址(CSA)、如果我想发送或接收 μ… 我是否需要使用位掩码手动将读/写位设置到从器件地址中、还是通过 UCTR 自动添加? 然后、我会将子地址作为传输发送、在获取 AK 后、我会开始接收?!?
它是正确的处理方式、还是缺少硬件实现的功能?
如果有一个小示例、我会非常感激、TI 示例有点太简单或一次执行得太多。
祝你一切顺利,感谢你的帮助
托比亚斯