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:I2C 从器件发送-需要状态机 ISR

Guru**** 2550050 points
Other Parts Discussed in Thread: MSP430G2553, MSP430F5529, MSP-EXP430F5529LP

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/587696/msp430g2553-i2c-slave-transmit---needs-state-machine-isr

器件型号:MSP430G2553
主题中讨论的其他器件: MSP430F5529MSP-EXP430G2MSP-EXP430F5529LP

我正在尝试使用 I2C 通信为 MSP430G2553编写代码。  器件是从器件。  代码不起作用。

我使用 MSP430F5529作为主器件、它工作正常。  (我之前开发了从器件和主器件代码)

MSP430G2553有两个中断向量。

状态机中断

2. Rx/TX 缓冲器中断

当我运行代码时、它在第68行停止。  它所做的第一件事是接收由主器件发送的地址。  我检查了这个、它工作正常。  我使用的是海盗总线、我看到一个0x91 、它是主器件、告诉从器件将数据传输到主器件。


我可以看到以下问题:

1.  代码不能识别从机地址。   我不知道代码是否正在检查接收到的地址。   它就停在第68行

2.我不认为它进入了中断。  第68行位于中断之后。 它就像跳过中断一样。  它确实需要检查地址、但我认为它没有正确进入状态机。  我尝试编写一些代码来执行此操作、但它实际上没有任何内容。

许多示例甚至没有概述状态机、因此我不确定在这里要做什么。

任何帮助都很好。

/*
i2c.c
*

** 作者:Chris
*
//*********
// MSP430G2553 I2C 从设备代码
//
//此代码将接收来自单个 I2C 主设备的请求,并将接收
来自该主设备的//数据或将数据发送到主设备。
//这是 MSP430G2553的从器件代码。
////
*********

#include 
#include 
#include "i2c_slave.h"


unsigned char RXByteCtr;
unsigned char * PTxData;
volatile unsigned char RxBuffer[32]; //分配128字节的 RAM
char i2cdata;
unsigned char TXByteCtr、TXSize;
const unsigned char TxData[]= //要发送
的数据表{
"R"、 // 0x11、
"X"、 //0x22、
"D"、 //0x33、
'A'、 ///0x44、
"T"、 //0x55"A"
、 //'S'
、 //
'A' //
};

void main (void)


   WDTCTL = WDTPW + WDTHOLD;                //停止 WDT
 I2C_SLAVE_setup();                        //设置 i2c
 I2C_Transmit ();                           //发送数据

void i2c_slave_setup (void) { P1SEL |= BIT6 + BIT7; //将 I2C 引脚分配给 USCI_B0 // P1.7 = SDA P1.6 = SCLK 绿色 P1SEL2 |= BIT6 + BIT7; UCB0CTL1 |= UCSWRST; //启用 SW 复位 UCB0CTL0 = UCMODE_3 + UCSYNC; // I2C 从设备,同步模式 UCB0CTL0 &=~UCMST; //从模式 UCB0I2COA = 0x48; //自有地址为048h -> ASCII "H" UCB0CTL1 &=~UCSWRST; //清除 SW 复位,恢复操作 UCB0I2CIE |= UCSTPIE + UCSTTIE; //启用 STT、STP 中断 return; } char i2c_receive (void) { RXByteCtr = 0; //清除 RX 字节计数 _bis_SR_register (CPUOFF + GIE); //输入 LPM0,启用中断 //保持在 LPM0中直到主器件完成 TX 返回"x"; } void i2c_transmit (void) { TXByteCtr = 0; //将 txbuffer 指针设置为第一个字节 UCB0STAT &=~UCSTTIFG; //清除启动条件 UCB0CTL1 &=~UCTR; //清除 UCTR 以接收地址 IE2 |= UCB0TXIE + UCB0RXIE; //启用 TX 和 RX 中断 UCB0TXBUF = TxData[TXByteCTR]; //将数据加载到 TX 缓冲区中,以便它可以发送一个字节 _bis_SR_register (CPUOFF + GIE); //输入 LPM0,启用中断 } // // ////../../--------------- // // 中断 ///////////--------------- #if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector = USCIAB0_I2C_State_ISR
_interrupt void USCIAB0_I2C_State_ISR (void)
#Elif defined (_GNU_)
void __attribute__((interrupt (USCIAB0TX_vector)) USCIAB0TX_ISR (void)
其他
错误编译器不受支持!
#endif

//我需要这里的代码吗? 是否清除 UCSSTPIFG? 我不知道是什么。

//
//
#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector = USCIAB0TX_vector
_interrupt void USCIAB0TX_ISR (void)
#Elif defined (_GNU_)
void __attribute__((interrupt (USCIAB0TX_vector)) USCIAB0TX_ISR (void)
其他
错误编译器不受支持!
#endif
{ //向量12:TXIFG
UCB0TXBUF = TxData[TXByteCTR]; //发送一个字节
TXByteCtr ++; //将数组指针递增到下一个字节

///---------------------------------- // USCI_B0状态 ISR 用于将 CPU 从 LPM0唤醒、以便在 数据传输后在主程序中进行//处理。 当 实际数据被发送时、LPM0只在(重新) START 或 STOP 条件下//退出。 ///----------------------------------
#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector = USCIAB0RX_vector
_interrupt void USCIAB0RX_ISR (void)
#Elif defined (_GNU_)
void __attribute__((interrupt (USCIAB0RX_vector)) USCIAB0RX_ISR (void)
其他
错误编译器不受支持!
#endif

RXByteCtr +;
RxBuffer[RXByteCTR]= UCB0RXBUF;
// UCB0STAT &=~(UCSTPIFG + UCSTTIFG); //清除中断标志
_BIC_SR_REGISTER_ON_EXIT (CPUOFF); //如果数据是,则退出 LPM0
//已发送
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Chris、

    我刚刚收到了您的问题。 我将通读代码并尽快回复您。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Chris、

    是否可以通过附加文件来发送".c"文件? 问题中的格式已损坏。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这是文件。  main 位于文件外部、但它只调用 i2c_slave_setup()和 i2c_transmit ()。

    e2e.ti.com/.../i2c_5F00_slave.c

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Chris、

    我在代码中看到了问题。 MSP430G2553 I2C 中断可能会有点令人困惑。

    下面是一个解释、它可以帮助您、

    首先是 ISR:

    USCIAB0RX_Vector   不是数据接收中断。 此 ISR 由状态机中断使用(例如:停止、启动、NACK、...)

     USCIAB0TX_Vector  用于接收数据和传输数据。 正确的使用方法是:

    ///----------------------------------
    // USCI_B0数据 ISR 用于将数据从 MSP430内存移动到
    // I2C 主设备。 PTxData 指向要发送的下一个字节、TXByteCtr
    //跟踪已发送的字节数。
    ///----------------------------------
    #if defined (__TI_Compiler_version__)|| defined (__IAR_systems_ICC__)
    #pragma vector = USCIAB0TX_Vector
    __interrupt void USCIAB0TX_ISR (void)
    #Elif defined (__GNU__)
    void __attribute__((interrupt (USCIAB0TX_ISR)#vector
    
    (void USCIA0TX_ISR)#UCIAB0TX_ISR (void))#defineer_COMPLETE!错误!#UICUICUICUICUICU
    #endif
    {
    if (IFG2 & UCB0RXIFG)} //接收数据中断
    {
    //必须从 UCB0RXBUF 中读取
    uint8_t Rx_val = UCB0RXBUF;
    
    
    }
    否则(IFG2 & UCB0TXIFG) //发送数据中断
    {
    //写入 UCB0TXBUF
    
    }
    

    现在、中断启用:

    要启用 I2C TX 和 RX 中断、  

    IE2 |= UCB0TXIE;
    IE2 |= UCB0RXIE; 

    同样、请记住、TX 和 RX 数据都将触发  USCIAB0TX_Vector  中断。

    最后、为了查看状态机中断、

    UCB0I2CIE |= UCSTPIE + UCSTTIE; //启用 STT 和 STP 中断 

    这将触发  USCIAB0RX_Vector  中断。

    如果问题得到解答、请单击"验证答案"按钮。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    e2e.ti.com/.../i2c_5F00_master.ce2e.ti.com/.../1777.i2c_5F00_slave.cThanks以了解详情。  我更新了该文件、但未解决问题。

    从器件仍不应答主器件。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Chris、

    我有一个模板、可完全正常工作的 I2C 示例、其中 MSP430FR5529作为主器件、MSP430G2553。  

    您是否通过调用从器件侧的 i2c_transmit 函数来启动主器件和从器件之间的传输?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我曾尝试使用 TI 发布的一些示例代码、但没有一个示例代码奏效。 如果您在工作中有任何东西、我很感激您能查看它。

    我所做的一切都来自师父。 我想发送信息并从多个从器件请求信息。 因此、我需要从器件地址才能工作。

    任何帮助都很好。 请向我发送适用于 MSP430F5529主器件代码和 MSP403G2553从器件代码的工作代码。

    谢谢、

    Chris
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在我附加的文件中、主器件和从器件具有双向通信。

    g2553_i2c_slave.c 器件正在等待主器件与其通信。 然后它将执行6个命令之一。

    fr5529_i2c_master.c 器件将发送三条消息并要求读取三条消息。 消息的长度不同。

    使用的引脚是 FR5529上的 P2.0和 P2.1。 MSP430G2553上的 P1.6和 P1.7。

    它们都将以16MHz 的频率运行。

    我仍然没有对代码进行注释、因此您看到的注释可能会有一些错误。

    我使用的 I2C 上拉电阻为10k Ω。 此代码已在今天上午进行测试。

    e2e.ti.com/.../f5529_5F00_i2c_5F00_master.c

    e2e.ti.com/.../g2553_5F00_i2c_5F00_slave.c

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Chris、

    问题是否已解决?

    -尼马
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好、Nima、

    我尝试使用您提供的代码、但它不起作用。 因为、您已经对其进行了测试、我对您的代码比我的硬件更有信心。 我想我的问题可能是 LaunchPad。 我还订购了几个 MSP-EXP430G2 launchpad 套件。 他们今天应该来。 我将在这个新硬件上测试代码、希望这一切都很好。

    感谢您的提问。

    Chris
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、Nima、

    我今天获得了新的 MPS-EXP430G2。  我将其从包装中取出并插入计算机。 CCS 已识别、我很高兴可以继续。

    我将两条导线连接到了引脚。  

    P1.6是时钟、它连接到 MSP430F5529的 P3.1 (i2c 时钟)

    P1.7 是数据、它连接到 MSP430F5529的 P3.0 (i2c 数据)。

    我在调试模式下编译固件并将其加载到这两个单元上。

    我还在巴士上连接了一辆海盗巴士、以嗅探 I2C 数据。 我能够看到主机发送0x90、这是从机接收数据的指令。

    从器件不响应。  当我暂停代码时、它在中断 _bis_SR_register (LPM0_bits + GIE)处停止;

    主器件在中断内部的 UCB0CTL1         |= UCTXSTP 处停止; 在 USCI_I2C_UCRXIFG 的情况下停止

           

       USCI_I2C_UCRXIFG 案例:
           RX_val = UCB0RXBUF;
           IF (RXByteCtr)
           {
             ReceiveBuffer[ReceiveIndex++]= Rx_val;
             RXByteCtr---;
           }

           IF (RXByteCtr = 1)
           {
             UCB0CTL1 |= UCTXSTP;    <- 在这里停止。

    因此、从设备似乎仍然没有响应主设备命令。   我将新的 MSP-EXP430G2 Launch Pad 开发板用作从器件、将 MSP-EXP430F5529LP 用作主器件。

    我更改了连接两个演示板的导线、因此我确信这些板已连接。

    那么、在这一点上、我对要做的事情感到很损失。  它可以是 CSS 调试吗?

    我还无法在从 UART 上看到任何内容。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的、Chris、我将需要您和我一起完成以下工作、因为我只是在我的一侧运行代码、一切都正常。

    首先、我想让您知道代码正在运行、那么、这里是您可以验证的方法、

    将从器件代码加载到从器件 MSP430G2553中。

    然后将主代码加载到 MSP430F5529中。 我使用 CCS 进行调试、以验证代码是否正常工作。

    打开观察窗口、在表达式中添加以下内容:

    MasterType0

    MasterType1.

    MasterType2.

    SlaveType0

    SlaveType1.

    SlaveType2.

    当我们调试主代码时、在运行任何 I2C 函数之前、手表将如下所示:

    这是预期的、因为已初始化 MasterType0、MasterType1和 MasterType2。 SlaveType0、SlaveType1和 SlaveType2在从设备代码中进行初始化,我们将使用 I2C 要求从设备向我们发送其信息。

    在运行代码后、

    正如您看到的、下面的函数要求提供从器件信息、并且它们都已被接收:

    I2C_Master_ReadReg (SLAVE_ADDR、CMD_TYPE_0_SLAVE、TYPE_0_LENGTH);
    CopyArray (ReceiveBuffer、SlaveType0、 TYPE_0_LENGTH);
    
    I2C_Master_ReadReg (SLAVE_ADDR、CMD_TYPE_1_SLAVE、TYPE_1_LENGTH);
    CopyArray (ReceiveBuffer、 SlaveType1、TYPE_1_LENGTH);
    
    I2C_Master_ReadReg (SLAVE_ADDR、CMD_TYPE_2_SLAVE、TYPE_2_LENGTH);
    CopyArray (ReceiveBuffer、SlaveType2、TYPE_2_LENGTH); 

    现在、为了验证从器件、

    将调试器连接到从器件。 在运行代码之前、手表将如下所示:

    正如您看到的、从器件数据已初始化、MasterType0、MasterType1和 MasterType2未初始化。 那么、运行代码。 从器件将在 LPM 中等待主器件使用 I2C 与其联系。 按下主器件上的复位按钮。 这将使主器件运行以下代码行:

    I2C_Master_WriteReg (SLAVE_ADDR、CMD_TYPE_0_MASTER、MasterType0、TYPE_0_LENGTH);
    I2C_Master_WriteReg (SLAVE_ADDR、 CMD_TYPE_1_MASTER、MasterType1、TYPE_1_LENGTH);
    I2C_Master_WriteReg (SLAVE_ADDR、CMD_TYPE_2_MASTER、 MasterType2、type_2_length); 

    主器件正在向从器件发送数据。 在按下并释放复位后、停止从器件以查看寄存器、

    正如您看到的、从器件已接收到 MasterType0、MasterType1和 MasterType2。

    我向您保证、这些器件和代码能够100%正常工作。

    我想回顾一下我的设置。

    使用10k Ω 电阻器将 I2C 线路上拉至 VCC。 如果没有这些电阻器、I2C 将不起作用。

    MSP430F5529和 MSP430G2553之间的引脚被连接:

    此外、我还看过之前的 E2E 帖子、我理解您的沮丧、但我使用我们的工作代码示例开发了我发送给您的代码。 请按照以下步骤操作、并告诉我您发现的内容。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    还可以。。。 非常感谢。 这是一种与我使用的不同的故障排除方法。 我将从头开始、并按照您的步骤操作。

    我认为问题可能是 CCS 问题。 我在同一台计算机上有两个 CCS 实例和两个不同的工作区、这可能会导致此类问题。 有时、它与 MSP430G2552不同。 我将尝试使用两台不同的计算机...或者只是为从属设备执行"发布"构建、然后按照您的说明进行操作。

    这可能需要一两天时间、但我在这一天。

    Chris
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好 的、我做了一些调查。  

    我检查了您指示的值。  使用 CCS 的"Expressions"选项卡的 MasterType 和 SlaveType 值、它们不会改变。

    我还看了 I2C 状态寄存器、注意到 I2C UCSCLLOW 在主器件上是1、在从器件上是0。  为了找出这一点、我执行了以下操作。

    构建和调试5529主站和2553从站。
    2.启动从代码。
    3.启动主代码。
    4、等待了15秒。
    5. 暂停了这两个方案。
    查看了寄存器。   请注意、代码已在主器件上的337行和从器件上的93行停止。  请参见随附的照片。



     这确实很奇怪、因为我看到主器件使用逻辑分析仪发送0x90。   我拍了一张这张照片。

    我在 MSP430F5529 Launch Pad 的 P3.1 clk 和 P3.0 Data 上有10k 电阻器。  我在开始之前测量了线路、时钟为1.8V、数据为3.3V。   我认为这不是什么大问题、因为逻辑分析仪显示了主器件发送地址的时钟和数据。

    从器件将 SCL 保持在低电平为0、但主器件将其视为高电平。  

    每个 LaunchPad 中有三个、因此我更改了 LaunchPad 模块并重复测试。  这非常奇怪。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Chris、现在我90%确定问题是硬件设置问题。 我对代码完全有把握、实际上我目前正在使用 F5529主器件和 G2553从器件。 是否有任何其他器件连接到 I2C 总线? 您能否了解一下您的设置以及所有设备是如何连接的? 我将在实验室中查看示波器上的信号、以确保10k 欧姆不会过大。 同时、您能否分享您设置的图片或原理图?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Chris 电阻器是否连接到3.3V 电源?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Chris 在您的设置中、我看不到上拉电阻器进入 VCC (3.3V)。 我认为您的设置不正确。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我同意这看起来像是硬件问题、但我查看了所有内容。  一切都已连接。  也许是你的对吧 电阻值可能错误。  我在 CLK 和数据线上使用10K。

    下面是设置的详细信息。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否在两个 LaunchPad 之间连接了 GND?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我在两个 Launch Pad 之间使用接地进行了试验、我在没有接地线的情况下进行了试验、以防它产生接地环路。 在这两种情况下、两个器件都无法通信。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Chris、继续连接接地端。 特别是在使用两台不同的计算机时。 您是否曾尝试在没有逻辑分析仪的情况下进行测试? 当电阻为10k 时、这可能会通过在线路上放置过多器件来导致问题
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的。

    有几件事。

    1。 我使用的是一台计算机、具有两个 CCS 实例。
    2.电阻器连接到3.3V (板角的引脚)
    3.我在两个器件之间添加了接地线。

    我 正在使用 CCS 7.0

    我没有尝试创建从代码的"发布"。
    我也没有尝试使用两台不同的计算机。

    你过得怎么样?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我使用一个 CCS 实例。 我加载从器件 G2553的调试。 然后点击"run"。 然后我断开器件。
    然后、我将 F5529连接到 PC、加载代码并点击"run"。 请记住、在我的启动过程中、两个 LaunchPad 的 VCC 和 GND 均已连接、因此一次只有一个电路板通过 USB 连接到 PC。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    还可以… 这与我所做的完全不同。 都处于调试模式?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Chris、我不想让你觉得我正在放弃你、但我正在离开办公室、将开车5个小时。 无论今晚还是明天、我都会向您发送有关如何测试代码的完整说明。 给我带来的不便、我深表歉意。 感谢您提前耐心等待。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    不用担心 Nima、

    这都是发展的一部分。 我还在与其他一些工程师合作、他们正在努力提供帮助。 今天下午,我们将讨论你和我所经历的事情。

    此时、我尝试将释放加载到从器件上、并在调试模式下运行主器件。 我在从代码中添加了一些 LED 指示、只是为了知道它在做什么。 初始化后、LED1亮起、然后在该过程完成后关闭 LED1。

    到目前为止,没有发生任何新情况。 我们团队中的常见想法是从模拟角度审视时钟和数据线的完整性。 它是从0和3.3V 切换还是从0V 变为1.8V、线路上的噪声是多少。 等等

    今天稍后我将对此进行检查。

    周末愉快!

    Chris

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我检查了 I2C 电压。 clk 线从0v 变为1.8v。 这就是问题所在。 从器件正在驱动它从1.8V 移动到0V 范围。

    我做了什么。
    我断开了两个器件之间的 I2C 连接。
    2.我仅使用 MSP430F5529将示波器(模拟)探针连接到 CLK 和数据线。
    我在调试模式下运行了主代码。
    电压从3.3V 变为0V。

    5.我在 MSP-EXP430G2 launchpad 的 P1.6和 P1.7上添加了一个10K 电阻器、因此它将连接到 VCC。
    6.我将探针移至 P1.6和 P1.7。
    7.我通过打开电源来运行从代码。
    8.数据线的电压范围为3.3V (0V 至3.3V)
    9. CLK 线路的电压范围为1.8V (0V 至1.8V)

    10.绝对要确定… 然后、我打开了一个新的盒子并得到了一个新的 MSP-EXP430G2 Launch Pad。 在 P1.6和 P1.7上添加了两个电阻器
    11.在没有任何代码的情况下加电。
    12.我使用 DMM 测量的电压在 CLK 上为1.8V、在数据线路上为3.3V。

    同样、P1.6连接到3.3V、但该引脚上的电压仅为1.8V。

    我加载了从代码并运行它。
    14。LED1亮起、表示器件已配置为使用 I2C。
    15、我再次使用 DMM 和示波器检查了电压电平。

    MSP403G2553正在使用 P1.6执行某些操作。 当在 P1.6和 VCC (3.3V)之间添加10K 电阻器时、P1.6上的电压仅为1.8V。

    该状态相同、但器件上未加载任何代码、或者 I2C 配置已加载并运行。

    这看起来像是一个问题。 您能不能在回到实验室时检查一下这个问题。

    它为什么这么做?

    Chris
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我检查了 Launchpad 的硬件版本。 我有三个 MP-EXP430G2 launchpad 演示板。 所有这些演示板的 PCB 版本为1.5。

    由于 P1.6和 P1.7直接连接到 MSP430G2553。 这可能是一个生产运行问题、但我怀疑、因为生产代码各不相同、都显示了相同的问题。

    安装在 MSP-EXP430G2演示板上的 MSP430G2553器件具有以下生产代码:

    64ANF2K A
    63A240K A
    64A8GQK A

    如果你可以检查一下这个、然后回到我那里、那就很好了。 我需要在一两周内找到一个解决方案。 这个问题让我有点不住、但我还有其他可以做的事情。 在两周内、这将变得至关重要。

    谢谢、
    Chris
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这很有趣。 太有趣了 但我想知道为什么 P1.6为1.8V

    这条线路上有一个 LED。 MSP-EXp430G2在 P1.6上连接了 LED2。 我移除了跳线、因此未连接 LED。

    已解决:从器件现在通过 I2C 接收和发送数据。 您的代码起作用。 我确信我的代码现在也能正常工作。

    非常感谢。

    Chris
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很棒的选择,Chris,我不会想到这一点。 我很高兴这一问题得到解决。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我正在使用您提供的代码、我希望从器件加载 SlaveType 和 MasterType 数组、然后退出中断。

    我基本上正在运行此代码、然后进入设置中断的 while 循环。 加载这些寄存器后、我需要该例程来退出中断。

    我要放置在哪里 _disable_interrupt ();或_BIC_SR_register_ON_EXIT;

    我尝试了中断中的一组位置、但它不会从中断中中断。

    任何帮助都很好。

    Chris
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很抱歉,我解决了。

    我刚才添加了 _BIC_SR_REGISTER_ON_EXIT (LPM0_BITS + GIE); //将 LPM0_bits 从0 (SR)中清除
    在_interrupt void USCIAB0TX_ISR (void)中断中、在行之后的情况下(RX_DATA_MODE) I2C_Slave_TransactionDone (ReceiveRegAddr);

    这起作用了。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    听起来不错。 很高兴您找到了它。