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.

[参考译文] MSP430G2553:MSP430 I2C 问题

Guru**** 2022830 points
Other Parts Discussed in Thread: MSP430G2553
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/566077/msp430g2553-msp430-i2c-issue

器件型号:MSP430G2553
  




int main (void) { GRACE 初始化(); //激活 Grace 生成的配置 UCB0I2CSA = 0x40; //配置加载设备 TxData[0]= 0x00; //写入 IODIRA 寄存器 TxData[1]= 0x00; //将端口 A 中的所有引脚设置为输出 TxData[2]= 0x01; //写入 IODIAB 寄存器 TxData[3]= 0x00; //将端口 B 中的所有引脚设置为输出 TxData[4]= 0x0C; //写入 GPPUA 寄存器 TxData[5]= 0xFF; //在端口 A 中的所有引脚上启用上拉电阻器 TxData[6]= 0x0D; //写入 GPPUB 寄存器 TxData[7]= 0xFF; //在端口 B 的所有引脚上启用上拉电阻器 PTxData =(unsigned char *) TxData; TXByteCtr = TxData 的大小; UCB0CTL1 |= UCTR + UCTXSTT;// I2C TX、开始条件 } #pragma vector=USCIAB0TX_vector __interrupt void USCI0TX_ISR_Hook (void) { if (TXByteCtr)//检查 TX 字节字节字节计数器 { UCB0TXBUF =* PTxData++;//加载 TX 缓冲器 TXByteCtr --; //减量 TX 字节计数 器} 其他 { UCB0CTL1 |= UCTXSTP;// I2C 停止条件 IFG2 &=~UCTXSTP; //清除 USCI_B0 TX int 标志 __BIC_SR_REGISTER_ON_EXIT (LPM0_Bits);//如果所有数据都被发送则退出 LPM } }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我正在尝试使用 MSP430G2553 MCU 配置 MCP23017 I/O 扩展器。 I/O 扩展器使用 I2C、当我尝试向器件发送数据时、MCU 仅调用一次 TX 中断、而不会触发 ISR 中的停止条件以进行 I2C 传输。 请告诉我上面显示的代码出了什么问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Andrew:
    您的 TX 中断似乎未启用。 因此、TXInterrupt 永远不会触发。 尝试添加
    IE2 |= UCB0TXIE;
    开始 I2C 之前。 让我知道发生了什么。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我使用了您在 main.c 中建议的代码行 、但我仍然有相同的问题。 我已经拍摄了 i2c 总线的快照、如下所示。 我还在中断上设置了一个断点、我注意到我只能这样做

    进入一次中断、软件永远不会再次调用此中断。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的
    据我所知、Grace 不再被维护、因此如果您停止使用 Grace、您将会很好地工作。
    Resource Explorer 中还有其他示例 i2c、您可以尝试其中一个吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我尝试放置以下代码行
    IFG2 &=~UCTXSTP;//清除 USCI_B0 TX 内部标志
    中断的不同部分、但我仍然有相同的问题。

    您是否知道其他什么会导致只调用一次中断?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Andrew、
    您能否查看您的寄存器并查看 IFG 是否被清除且中断是否被启用?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    > IFG2 &=~UCTXSTP;//清除 USCI_B0 TX 内部标志

    根据 SLAU144J 17.4.2和17.4.12、这将清零 IFG2:UCB0RXIFG。 我看不到图17-12中提到的情况、但我想这样做可能会使状态机发生混乱。 [ UCTXSTP 位于 UCB0CTL1中(而掩码位于 UCB0STAT 中)。]
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Bruce、
    我打算让您在寄存器窗口中实际查看寄存器。 在 CCS 中、转到菜单栏中的"View"、然后转到"Registers"。 您可以展开 USCIB0选项卡以观察启用了哪些中断并设置了哪些标志。

    这将有助于我们对问题有所了解。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    金马伦

    感谢你的帮助。 我能够使它正常工作。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Andrew、很高兴听到这个消息。 问题最终是什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    ISR 未启用、因此我遵循了一些非 Grace 示例代码。