我在定制设计中使用当前的工厂部件(而不是实验板)。
当我将 B3 eUSCI 配置为 I2C 器件时、当我将其从复位状态中取出时、它立即提示总线忙
这似乎不正确。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
我在定制设计中使用当前的工厂部件(而不是实验板)。
当我将 B3 eUSCI 配置为 I2C 器件时、当我将其从复位状态中取出时、它立即提示总线忙
这似乎不正确。
[报价用户="Priya Thanigai]Hi、
根据 TRM、该位的复位状态为"0"。
您能否验证在运行应用程序代码之前它确实是"0"(启动时)。
[/报价]
[报价用户="Priya Thanigai]Hi、
此外,在您退出重置后,如何通过调试或代码检查该值?
-Priya
[/报价]
调试器。
尊敬的 Eric:
我会看到类似的行为、在大多数情况 下、如果我没有 SCL/SDA 上拉电阻器、我会看到 UCBBUSY 为1、而当我有上拉电阻器时、UCBBUSY 为0。
此外、 当将这些线路接地时、我始终会看到 USBBUSY 为1、因此我不会看到与您在帖子中描述的相同行为。 这是您可以使用 Launchpad 尝试的吗??
这是我要使用的代码:
P10->SEL0 |= BIT2 | BIT3; // I2C 引脚 EUSCI_B3->CTLW0 |= EUSCI_A_CTLW0_SWRST;//启用软件复位 EUSCI_B3->CTLW0 = EUSCI_A_CTLW0_SWRST |//在复位模式下保持 eUSCI EUSCI_B_CTLW0_MODE_3 | // I2C 模式 EUSCI_B_CTLW0_MST | //主模式 EUSCI_B_CTLW0_SYNC | //同步模式 EUSCI_B_CTLW0_ssel_SMCLK; // SMCLK EUSCI_B3->CTLW1 |= EUSCI_B_CTLW1_ASTP_2;//生成自动停止 //达到 EUSCI_B0->TBCNT 后 EUSCI_B3->BRW = 30; //波特率= SMCLK / 30 = 100kHz EUSCI_B3->TBCNT = 0x0005; //要接收的字节数 EUSCI_B3->I2CSA = 0x0048; //从器件地址 EUSCI_B3->CTLW0 &=~EUSCI_A_CTLW0_SWRST;//从复位中释放 eUSCI IF (EUSCI_B3->STATW && UCBBUSY) { P1->DIR |= BIT0; while (1) { P1->OUT ^= BIT0; 对于(i = 20000;i > 0;i-); } }
还可以在不配置 SEL0寄存器的情况下运行相同的测试(在您的定制板上)吗?
谢谢、
David
[引用用户="Davidl">您好 Eric,
能够在 LP 上运行您的代码?? 您是否得到了相同的行为?
请告诉我们。
谢谢、
David
[/报价]
在 Launch Pad 上执行相同的操作。 关键是让 I2C 总线不会在其上拉电阻上接通电源。 如果您在第一次打开总线时将 SCL 拉至低电平、UCBUSY 是间歇性的。 这很奇怪。 有时会抛出 UCBUSY、有时不会。 我没有见过 SCLLOW、我认为应该这么做。
但我们正在对 I2C 总线进行错误处理、即它超出规格。 但我们断电以节省能源。 它是一个超低功耗应用、我们将针对每一小部分进行介绍。
我不喜欢 TI h/w eUSCI 如何处理这种情况、但我可以解决它。