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.
大家好、
我正在处理一个项目、在这个项目中、我需要轮询加速计以获取运动数据、但是、当我尝试将 DriverLib 文档中提供的示例代码调整为我的问题时、我遇到了困难。 当我将开发板连接到振荡器时、我注意到以下行为:
C2000:将 MPU 地址写入 I2C 总线
MPU:无 ACK
下面的代码正在尝试请求和读回 MPU-6050的单个寄存器地址。 如果您想查看、我随附了下面的文档 pdf。 有关协议见第34页。
#include "driverlib.h" #include #include #define WHO _AM_I 0x75 #define MPU_ADDRESS 0x68 void initI2C(); __interrupt void i2cFIFOISR(); uint16_t MPU_data; uint16_t status; void main (){ //* Setup C2000 */ Device_init (); Device_initGPIO (); /*为 I2C 设置 GPIO */ GPIO_setPinConfig (GPIO_35_SDAA); GPIO_setPadConfig (35U、GPIO_PIN_TYPE_PULLUP); GPIO_setQualificationMode (35U、GPIO_QUAL_异 步); GPIO_setPinConfig (GPIO_37_SCLA); GPIO_setPadConfig (37U、GPIO_PIN_TYPE_PULLUP); GPIO_setQualificationMode (37U、GPIO_QUAL_异 步); /*设置中断*/ Interrupt_initModule(); Interrupt_initVectorTable(); interrupt_register (INT_I2CA、&i2cFIFOISR); /*调用 i2c 设置函数*/ initI2C(); /*在系统范围内启用中断*/ INTERRUPT_ENABLE (INT_I2CA); EINT; ERTM; I2C_setDataCount (I2CA_BASE、1); while (1){ while (I2C_isBusBusy (I2CA_BASE)){} // I2C_putData (I2CA_BASE、WHO_AM_I); I2C_setConfig (I2CA_BASE、I2C_MASTER_SEND_MODE); I2C_sendStartCondition (I2CA_BASE); 状态= I2C_getStatus (I2CA_BASE); } } void initI2C(){I2C_disableModule(I2CA_BASE) ; /*为具有50%占空比的400kHz 时钟配置*/ I2C_initMaster (I2CA_BASE、DEVICE_SYSCLK_FREQ、100000、I2C_DUTYCYCLE_33); I2C_setBitCount (I2CA_BASE、I2C_BITCOUNT_8); I2C_setSlaveAddress (I2CA_BASE、MPU_ADDRESS); I2C_setEmulationMode (I2CA_BASE、I2C_emulation_free_run); I2C_enableInterrupt (I2CA_BASE、I2C_INT_REG_ACCESS_RDY | I2C_INT_STOP_Condition); I2C_enableFIFO (I2CA_BASE); I2C_clearInterruptStatus (I2CA_BASE、I2C_INT_RXFF | I2C_INT_TXFF); I2C_enableModule (I2CA_BASE); } __interrupt void i2cFIFOISR (){ I2C_InterruptSource 源; Source = I2C_getInterruptSource (I2CA_BASE); 开关(源极){ I2C_INTSRC_REG_ACCESS_RDY 案例: if ((I2C_getStatus (I2CA_BASE)& I2C_STS_NO_ACK)!= 0){ I2C_sendStopCondition (I2CA_BASE); I2C_clearStatus (I2CA_BASE、I2C_STS_NO_ACK); } I2C_setConfig (I2CA_BASE、I2C_MASTER_Receive_MODE); I2C_putData (I2CA_BASE、WHO_AM_I); I2C_sendStartCondition (I2CA_BASE); MPU_DATA = I2C_getData (I2CA_BASE); I2C_sendStopCondition (I2CA_BASE); I2C_setConfig (I2CA_BASE、I2C_MASTER_SEND_MODE); 中断; 情况 I2C_INTSRC_STOP_Condition: I2C_sendStopCondition (I2CA_BASE); MPU_DATA = I2C_getData (I2CA_BASE); 中断; 默认值: MPU_DATA = I2C_getData (I2CA_BASE); I2C_sendNACK (I2CA_BASE); 中断; } interrupt_clearACKGroup (interrupt_ack_group8); }
非常感谢!e2e.ti.com/.../MPU_2D00_6050_5F00_DataSheet_5F00_V3-4.pdf