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.

[参考译文] MSP430F5529:MSP430F5529

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/792702/msp430f5529-msp430f5529

器件型号:MSP430F5529
主题中讨论的其他器件: INA219

您好!

我是 ANant 团队的本科生卫星建设团队的一员。 我们将 MSP430F5529用作我们电力系统的微控制器。 我正在编写一个代码、将电流传感器(TI 的 INA219)与 MCU 连接。 在向 INA219发送多个字节时、我使用了轮询方法、其中代码在将新数据加载到 TX 缓冲区之前等待 TXIFG 被置位。  

我遇到的问题是从未设置 TXIFG、因此我的代码卡在 while 环路中。 尽管启用和清除了发送中断、我还是遇到了这个问题。 我已附上以下代码片段。 是否有解决方案?

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我猜您会遇到来自 INA219的 NACK。 最简单的方法是使用不正确的地址。 (SendMultiByteStart 吸收初始 TXIFG。)

    INA219_ADDRESS 的值是什么? 它应该在0x40-0x4F 范围内、并且需要与 A0/A1引脚的设置方式相匹配。 [参考 INA219数据表(SBOS448G)表1。]
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

     Bruce、您好!

    感谢您的快速回复。 我已经将 A0和 A1引脚保持原样。 这意味着地址应该是0x40? (如果我错了、请更正我)。我已将 INA219_ADDRESS 的值定义为0x40。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果 A0/A1被接至 GND、那么我希望0x40是正确的地址(基于表1)。

    我不知道你的意思是"离开了...因为他们是"。 A0/A1需要连接到某个设备。 如果您使用的是商业分线板、制造商可能已经为您提供了这种服务。 (在检查时、也检查 I2C 上拉电阻器。)

    如果轮询中断位、则不应启用中断。 我没有看到 ISR、但如果有 ISR、它可能会干扰轮询。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、我 使用的是 Adafruit 的分线板。  我真的很抱歉,刚才没有提到这一点。  

    您说的对、我没有编写 ISR。

    禁用中断是否会解决问题?

    我是否在某个位置遗漏了 clearInterrupt()语句?

    此外、本(https://cdn-learn.adafruit.com/downloads/pdf/adafruit-ina219-current-sensor-breakout.pdf?timestamp=1555244505)文档未提及上拉电阻器。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我看到原理图上的上拉电阻(第18页)以及 A0/A1的下拉电阻。 Adafruit 通常在其 I2C 分线中包含上拉电阻。 因此、0x40似乎是正确的地址。

    我希望在没有 ISR 的情况下启用中断的症状会有所不同、但这里可能没有我看到的交互。 在任何情况下、您都不应启用它们、因为您要进行轮询。 将字节写入 TXBUF ("发送"函数)将清除 TXIFG、因此您无需显式将其清除。

    您在哪个 while ()停留? 您是否了解过 UCB0寄存器? IFG、IE 和 STAT 的内容应该是有趣的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    很抱歉耽误你的时间。

    我将在第一个 while 循环中停止,即 sendMultiByteStart()之后的 while 循环,我 也对这些函数的确切工作方式有疑问。 h 文件中的描述表明 multibytesendnext ()

    继续从主器件到从器件的多字节传输。

    主模块使用此函数继续多字节传输的每个字节。 此函数执行以下操作:-发送多字节传输到从机的每个数据字节

    参数
    baseAddress 是 I2C 主机模块的基地址。
    txData 是要发送的下一个数据字节

    修改 了 UCBxTXBUF 寄存器的位。

     但是、要进行事务、数据必须位于移位寄存器中、对吧?


    此外、我还检查了您在它停留在 while 循环中时指定的寄存器的内容、以及它之前的内容。 这就是我 得到的:

    第106行:


    第107行

    在 while 循环中:

    我有几个疑问:

    IE 为零。(我按照 您的指示禁用了中断。)

     IFG 寄存器始终保持为零。

    STAT 在0x10、这意味着总线忙? 为什么? 即使在我发送第一个字节之前、它也是0x10。

    在 while 环路中、CTL1寄存器更改为0x92。 这意味着它正在传输一个停止条件。 你是对的,我确实得到了一个否定,但我仍然无法弄清原因。  
    为什么看不到 TXBUF 寄存器的值变化?

    TIA
    Parth。