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.

[参考译文] MSP430FR2633:MSP430FR2633

Guru**** 2530880 points
Other Parts Discussed in Thread: MSP430F149, MSP430FR2633

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

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

器件型号:MSP430FR2633
主题中讨论的其他器件:MSP430F149

您好!

我目前正在尝试使用 CapTIvate MCU 开发套件与我们的另一台主机 MSP430F149控制器进行通信。

我使用 BSWP 演示板的8按钮来模拟我们的触摸显示屏。

我知道、借助 CapTIvate 设计工具、您可以选择 UART、BulkI2C 或寄存器 I2C 通信模式。

根据您的设计指南、如果我们希望将电容式微控制器 MSP430FR2633与另一个主机处理器配合使用、理想的通信模式将是 寄存器 I2C 模式。

实际上,我的问题是,如果我们不想使用寄存器 I2C 模式,如果我们想使用 MSP430FR2633作为主器件 MSP430F149微控制器的从器件,那么应该如何将 MSP430FR2633初始化为从器件?  

我们的想法是、我们的主机微控制器 MSP430F149 每33毫秒读取一次具有吸引力的 MCU MSP430FR2633、根据所触的按钮、我们的主机微控制器将执行不同的功能。

为了从 MSP430FR2633读取数据、MSP430F149发送带有读取字节的 MSP430FR2633从器件地址。 当电容式 MSP430FR2633接收到地址后、它将发送六个字节的数据、其中包含最近触碰哪个按钮的信息。   

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

    对于 REGISTER_I2C、MSP430FR2633充当从器件。 I2C 主设备需要在从从设备(CapTIvatae)读取之前写入命令 ID。

    技术指南中的这一部分介绍了如何使用 I2C 从驱动器以及打开 I2C 从端口、发送和接收数据的示例。

    software-dl.ti.com/.../ch_library.html

    如果您有任何疑问、请告诉我。

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

    我了解软件中提供的代码示例。 在该代码中、主器件在从 CapTIvate MCU 读取之前发送'Command ID'。
    但我的问题是、我们是否可以仅使用简单的 I2C 通信协议、在该协议中、您无需发送'Command ID'或任何其他字节即可从 CapTIvate MCU 读取。
    理想情况下、如果在 R/W 位设置的情况下发送从地址、从器件将使用来自主器件的时钟发送数据。
    此时、我们仅将数据从 CapTIvate MCU 读取到。

    因此、如果用户轻触任何按钮、我们将根据最近触摸的按钮更新 CapTIvate MCU 的传输缓冲区中的一些值。
    只要主器件 MSP430F149请求仅具有 R/W 位设置的 CapTIvate MCU 从器件地址的数据、我们就希望将数据传输到主器件。

    如果您发送设置了 R/W 位的从器件地址、则电容式 MCU 应向我发送数据。 可以根据我的主循环中触摸的按钮来修改此数据。

    我希望你能理解解释!!!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我使用您提供的链接检查了示例代码、但在我将默认从地址0x0A 发送到 MSP430FR2633后、我没有接收到应答。
    我无法通过 REFISTER I2C 模式获得应答。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Parth、

    主器件可随时从任何存储器地址读取、直至存储器部分结束。 读/写格式如下:I2C-START / ADDR+RW / MEMORY ADDR 高位字节/ MEMORY ADDR 低位字节/ DATA。

    例如以下示例代码:

    ##include "driverlib.h"
    ##include "I2CSlave.h"
    ##include "string.h"
    
    //
    memory_size 以字节为单位定义存储器阵列的大小
    //
    ##define memory_SIZEDebart Dallas/Fort Memoryworth、TX to Roanoke、VA
    //
    g_ui8yArray 是存储器阵列。
    //
    uint8_t g_ui8MemoryArray[memory_size]={0};
    
    //
    I2C_receive_buffer_size 定义 I2C 接收缓冲区的大小
    //
    #define I2C_receive_buffer_size 130
    
    //
    // g_ui8I2CReceiveBuffer 是用于 I2C 接收操作的缓冲区空间。
    //
    uint8_t g_ui8I2CReceiveBuffer[I2C_Receive_buffer_size];
    
    //
    // Req_low_ADDR 定义了一个宏来获取 I2C //
    接收缓冲区中的低地址字节。
    //
    //// REQ_HIGH_ADDR 定义了一个宏来获取 I2C
    //接收缓冲器中的高地址字节。
    //
    //// Req_full_ADDR 定义了一个宏来访问
    //接收缓冲区
    //
    // maining memory_memory 定义宏来从
    接收缓冲区中的//当前地址到内存末尾获取剩余内存。
    //
    // data_TO_write 定义一个宏来获取要写入的数据的指针
    //在 I2C 接收寄存器
    中//
    #define REQ_LOW_ADDR (G_ui8I2CReceiveBuffer[1])
    #define REQ_HIGH_ADDR (g_ui8I2CReceiveBuffer[0])
    #define REQ_FULL_ADDR (((uint16_t) REQ_LOW_ADDR |(((uint16_t) REQ_HIGH_ADDR << 8))
    #define REMAINTED_MEMORY (MEMORY_SIZE - REQ_FULL_ADDR)
    ##define DATA_TO_WRITE (&g_ui8I2CReceiveBuffer[2])
    
    //
    每当
    接收到新的//数据包时,I2C 端口驱动程序都会调用接收处理程序。
    //
    bool receiveHandler (uint16_t ui16Length)
    {
    //
    //更新当前内存位置
    //
    uint8_t *当前内存位置=&g_ui8MemoryArray[REQ_full_ADDR];
    I2CSlave_setTransmitBuffer (pCurrent MemoryLocation、Remain_memory);
    
    //
    //如果数据包中有数据,请将其写入内存
    //
    IF (ui16Length > 2)
    {
    memcpy (pCurrent MemoryLocation、data_TO_WRITE、(ui16Length -2));
    }
    
    //
    //无需唤醒 CPU,返回 false 退出睡眠
    //
    返回 false;
    }
    
    void errorHandler (uint8_t ui8Error)
    {
    return;
    }
    
    //
    // g_myI2CPort 指定传递
    给 I2CSlave_openPort()的 I2C 从端口配置。
    //
    const tI2CSlavePort g_myI2CPort =
    {
    .pbReceiveCallback = ReceiveHandler、
    .pvErrorCallback =错误处理程序(&R)、
    ui16ReceiveBufferSize = I2C_Receive_buffer_size、
    .pReceiveBuffer = g_ui8I2CReceiveBuffer、
    .bSendReadLengthFirst = false
    };
    
    void main (void)
    {
    WDT_A_HOLD (WDT_A_base);
    PMM_unlockLPM5 ();
    
    //
    //分别将 P1.6和 P1.7设置为 UCB0SDA 和 UCB.S
    //
    GPIO_setPeripheralModuleFunctionOutputPin (GPIO_PORT_P1、GPIO_PIN2、GPIO_secondary 模块功能);
    GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P1、GPIO_PIN3、GPIO_secondary 模块_function);
    
    //
    //启用屏蔽的中断
    //
    _bis_SR_register (GIE);
    
    //
    //打开 I2C 从端口
    //
    I2CSlave_openPort (&g_myI2CPort);
    I2CSlave_setTransmitBuffer (g_ui8MemoryArray、memory_size);
    
    //
    //应用程序后台循环
    //
    while (1)
    {
    //
    //进入 LPM3
    //
    LPM3;
    }
    } 

    如果您仍然遇到与 MSP430FR2633作为从器件进行通信的问题、请告诉我、我们可以查看您的代码。

    谢谢、

    是的