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.

[参考译文] MSP432E401Y:通过 I2C 向器件发送数据

Guru**** 2581345 points
Other Parts Discussed in Thread: MSP432E401Y

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/718494/msp432e401y-transmit-data-through-i2c-to-a-device

器件型号:MSP432E401Y

大家好、我已经能够使用 MSP432E401Y Launchpad 从 MPU6050获取数据了、我使用简单的传输代码实现了这一目的、在该代码中、中断被配置为检测传输和接收何时开始设置或结束、  我想不使用 I2C1_base 的中断服务例程从 MPU6050获取数据、而是希望从主循环发送和接收数据(while (1))、我过去使用 MSP432和 TM4C129执行过这一操作、 但是、当我尝试使用 MSP432E401Y 执行此操作时、我会遇到 SoM 问题:

在此代码(如下所示)中,我想发送到 MPU6050:{0x6b,0x00},猝发发送将是最佳选择:

#include 

/*标准包括*/
#include 
#include 

#define SLAVE_ADDRESS 0x68

uint8_t sendData[3]={0x6B、0x00、0x3B};

int main (void)
{
uint32_t systemClock;
系统时钟= MAP_SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz | SYSCTL_OSC_MAIN |
SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480)、
120000000);


MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOG);
MAP_GPIOPinConfigure (GPIO_PG0_I2C1SCL);
MAP_GPIOPinConfigure (GPIO_PG1_I2C1SDA);
MAP_GPIOPinTypeI2C (GPIO_PORTG_BASE、GPIO_PIN_1);
MAP_GPIOPinTypeI2CSCL (GPIO_PORTG_BASE、GPIO_PIN_0);
GPIOG->PUR |=(GPIO_PIN_1 | GPIO_PIN_0);
MAP_SysCtlPeripheralEnable (SYSCTL_Periph_I2C1);

MAP_I2CMasterInitExpClk (I2C1_base、systemClock、false);


while (1)
{

I2CMasterSlaveAddrSet (I2C1_base、slave_address、false);
while (I2CMasterBusy (I2C1_base)){};
I2CMasterControl (I2C1_base、I2C_MASTER_CMD_BURST_SEND_START);
I2CMasterDataPut (I2C1_base、sendData[0]);
while (I2CMasterBusy (I2C1_base)){};
I2CMasterControl (I2C1_base、I2C_MASTER_CMD_BURST_SEND_FINISH);
I2CMasterDataPut (I2C1_base、sendData[1]);
while (I2CMasterBusy (I2C1_base)){};
SysCtlDelay (1000);
}
}

在这里、我没有问题、使用逻辑分析仪、我可以看到发送的数据正常。

当我尝试发送超过2个值时、出现问题、在本例中({0x6B、0x00、0x3B}):

while (1)
{
I2CMasterSlaveAddrSet (I2C1_base、slave_address、false);
while (I2CMasterBusy (I2C1_base)){};
I2CMasterDataPut (I2C1_base、sendData[0]);
I2CMasterControl (I2C1_base、I2C_MASTER_CMD_BURST_SEND_START);
pui32DataRx[0]= I2CSlaveDataGet (I2C1_base);

while (I2CMasterBusy (I2C1_base)){};
I2CMasterDataPut (I2C1_base、sendData[1]);
I2CMasterControl (I2C1_base、I2C_MASTER_CMD_BURST_SEND_CONT);
pui32DataRx[0]= I2CSlaveDataGet (I2C8_BASE);

while (I2CMasterBusy (I2C1_base)){};
I2CMasterDataPut (I2C1_base、sendData[2]);
I2CMasterControl (I2C1_base、I2C_MASTER_CMD_BURST_SEND_FINISH);
pui32DataRx[0]= I2CSlaveDataGet (I2C8_BASE);

while (I2CMasterBusy (I2C1_base)){};
SysCtlDelay (1000);
} 

在逻辑分析仪中、我得到了以下结果:

如您所见、数据帧没有0x6B、是否有人知道导致此问题的原因是什么?

还有一点、正如我说过的、MPU6050工作正常、我以前使用的是 TM4C129、MSP432和 Arduino 板、所有这些都不使用 ISR。

谢谢。

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

    Josue、

     在第二组代码中,您在执行 I2CSLaveDataGet ()之前发送数据,而无需等待数据被发送出去。 我认为这会缩短数据传输时间。  查看 i2c_mastermode_simple_transfer.c 示例。 在其中,您将在 I2CMasterDataPut()/ I2CMasterControl()命令之后看到以下内容:

        /*等待发送所有字节*/

        while (setI2CState = I2C_MASTER_TX)

        {

        }

    如果删除 I2CSlaveDataGet (),这是否解决了您的问题?

    -Bob L.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Josue、
    有任何反馈吗? 您是否能够解决您的问题?
    Bob L.
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Bob、您好、感谢您的回答、很抱歉我们的回答很晚。

    由于某种原因、我无法在不中断的情况下实现磁力计数据采集、我从一开始就尝试使用计时器以恒定频率采集来自磁力计的数据、 为此、我需要 I2C 通信独立于 ISR、就像我在 MSP432P4和 TM4C129E 上所做的那样。 在尝试了很多方法之后、我意识到在不使用 I2C 的 ISR (I2C1_IRQHandler)的情况下无法实现我的目标、因此我这样做了:

    /* DriverLib 包括*/
    #include 
    
    /*标准包括*/
    #include 
    #include 
    
    /*定义 I2C 总线参数*/
    #define SLAVE_ADDRESS 0x1E
    
    
    //*定义 I2C 状态机*
    /#define I2C_MASTER_IDLE 0x0
    #define I2C_MASTER_TX 0x1
    #define I2C_MASTER_RX 0x2
    
    // I2C 数据和状态机的变量*/
    uint16_t sendData[2];
    short getData1[6];
    get2[get2][
    
    短整型;getData6];get2[get2[get2]]
    getData5[6];
    uint8_t setI2CState;
    uint8_t dataIndex;
    
    uint8_t dataIndex_RX;
    uint8_t dataIndex_TX;
    uint32_t aaa;
    int I2C_NUM_DATA_TX = 2;
    int I2C_NUM_DATA_RX = 6;
    短 EJES1[3];
    短 EJES2[3];
    短 EJES3[3];
    短 EJES4[3];
    短接 EJES5[3];
    uint32_t systemClock;
    uint32_t g_ui32Flags = 0;
    uint32_t g_ui32Flags2 = 0;
    
    int flag = 0;
    int32_t D;
    
    void UART0_IRQHandler (void)
    {
    uint32_t ui32Status;
    ui32Status = MAP_UARTIntStatus (UART0_BASE、TRUE);
    MAP_UARTIntClear (UART0_BASE、ui32Status);
    D = UARTCharGetNonBlocking (UART0_BASE);
    if (D = 101)
    {
    Flag = 1;
    }
    否则、如果(D = 102)
    {
    标志= 0;
    }
    }
    
    void I2C1_IRQHandler (void)
    {
    uint32_t getIntStatus;
    
    getIntStatus = MAP_I2CMasterIntStatusEx (I2C1_base、true);
    aaa = getIntStatus;
    MAP_I2CMasterIntClearEx (I2C1_base、getIntStatus);
    
    if ((getIntStatus)=I2C_MASTER_INT_DATA)
    {
    if ((setI2CState = I2C_MASTER_TX)&&(dataIndex_TX < I2C_NUM_DATA_TX-2))
    {
    dataIndex_TX++;
    MAP_I2CMasterDataPut (I2C0_BASE、sendData[dataIndex_TX]);
    MAP_I2CMasterDataPut (I2C2_base、sendData[dataIndex_TX]);
    MAP_I2CMasterDataPut (I2C3_base、sendData[dataIndex_TX]);
    MAP_I2CMasterDataPut (I2C4_base、sendData[dataIndex_TX]);
    MAP_I2CMasterDataPut (I2C1_base、sendData[dataIndex_TX]);
    MAP_I2CMasterControl (I2C0_BASE、I2C_MASTER_CMD_BURST_SEND_CONT);
    MAP_I2CMasterControl (I2C2_base、I2C_MASTER_CMD_BURST_SEND_CONT);
    MAP_I2CMasterControl (I2C3_base、I2C_MASTER_CMD_BURST_SEND_CONT);
    MAP_I2CMasterControl (I2C4_base、I2C_MASTER_CMD_BURST_SEND_CONT);
    MAP_I2CMasterControl (I2C1_base、I2C_MASTER_CMD_BURST_SEND_CONT);
    }
    否则、如果((setI2CState = I2C_MASTER_TX)&&(dataIndex_TX = I2C_NUM_DATA_TX-2))
    {
    dataIndex_TX++;
    MAP_I2CMasterDataPut (I2C0_BASE、sendData[dataIndex_TX]);
    MAP_I2CMasterDataPut (I2C2_base、sendData[dataIndex_TX]);
    MAP_I2CMasterDataPut (I2C3_base、sendData[dataIndex_TX]);
    MAP_I2CMasterDataPut (I2C4_base、sendData[dataIndex_TX]);
    MAP_I2CMasterDataPut (I2C1_base、sendData[dataIndex_TX]);
    MAP_I2CMasterControl (I2C0_BASE、I2C_MASTER_CMD_BURST_SEND_FINISH);
    MAP_I2CMasterControl (I2C2_base、I2C_MASTER_CMD_BURST_SEND_FINISH);
    MAP_I2CMasterControl (I2C3_base、I2C_MASTER_CMD_BURST_SEND_FINISH);
    MAP_I2CMasterControl (I2C4_base、I2C_MASTER_CMD_BURST_SEND_FINISH);
    MAP_I2CMasterControl (I2C1_base、I2C_MASTER_CMD_BURST_SEND_FINISH);
    }
    
    if ((setI2CState = I2C_MASTER_RX)&&(dataIndex_RX < I2C_NUM_DATA_RX-1))
    {
    getData2[dataIndex_RX]= map_I2CMasterDataGet (I2C0_BASE);
    getData3[dataIndex_RX]= map_I2CMasterDataGet (I2C2_base);
    getData4[dataIndex_RX]= map_I2CMasterDataGet (I2C3_base);
    getData5[dataIndex_RX]= map_I2CMasterDataGet (I2C4_base);
    getData1[dataIndex_RX]= map_I2CMasterDataGet (I2C1_base);
    MAP_I2CMasterControl (I2C0_BASE、I2C_MASTER_CMD_BURST_Receive_CONT);
    MAP_I2CMasterControl (I2C2_base、I2C_MASTER_CMD_BURST_Receive_cont);
    MAP_I2CMasterControl (I2C3_base、I2C_MASTER_CMD_BURST_Receive_CONT);
    MAP_I2CMasterControl (I2C4_base、I2C_MASTER_CMD_BURST_Receive_cont);
    MAP_I2CMasterControl (I2C1_base、I2C_MASTER_CMD_BURST_Receive_CONT);
    dataIndex_RX++;
    }
    否则、如果((setI2CState = I2C_MASTER_RX)&&(dataIndex_RX = I2C_NUM_DATA_RX-1))
    {
    getData2[dataIndex_RX]= map_I2CMasterDataGet (I2C0_BASE);
    getData3[dataIndex_RX]= map_I2CMasterDataGet (I2C2_base);
    getData4[dataIndex_RX]= map_I2CMasterDataGet (I2C3_base);
    getData5[dataIndex_RX]= map_I2CMasterDataGet (I2C4_base);
    getData1[dataIndex_RX]= map_I2CMasterDataGet (I2C1_base);
    MAP_I2CMasterControl (I2C0_BASE、I2C_MASTER_CMD_BURST_Receive_finish);
    MAP_I2CMasterControl (I2C2_base、I2C_MASTER_CMD_BURST_Receive_finish);
    MAP_I2CMasterControl (I2C3_base、I2C_MASTER_CMD_BURST_Receive_finish);
    MAP_I2CMasterControl (I2C4_base、I2C_MASTER_CMD_BURST_Receive_finish);
    MAP_I2CMasterControl (I2C1_base、I2C_MASTER_CMD_BURST_Receive_finish);
    dataIndex_RX++;
    }
    }
    
    if ((getIntStatus)=I2C_MASTER_INT_STOP)
    {
    setI2CState = I2C_MASTER_IDLE;
    }
    
    if ((getIntStatus)== 65)
    {
    setI2CState = I2C_MASTER_IDLE;
    }
    }
    
    void configureMag()
    {
    setI2CState = I2C_MASTER_TX;
    dataIndex_TX = 0;
    sendData[0]= 0x00;
    sendData[1]= 0x70;
    MAP_I2CMasterSlaveAddrSet (I2C0_BASE、SLAVE_ADDRESS、FALSE);
    MAP_I2CMasterSlaveAddrSet (I2C2_base、slave_address、false);
    MAP_I2CMasterSlaveAddrSet (I2C3_base、SLAVE_ADDRESS、false);
    MAP_I2CMasterSlaveAddrSet (I2C4_base、slave_address、false);
    MAP_I2CMasterSlaveAddrSet (I2C1_base、SLAVE_ADDRESS、false);
    MAP_I2CMasterDataPut (I2C0_BASE、sendData[dataIndex_TX]);
    MAP_I2CMasterDataPut (I2C2_base、sendData[dataIndex_TX]);
    MAP_I2CMasterDataPut (I2C3_base、sendData[dataIndex_TX]);
    MAP_I2CMasterDataPut (I2C4_base、sendData[dataIndex_TX]);
    MAP_I2CMasterDataPut (I2C1_base、sendData[dataIndex_TX]);
    MAP_I2CMasterControl (I2C0_BASE、I2C_MASTER_CMD_BURST_SEND_START);
    MAP_I2CMasterControl (I2C2_base、I2C_MASTER_CMD_BURST_SEND_START);
    MAP_I2CMasterControl (I2C3_base、I2C_MASTER_CMD_BURST_SEND_START);
    MAP_I2CMasterControl (I2C4_base、I2C_MASTER_CMD_BURST_SEND_START);
    MAP_I2CMasterControl (I2C1_base、I2C_MASTER_CMD_BURST_SEND_START);
    while (setI2CState = I2C_MASTER_TX){}
    MAP_SysCtlDelay (1000);
    
    setI2CState = I2C_MASTER_TX;
    dataIndex_TX = 0;
    sendData[0]= 0x01;
    sendData[1]= 0x20;
    MAP_I2CMasterSlaveAddrSet (I2C0_BASE、SLAVE_ADDRESS、FALSE);
    MAP_I2CMasterSlaveAddrSet (I2C2_base、slave_address、false);
    MAP_I2CMasterSlaveAddrSet (I2C3_base、SLAVE_ADDRESS、false);
    MAP_I2CMasterSlaveAddrSet (I2C4_base、slave_address、false);
    MAP_I2CMasterSlaveAddrSet (I2C1_base、SLAVE_ADDRESS、false);
    MAP_I2CMasterDataPut (I2C0_BASE、sendData[dataIndex_TX]);
    MAP_I2CMasterDataPut (I2C2_base、sendData[dataIndex_TX]);
    MAP_I2CMasterDataPut (I2C3_base、sendData[dataIndex_TX]);
    MAP_I2CMasterDataPut (I2C4_base、sendData[dataIndex_TX]);
    MAP_I2CMasterDataPut (I2C1_base、sendData[dataIndex_TX]);
    MAP_I2CMasterControl (I2C0_BASE、I2C_MASTER_CMD_BURST_SEND_START);
    MAP_I2CMasterControl (I2C2_base、I2C_MASTER_CMD_BURST_SEND_START);
    MAP_I2CMasterControl (I2C3_base、I2C_MASTER_CMD_BURST_SEND_START);
    MAP_I2CMasterControl (I2C4_base、I2C_MASTER_CMD_BURST_SEND_START);
    MAP_I2CMasterControl (I2C1_base、I2C_MASTER_CMD_BURST_SEND_START);
    while (setI2CState = I2C_MASTER_TX){}
    MAP_SysCtlDelay (1000);
    
    setI2CState = I2C_MASTER_TX;
    dataIndex_TX = 0;
    sendData[0]= 0x02;
    sendData[1]= 0x10;
    MAP_I2CMasterSlaveAddrSet (I2C0_BASE、SLAVE_ADDRESS、FALSE);
    MAP_I2CMasterSlaveAddrSet (I2C2_base、slave_address、false);
    MAP_I2CMasterSlaveAddrSet (I2C3_base、SLAVE_ADDRESS、false);
    MAP_I2CMasterSlaveAddrSet (I2C4_base、slave_address、false);
    MAP_I2CMasterSlaveAddrSet (I2C1_base、SLAVE_ADDRESS、false);
    MAP_I2CMasterDataPut (I2C0_BASE、sendData[dataIndex_TX]);
    MAP_I2CMasterDataPut (I2C2_base、sendData[dataIndex_TX]);
    MAP_I2CMasterDataPut (I2C3_base、sendData[dataIndex_TX]);
    MAP_I2CMasterDataPut (I2C4_base、sendData[dataIndex_TX]);
    MAP_I2CMasterDataPut (I2C1_base、sendData[dataIndex_TX]);
    MAP_I2CMasterControl (I2C0_BASE、I2C_MASTER_CMD_BURST_SEND_START);
    MAP_I2CMasterControl (I2C2_base、I2C_MASTER_CMD_BURST_SEND_START);
    MAP_I2CMasterControl (I2C3_base、I2C_MASTER_CMD_BURST_SEND_START);
    MAP_I2CMasterControl (I2C4_base、I2C_MASTER_CMD_BURST_SEND_START);
    MAP_I2CMasterControl (I2C1_base、I2C_MASTER_CMD_BURST_SEND_START);
    while (setI2CState = I2C_MASTER_TX){}
    map_SysCtlDelay (1000);
    }
    
    void confUART()
    {
    MAP_SysCtlPeripheralEnable (SYSCTL_Periph_UART0);
    MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
    // MAP_IntMasterEnable ();
    GPIOPinConfigure (GPIO_PA0_U0RX);
    GPIOPinConfigure (GPIO_PA1_U0TX);
    MAP_GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1);
    MAP_UARTConfigSetExpClk (UART0_BASE、系统时钟、115200、
    (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
    UART_CONFIG_PAR_NONE));
    MAP_IntEnable (INT_UART0);
    MAP_UARTIntEnable (UART0_BASE、UART_INT_RX | UART_INT_RT);
    }
    
    void confI2CMag ()
    {
    MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOG);
    MAP_GPIOPinConfigure (GPIO_PG0_I2C1SCL);
    MAP_GPIOPinConfigure (GPIO_PG1_I2C1SDA);
    MAP_GPIOPinTypeI2C (GPIO_PORTG_BASE、GPIO_PIN_1);
    MAP_GPIOPinTypeI2CSCL (GPIO_PORTG_BASE、GPIO_PIN_0);
    GPIOG->PUR |=(GPIO_PIN_1 | GPIO_PIN_0);
    MAP_SysCtlPeripheralEnable (SYSCTL_Periph_I2C1);
    
    MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB);
    MAP_GPIOPinConfigure (GPIO_PB2_I2C0SCL);
    MAP_GPIOPinConfigure (GPIO_PB3_I2C0SDA);
    MAP_GPIOPinTypeI2C (GPIO_PORTB_BASE、GPIO_PIN_3);
    MAP_GPIOPinTypeI2CSCL (GPIO_PORTB_BASE、GPIO_PIN_2);
    GPIOB->PUR |=(GPIO_PIN_3 | GPIO_PIN_2);
    MAP_SysCtlPeripheralEnable (SYSCTL_Periph_I2C0);
    
    MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPION);
    MAP_GPIOPinConfigure (GPIO_PN5_I2C2SCL);
    MAP_GPIOPinConfigure (GPIO_PN4_I2C2SDA);
    MAP_GPIOPinTypeI2C (GPIO_PORTN_BASE、GPIO_PIN_4);
    MAP_GPIOPinTypeI2CSCL (GPIO_PORTN_BASE、GPIO_PIN_5);
    GPion->PUR |=(GPIO_PIN_5 | GPIO_PIN_4);
    MAP_SysCtlPeripheralEnable (SYSCTL_Periph_I2C2);
    
    MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOK);
    MAP_GPIOPinConfigure (GPIO_PK4_I2C3SCL);
    MAP_GPIOPinConfigure (GPIO_PK5_I2C3SDA);
    MAP_GPIOPinTypeI2C (GPIO_PORTK_base、GPIO_PIN_5);
    MAP_GPIOPinTypeI2CSCL (GPIO_PORTK_BASE、GPIO_PIN_4);
    GPIOIN->PUR |=(GPIO_PIN_5 | GPIO_PIN_4);
    MAP_SysCtlPeripheralEnable (SYSCTL_Periph_I2C3);
    
    
    MAP_GPIOPinConfigure (GPIO_PK6_I2C4SCL);
    MAP_GPIOPinConfigure (GPIO_PK7_I2C4SDA);
    MAP_GPIOPinTypeI2C (GPIO_PORTK_base、GPIO_PIN_7);
    MAP_GPIOPinTypeI2CSCL (GPIO_PORTK_BASE、GPIO_PIN_6);
    GPIOK->PUR |=(GPIO_PIN_7 | GPIO_PIN_6);
    MAP_SysCtlPeripheralEnable (SYSCTL_Periph_I2C4);
    
    
    MAP_I2CMasterInitExpClk (I2C0_BASE、systemClock、false);
    MAP_I2CMasterInitExpClk (I2C2_base、systemClock、false);
    MAP_I2CMasterInitExpClk (I2C3_base、systemClock、false);
    MAP_I2CMasterInitExpClk (I2C4_base、systemClock、false);
    MAP_I2CMasterInitExpClk (I2C1_base、systemClock、false);
    
    MAP_I2CMasterIntEnableEx (I2C1_base、I2C_MASTER_INT_NACK |
    I2C_MASTER_INT_STOP |
    I2C_MASTER_INT_DATA);
    setI2CState = I2C_MASTER_IDLE;
    MAP_IntEnable (INT_I2C1);
    }
    
    void readI2cMag()
    {
    setI2CState = I2C_MASTER_TX;
    MAP_I2CMasterSlaveAddrSet (I2C0_BASE、SLAVE_ADDRESS、FALSE);
    MAP_I2CMasterSlaveAddrSet (I2C2_base、slave_address、false);
    MAP_I2CMasterSlaveAddrSet (I2C3_base、SLAVE_ADDRESS、false);
    MAP_I2CMasterSlaveAddrSet (I2C4_base、slave_address、false);
    MAP_I2CMasterSlaveAddrSet (I2C1_base、SLAVE_ADDRESS、false);
    
    MAP_I2CMasterControl (I2C0_BASE、I2C_MASTER_CMD_SINGLE_SEND);
    MAP_I2CMasterDataPut (I2C0_BASE、0x03);
    MAP_I2CMasterControl (I2C2_base、I2C_MASTER_CMD_SINGLE_SEND);
    MAP_I2CMasterDataPut (I2C2_base、0x03);
    MAP_I2CMasterControl (I2C3_base、I2C_MASTER_CMD_SINGLE_SEND);
    MAP_I2CMasterDataPut (I2C3_base、0x03);
    MAP_I2CMasterControl (I2C4_base、I2C_MASTER_CMD_SINGLE_SEND);
    MAP_I2CMasterDataPut (I2C4_base、0x03);
    MAP_I2CMasterControl (I2C1_base、I2C_MASTER_CMD_SINGLE_SEND);
    MAP_I2CMasterDataPut (I2C1_base、0x03);
    while (setI2CState = I2C_MASTER_TX){}
    
    setI2CState = I2C_MASTER_RX;
    dataIndex_RX = 0;
    MAP_I2CMasterSlaveAddrSet (I2C0_BASE、SLAVE_ADDRESS、TRUE);
    MAP_I2CMasterSlaveAddrSet (I2C2_base、slave_address、true);
    MAP_I2CMasterSlaveAddrSet (I2C3_base、SLAVE_ADDRESS、TRUE);
    MAP_I2CMasterSlaveAddrSet (I2C4_base、slave_address、true);
    MAP_I2CMasterSlaveAddrSet (I2C1_base、SLAVE_ADDRESS、TRUE);
    MAP_I2CMasterControl (I2C0_BASE、I2C_MASTER_CMD_BURST_Receive_start);
    MAP_I2CMasterControl (I2C2_base、I2C_MASTER_CMD_BURST_Receive_start);
    MAP_I2CMasterControl (I2C3_base、I2C_MASTER_CMD_BURST_Receive_start);
    MAP_I2CMasterControl (I2C4_base、I2C_MASTER_CMD_BURST_Receive_start);
    MAP_I2CMasterControl (I2C1_base、I2C_MASTER_CMD_BURST_Receive_start);
    
    while (setI2CState == I2C_MASTER_RX){}
    /*
    EJES1[0]= getData1[0]<<8 | getData1[1];
    EJES1[1]= getData1[2]<<8 | getData1[3];
    EJES1[2]= getData1[4]<<8 | getData1[5];
    
    EJES2[0]= getData2[0]<<8 | getData2[1];
    EJES2[1]= getData2[2]<<8 | getData2[3];
    EJES2[2]= getData2[4]<<8 | getData2[5];
    
    EJES3[0]= getData3[0]<<8 | getData3[1];
    EJES3[1]= getData3[2]<<8 | getData3[3];
    EJES3[2]= getData3[4]<<8 | getData3[5];
    
    EJES4[0]= getData4[0]<<8 | getData4[1];
    EJES4[1]= getData4[2]<<8 | getData4[3];
    EJES4[2]= getData4[4]<<8 | getData4[5];
    
    EJES5[0]= getData5[0]<<8 | getData5[1];
    EJES5[1]= getData5[2]<<8 | getData5[3];
    EJES5[2]= getData5[4]<<8 | getData5[5];
    *
    UARTCharPut (UART0_BASE、getData1[0]);
    UARTCharPut (UART0_BASE、getData1[1]);
    UARTCharPut (UART0_BASE、getData1[2]);
    UARTCharPut (UART0_BASE、getData1[3]);
    UARTCharPut (UART0_BASE、getData1[4]);
    UARTCharPut (UART0_BASE、getData1[5]);
    
    UARTCharPut (UART0_BASE、getData2[0]);
    UARTCharPut (UART0_BASE、getData2[1]);
    UARTCharPut (UART0_BASE、getData2[2]);
    UARTCharPut (UART0_BASE、getData2[3]);
    UARTCharPut (UART0_BASE、getData2[4]);
    UARTCharPut (UART0_BASE、getData2[5]);
    
    UARTCharPut (UART0_BASE、getData3[0]);
    UARTCharPut (UART0_BASE、getData3[1]);
    UARTCharPut (UART0_BASE、getData3[2]);
    UARTCharPut (UART0_BASE、getData3[3]);
    UARTCharPut (UART0_BASE、getData3[4]);
    UARTCharPut (UART0_BASE、getData3[5]);
    
    UARTCharPut (UART0_BASE、getData4[0]);
    UARTCharPut (UART0_BASE、getData4[1]);
    UARTCharPut (UART0_BASE、getData4[2]);
    UARTCharPut (UART0_BASE、getData4[3]);
    UARTCharPut (UART0_BASE、getData4[4]);
    UARTCharPut (UART0_BASE、getData4[5]);
    
    UARTCharPut (UART0_BASE、getData5[0]);
    UARTCharPut (UART0_BASE、getData5[1]);
    UARTCharPut (UART0_BASE、getData5[2]);
    UARTCharPut (UART0_BASE、getData5[3]);
    UARTCharPut (UART0_BASE、getData5[4]);
    UARTCharPut (UART0_BASE、getData5[5]);
    G_ui32Flags2=0;
    }
    //void
    TIMER0A_IRQHandler (void)
    {
    MAP_TimerIntClear (TIMER0_BASE、TIMER_TINA_TIMEOUT);
    
    if (g_ui32Flags =0)
    {
    G_ui32Flags = 1;
    G_ui32Flags2=1;
    }
    否则、如果(g_ui32Flags = 1)
    {
    G_ui32Flags = 0;
    G_ui32Flags2=0;
    }
    
    GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_0、g_ui32Flags);
    
    }
    
    int main (void)
    {
    
    系统时钟= MAP_SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz | SYSCTL_OSC_MAIN |
    SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480)、
    120000000);
    
    MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPION);
    MAP_GPIOPinTypeGPIOOutput (GPIO_PORTN_BASE、GPIO_PIN_0);
    
    confI2CMag();
    configureMag();
    confUART ();
    
    //----------------------------------------- //
    MAP_SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0);
    MAP_IntMasterEnable();
    MAP_TimerConfigure (TIMER0_BASE、TIMER_CFG_PERIODICRACASE);
    MAP_TimerLoadSet (TIMER0_BASE、TIMER_A、系统时钟/ 100);
    MAP_IntEnable (INT_TIMER0A);
    MAP_TimerIntEnable (TIMER0_BASE、TIMER_TINA_TIMEOUT);
    MAP_TimerEnable (TIMER0_BASE、TIMER_A);
    //--------------- //
    
    while (1)
    {
    if (g_ui32Flags2 = 1 &&标志= 1)
    {
    readI2cMag();
    }
    }
    
    

    这是一个非常大的代码、因为它使 MSP432Y1能够使用计时器进行恒定采集(50SPS)、从而获取5个磁体的数据并通过 UART 将数据发送到 PC。 基本上、它使用 I2C1_IRQHandler 通过 I2C 总线读取和写入数据、还可以确定传输和接收何时结束、计时器会持续触发该操作、因此在结束时、我会以不同的方式提交我的目的。

    感谢你的帮助。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回答。 很高兴找到一个可行的解决方案。
    -Bob L.