大家好、我已经能够使用 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。
谢谢。

